[U-Boot] [PATCH] arm: psci: save and restore registers from r4 to r12

Save and restore core registers from r4 to r12 so that PSCI code won't break their value.
Signed-off-by: Chenhui Zhao chenhui.zhao@nxp.com Signed-off-by: Alison Wang alison.wang@nxp.com Signed-off-by: Abhimanyu Saini abhimanyu.saini@nxp.com --- arch/arm/cpu/armv7/psci.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 6a36208..746297c 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -152,7 +152,7 @@ _psci_table: .word 0
_smc_psci: - push {r4-r7,lr} + push {r4-r12,lr}
@ Switch to secure mrc p15, 0, r7, c1, c1, 0 @@ -175,7 +175,7 @@ _smc_psci: @ Switch back to non-secure 2: mcr p15, 0, r7, c1, c1, 0
- pop {r4-r7, lr} + pop {r4-r12, lr} movs pc, lr @ Return to the kernel
@ Requires dense and single-cluster CPU ID space

On Sat, Oct 8, 2016 at 7:08 PM, Chenhui Zhao chenhui.zhao@nxp.com wrote:
Save and restore core registers from r4 to r12 so that PSCI code won't break their value.
Signed-off-by: Chenhui Zhao chenhui.zhao@nxp.com Signed-off-by: Alison Wang alison.wang@nxp.com Signed-off-by: Abhimanyu Saini abhimanyu.saini@nxp.com
arch/arm/cpu/armv7/psci.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 6a36208..746297c 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -152,7 +152,7 @@ _psci_table: .word 0
_smc_psci:
push {r4-r7,lr}
push {r4-r12,lr}
This change is not needed. This function only uses r4-r7. Any subroutines called should save variable registers (r4-r12) themselves, per the ARM calling conventions.
ChenYu
@ Switch to secure mrc p15, 0, r7, c1, c1, 0
@@ -175,7 +175,7 @@ _smc_psci: @ Switch back to non-secure 2: mcr p15, 0, r7, c1, c1, 0
pop {r4-r7, lr}
pop {r4-r12, lr} movs pc, lr @ Return to the kernel
@ Requires dense and single-cluster CPU ID space
1.9.1
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

________________________________ From: Chen-Yu Tsai wens@csie.org Sent: Thursday, October 13, 2016 5:52 PM To: C.H. Zhao Cc: U-Boot Mailing List; Albert ARIBAUD; z.chenhui@gmail.com Subject: Re: [U-Boot] [PATCH] arm: psci: save and restore registers from r4 to r12
On Sat, Oct 8, 2016 at 7:08 PM, Chenhui Zhao chenhui.zhao@nxp.com wrote:
Save and restore core registers from r4 to r12 so that PSCI code won't break their value.
Signed-off-by: Chenhui Zhao chenhui.zhao@nxp.com Signed-off-by: Alison Wang alison.wang@nxp.com Signed-off-by: Abhimanyu Saini abhimanyu.saini@nxp.com
arch/arm/cpu/armv7/psci.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 6a36208..746297c 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -152,7 +152,7 @@ _psci_table: .word 0
_smc_psci:
push {r4-r7,lr}
push {r4-r12,lr}
This change is not needed. This function only uses r4-r7. Any subroutines called should save variable registers (r4-r12) themselves, per the ARM calling conventions.
ChenYu
[Chenhui] I do not think it is a normal calling, instead it is an exception handler. In the exception context, it is necessary to save/restore all registers.
@ Switch to secure mrc p15, 0, r7, c1, c1, 0
@@ -175,7 +175,7 @@ _smc_psci: @ Switch back to non-secure 2: mcr p15, 0, r7, c1, c1, 0
pop {r4-r7, lr}
pop {r4-r12, lr} movs pc, lr @ Return to the kernel
@ Requires dense and single-cluster CPU ID space
1.9.1
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
U-Boot Info Page - lists.denx.de Mailing Listshttp://lists.denx.de/mailman/listinfo/u-boot lists.denx.de To see the collection of prior postings to the list, visit the U-Boot Archives. Using U-Boot: To post a message to all the list members, send email to ...

On Thu, Oct 13, 2016 at 5:52 PM, Chen-Yu Tsai wens@csie.org wrote:
On Sat, Oct 8, 2016 at 7:08 PM, Chenhui Zhao chenhui.zhao@nxp.com wrote:
Save and restore core registers from r4 to r12 so that PSCI code won't break their value.
Signed-off-by: Chenhui Zhao chenhui.zhao@nxp.com Signed-off-by: Alison Wang alison.wang@nxp.com Signed-off-by: Abhimanyu Saini abhimanyu.saini@nxp.com
arch/arm/cpu/armv7/psci.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 6a36208..746297c 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -152,7 +152,7 @@ _psci_table: .word 0
_smc_psci:
push {r4-r7,lr}
push {r4-r12,lr}
This change is not needed. This function only uses r4-r7. Any subroutines called should save variable registers (r4-r12) themselves, per the ARM calling conventions.
ChenYu
I do not think it is a normal calling, instead it is an exception handler. In the exception context, it is necessary to save/restore all registers.
Sorry, my mail server has something wrong.
Chenhui
@ Switch to secure mrc p15, 0, r7, c1, c1, 0
@@ -175,7 +175,7 @@ _smc_psci: @ Switch back to non-secure 2: mcr p15, 0, r7, c1, c1, 0
pop {r4-r7, lr}
pop {r4-r12, lr} movs pc, lr @ Return to the kernel
@ Requires dense and single-cluster CPU ID space
1.9.1
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

On Fri, Oct 14, 2016 at 8:14 AM, Chenhui Zhao z.chenhui@gmail.com wrote:
On Thu, Oct 13, 2016 at 5:52 PM, Chen-Yu Tsai wens@csie.org wrote:
On Sat, Oct 8, 2016 at 7:08 PM, Chenhui Zhao chenhui.zhao@nxp.com wrote:
Save and restore core registers from r4 to r12 so that PSCI code won't break their value.
Signed-off-by: Chenhui Zhao chenhui.zhao@nxp.com Signed-off-by: Alison Wang alison.wang@nxp.com Signed-off-by: Abhimanyu Saini abhimanyu.saini@nxp.com
arch/arm/cpu/armv7/psci.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 6a36208..746297c 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -152,7 +152,7 @@ _psci_table: .word 0
_smc_psci:
push {r4-r7,lr}
push {r4-r12,lr}
This change is not needed. This function only uses r4-r7. Any subroutines called should save variable registers (r4-r12) themselves, per the ARM calling conventions.
ChenYu
I do not think it is a normal calling, instead it is an exception handler. In the exception context, it is necessary to save/restore all registers.
It should be the same for an exception handler. You only save the registers that you clobber, at each function level.
ChenYu
Sorry, my mail server has something wrong.
Chenhui
@ Switch to secure mrc p15, 0, r7, c1, c1, 0
@@ -175,7 +175,7 @@ _smc_psci: @ Switch back to non-secure 2: mcr p15, 0, r7, c1, c1, 0
pop {r4-r7, lr}
pop {r4-r12, lr} movs pc, lr @ Return to the kernel
@ Requires dense and single-cluster CPU ID space
1.9.1
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
participants (4)
-
C.H. Zhao
-
Chen-Yu Tsai
-
Chenhui Zhao
-
Chenhui Zhao