[U-Boot] [PATCH v2] add FIT data-position & data-offset property support

Add FIT data-position & data-offset property support for bootm, which were already supported in SPL.
Signed-off-by: Kelvin Cheung keguang.zhang@gmail.com ---
Changes for v2: create fit_image_get_data_and_size() to remove duplicated code
--- common/image-fit.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- include/image.h | 2 ++ 2 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/common/image-fit.c b/common/image-fit.c index 5b93dce..bc22d8f 100644 --- a/common/image-fit.c +++ b/common/image-fit.c @@ -391,7 +391,7 @@ void fit_image_print(const void *fit, int image_noffset, const char *p) fit_image_get_comp(fit, image_noffset, &comp); printf("%s Compression: %s\n", p, genimg_get_comp_name(comp));
- ret = fit_image_get_data(fit, image_noffset, &data, &size); + ret = fit_image_get_data_and_size(fit, image_noffset, &data, &size);
#ifndef USE_HOSTCC printf("%s Data Start: ", p); @@ -856,6 +856,54 @@ int fit_image_get_data_size(const void *fit, int noffset, int *data_size) }
/** + * fit_image_get_data - get data and its size including + * both embedded and external data + * @fit: pointer to the FIT format image header + * @noffset: component image node offset + * @data: double pointer to void, will hold data property's data address + * @size: pointer to size_t, will hold data property's data size + * + * fit_image_get_data() finds data and its size including + * both embedded and external data. If the property is found + * its data start address and size are returned to the caller. + * + * returns: + * 0, on success + * otherwise, on failure + */ +int fit_image_get_data_and_size(const void *fit, int noffset, + const void **data, size_t *size) +{ + bool external_data = false; + int offset; + int len; + int ret; + + if (!fit_image_get_data_position(fit, noffset, &offset)) { + external_data = true; + } else if (!fit_image_get_data_offset(fit, noffset, &offset)) { + external_data = true; + /* + * For FIT with external data, figure out where + * the external images start. This is the base + * for the data-offset properties in each image. + */ + offset += ((fdt_totalsize(fit) + 3) & ~3); + } + + if (external_data) { + debug("External Data\n"); + ret = fit_image_get_data_size(fit, noffset, &len); + *data = fit + offset; + *size = len; + } else { + ret = fit_image_get_data(fit, noffset, data, size); + } + + return ret; +} + +/** * fit_image_hash_get_algo - get hash algorithm name * @fit: pointer to the FIT format image header * @noffset: hash node offset @@ -1153,7 +1201,7 @@ int fit_image_verify(const void *fit, int image_noffset) char *err_msg = "";
/* Get image data and data length */ - if (fit_image_get_data(fit, image_noffset, &data, &size)) { + if (fit_image_get_data_and_size(fit, image_noffset, &data, &size)) { err_msg = "Can't get image data/size"; printf("error!\n%s for '%s' hash node in '%s' image node\n", err_msg, fit_get_name(fit, noffset, NULL), @@ -1875,7 +1923,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr, bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ALL_OK);
/* get image data address and length */ - if (fit_image_get_data(fit, noffset, &buf, &size)) { + if (fit_image_get_data_and_size(fit, noffset, &buf, &size)) { printf("Could not find %s subimage data!\n", prop_name); bootstage_error(bootstage_id + BOOTSTAGE_SUB_GET_DATA); return -ENOENT; diff --git a/include/image.h b/include/image.h index df701e3..1aed910 100644 --- a/include/image.h +++ b/include/image.h @@ -987,6 +987,8 @@ int fit_image_get_data_offset(const void *fit, int noffset, int *data_offset); int fit_image_get_data_position(const void *fit, int noffset, int *data_position); int fit_image_get_data_size(const void *fit, int noffset, int *data_size); +int fit_image_get_data_and_size(const void *fit, int noffset, + const void **data, size_t *size);
int fit_image_hash_get_algo(const void *fit, int noffset, char **algo); int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value,

Hi,
On 18 May 2018 at 01:56, Kelvin Cheung keguang.zhang@gmail.com wrote:
Add FIT data-position & data-offset property support for bootm, which were already supported in SPL.
Signed-off-by: Kelvin Cheung keguang.zhang@gmail.com
Changes for v2: create fit_image_get_data_and_size() to remove duplicated code
common/image-fit.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- include/image.h | 2 ++ 2 files changed, 53 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
How can we get this feature integrated into the tests?
Regards, Simon

Hi Simon,
2018-05-23 7:30 GMT+08:00 Simon Glass sjg@chromium.org:
Hi,
On 18 May 2018 at 01:56, Kelvin Cheung keguang.zhang@gmail.com wrote:
Add FIT data-position & data-offset property support for bootm, which were already supported in SPL.
Signed-off-by: Kelvin Cheung keguang.zhang@gmail.com
Changes for v2: create fit_image_get_data_and_size() to remove duplicated code
common/image-fit.c | 54 ++++++++++++++++++++++++++++++
+++++++++++++++++++++---
include/image.h | 2 ++ 2 files changed, 53 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
How can we get this feature integrated into the tests?
Do you mean the test scripts under test dir?
BTW, I updated this patch to v3 several days ago. Thanks!
Regards, Simon

Hi Kelvin,
On 22 May 2018 at 19:34, Kelvin Cheung keguang.zhang@gmail.com wrote:
Hi Simon,
2018-05-23 7:30 GMT+08:00 Simon Glass sjg@chromium.org:
Hi,
On 18 May 2018 at 01:56, Kelvin Cheung keguang.zhang@gmail.com wrote:
Add FIT data-position & data-offset property support for bootm, which were already supported in SPL.
Signed-off-by: Kelvin Cheung keguang.zhang@gmail.com
Changes for v2: create fit_image_get_data_and_size() to remove duplicated code
common/image-fit.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- include/image.h | 2 ++ 2 files changed, 53 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
How can we get this feature integrated into the tests?
Do you mean the test scripts under test dir?
I mean the test_fit.py test.
BTW, I updated this patch to v3 several days ago.
OK, well please take a look at the test.
Regards, Simon
participants (2)
-
Kelvin Cheung
-
Simon Glass