]> git.sur5r.net Git - u-boot/commitdiff
driver/fm: fdt.c: fix fdt_fixup_fman_firmware() to support ARM platforms
authorQianyu Gong <qianyu.gong@nxp.com>
Thu, 18 Feb 2016 05:02:01 +0000 (13:02 +0800)
committerYork Sun <york.sun@nxp.com>
Wed, 24 Feb 2016 16:51:13 +0000 (08:51 -0800)
Use fdt32_to_cpu() to convert the data correctly for both endianness
platforms.

Signed-off-by: Gong Qianyu <Qianyu.Gong@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
drivers/net/fm/fdt.c

index 830d228dba129cfa8a210b7eb2cffd83176d06ab..9918d8089a1fa993776ebcb14b849657fe922d98 100644 (file)
@@ -45,7 +45,7 @@ void fdt_fixup_fman_firmware(void *blob)
                return;
 
        hdr = &fmanfw->header;
-       length = be32_to_cpu(hdr->length);
+       length = fdt32_to_cpu(hdr->length);
 
        /* Verify the firmware. */
        if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') ||
@@ -61,14 +61,16 @@ void fdt_fixup_fman_firmware(void *blob)
        }
 
        length -= sizeof(u32);  /* Subtract the size of the CRC */
-       crc = be32_to_cpu(*(u32 *)((void *)fmanfw + length));
+       crc = fdt32_to_cpu(*(u32 *)((void *)fmanfw + length));
        if (crc != crc32_no_comp(0, (void *)fmanfw, length)) {
                printf("Fman firmware at %p has invalid CRC\n", fmanfw);
                return;
        }
 
+       length += sizeof(u32);
+
        /* Increase the size of the fdt to make room for the node. */
-       rc = fdt_increase_size(blob, fmanfw->header.length);
+       rc = fdt_increase_size(blob, length);
        if (rc < 0) {
                printf("Unable to make room for Fman firmware: %s\n",
                       fdt_strerror(rc));
@@ -101,8 +103,7 @@ void fdt_fixup_fman_firmware(void *blob)
                       fdt_strerror(rc));
                return;
        }
-       rc = fdt_setprop(blob, fwnode, "fsl,firmware", fmanfw,
-                        fmanfw->header.length);
+       rc = fdt_setprop(blob, fwnode, "fsl,firmware", fmanfw, length);
        if (rc < 0) {
                char s[64];
                fdt_get_path(blob, fwnode, s, sizeof(s));