Re: [edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-11 Thread Sami Mujawar

Hi Pranav,

Please see my response inline marked [SAMI].

Regards,

Sami Mujawar


On 11/03/2022 06:06 AM, Pranav Madhu wrote:

Hi Sami,

Thanks for your comments. Please find my reply inline.

Regards,
Pranav


-Original Message-
From: Sami Mujawar 
Sent: Thursday, March 10, 2022 9:01 PM
To: Pranav Madhu ; devel@edk2.groups.io
Cc: Ard Biesheuvel ; nd 
Subject: Re: [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request
correctly

Hi Pranav,

Thank you for this patch.

Please find my response inline marked [SAMI].

Regards,

Sami Mujawar


On 10/03/2022 01:10 PM, Pranav Madhu wrote:

The warm reboot requests are mapped to cold reboot as the power
control module was not capable of handling the warm reboot requests in
the legacy implementation. The support for warm reboot support is
added into the power control module. To support warm reset, update
ArmPsciResetSystemLib, and there by invoke the PSCI call with
parameters for warm reboot.

Signed-off-by: Pranav Madhu 
---
   ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
   ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7

+--

   2 files changed, 6 insertions(+), 2 deletions(-)

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..c9059dead6e9 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -93,6 +93,7 @@
   #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
   #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
   #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
+#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64  0xc412

   /* The current PSCI version is:  0.2 */
   #define ARM_SMC_PSCI_VERSION_MAJOR  0 diff --git
a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
index 7bcd34849507..27e048ba0f7a 100644
--- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
+++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
@@ -45,10 +45,13 @@ LibResetSystem (
 ARM_SMC_ARGS  ArmSmcArgs;

 switch (ResetType) {
+case EfiResetWarm:
+  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
+  ArmSmcArgs.Arg1 = 0;
+  ArmSmcArgs.Arg2 = 0;
+  break;

[SAMI] SYSTEM_RESET2 is an optional feature and if not supported would
return NOT_SUPPORTED. So, if a platform does not support SYSTEM_RESET2,
should the code here fall back to SYSTEM_RESET?
According to the PSCI specification, it is the responsibility of the OS to check
that SYSTEM_RESET2 is supported before calling SYSTEM_RESET2 (I believe this
is applicable for the case where UEFI is not used to boot the OS). However, if
the runtime service ResetSystem() is invoked by the OS requesting a warm
reset, is it not the firmware's responsibility to ensure that SYSTEM_RESET2 is
supported? Any thoughts?

Right, from PSCI specification, what I understood is before invoking 
SYSTEM_RESET2, the OS should query the PSCI capabilities using PSCI_FEATURES 
for SYSTEM_RESET2. The OS should invoke RESET2 only if PSCI_FEATURES returns 0. 
From spec, what I understood is it is not the responsibility of firmware. If OS 
issue RESET2 without querying FEATURES, the only option for firmware is to 
return NOT_SUPPORTED.


[SAMI] There are 2 scenarios:
1. A boot loader other than UEFI is used to boot the OS.
In this case the OS shall directly call the PSCI interface to reboot.
For this scenario the Linux kernel code performs the required checks and 
makes the appropriate PSCI call see 
https://elixir.bootlin.com/linux/v5.16.13/source/drivers/firmware/psci/psci.c#L299


2. UEFI is used to boot the OS.
In this case the UEFI Runtime Services ResetSystem() will be invoked by 
the OS to initiate a reboot.
In this scenario the checks performed by the OS to see if SYSTEM_RESET2 
is supported are irrelevant. It is the firmware that needs to perform 
the check. Although
the PSCI specification section '5.12.4 Caller responsibilities' mentions 
'The calling OS...'; this is an example, and in context with the current 
usage scenario, it is the
responsibility of the firmware (the Caller) to perform these checks. 
Otherwise this can result in failures on platforms that do not implement 
the SYSTEM_RESET2 feature.

The relevant code in the Linux kernel for this scenario can be seen at:
https://elixir.bootlin.com/linux/v5.16.13/source/drivers/firmware/efi/reboot.c#L13
https://elixir.bootlin.com/linux/v5.16.13/source/drivers/firmware/efi/runtime-wrappers.c#L412

I also noticed that there are 2 versions of the ResetSystem library:
[A] EfiResetSystemLib based implementation
  This is 
ArmPkg\Library\ArmPsciResetSystemLib\ArmPsciResetSystemLib.inf which 
links with EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf

[B] ResetSystemLib based impleme

[edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-10 Thread Pranav Madhu
The warm reboot requests are mapped to cold reboot as the power control
module was not capable of handling the warm reboot requests in the
legacy implementation. The support for warm reboot support is added into
the power control module. To support warm reset, update
ArmPsciResetSystemLib, and there by invoke the PSCI call with parameters
for warm reboot.

Signed-off-by: Pranav Madhu 
---
 ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
 ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7 +--
 2 files changed, 6 insertions(+), 2 deletions(-)

Changes since V1:
- Addressed comments from Ard

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..90123efcbd56 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -93,6 +93,7 @@
 #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
 #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
 #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
+#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH32  0x8412
 
 /* The current PSCI version is:  0.2 */
 #define ARM_SMC_PSCI_VERSION_MAJOR  0
diff --git a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c 
b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
index 7bcd34849507..211941c57938 100644
--- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
+++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
@@ -45,10 +45,13 @@ LibResetSystem (
   ARM_SMC_ARGS  ArmSmcArgs;
 
   switch (ResetType) {
+case EfiResetWarm:
+  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH32;
+  ArmSmcArgs.Arg1 = 0;
+  ArmSmcArgs.Arg2 = 0;
+  break;
 case EfiResetPlatformSpecific:
 // Map the platform specific reset as reboot
-case EfiResetWarm:
-// Map a warm reset into a cold reset
 case EfiResetCold:
   // Send a PSCI 0.2 SYSTEM_RESET command
   ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;
-- 
2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87454): https://edk2.groups.io/g/devel/message/87454
Mute This Topic: https://groups.io/mt/89685482/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




Re: [edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-10 Thread Pranav Madhu
Hi Ard,

Thanks for your suggestions. Please find my reply inline.

Regards,
Pranav

> -Original Message-
> From: Ard Biesheuvel 
> Sent: Thursday, March 10, 2022 8:56 PM
> To: Pranav Madhu 
> Cc: edk2-devel-groups-io ; Ard Biesheuvel
> ; Sami Mujawar 
> Subject: Re: [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request
> correctly
> 
> On Thu, 10 Mar 2022 at 14:10, Pranav Madhu 
> wrote:
> >
> > The warm reboot requests are mapped to cold reboot as the power
> > control module was not capable of handling the warm reboot requests in
> > the legacy implementation. The support for warm reboot support is
> > added into the power control module. To support warm reset, update
> > ArmPsciResetSystemLib, and there by invoke the PSCI call with
> > parameters for warm reboot.
> >
> > Signed-off-by: Pranav Madhu 
> 
> What happens on 32-bit platforms with this change?

Will change this to PSCI_SYSTEM_RESET2_AARCH32, as this is compatible with 
AARCH64 as well.

> 
> What happens if the firmware does not implement
> ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64?

As per PSCI 1.1 specification, what I understood is before invoking 
SYSTEM_RESET2, the OS should query the PSCI capabilities using PSCI_FEATURES 
for SYSTEM_RESET2 support. The OS should invoke RESET2 only if PSCI_FEATURES 
returns 0. If the OS is invoking this call without querying the features, PSCI 
will return UNSUPPORTED.

> 
> > ---
> >  ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
> >  ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7
> > +--
> >  2 files changed, 6 insertions(+), 2 deletions(-)
> >
> > 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..c9059dead6e9 100644
> > --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> > +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> > @@ -93,6 +93,7 @@
> >  #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
> >  #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
> >  #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
> > +#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64  0xc412
> >
> >  /* The current PSCI version is:  0.2 */  #define
> > ARM_SMC_PSCI_VERSION_MAJOR  0 diff --git
> > a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > index 7bcd34849507..27e048ba0f7a 100644
> > --- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > +++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > @@ -45,10 +45,13 @@ LibResetSystem (
> >ARM_SMC_ARGS  ArmSmcArgs;
> >
> >switch (ResetType) {
> > +case EfiResetWarm:
> > +  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
> > +  ArmSmcArgs.Arg1 = 0;
> > +  ArmSmcArgs.Arg2 = 0;
> > +  break;
> >  case EfiResetPlatformSpecific:
> >  // Map the platform specific reset as reboot
> > -case EfiResetWarm:
> > -// Map a warm reset into a cold reset
> >  case EfiResetCold:
> >// Send a PSCI 0.2 SYSTEM_RESET command
> >ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;
> > --
> > 2.17.1
> >


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87453): https://edk2.groups.io/g/devel/message/87453
Mute This Topic: https://groups.io/mt/89685482/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




Re: [edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-10 Thread Pranav Madhu
Hi Sami,

Thanks for your comments. Please find my reply inline.

Regards,
Pranav

> -Original Message-
> From: Sami Mujawar 
> Sent: Thursday, March 10, 2022 9:01 PM
> To: Pranav Madhu ; devel@edk2.groups.io
> Cc: Ard Biesheuvel ; nd 
> Subject: Re: [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request
> correctly
> 
> Hi Pranav,
> 
> Thank you for this patch.
> 
> Please find my response inline marked [SAMI].
> 
> Regards,
> 
> Sami Mujawar
> 
> 
> On 10/03/2022 01:10 PM, Pranav Madhu wrote:
> > The warm reboot requests are mapped to cold reboot as the power
> > control module was not capable of handling the warm reboot requests in
> > the legacy implementation. The support for warm reboot support is
> > added into the power control module. To support warm reset, update
> > ArmPsciResetSystemLib, and there by invoke the PSCI call with
> > parameters for warm reboot.
> >
> > Signed-off-by: Pranav Madhu 
> > ---
> >   ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
> >   ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7
> +--
> >   2 files changed, 6 insertions(+), 2 deletions(-)
> >
> > 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..c9059dead6e9 100644
> > --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> > +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> > @@ -93,6 +93,7 @@
> >   #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
> >   #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
> >   #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
> > +#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64  0xc412
> >
> >   /* The current PSCI version is:  0.2 */
> >   #define ARM_SMC_PSCI_VERSION_MAJOR  0 diff --git
> > a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > index 7bcd34849507..27e048ba0f7a 100644
> > --- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > +++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> > @@ -45,10 +45,13 @@ LibResetSystem (
> > ARM_SMC_ARGS  ArmSmcArgs;
> >
> > switch (ResetType) {
> > +case EfiResetWarm:
> > +  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
> > +  ArmSmcArgs.Arg1 = 0;
> > +  ArmSmcArgs.Arg2 = 0;
> > +  break;
> [SAMI] SYSTEM_RESET2 is an optional feature and if not supported would
> return NOT_SUPPORTED. So, if a platform does not support SYSTEM_RESET2,
> should the code here fall back to SYSTEM_RESET?
> According to the PSCI specification, it is the responsibility of the OS to 
> check
> that SYSTEM_RESET2 is supported before calling SYSTEM_RESET2 (I believe this
> is applicable for the case where UEFI is not used to boot the OS). However, if
> the runtime service ResetSystem() is invoked by the OS requesting a warm
> reset, is it not the firmware's responsibility to ensure that SYSTEM_RESET2 is
> supported? Any thoughts?

Right, from PSCI specification, what I understood is before invoking 
SYSTEM_RESET2, the OS should query the PSCI capabilities using PSCI_FEATURES 
for SYSTEM_RESET2. The OS should invoke RESET2 only if PSCI_FEATURES returns 0. 
From spec, what I understood is it is not the responsibility of firmware. If OS 
issue RESET2 without querying FEATURES, the only option for firmware is to 
return NOT_SUPPORTED.

> [/SAMI]
> >   case EfiResetPlatformSpecific:
> >   // Map the platform specific reset as reboot
> > -case EfiResetWarm:
> > -// Map a warm reset into a cold reset
> >   case EfiResetCold:
> > // Send a PSCI 0.2 SYSTEM_RESET command
> > ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87452): https://edk2.groups.io/g/devel/message/87452
Mute This Topic: https://groups.io/mt/89685482/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




Re: [edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-10 Thread Sami Mujawar

Hi Pranav,

Thank you for this patch.

Please find my response inline marked [SAMI].

Regards,

Sami Mujawar


On 10/03/2022 01:10 PM, Pranav Madhu wrote:

The warm reboot requests are mapped to cold reboot as the power control
module was not capable of handling the warm reboot requests in the
legacy implementation. The support for warm reboot support is added into
the power control module. To support warm reset, update
ArmPsciResetSystemLib, and there by invoke the PSCI call with parameters
for warm reboot.

Signed-off-by: Pranav Madhu 
---
  ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
  ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7 +--
  2 files changed, 6 insertions(+), 2 deletions(-)

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..c9059dead6e9 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -93,6 +93,7 @@
  #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
  #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
  #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
+#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64  0xc412
  
  /* The current PSCI version is:  0.2 */

  #define ARM_SMC_PSCI_VERSION_MAJOR  0
diff --git a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c 
b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
index 7bcd34849507..27e048ba0f7a 100644
--- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
+++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
@@ -45,10 +45,13 @@ LibResetSystem (
ARM_SMC_ARGS  ArmSmcArgs;
  
switch (ResetType) {

+case EfiResetWarm:
+  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
+  ArmSmcArgs.Arg1 = 0;
+  ArmSmcArgs.Arg2 = 0;
+  break;
[SAMI] SYSTEM_RESET2 is an optional feature and if not supported would 
return NOT_SUPPORTED. So, if a platform does not support SYSTEM_RESET2, 
should the code here fall back to SYSTEM_RESET?
According to the PSCI specification, it is the responsibility of the OS 
to check that SYSTEM_RESET2 is supported before calling SYSTEM_RESET2 (I 
believe this is applicable for the case where UEFI is not used to boot 
the OS). However, if the runtime service ResetSystem() is invoked by the 
OS requesting a warm reset, is it not the firmware's responsibility to 
ensure that SYSTEM_RESET2 is supported? Any thoughts?

[/SAMI]

  case EfiResetPlatformSpecific:
  // Map the platform specific reset as reboot
-case EfiResetWarm:
-// Map a warm reset into a cold reset
  case EfiResetCold:
// Send a PSCI 0.2 SYSTEM_RESET command
ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87418): https://edk2.groups.io/g/devel/message/87418
Mute This Topic: https://groups.io/mt/89685482/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




Re: [edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-10 Thread Ard Biesheuvel
On Thu, 10 Mar 2022 at 14:10, Pranav Madhu  wrote:
>
> The warm reboot requests are mapped to cold reboot as the power control
> module was not capable of handling the warm reboot requests in the
> legacy implementation. The support for warm reboot support is added into
> the power control module. To support warm reset, update
> ArmPsciResetSystemLib, and there by invoke the PSCI call with parameters
> for warm reboot.
>
> Signed-off-by: Pranav Madhu 

What happens on 32-bit platforms with this change?

What happens if the firmware does not implement
ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64?

> ---
>  ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
>  ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7 +--
>  2 files changed, 6 insertions(+), 2 deletions(-)
>
> 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..c9059dead6e9 100644
> --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> @@ -93,6 +93,7 @@
>  #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
>  #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
>  #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
> +#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64  0xc412
>
>  /* The current PSCI version is:  0.2 */
>  #define ARM_SMC_PSCI_VERSION_MAJOR  0
> diff --git a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c 
> b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> index 7bcd34849507..27e048ba0f7a 100644
> --- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> +++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
> @@ -45,10 +45,13 @@ LibResetSystem (
>ARM_SMC_ARGS  ArmSmcArgs;
>
>switch (ResetType) {
> +case EfiResetWarm:
> +  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
> +  ArmSmcArgs.Arg1 = 0;
> +  ArmSmcArgs.Arg2 = 0;
> +  break;
>  case EfiResetPlatformSpecific:
>  // Map the platform specific reset as reboot
> -case EfiResetWarm:
> -// Map a warm reset into a cold reset
>  case EfiResetCold:
>// Send a PSCI 0.2 SYSTEM_RESET command
>ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;
> --
> 2.17.1
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87417): https://edk2.groups.io/g/devel/message/87417
Mute This Topic: https://groups.io/mt/89685482/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




[edk2-devel] [edk2][PATCH V1 1/1] ArmPkg: Handle warm reboot request correctly

2022-03-10 Thread Pranav Madhu
The warm reboot requests are mapped to cold reboot as the power control
module was not capable of handling the warm reboot requests in the
legacy implementation. The support for warm reboot support is added into
the power control module. To support warm reset, update
ArmPsciResetSystemLib, and there by invoke the PSCI call with parameters
for warm reboot.

Signed-off-by: Pranav Madhu 
---
 ArmPkg/Include/IndustryStandard/ArmStdSmc.h  | 1 +
 ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c | 7 +--
 2 files changed, 6 insertions(+), 2 deletions(-)

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..c9059dead6e9 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -93,6 +93,7 @@
 #define ARM_SMC_ID_PSCI_MIGRATE_AARCH320x8405
 #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x8408
 #define ARM_SMC_ID_PSCI_SYSTEM_RESET   0x8409
+#define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64  0xc412
 
 /* The current PSCI version is:  0.2 */
 #define ARM_SMC_PSCI_VERSION_MAJOR  0
diff --git a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c 
b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
index 7bcd34849507..27e048ba0f7a 100644
--- a/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
+++ b/ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
@@ -45,10 +45,13 @@ LibResetSystem (
   ARM_SMC_ARGS  ArmSmcArgs;
 
   switch (ResetType) {
+case EfiResetWarm:
+  ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64;
+  ArmSmcArgs.Arg1 = 0;
+  ArmSmcArgs.Arg2 = 0;
+  break;
 case EfiResetPlatformSpecific:
 // Map the platform specific reset as reboot
-case EfiResetWarm:
-// Map a warm reset into a cold reset
 case EfiResetCold:
   // Send a PSCI 0.2 SYSTEM_RESET command
   ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET;
-- 
2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87416): https://edk2.groups.io/g/devel/message/87416
Mute This Topic: https://groups.io/mt/89685482/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-