From: Liu Yu <yu.liu@freescale.com>
To: hollis@penguinppc.org
Cc: Liu Yu <yu.liu@freescale.com>, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 1/2] powerpc/booke: move fdt loading to rom infrastructure
Date: Tue, 2 Feb 2010 16:49:02 +0800 [thread overview]
Message-ID: <1265100543-15528-1-git-send-email-yu.liu@freescale.com> (raw)
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(-)
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
next reply other threads:[~2010-02-02 8:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-02 8:49 Liu Yu [this message]
2010-02-02 8:49 ` [Qemu-devel] [PATCH 2/2] powerpc/e500: adjust fdt and ramdisk loading addr Liu Yu
2010-02-27 15:33 ` [Qemu-devel] [PATCH 1/2] powerpc/booke: move fdt loading to rom infrastructure Aurelien Jarno
2010-02-27 18:49 ` Aurelien Jarno
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1265100543-15528-1-git-send-email-yu.liu@freescale.com \
--to=yu.liu@freescale.com \
--cc=hollis@penguinppc.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).