]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmVirtPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.c
ArmVirtPkg/FdtPL011SerialPortLib: honor DT node 'status' property
[mirror_edk2.git] / ArmVirtPkg / Library / FdtPL011SerialPortLib / EarlyFdtPL011SerialPortLib.c
index c8bfb2972eb9fc5c1607f66fd05fbea7a4c23bf5..e28750f3b4c4ce5412e76c39e5f9b185dc6b0153 100644 (file)
@@ -66,12 +66,13 @@ SerialPortGetBaseAddress (
   INT32               Node, Prev;\r
   INT32               Len;\r
   CONST CHAR8         *Compatible;\r
+  CONST CHAR8         *NodeStatus;\r
   CONST CHAR8         *CompatibleItem;\r
   CONST UINT64        *RegProperty;\r
   UINTN               UartBase;\r
   RETURN_STATUS       Status;\r
 \r
-  DeviceTreeBase = (VOID *)(UINTN)FixedPcdGet64 (PcdDeviceTreeInitialBaseAddress);\r
+  DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress);\r
 \r
   if ((DeviceTreeBase == NULL) || (fdt_check_header (DeviceTreeBase) != 0)) {\r
     return 0;\r
@@ -98,6 +99,11 @@ SerialPortGetBaseAddress (
       CompatibleItem += 1 + AsciiStrLen (CompatibleItem)) {\r
 \r
       if (AsciiStrCmp (CompatibleItem, "arm,pl011") == 0) {\r
+        NodeStatus = fdt_getprop (DeviceTreeBase, Node, "status", &Len);\r
+        if (NodeStatus != NULL && AsciiStrCmp (NodeStatus, "okay") != 0) {\r
+          continue;\r
+        }\r
+\r
         RegProperty = fdt_getprop (DeviceTreeBase, Node, "reg", &Len);\r
         if (Len != 16) {\r
           return 0;\r
@@ -112,7 +118,13 @@ SerialPortGetBaseAddress (
 \r
         Status = PL011UartInitializePort (\r
                    UartBase,\r
-                   &BaudRate, &ReceiveFifoDepth, &Parity, &DataBits, &StopBits);\r
+                   FixedPcdGet32 (PL011UartClkInHz),\r
+                   &BaudRate,\r
+                   &ReceiveFifoDepth,\r
+                   &Parity,\r
+                   &DataBits,\r
+                   &StopBits\r
+                   );\r
         if (!EFI_ERROR (Status)) {\r
           return UartBase;\r
         }\r