I managed to DSDT override my T430 with some black magic and luck.
First of all I updated the BIOS, something I had not done yet since I had the second most recent and I don’t know if this alone does the trick but it might and in this case I’m an idiot and wasted way too much time.
I used this compiler right here
[URL]http://download.microsoft.com/download/2/c/1/2c16c7e0-96c1-40f5-81fc-3e4bf7b65496/microsoft_asl_compiler-v4-0-0.msi[/URL]
Dump with asl /tab=DSDT
Open said DSDT file and find Device(Pci0) and the part where you allocate memory for _CRS
I changed mine from
Name(_CRS, Buffer(0x1c0) {0x88, 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0x00, 0x01, 0x47, 0x01, 0xf8, 0x0c, 0xf8, 0x0c, 0x01, 0x08,
0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x0c,
0x00, 0x00, 0xf8, 0x0c, 0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x0d, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf3, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0xff, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x0c, 0x00, 0xff, 0x7f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x0c, 0x00, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x3f, 0x0d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0xff, 0x7f,
0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x00,
0xff, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x0d, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x00, 0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xbf, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0xff, 0xff,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0xff, 0xff, 0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xfe,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd4, 0xfe, 0xff, 0xbf, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x79, 0x00
})
to
Name(_CRS, Buffer(0x1ee) {0x88, 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0x00, 0x01, 0x47, 0x01, 0xf8, 0x0c, 0xf8, 0x0c, 0x01, 0x08,
0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x0c,
0x00, 0x00, 0xf8, 0x0c, 0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x0d, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf3, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0xff, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x0c, 0x00, 0xff, 0x7f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x0c, 0x00, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x3f, 0x0d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0xff, 0x7f,
0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x00,
0xff, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x0d, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x00, 0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xbf, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0xff, 0xff,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0xff, 0xff, 0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xfe,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd4, 0xfe, 0xff, 0xbf, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x8a, 0x2b, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x0f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00,
0x79, 0x00
})
This of course varies from laptop to laptop.
Technical background
DSDT — Differentiated System Description Table — is the biggest and most complex ACPI table. The minimal length is 36 bytes, in reality it is about 20 kb or even more. This table describes devices and methods for accessing them. These methods can contain arithmetic and logical expressions, representing a program written in a C-like programming language. Correcting this table means you need to have some sort of programming knowledge. Clover offers an option to automatically apply corrections, however it is important to understand that an artificial intelligence was not created yet and that the automatic method is far from being complete. It is better to do the corrections manually.
Why does it need to be fixed at all? DSDT patching was created with the intention to fix device HPET — High Precision Events Timer. The point is that OS X includes a kext named AppleIntelCPUPowerManagement for power management control (SpeedStep), which — by all means — needs interrupts IRQ 0
and 8
. Otherwise it will create a kernel panic. This kext can either be removed or blocker, however you can alternatively correct the DSDT to ensure a normal behaviour of this kext.
Nr. 1 : This is a necessity. Does Mac OS X really need HPET? Not really, but BIOS vendors tend to be slow and they just started writing the correct parameters. Usually a DSDT will still need to be corrected.
Nr. 2 : A DSDT contains certain dependencies on the operating system like Windows 98
, Windows 2001
, Windows 2006
or Linux
. Mac OS X uses identifier Darwin
, which usually is missing. Even if it is not, it was created for FreeBSD. Mac OS X makes great use of the ACPI system and uses a DSDT to its maximum, as does Windows 2001; but not Linux, Windows 98 and not Windows 2006. It is always correct to mask the system as Windows 2001. Even if you find Darwin in your DSDT, mask it as Windows2001.
New computers have ACPI more like Windows 2009. For this case Clover has a fix FixDarwin7
Many BIOS variants can use the variable OSYS = 0x07D2, but not 0x07D6, 0x07D9 or 0x2410 as written into a real Mac’s DSDT.
Nr. 3 : The vendor of a motherboard’s and thus the creator of a DSDT, cannot predict the devices you will be using (CPU, video card, etc.). They should be written into the DSDT however! Vice versa, devices like the internal speaker, floppy drive or parallel port should be excluded. Their drivers do not exist and are not even needed. Additionally it is often necessary to add or remove framebuffers/ports to devices like video cards or SATA controllers.
The DSDT is is written into the BIOS and is used by the system in AML binary code. It can be de-/compiled using IASL, which translates binary code into human readable DSL source code. A user will use this path to apply corrections: AML>DSL>edit>DSL>AML — this is the next point.
Nr. 4 : The last part is made impossible because of syntax and logical errors initially present in the OEM DSDT. You will need to correct them, too. Additionally, you can fix other mistakes, which prevent the PC from sleeping or waking up, or add new devices. (It is a bit strange, compiling/decompiling is not a strictly reversible operation and will change the table or even prevent further compiler operations. From my point of view the compiler is not bug-free. Non-conformance to the specification, however, should be considered as a warning, not as an error).
When you reached this step you can instruct Clover to use your modified DSDT by placing it into the directory EFI/CLOVER/OEM/xxx/ACPI/patched or — when the computer’s name is not known yet — into EFI/CLOVER/ACPI/patched. Alternatively the OS can have its own DSDT in the root of the system partition.
Where can you obtain the initial DSDT that needs to be patched? There are different ways involving Windows, Linux or OS X. If you were able to start Clover somehow, you can enter its GUI and press F4
. If Clover was installed on a FAT32 partition, then it will be able to save all ORM ACPI tables, including DSDT and FADT. The process can take a while, especially when saving many tables to a USB flash drive. This is especially useful when you have no access to other means of extracting the table set, for example with AIDA64. Also you can save the patched DSDT variant: enter Options in CloverGUI, change the DSDT mask, exit Options and press F5
. A DSDT with the specified patches will be saved, which are represented in the file name, for example: DSDT-F597.aml. You can save multiple variants for comparison.
Now you can edit the DSDT and if you are not really comfortable doing this, Clover offers some automatic patches:
DSDT mask
AddDTGP bit(0)
For injecting device properties you can — apart from DeviceProperties — use a variant involving method _DSM
(Device Specific Method), which is written into the DSDT table. _DSM is widely used since OS X 10.5. It contains properties for a device and makes use of the method DTGP
, which is universal for all devices. This fix simply adds the DTGP method for later use with other fixes. It has no significance on its own.
FixDarwin bit(1)
Provide a set of corrections to DSDT to make your system «Darwin» identified as «Windows 2001» like the most ACPI system. More ACPI devices will work in this mode.
FixDarwin7 bit(16)
Provide a set of corrections to DSDT to make your system «Darwin» identified as «Windows 2009». More ACPI devices will work in this mode. Recommended for IvyBridge and up hardware.
FixShutdown bit(2)
A condition is added to method _PTS
: if the argument is 5
(shutdown), then no other actions shall be performed. Many reports confirmed this option to fix shutdown issues with ASUS boards, maybe even with other vendors. Some DSDT tables already contain such a condition and it is advised to turn the fix off in this case.
AddMCHC bit(3)
Added device MCHC to DSDT. For board H61M this is obligatory, else KP.
FixHPET bit(4)
Add IRQ(0, 8, 11) to device HPET. Obligatory for SandyBridge and recommended for others.
FakeLPC bit(5)
Changes the DeviceID of the LPC controller to allow the loading of kext AppleLPC. This fix is necessary when the chipset is not recognised by OS X. However, the list of supported Intel and NForce chipsets is so big that the fix is rarely needed. Verify if AppleLPC is loaded and use this fix, if it is not. Moreover, the kext can unload itself even if the chipset is supported.
FixIPIC bit(6)
Removes the interrupt from device IPIC. Helpful for Power button will work.
FixSBUS bit(7)
Adds an SMBusController to the device tree, which fixes a warning about its absence in the system log. Helps to sleep/wake.
FixDisplay bit(8)
Create device GFX0 if still absent. It is needed for correct Power Management but the device is usually absent in DSDT because it is not a part of the motherboard. Added also device HDAU that is HDMI sound device on the videocard. If we set FakeID in config.plist it will be inserted here. Intel video will be patched separately.
FixIDE bit(9)
10.6.1 introduces a kernel panic related to AppleIntelPIIXATA. There are two options to solve the problem: using a patched kext or patching the DSDT. Probably not needed for recent systems.
Not recommended.
FixSATA bit(10)
Fixes several SATA problems and removes yellow hard drive icons by masking the controller as ICH6. The method is controversial but it can fix the DVD drive and simply replacing the hard drive icons is not enough in this case. An alternative is to patch the kext AppleAHCIPort.kext.
Not recommended.
FixFirewire bit(11)
Add device Firewire into DSDT if absent and if the device really present. Adds the property fwhub
to the device.
FixUSB bit(12)
Tries fixing USB the countless USB issues for USB1.0, USB2.0 and USB3.0.
FixLAN bit(13)
Injects the property built-in
to the Ethernet card, which is necessary for correct operation. Additionally injects the card’s name for a better looking System Profiler. Also made FakeID for some known substitutions.
FixAirport bit(14)
Same as above for WiFi. Furthermore, the actual device is created and written into DSDT. A DeviceID will automatically written for known cards to enable airport functionality. Not recommended.
FixHDA bit(15)
Corrects sound card properties to enable the native AppleHDA driver. The name is changed from AZAL
to HDEF
, layout-id
and PinConfiguration
are injected. Adding HMDI device if absent.
FixRTC
Exclude IRQ(0) from RTC device.
FixTMR
Exclude IRQ(8) from TMR device. This is ancient DOS device and not needed in modern computers. Just wonder it present.
AddIMEI
This device is used for IntelHDxxx graphics. Adding them if very desirable operation. This bit also needed for use FakeID->IMEI. Do nothing for Core 2 systems.
FixIntelGfx
Correct device class for the IGPU from 038000 to display class 030000
FixWAK
adding Return(Package(0)) into method _WAK if absent. This patch is for warning elimination. I don’t know about working influence.
DeleteUnused
There are not used devices like Floppy drive, LPT port and others that will be good to delete from DSDT to not occupy interrupts.
FixADP1
Rename AC0 device to ADP1 device.
AddPNLF
Adding device PNLF is very useful: only with it you may have brightness control. This patch is also influence on good Sleep/Wake of the system.
In my case there are:
DSDT_FIX: AddPNLF
OEM SSDT NvdTable, but _DSM -> ZDSM corrected by Clover. No new _DSM
No additional kexts.
A trick to assign keys to reduce/increase brightness:
- Insert temporarily USB keyboard
- Control Panel -> Keyboard -> Shotcuts -> Screen (appeared due to USB keyboard)
- Assign F1 to Reduce brightness and F2 to Increase. No other combinations!
- After removing the USB keyboard assigning will continue working.
FixS3D
Also resolving some Sleep/Wake problems by correcting _S3D methods.
FixACST
Name ACST have different use for Apple and for ASUS. For ASUS it is AC adapter state. For Apple it is a replacement for _CST, c-states table. To not conflict it is needed to rename such names to something else.
FixRegions
Address of some regions in DSDT depends on many factors and may change time to time
OperationRegion (GNVS, SystemMemory, 0xDE6A4E18, 0x01CD)
The presence of floating regions make impossible to use custom DSDT because this region may be shifted and will not correspond to current state. This patch is intended to find all such regions in BIOS and correct them in custom DSDT. So now you can produce your custom DSDT with wrong regions and set this patch.
Choosing the right mask
How can you choose the necessary patches and how do you know which ones are harmless or dangerous? The computer will not be harmed either way. All the changes are stored memory only and will be removed after rebooting.
You can try setting different combinations in CloverGUI and save them by pressing F5
in the Options menu.
To make sure the currently patched DSDT is not creating a conflict, you can change the DSDT name in the menu — DSDT name: BIOS.aml. This file will not be found, Clover will extract the original OEM DSDT from BIOS and apply fixes set in the DSDT mask section. In case the OS did not load successfully, your previously set (working) values will be used.
0xFFFFFFFF
enables all fixes and if the OS loads successfully this way, you will know that our efforts were not for nothing. Given the descriptions above you already realised that some fixes are not needed for your system (for example WiFi), they can even make things worse.
You may make patched DSDT once with full mask. Then correct patched DSDT manually. Then use this manually patched DSDT.aml loading but set FixRegions (10000000) only. The mask will be 0x10000000
(@nando4)
Famed Member Admin
Joined: 7 years ago
December 23, 2016 5:20 pm
Page shortcut: https://egpu.io/DSDT | dsdt
[GUIDE] DSDT override eGPU error 12 fix (Windows only)
here ◄ Mac owners please work through this thread to solve error 12 before doing a DSDT override
here ◄ pre-compiled DSDT overrides — load or use as reference when making your own
A 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 DSDT override 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. Create a dsdt-modified.aml DSDT file with a 36-bit root bridge
Step 2. Load your dsdt-modified.aml as registry override or in-memory substitution
Step 3. Confirm success with a ‘Large Memory’ area in Device Manager
macOS users: refer instead to Mikeal’s post 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 bridge
[Please login to see this]
OPTION 1: Use the Intel method
[Please login to see this]
OPTION 2: Use the Microsoft method
[Please login to see this]
Step 2. Load your dsdt-modified.aml as a registry override or in-memory substitution
OPTION 1: Load your dsdt-modified.aml as a registry override with Windows test signing mode enabled
[Please login to see this]
[Please login to see this]
[Please login to see this]
OPTION 2: Avoid test signing mode — load your dsdt-modified.aml as an in memory DSDT substitution
[Please login to see this]
Step 3. Confirm success with a ‘large memory’ area in Device Manager
[Please login to see this]
[Please login to see this]
1. I still have an error 12 with the ‘large memory’ area present. How can I fix it?
[Please login to see this]
2. How do I disable the registry DSDT override?
[Please login to see this]
Appendix 1: Changing SSDT M64L value to increase 4G decoding ‘large memory’
Investigative work relevant to this topic for perusal by advanced users.
Spoiler
[ADVANCED users only] Changing SSDT M64L value to increase ‘large memory’ from 16GB to 256GB on EliteBook 840 G5
EliteBook 840 G5 default BIOS-enabled ‘large memory’ is 0x1C00000000-1FFFFFFFFF (112GB-128GB = 16GB)
As an exercise, I wanted to increase EliteBook 840 G5’s 16GB ‘large memory’ to match my ZBook Studio G5’s 256GB.
Problem: A DSDT override to increase ‘large memory’ as explained above will just reboot the system upon trying to load Windows.
Workaround: Based on study of DSDT’s ‘large memory’ code, we modify the M64L memory variable to increase large memory to 256GB
Issue: The addresses below can change depending on BIOS settings or devices attached to ports on powerup so can change between reboots requiring vigilence to keep updated.
1. Extract Windows Binary Tool from https://acpica.org/downloads/binary-tools to c:dsdt to dump and disassemble ACPI tables
[Please login to see this]
2. Inspect dsdt.dsl code where ‘large memory’ is created shows M64B and M64L set it’s parameters:
[Please login to see this]
We see M64B and M64L set base address and length.
3. Inspect ssdt5.dsl which contails M64B and M64L to identify which memory address those variables live at:
[Please login to see this]
Taking 0x87F17698 and counting the rightmost numbers of variables down to M64B and M64L and add them tells us:
- M64B is at (address) 0x87F17698 + (offset) 0xDF — 1 = 0x87F17777 (64-bit)
- M64L is at (address) 0x87F17698 + (offset) 0xE7 — 1 = 0x87F1777F (64-bit)
4. We can use RWEverything software to inspect these memory addresses, reading from right-to-left as is little-endian format, to confirm they are what we expect as shown.
M64B is 0x0000001C00000000 — best to keep this address as ensures audio device works and Win10 bootup time is not delayed
M64L is 0x0000000400000000 — 16GB. It needs to be 36GB or larger or 16GB reBAR will incur error code 12 and won’t work
We’ll set M64L to 0x4000000000 (256GB) by doing a single 0x40 byte write to 0x87F1777B.
5. Create a USB stick with UEFI shell startup.nsh to adjust M64B & M64L memory locations:
[Please login to see this]
2015 15″ Dell Precision 7510 (Q M1000M) [6th,4C,H] + GTX 1080 Ti @ 32Gbps-M.2 (ADT-Link R43SG) + Win10 1803 // compares M.2 vs TB3 performance inc unoptimized H-CPU BIOS [build link]
(@nando4)
Famed Member Admin
Joined: 7 years ago
December 24, 2016 3:11 am
GUIDE: an in-memory DSDT override using nando’s DIY eGPU Setup 1.35 [MBR partitions only]
Windows 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 DSDT override 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 nando’s DIY eGPU Setup 1.35 pre-boot environment which eliminates the need to alter your registry or enable test signing as explained in this post.
Pre-requisite requirements
- A c:dsdtdsdt-modified.aml file created at step1 above or downloaded from eGPU.io’s DSDT repository.
- This c:dsdtdsdt-modified.aml must be smaller than your memory dumped dsdt.dat
Check by doing a file size comparison like shown here. Setup 1.35 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 here.
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 MaciASL to compile your dsdt-modified.dsl. It creates a smaller dsdt-modified.aml.
How to load your dsdt-modified.aml via DIY eGPU Setup 1.35
1. Copy your dsdt-modified.aml file as dsdt.aml into Setup 1.35’s v:config directory
:: Mount the Setup 1.35 disk image as V: drive
c:eGPUeGPU-setup-mount
copy c:dsdtdsdt-modified.aml v:configdsdt.aml
2. Boot into nando’s DIY eGPU Setup 1.35 -> 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 DSDT override 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 DSDT override’s 36-bit PCI space:
- At Windows boot menu, select Setup 1.35
- Boot Setup 1.35 -> 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.
Yes. Below we see the new ‘Large Memory Area’ indicating the PCI BUS now extends into 36-bit PCI space with the iGPU (didn’t have an eGPU at hand) relocated into that 36-bit space.
This post was modified 6 months ago
2015 15″ Dell Precision 7510 (Q M1000M) [6th,4C,H] + GTX 1080 Ti @ 32Gbps-M.2 (ADT-Link R43SG) + Win10 1803 // compares M.2 vs TB3 performance inc unoptimized H-CPU BIOS [build link]
(@nando4)
Famed Member Admin
Joined: 7 years ago
December 24, 2016 7:57 am
Posted by: SamuelFDias
Hello there! no problem.
@nando4 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 nvidia drivers, but it still not connect to the large memory..
Posted by: Yukikaze
Samuel, I think that Setup 1.35 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 Setup 1.35, but nando might know how to.
If the eGPU won’t auto-allocate to the ‘Large Memory’ area, then revert to using eGPU Setup 1.35 software to hard allocate it in a pre-boot environment.
@everyone, the opening post is presented with an up-to-date DSDT override 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.
2015 15″ Dell Precision 7510 (Q M1000M) [6th,4C,H] + GTX 1080 Ti @ 32Gbps-M.2 (ADT-Link R43SG) + Win10 1803 // compares M.2 vs TB3 performance inc unoptimized H-CPU BIOS [build link]
(@itsage)
Founder Admin
Joined: 7 years ago
(@sobi123)
New Member
Joined: 6 years ago
January 13, 2017 10:20 am
Thanks @nando4, that did the trick It wouldn’t run without setup 1.35 and compacting. After 2 days of tinkering with DSDT. I needed to cut «If (COND) FPED» statement and paste to where OS’s are listed. Also added QWORD. Now that I know what I’m doing it’s 2 min.
For reference my config is HP 2570p (i5 3360m) — Win 10 x64 + Asus GTX 1060 6GB Turbo + EXP GDC 8 ExpressCard PCIe x2 + 8GB 1600Mhz. Witcher 3 on Ultra Avg 40-50FPS 1080p.
Many thanks
Sobi
To do: Create my signature with system and expected eGPU configuration information to give context to my posts. I have no builds.
.
(@yukikaze)
Noble Member Moderator
Joined: 7 years ago
In my experience with my X230 and an Expresscard eGPU, the latest Lenovo X230 BIOS has no TOLUD problems. My HD7950 worked with it without any DSDT overrides or any Setup1.3x remapping of the eGPU. As far as I know, though, the X220 never got such a BIOS update.
(@mikeal)
Active Member
Joined: 6 years ago
(@devaspark)
New Member
Joined: 6 years ago
January 20, 2017 12:51 am
Just wanted to let you know how it went for me. I also have the late 2016 MacBook Pro 460. I tried Mikeal’s method and it worked perfectly.
However, one issue/side effect. If I boot up with both the Razer Core 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.
To do: Create my signature with system and expected eGPU configuration information to give context to my posts. I have no builds.
.
(@mikeal)
Active Member
Joined: 6 years ago
Hi Devaspark,
Are you using the USB adapter on the same side the core is connected? I stopped using that one because I was having issues and thought it was because they shared the thunderbolt controller. I switched to a cheap ankar USB-C to 4 port USB 3.1 adapter on the other side. Even if the core side 2nd adapter was working for me, it got bad performance(Oculus complained about tracking). I have no problem running all 3 sensors and the Rift off the other side though.
2016 15″ MacBook Pro (RP460) [6th,4C,H] + GTX 980 Ti @ 32Gbps-TB3 (Razer Core) + macOS 10.12 & Win10 [build link]
(@stevenomg)
New Member
Joined: 6 years ago
Hi,Devaspark @ Devaspark
I have the Macbook pro 450 and I also use Mikeal’s way to deal with the problem of the Code 12 Error. However, I have the issue of the DSDT compilation. Do you have this error: code 4096, unexpected PARSEOP_IF, expecting“,»or»)»
If you have fixed the same errors, would you like to tell me how to do? Thank you.
To do: Create my signature with system and expected eGPU configuration information to give context to my posts. I have no builds.
.
I managed to DSDT override my T430 with some black magic and luck.
First of all I updated the BIOS, something I had not done yet since I had the second most recent and I don’t know if this alone does the trick but it might and in this case I’m an idiot and wasted way too much time.
I used this compiler right here
[URL]http://download.microsoft.com/download/2/c/1/2c16c7e0-96c1-40f5-81fc-3e4bf7b65496/microsoft_asl_compiler-v4-0-0.msi[/URL]
Dump with asl /tab=DSDT
Open said DSDT file and find Device(Pci0) and the part where you allocate memory for _CRS
I changed mine from
Name(_CRS, Buffer(0x1c0) {0x88, 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0x00, 0x01, 0x47, 0x01, 0xf8, 0x0c, 0xf8, 0x0c, 0x01, 0x08,
0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x0c,
0x00, 0x00, 0xf8, 0x0c, 0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x0d, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf3, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0xff, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x0c, 0x00, 0xff, 0x7f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x0c, 0x00, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x3f, 0x0d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0xff, 0x7f,
0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x00,
0xff, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x0d, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x00, 0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xbf, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0xff, 0xff,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0xff, 0xff, 0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xfe,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd4, 0xfe, 0xff, 0xbf, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x79, 0x00
})
to
Name(_CRS, Buffer(0x1ee) {0x88, 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0x00, 0x01, 0x47, 0x01, 0xf8, 0x0c, 0xf8, 0x0c, 0x01, 0x08,
0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x0c,
0x00, 0x00, 0xf8, 0x0c, 0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x0d, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf3, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0xff, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x0c, 0x00, 0xff, 0x7f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x0c, 0x00, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x3f, 0x0d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0xff, 0x7f,
0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x00,
0xff, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x0d, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x00, 0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xbf, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0xff, 0xff,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0xff, 0xff, 0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xfe,
0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd4, 0xfe, 0xff, 0xbf, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x8a, 0x2b, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x0f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00,
0x79, 0x00
})
This of course varies from laptop to laptop.
Copyright ©
Providosiki.ru
Смотрите видео онлайн на Providosiki.ru. Смотрите сериалы бесплатно, музыкальные клипы, новости мира и кино, обзоры мобильных устройств
[email protected] — Почта для жалоб и предложений