Message ID | 1456789721-27590-3-git-send-email-york.sun@nxp.com |
---|---|
State | Accepted |
Commit | c1913cb7897f77a26791765ef9c3c02b3588f3c1 |
Delegated to: | Tom Rini |
Headers | show |
On 29 February 2016 at 16:48, York Sun <york.sun@nxp.com> wrote: > FIT image supports more than 32 bits in addresses by using #address-cell > field. Fixing 64-bit support by using this field. > > Signed-off-by: York Sun <york.sun@nxp.com> > > --- > > Changes in v6: > Revert back to use original "ulong" instead of "phys_addr_t" > Abort getting image addresses if address is too long for "ulong" > > Changes in v5: > Split the common function into another patch. > Revise commit subject. > Update commit message as suggested by Simon. > Updated cover letter with testing report. > > Changes in v4: > Separate ulong to phys_addr_t change to another patch. > > Changes in v3: > Define PRIpa for host and target in common/image-fit.c so printf works > properly for 32-, 64-bit targets and host tools. > > Changes in v2: > Make a common function for both load and entry addresses. > Simplify calculation of addresses in a similar way as fdtdec_get_number() > fdtdec_get_number() is not used, or too many files need to be included > and/or twisted for host tool > Continue to use %08llx for print format for load and entry addresses > because %pa does not always work for host tool (mkimage) > > common/image-fit.c | 22 +++++++++++++++++----- > 1 file changed, 17 insertions(+), 5 deletions(-) Reviewed-by: Simon Glass <sjg@chromium.org>
On Mon, Feb 29, 2016 at 03:48:41PM -0800, York Sun wrote: > FIT image supports more than 32 bits in addresses by using #address-cell > field. Fixing 64-bit support by using this field. > > Signed-off-by: York Sun <york.sun@nxp.com> > Reviewed-by: Simon Glass <sjg@chromium.org> Applied to u-boot/master, thanks!
diff --git a/common/image-fit.c b/common/image-fit.c index 7ce3e35..b5f7c4c 100644 --- a/common/image-fit.c +++ b/common/image-fit.c @@ -678,16 +678,28 @@ int fit_image_get_comp(const void *fit, int noffset, uint8_t *comp) static int fit_image_get_address(const void *fit, int noffset, char *name, ulong *load) { - int len; - const uint32_t *data; + int len, cell_len; + const fdt32_t *cell; + uint64_t load64 = 0; - data = fdt_getprop(fit, noffset, name, &len); - if (data == NULL) { + cell = fdt_getprop(fit, noffset, name, &len); + if (cell == NULL) { fit_get_debug(fit, noffset, name, len); return -1; } - *load = uimage_to_cpu(*data); + if (len > sizeof(ulong)) { + printf("Unsupported %s address size\n", name); + return -1; + } + + cell_len = len >> 2; + /* Use load64 to avoid compiling warning for 32-bit target */ + while (cell_len--) { + load64 = (load64 << 32) | uimage_to_cpu(*cell); + cell++; + } + *load = (ulong)load64; return 0; }
FIT image supports more than 32 bits in addresses by using #address-cell field. Fixing 64-bit support by using this field. Signed-off-by: York Sun <york.sun@nxp.com> --- Changes in v6: Revert back to use original "ulong" instead of "phys_addr_t" Abort getting image addresses if address is too long for "ulong" Changes in v5: Split the common function into another patch. Revise commit subject. Update commit message as suggested by Simon. Updated cover letter with testing report. Changes in v4: Separate ulong to phys_addr_t change to another patch. Changes in v3: Define PRIpa for host and target in common/image-fit.c so printf works properly for 32-, 64-bit targets and host tools. Changes in v2: Make a common function for both load and entry addresses. Simplify calculation of addresses in a similar way as fdtdec_get_number() fdtdec_get_number() is not used, or too many files need to be included and/or twisted for host tool Continue to use %08llx for print format for load and entry addresses because %pa does not always work for host tool (mkimage) common/image-fit.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)