Re: [U-Boot] [PATCH 1/3] image: Add FIT image loadable section custom processing

2016-11-29 Thread Andrew F. Davis
On 11/23/2016 08:20 PM, Simon Glass wrote:
> Hi Andrew,
> 
> On 21 November 2016 at 13:14, Andrew F. Davis  wrote:
>> 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 
>> ---
>>  common/image.c  | 33 +
>>  include/image.h | 11 +++
>>  2 files changed, 44 insertions(+)
> 
> Reviewed-by: Simon Glass 
> 
> 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?
> 

Works for me, will add for v2.

Thanks,
Andrew
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/3] image: Add FIT image loadable section custom processing

2016-11-23 Thread Simon Glass
Hi Andrew,

On 21 November 2016 at 13:14, Andrew F. Davis  wrote:
> 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 
> ---
>  common/image.c  | 33 +
>  include/image.h | 11 +++
>  2 files changed, 44 insertions(+)

Reviewed-by: Simon Glass 

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
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/3] image: Add FIT image loadable section custom processing

2016-11-21 Thread 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 
---
 common/image.c  | 33 +
 include/image.h | 11 +++
 2 files changed, 44 insertions(+)

diff --git a/common/image.c b/common/image.c
index 7604494..2aac90d 100644
--- a/common/image.c
+++ b/common/image.c
@@ -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:
diff --git a/include/image.h b/include/image.h
index 2b1296c..a8b81b5 100644
--- a/include/image.h
+++ b/include/image.h
@@ -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__ */
-- 
2.10.2

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot