From c20b0606611fe6b36a87a2ca3a4a40b48e87cbe7 Mon Sep 17 00:00:00 2001 From: Yann Gautier Date: Mon, 24 Aug 2020 11:51:50 +0200 Subject: [PATCH] refactor(plat/st): avoid fixed DT address Device Tree address is now a parameter for dt_open_and_check() function. This will allow better flexibility when introducing PIE and FIP. The fdt pointer is now only assigned if the given address holds a valid device tree file. This allows removing the fdt_checked variable, as we now check fdt is not null. Change-Id: I04cbb2fc05c9c711ae1c77d56368dbeb6dd4b01a Signed-off-by: Yann Gautier --- plat/st/common/include/stm32mp_dt.h | 7 ++++--- plat/st/common/stm32mp_dt.c | 19 ++++++++++--------- plat/st/stm32mp1/bl2_plat_setup.c | 2 +- plat/st/stm32mp1/sp_min/sp_min_setup.c | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/plat/st/common/include/stm32mp_dt.h b/plat/st/common/include/stm32mp_dt.h index e3b4e597e..299c0b1cb 100644 --- a/plat/st/common/include/stm32mp_dt.h +++ b/plat/st/common/include/stm32mp_dt.h @@ -1,6 +1,6 @@ /* - * Copyright (c) 2020, STMicroelectronics - All Rights Reserved - * Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2020-2021, STMicroelectronics - All Rights Reserved + * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -9,6 +9,7 @@ #define STM32MP_DT_H #include +#include #define DT_DISABLED U(0) #define DT_NON_SECURE U(1) @@ -25,7 +26,7 @@ struct dt_node_info { /******************************************************************************* * Function and variable prototypes ******************************************************************************/ -int dt_open_and_check(void); +int dt_open_and_check(uintptr_t dt_addr); int fdt_get_address(void **fdt_addr); bool fdt_check_node(int node); uint8_t fdt_get_status(int node); diff --git a/plat/st/common/stm32mp_dt.c b/plat/st/common/stm32mp_dt.c index 4f130ce20..6465c10e8 100644 --- a/plat/st/common/stm32mp_dt.c +++ b/plat/st/common/stm32mp_dt.c @@ -19,20 +19,19 @@ #include -static int fdt_checked; - -static void *fdt = (void *)(uintptr_t)STM32MP_DTB_BASE; +static void *fdt; /******************************************************************************* * This function checks device tree file with its header. * Returns 0 on success and a negative FDT error code on failure. ******************************************************************************/ -int dt_open_and_check(void) +int dt_open_and_check(uintptr_t dt_addr) { - int ret = fdt_check_header(fdt); + int ret; + ret = fdt_check_header((void *)dt_addr); if (ret == 0) { - fdt_checked = 1; + fdt = (void *)dt_addr; } return ret; @@ -45,11 +44,13 @@ int dt_open_and_check(void) ******************************************************************************/ int fdt_get_address(void **fdt_addr) { - if (fdt_checked == 1) { - *fdt_addr = fdt; + if (fdt == NULL) { + return 0; } - return fdt_checked; + *fdt_addr = fdt; + + return 1; } /******************************************************************************* diff --git a/plat/st/stm32mp1/bl2_plat_setup.c b/plat/st/stm32mp1/bl2_plat_setup.c index 0e95f49f7..91073b89d 100644 --- a/plat/st/stm32mp1/bl2_plat_setup.c +++ b/plat/st/stm32mp1/bl2_plat_setup.c @@ -196,7 +196,7 @@ void bl2_el3_plat_arch_setup(void) configure_mmu(); - if (dt_open_and_check() < 0) { + if (dt_open_and_check(STM32MP_DTB_BASE) < 0) { panic(); } diff --git a/plat/st/stm32mp1/sp_min/sp_min_setup.c b/plat/st/stm32mp1/sp_min/sp_min_setup.c index 9b8c3ea27..334f914a4 100644 --- a/plat/st/stm32mp1/sp_min/sp_min_setup.c +++ b/plat/st/stm32mp1/sp_min/sp_min_setup.c @@ -146,7 +146,7 @@ void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, bl_params = bl_params->next_params_info; } - if (dt_open_and_check() < 0) { + if (dt_open_and_check(STM32MP_DTB_BASE) < 0) { panic(); }