From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NcEbN-00078X-JK for qemu-devel@nongnu.org; Tue, 02 Feb 2010 03:59:17 -0500 Received: from [199.232.76.173] (port=34771 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NcEbM-00077O-Aj for qemu-devel@nongnu.org; Tue, 02 Feb 2010 03:59:16 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NcEbF-00011y-GG for qemu-devel@nongnu.org; Tue, 02 Feb 2010 03:59:16 -0500 Received: from az33egw02.freescale.net ([192.88.158.103]:61806) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NcEbC-00010B-T4 for qemu-devel@nongnu.org; Tue, 02 Feb 2010 03:59:07 -0500 Received: from de01smr01.freescale.net (de01smr01.freescale.net [10.208.0.31]) by az33egw02.freescale.net (8.14.3/az33egw02) with ESMTP id o128wnTf009233 for ; Tue, 2 Feb 2010 01:58:59 -0700 (MST) Received: from zch01exm26.fsl.freescale.net (zch01exm26.ap.freescale.net [10.192.129.221]) by de01smr01.freescale.net (8.13.1/8.13.0) with ESMTP id o1295PiC010317 for ; Tue, 2 Feb 2010 03:05:25 -0600 (CST) From: Liu Yu Date: Tue, 2 Feb 2010 16:49:02 +0800 Message-Id: <1265100543-15528-1-git-send-email-yu.liu@freescale.com> Subject: [Qemu-devel] [PATCH 1/2] powerpc/booke: move fdt loading to rom infrastructure List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: hollis@penguinppc.org Cc: Liu Yu , qemu-devel@nongnu.org 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 --- 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