public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2][PATCH V3 1/1] ArmPkg: Handle warm reboot request correctly
@ 2022-04-05  6:29 Pranav Madhu
  0 siblings, 0 replies; only message in thread
From: Pranav Madhu @ 2022-04-05  6:29 UTC (permalink / raw)
  To: devel; +Cc: Ard Biesheuvel, Sami Mujawar

The warm reboot requests were mapped to cold reboot as the power control
module was not capable of handling the warm reboot requests. That has
changed now and power control module supports warm reboot. Accordingly,
update ArmSmcPsciResetSystemLib and to invoke the PSCI call with
parameters for warm reboot.

Signed-off-by: Pranav Madhu <pranav.madhu@arm.com>
---
 ArmPkg/Include/IndustryStandard/ArmStdSmc.h                        |  2 ++
 ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.c | 19 +++++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

Changes since V1:
- Addressed comments from Ard.

Changes since V2:
- Remove 32 bit warm reboot PSCI support.
- Update ResetWarm() to check whether platform support warm reset.
- Addressed comments from Sami

Link to github branch for this patch -
https://github.com/Pranav-Madhu/edk2/tree/topics/warm_reboot

diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
index 655edc21b205..2025f5f10419 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 af6738459e43..4cc91a508d09 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,22 @@ ResetWarm (
   VOID
   )
 {
-  // Map a warm reset into a cold reset
-  ResetCold ();
+  UINTN Arg1 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
+  UINTN ret;
+
+  // 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 (ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64, 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 ();
+  }
 }
 
 /**
-- 
2.17.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-05  6:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-05  6:29 [edk2][PATCH V3 1/1] ArmPkg: Handle warm reboot request correctly Pranav Madhu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox