]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiPayloadPkg: Connect all root bridge in PlatformBootManagerBeforeConsole
authorLiu, Zhiguang <Zhiguang.Liu@intel.com>
Thu, 12 May 2022 10:54:59 +0000 (18:54 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 13 May 2022 01:47:11 +0000 (01:47 +0000)
Some ConIn or ConOut device may not in the first root bridge, so connect all
root bridge  before detect ConIn and ConOut device.

Reviewed-by: Guo Dong <guo.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Benjamin You <benjamin.you@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformConsole.c

index acf2880d2265334c9b9b10fe4eb0ac2fb3b94217..9f58c460cd6bd39e7dd182e08072872c181025e1 100644 (file)
@@ -61,6 +61,7 @@
   gEfiSmmAccess2ProtocolGuid\r
   gUniversalPayloadPlatformBootManagerOverrideProtocolGuid\r
   gEfiSerialIoProtocolGuid\r
+  gEfiPciRootBridgeIoProtocolGuid\r
 \r
 [Pcd]\r
   gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut\r
index 5aece6636f6557a9358293fd9f5b0330def29d01..e92d12e991ca305b89c20aae64ed8dbf4b0fb2f7 100644 (file)
@@ -38,9 +38,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
     0 \\r
   }\r
 \r
-#define gPciRootBridge \\r
-  PNPID_DEVICE_PATH_NODE(0x0A03)\r
-\r
 #define gPnp16550ComPort \\r
   PNPID_DEVICE_PATH_NODE(0x0501)\r
 \r
@@ -64,19 +61,6 @@ ACPI_HID_DEVICE_PATH  gPnpPs2KeyboardDeviceNode  = gPnpPs2Keyboard;
 ACPI_HID_DEVICE_PATH  gPnp16550ComPortDeviceNode = gPnp16550ComPort;\r
 VENDOR_DEVICE_PATH    gTerminalTypeDeviceNode    = gPcAnsiTerminal;\r
 \r
-//\r
-// Predefined platform root bridge\r
-//\r
-PLATFORM_ROOT_BRIDGE_DEVICE_PATH  gPlatformRootBridge0 = {\r
-  gPciRootBridge,\r
-  gEndEntire\r
-};\r
-\r
-EFI_DEVICE_PATH_PROTOCOL  *gPlatformRootBridges[] = {\r
-  (EFI_DEVICE_PATH_PROTOCOL *)&gPlatformRootBridge0,\r
-  NULL\r
-};\r
-\r
 BOOLEAN  mDetectDisplayOnly;\r
 \r
 /**\r
@@ -447,32 +431,24 @@ DetectAndPreparePlatformPciDevicePaths (
 }\r
 \r
 /**\r
-  The function will connect root bridge\r
+  The function will connect one root bridge\r
 \r
-   @return EFI_SUCCESS      Connect RootBridge successfully.\r
+  @param[in]  Handle     - The root bridge handle\r
+  @param[in]  Instance   - The instance of the root bridge\r
+\r
+  @return EFI_SUCCESS      Connect RootBridge successfully.\r
 \r
 **/\r
 EFI_STATUS\r
-ConnectRootBridge (\r
-  VOID\r
+EFIAPI\r
+ConnectOneRootBridge (\r
+  IN EFI_HANDLE  Handle,\r
+  IN VOID        *Instance\r
   )\r
 {\r
   EFI_STATUS  Status;\r
-  EFI_HANDLE  RootHandle;\r
 \r
-  //\r
-  // Make all the PCI_IO protocols on PCI Seg 0 show up\r
-  //\r
-  Status = gBS->LocateDevicePath (\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  &gPlatformRootBridges[0],\r
-                  &RootHandle\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  Status = gBS->ConnectController (RootHandle, NULL, NULL, FALSE);\r
+  Status = gBS->ConnectController (Handle, NULL, NULL, FALSE);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -491,7 +467,10 @@ PlatformConsoleInit (
   VOID\r
   )\r
 {\r
-  ConnectRootBridge ();\r
+  VisitAllInstancesOfProtocol (\r
+    &gEfiPciRootBridgeIoProtocolGuid,\r
+    ConnectOneRootBridge\r
+    );\r
 \r
   //\r
   // Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut\r