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(); }