ReBarUEFI - ReBarDxe.ffs介紹

UEFI DXE 驅(qū)動(dòng)程序,用于在官方不支持可調(diào)整大小的 BAR 的系統(tǒng)上啟用它。這提供了性能優(yōu)勢(shì),甚至是英特爾 Arc GPU 發(fā)揮最佳功能 所必需的。
要求
? ? A:(可選)啟用 4G 解碼。如果您找不到相應(yīng)的選項(xiàng),請(qǐng)參閱 wiki 頁(yè)面啟用隱藏 4G 解碼。如果沒(méi)有 4G 解碼,您將被限制為 1GB BAR,在某些情況下為 512MB,您可以嘗試通過(guò)減少 TOLUD 將其增加到 2GB
? ? B: (可選)BIOS 支持大型 BAR。存在補(bǔ)丁可以解決與此相關(guān)的大多數(shù)問(wèn)題
用法
1,看我視頻

2,運(yùn)行修改后的固件后,請(qǐng)確保啟用 4G 解碼并且關(guān)閉 CSM。
原理
該模塊被添加到 UEFI 固件的 DXE 卷中,以便在每次啟動(dòng)時(shí)執(zhí)行。ReBarDxe 模塊將 的 函數(shù)替換為檢查可調(diào)整大小的 BAR 功能PreprocessController的函數(shù),然后在運(yùn)行原始函數(shù)后將PciHostBridgeResourceAllocationProtocol其設(shè)置為 NVRAM 變量的大小。ReBarStatePreprocessController模塊稍后在 PCI 枚舉期間調(diào)用新函數(shù)PciBus,該模塊將檢測(cè)新的 BAR 大小并相應(yīng)地分配它。
UEFI 補(bǔ)丁
大多數(shù) UEFI 固件在處理 64 位 BAR 時(shí)都存在問(wèn)題,因此創(chuàng)建了多個(gè)補(bǔ)丁來(lái)解決這些問(wèn)題。您可以使用UEFIPatch應(yīng)用位于 UEFIPatch 文件夾中的這些補(bǔ)丁。
工作補(bǔ)丁
<4GB BAR 大小限制移除
<16GB BAR 大小限制移除
<64GB BAR 大小限制移除
防止 64 位 BAR 降級(jí)為 32 位
將 MMIO 空間增加到 64GB (Haswell/Broadwell)。完整的 512GB/39 位尚不可能。
將 MMIO 空間從 16GB 增加到充分利用 64GB/36 位范圍 (Sandy/Ivy Bridge)。需要在某些主板上進(jìn)行 DSDT 修改。有關(guān)詳細(xì)信息,請(qǐng)參閱 wiki 頁(yè)面DSDT 修補(bǔ)。
移除NVRAM白名單解決ReBarStateGetLastError: 5
修復(fù) USB 3 端口在啟用 4G 解碼的 BIOS 中無(wú)法工作的問(wèn)題 (Ivy Bridge/Haswell/Broadwell)
問(wèn)答
1,它可以在 PCIe Gen2 系統(tǒng)上工作嗎?
? ? ? 此前人們認(rèn)為它無(wú)法在 PCIe Gen2 系統(tǒng)上工作,但一位用戶讓它在 i5 2500k 上工作。
2,我可以在不修改 BIOS 的情況下在我的系統(tǒng)上使用可調(diào)整大小的 BAR 嗎?
? ? ? 您可以在 Linux 上使用4G 解碼,最新版本將自動(dòng)調(diào)整大小并分配 GPU BAR。如果您的 BIOS 沒(méi)有 4G 解碼選項(xiàng)(請(qǐng)務(wù)必選中隱藏)或 DSDT 有故障,您可以按照Arch wiki 指南進(jìn)行 DSDT 修改,使用DSDT 修補(bǔ)中的修改并pci=realloc在內(nèi)核命令行中啟動(dòng)。目前沒(méi)有已知的方法可以在不修改 BIOS 的情況下在 Windows 上獲取它。
3,我設(shè)置了不受支持的 BAR 大小,并且我的系統(tǒng)無(wú)法啟動(dòng)
? ? ? 應(yīng)禁用清除 CMOS 和可調(diào)整大小的 BAR。在某些情況下,可能需要取出 CMOS 電池才能禁用可調(diào)整大小的 BAR。
4,小于最佳 BAR 大小是否仍會(huì)提高性能?
? ? ?在我的配備 i5 3470 和 Sapphire Nitro+ RX 580 8GB 且在驅(qū)動(dòng)程序中啟用可調(diào)整大小 BAR 的系統(tǒng)上,當(dāng) BAR 大小為 2GB 時(shí),F(xiàn)PS 提高了高達(dá) 12%。
感謝
@dsanke、@cursemex、@val3nt33n、@Mak3rde和@romulus2k4用于測(cè)試/幫助開(kāi)發(fā)補(bǔ)丁
Linux內(nèi)核尤其是amdgpu驅(qū)動(dòng)程序
EDK2為所有 OEM UEFI 遵循的基礎(chǔ)
Ghidra用于修補(bǔ) UEFI 模塊以解決人為限制
@vit9696用于 NVRAM 白名單補(bǔ)丁
@NikolajSchlej用于開(kāi)發(fā) UEFITool/UEFIPatch
QEMU /OVMF 使測(cè)試掛鉤變得更容易,盡管它沒(méi)有任何可調(diào)整大小的 BAR 設(shè)備,所以我可以測(cè)試它的唯一方法是在我的實(shí)際 PC 上。