If you already have Windows 10 installed, you can skip to step 8!

Step 1:
Download Windows support software via Boot Camp Assistant

Step 2:
Create a bootable USB drive with the Windows 10 installer: Several links and guides:
https://www.microsoft.com/en-us/software-download/windows10

https://taig.medium.com/create-a-bootable-windows-10-usb-from-macos-395773d4782e

https://www.freecodecamp.org/news/how-make-a-windows-10-usb-using-your-mac-build-a-bootable-iso-from-your-macs-terminal/

https://rufus.ie/ru/

 

Step 3:
Create a new partition for Windows (Exfat) via Disk Utility.

Step 4:
Disable integrity verification: "csrutil disable" in Terminal in recovery mode.

Step 5:
Install GPT disk: https://sourceforge.net/projects/gptfdisk/

Step 6:
Install Windows 10 by pressing "Alt" at startup to boot from the Windows 10 installer bootable USB drive. Format the partition as NTFS.

Step 7:
Install the Cirrus driver downloaded from Windows support software. Install the AMD driver and other drivers by connecting to the internet. Click Settings — Update.

Step 8:
Fixing no sound on Windows 10 (Macbook Pro) where all steps to solve this problem are described

Forum link: https://egpu.io/forums/pc-setup/fix-dsdt-override-to-correct-error-12/

Article translation:

[GUIDE] DSDT override fix for eGPU Error 12 (Windows only)

Introduction

The Windows system DSDT table root bridge definition (ACPI PNP0A08 or PNP0A03) is typically limited to reserved 32-bit space (less than 4 GB), which should be large enough to accommodate the laptop's PCIe devices. The TOLUD watermark value is then set and locked in the system firmware. Windows OS respects the root bridge definition and will allocate PCIe devices within its limits. macOS ignores root bridge limitations, as does Linux when booted with the 'pci=noCRS' parameter. Neither of these OSes require DSDT override and can freely allocate devices in the huge 64-bit PCIe address space.

 

When installing an eGPU in Windows Device Manager, Error 12 may occur (This device cannot find enough free resources that it can use), making the eGPU inoperable. This may indicate insufficient 32-bit address space to accommodate the eGPU. The eGPU requires a relatively large PCIe configuration space for allocation. Reducing TOLUD by lowering RAM to 2 GB is a somewhat impractical workaround. The definitive solution is provided below.

 

This three-step solution removes Windows' limitation on 32-bit PCIe allocation to eliminate eGPU Error 12:

Step 1. Create a dsdt-modified.aml DSDT file with a 36-bit root bridge
Step 2. Load the dsdt-modified.aml file as a registry override or in-memory replacement
Step 3. Confirm success with the 'Large Memory' region in Device ManagermacOS users: Instead, refer to Mikeal's article describing these steps, titled Windows 10 — Clover DSDT memory override [UEFI Windows only on Macbooks].

Step 1. Create a dsdt-modified.aml DSDT file with a 36-bit root bridge

i. Download and install the necessary tools:

Windows Binary Tools (WBT — Dec 2016) extracted to the c:\dsdt directory. [newer WBT versions have parsing bugs].
Windows Driver Kit (WDK), which contains Windows ASL Compiler (asl.exe).
Notepad++ text editor with Search->Goto (line) menu for quick line editing in case of asl or iasl compilation failure below

ii. Copy the WDK ASL compiler to the c:\dsdt directory. To do this, open Command Prompt (run as administrator), then copy and paste the commands below.

 

mkdir c:\dsdt
c: & cd \dsdt
set 64bit_OS_asl="C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify\asl.exe"
set 32bit_OS_asl="C:\Program Files (x86)\Windows Kits\10\Tools\x86\ACPIVerify\asl.exe"
copy /y %32bit_OS_asl% c:\dsdt > nul & copy /y %64bit_OS_asl% c:\dsdt > nul
if not exist c:\dsdt\asl.exe echo ERROR: Failed to copy asl.exe to c:\dsdt

 

iii. Dump ACPI tables to disk files (dsdt.asl and dsdt.dat) using these commands in Command Prompt (run as administrator). The created dsdt.asl is copied here as dsdt-modified.asl, which will be used later for making necessary changes.

c: & cd \dsdt
acpidump -b -z
asl /u dsdt.dat
copy dsdt.asl dsdt-modified.asl

iv. Now you can choose either the Intel method or the Microsoft method (with the blue working file dsdt-modified.dsl or purple dsdt-modified.asl respectively) to generate the dsdt-modified.aml file, or even try both methods for maximum success. Consider:

— For non-Lenovo systems, use the Intel method, as their DSDT typically has an Intel creation signature.

— Lenovo Thinkpad X220, T420, W530, T540P and probably other Lenovo Thinkpad systems with 2nd-4th gen i-cores are known to require the Microsoft method. The Intel method causes "ACPI BIOS ERROR" when booting Windows.

 

