> -----Original Message----- > From: U-Boot [mailto:u-boot-boun...@lists.denx.de] On Behalf Of Jan Kiszka > Sent: Tuesday, April 21, 2015 1:19 PM > To: U-Boot Mailing List; Tom Rini > Cc: Marc Zyngier; Tom Warren; Paul Walmsley; Ian Campbell; Thierry Reding > Subject: [U-Boot] [PATCH v7 07/17] ARM: Put target PC for PSCI CPU_ON on > per-CPU > stack > > Use a per-CPU variable for saving the target PC during CPU_ON operations. This > allows us to run this service independently on targets that have more than 2 > cores and also core-local power control. > > CC: Marc Zyngier <marc.zyng...@arm.com> > Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> > Reviewed-by: Tom Rini <tr...@konsulko.com> > Reviewed-by: Thierry Reding <tred...@nvidia.com> > Tested-by: Thierry Reding <tred...@nvidia.com> > Tested-by: Ian Campbell <i...@hellion.org.uk> > --- > arch/arm/cpu/armv7/psci.S | 11 +++++------ > arch/arm/cpu/armv7/sunxi/psci.S | 9 ++++++--- > 2 files changed, 11 insertions(+), 9 deletions(-) > > diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index > 18d85c4..87c0c0b 100644 > --- a/arch/arm/cpu/armv7/psci.S > +++ b/arch/arm/cpu/armv7/psci.S > @@ -17,6 +17,7 @@ > > #include <config.h> > #include <linux/linkage.h> > +#include <asm/macro.h> > #include <asm/psci.h> > > .pushsection ._secure.text, "ax" > @@ -202,6 +203,7 @@ ENTRY(psci_get_cpu_stack_top) > add r5, r5, #0x2000 @ Skip two pages > lsr r5, r5, #12 @ Align to start of page > lsl r5, r5, #12 > + sub r5, r5, #4 @ reserve 1 word for target PC > sub r0, r5, r0 @ here's our stack! > > bx lr > @@ -212,13 +214,10 @@ ENTRY(psci_cpu_entry) > > bl _nonsec_init > > - adr r0, _psci_target_pc > - ldr r0, [r0] > + bl psci_get_cpu_id @ CPU ID => r0 > + bl psci_get_cpu_stack_top @ stack top => r0 > + ldr r0, [r0] @ target PC at stack top > b _do_nonsec_entry > ENDPROC(psci_cpu_entry) > > -.globl _psci_target_pc > -_psci_target_pc: > - .word 0 > - > .popsection > diff --git a/arch/arm/cpu/armv7/sunxi/psci.S b/arch/arm/cpu/armv7/sunxi/psci.S > index dd583b2..7ec0500 100644 > --- a/arch/arm/cpu/armv7/sunxi/psci.S > +++ b/arch/arm/cpu/armv7/sunxi/psci.S > @@ -139,8 +139,11 @@ out: mcr p15, 0, r7, c1, c1, 0 > @ r2 = target PC > .globl psci_cpu_on > psci_cpu_on: > - ldr r0, =_psci_target_pc > - str r2, [r0] > + push {lr} > + > + mov r0, r1 > + bl psci_get_cpu_stack_top @ get stack top of target CPU > + str r2, [r0] @ store target PC at stack top
Base on target PC will be saved in stack. The cpu(r1) should be mask firstly. Because r1 value is 0xf0x, and it is not what we expected cpu value(0x1 or ...). If not, the stack address is incorrect. When I develop LS1021a PSCI code, I found this issue. So I think sunxi also has this issue. http://patchwork.ozlabs.org/patch/471695/ Regards, -Dongsheng _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot