]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg/ArmPsciResetSystemLib: Made the library only using SMC
authorOlivier Martin <olivier.martin@arm.com>
Fri, 10 Oct 2014 11:22:50 +0000 (11:22 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 Oct 2014 11:22:50 +0000 (11:22 +0000)
Only ArmVirtualizationPkg based platforms are expected to use
the dynamic method to choose between SMC and HVC to invoke PSCI.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16204 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/ArmPkg.dec
ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualization.dsc.inc
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.c [new file with mode: 0644]
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.inf [new file with mode: 0644]
ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf

index 31427514492e54ea6d5c821d4565e42c0a036ea1..05bc1dcd6d613c042c01f304b6ee13aac5a5de9e 100644 (file)
   gArmTokenSpaceGuid.PcdGicDistributorBase|0|UINT32|0x0000000C\r
   gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0|UINT32|0x0000000D\r
   gArmTokenSpaceGuid.PcdGicSgiIntId|0|UINT32|0x00000025\r
-\r
-  #\r
-  # ARM PSCI function invocations can be done either through hypervisor\r
-  # calls (HVC) or secure monitor calls (SMC).\r
-  # PcdArmPsciMethod == 1 : use HVC\r
-  # PcdArmPsciMethod == 2 : use SMC\r
-  #\r
-  gArmTokenSpaceGuid.PcdArmPsciMethod|0|UINT32|0x00000042\r
index 286d37fb47b1bf5cf2e999443dd1ecd1968e98b8..df4e113c0e09f8b55e703937b55cd519dde8d462 100644 (file)
@@ -1,8 +1,12 @@
 /** @file\r
   Support ResetSystem Runtime call using PSCI calls\r
 \r
+  Note: A similar library is implemented in\r
+  ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib\r
+  So similar issues might exist in this implementation too.\r
+\r
   Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-  Copyright (c) 2013, ARM Ltd. All rights reserved.<BR>\r
+  Copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR>\r
   Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
 #include <Library/DebugLib.h>\r
 #include <Library/EfiResetSystemLib.h>\r
 #include <Library/ArmSmcLib.h>\r
-#include <Library/ArmHvcLib.h>\r
 \r
 #include <IndustryStandard/ArmStdSmc.h>\r
 \r
-STATIC UINT32 mArmPsciMethod;\r
-\r
-RETURN_STATUS\r
-EFIAPI\r
-ArmPsciResetSystemLibConstructor (\r
-  VOID\r
-  )\r
-{\r
-  mArmPsciMethod = PcdGet32 (PcdArmPsciMethod);\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
 /**\r
   Resets the entire platform.\r
 \r
@@ -58,10 +49,8 @@ LibResetSystem (
   )\r
 {\r
   ARM_SMC_ARGS ArmSmcArgs;\r
-  ARM_HVC_ARGS ArmHvcArgs;\r
 \r
   switch (ResetType) {\r
-\r
   case EfiResetPlatformSpecific:\r
     // Map the platform specific reset as reboot\r
   case EfiResetWarm:\r
@@ -69,31 +58,17 @@ LibResetSystem (
   case EfiResetCold:\r
     // Send a PSCI 0.2 SYSTEM_RESET command\r
     ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;\r
-    ArmHvcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;\r
     break;\r
   case EfiResetShutdown:\r
     // Send a PSCI 0.2 SYSTEM_OFF command\r
     ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_OFF;\r
-    ArmHvcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_OFF;\r
     break;\r
   default:\r
     ASSERT (FALSE);\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  switch (mArmPsciMethod) {\r
-  case 1:\r
-    ArmCallHvc (&ArmHvcArgs);\r
-    break;\r
-\r
-  case 2:\r
-    ArmCallSmc (&ArmSmcArgs);\r
-    break;\r
-\r
-  default:\r
-    DEBUG ((EFI_D_ERROR, "%a: no PSCI method defined\n", __FUNCTION__));\r
-    return EFI_UNSUPPORTED;\r
-  }\r
+  ArmCallSmc (&ArmSmcArgs);\r
 \r
   // We should never be here\r
   DEBUG ((EFI_D_ERROR, "%a: PSCI Reset failed\n", __FUNCTION__));\r
index 1a5bb6d10dc276aa49cd8fc69ac96cbd484d07b0..9cdde1f154fa32c1be4b17731ca27565531a3e6c 100644 (file)
@@ -3,6 +3,7 @@
 #\r
 # Copyright (c) 2008, Apple Inc. All rights reserved.<BR>\r
 # Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR>\r
+# Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
@@ -21,7 +22,6 @@
   MODULE_TYPE                    = BASE\r
   VERSION_STRING                 = 1.0\r
   LIBRARY_CLASS                  = EfiResetSystemLib\r
-  CONSTRUCTOR                    = ArmPsciResetSystemLibConstructor\r
 \r
 [Sources]\r
   ArmPsciResetSystemLib.c\r
@@ -35,7 +35,3 @@
   DebugLib\r
   BaseLib\r
   ArmSmcLib\r
-  ArmHvcLib\r
-\r
-[Pcd]\r
-  gArmTokenSpaceGuid.PcdArmPsciMethod\r
index 7929dcfa05431936adea05a23a3c2dd2825c97be..b05f1ec7c606cb896e229f630834aa0cbd7fc324 100644 (file)
@@ -73,7 +73,7 @@
   ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerVirtCounterLib/ArmGenericTimerVirtCounterLib.inf\r
 \r
   PlatformPeiLib|ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf\r
-  EfiResetSystemLib|ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf\r
+  EfiResetSystemLib|ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.inf\r
 \r
   # ARM PL031 RTC Driver\r
   RealTimeClockLib|ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf\r
index c07fce94a4797700550eb130edc11fb24050b02b..b581add024aa02830e264a4e2ef3f48761cf4899 100644 (file)
   #\r
   gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress|0x0|UINT64|0x00000001\r
 \r
-[PcdsDynamic,PcdsFixedAtBuild]\r
+[PcdsDynamic, PcdsFixedAtBuild]\r
   gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress|0x0|UINT64|0x00000002\r
+\r
+  #\r
+  # ARM PSCI function invocations can be done either through hypervisor\r
+  # calls (HVC) or secure monitor calls (SMC).\r
+  # PcdArmPsciMethod == 1 : use HVC\r
+  # PcdArmPsciMethod == 2 : use SMC\r
+  #\r
+  gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod|0|UINT32|0x00000003\r
index abf419f355a656611bb66c7fccb7360ff23bb76f..634788368cc3f6ddd16252dd6223a75a9c195195 100644 (file)
   ## PL031 RealTimeClock\r
   gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x0\r
 \r
-  gArmTokenSpaceGuid.PcdArmPsciMethod|0\r
+  gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod|0\r
 \r
 ################################################################################\r
 #\r
diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.c b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.c
new file mode 100644 (file)
index 0000000..88332f5
--- /dev/null
@@ -0,0 +1,125 @@
+/** @file\r
+  Support ResetSystem Runtime call using PSCI calls\r
+\r
+  Note: A similar library is implemented in\r
+  ArmPkg/Library/ArmPsciResetSystemLib. Similar issues might\r
+  exist in this implementation too.\r
+\r
+  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
+  Copyright (c) 2013, ARM Ltd. All rights reserved.<BR>\r
+  Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR>\r
+\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/EfiResetSystemLib.h>\r
+#include <Library/ArmSmcLib.h>\r
+#include <Library/ArmHvcLib.h>\r
+\r
+#include <IndustryStandard/ArmStdSmc.h>\r
+\r
+STATIC UINT32 mArmPsciMethod;\r
+\r
+RETURN_STATUS\r
+EFIAPI\r
+ArmPsciResetSystemLibConstructor (\r
+  VOID\r
+  )\r
+{\r
+  mArmPsciMethod = PcdGet32 (PcdArmPsciMethod);\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+  Resets the entire platform.\r
+\r
+  @param  ResetType             The type of reset to perform.\r
+  @param  ResetStatus           The status code for the reset.\r
+  @param  DataSize              The size, in bytes, of WatchdogData.\r
+  @param  ResetData             For a ResetType of EfiResetCold, EfiResetWarm, or\r
+                                EfiResetShutdown the data buffer starts with a Null-terminated\r
+                                Unicode string, optionally followed by additional binary data.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LibResetSystem (\r
+  IN EFI_RESET_TYPE   ResetType,\r
+  IN EFI_STATUS       ResetStatus,\r
+  IN UINTN            DataSize,\r
+  IN CHAR16           *ResetData OPTIONAL\r
+  )\r
+{\r
+  ARM_SMC_ARGS ArmSmcArgs;\r
+  ARM_HVC_ARGS ArmHvcArgs;\r
+\r
+  switch (ResetType) {\r
+\r
+  case EfiResetPlatformSpecific:\r
+    // Map the platform specific reset as reboot\r
+  case EfiResetWarm:\r
+    // Map a warm reset into a cold reset\r
+  case EfiResetCold:\r
+    // Send a PSCI 0.2 SYSTEM_RESET command\r
+    ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;\r
+    ArmHvcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;\r
+    break;\r
+  case EfiResetShutdown:\r
+    // Send a PSCI 0.2 SYSTEM_OFF command\r
+    ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_OFF;\r
+    ArmHvcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_OFF;\r
+    break;\r
+  default:\r
+    ASSERT (FALSE);\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  switch (mArmPsciMethod) {\r
+  case 1:\r
+    ArmCallHvc (&ArmHvcArgs);\r
+    break;\r
+\r
+  case 2:\r
+    ArmCallSmc (&ArmSmcArgs);\r
+    break;\r
+\r
+  default:\r
+    DEBUG ((EFI_D_ERROR, "%a: no PSCI method defined\n", __FUNCTION__));\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  // We should never be here\r
+  DEBUG ((EFI_D_ERROR, "%a: PSCI Reset failed\n", __FUNCTION__));\r
+  CpuDeadLoop ();\r
+  return EFI_UNSUPPORTED;\r
+}\r
+\r
+/**\r
+  Initialize any infrastructure required for LibResetSystem () to function.\r
+\r
+  @param  ImageHandle   The firmware allocated handle for the EFI image.\r
+  @param  SystemTable   A pointer to the EFI System Table.\r
+\r
+  @retval EFI_SUCCESS   The constructor always returns EFI_SUCCESS.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LibInitializeResetSystem (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  )\r
+{\r
+  return EFI_SUCCESS;\r
+}\r
diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.inf b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPsciResetSystemLib/ArmVirtualizationPsciResetSystemLib.inf
new file mode 100644 (file)
index 0000000..b63507a
--- /dev/null
@@ -0,0 +1,42 @@
+#/** @file\r
+# Reset System lib using PSCI hypervisor or secure monitor calls\r
+#\r
+# Copyright (c) 2008, Apple Inc. All rights reserved.<BR>\r
+# Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR>\r
+#\r
+#  This program and the accompanying materials\r
+#  are licensed and made available under the terms and conditions of the BSD License\r
+#  which accompanies this distribution. The full text of the license may be found at\r
+#  http://opensource.org/licenses/bsd-license.php\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+#\r
+#**/\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = ArmVirtualizationPsciResetSystemLib\r
+  FILE_GUID                      = c81d76ed-66fa-44a3-ac4a-f163120187a9\r
+  MODULE_TYPE                    = BASE\r
+  VERSION_STRING                 = 1.0\r
+  LIBRARY_CLASS                  = EfiResetSystemLib\r
+  CONSTRUCTOR                    = ArmPsciResetSystemLibConstructor\r
+\r
+[Sources]\r
+  ArmVirtualizationPsciResetSystemLib.c\r
+\r
+[Packages]\r
+  ArmPkg/ArmPkg.dec\r
+  ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec\r
+  MdePkg/MdePkg.dec\r
+  EmbeddedPkg/EmbeddedPkg.dec\r
+\r
+[LibraryClasses]\r
+  DebugLib\r
+  BaseLib\r
+  ArmSmcLib\r
+  ArmHvcLib\r
+\r
+[Pcd]\r
+  gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod\r
index 1f10179f057ce85e79902d2be845b367a0b53958..1c9dd20580c4d1944b64c8667b7f136eac69ceb4 100644 (file)
@@ -46,6 +46,7 @@
 \r
 [Pcd]\r
   gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress\r
+  gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod\r
   gArmTokenSpaceGuid.PcdGicDistributorBase\r
   gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase\r
   gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum\r
@@ -53,7 +54,6 @@
   gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum\r
   gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum\r
   gArmPlatformTokenSpaceGuid.PcdPL031RtcBase\r
-  gArmTokenSpaceGuid.PcdArmPsciMethod\r
 \r
 [Protocols]\r
   gEfiDevicePathProtocolGuid\r