summaryrefslogtreecommitdiffstats
path: root/ArmPkg
diff options
context:
space:
mode:
authorPranav Madhu <pranav.madhu@arm.com>2022-08-24 22:14:21 +0530
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-09-05 13:52:51 +0000
commit52bf4eba454ea0f9d7502a92191eb0ab7778ba00 (patch)
tree4a938a3ce1c903210f75be7ea402c89be2c9561a /ArmPkg
parentaefcc91805fd69e4aad4bc08a9f708db11cae5f0 (diff)
downloadedk2-52bf4eba454ea0f9d7502a92191eb0ab7778ba00.tar.gz
edk2-52bf4eba454ea0f9d7502a92191eb0ab7778ba00.tar.bz2
edk2-52bf4eba454ea0f9d7502a92191eb0ab7778ba00.zip
ArmPkg: Handle warm reboot request correctly
The warm reboot requests from OSPM are mapped to cold reboot. To handle the warm reboot separately from a cold reboot, update ArmSmcPsciResetSystemLib and to invoke the PSCI call with parameters for warm reboot. Signed-off-by: Pranav Madhu <pranav.madhu@arm.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Diffstat (limited to 'ArmPkg')
-rw-r--r--ArmPkg/Include/IndustryStandard/ArmStdSmc.h2
-rw-r--r--ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.c21
2 files changed, 21 insertions, 2 deletions
diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
index 655edc21b2..78ce77cd73 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -93,6 +93,8 @@
#define ARM_SMC_ID_PSCI_MIGRATE_AARCH32 0x84000005
#define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x84000008
#define ARM_SMC_ID_PSCI_SYSTEM_RESET 0x84000009
+#define ARM_SMC_ID_PSCI_FEATURES 0x8400000A
+#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64 0xC4000012
/* The current PSCI version is: 0.2 */
#define ARM_SMC_PSCI_VERSION_MAJOR 0
diff --git a/ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.c b/ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.c
index af6738459e..dc7b9fd019 100644
--- a/ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.c
+++ b/ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.c
@@ -3,6 +3,7 @@
Copyright (c) 2017 - 2018, Linaro Ltd. All rights reserved.<BR>
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2022, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -47,8 +48,24 @@ ResetWarm (
VOID
)
{
- // Map a warm reset into a cold reset
- ResetCold ();
+ UINTN Arg1;
+ UINTN Ret;
+
+ Arg1 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
+
+ // Is SYSTEM_RESET2 supported?
+ Ret = ArmCallSmc0 (ARM_SMC_ID_PSCI_FEATURES, &Arg1, NULL, NULL);
+ if (Ret == ARM_SMC_PSCI_RET_SUCCESS) {
+ // Send PSCI SYSTEM_RESET2 command
+ ArmCallSmc0 (Arg1, NULL, NULL, NULL);
+ } else {
+ // Map a warm reset into a cold reset
+ DEBUG ((
+ DEBUG_INFO,
+ "Warm reboot not supported by platform, issuing cold reboot\n"
+ ));
+ ResetCold ();
+ }
}
/**