diff options
Diffstat (limited to 'hw/s390x')
-rw-r--r-- | hw/s390x/ipl.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index c43dfcdf61..d1f7acd5fb 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -82,17 +82,21 @@ static int s390_ipl_init(SysBusDevice *dev) } bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); - bios_size = load_image_targphys(bios_filename, ZIPL_IMAGE_START, 4096); - ipl->start_addr = ZIPL_IMAGE_START; + bios_size = load_elf(bios_filename, NULL, NULL, &ipl->start_addr, NULL, + NULL, 1, ELF_MACHINE, 0); + if (bios_size == -1UL) { + bios_size = load_image_targphys(bios_filename, ZIPL_IMAGE_START, + 4096); + ipl->start_addr = ZIPL_IMAGE_START; + if (bios_size > 4096) { + hw_error("stage1 bootloader is > 4k\n"); + } + } g_free(bios_filename); if ((long)bios_size < 0) { hw_error("could not load bootloader '%s'\n", bios_name); } - - if (bios_size > 4096) { - hw_error("stage1 bootloader is > 4k\n"); - } return 0; } else { kernel_size = load_elf(ipl->kernel, NULL, NULL, NULL, NULL, |