
On 2015-02-15 03:01, Chen-Yu Tsai wrote:
Hi,
On Sun, Feb 15, 2015 at 5:28 AM, Jan Kiszka jan.kiszka@web.de wrote:
From: Jan Kiszka jan.kiszka@siemens.com
_sunxi_cpu_entry can be converted completely into a reusable psci_cpu_entry. Tegra124 will use it as well.
Signed-off-by: Jan Kiszka jan.kiszka@siemens.com
arch/arm/cpu/armv7/psci.S | 19 +++++++++++++++++++ arch/arm/cpu/armv7/sunxi/psci.S | 21 ++------------------- 2 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index d688607..e916d71 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -170,4 +170,23 @@ ENTRY(psci_cpu_off_common) bx lr ENDPROC(psci_cpu_off_common)
+ENTRY(psci_cpu_entry)
@ Set SMP bit
mrc p15, 0, r0, c1, c0, 1 @ ACTLR
orr r0, r0, #(1 << 6) @ Set SMP bit
mcr p15, 0, r0, c1, c0, 1 @ ACTLR
isb
bl _nonsec_init
bl psci_arch_init
adr r0, _psci_target_pc
ldr r0, [r0]
b _do_nonsec_entry
+ENDPROC(psci_cpu_entry)
+.globl _psci_target_pc +_psci_target_pc:
.word 0
The sunxi version didn't have a per-core target_pc variable. It is still the case here. Is this the correct way to implement it? I see per-core storage of this in some of the kernel's smp ops.
On sunxi it works because the only platform using it only has one secondary core.
With homogeneous SMP, it probably works as well because reset vectors may not differ across the cores. But this remains a valid point.
I'm considering to push this variable to the top of the per-CPU stack. Calculating the stack position is actually another function to factor out.
Thanks, Jan