On Thu, Jun 30, 2016 at 12:24 PM, Hongbo Zhang <macro.wav...@gmail.com> wrote: > On Tue, Jun 28, 2016 at 12:30 PM, Chen-Yu Tsai <w...@csie.org> wrote: >> On Tue, Jun 14, 2016 at 3:01 PM, <macro.wav...@gmail.com> wrote: >>> From: Hongbo Zhang <hongbo.zh...@nxp.com> >>> >>> For the robustness of codes, while powering on a CPU, it is better to check >>> if the target CPU is already on or in the process of power on, if yes the >>> power on routine shouldn't be executed further and should return with the >>> corresponding status immediately. >>> >>> Signed-off-by: Hongbo Zhang <hongbo.zh...@nxp.com> >>> --- >>> arch/arm/cpu/armv7/ls102xa/psci.S | 29 +++++++++++++++++++++++++++++ >>> arch/arm/include/asm/psci.h | 5 +++++ >>> 2 files changed, 34 insertions(+) >>> >>> diff --git a/arch/arm/cpu/armv7/ls102xa/psci.S >>> b/arch/arm/cpu/armv7/ls102xa/psci.S >>> index a4482e4..0188ade 100644 >>> --- a/arch/arm/cpu/armv7/ls102xa/psci.S >>> +++ b/arch/arm/cpu/armv7/ls102xa/psci.S >>> @@ -66,6 +66,22 @@ psci_cpu_on: >>> beq out_psci_cpu_on >>> mov r1, r0 >>> >>> + bl psci_get_cpu_stack_top >>> + sub r0, r0, #PSCI_CPU_STATUS_OFFSET >>> + ldr r5, [r0] >>> + >>> + cmp r5, #PSCI_CPU_STATUS_ON >>> + moveq r0, #ARM_PSCI_RET_ALREADY_ON >>> + beq out_psci_cpu_on >>> + >>> + cmp r5, #PSCI_CPU_STATUS_ON_PENDING >>> + moveq r0, #ARM_PSCI_RET_ON_PENDING >>> + beq out_psci_cpu_on >>> + >>> + mov r5, #PSCI_CPU_STATUS_ON_PENDING >>> + str r5, [r0] >>> + dsb >>> + >>> bl psci_cpu_on_common >>> >>> @ Get DCFG base address >>> @@ -123,6 +139,12 @@ holdoff_release: >>> rev r6, r6 >>> str r6, [r4, #DCFG_CCSR_SCRATCHRW1] >>> >>> + mov r0, r1 >>> + bl psci_get_cpu_stack_top >>> + sub r0, r0, #PSCI_CPU_STATUS_OFFSET >>> + mov r5, #PSCI_CPU_STATUS_ON >>> + str r5, [r0] >>> + >>> isb >>> dsb >>> >>> @@ -137,6 +159,13 @@ out_psci_cpu_on: >>> psci_cpu_off: >>> bl psci_cpu_off_common >>> >>> + bl psci_get_cpu_id >>> + bl psci_get_cpu_stack_top >>> + sub r0, r0, #PSCI_CPU_STATUS_OFFSET >>> + mov r5, #PSCI_CPU_STATUS_OFF >>> + str r5, [r0] >>> + dsb >> >> psci_cpu_off_common flushes and disables caches, and turns off SMP. >> So the code you're adding might not work as expected? ARM folks >> might know more. >> > Moving this code ahead of psci_cpu_off_common seems better? > I just though such a code should be placed as later as it can.
I agree it should be as late as possible. I'm just not sure about the cache and AMP/SMP settings. Best to have someone more familiar with this comment on it. ChenYu >> The rest looks good, though I expect them to be pulled out into >> common helpers and rewritten in C. :) >> >> Regards >> ChenYu >> >>> + >>> 1: wfi >>> b 1b >>> >>> diff --git a/arch/arm/include/asm/psci.h b/arch/arm/include/asm/psci.h >>> index bedcd30..89a1ba5 100644 >>> --- a/arch/arm/include/asm/psci.h >>> +++ b/arch/arm/include/asm/psci.h >>> @@ -67,6 +67,11 @@ >>> #define PSCI_PERCPU_STACK_SIZE 0x400 >>> #define PSCI_TARGET_PC_OFFSET (PSCI_PERCPU_STACK_SIZE - 4) >>> #define PSCI_CONTEXT_ID_OFFSET (PSCI_PERCPU_STACK_SIZE - 8) >>> +#define PSCI_CPU_STATUS_OFFSET (PSCI_PERCPU_STACK_SIZE - 12) >>> + >>> +#define PSCI_CPU_STATUS_OFF 0 >>> +#define PSCI_CPU_STATUS_ON 1 >>> +#define PSCI_CPU_STATUS_ON_PENDING 2 >>> >>> #ifndef __ASSEMBLY__ >>> int psci_update_dt(void *fdt); >>> -- >>> 2.1.4 >>> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot