diff options
author | Alexander Graf <agraf@suse.de> | 2012-05-22 14:28:50 +0200 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2012-06-24 01:04:49 +0200 |
commit | d1b935659b77ff8e9d4cb84e3f75679f634401f3 (patch) | |
tree | ffb88a2e555ff9f8076ae80d2305ad38bce5cb78 /hw | |
parent | 7f47b41f3f36fd0618758580121ddeb0407069b7 (diff) |
PPC: e500: enable manual loading of dtb blob
We want to be able to override the automatically created device tree
by using the -dtb option. Implement this for the mpc8544ds machine.
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/ppce500_mpc8544ds.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c index f8a3d9abcf..fa10df226f 100644 --- a/hw/ppce500_mpc8544ds.c +++ b/hw/ppce500_mpc8544ds.c @@ -113,6 +113,27 @@ static int mpc8544_load_device_tree(CPUPPCState *env, 0x0, 0x10000 }; QemuOpts *machine_opts; const char *dumpdtb = NULL; + const char *dtb_file = NULL; + + machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); + if (machine_opts) { + dumpdtb = qemu_opt_get(machine_opts, "dumpdtb"); + dtb_file = qemu_opt_get(machine_opts, "dtb"); + } + + if (dtb_file) { + char *filename; + filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_file); + if (!filename) { + goto out; + } + + fdt = load_device_tree(filename, &fdt_size); + if (!fdt) { + goto out; + } + goto done; + } fdt = create_device_tree(&fdt_size); if (fdt == NULL) { @@ -302,10 +323,7 @@ static int mpc8544_load_device_tree(CPUPPCState *env, qemu_devtree_setprop_cell(fdt, pci, "#address-cells", 3); qemu_devtree_setprop_string(fdt, "/aliases", "pci0", pci); - machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); - if (machine_opts) { - dumpdtb = qemu_opt_get(machine_opts, "dumpdtb"); - } +done: if (dumpdtb) { /* Dump the dtb to a file and quit */ FILE *f = fopen(dumpdtb, "wb"); |