From dff29e0c65462258776b8fb821516faad3ec1394 Mon Sep 17 00:00:00 2001 From: Ting Shen Date: Mon, 28 Jan 2019 18:15:00 +0800 Subject: bootmem: add new memory type for BL31 After CL:31122, we can finally define a memory type specific for BL31, to make sure BL31 is not loaded on other reserved area. Change-Id: Idbd9a7fe4b12af23de1519892936d8d88a000e2c Signed-off-by: Ting Shen Reviewed-on: https://review.coreboot.org/c/31123 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- src/arch/arm64/arm_tf.c | 2 +- src/arch/arm64/include/arch/memlayout.h | 4 ++++ src/arch/arm64/tables.c | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'src/arch/arm64') diff --git a/src/arch/arm64/arm_tf.c b/src/arch/arm64/arm_tf.c index c0526e08d5..3f1aa2a265 100644 --- a/src/arch/arm64/arm_tf.c +++ b/src/arch/arm64/arm_tf.c @@ -50,7 +50,7 @@ void arm_tf_run_bl31(u64 payload_entry, u64 payload_arg0, u64 payload_spsr) if (prog_locate(&bl31)) die("BL31 not found"); - if (!selfload(&bl31)) + if (!selfload_check(&bl31, BM_MEM_BL31)) die("BL31 load failed"); bl31_entry = prog_entry(&bl31); diff --git a/src/arch/arm64/include/arch/memlayout.h b/src/arch/arm64/include/arch/memlayout.h index 7fce9aa2f8..a3fdd66e4f 100644 --- a/src/arch/arm64/include/arch/memlayout.h +++ b/src/arch/arm64/include/arch/memlayout.h @@ -37,4 +37,8 @@ REGION(stack, addr, size, 16) \ _ = ASSERT(size >= 2K, "stack should be >= 2K, see toolchain.inc"); +#define BL31(addr, size) \ + REGION(bl31, addr, size, 4K) \ + _ = ASSERT(size % 4K == 0, "BL31 size must be divisible by 4K!"); + #endif /* __ARCH_MEMLAYOUT_H */ diff --git a/src/arch/arm64/tables.c b/src/arch/arm64/tables.c index f36679e67f..ec949fd83b 100644 --- a/src/arch/arm64/tables.c +++ b/src/arch/arm64/tables.c @@ -20,6 +20,8 @@ #include #include +DECLARE_OPTIONAL_REGION(bl31); + void arch_write_tables(uintptr_t coreboot_table) { } @@ -28,6 +30,9 @@ void bootmem_arch_add_ranges(void) { bootmem_add_range((uintptr_t)_ttb, _ttb_size, BM_MEM_RAMSTAGE); + if (IS_ENABLED(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE) && _bl31_size > 0) + bootmem_add_range((uintptr_t)_bl31, _bl31_size, BM_MEM_BL31); + if (!IS_ENABLED(CONFIG_COMMON_CBFS_SPI_WRAPPER)) return; bootmem_add_range((uintptr_t)_postram_cbfs_cache, -- cgit v1.2.3