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
/** @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
)\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
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
#\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
MODULE_TYPE = BASE\r
VERSION_STRING = 1.0\r
LIBRARY_CLASS = EfiResetSystemLib\r
- CONSTRUCTOR = ArmPsciResetSystemLibConstructor\r
\r
[Sources]\r
ArmPsciResetSystemLib.c\r
DebugLib\r
BaseLib\r
ArmSmcLib\r
- ArmHvcLib\r
-\r
-[Pcd]\r
- gArmTokenSpaceGuid.PcdArmPsciMethod\r
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
#\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
## PL031 RealTimeClock\r
gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x0\r
\r
- gArmTokenSpaceGuid.PcdArmPsciMethod|0\r
+ gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod|0\r
\r
################################################################################\r
#\r
--- /dev/null
+/** @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
--- /dev/null
+#/** @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
\r
[Pcd]\r
gArmVirtualizationTokenSpaceGuid.PcdDeviceTreeBaseAddress\r
+ gArmVirtualizationTokenSpaceGuid.PcdArmPsciMethod\r
gArmTokenSpaceGuid.PcdGicDistributorBase\r
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase\r
gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum\r
gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum\r
gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum\r
gArmPlatformTokenSpaceGuid.PcdPL031RtcBase\r
- gArmTokenSpaceGuid.PcdArmPsciMethod\r
\r
[Protocols]\r
gEfiDevicePathProtocolGuid\r