microblaze_boot: enabled -dtb argument

Use the -dtb argument for passing is a custom dtb rather than the old
hardcoded "mb.dtb"

Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwaite@petalogix.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
This commit is contained in:
Peter A. G. Crosthwaite 2012-03-04 21:03:55 +10:00 committed by Edgar E. Iglesias
parent 379b5c7c3c
commit da71ebd145
1 changed files with 14 additions and 20 deletions

View File

@ -59,23 +59,16 @@ static int microblaze_load_dtb(target_phys_addr_t addr,
const char *kernel_cmdline,
const char *dtb_filename)
{
char *path;
int fdt_size;
#ifdef CONFIG_FDT
void *fdt;
void *fdt = NULL;
int r;
/* Try the local "mb.dtb" override. */
fdt = load_device_tree("mb.dtb", &fdt_size);
if (dtb_filename) {
fdt = load_device_tree(dtb_filename, &fdt_size);
}
if (!fdt) {
path = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename);
if (path) {
fdt = load_device_tree(path, &fdt_size);
g_free(path);
}
if (!fdt) {
return 0;
}
return 0;
}
if (kernel_cmdline) {
@ -90,15 +83,9 @@ static int microblaze_load_dtb(target_phys_addr_t addr,
#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) {
path = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE);
if (path) {
fdt_size = load_image_targphys(path, addr, 0x10000);
g_free(path);
}
if (dtb_filename) {
fdt_size = load_image_targphys(dtb_filename, addr, 0x10000);
}
if (kernel_cmdline) {
fprintf(stderr,
"Warning: missing libfdt, cannot pass cmdline to kernel!\n");
@ -123,8 +110,15 @@ void microblaze_load_kernel(CPUState *env, target_phys_addr_t ddr_base,
machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0);
if (machine_opts) {
const char *dtb_arg;
kernel_filename = qemu_opt_get(machine_opts, "kernel");
kernel_cmdline = qemu_opt_get(machine_opts, "append");
dtb_arg = qemu_opt_get(machine_opts, "dtb");
if (dtb_arg) { /* Preference a -dtb argument */
dtb_filename = dtb_arg;
} else { /* default to pcbios dtb as passed by machine_init */
dtb_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename);
}
}
boot_info.machine_cpu_reset = machine_cpu_reset;