
On Mon, Jun 6, 2016 at 11:43 AM, Chen-Yu Tsai wens@csie.org wrote:
Hi,
On Mon, Jun 6, 2016 at 11:27 AM, Hongbo Zhang macro.wave.z@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
Hi, Thanks for pointing it out, I see. That means we don't have a unique macro for number of CPUs, it is time to define it now, CONFIG_ARMV7_PSCI_NR_CPUS is better?
On Sat, Jun 4, 2016 at 3:44 AM, York Sun york.sun@nxp.com wrote:
On 06/02/2016 01:07 AM, macro.wave.z@gmail.com wrote:
From: Hongbo Zhang hongbo.zhang@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.zhang@nxp.com Signed-off-by: Wang Dongsheng dongsheng.wang@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