Some platform doesn't require PciBus driver to assign resource
to PCI devices which causes PciRootBridgeIo.Configuration() cannot
return correct resource information to caller.

When resource assignment by PciBus is not mandatory, only light
version of PCI bus enumeration is performed, which only collects
the device resource consumption and publishes the PciIo instance.
The corresponding logic is in PciEnumeratorLight() in PciBus driver.

But PciEnumeratorLight() still depends on
PciRootBridgeIo.Configuration() returns the starting bus number in
order to search down to find all PCI devices under the root bridge.

When ResourceAssigned in PCI_ROOT_BRIDGE returned by
PciHostBridgeGetRootBridges() is TRUE, PciHostBridge driver treats
the Bus/Io/Mem/MemAbove4G/PMem/PMemAbove4G as the resource that are
*actually assigned* to the root bridge, instead of the resource that
*can be assigned* to the root bridge.
So that PciRootBridgeIo.Configuration() can return the correct
information.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu...@intel.com>
Reviewed-by: Laszlo Ersek <ler...@redhat.com>
---
 MdeModulePkg/Include/Library/PciHostBridgeLib.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/MdeModulePkg/Include/Library/PciHostBridgeLib.h 
b/MdeModulePkg/Include/Library/PciHostBridgeLib.h
index eb45cfd..d42e9ec 100644
--- a/MdeModulePkg/Include/Library/PciHostBridgeLib.h
+++ b/MdeModulePkg/Include/Library/PciHostBridgeLib.h
@@ -38,6 +38,8 @@ typedef struct {
                                                   ///< Extended (4096-byte) 
Configuration Space.
                                                   ///< When TRUE, the root 
bridge supports
                                                   ///< 256-byte Configuration 
Space only.
+  BOOLEAN                  ResourceAssigned;      ///< Resource assignment 
status of the root bridge.
+                                                  ///< Set to TRUE if 
Bus/IO/MMIO resources for root bridge have been assigned.
   UINT64                   AllocationAttributes;  ///< Allocation attributes.
                                                   ///< Refer to 
EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM and
                                                   ///< 
EFI_PCI_HOST_BRIDGE_MEM64_DECODE used by GetAllocAttributes()
-- 
2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to