-
Notifications
You must be signed in to change notification settings - Fork 74
Sandy and Ivy Bridge or Haswell and Broadwell 32GB BAR (and above) DSDT modification
Only use this for 32GB+ BAR GPUs on Linux. This is not for the majority of users who want to enable Resizable BAR on consumer GPUs
This allows 32GB+ BAR server cards such as P40 and M40 to function on Sandy/Ivy Bridge systems with 8GB of RAM installed and 4G decoding off. This also should work with gaming/workstation GPUs such as RTX 3090 (with NVreg_EnableResizableBar=1
) and RX 7900 XT.
Only works when booting Linux, with Sandy/Ivy bridge requiring 4G Decoding be turned off. Follow the ArchWiki guide for loading modified DSDT and use DSDT extracted from running system.
This method doesn't involve any BIOS flashing so it should be completely safe.
Sandy/Ivy Bridge is incapable of using 64GB BAR or larger cards due to 36-bit addressing limitation. Haswell/Broadwell should handle them fine
This method allows the OS to allocate 32GB BAR instead of BIOS.
-
Follow Ivy Bridge DSDT modification step 5 only on the DSDT you decompiled from running system (
/sys/firmware/acpi/tables/DSDT
). -
Change
If (((MM64 == Zero) || (OSYS <= 0x07D3)))
toIf (((OSYS <= 0x07D3)))
. This will always expose the Large Memory region as long as you're on any OS newer than Windows XP.
If you do not have If (((MM64 == Zero) || (OSYS <= 0x07D3)))
such as on a Dell prebuilt, change ElseIf (E4GM)
to Else
and remove
Else
{
CreateDWordField (BUF0, \_SB.PCI0._Y0F._LEN, M4LN) // _LEN: Length
M4LN = Zero
}
-
Follow the ArchWiki guide to recompile and use modified DSDT. If you have any errors check Common DSDT errors and fixes.
-
Your GPU should work at full BAR size if 4G decoding is turned off and 8GB or less RAM is installed. It may be possible to use more RAM than 8GB.
If you're on an ASRock system which doesn't have the following code in the DSDT you should instead follow DSDT broken 4G Decoding fix (Haswell and up) / Linux no 4G Decoding fix
- Change
If ((M64L == Zero))
toIf (0)
, this will make the 64-bit MMIO region available even with 4G decoding turned off. - Change
M2LN = M64L /* External reference */
M2MN = M64B /* External reference */
M2MX = ((M2MN + M2LN) - One)
to
// 39-bit for Haswell and up
M2MX = 0x8000000000 - One
M2MN = M64B
M2LN = ((M2MX - M2MN) + One)
This will change the 64-bit MMIO region to end at 39-bit/512GB taking advantage of the full physical address range.
- You should now be able to use 32GB+ BAR devices without any issues with both 4G decoding on/off, unlike Ivy Bridge you can use the full amount of RAM and have multiple 32GB or even larger BAR devices.
This may work on Windows for server GPUs but it has only been tested on Linux. Usage on Windows will require the DSDT to be modified in BIOS.
This method was first tested by @godcrying in #77.