summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChen-Yu Tsai <wens@csie.org>2016-07-05 21:45:06 +0800
committerHans de Goede <hdegoede@redhat.com>2016-07-15 15:54:58 +0200
commita5aa7ff33a942ce8ea38006fd5225a800827bb2c (patch)
tree6f3580d752c60a439c1f7bd20f6046bb8155dc26
parentafc1f65f504324cd5f87a8cb480bebeb0c61e4e0 (diff)
downloadu-boot-imx-a5aa7ff33a942ce8ea38006fd5225a800827bb2c.zip
u-boot-imx-a5aa7ff33a942ce8ea38006fd5225a800827bb2c.tar.gz
u-boot-imx-a5aa7ff33a942ce8ea38006fd5225a800827bb2c.tar.bz2
ARM: Add secure section for initialized data
The secure monitor may need to store global or static values within the secure section of memory, such as target PC or CPU power status. Signed-off-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--arch/arm/config.mk4
-rw-r--r--arch/arm/cpu/u-boot.lds9
-rw-r--r--arch/arm/include/asm/secure.h1
3 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 9a5a974..8f85862 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -120,8 +120,8 @@ endif
ifdef CONFIG_ARM64
OBJCOPYFLAGS += -j .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 -j .got.plt -j .u_boot_list -j .rel.dyn
+OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .hash \
+ -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn
endif
ifdef CONFIG_OF_EMBED
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index 5a65c27..36c9fd0 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -69,12 +69,17 @@ SECTIONS
*(._secure.text)
}
- .secure_stack ALIGN(ADDR(.secure_text) + SIZEOF(.secure_text),
+ .secure_data : AT(LOADADDR(.secure_text) + SIZEOF(.secure_text))
+ {
+ *(._secure.data)
+ }
+
+ .secure_stack ALIGN(ADDR(.secure_data) + SIZEOF(.secure_data),
CONSTANT(COMMONPAGESIZE)) (NOLOAD) :
#ifdef __ARMV7_PSCI_STACK_IN_RAM
AT(ADDR(.secure_stack))
#else
- AT(LOADADDR(.secure_text) + SIZEOF(.secure_text))
+ AT(LOADADDR(.secure_data) + SIZEOF(.secure_data))
#endif
{
KEEP(*(.__secure_stack_start))
diff --git a/arch/arm/include/asm/secure.h b/arch/arm/include/asm/secure.h
index 6d9088b..5a403bc 100644
--- a/arch/arm/include/asm/secure.h
+++ b/arch/arm/include/asm/secure.h
@@ -4,6 +4,7 @@
#include <config.h>
#define __secure __attribute__ ((section ("._secure.text")))
+#define __secure_data __attribute__ ((section ("._secure.data")))
#ifdef CONFIG_ARMV7_SECURE_BASE
/*