summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRay Ni <ray.ni@intel.com>2021-12-29 21:21:09 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2021-12-29 13:45:29 +0000
commitc095122d4b5f3152417cd97dabecfe31cc3b6508 (patch)
tree1aa741a4cb0fbb488338a5a30bbf86276226fbbc
parent7935be0fbd8f47266e5972f4cba1a1e58505061a (diff)
downloadedk2-c095122d4b5f3152417cd97dabecfe31cc3b6508.tar.gz
edk2-c095122d4b5f3152417cd97dabecfe31cc3b6508.tar.bz2
edk2-c095122d4b5f3152417cd97dabecfe31cc3b6508.zip
MdeModulePkg/PciBusDxe: Enumerator to check for RCiEP before looking for RP
Before trying to access parent root port to check ARI capabilities, enumerator should see if Endpoint device is not Root Complex integrated to avoid undefined parent register accesses. Signed-off-by: Damian Bassa <damian.bassa@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
-rw-r--r--MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
index ed7f2d4ac6..9251388bc2 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
@@ -2116,6 +2116,27 @@ AuthenticatePciDevice (
}
/**
+ Checks if PCI device is Root Bridge.
+
+ @param PciIoDevice Instance of PCI device
+
+ @retval TRUE Device is Root Bridge
+ @retval FALSE Device is not Root Bridge
+
+**/
+BOOLEAN
+IsRootBridge (
+ IN PCI_IO_DEVICE *PciIoDevice
+ )
+{
+ if (PciIoDevice->Parent == NULL) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+/**
Create and initialize general PCI I/O device instance for
PCI device/bridge device/hotplug bridge device.
@@ -2217,7 +2238,10 @@ CreatePciIoDevice (
return NULL;
}
- if (PcdGetBool (PcdAriSupport)) {
+ //
+ // Check if device's parent is not Root Bridge
+ //
+ if (PcdGetBool (PcdAriSupport) && !IsRootBridge (Bridge)) {
//
// Check if the device is an ARI device.
//