diff --git a/include/lib/fconf/fconf.h b/include/lib/fconf/fconf.h index 5a5837f..f58ff57 100644 --- a/include/lib/fconf/fconf.h +++ b/include/lib/fconf/fconf.h @@ -47,4 +47,15 @@ */ void fconf_populate(uintptr_t config); +/* FCONF specific getter */ +#define fconf__dtb_getter(prop) fconf_dtb_info.prop + +/* Structure used to locally keep a reference to the config dtb. */ +struct fconf_dtb_info_t { + uintptr_t base_addr; + size_t size; +}; + +extern struct fconf_dtb_info_t fconf_dtb_info; + #endif /* FCONF_H */ diff --git a/lib/fconf/fconf.c b/lib/fconf/fconf.c index 7e0b00b..2ca1bdc 100644 --- a/lib/fconf/fconf.c +++ b/lib/fconf/fconf.c @@ -7,18 +7,17 @@ #include #include +#include #include #include #include #include -static uintptr_t tb_fw_cfg_dtb; -static size_t tb_fw_cfg_dtb_size; +struct fconf_dtb_info_t fconf_dtb_info; void fconf_load_config(void) { int err; - image_desc_t *desc; image_info_t arm_tb_fw_info = { .h.type = (uint8_t)PARAM_IMAGE_BINARY, @@ -27,7 +26,7 @@ .h.attr = 0, .image_base = ARM_TB_FW_CONFIG_BASE, .image_max_size = (uint32_t) - (ARM_TB_FW_CONFIG_LIMIT - ARM_TB_FW_CONFIG_BASE) + (ARM_TB_FW_CONFIG_LIMIT - ARM_TB_FW_CONFIG_BASE) }; VERBOSE("FCONF: Loading FW_CONFIG\n"); @@ -39,15 +38,19 @@ } /* At this point we know that a DTB is indeed available */ - tb_fw_cfg_dtb = arm_tb_fw_info.image_base; - tb_fw_cfg_dtb_size = (size_t)arm_tb_fw_info.image_size; + fconf_dtb_info.base_addr = arm_tb_fw_info.image_base; + fconf_dtb_info.size = (size_t)arm_tb_fw_info.image_size; + +#if !BL2_AT_EL3 + image_desc_t *desc; /* The BL2 ep_info arg0 is modified to point to FW_CONFIG */ desc = bl1_plat_get_image_desc(BL2_IMAGE_ID); assert(desc != NULL); - desc->ep_info.args.arg0 = tb_fw_cfg_dtb; + desc->ep_info.args.arg0 = arm_tb_fw_info.image_base; +#endif - INFO("FCONF: FW_CONFIG loaded at address = 0x%lx\n", tb_fw_cfg_dtb); + INFO("FCONF: FW_CONFIG loaded at address = 0x%lx\n", arm_tb_fw_info.image_base); } void fconf_populate(uintptr_t config) @@ -76,4 +79,7 @@ panic(); } } + + /* save local pointer to the config dtb */ + fconf_dtb_info.base_addr = config; } diff --git a/plat/arm/common/arm_bl2_setup.c b/plat/arm/common/arm_bl2_setup.c index cdf87ca..5f83bcc 100644 --- a/plat/arm/common/arm_bl2_setup.c +++ b/plat/arm/common/arm_bl2_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -14,6 +14,7 @@ #include #include #include +#include #ifdef SPD_opteed #include #endif @@ -58,11 +59,13 @@ /* Setup the BL2 memory layout */ bl2_tzram_layout = *mem_layout; + /* Fill the properties struct with the info from the config dtb */ + if (tb_fw_config != 0U) { + fconf_populate(tb_fw_config); + } + /* Initialise the IO layer and register platform IO devices */ plat_arm_io_setup(); - - if (tb_fw_config != 0U) - arm_bl2_set_tb_cfg_addr((void *)tb_fw_config); } void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3)