[Offer/Guide] Optimized GA-Z97X-Gaming 7 BIOS

Hello Win-Raid community,

I want to share my successful attempt to enable Above 4G and ReBAR on the Gigabyte GA-Z97X-Gaming 7.

Background

  • Motherboard: Gigabyte GA-Z97X-Gaming 7 (rev 1.0), Aptio 4, BIOS F9b (2016)

  • CPU: Intel i7-4790K

  • GPU: AMD RX 9060 XT 16GB

  • RAM: 16GB (2×8GB DDR3-1866)

Base BIOS: This work is based on a community-modified F9b BIOS (originally shared on Win-Raid by another member). I further modified it by injecting the ReBarDxe.ffs, applying the HswAbove4G / BdwUSB3 patches, and replacing the DSDT with my own custom dynamic window logic.

Result:
GPU-Z shows Above 4G Decode: Yes, BAR0: 1024 MB, Resizable BAR: Enabled. The system is stable and runs GTA5 perfectly.

Note: My Windows system language is Chinese. In the screenshots, “大型内存” (Large Memory) is the Device Manager resource type node, which can be found under View → Resources by type. The corresponding English term is “Large Memory”.

:rocket: The Core Method: Dynamic DSDT TUUD Window

Since the Z97 BIOS has no Above 4G option and the AmiBoardInfo module is missing, I extracted the ACPI tables using AIDA64 (this ensured all SSDTs were captured, solving the prior “9 unresolved external methods” error that occurred with acpidump-style dynamic extraction). I then joint-disassembled them with iasl 20160729-32 and modified the _CRS method in _SB.PCI0.

Key modified code:

If (Local1 >= 0x07D9)
{
    CreateQWordField (BUF0, \_SB.PCI0._Y1E._LEN, M2LN)
    CreateQWordField (BUF0, \_SB.PCI0._Y1E._MIN, M2MN)
    CreateQWordField (BUF0, \_SB.PCI0._Y1E._MAX, M2MX)

    If ((TUUD >= 0x1000))
    {
        M2MN = (TUUD << 0x14)        // Start right after physical RAM
        M2LN = 0x0000001800000000    // 96GB window
        M2MX = ((M2MN + M2LN) - One)

        If ((M2MX > 0x7FFFFFFFFF))   // 39-bit physical address clamp
        {
            M2MX = 0x7FFFFFFFFF
            M2LN = ((M2MX - M2MN) + One)
        }
    }
    Else
    {
        M2MN = 0x0000000100000000
        M2LN = Zero                   // Zero-risk fallback: window length = 0
        M2MX = M2MN
    }
}

Principle: Using TUUD (a 19-bit register written by MRC at PCI0 offset 0xA8), the PCIe window starts exactly after the physical RAM remap region, avoiding the 4GB conflict. When TUUD < 0x1000 (or TUUD is unassigned), the Else branch sets the window length to zero — Windows then sees “no valid 64-bit window” and simply skips allocation, so the system boots normally without any crash.

:hammer_and_wrench: Step-by-Step Procedure

  1. Extract ACPI tables with AIDA64.

  2. Joint disassemble with iasl 20160729-32 and fix all syntax errors to 0 Errors.

  3. Modify _CRS as above and compile.

  4. Inject into BIOS using OZMTool (--dsdtinject).

  5. Flash via Q-Flash (BIOS settings: CSM Disabled, XHCI Hand-off Enabled).

  6. Run ReBarState.exe and set to 10 (1GB).

:stop_sign: Failures & The Final Wall (16GB MMIO Hard Limit)

Attempt 1 (ReBarState = 32 → POST A9 deadlock → EFIFlash disaster & DualBIOS rescue):

  • After testing 1GB successfully, I set ReBarState = 32 (16GB BAR) out of curiosity. Result: System hung at POST code A9 (PCIe resource allocation deadlock), buzzer screamed then went silent.

  • The Fatal Mistake: I attempted to recover the deadlocked BIOS by running Efiflash_v0.99_mod.efi. Because the PCH SMI interface was already hung, the tool crashed mid-erase, physically erasing the main BIOS boot block. The main BIOS was bricked. (Note: EFIFlash itself is not the problem — the tool ran in an already-corrupted PCH state, and any flasher would have failed the same way.)

  • Recovery (under Backup BIOS F8): The system automatically fell back to the Backup BIOS (F8). After booting into Windows from the backup BIOS, I installed the official Gigabyte App Center, which injected its low-level driver into the system. After a normal reboot, the DualBIOS auto-recovery was triggered, and it successfully overwrote the corrupted main BIOS chip with the intact F8 firmware from the backup chip. The main BIOS was fully restored.

  • Lesson: DO NOT attempt to flash a BIOS that is already in a POST deadlock. The PCH internal state is corrupted. Recovery must be done by booting from the Backup BIOS first.

