Hi, On Mon, Jun 6, 2016 at 11:27 AM, Hongbo Zhang <macro.wav...@gmail.com> wrote: > Hi York, > Which version of u-boot do you use? I don't have such problem. > I was using the latest u-boot (when I re-worked this patch set), it was > e4a94ce Merge git://git.denx.de/u-boot-dm > but there is some thing wrong that this version of u-boot cannot load > my kernel properly, so I went a little backward to > c7757d4 arm: meson: implement calls to secure monitor > because I need Beniamino's commits. > The above two patch sets are identical, and there is no such compiling > error for me, and I've tested the later.
CONFIG_MAX_CPUS is not defined for all platforms. On sunxi and mx7, we use CONFIG_ARMV7_PSCI_NR_CPUS. ChenYu > > On Sat, Jun 4, 2016 at 3:44 AM, York Sun <york....@nxp.com> wrote: >> 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