Add FIT loadable custom processing
cover Add FIT loadable custom processing
Hello all,
To see the background on this see here[0].
As Simon suggested we are now using a linker list to keep any and all TEE specific code out of common files as, unlike kernel, dtb, ramdisk, and fpga image types, TEE images may not be used by needed by all users.
The last patch in this series is and example of how one can now add a handler for an image type for their platform.
Thanks,
Andrew
[0] http://lists.denx.de/pipermail/u-boot/2016-November/272614.html
Andrew F. Davis (3):
image: Add FIT image loadable section custom processing
image: Add Trusted Execution Environment image type
RFC: board: ti: dra7xx: add FIT image TEE processing
board/ti/dra7xx/evm.c | 7 +++++++ common/image.c | 34 ++++++++++++++++++++++++++++++++++ include/image.h | 12 ++++++++++++ 3 files changed, 53 insertions(+)
Signature · 1 line
2.10.2
PATCH 1/3 image: Add FIT image loadable section custom processing
To help automate the loading of custom image types we add the ability to define custom handlers for the loadable section types. When we find a compatible type while loading a "loadable" image from a FIT image we run its associated handlers to perform any additional steps needed for loading this image.
--- common/image.c | 33 +++++++++++++++++++++++++++++++++ include/image.h | 11 +++++++++++ 2 files changed, 44 insertions(+)
common/image.c +33 -0
@@ -1389,6 +1389,23 @@ int boot_get_fpga(int argc, char * const argv[], bootm_headers_t *images, }#endif +static void fit_loadable_process (uint8_t img_type, +ulong img_data, +ulong img_len) +{ +int i; +const unsigned int count = + ll_entry_count(struct fit_loadable_tbl, fit_loadable); +struct fit_loadable_tbl *fit_loadable_handler = + ll_entry_start(struct fit_loadable_tbl, fit_loadable); +/* For each loadable handler */ +for (i =0 ; i < count; i++, fit_loadable_handler++) +/* matching this type */ +if (fit_loadable_handler->type == img_type) +/* call that handler with this image data */ + fit_loadable_handler->handler (img_data, img_len); +} +int boot_get_loadable (int argc,char *const argv[],bootm_headers_t *images,uint8_t arch,const ulong *ld_start,ulong *const ld_len) {
@@ -1407,6 +1424,7 @@ int boot_get_loadable(int argc, char * const argv[], bootm_headers_t *images,int conf_noffset;int fit_img_result;const char *uname; +uint8_t img_type;/* Check to see if the images struct has a FIT configuration */ if (!genimg_has_config (images)) {
@@ -1447,6 +1465,21 @@ int boot_get_loadable(int argc, char * const argv[], bootm_headers_t *images,/* Something went wrong! */ return fit_img_result; } + + fit_img_result =fit_image_get_node (buf, uname); +if (fit_img_result <0 ) { +/* Something went wrong! */ +return fit_img_result; + } + fit_img_result =fit_image_get_type (buf, + fit_img_result, + &img_type); +if (fit_img_result <0 ) { +/* Something went wrong! */ +return fit_img_result; + } + +fit_loadable_process (img_type, img_data, img_len); }break ;default :
include/image.h +11 -0
@@ -1263,4 +1263,15 @@ int board_fit_config_name_match(const char *name);void board_fit_image_post_process (void **p_image,size_t *p_size);#endif /* CONFIG_SPL_FIT_IMAGE_POST_PROCESS */ +struct fit_loadable_tbl { +int type; +void (*handler)(ulong data,size_t size); +}; + +#define U_BOOT_FIT_LOADABLE_HANDLER (_type, _handler) \ + ll_entry_declare(struct fit_loadable_tbl, _function, fit_loadable) = { \ + .type = _type, \ + .handler = _handler, \ + } +#endif /* __IMAGE_H__ */
Signature · 1 line
2.10.2
PATCH 1/3 image: Add FIT image loadable section custom processing
Hi Andrew,
Quoted 11 lines · Andrew F. Davis
To help automate the loading of custom image types we add the ability to define custom handlers for the loadable section types. When we find a compatible type while loading a "loadable" image from a FIT image we run its associated handlers to perform any additional steps needed for loading this image.
Signed-off-by Andrew F. Davis <[email protected]>--- common/image.c | 33 +++++++++++++++++++++++++++++++++ include/image.h | 11 +++++++++++ 2 files changed, 44 insertions(+)
But please comment U_BOOT_FIT_LOADABLE_HANDLER and its associated struct.
Also can you add some documentation somewhere? Perhaps to source_file_format.txt?
Regards,
Simon
PATCH 1/3 image: Add FIT image loadable section custom processing
Quoted 15 lines · Simon Glass
Hi Andrew,
Quoted 11 lines · Andrew F. Davis
To help automate the loading of custom image types we add the ability to define custom handlers for the loadable section types. When we find a compatible type while loading a "loadable" image from a FIT image we run its associated handlers to perform any additional steps needed for loading this image.
Signed-off-by Andrew F. Davis <[email protected]>--- common/image.c | 33 +++++++++++++++++++++++++++++++++ include/image.h | 11 +++++++++++ 2 files changed, 44 insertions(+)
Quoted 7 lines
Reviewed-by Simon Glass <[email protected]>But please comment
U_BOOT_FIT_LOADABLE_HANDLERand its associated struct.Also can you add some documentation somewhere? Perhaps to source_file_format.txt?
Works for me, will add for v2.
Thanks,
Andrew
PATCH 2/3 image: Add Trusted Execution Environment image type
In reply to Andrew F. DavisAdd a new image type representing Trusted Execution Environment (TEE) image types. For example, an OP-TEE OS binary image.
--- common/image.c | 1 + include/image.h | 1 + 2 files changed, 2 insertions(+)
common/image.c +1 -0
@@ -165,6 +165,7 @@ static const table_entry_t uimage_type[] = { { IH_TYPE_ZYNQIMAGE, "zynqimage", "Xilinx Zynq Boot Image" }, { IH_TYPE_ZYNQMPIMAGE, "zynqmpimage", "Xilinx ZynqMP Boot Image" }, { IH_TYPE_FPGA, "fpga", "FPGA Image" }, + { IH_TYPE_TEE, "tee", "Trusted Execution Environment Image",}, { -1, "", "", }, };
include/image.h +1 -0
@@ -279,6 +279,7 @@ enum {IH_TYPE_ZYNQMPIMAGE ,/* Xilinx ZynqMP Boot Image */ IH_TYPE_FPGA ,/* FPGA Image */ IH_TYPE_VYBRIDIMAGE ,/* VYBRID .vyb Image */ +IH_TYPE_TEE ,/* Trusted Execution Environment OS Image */ IH_TYPE_COUNT, /* Number of image types */ };
Signature · 1 line
2.10.2
PATCH 2/3 image: Add Trusted Execution Environment image type
Quoted 8 lines · Andrew F. Davis
Add a new image type representing Trusted Execution Environment (TEE) image types. For example, an OP-TEE OS binary image.
Signed-off-by Andrew F. Davis <[email protected]>--- common/image.c | 1 + include/image.h | 1 + 2 files changed, 2 insertions(+)
PATCH 3/3 RFC: board: ti: dra7xx: add FIT image TEE processing
In reply to Andrew F. DavisPopulate the corresponding TEE image processing call to be performed during FIT loadable processing.
--- board/ti/dra7xx/evm.c | 7 +++++++ 1 file changed, 7 insertions(+)
board/ti/dra7xx/evm.c +7 -0
@@ -848,4 +848,11 @@ void board_fit_image_post_process(void **p_image, size_t *p_size) {secure_boot_verify_image (p_image, p_size); } + +void board_tee_image_process (ulong tee_image,size_t tee_size) +{ +secure_tee_install ((u32 )tee_image); +} + +U_BOOT_FIT_LOADABLE_HANDLER (IH_TYPE_TEE , board_tee_image_process);#endif
Signature · 1 line
2.10.2
PATCH 3/3 RFC: board: ti: dra7xx: add FIT image TEE processing
Quoted 7 lines · Andrew F. Davis
Populate the corresponding TEE image processing call to be performed during FIT loadable processing.
Signed-off-by Andrew F. Davis <[email protected]>--- board/ti/dra7xx/evm.c | 7 +++++++ 1 file changed, 7 insertions(+)