Message ID | 1265100543-15528-1-git-send-email-yu.liu@freescale.com |
---|---|
State | New |
Headers | show |
On Tue, Feb 02, 2010 at 04:49:02PM +0800, Liu Yu wrote: > It's convinent to use rom to checking overlap, to reset etc. > And uImage and ramdisk loading has already moved to it. > > Also, after we add fdt to rom, free it. This does not build if CONFIG_FDT is not set: | CC ppc-softmmu/ppc440_bamboo.o | /home/aurel32/git/qemu/hw/ppc440_bamboo.c: In function 'bamboo_load_device_tree': | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:86: error: 'ret' undeclared (first use in this function) | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:86: error: (Each undeclared identifier is reported only once | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:86: error: for each function it appears in.) | cc1: warnings being treated as errors | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:36: error: unused variable 'fdt' | make[1]: *** [ppc440_bamboo.o] Error 1 | make: *** [subdir-ppc-softmmu] Error 2 > Signed-off-by: Liu Yu <yu.liu@freescale.com> > --- > hw/ppc440_bamboo.c | 15 ++++++++------- > hw/ppce500_mpc8544ds.c | 17 ++++++++++------- > 2 files changed, 18 insertions(+), 14 deletions(-) > > diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c > index 1ab9872..9d95417 100644 > --- a/hw/ppc440_bamboo.c > +++ b/hw/ppc440_bamboo.c > @@ -27,7 +27,7 @@ > > #define BINARY_DEVICE_TREE_FILE "bamboo.dtb" > > -static void *bamboo_load_device_tree(target_phys_addr_t addr, > +static int bamboo_load_device_tree(target_phys_addr_t addr, > uint32_t ramsize, > target_phys_addr_t initrd_base, > target_phys_addr_t initrd_size, > @@ -42,11 +42,13 @@ static void *bamboo_load_device_tree(target_phys_addr_t addr, > > filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE); > if (!filename) { > + ret = -1; > goto out; > } > fdt = load_device_tree(filename, &fdt_size); > qemu_free(filename); > if (fdt == NULL) { > + ret = -1; > goto out; > } > > @@ -75,12 +77,13 @@ static void *bamboo_load_device_tree(target_phys_addr_t addr, > if (kvm_enabled()) > kvmppc_fdt_update(fdt); > > - cpu_physical_memory_write (addr, (void *)fdt, fdt_size); > + ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); > + qemu_free(fdt); > > out: > #endif > > - return fdt; > + return ret; > } > > static void bamboo_init(ram_addr_t ram_size, > @@ -101,7 +104,6 @@ static void bamboo_init(ram_addr_t ram_size, > target_ulong initrd_base = 0; > target_long initrd_size = 0; > target_ulong dt_base = 0; > - void *fdt; > int i; > > /* Setup CPU. */ > @@ -153,9 +155,8 @@ static void bamboo_init(ram_addr_t ram_size, > else > dt_base = kernel_size + loadaddr; > > - fdt = bamboo_load_device_tree(dt_base, ram_size, > - initrd_base, initrd_size, kernel_cmdline); > - if (fdt == NULL) { > + if (bamboo_load_device_tree(dt_base, ram_size, > + initrd_base, initrd_size, kernel_cmdline) < 0) { > fprintf(stderr, "couldn't load device tree\n"); > exit(1); > } > diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c > index ea30816..9a5654b 100644 > --- a/hw/ppce500_mpc8544ds.c > +++ b/hw/ppce500_mpc8544ds.c > @@ -72,7 +72,7 @@ out: > } > #endif > > -static void *mpc8544_load_device_tree(target_phys_addr_t addr, > +static int mpc8544_load_device_tree(target_phys_addr_t addr, > uint32_t ramsize, > target_phys_addr_t initrd_base, > target_phys_addr_t initrd_size, > @@ -87,11 +87,13 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, > > filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE); > if (!filename) { > + ret = -1; > goto out; > } > fdt = load_device_tree(filename, &fdt_size); > qemu_free(filename); > if (fdt == NULL) { > + ret = -1; > goto out; > } > > @@ -123,6 +125,7 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, > > if ((dp = opendir("/proc/device-tree/cpus/")) == NULL) { > printf("Can't open directory /proc/device-tree/cpus/\n"); > + ret = -1; > goto out; > } > > @@ -136,6 +139,7 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, > closedir(dp); > if (buf[0] == '\0') { > printf("Unknow host!\n"); > + ret = -1; > goto out; > } > > @@ -143,12 +147,13 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, > mpc8544_copy_soc_cell(fdt, buf, "timebase-frequency"); > } > > - cpu_physical_memory_write (addr, (void *)fdt, fdt_size); > + ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); > + qemu_free(fdt); > > out: > #endif > > - return fdt; > + return ret; > } > > static void mpc8544ds_init(ram_addr_t ram_size, > @@ -168,7 +173,6 @@ static void mpc8544ds_init(ram_addr_t ram_size, > target_ulong dt_base=DTB_LOAD_BASE; > target_ulong initrd_base=INITRD_LOAD_BASE; > target_long initrd_size=0; > - void *fdt; > int i=0; > unsigned int pci_irq_nrs[4] = {1, 2, 3, 4}; > qemu_irq *irqs, *mpic, *pci_irqs; > @@ -254,9 +258,8 @@ static void mpc8544ds_init(ram_addr_t ram_size, > > /* If we're loading a kernel directly, we must load the device tree too. */ > if (kernel_filename) { > - fdt = mpc8544_load_device_tree(dt_base, ram_size, > - initrd_base, initrd_size, kernel_cmdline); > - if (fdt == NULL) { > + if (mpc8544_load_device_tree(dt_base, ram_size, > + initrd_base, initrd_size, kernel_cmdline) < 0) { > fprintf(stderr, "couldn't load device tree\n"); > exit(1); > } > -- > 1.6.4 > > > >
On Sat, Feb 27, 2010 at 04:33:02PM +0100, Aurelien Jarno wrote: > On Tue, Feb 02, 2010 at 04:49:02PM +0800, Liu Yu wrote: > > It's convinent to use rom to checking overlap, to reset etc. > > And uImage and ramdisk loading has already moved to it. > > > > Also, after we add fdt to rom, free it. > > This does not build if CONFIG_FDT is not set: > > | CC ppc-softmmu/ppc440_bamboo.o > | /home/aurel32/git/qemu/hw/ppc440_bamboo.c: In function 'bamboo_load_device_tree': > | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:86: error: 'ret' undeclared (first use in this function) > | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:86: error: (Each undeclared identifier is reported only once > | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:86: error: for each function it appears in.) > | cc1: warnings being treated as errors > | /home/aurel32/git/qemu/hw/ppc440_bamboo.c:36: error: unused variable 'fdt' > | make[1]: *** [ppc440_bamboo.o] Error 1 > | make: *** [subdir-ppc-softmmu] Error 2 > As I have pushed the patch by mistake to the git tree, and it is mostly ok, I have committed a patch to fix the above issue.
diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c index 1ab9872..9d95417 100644 --- a/hw/ppc440_bamboo.c +++ b/hw/ppc440_bamboo.c @@ -27,7 +27,7 @@ #define BINARY_DEVICE_TREE_FILE "bamboo.dtb" -static void *bamboo_load_device_tree(target_phys_addr_t addr, +static int bamboo_load_device_tree(target_phys_addr_t addr, uint32_t ramsize, target_phys_addr_t initrd_base, target_phys_addr_t initrd_size, @@ -42,11 +42,13 @@ static void *bamboo_load_device_tree(target_phys_addr_t addr, filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE); if (!filename) { + ret = -1; goto out; } fdt = load_device_tree(filename, &fdt_size); qemu_free(filename); if (fdt == NULL) { + ret = -1; goto out; } @@ -75,12 +77,13 @@ static void *bamboo_load_device_tree(target_phys_addr_t addr, if (kvm_enabled()) kvmppc_fdt_update(fdt); - cpu_physical_memory_write (addr, (void *)fdt, fdt_size); + ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); + qemu_free(fdt); out: #endif - return fdt; + return ret; } static void bamboo_init(ram_addr_t ram_size, @@ -101,7 +104,6 @@ static void bamboo_init(ram_addr_t ram_size, target_ulong initrd_base = 0; target_long initrd_size = 0; target_ulong dt_base = 0; - void *fdt; int i; /* Setup CPU. */ @@ -153,9 +155,8 @@ static void bamboo_init(ram_addr_t ram_size, else dt_base = kernel_size + loadaddr; - fdt = bamboo_load_device_tree(dt_base, ram_size, - initrd_base, initrd_size, kernel_cmdline); - if (fdt == NULL) { + if (bamboo_load_device_tree(dt_base, ram_size, + initrd_base, initrd_size, kernel_cmdline) < 0) { fprintf(stderr, "couldn't load device tree\n"); exit(1); } diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c index ea30816..9a5654b 100644 --- a/hw/ppce500_mpc8544ds.c +++ b/hw/ppce500_mpc8544ds.c @@ -72,7 +72,7 @@ out: } #endif -static void *mpc8544_load_device_tree(target_phys_addr_t addr, +static int mpc8544_load_device_tree(target_phys_addr_t addr, uint32_t ramsize, target_phys_addr_t initrd_base, target_phys_addr_t initrd_size, @@ -87,11 +87,13 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE); if (!filename) { + ret = -1; goto out; } fdt = load_device_tree(filename, &fdt_size); qemu_free(filename); if (fdt == NULL) { + ret = -1; goto out; } @@ -123,6 +125,7 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, if ((dp = opendir("/proc/device-tree/cpus/")) == NULL) { printf("Can't open directory /proc/device-tree/cpus/\n"); + ret = -1; goto out; } @@ -136,6 +139,7 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, closedir(dp); if (buf[0] == '\0') { printf("Unknow host!\n"); + ret = -1; goto out; } @@ -143,12 +147,13 @@ static void *mpc8544_load_device_tree(target_phys_addr_t addr, mpc8544_copy_soc_cell(fdt, buf, "timebase-frequency"); } - cpu_physical_memory_write (addr, (void *)fdt, fdt_size); + ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); + qemu_free(fdt); out: #endif - return fdt; + return ret; } static void mpc8544ds_init(ram_addr_t ram_size, @@ -168,7 +173,6 @@ static void mpc8544ds_init(ram_addr_t ram_size, target_ulong dt_base=DTB_LOAD_BASE; target_ulong initrd_base=INITRD_LOAD_BASE; target_long initrd_size=0; - void *fdt; int i=0; unsigned int pci_irq_nrs[4] = {1, 2, 3, 4}; qemu_irq *irqs, *mpic, *pci_irqs; @@ -254,9 +258,8 @@ static void mpc8544ds_init(ram_addr_t ram_size, /* If we're loading a kernel directly, we must load the device tree too. */ if (kernel_filename) { - fdt = mpc8544_load_device_tree(dt_base, ram_size, - initrd_base, initrd_size, kernel_cmdline); - if (fdt == NULL) { + if (mpc8544_load_device_tree(dt_base, ram_size, + initrd_base, initrd_size, kernel_cmdline) < 0) { fprintf(stderr, "couldn't load device tree\n"); exit(1); }
It's convinent to use rom to checking overlap, to reset etc. And uImage and ramdisk loading has already moved to it. Also, after we add fdt to rom, free it. Signed-off-by: Liu Yu <yu.liu@freescale.com> --- hw/ppc440_bamboo.c | 15 ++++++++------- hw/ppce500_mpc8544ds.c | 17 ++++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-)