microblaze: Conditionalize FDT features.
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>
Wed, 27 May 2009 08:49:12 +0000 (10:49 +0200)
committerEdgar E. Iglesias <edgar.iglesias@gmail.com>
Wed, 27 May 2009 08:49:12 +0000 (10:49 +0200)
If libfdt is not available, disable the fdt manipulation features.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>

hw/petalogix_s3adsp1800_mmu.c

index b317515..80097df 100644 (file)
@@ -52,12 +52,15 @@ static int petalogix_load_device_tree(target_phys_addr_t addr,
                                       target_phys_addr_t initrd_size,
                                       const char *kernel_cmdline)
 {
+#ifdef HAVE_FDT
     void *fdt;
     char *path = NULL;
-    int fdt_size;
     int pathlen;
     int r;
+#endif
+    int fdt_size;
 
+#ifdef HAVE_FDT
     /* Try the local "mb.dtb" override.  */
     fdt = load_device_tree("mb.dtb", &fdt_size);
     if (!fdt) {
@@ -74,8 +77,20 @@ static int petalogix_load_device_tree(target_phys_addr_t addr,
     r = qemu_devtree_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdline);
     if (r < 0)
         fprintf(stderr, "couldn't set /chosen/bootargs\n");
-    printf("write fdt to addr=%x fdtsize=%d\n", addr, fdt_size);
     cpu_physical_memory_write (addr, (void *)fdt, fdt_size);
+#else
+    /* We lack libfdt so we cannot manipulate the fdt. Just pass on the blob
+       to the kernel.  */
+    fdt_size = load_image_targphys("mb.dtb", addr, 0x10000);
+    if (fdt_size < 0) {
+        fdt_size = load_image_targphys(BINARY_DEVICE_TREE_FILE, addr, 0x10000);
+    }
+
+    if (kernel_cmdline) {
+        fprintf(stderr,
+                "Warning: missing libfdt, cannot pass cmdline to kernel!\n");
+    }
+#endif
     return fdt_size;
 }