]> Git Repo - qemu.git/commitdiff
S390: IPL: Support ELF firmware
authorAlexander Graf <[email protected]>
Mon, 22 Apr 2013 14:47:32 +0000 (16:47 +0200)
committerAlexander Graf <[email protected]>
Fri, 26 Apr 2013 18:18:23 +0000 (20:18 +0200)
Our firmware blob is always a raw file that we load at a fixed address today.
Support loading an ELF blob instead that we can map high up in memory.

This way we don't have to be so conscious about size constraints.

Signed-off-by: Alexander Graf <[email protected]>
hw/s390x/ipl.c

index c43dfcdf61e058b3834ac59929bc1ea278b82548..d1f7acd5fb6552bfcbdd9f32119ceff19f588e29 100644 (file)
@@ -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,
This page took 0.027912 seconds and 4 git commands to generate.