MaciASL Mac版是Mac平台上的一款修改、编译ACPI文件的工具,MaciASL Mac版是一款玩黑苹果的必备工具。MaciASL是用于OS X的本机AML.
![]() ![]()
Page shortcut: Guide: eGPU error 12 fix (Windows only) started ◄ Mac owners please work through this thread to solve error 12 before doing a◄ pre-compiled – load or use as reference when making your ownIntroductionA Windows system’s DSDT table root bridge definition (ACPI PNP0A08 or PNP0A03) is usually confined to a reserved 32-bit space (under 4GB) budgetted to be large enough to host the notebook’s PCIe devices. A watermark TOLUD value is then set and locked in the system firmware. Windows OS honors the root bridge definition and will allocate PCIe devices within it. MacOS ignores the root bridge constraints as too does Linux when booted with the ‘pci=noCRS’ parameter. Neither of those OS require a and can allocate freely in the huge 64-bit PCIe address space.When retrofitting a eGPU, an error 12 (This device cannot find enough free resources that it can use) can occur against an eGPU in Windows’ device manager making it inoperable. This can indicate there is insufficient 32-bit addressing space available to host the eGPU.
An eGPU requires a relatively large PCIe config space to allocate into. Decreasing TOLUD by reducing RAM to 2GB offers a somewhat impractical workaround. Rather, the definitive solution is below.This three step solution removes Window’s 32-bit PCIe allocation constraint in order to resolve the eGPU error 12:Step 1.Step 2.Step 3.macOS users: refer instead to that covers these steps titled Windows 10 – Clover DSDT memory override UEFI Windows on Macbooks only.Step 1.
Create a dsdt-modified.aml DSDT file with a 36-bit root bridgei. Download and install required tools:. extracted to c:dsdt directory. has parsing errors., which contains the Windows ASL Compiler (asl.exe). with Search-Goto (line) menu for fast line editting if asl or iasl compilation fails belowii.
Copy WDK’s ASL compiler into the c:dsdt directory. Do this by opening Command Prompt (run as administrator) and then copy-and-paste the commands below.
Mkdir c:dsdtc: & cd dsdtset 64bitOSasl='C:Program Files (x86)Windows Kits10Toolsx64ACPIVerifyasl.exe'set 32bitOSasl='C:Program Files (x86)Windows Kits10Toolsx86ACPIVerifyasl.exe'copy /y%32bitOSasl% c:dsdt nul & copy /y%64bitOSasl% c:dsdt nulif not exist c:dsdtasl.exe echo ERROR: Failed to copy asl.exe to c:dsdtiii. Dump your ACPI tables to disk files ( dsdt.asl and dsdt.dat) with these commands at Command Prompt (run as administrator). The created dsdt.asl is copied here as dsdt-modified.asl which is used later on to make our required modifications. C: & cd dsdtacpidump -b -zasl /u dsdt.datcopy dsdt.asl dsdt-modified.asliv. You now can choose either the or (with blue dsdt-modified.dsl or magenta dsdt-modified.asl work file respectively) to generate a dsdt-modified.aml file, even trying both to maximize success. Consider:– For systems other than Lenovo, use the as their DSDT usually has an Intel creation signature.– Lenovo Thinkpad X220, T420, W530, T540P and likely other 2nd-4th gen i-core Lenovo Thinkpad systems are known to require the. The Intel method causes a “ACPI BIOS ERROR” on Windows bootup there.OPTION 1: Use the Intel methodi.
Save this swap ATMC with SB.PCI0.LPC.EC.ATMC– Zero – error: unexpected ASL term type - add ‘Zero’ as bracketted argument to line above it, eg: GLIS (Zero)– Arg0 – error: unexpected ASL term type - add ‘Argo0’ as bracketted argument to line above it, eg: GDCK (Arg0)iii. Open c:dsdt with Windows explorer.
Compare the size of your created dsdt-modified.aml file against the memory dumped dsdt.dat. They should be within +/- 10% of each other in size. If not, repeat the above process to make sure no mistakes were made.A HP Elitebook 8440P saw the generated dsdt-modified.aml being only 15% the size of the memory dumped dsdt.dat.
There this process simply did not work. For such cases use the instead.iv.
Proceed to to load your dsdt-modified.aml file.Step 2. Load your dsdt-modified.aml as a registry override or in-memory substitutionOPTION 1: Load your dsdt-modified.aml as a registry override with Windows test signing mode enabledHere we load your dsdt-modified.aml as Windows registry. Do note that an invalid dsdt-modified.aml loaded in this way can cause a BSOD on bootup.
Furthermore, Windows test signing mode can be problematic for app compatibility. Both these issues can be avoided by using.i. At Command Prompt ( admin) type the following.
WDK containing asl.exe must be installed per for this to work. C: & cd dsdt asl / loadtable dsdt-modified. Enable TESTSIGNING mode for the registry override to apply. At the Command Prompt (admin) type: bcdedit - set TESTSIGNING ONIf get an error like below when do this, then disable SECURE BOOT in your BIOS.An error has occurred setting the element dataThe value is protected by Secure Boot policy and cannot be modified or deletediii. Reboot your system and check for ‘large memory’ in.OPTION 2: A void test signing mode – l oad your dsdt-modified.aml as an in memory DSDT substitutionHere we avoid the problematic registry override & test signing mode altogether by loading the DSDT as an in-memory substitution before Windows loads with these steps:i.
Disable the previous registry and test signing mode. Bcdedit - set TESTSIGNING OFFii. Check whether you are using a MBR or UEFI Windows installation by viewing Device Manager-Disk Drives-double-click boot drive-Volumes-Populate-Partition Style. If it says “MBR”, then it’s a MBR install. If it says “GPT” then it’s a UEFI install. This will determine which next step to apply.iii. MBR mode Load the dsdt-modified.aml as an in-memory substitution via ‘s DIY in the.iv.
UEFI mode Load the dsdt-modified.aml as an in-memory substitution via Clover bootloader as follows:Update Feb-2019 Mac users are advised to use ‘s instead of Clover to load your resultant to avoid issue noted below in the BIG WARNING.BIG WARNING by has correctly identified that Clover loads a DSDT table in firmware volume and as such can brick a Macbook as found. If you proceed with using Clover to do a the you do so at your own risk!! For risk-adverse users it is suggested to simply do a and persevere with Windows’ test signing mode until other solutions are found and presented.– Mount your EFI volume as s: drive and backup your existing EFIBOOTBOOTX64.efi file.
At Command Prompt (admin) type: mountvol s: /scopy s:EFIBOOTBOOTX64.efi s:EFIBOOTBOOTX64.win– Download the file and install it by extracting with (64-bit only) the clover.tar.lzma-clover.tar-clover.pkg-EFI folder to s:EFI. Be sure to use the the 7-zip interface to extract to s: drive as Windows explorer refuses to allow viewing of the s: EFI volume.– Copy your dsdt-modified.aml file as dsdt.aml to s:EFICLOVERACPIWindows, the directory Clover uses to preload it. If your source dsdt-modified.aml file is not in c:dsdt then use this workaround to copy-and-paste it. Locate your dsdt-modified.aml file with Explorer, right-click, rename to dsdt.aml, right-click, copy. Then hit CTRL+ALT+DEL, task manager, File-New task.
Explore the s:EFICLOVERACPIWINDOWS directory and paste it there.Otherwise at the Command Prompt (admin) type: copy c:dsdtdsdt-modified.aml s:EFICLOVERACPIWINDOWSdsdt.aml– Reboot via Clover - Windows EFI menu and proceed to to confirm it worked.Step 3. Confirm success with a ‘large memory’ area in Device ManagerCheck you now have a new Large Memory entry in Device Manager as shown below to confirm your dsdt-modified.aml was a success:Success stories– HP ZBook 17 G2 + +. Allocated the eGPU into 36-bit space.– 2016 + +. Allocated the eGPU into 36-bit space.– 2016 + +. Allocated the eGPU into 36-bit space.– 2013 15″ Lenovo T540 + + GTX680. Allocated the eGPU into 36-bit space.FAQ1. I still have an error 12 with the ‘large memory’ area present.
How can I fix it? MBR/Legacy boot – not UEFI Force allocate the eGPU into 36-bit PCI space before booting Windows with ‘s DIY software:. At Windows boot menu, select.
Boot - menu-based. Select PCI compaction-Endpoint=56.25GB (36-bit). Select PCI compaction-Run compact. When prompted for the scope select eGPU. Select Chainloader-Test Run. At Windows boot menu, select Windows.Your result will be then be like shown in step 3 above, but you’ll have the eGPU rather then the (example) HD8790M dGPU allocated into 36-bit PCI space.ii. Use the bcdedit forcedisable option to override the advanced PCI Express features and use legacy PCI Express behavior as.
Madjester confirmed this fixed error 12 on 2015 13″ after doing a (thank you!) bcdedit.exe -set PCIEXPRESS FORCEDISABLEiii. Re plug’n’play the devices. Go into Device Manager - Video cards, delete the eGPU. Also go into Device Manager - System devices and delete the PCI Express Root Port x entries.Window should now be clever enough to re-allocate the eGPU into 36-bit space upon realizing there is insufficient 32-bit space to host it.Can go one step further and delete your eGPU NVidia/ATiAMD driver, restart the system and reload it.
That may help as well.iv. From:. remove all of the devices in Device Manager – (All of the ones with a blue icon – not the USB icon one!). Hot Plug the eGPU (Within a few minutes the eGPU will be usable without error 12 and the other devices will also come back and start working again).
Everything should work2. How do I disable the registry?The easiest method is to disable TESTSIGNING. If your system fails to boot with the in place then boot in and disable TEST SIGNING.
Bcdedit - set TESTSIGNING OFFRemove the from the registry: c: & cddsdtasl /loadtable -d dsdt-modified.aml. Or remove this DSDT key in the registry. Windows will create a new one derived from your system bootup ACPI DSDT table upon restart: HKEYLOCALMACHINESYSTEMControlSetXXXservicesACPIParametersDSDT. where XXX are 001, 002, 003 & so on.andHKEYLOCALMACHINESYSTEMCurrentControlSetservicesACPIParametersDSDT.
GUIDE: an in-memory using ‘s DIY MBR partitions onlyWindows 10 or 8 enumerates the DSDT table from the in-memory copy on every boot. The only way to change that is to either:– perform a registry with test signing enabled as described in the above post. Do not that some apps are either problematic or refuse to run with test signing enabled.– perform an in-memory DSDT table substitution using ‘s DIY pre-boot environment which eliminates the need to alter your registry or enable test signing as explained in this post.How to do a in-memory using ‘s DIY?Pre-requisite requirements. A c:dsdtdsdt-modified.aml file created at or downloaded from. This c:dsdtdsdt-modified.aml must be smaller than your memory dumped dsdt.datCheck by doing a file size comparison like shown. Also does this check before loading your dsdt-modified.aml and won’t load it f it doesn’t pass. This prevents corruption of other ACPI tables which would cause a Windows boot to crash.To achieve a smaller dsdt-modified.aml file, incrementally remove sections listed below in your dsdt-modified.dsl (Intel method) or dsdt-modified.asl (Microsoft method), followed by a recompile with ‘iasl -ve dsdt-modified.dsl ‘ or ‘asl /Fo=dsdt-modified.aml dsdt-modified.asl‘ respectively.
Then re-do the file size comparison.i. Remove unnecessary Linux and older Windows entries in the OSI section of the file like highlighted.ii. Remove unused PEG0, PEG1, PEG2, used to host a dGPU. If do have a dGPU and intend to use it when your eGPU is active then keep PEG0.iii. Remove non-existent LPT (parallel ports), COM (serial) and eSATA ports.iv. If have access to macOS, use to compile your dsdt-modified.dsl. It creates a smaller dsdt-modified.aml.How to load your dsdt-modified.aml via DIY1.
Copy your dsdt-modified.aml file as dsdt.aml into ‘s v:config directory:: Mount the disk image as V: drivec:eGPUeGPU-setup-mountcopy c:dsdtdsdt-modified.aml v:configdsdt.aml2. Boot into ‘s DIY - automated startup via startup.bat (default).It will automatically load this dsdt.aml file and present the Windows bootloader where you then select Windows. Check for the ‘Large Memory’ area to indicate a successful in-memory like shown below in View-Devices By Connection. Then check for error 12 against your eGPU.3. If there is an error 12. Then force allocate the eGPU into the ‘s 36-bit PCI space:.
At Windows boot menu, select. Boot - menu-based.
Select PCI compaction-Endpoint=56.25GB (36-bit). Select PCI compaction-Run compact.
When prompted for the scope select eGPU, force 32-bit=none. Select startup.bat-Test Run. Select Chainloader-Test Run. At Windows boot menu, select Windows. Posted by: SamuelFDiasHello there!
? no problem.I still have the same problem. The eGpu insists to connect to other Pci root port, instead the one created under the large memory What should I do?I already unistall all the ports, the eGPU and the, but it still not connect to the large memory.Posted by:Samuel, I think that should be able to fix that, because I believe you can force it to allocate the eGPU to the large/high memory area. I am not sure if there is a way to do it without, but might know how to.If the eGPU won’t auto-allocate to the ‘Large Memory’ area, then revert to using software to hard allocate it in a pre-boot environment.@everyone, the opening post is presented with an up-to-date example using a 4th gen i-core Dell E6540. Unfortunately previous discussion was deleted along with the thread due to an offsite issue. Sincerest apologies there. GUIDE: an in-memory using MaciASL+ UEFI Windows on Macbooks only◄ is Mikeal's updated second revision of this articleUpdate Feb-2019 Mac users are advised to use 's instead of Clover to load your resultant to avoid issue noted below in the BIG WARNING.BIG WARNING by has correctly identified that Clover loads a DSDT table in firmware volume and as such can brick a Macbook as found. If you proceed with using Clover to do a the you do so at your own risk!!
For risk-adverse users it is suggested to simply do a and persevere with Windows' test signing mode until other solutions are found and presented.I have this working on a 2016 w/touch 1TB with Clover loading a modified DSDT and the problematic Win10 test signing disabled. Thank you to for pointing out link for UEFI installations, instructions in the opening post and formatting this post.1. Boot into Windows and disable test mode if enabled using Command Prompt (admin) bcdedit -set TESTSIGNING OFF2. Reboot into macOS. We will use MaciASL in MacOS to extract, edit, and compile the DSDT table.3. Make the as detailed in opening thread post, copied here:Search for ' ResourceProducer'.
Beneath it will be a series of 'DWordMemory' resource entries. Under the last DWordMemory entry in that area, typically above the CRS method, add a 'QWordMemory' (64-bit) entry as shown in red below. The range chosen is in the 36-bit range (. Just wanted to let you know how it went for me. I also have the late 2016 460. I tried Mikeal's method and it worked perfectly.However, one issue/side effect. If I boot up with both the and the USB-C to USB adapter, it would give me the Code 12 Error.
Only when I disconnected it and boot up with the RC, does it work. (to be clear, adapter with an usb device attached such as mouse or keyboard)After booting up, you can connect the adapter normally.It's kinda weird or maybe something wrong with my system allocation but the adapter somehow screws up the reallocation.Hope this helps. I tried doing the windows way of modifying the dsdt and got roughly the same errors as other people reported. However, even when I fixed the error and and loaded it via windows method, I never could get rid of the error 12.The only way way I was able to get it working was via the Maciasl way, which, when I extracted and modified it, did not have any errors.i assume you did the windows way using the windows kit and all that?If so, I recommend doing via Mac OS side via maciasl and save some of the trouble I had to go through.
Hope that helps. It does take some time to install and get maciasl working but it's a wayyyy smoother process. Okay; so I finally got Clover installed (the method I had to follow was not described in any of the above posts; so I'm not sure how you guys did it — I had to exercise some of my own knowledge of the UEFI boot-process, and re-arrange 1. The pre-existing Apple EFI programs, and 2. The Clover EFI program).
The DSDT patch took, and I've got the aforementioned “Large Memory” area in the Device Manager.Unfortunately, this has changed nothing: the is still Code 12'ing. I've tried the other above suggestions (right-click → ‘uninstall device’, checked the ‘uninstall drivers’ box, rebooted).
No luck — after the drivers re-install, it's still Code 12'ing. Nothing appears to have been allocated to the “Large Memory” area.Is there any other ways to force Windows to allocate the graphics card to the newly-allocated 36-bit address-space? Posted by: ELLIOTTCABLEThe DSDT patch took, and I’ve got the aforementioned “Large Memory” area in the Device Manager.Unfortunately, this has changed nothing: the is still Code 12’ing. I’ve tried the other above suggestions (right-click → ‘uninstall device’, checked the ‘uninstall drivers’ box, rebooted).
No luck — after the drivers re-install, it’s still Code 12’ing. Nothing appears to have been allocated to the “Large Memory” area.Is there any other ways to force Windows to allocate the graphics card to the newly-allocated 36-bit address-space? /=Some additional techniques for solving error 12 on Apple systems are given below:1.2. Certain Macbooks, listed in the link, running MBR Windows can have error 12 solved with. Posted by:Some additional techniques for solving error 12 on Apple systems are given below:1.2. Certain Macbooks, listed in the link, running MBR Windows can have error 12 solved withUnfortunately, most of those tricks seem to be for MBR-formatted MacBooks? On new hardware like the and the 2016 (like mine), Bootcamp doesn't create a hybrid-MBR; it sets up a UEFI boot of Windows.As for the ‘uninstall the root-bridge’ one like I said, just tried that one (although there's nothing called a “root bridge,” nor any “downstream ports” like in the screenshot, on the — I just tried to emulate the same process on the “PCI-to-PCI Bridge” entries that show up on my installation.)I'm running out of things to try!(If anyone else is trying to do this over the next few days, feel free to come chat in realtime on Freenode:.
Name there is the same as here — if I don't respond immediately, leave the window open, and I'll reply when I'm at the computer.). Okay, WTF: I get completely different results with each Thunderbolt port on my machine.Rear-left: The behaviour I've been describing thus far — the is recognized, and my “NVIDIA GeForce ” shows up, but Code 12's.Front-left: Against all expectations, this works! I get display output rendering from my card, and it shows up in the Display preferences!.Rear-right, front-right: I just see a generic “Video Controller (VGA Compatible)”; Windows claims there are no drivers installed for it.Worse, when the Core is plugged into the right-hand ports, my system becomes extremely unstable: the Windows install goes black and reboots, without any warning, a few moments after logging in. (I think it's trying to install a driver and failing?)So, it's a great step forward that it renders, at least from one port; unfortunately, that port isn't reachable from the final install location of my Core (damned short Thunderbolt 3 active cabling!) so I gotta figure out why the right-hand ports are crashing Windows.My next step is probably a reinstall from scratch, I suspect.
If I do get this working, I'm going to write my own tutorial, including actual instructions for installing Clover. Posted by: madjesterAnother potential Code 12 fix. For my uncooporative 2015 13″, running “bcdedit.exe -set PCIEXPRESS FORCEDISABLE” (with the Graphics Card totally uninstalled) then installing the card fixed allocation (after a.)(Someone knowledgable should probably try this, discover pitfalls, explain why it works, all that.)Nice work figuring that out. I’ve added it to the opening post linking your finding. Would you mind including your eGPU + notebook specs in your sig? I’m curious if it was with an AMD or NVidia card that this worked with.
I got this working successfully after some finagling. Each port appears to act different. My back left port even allows for hot plugging! My only issue, which I'm hoping someone can help with, is I need to use the USB to access Clover every time.
The large memory disappears if I skip booting through Clover on the USB (which makes sense if I follow how this works correctly), but it looked like 7-9 were supposed to enable Clover without the USB.If I didn't explain this clearly, I'd be happy to provide more explanation. To summarize, the Clover edit still requires the USB. Thank you for the help! Also, if there are any questions about how I got mine working, I'd be happy to provide information! Posted by:Hitting OPTION before booting would presumably give the Macbook several EFI items you can choose.
Just work through them one at a time until same Clover screen appears instead of Windows. It's unmistakeable when Clover boots.I am sorry for not explaining this better. When the USB is plugged in, Clover is a boot option when viewing the EFI items. However, when the USB is removed, the option disappears, and the only other option is the 'vanilla' Windows option.I just checked, and the /Volumes/EFI directory gets deleted on reboot, which explains why Clover is not an option on boot. I do not, however, know what is causing macOS to decide to remove this directory. To be clear, after performing the steps there is a /Volumes/EFI folder, then, after reboot, there is no longer a /Volumes/EFI folder.Edit: diskutil list is showing EFI as present.
Now to just figure out how to get this to show up in the boot menu. I will trouble shoot. The /Volumes/EFI directory is only deleted because you were using it as a mount point. If you remake the directory, and remount it, all the same information will be in it.I copied the clover folder from the USB, into /Volumes/EFI/EFI/Clover. After you make the DSDT related changes copy that folder into /Volumes/EFI/EFI/boot.
This will give you the clover boot loader option every time you reboot. If I want to go into OS X and I was last in windows, I reboot and hold the option key then select the macox drive (which is my only selection in that menu now).I subscribed to the thread now didn't realize I wasn't getting notified. Posted by: bryananggHi, I’m new here and I followed the steps and could successfully run the on my 13″ early 2015 and could run games with no problems. But I found that after I had restarted my laptop, I received errors like IRQLNOTLESSOREQUAL when starting up and had no luck getting it back to work ever since. Any ideas?If there is a mismatch between the and your current system bootup state then this could occur.
So., disable the and re-create it.Here’s where it is useful to have the Clover method working as don’t need to wrestle with recovering Windows back into a working state. Thank you, I'm still in the process of setting everything up.
I'm currently at the part of creating the startup.nsh file. I've installed refind and copied the file to its root.
However, when I tried rebooting with the eGPU connected, Mac OS shuts off but the laptop doesn't boot, it hangs with just a black screen. Connecting the eGPU at the windows loading screen also freezes it, the loading circle goes on forever. How do I set this part up?thank you, I have since checked out your thread and am following the steps there, I am so far stuck at the process above.
Hi guys,I have a problem with the DSDT in-memory o verride using the DIY eGPU 1.3x Setup.Just to give a quick overview:I am using a Lenovo edge 560 with a GTX 770 and v8 and Windows 10.Everything is working fine if I ran windows in Test mode and use the DSDT registry override method.What I have to do according to the guide is: I have to copy the.aml file into the V:config folder, then disable testmode, restart and use the startup.bat option.If I do that windows start without Test mode but there is no large memory.My startup.bat file only runs the ”:OS” and “call chainloader” commands. I’ve read this post and there is a “call loaddsdt” command, I tried to add that to my startup.bat but I got an error that “loaddsdt” is not a valid command. Do I need that command at all? Can it be because I am using 1.31 and not 1.35 or did I forgot a step somewhere?Thanks for any help.
![]() Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
March 2023
Categories |