[U-Boot] [PATCH] cmd/fdt: Make fdt get value endian-safe for single-cell properties

Simon Glass sjg at chromium.org
Wed Oct 26 21:19:24 CEST 2016


Hi Andreas,

On 26 October 2016 at 09:02, Andreas Färber <afaerber at suse.de> wrote:
> On a Raspberry Pi 2 disagreements on cell endianness can be observed:
>
>   U-Boot> fdt print /soc/gpio at 7e200000 phandle
>   phandle = <0x0000000d>
>   U-Boot> fdt get value myvar /soc/gpio at 7e200000 phandle; printenv myvar
>   myvar=0x0D000000
>
> Fix this by always treating the pointer as __be32 and converting it in
> fdt_value_setenv(), like its counterpart fdt_parse_prop() already does.
>
> Fixes: bc80295 ("fdt: Add get commands to fdt")
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> Cc: Gerald Van Baren <gvb at unssw.com>
> Signed-off-by: Andreas Färber <afaerber at suse.de>
> ---
>  cmd/fdt.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

The patch looks good, but please can you add a function comment to
fdt_value_setenv() ? You might even consider changing nodep to a
__be32.

>
> diff --git a/cmd/fdt.c b/cmd/fdt.c
> index b503357..a131f17 100644
> --- a/cmd/fdt.c
> +++ b/cmd/fdt.c
> @@ -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", __be32_to_cpu(*(__be32 *)nodep));
>                 setenv(var, buf);
>         } else if (len%4 == 0 && len <= 20) {
>                 /* Needed to print things like sha1 hashes. */
> --
> 2.6.6
>

Regards,
Simon


More information about the U-Boot mailing list