mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
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:
parent
379b5c7c3c
commit
da71ebd145
@ -59,23 +59,16 @@ static int microblaze_load_dtb(target_phys_addr_t addr,
|
|||||||
const char *kernel_cmdline,
|
const char *kernel_cmdline,
|
||||||
const char *dtb_filename)
|
const char *dtb_filename)
|
||||||
{
|
{
|
||||||
char *path;
|
|
||||||
int fdt_size;
|
int fdt_size;
|
||||||
#ifdef CONFIG_FDT
|
#ifdef CONFIG_FDT
|
||||||
void *fdt;
|
void *fdt = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
/* Try the local "mb.dtb" override. */
|
if (dtb_filename) {
|
||||||
fdt = load_device_tree("mb.dtb", &fdt_size);
|
fdt = load_device_tree(dtb_filename, &fdt_size);
|
||||||
|
}
|
||||||
if (!fdt) {
|
if (!fdt) {
|
||||||
path = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename);
|
return 0;
|
||||||
if (path) {
|
|
||||||
fdt = load_device_tree(path, &fdt_size);
|
|
||||||
g_free(path);
|
|
||||||
}
|
|
||||||
if (!fdt) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kernel_cmdline) {
|
if (kernel_cmdline) {
|
||||||
@ -90,15 +83,9 @@ static int microblaze_load_dtb(target_phys_addr_t addr,
|
|||||||
#else
|
#else
|
||||||
/* We lack libfdt so we cannot manipulate the fdt. Just pass on the blob
|
/* We lack libfdt so we cannot manipulate the fdt. Just pass on the blob
|
||||||
to the kernel. */
|
to the kernel. */
|
||||||
fdt_size = load_image_targphys("mb.dtb", addr, 0x10000);
|
if (dtb_filename) {
|
||||||
if (fdt_size < 0) {
|
fdt_size = load_image_targphys(dtb_filename, addr, 0x10000);
|
||||||
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 (kernel_cmdline) {
|
if (kernel_cmdline) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Warning: missing libfdt, cannot pass cmdline to kernel!\n");
|
"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);
|
machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0);
|
||||||
if (machine_opts) {
|
if (machine_opts) {
|
||||||
|
const char *dtb_arg;
|
||||||
kernel_filename = qemu_opt_get(machine_opts, "kernel");
|
kernel_filename = qemu_opt_get(machine_opts, "kernel");
|
||||||
kernel_cmdline = qemu_opt_get(machine_opts, "append");
|
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;
|
boot_info.machine_cpu_reset = machine_cpu_reset;
|
||||||
|
Loading…
Reference in New Issue
Block a user