diff options
author | Andreas Färber <afaerber@suse.de> | 2017-01-09 16:08:02 +0100 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2017-01-14 10:09:46 -0700 |
commit | b05bf6c75d03c925737e228472b694cbeaa503c2 (patch) | |
tree | 22ed1bd68550422392a5b28759d81257a20d3e17 | |
parent | 082b1414e80ffa94569613705eac319488324516 (diff) | |
download | u-boot-imx-b05bf6c75d03c925737e228472b694cbeaa503c2.zip u-boot-imx-b05bf6c75d03c925737e228472b694cbeaa503c2.tar.gz u-boot-imx-b05bf6c75d03c925737e228472b694cbeaa503c2.tar.bz2 |
cmd/fdt: Make fdt get value endian-safe for single-cell properties
On a Raspberry Pi 2 disagreements on cell endianness can be observed:
U-Boot> fdt print /soc/gpio@7e200000 phandle
phandle = <0x0000000d>
U-Boot> fdt get value myvar /soc/gpio@7e200000 phandle; printenv myvar
myvar=0x0D000000
Fix this by always treating the pointer as BE and converting it in
fdt_value_setenv(), like its counterpart fdt_parse_prop() already does.
Consistently use fdt32_t, fdt32_to_cpu() and cpu_to_fdt32().
Fixes: bc80295 ("fdt: Add get commands to fdt")
Cc: Joe Hershberger <joe.hershberger@ni.com>
Cc: Gerald Van Baren <gvb@unssw.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Acked-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | cmd/fdt.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -58,7 +58,7 @@ static int fdt_value_setenv(const void *nodep, int len, const char *var) else if (len == 4) { char buf[11]; - sprintf(buf, "0x%08X", *(uint32_t *)nodep); + sprintf(buf, "0x%08X", fdt32_to_cpu(*(fdt32_t *)nodep)); setenv(var, buf); } else if (len%4 == 0 && len <= 20) { /* Needed to print things like sha1 hashes. */ @@ -768,7 +768,7 @@ static int fdt_parse_prop(char * const *newval, int count, char *data, int *len) cp = newp; tmp = simple_strtoul(cp, &newp, 0); - *(__be32 *)data = __cpu_to_be32(tmp); + *(fdt32_t *)data = cpu_to_fdt32(tmp); data += 4; *len += 4; |