#define ARM_SMC_ID_PSCI_MIGRATE_AARCH32 0x84000005\r
#define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x84000008\r
#define ARM_SMC_ID_PSCI_SYSTEM_RESET 0x84000009\r
+#define ARM_SMC_ID_PSCI_FEATURES 0x8400000A\r
+#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64 0xC4000012\r
\r
/* The current PSCI version is: 0.2 */\r
#define ARM_SMC_PSCI_VERSION_MAJOR 0\r
\r
Copyright (c) 2017 - 2018, Linaro Ltd. All rights reserved.<BR>\r
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2022, Arm Limited. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
VOID\r
)\r
{\r
- // Map a warm reset into a cold reset\r
- ResetCold ();\r
+ UINTN Arg1;\r
+ UINTN Ret;\r
+\r
+ Arg1 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;\r
+\r
+ // Is SYSTEM_RESET2 supported?\r
+ Ret = ArmCallSmc0 (ARM_SMC_ID_PSCI_FEATURES, &Arg1, NULL, NULL);\r
+ if (Ret == ARM_SMC_PSCI_RET_SUCCESS) {\r
+ // Send PSCI SYSTEM_RESET2 command\r
+ ArmCallSmc0 (Arg1, NULL, NULL, NULL);\r
+ } else {\r
+ // Map a warm reset into a cold reset\r
+ DEBUG ((\r
+ DEBUG_INFO,\r
+ "Warm reboot not supported by platform, issuing cold reboot\n"\r
+ ));\r
+ ResetCold ();\r
+ }\r
}\r
\r
/**\r