ppc4xx/fdt/flash: Fix bug in fdt_fixup_nor_flash_node()
authorStefan Roese <sr@denx.de>
Fri, 24 Sep 2010 11:51:50 +0000 (13:51 +0200)
committerStefan Roese <sr@denx.de>
Mon, 4 Oct 2010 09:19:49 +0000 (11:19 +0200)
This patch fixes a bug in fdt_fixup_nor_flash_node() when the reg
property has multiple reg tuples, like:

reg = <0 0x00000000 0x04000000
       0 0x04000000 0x04000000>;

In this case this function did not update the reg property correctly.

Signed-off-by: Stefan Roese <sr@denx.de>
common/fdt_support.c

index 6f32e3f68df43cbc61c85a3505b0057579b2a142..0ed6e77292df179b953f6d1ad760bd9e4a236ac5 100644 (file)
@@ -620,7 +620,7 @@ int fdt_fixup_nor_flash_size(void *blob)
        int off;
        int len;
        struct fdt_property *prop;
-       u32 *reg;
+       u32 *reg, *reg2;
        int i;
 
        for (i = 0; i < 2; i++) {
@@ -640,18 +640,21 @@ int fdt_fixup_nor_flash_size(void *blob)
                                 * There might be multiple reg-tuples,
                                 * so loop through them all
                                 */
-                               len /= tuple_size;
-                               reg = (u32 *)&prop->data[0];
-                               for (idx = 0; idx < len; idx++) {
+                               reg = reg2 = (u32 *)&prop->data[0];
+                               for (idx = 0; idx < (len / tuple_size); idx++) {
                                        /*
                                         * Update size in reg property
                                         */
                                        reg[2] = flash_get_bank_size(reg[0],
                                                                     idx);
-                                       fdt_setprop(blob, off, "reg", reg,
-                                                   tuple_size);
-                                       reg += tuple_size;
+
+                                       /*
+                                        * Point to next reg tuple
+                                        */
+                                       reg += 3;
                                }
+
+                               fdt_setprop(blob, off, "reg", reg2, len);
                        }
 
                        /* Move to next compatible node */