1@startuml 2 3box "BL2 common code" 4 participant bl2_entrypoint 5 participant bl2_main 6end box 7 8box "platform common code" 9 participant fconf 10 participant fconf_tbbr_getter 11participant fconf_dyn_cfg_getter 12end box 13 14box "arm platform code" #LightBlue 15 participant arm_bl2_setup 16 participant arm_io_storage 17 participant arm_fconf_io 18end box 19 20== bl2 setup == 21bl2_entrypoint -> bl2_main : bl2_setup() 22bl2_main -> arm_bl2_setup : bl2_early_platform_setup2(\n\t arg0, arg1, arg2, arg3) 23note over arm_bl2_setup 24 arg0 = fw_config 25 arg1 = mem_layout 26end note 27arm_bl2_setup -> arm_bl2_setup : arm_bl2_early_platform_setup(\n\t fw_config, mem_layout) 28activate arm_bl2_setup 29 arm_bl2_setup -> fconf: fconf_populate("FW_CONFIG", fw_config) 30 activate fconf 31 fconf -> fconf_dyn_cfg_getter: populate_dtb_registry(uintptr_t dtb) 32 note over fconf_dyn_cfg_getter: read dtb_registry properties from dtb 33 fconf_dyn_cfg_getter -> arm_bl2_setup 34 arm_bl2_setup -> fconf: FCONF_GET_PROPERTY(dyn_cfg, dtb, TB_FW_CONFIG_ID) 35 fconf -> fconf_dyn_cfg_getter: dyn_cfg_dtb_info_getter(TB_FW_CONFIG_ID) 36 fconf_dyn_cfg_getter -> arm_bl2_setup: tb_fw_config_info 37 arm_bl2_setup -> fconf: fconf_populate("TB_FW_CONFIG", tb_fw_config) 38 fconf -> fconf_tbbr_getter: fconf_populate_tbbr_dyn_config(uintptr_t dtb) 39 note over fconf_tbbr_getter: read tbbr properties from dtb 40 fconf -> arm_fconf_io: fconf_populate_arm_io_policies(uintptr_t dtb) 41 note over arm_fconf_io: read arm io propeties from dtb 42 deactivate fconf 43 arm_bl2_setup -> arm_io_storage : plat_arm_io_setup() 44 note over arm_io_storage: use populated properties 45deactivate arm_bl2_setup 46 47== bl2 main == 48 49@enduml 50