Attempt 2 (ReBarState = 13 (8GB) / 11 (2GB)):

  • After recovering and re-flashing the TUUD mod, I tried 8GB and 2GB BARs. Both resulted in POST codes 96 / 69.

  • Recovery method: No EFIFlash was used this time. I simply removed the discrete GPU, booted via iGPU, changed ReBarState back to 10, re-inserted the GPU, and the system booted fine.

  • Conclusion: The Haswell platform’s MMIO High Window is hardcoded to 16GB. With 16GB RAM remapping taking ~12.5GB above 4GB, only ~3.5GB remains for all PCIe devices. A 2GB or 8GB BAR simply cannot fit.

(1GB is in a safe state!!!)

:red_question_mark: The Final Question / Request for Help

Is there any master here who can reverse-engineer the PciHostBridge.efi assembly code?
Currently, the Haswell platform’s MMIO High Window is hardcoded to 16GB. To enable 16GB BAR on Z97, we need to modify the PciHostBridge DXE driver to change the register assignment from 0x400000000 (16GB) to 0x800000000 (32GB) or 0x1000000000 (64GB).

All my modified files (BIOS, DSDT) and the GPU-Z success screenshot are attached below. This could push Haswell to its absolute limits!

:file_folder: Attachments (Use at your own risk!)

Z97XGAMING7_F9b_TUUD_TEST.zip (9.5 MB)(Please unzip this compressed file!/Modified BIOS)

  • :warning: WARNING: This is ONLY for the GA-Z97X-Gaming 7 (rev 1.0) with BIOS F9b and 16GB RAM. Do NOT flash this to other boards or 32GB RAM configurations, or you will get a POST deadlock!

isal2016_AND_DSDT_SSDT.zip (408.1 KB)(For research/reproduction)

  • acpi_dsdt.bin + 6 acpi_ssdt*.bin (Original ACPI tables extracted via AIDA64)

  • Note: These are the untouched original tables. They are provided for joint disassembly reference. Do NOT flash these directly; they contain no modifications.

Warning to Everyone: If your BIOS is already stuck in a POST deadlock (A9/96/69), do NOT use any flashing tool (especially EFIFlash). It will erase the boot block. Only use Q-Flash after recovering via Backup BIOS and iGPU.


Edit by Fernando: Thread title shortened

:warning: REQUIRED BIOS SETTINGS (or it will NOT boot):

· CSM Support: Disabled (Pure UEFI mode is mandatory for Above 4G)
· XHCI / EHCI Hand-off: Enabled
· Secure Boot: Disabled (or manually injected certificate)

This dynamic DSDT logic is compatible with the same model (Z97X-Gaming 7 rev 1.0) and same BIOS (F9b) using 16GB or less RAM. (For 4GB or less, Above 4G will safely fall back to disabled). Do NOT use on other motherboard models.

1 Like

Hi @Guava, thanks for sharing this, very useful. I have the same GPU (RX 9060 XT 16GB) on an Asus Z97-K R2.0 with an i7-5775C and 24GB RAM, and I’m planning a ReBAR mod too.

Two things:

  1. Could you run a quick benchmark with ReBarState 0 vs 10 (same game, same settings) and share average and 1% low fps? I currently get around 60-90 fps at ultra in GTA V Enhanced at 4K (144Hz TV), and I’m trying to find out if ReBAR actually helps on Haswell/Broadwell before I flash. The only numbers I found (Matrix, Z97-K + 4790K + RX 6700 XT) showed lower fps with the patched BIOS.

  2. About your final question: xCuri0’s patches.txt for UEFIPatch already includes PciHostBridge patches for Haswell/Broadwell (“Remove 4GB limit for PciRootBridgeIo.Mem” and “Replace 32/48GB - 63GB MMIO region with complete use of 512GB physical address space”), plus the NBPEI patch that changes the address space from 36-bit to 39-bit. Koekieezz’s Asus Z97-A ROM has all of them applied and people report 8GB BAR working there. I don’t know if the byte patterns match the Gigabyte PciHostBridge, but it may be worth running UEFIPatch on your F9b to check.

