[U-Boot] [PATCH v4 2/9] ARMv7: PSCI: update function psci_get_cpu_stack_top

Chen-Yu Tsai wens at csie.org
Mon Jun 6 05:43:34 CEST 2016


Hi,

On Mon, Jun 6, 2016 at 11:27 AM, Hongbo Zhang <macro.wave.z at 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.sun at nxp.com> wrote:
>> On 06/02/2016 01:07 AM, macro.wave.z at gmail.com wrote:
>>> From: Hongbo Zhang <hongbo.zhang at 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 at nxp.com>
>>> Signed-off-by: Wang Dongsheng <dongsheng.wang at 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


More information about the U-Boot mailing list