public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: York Sun <york.sun@nxp.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH v5 4/4] common: image-fit: Fix load and entry addresses in FIT image
Date: Thu, 25 Feb 2016 14:36:19 -0800	[thread overview]
Message-ID: <1456439779-4792-5-git-send-email-york.sun@nxp.com> (raw)
In-Reply-To: <1456439779-4792-1-git-send-email-york.sun@nxp.com>

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 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(-)

diff --git a/common/image-fit.c b/common/image-fit.c
index 2d29e88..69cf598 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,
 			  phys_addr_t *load)
 {
-	int len;
-	const uint32_t *data;
+	int len, cell_len;
+	const fdt32_t *cell;
+	unsigned long long 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(phys_addr_t)) {
+		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 = (phys_addr_t)load64;
 
 	return 0;
 }
-- 
1.7.9.5

      parent reply	other threads:[~2016-02-25 22:36 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-25 22:36 [U-Boot] [RFC PATCH v5 0/4] Enable FIT image to be loaded beyond 32-bit space York Sun
2016-02-25 22:36 ` [U-Boot] [RFC PATCH v5 1/4] common: Convert ulong to phys_addr_t for image addresses York Sun
2016-02-25 23:05   ` Wolfgang Denk
2016-02-26 17:22     ` york sun
2016-02-26 17:31       ` Simon Glass
2016-02-26 17:47         ` york sun
2016-02-26 18:05           ` Simon Glass
2016-02-26 18:09             ` york sun
2016-02-25 22:36 ` [U-Boot] [RFC PATCH v5 2/4] sandbox: Fix compiling warning York Sun
2016-02-25 22:36 ` [U-Boot] [RFC PATCH v5 3/4] common: image-fit: Use a common function to get address York Sun
2016-02-25 22:36 ` York Sun [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1456439779-4792-5-git-send-email-york.sun@nxp.com \
    --to=york.sun@nxp.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox