]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmVirtPkg/ArmVirtPsciResetSystemLib: move to FDT client protocol
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 8 Apr 2016 09:44:53 +0000 (11:44 +0200)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 11 Apr 2016 16:12:21 +0000 (18:12 +0200)
Instead of relying on VirtFdtDxe to detect the PSCI method, move our
EfiResetSystemLib to the FDT client protocol to interrogate the device
tree directly.

Since this library is only consumed by EmbeddedPkg/ResetRuntimeDxe, and
considering that the PCD is no longer set, and even removed completely in a
subsequent patch, this conversion is guaranteed to be safe.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.c
ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.inf

index 88332f56fd9c27f4f94f36adf62c7af5ec8e657c..b94d1b0090c69a3a5f743869d2b907b2aef4ff8a 100644 (file)
 #include <Library/EfiResetSystemLib.h>\r
 #include <Library/ArmSmcLib.h>\r
 #include <Library/ArmHvcLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
 \r
 #include <IndustryStandard/ArmStdSmc.h>\r
 \r
+#include <Protocol/FdtClient.h>\r
+\r
 STATIC UINT32 mArmPsciMethod;\r
 \r
 RETURN_STATUS\r
@@ -37,8 +40,30 @@ ArmPsciResetSystemLibConstructor (
   VOID\r
   )\r
 {\r
-  mArmPsciMethod = PcdGet32 (PcdArmPsciMethod);\r
-  return RETURN_SUCCESS;\r
+  EFI_STATUS            Status;\r
+  FDT_CLIENT_PROTOCOL   *FdtClient;\r
+  CONST VOID            *Prop;\r
+\r
+  Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,\r
+                  (VOID **)&FdtClient);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  Status = FdtClient->FindCompatibleNodeProperty (FdtClient, "arm,psci-0.2",\r
+                        "method", &Prop, NULL);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (AsciiStrnCmp (Prop, "hvc", 3) == 0) {\r
+    mArmPsciMethod = 1;\r
+  } else if (AsciiStrnCmp (Prop, "smc", 3) == 0) {\r
+    mArmPsciMethod = 2;\r
+  } else {\r
+    DEBUG ((EFI_D_ERROR, "%a: Unknown PSCI method \"%a\"\n", __FUNCTION__,\r
+      Prop));\r
+    return EFI_NOT_FOUND;\r
+  }\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
index 86d6104ca2588ad24489038d4229fe2d627d8885..9dc515aee52b0b288d9dee940eb6ed8d8185fd37 100644 (file)
@@ -20,7 +20,7 @@
   FILE_GUID                      = c81d76ed-66fa-44a3-ac4a-f163120187a9\r
   MODULE_TYPE                    = BASE\r
   VERSION_STRING                 = 1.0\r
-  LIBRARY_CLASS                  = EfiResetSystemLib\r
+  LIBRARY_CLASS                  = EfiResetSystemLib|DXE_DRIVER DXE_RUNTIME_DRIVER\r
   CONSTRUCTOR                    = ArmPsciResetSystemLibConstructor\r
 \r
 [Sources]\r
   EmbeddedPkg/EmbeddedPkg.dec\r
 \r
 [LibraryClasses]\r
-  DebugLib\r
-  BaseLib\r
   ArmSmcLib\r
   ArmHvcLib\r
+  BaseLib\r
+  DebugLib\r
+  UefiBootServicesTableLib\r
+\r
+[Protocols]\r
+  gFdtClientProtocolGuid                                ## CONSUMES\r
 \r
-[Pcd]\r
-  gArmVirtTokenSpaceGuid.PcdArmPsciMethod\r
+[Depex]\r
+  gFdtClientProtocolGuid\r