[U-Boot] [PATCH 4/8] ARMv8: PSCI: Add linker section to hold PSCI code

Albert ARIBAUD
2014-09-18T09:12:17Z

Hi Arnab,

On Thu, 28 Aug 2014 01:59:57 +0530, Arnab Basu
<arnab.basu@freescale.com> wrote:

> A separate linker section makes it possible to keep this code either
> in DDR or in some secure memory location provided specifically for the
> purpose.
>
> So far no one is using this section.
>
> Signed-off-by: Arnab Basu <arnab.basu@freescale.com>
> Reviewed-by: Bhupesh Sharma <bhupesh.sharma@freescale.com>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> ---
> arch/arm/config.mk | 2 +-
> arch/arm/cpu/armv8/u-boot.lds | 30 ++++++++++++++++++++++++++++++
> 2 files changed, 31 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/config.mk b/arch/arm/config.mk
> index c339e6d..9272e9c 100644
> --- a/arch/arm/config.mk
> +++ b/arch/arm/config.mk
> @@ -111,7 +111,7 @@ endif
>
> # limit ourselves to the sections we want in the .bin.
> ifdef CONFIG_ARM64
> -OBJCOPYFLAGS += -j .text -j .rodata -j .data -j .u_boot_list -j .rela.dyn
> +OBJCOPYFLAGS += -j .text -j .secure_text -j .rodata -j .data -j .u_boot_list -j .rela.dyn
> else
> OBJCOPYFLAGS += -j .text -j .secure_text -j .rodata -j .hash -j .data -j .got.plt -j .u_boot_list -j .rel.dyn
> endif
> diff --git a/arch/arm/cpu/armv8/u-boot.lds b/arch/arm/cpu/armv8/u-boot.lds
> index 4c12222..bd95fff 100644
> --- a/arch/arm/cpu/armv8/u-boot.lds
> +++ b/arch/arm/cpu/armv8/u-boot.lds
> @@ -8,6 +8,8 @@
> * SPDX-License-Identifier: GPL-2.0+
> */
>
> +#include <config.h>
> +
> OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
> OUTPUT_ARCH(aarch64)
> ENTRY(_start)
> @@ -23,6 +25,34 @@ SECTIONS
> *(.text*)
> }
>
> +#ifdef CONFIG_ARMV8_PSCI
> +
> +#ifndef CONFIG_ARMV8_SECURE_BASE
> +#define CONFIG_ARMV8_SECURE_BASE
> +#endif
> +
> + .__secure_start : {
> + . = ALIGN(0x1000);
> + *(.__secure_start)
> + }
> +
> + .secure_text CONFIG_ARMV8_SECURE_BASE :
> + AT(ADDR(.__secure_start) + SIZEOF(.__secure_start))
> + {
> + *(._secure.text)
> + }
> +
> + . = LOADADDR(.__secure_start) +
> + SIZEOF(.__secure_start) +
> + SIZEOF(.secure_text);
> +
> + __secure_end_lma = .;
> + .__secure_end : AT(__secure_end_lma) {
> + *(.__secure_end)
> + LONG(0x1d1071c); /* Must output something to reset LMA */

Can you explain in more detail what issue this fixes?

> + }
> +#endif
> +
> . = ALIGN(8);
> .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
>

Amicalement,
--
Albert.