]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
doc: Update BL1 and BL2 boot flow
authorManish V Badarkhe <Manish.Badarkhe@arm.com>
Sun, 21 Jun 2020 04:41:11 +0000 (05:41 +0100)
committerManish V Badarkhe <manish.badarkhe@arm.com>
Fri, 26 Jun 2020 07:26:09 +0000 (07:26 +0000)
Updated the document for BL1 and BL2 boot flow to capture
below changes made in FCONF

1. Loading of fw_config and tb_fw_config images by BL1.
2. Population of fw_config and tb_fw_config by BL2.

Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
Change-Id: Ifea5c61d520ff1de834c279ce1759b53448303ba

docs/components/fconf/index.rst
docs/resources/diagrams/plantuml/fconf_bl1_load_config.puml
docs/resources/diagrams/plantuml/fconf_bl2_populate.puml

index 0da56ec3bdd9b38ff3cc595ead2d3b1b76287f0b..90206335610652a555edb6551576f4c8e64cd2a8 100644 (file)
@@ -49,8 +49,10 @@ Hence each ``populate()`` function must be registered with a specific
 configuration properties which is usually a device tree file.
 
 Example:
+ - FW_CONFIG: properties related to base address, maximum size and image id
+   of other DTBs etc.
  - TB_FW: properties related to trusted firmware such as IO policies,
-   base address of other DTBs, mbedtls heap info etc.
+   mbedtls heap info etc.
  - HW_CONFIG: properties related to hardware configuration of the SoC
    such as topology, GIC controller, PSCI hooks, CPU ID etc.
 
@@ -88,9 +90,10 @@ explain how the properties are described for a specific backend. Refer to the
 Loading the property device tree
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The ``fconf_load_config()`` must be called to load the device tree containing
-the properties' values. This must be done after the io layer is initialized, as
-the |DTB| is stored on an external device (FIP).
+The ``fconf_load_config(image_id)`` must be called to load fw_config and
+tb_fw_config devices tree containing the properties' values. This must be done
+after the io layer is initialized, as the |DTB| is stored on an external
+device (FIP).
 
 .. uml:: ../../resources/diagrams/plantuml/fconf_bl1_load_config.puml
 
index e613eefd072a8fa0616cb42d7cb770170d7ff979..e513ed4c3e19c62494ae49df8907e130d5bd5653 100644 (file)
@@ -13,6 +13,7 @@ end box
 
 box "platform common code"
        participant plat_bl1_common
+       participant fconf_dyn_cfg_getter
        participant fconf
 end box
 
@@ -20,12 +21,17 @@ 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 : fconf_load_config()
+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
-       note over fconf
-               create and populate an
-               image_desc_t for FW_CONFIG
-       end note
+       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
@@ -33,18 +39,38 @@ activate fconf
                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_cfg)
-       note over fconf: use staticaly defined policies in bl1
+       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 -> plat_bl1_common : bl1_plat_get_image_desc(BL2_IMAGE_ID)
-       fconf <- plat_bl1_common : BL2_IMAGE_DESC
-       note over fconf
-               set ep_info.args.arg0 of BL2_IMAGE_DESC
-               to FW_CONFIG base address
+       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
-arm_bl1_setup <- fconf
 deactivate fconf
 
 == load & auth, prepare and jump to BL2 ==
index 881f25343a86738339f2ae570a0b69ed5653b45e..c536ee09008b1e643c940d12b2187b9a3d8dcf2e 100644 (file)
@@ -8,6 +8,7 @@ end box
 box "platform common code"
        participant fconf
        participant fconf_tbbr_getter
+participant fconf_dyn_cfg_getter
 end box
 
 box "arm platform code" #LightBlue
@@ -25,10 +26,17 @@ note over arm_bl2_setup
 end note
 arm_bl2_setup -> arm_bl2_setup : arm_bl2_early_platform_setup(\n\t fw_config, mem_layout)
 activate arm_bl2_setup
-       arm_bl2_setup -> fconf: fconf_polulate("TB_FW", fw_config)
+       arm_bl2_setup -> fconf: fconf_populate("FW_CONFIG", fw_config)
        activate fconf
+               fconf -> fconf_dyn_cfg_getter: populate_dtb_registry(uintptr_t dtb)
+               note over fconf_dyn_cfg_getter: read dtb_registry properties from dtb
+               fconf_dyn_cfg_getter -> arm_bl2_setup
+               arm_bl2_setup -> 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 -> arm_bl2_setup: tb_fw_config_info
+               arm_bl2_setup -> fconf: fconf_populate("TB_FW_CONFIG", tb_fw_config)
                fconf -> fconf_tbbr_getter: fconf_populate_tbbr_dyn_config(uintptr_t dtb)
-               note over fconf_tbbr_getter: read tbbr propeties from dtb
+               note over fconf_tbbr_getter: read tbbr properties from dtb
                fconf -> arm_fconf_io: fconf_populate_arm_io_policies(uintptr_t dtb)
                note over arm_fconf_io: read arm io propeties from dtb
        deactivate fconf