In case the 64-bit pci mmio window is larger than the default size
of 32G be generous and hand out larger chunks of address space for
prefetchable mmio bridge windows.

Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
 OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf |  1 +
 OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c   | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf 
b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf
index 78b95faa7a7a..f56b1de6fd92 100644
--- a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf
+++ b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf
@@ -40,6 +40,7 @@ [Protocols]
 
 [Pcd]
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId ## CONSUMES
+  gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size          ## CONSUMES
 
 [Depex]
   TRUE
diff --git a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c 
b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
index c122855b735d..08ea5b57bc18 100644
--- a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
+++ b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
@@ -744,12 +744,25 @@ GetResourcePadding (
     //
     // Request defaults.
     //
+    UINT64  Pci64Size = PcdGet64 (PcdPciMmio64Size);
+
+    // non-prefetchable
     SetMmioPadding (
       --FirstResource,
       FALSE,
       TRUE,
       (UINTN)HighBitSetRoundUp32 (SIZE_2MB)
       );
+
+    // prefetchable
+    if (Pci64Size > SIZE_32GB) {
+      SetMmioPadding (
+        --FirstResource,
+        TRUE,
+        FALSE,
+        (UINTN)HighBitSetRoundUp64 (RShiftU64 (Pci64Size, 8))
+        );
+    }
   }
 
   //
-- 
2.37.3



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#94521): https://edk2.groups.io/g/devel/message/94521
Mute This Topic: https://groups.io/mt/93994880/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to