OPTION 1: Use the Intel method

i. Save this file >refs.txt< to the c:\dsdt folder. What is it used for?

From tonymacx86: The iasl disassembler attempts to determine the number of arguments [for unresolved symbols not defined in any file], but often does so incorrectly. You can fix this by providing external declarations in a text file refs.txt. It contains some common (and not so common) missing symbols. …

 

ii. From Command Prompt (admin) decompile dsdt.dat to dsdt.dsl. The refs.txt file is used here. dsdt.dsl is then copied as dsdt-modified.dsl, which we will make the necessary changes to.

c: & cd \dsdt
iasl -da -dl -fe refs.txt dsdt.dat
copy dsdt.dsl dsdt-modified.dsl

iii. Using Notepad++, open the resulting file c:\dsdt\dsdt-modified.dsl and search for ResourceProducer. Below it will be a series of "DWordMemory" resource entries. Under the last DWordMemory entry in this area, typically above the _CRS method, add a 'QWordMemory' (64-bit) entry as shown below. The range is chosen in the 36-bit range (< 64GB) to maintain compatibility with PAE-compatible 32-bit Windows. The location above 48GB was chosen to ease issues with systems equipped with 32GB. Here we use the range from 48.5 GB to 56.25 GB. When systems start shipping with 64 GB RAM, this setting will need to be changed to use a 64-bit address.

DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
   0x00000000,         // Granularity
   0x000A0000,         // Range Minimum
   0x000BFFFF,         // Range Maximum
   0x00000000,         // Translation Offset
   0x00020000,         // Length
   ,, , AddressRangeMemory, TypeStatic)
// - ADD THIS BLOCK RIGHT HERE: ---------------------------------------------------------------------------
QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
   0x0000000000000000, // Granularity
   0x0000000C20000000, // Range Minimum,  set it to 48.5GB
   0x0000000E0FFFFFFF, // Range Maximum,  set it to 56.25GB
   0x0000000000000000, // Translation Offset
   0x00000001F0000000, // Length calculated by Range Max - Range Min.
   ,, , AddressRangeMemory, TypeStatic)
// ----------------------------------------------------------------------------------------------
})
   Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings

iv. Create the dsdt-modified.aml file. The '-ve' parameter disables warning messages.

c: & cd \dsdt
iasl -ve dsdt-modified.dsl

It's unlikely this will work the first time, as the compiler is very strict. Error messages will need to be reviewed in Notepad++ at the line where they occurred. Find the unique error keyword in the error line of dsdt-modified.dsl in the dsdt-modified.asl file (it may look slightly different) and simply swap the lines above/below in the dsdt-modified.dsl file and compile. This was enough to get the Dell XPS 9350, Dell E6540, 2016 15" Macbook Pro DSDT override all working perfectly.

 

If you get stuck, check the eGPU.io public repository with pre-compiled DSDTs for various systems. If one exists for your system, you can download it along with Winmerge to merge file changes into your working dsdt-modified.dsl file. There are other fixes described in [Guide] Patching LAPTOP DSDT/SSDTs (tonymacx86). Also try seeking advice on tonymacx86.com DSDT center forums. Then try compiling the DSDT again.

Then….

ii. In Command Prompt (admin) compile the dsdt-modified.asl file to create the dsdt-modified.aml file:

 

c: & cd \dsdt
asl /Fo=dsdt-modified.aml dsdt-modified.asl

Step 2. Load the dsdt-modified.aml file as a registry override or in-memory replacement

OPTION 1: Load dsdt-modified.aml as a registry override with Windows test signing mode enabled

Here we will load your dsdt-modified.aml as a Windows registry DSDT override. Note that an invalid dsdt-modified.aml loaded this way may cause a BSOD at boot. Additionally, Windows test signing mode may be problematic for application compatibility. Both these issues can be avoided by using OPTION 2: Avoid test signing mode — load your dsdt-modified.aml as an in-memory DSDT substitution.

 

i. In Command Prompt (administrator) enter the following. The WDK program containing asl.exe must be installed according to steps 1 (i) and (ii) for this to work.

 

c: & cd \dsdt
asl /loadtable dsdt-modified.aml  

ii. Enable TESTSIGNING mode to apply the registry override. In Command Prompt (administrator) enter:

bcdedit -set TESTSIGNING ON

 

If you get an error when doing this as shown below, disable SECURE BOOT in BIOS.

THAT'S IT. Restart your computer. Sound should appear. If it doesn't work — more tweaking is needed 😎

PS: At the bottom right in Windows you'll see text like Test Mode.

 

This guide was tested and written based on videos (where everything is explained in detail):

Instructions in English here: https://www.youtube.com/watch?v=LbmLVOUpVOA

And here: https://www.youtube.com/watch?v=6foOrPapEFg