[U-Boot] [PATCH v4 2/9] ARMv7: PSCI: update function psci_get_cpu_stack_top
Hongbo Zhang
macro.wave.z at gmail.com
Mon Jun 6 06:06:25 CEST 2016
On Mon, Jun 6, 2016 at 11:43 AM, Chen-Yu Tsai <wens at csie.org> wrote:
> 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
>
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 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