On 06/02/2016 01:07 AM, macro.wav...@gmail.com wrote:
> From: Hongbo Zhang <hongbo.zh...@nxp.com>
> 
> There are issues of legacy fuction psci_get_cpu_stack_top:
> 
> First, the current algorithm arranges stacks from an fixed adress towards
> psci_text_end, if there are more CPUs, the stacks will overlap with psci text
> segment and even other segments.
> This patch places stacks from psci text segment towards highter address, and
> all the stack space is reserved, so overlap can be avoided.
> 
> Second, even there is one word reserved in each stack for saving target PC, 
> but
> this reserved space isn't used at all, the target PC is still saved to where
> the stack top pointer points.
> This patch doesn't reserve this word as before, new way of saving target PC
> will be introduced in following patch.
> 
> Signed-off-by: Hongbo Zhang <hongbo.zh...@nxp.com>
> Signed-off-by: Wang Dongsheng <dongsheng.w...@nxp.com>
> ---
>  arch/arm/cpu/armv7/psci.S    | 10 +++++-----
>  arch/arm/cpu/armv7/virt-dt.c |  9 +++++++--
>  arch/arm/include/asm/psci.h  |  3 +++
>  3 files changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S
> index 8e25300..91a1dd1 100644
> --- a/arch/arm/cpu/armv7/psci.S
> +++ b/arch/arm/cpu/armv7/psci.S
> @@ -274,16 +274,16 @@ ENDPROC(psci_cpu_off_common)
>  
>  @ expects CPU ID in r0 and returns stack top in r0
>  ENTRY(psci_get_cpu_stack_top)
> -     mov     r5, #0x400                      @ 1kB of stack per CPU
> -     mul     r0, r0, r5
> +     mov     r5, #PSCI_PERCPU_STACK_SIZE     @ 1kB of stack per CPU
> +     add     r0, r0, #1
> +     mul     r0, r0, r5                      @ offset of each stack
>  
>       ldr     r5, =psci_text_end              @ end of monitor text
> -     add     r5, r5, #0x2000                 @ Skip two pages
> +     add     r5, r5, #0x1000                 @ Skip one page
>       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!
>  
> +     add     r0, r5, r0                      @ here's our stack!
>       bx      lr
>  ENDPROC(psci_get_cpu_stack_top)
>  
> diff --git a/arch/arm/cpu/armv7/virt-dt.c b/arch/arm/cpu/armv7/virt-dt.c
> index 5e31891..4fe6f58 100644
> --- a/arch/arm/cpu/armv7/virt-dt.c
> +++ b/arch/arm/cpu/armv7/virt-dt.c
> @@ -127,14 +127,19 @@ int armv7_apply_memory_carveout(u64 *start, u64 *size)
>  
>  int psci_update_dt(void *fdt)
>  {
> +     size_t sec_sz = __secure_end - __secure_start;
> +#ifdef CONFIG_ARMV7_PSCI
> +     sec_sz += CONFIG_MAX_CPUS * PSCI_PERCPU_STACK_SIZE;
> +     /* margin to align psci_text_end to page end*/
> +     sec_sz += 0x1000;
> +#endif

This causes a compiling error

+(mx7dsabresd) ../arch/arm/cpu/armv7/virt-dt.c: In function ‘psci_update_dt’:
+(mx7dsabresd) ../arch/arm/cpu/armv7/virt-dt.c:132:12: error: ‘CONFIG_MAX_CPUS’
undeclared (first use in this function)
+(mx7dsabresd) ../arch/arm/cpu/armv7/virt-dt.c:132:12: note: each undeclared
identifier is reported only once for each function it appears in

York
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to