Thanks!

Hi diegori466

UEFIPatch failing is very common when porting a patch to a different board model. The patches.txt file relies on specific hexadecimal signatures and memory offsets found in the target board’s original BIOS. Since the Z97-K and Z97X-Gaming 7 have different BIOS layouts, the patches will almost certainly fail unless you adapt them.

Here’s what you should do:

1. Check if the patches are meant for your board series: Open the patches.txt file (e.g., HswAbove4G.txt) and see which board model or BIOS version it was originally written for. If it targets a different board, you’ll need to manually edit the hex patterns to match your Z97-K BIOS.

2. Extract your own modules: Use UEFITool to extract the PciBus, PciHostBridge, and NvramSmi modules from your Z97-K BIOS. Compare them with the patched versions from the GitHub repo. If they don’t match, you’ll need to either find Z97-K specific patches or manually adapt the hex offsets.

3. Use MMTool as an alternative: Some Z97 users bypass UEFIPatch entirely by using MMTool 4.50 to replace the modules directly with pre-patched versions. Search the forum for Z97-K specific threads or ask if anyone has already made compatible modules.

Whatever you do, do NOT flash my Z97X-Gaming 7 BIOS file onto your Z97-K, as it will brick your board.

Good luck! If you get a specific error message from UEFIPatch, feel free to share it and I’ll help you interpret it.

By the way, thanks for the tip! I just checked the latest patches.txt and you’re right — it has both the Haswell/Broadwell PciHostBridge MMIO expansion and the NBPEI 36→39-bit patch. My old patches.txt didn’t have them, which is why 8GB failed even though all patches applied cleanly. I’ll re-run UEFIPatch with the new file and try 8GB again. Fingers crossed.

Thanks @Guava! To clarify, I haven’t run UEFIPatch yet, I’m still collecting info before touching anything. I’ll run it against the official Z97-K R2.0 BIOS and post which patches apply.

And don’t worry, I won’t flash your Gigabyte file on my board.

If you get a chance, a quick ReBarState 0 vs 10 comparison in any game with the 9060 XT would be really helpful, since there is almost no benchmark data for ReBAR on Z97.

I have the Gaming 5 edition and would love to see a solution also. I’m up to the F8 BIOS upgrades, but haven’t done the full BIOS mod yet… I’ll be digging into it in a couple weeks…

Update: Even with the full patch set applied, ReBAR > 1GB still fails on my Gigabyte Z97X-Gaming 7.

I verified the patches are actually present in the running BIOS. I backed up the current BIOS via Q-Flash, opened it in UEFITool, and used Hex pattern search to confirm:

· NBPEI: 8B45FCC6400827 found → 36-bit to 39-bit (512GB) applied

· PciHostBridge: 010000004821C84839D8480F47D848BE000000007F0000004829DE found → 8-16GB MMIO replaced with 512GB space

· PciBus: B8FFFFFFFFFFFFFF004C3B found → <16GB BAR limit removed

· XHCI: 8680B18CFFFF00000B00000010 found → 9 Series XHCI BDW patch applied

So the MMIO window is definitely extended to 512GB, and all patches are correctly applied.

However, when I try larger BARs:

· ReBarState = 10 (1GB): stable, GTA5 runs fine.

· ReBarState = 11 (2GB): POST hangs at code 69. Even iGPU output does not come up. The board is completely stuck at POST, and only DualBIOS recovery can restore it.

· ReBarState = 13 (8GB): POST hangs at code 96.

This makes me suspect this specific Gigabyte Z97X-Gaming 7 (or Gigabyte’s Z97 implementation) cannot handle BARs larger than 1GB, regardless of the MMIO patches. It may not be a general Z97/Haswell platform limitation. Possibly the MMIO allocation still fails due to conflicts with the memory map, ME, iGPU reserved regions, or Gigabyte’s PciHostBridge behavior.

Has anyone actually succeeded with >1GB ReBAR on this exact board, or on other Gigabyte Z97 boards? Or is 1GB the practical limit on Gigabyte Z97? Any suggestions on DSDT window adjustments that might help? Or should I just accept 1GB as the max and stop trying?