Our PciHostBridgeDxe module creates one root bridge on the one and only
host bridge. The resource apertures of the root bridge (bus range, IO
space, MMIO space) are configured with the "mResAperture" array, which at
the moment carries static values inherited from PcAtChipsetPkg.

Set the array as first thing from the PCDs that we parsed from the device
tree.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Olivier Martin <[email protected]>
---

Notes:
    v2:
    - the PCI PCDs now come from ArmPlatformPkg [Olivier]

 ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf | 12 
++++++++++++
 ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.h      |  3 
+++
 ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c      | 17 
++++++++++++++---
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git 
a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf 
b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf
index 4d5bb9c..bb458b3 100644
--- a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf
@@ -23,6 +23,7 @@
 
 [Packages]
   MdePkg/MdePkg.dec
+  ArmPlatformPkg/ArmPlatformPkg.dec
 
 [LibraryClasses]
   UefiDriverEntryPoint
@@ -36,6 +37,7 @@
   DevicePathLib
   IoLib
   PciLib
+  PcdLib
 
 [Sources]
   PciHostBridge.c
@@ -48,5 +50,15 @@
   gEfiMetronomeArchProtocolGuid                         ## CONSUMES
   gEfiDevicePathProtocolGuid                            ## PRODUCES
 
+[Pcd]
+  gArmPlatformTokenSpaceGuid.PcdPciBusMin
+  gArmPlatformTokenSpaceGuid.PcdPciBusMax
+  gArmPlatformTokenSpaceGuid.PcdPciIoBase
+  gArmPlatformTokenSpaceGuid.PcdPciIoSize
+  gArmPlatformTokenSpaceGuid.PcdPciIoTranslation
+  gArmPlatformTokenSpaceGuid.PcdPciMmioBase
+  gArmPlatformTokenSpaceGuid.PcdPciMmioSize
+  gArmPlatformTokenSpaceGuid.PcdPciMmioTranslation
+
 [depex]
   gEfiMetronomeArchProtocolGuid
diff --git 
a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.h 
b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.h
index b69b832..19952a2 100644
--- a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.h
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.h
@@ -36,6 +36,7 @@
 #include <Library/DevicePathLib.h>
 #include <Library/IoLib.h>
 #include <Library/PciLib.h>
+#include <Library/PcdLib.h>
 
 //
 // Hard code the host bridge number in the platform.
@@ -400,9 +401,11 @@ typedef struct {
   
   UINT64          MemBase;     
   UINT64          MemLimit;    
+  UINT64          MemTranslation;
   
   UINT64          IoBase; 
   UINT64          IoLimit;     
+  UINT64          IoTranslation;
 } PCI_ROOT_BRIDGE_RESOURCE_APERTURE;
 
 typedef enum {
diff --git 
a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c 
b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c
index 2f6ef68..3bdd21b 100644
--- a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c
@@ -52,9 +52,7 @@ EFI_PCI_ROOT_BRIDGE_DEVICE_PATH 
mEfiPciRootBridgeDevicePath[1][1] = {
   }
 };
 
-PCI_ROOT_BRIDGE_RESOURCE_APERTURE  mResAperture[1][1] = {
-  {{0, 0xff, 0x80000000, 0xffffffff, 0, 0xffff}}
-};
+STATIC PCI_ROOT_BRIDGE_RESOURCE_APERTURE  mResAperture[1][1];
 
 EFI_HANDLE mDriverImageHandle;
 
@@ -106,6 +104,19 @@ InitializePciHostBridge (
  
   mDriverImageHandle = ImageHandle;
   
+  mResAperture[0][0].BusBase  = PcdGet32 (PcdPciBusMin);
+  mResAperture[0][0].BusLimit = PcdGet32 (PcdPciBusMax);
+
+  mResAperture[0][0].MemBase        = PcdGet64 (PcdPciMmioBase);
+  mResAperture[0][0].MemLimit       = PcdGet64 (PcdPciMmioBase) +
+                                      PcdGet64 (PcdPciMmioSize) - 1;
+  mResAperture[0][0].MemTranslation = PcdGet64 (PcdPciMmioTranslation);
+
+  mResAperture[0][0].IoBase        = PcdGet64 (PcdPciIoBase);
+  mResAperture[0][0].IoLimit       = PcdGet64 (PcdPciIoBase) +
+                                     PcdGet64 (PcdPciIoSize) - 1;
+  mResAperture[0][0].IoTranslation = PcdGet64 (PcdPciIoTranslation);
+
   //
   // Create Host Bridge Device Handle
   //
-- 
1.8.3.1



------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to