
I like the idea of secure stack and secure data section. I'd like to test this patch set, but only the psci common part and freescale platform's changes will be covered.
On Sun, Jun 19, 2016 at 12:38 PM, Chen-Yu Tsai wens@csie.org 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.
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
-- 2.8.1