@startuml box "BL1 common code" participant bl1_main participant bl_common end box box "arm platform code" #LightBlue participant fvp_bl1_setup participant arm_bl1_setup participant arm_io_storage end box box "platform common code" participant plat_bl1_common participant fconf_dyn_cfg_getter participant fconf end box bl1_main -> fvp_bl1_setup : bl1_platform_setup() fvp_bl1_setup -> arm_bl1_setup : arm_bl1_platform_setup() arm_bl1_setup -> arm_io_storage : plat_arm_io_setup() note over arm_io_storage : register and setup fip arm_bl1_setup -> fconf : set_fw_config_info(fw_config_base, max_size) note over fconf set fw_config information (address, size, image_id) in global dtb_infos array. end note activate fconf arm_bl1_setup -> fconf : fconf_load_config(FW_CONFIG_ID) fconf -> fconf : FCONF_GET_PROPERTY(dyn_cfg, dtb, FW_CONFIG_ID) fconf -> fconf_dyn_cfg_getter: dyn_cfg_dtb_info_getter(FW_CONFIG_ID) fconf_dyn_cfg_getter -> fconf: fw_config_info fconf -> bl_common : load_auth_image(FW_CONFIG_ID, &image_info) activate bl_common note over bl_common load and auth image from fip with info from plat_io_policy end note bl_common -> arm_io_storage arm_io_storage -> fconf: FCONF_GET_PROPERTY(arm, arm_io_policies, FW_CONFIG_ID) note over fconf: use statically defined policies in bl1 fconf <- bl_common : image_info deactivate bl_common note over fconf : get fw_config_dtb from image_info arm_bl1_setup -> fconf: FCONF_GET_PROPERTY(dyn_cfg, dtb, FW_CONFIG_ID) fconf -> fconf_dyn_cfg_getter: dyn_cfg_dtb_info_getter(FW_CONFIG_ID) fconf_dyn_cfg_getter -> arm_bl1_setup: fw_config_info arm_bl1_setup -> fconf_dyn_cfg_getter: populate_dtb_registry(uintptr_t dtb) arm_bl1_setup -> fconf: fconf_load_config(TB_FW_CONFIG_ID) fconf -> fconf : FCONF_GET_PROPERTY(dyn_cfg, dtb, TB_FW_CONFIG_ID) fconf -> fconf_dyn_cfg_getter: dyn_cfg_dtb_info_getter(TB_FW_CONFIG_ID) fconf_dyn_cfg_getter -> fconf: tb_fw_config_info fconf -> bl_common : load_auth_image(TB_FW_CONFIG_ID, &image_info) activate bl_common note over bl_common load and auth image from fip with info from plat_io_policy end note bl_common -> arm_io_storage arm_io_storage -> fconf: FCONF_GET_PROPERTY(arm, arm_io_policies, TB_FW_CONFIG_ID) note over fconf: use statically defined policies in bl1 fconf <- bl_common : image_info deactivate bl_common note over fconf : get tb_fw_config_dtb from image_info fconf -> arm_bl1_setup arm_bl1_setup -> plat_bl1_common : bl1_plat_get_image_desc(BL2_IMAGE_ID) arm_bl1_setup <- plat_bl1_common : BL2_IMAGE_DESC note over arm_bl1_setup set ep_info.args.arg0 of BL2_IMAGE_DESC to FW_CONFIG base address end note deactivate fconf == load & auth, prepare and jump to BL2 == @enduml