[U-Boot] [PATCH 00/15] ARM: PSCI: Add secure stack and data sections

Hongbo Zhang macro.wave.z at gmail.com
Mon Jul 4 09:14:40 CEST 2016


On Sun, Jul 3, 2016 at 8:35 AM, Chen-Yu Tsai <wens at csie.org> wrote:
> Hi,
>
> On Sat, Jul 2, 2016 at 8:00 PM, Hans de Goede <hdegoede at redhat.com> wrote:
>> Hi,
>>
>> On 19-06-16 06:38, Chen-Yu Tsai wrote:
>>>
>>> Hi everyone,
>>>
>>> This is ARM PSCI improvements part 2. This series cleans up PSCI stack
>>> allocation and target PC storage by introducing a secure stack section
>>> and a secure data section.
>>
>>
>> I've added this series to my personal repo sunxi-wip branch for testing.
>
> I might send a v2 of patch 5.
>
> Also I forgot to add .secure_data to the sections that get copied to the
> actual u-boot blob. It currently works because the data structures in it
> are all written before they are read.
>
> So a v2 of patch 12 is needed as well.
>
> Could you also add Hongbo's tested-by tags?
>
>>
>> It might be best to also merge it via the u-boot-sunxi tree ?
>
> We should probably work out with the NXP/FreeScale people that are also
> working on PSCI support for their platform.
>
> Hongbo, any comments?
>

Well, one concern is the macro definition of CPU numbers, it should
work for all platforms.
another is the method of saving target PC, I like the idea of a
dedicated secure data section, hope your patches get merged and then I
can rebase my patches against yours.
(In fact my patches were originally created by Dongsheng and I just
followed his idea, and what's more I am not good at the lds grammar to
add new section)
My purpose is to add v1.0 support and some v1.0 functions of my
platform this time, further v1.0 function eg suspend-to-ram is coming
later.


> Regards
> ChenYu
>
>> Regards,
>>
>> Hans
>>
>>
>>
>>>
>>> The series got larger than I planned. Some patches are just moving or
>>> consolidating code, and a few are adding missing macros. It's based on
>>> v3 of my "sunxi: PSCI implementation rewrite in C" series from earlier.
>>>
>>>
>>> Patch 1 consolidates the stack setup code from all the PSCI-enabled
>>> platforms (which likely originated from the initial sunxi version) into
>>> a common function, and moves it into a seperate common function that
>>> is called before psci_arch_init. A weak stub psci_arch_init is added
>>> for platforms that no longer need a custom version.
>>>
>>> Patch 2 converts the remaining sunxi PSCI assembly code into C.
>>>
>>> Patch 3 adds the missing CONFIG_ARMV7_PSCI_NR_CPUS=2 for sun7i/A20.
>>>
>>> Patch 4 makes the linker page align PSCI text only when it is directly
>>> executed, i.e. not copied to CONFIG_ARMV7_SECURE_BASE.
>>>
>>> Patch 5 adds a fallback value for CONFIG_ARMV7_PSCI_NR_CPUS. The value
>>> is 4, which was the fixed maximum number of stacks allocated.
>>>
>>> Patch 6 adds an empty stack section for the secure monitor.
>>>
>>> Patch 7 has PSCI allocate its stack in the new secure stack section.
>>>
>>> Patch 8 removes the now unused psci_text_end symbol. This was previously
>>> used to find where to allocate the stack.
>>>
>>> Patch 9 adds a config variable for specifying the maximum size of the
>>> secure section (text, data, stack, etc.) and checks if the binary
>>> exceeds it.
>>>
>>> Patch 10 defines CONFIG_ARMV7_SECURE_MAX_SIZE for sun6i/sun7i (A31/A20),
>>> Allwinner SoCs that have a block of secure SRAM.
>>>
>>> Patch 11 moves the __secure macro to asm/secure.h. Previously sunxi and
>>> i.MX7 were defining it themselves.
>>>
>>> Patch 12 adds a secure data section, and a __secure_data macro.
>>>
>>> Patch 13 adds helper functions to save and get per-CPU target PC addresses
>>> for use in PSCI.
>>>
>>> Patch 14 converts all PSCI-enabled platforms to the new helper functions
>>> to save/get target PC addresses.
>>>
>>> Patch 15 makes the psci_get_cpu_stack_top function local/static. This
>>> function should only be used by the stack setup routine.
>>>
>>>
>>> Regards
>>> ChenYu
>>>
>>>
>>> Chen-Yu Tsai (15):
>>>   ARM: PSCI: Split out common stack setup code from psci_arch_init
>>>   sunxi: Move remaining PSCI assembly code to C
>>>   sunxi: Add missing CONFIG_ARMV7_PSCI_NR_CPUS for sun7i
>>>   ARM: Page align secure section only when it is executed in situ
>>>   ARM: PSCI: Add fallback value for CONFIG_ARMV7_PSCI_NR_CPUS
>>>   ARM: Add an empty secure stack section
>>>   ARM: PSCI: Allocate PSCI stack in secure stack section
>>>   ARM: PSCI: Remove unused psci_text_end symbol
>>>   ARM: Add CONFIG_ARMV7_SECURE_MAX_SIZE and check size of secure section
>>>   sunxi: Define CONFIG_ARMV7_SECURE_MAX_SIZE for sun6i/sun7i
>>>   ARM: Move __secure definition to common asm/secure.h
>>>   ARM: Add secure section for initialized data
>>>   ARM: PSCI: Add helper functions to access per-CPU target PC storage
>>>   ARM: PSCI: Switch to per-CPU target PC storage in secure data section
>>>   ARM: PSCI: Make psci_get_cpu_stack_top local to armv7/psci.S
>>>
>>>  arch/arm/cpu/armv7/Makefile          |  1 +
>>>  arch/arm/cpu/armv7/ls102xa/psci.S    | 26 ++++----------
>>>  arch/arm/cpu/armv7/mx7/psci-mx7.c    |  2 +-
>>>  arch/arm/cpu/armv7/mx7/psci.S        | 31 +++++------------
>>>  arch/arm/cpu/armv7/nonsec_virt.S     |  7 +++-
>>>  arch/arm/cpu/armv7/psci-common.c     | 39 +++++++++++++++++++++
>>>  arch/arm/cpu/armv7/psci.S            | 55 ++++++++++++++++++++++--------
>>>  arch/arm/cpu/armv7/sunxi/Makefile    |  1 -
>>>  arch/arm/cpu/armv7/sunxi/psci.c      |  9 +++--
>>>  arch/arm/cpu/armv7/sunxi/psci_head.S | 66
>>> ------------------------------------
>>>  arch/arm/cpu/u-boot.lds              | 60
>>> +++++++++++++++++++++++++-------
>>>  arch/arm/include/asm/armv7.h         |  2 ++
>>>  arch/arm/include/asm/config.h        |  5 +++
>>>  arch/arm/include/asm/psci.h          |  9 ++++-
>>>  arch/arm/include/asm/secure.h        |  3 ++
>>>  arch/arm/lib/sections.c              |  2 ++
>>>  arch/arm/mach-tegra/psci.S           | 16 ++++-----
>>>  include/configs/sun6i.h              |  1 +
>>>  include/configs/sun7i.h              |  2 ++
>>>  19 files changed, 183 insertions(+), 154 deletions(-)
>>>  create mode 100644 arch/arm/cpu/armv7/psci-common.c
>>>  delete mode 100644 arch/arm/cpu/armv7/sunxi/psci_head.S
>>>
>>


More information about the U-Boot mailing list