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

Albert ARIBAUD albert.u.boot at aribaud.net
Thu Sep 18 11:12:17 CEST 2014


Hi Arnab,

On Thu, 28 Aug 2014 01:59:57 +0530, Arnab Basu
<arnab.basu at 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 at freescale.com>
> Reviewed-by: Bhupesh Sharma <bhupesh.sharma at freescale.com>
> Cc: Marc Zyngier <marc.zyngier at 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.


More information about the U-Boot mailing list