]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/PciBusDxe: Enumerator to check for RCiEP before looking for RP
authorRay Ni <ray.ni@intel.com>
Wed, 29 Dec 2021 13:21:09 +0000 (21:21 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Wed, 29 Dec 2021 13:45:29 +0000 (13:45 +0000)
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>
MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c

index ed7f2d4ac66d614e78020dfed820fdd59f5980af..9251388bc26836f6422656cf7b5a4b32bb3001e0 100644 (file)
@@ -2115,6 +2115,27 @@ AuthenticatePciDevice (
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Checks if PCI device is Root Bridge.\r
+\r
+  @param PciIoDevice       Instance of PCI device\r
+\r
+  @retval TRUE             Device is Root Bridge\r
+  @retval FALSE            Device is not Root Bridge\r
+\r
+**/\r
+BOOLEAN\r
+IsRootBridge (\r
+  IN PCI_IO_DEVICE  *PciIoDevice\r
+  )\r
+{\r
+  if (PciIoDevice->Parent == NULL) {\r
+    return TRUE;\r
+  } else {\r
+    return FALSE;\r
+  }\r
+}\r
+\r
 /**\r
   Create and initialize general PCI I/O device instance for\r
   PCI device/bridge device/hotplug bridge device.\r
@@ -2217,7 +2238,10 @@ CreatePciIoDevice (
     return NULL;\r
   }\r
 \r
-  if (PcdGetBool (PcdAriSupport)) {\r
+  //\r
+  // Check if device's parent is not Root Bridge\r
+  //\r
+  if (PcdGetBool (PcdAriSupport) && !IsRootBridge (Bridge)) {\r
     //\r
     // Check if the device is an ARI device.\r
     //\r