On 01/14/2018 08:55 PM, Sumit Garg wrote:
> Enable support for multiple loadable images in SEC firmware FIT image.
> 
> Signed-off-by: Sumit Garg <sumit.g...@nxp.com>
> ---
>  arch/arm/cpu/armv8/sec_firmware.c | 51 
> +++++++++++++++++++++++++++++++--------
>  1 file changed, 41 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv8/sec_firmware.c 
> b/arch/arm/cpu/armv8/sec_firmware.c
> index 927eae4..28de81c 100644
> --- a/arch/arm/cpu/armv8/sec_firmware.c
> +++ b/arch/arm/cpu/armv8/sec_firmware.c
> @@ -116,11 +116,13 @@ static int sec_firmware_check_copy_loadable(const void 
> *sec_firmware_img,
>                                           u32 *loadable_l, u32 *loadable_h)
>  {
>       phys_addr_t sec_firmware_loadable_addr = 0;
> -     int conf_node_off, ld_node_off;
> +     int conf_node_off, ld_node_off, images;
>       char *conf_node_name = NULL;
>       const void *data;
>       size_t size;
>       ulong load;
> +     const char *name, *str, *type;
> +     int len;
>  
>       conf_node_name = SEC_FIRMEWARE_FIT_CNF_NAME;
>  
> @@ -130,11 +132,32 @@ static int sec_firmware_check_copy_loadable(const void 
> *sec_firmware_img,
>       return -ENOENT;
>       }
>  
> -     ld_node_off = fit_conf_get_prop_node(sec_firmware_img, conf_node_off,
> -                                          FIT_LOADABLE_PROP);
> -     if (ld_node_off >= 0) {
> -             printf("SEC Firmware: '%s' present in config\n",
> -                    FIT_LOADABLE_PROP);
> +     /* find the node holding the images information */
> +     images = fdt_path_offset(sec_firmware_img, FIT_IMAGES_PATH);
> +     if (images < 0) {
> +             debug("%s: Cannot find /images node: %d\n", __func__, images);

Do you expect this often? If it should happen, change debug to printf.

> +             return -1;
> +     }
> +
> +     type = FIT_LOADABLE_PROP;
> +
> +     name = fdt_getprop(sec_firmware_img, conf_node_off, type, &len);
> +     if (!name) {
> +             /* Loadables not present */
> +             return 0;
> +     }
> +
> +     printf("SEC Firmware: '%s' present in config\n", type);

How about replace printf() with debug()?

> +
> +     for (str = name; str && ((str - name) < len);
> +          str = strchr(str, '\0') + 1) {
> +             printf("%s: '%s'\n", type, str);
> +             ld_node_off = fdt_subnode_offset(sec_firmware_img, images, str);
> +             if (ld_node_off < 0) {
> +                     printf("cannot find image node '%s': %d\n", str,
> +                            ld_node_off);
> +                     return -EINVAL;
> +             }
>  
>               /* Verify secure firmware image */
>               if (!(fit_image_verify(sec_firmware_img, ld_node_off))) {
> @@ -164,11 +187,19 @@ static int sec_firmware_check_copy_loadable(const void 
> *sec_firmware_img,
>               memcpy((void *)sec_firmware_loadable_addr, data, size);
>               flush_dcache_range(sec_firmware_loadable_addr,
>                                  sec_firmware_loadable_addr + size);
> -     }
>  
> -     /* Populate address ptrs for loadable image with loadbale addr */
> -     out_le32(loadable_l, (sec_firmware_loadable_addr & WORD_MASK));
> -     out_le32(loadable_h, (sec_firmware_loadable_addr >> WORD_SHIFT));
> +             /* Populate loadable address only for Trusted OS */
> +             if (!strcmp(str, "trustedOS@1")) {
> +                     /*
> +                      * Populate address ptrs for loadable image with
> +                      * loadbale addr
> +                      */
> +                     out_le32(loadable_l, (sec_firmware_loadable_addr &
> +                                           WORD_MASK));
> +                     out_le32(loadable_h, (sec_firmware_loadable_addr >>
> +                                           WORD_SHIFT));
> +             }
> +     }
>  
>       return 0;
>  }
> 

It is unclear that you are looking for "trustedOS@1" to set the address.
Please add some document to describe the FIT image you are expecting.

York
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to