From eabbdafe9106f3f91caa160c9f10754c3cad7973 Mon Sep 17 00:00:00 2001 From: Igor Opaniuk Date: Wed, 16 Jan 2019 23:59:41 +0200 Subject: [PATCH] rpi3: fix RPI3_PRELOADED_DTB_BASE usage In case if `RPI3_PRELOADED_DTB_BASE` isn't defined explicitly with proper pre-loaded DTB address, `add_define` macro defined in `make_helpers/build_macros.mk` still supplies this definition to the compiler like `-DRPI3_PRELOADED_DTB_BASE`, and it's obviously is set to default value 1. This simply leads to the wrong `MAP_NS_DTB` region definition (base_va is set `0x1` instead of `0x00010000`) in `plat/rpi3/rpi3_common.c`: Which causes aligment check to fail in `mmap_add_region_check()`: VERBOSE: base_pa: 0x00000001, base_va: 0x00000001, size: 0x00010000 ... ERROR: mmap_add_region_check() failed. error -22 Signed-off-by: Igor Opaniuk --- plat/rpi3/platform.mk | 2 ++ plat/rpi3/rpi3_bl31_setup.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/plat/rpi3/platform.mk b/plat/rpi3/platform.mk index 559f31634..5e76345a5 100644 --- a/plat/rpi3/platform.mk +++ b/plat/rpi3/platform.mk @@ -130,7 +130,9 @@ endif $(eval $(call add_define,RPI3_BL32_RAM_LOCATION_ID)) $(eval $(call add_define,RPI3_BL33_IN_AARCH32)) $(eval $(call add_define,RPI3_DIRECT_LINUX_BOOT)) +ifdef RPI3_PRELOADED_DTB_BASE $(eval $(call add_define,RPI3_PRELOADED_DTB_BASE)) +endif $(eval $(call add_define,RPI3_RUNTIME_UART)) $(eval $(call add_define,RPI3_USE_UEFI_MAP)) diff --git a/plat/rpi3/rpi3_bl31_setup.c b/plat/rpi3/rpi3_bl31_setup.c index af7f806cd..d5c691e19 100644 --- a/plat/rpi3/rpi3_bl31_setup.c +++ b/plat/rpi3/rpi3_bl31_setup.c @@ -141,6 +141,7 @@ void bl31_plat_arch_setup(void) enable_mmu_el3(0); } +#ifdef RPI3_PRELOADED_DTB_BASE /* * Add information to the device tree (if any) about the reserved DRAM used by * the Trusted Firmware. @@ -204,6 +205,7 @@ static void rpi3_dtb_add_mem_rsv(void) INFO("rpi3: Reserved 0x%llx - 0x%llx in DTB\n", SEC_SRAM_BASE, SEC_SRAM_BASE + SEC_SRAM_SIZE); } +#endif void bl31_platform_setup(void) {