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