]> git.sur5r.net Git - u-boot/blobdiff - common/fdt_support.c
serial_mxc: Fix setup of UARTx_UFCR register
[u-boot] / common / fdt_support.c
index 9e501484625d8583cd1d122e8e6c83f9c6948ac5..a7ff2dfb81f8ea3cbe54298d9fe758a246c31e55 100644 (file)
@@ -158,25 +158,30 @@ static int fdt_fixup_stdout(void *fdt, int chosenoff)
        aliasoff = fdt_path_offset(fdt, "/aliases");
        if (aliasoff < 0) {
                err = aliasoff;
-               goto error;
+               goto noalias;
        }
 
        path = fdt_getprop(fdt, aliasoff, sername, &len);
        if (!path) {
                err = len;
-               goto error;
+               goto noalias;
        }
 
        /* fdt_setprop may break "path" so we copy it to tmp buffer */
        memcpy(tmp, path, len);
 
        err = fdt_setprop(fdt, chosenoff, "linux,stdout-path", tmp, len);
-error:
        if (err < 0)
                printf("WARNING: could not set linux,stdout-path %s.\n",
                       fdt_strerror(err));
 
        return err;
+
+noalias:
+       printf("WARNING: %s: could not read %s alias: %s\n",
+              __func__, sername, fdt_strerror(err));
+
+       return 0;
 }
 #else
 static int fdt_fixup_stdout(void *fdt, int chosenoff)
@@ -194,6 +199,31 @@ static inline int fdt_setprop_uxx(void *fdt, int nodeoffset, const char *name,
                return fdt_setprop_u32(fdt, nodeoffset, name, (uint32_t)val);
 }
 
+int fdt_root(void *fdt)
+{
+       char *serial;
+       int err;
+
+       err = fdt_check_header(fdt);
+       if (err < 0) {
+               printf("fdt_root: %s\n", fdt_strerror(err));
+               return err;
+       }
+
+       serial = getenv("serial#");
+       if (serial) {
+               err = fdt_setprop(fdt, 0, "serial-number", serial,
+                                 strlen(serial) + 1);
+
+               if (err < 0) {
+                       printf("WARNING: could not set serial-number %s.\n",
+                              fdt_strerror(err));
+                       return err;
+               }
+       }
+
+       return 0;
+}
 
 int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
 {
@@ -429,6 +459,9 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks)
                return err;
        }
 
+       if (!banks)
+               return 0;
+
        len = fdt_pack_reg(blob, tmp, start, size, banks);
 
        err = fdt_setprop(blob, nodeoffset, "reg", tmp, len);