]> git.sur5r.net Git - u-boot/blobdiff - common/fdt_support.c
powerpc: Zero out board info struct on bootup
[u-boot] / common / fdt_support.c
index 6f32e3f68df43cbc61c85a3505b0057579b2a142..9b65a8adfdec5f80423ecfd6e32c32da710e3db2 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 */
@@ -1186,3 +1189,32 @@ int fdt_alloc_phandle(void *blob)
 
        return phandle + 1;
 }
+
+#if defined(CONFIG_VIDEO)
+int fdt_add_edid(void *blob, const char *compat, unsigned char *edid_buf)
+{
+       int noff;
+       int ret;
+
+       noff = fdt_node_offset_by_compatible(blob, -1, compat);
+       if (noff != -FDT_ERR_NOTFOUND) {
+               debug("%s: %s\n", fdt_get_name(blob, noff, 0), compat);
+add_edid:
+               ret = fdt_setprop(blob, noff, "edid", edid_buf, 128);
+               if (ret == -FDT_ERR_NOSPACE) {
+                       ret = fdt_increase_size(blob, 512);
+                       if (!ret)
+                               goto add_edid;
+                       else
+                               goto err_size;
+               } else if (ret < 0) {
+                       printf("Can't add property: %s\n", fdt_strerror(ret));
+                       return ret;
+               }
+       }
+       return 0;
+err_size:
+       printf("Can't increase blob size: %s\n", fdt_strerror(ret));
+       return ret;
+}
+#endif