Skip to content

Sandy and Ivy Bridge 32GB BAR DSDT modification

Curi0 edited this page Oct 4, 2023 · 12 revisions

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 4G Decoding 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.

This method allows the OS to allocate 32GB BAR instead of BIOS.

  1. Follow Ivy Bridge DSDT modification step 5 only on the DSDT you decompiled from running system (/sys/firmware/acpi/tables/DSDT).

  2. Change If (((MM64 == Zero) || (OSYS <= 0x07D3))) to If (((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
}
  1. Follow the ArchWiki guide to recompile and use modified DSDT. If you have any errors check Common DSDT errors and fixes.

  2. 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 8.

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.