Skip to content

Commit

Permalink
mac_newworld: Allow loading binary ROM image
Browse files Browse the repository at this point in the history
Fall back to load binary ROM image if loading ELF fails. This also
moves PROM_BASE and PROM_SIZE defines to board as these are matching
the ROM size and address on this board and removes the now unused
PROM_ADDR and BIOS_SIZE defines from common mac.h.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <4d58ffe7645a0c746c8fed6aa8775c0867b624e0.1602805637.git.balaton@eik.bme.hu>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  • Loading branch information
zbalaton authored and mcayland committed Oct 19, 2020
1 parent 464c73e commit 31a6f35
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
2 changes: 0 additions & 2 deletions hw/ppc/mac.h
Expand Up @@ -39,10 +39,8 @@
/* SMP is not enabled, for now */
#define MAX_CPUS 1

#define BIOS_SIZE (1 * MiB)
#define NVRAM_SIZE 0x2000
#define PROM_FILENAME "openbios-ppc"
#define PROM_ADDR 0xfff00000

#define KERNEL_LOAD_ADDR 0x01000000
#define KERNEL_GAP 0x00100000
Expand Down
22 changes: 14 additions & 8 deletions hw/ppc/mac_newworld.c
Expand Up @@ -82,6 +82,8 @@

#define NDRV_VGA_FILENAME "qemu_vga.ndrv"

#define PROM_BASE 0xfff00000
#define PROM_SIZE (1 * MiB)

static void fw_cfg_boot_set(void *opaque, const char *boot_device,
Error **errp)
Expand All @@ -100,7 +102,7 @@ static void ppc_core99_reset(void *opaque)

cpu_reset(CPU(cpu));
/* 970 CPUs want to get their initial IP as part of their boot protocol */
cpu->env.nip = PROM_ADDR + 0x100;
cpu->env.nip = PROM_BASE + 0x100;
}

/* PowerPC Mac99 hardware initialisation */
Expand Down Expand Up @@ -154,25 +156,29 @@ static void ppc_core99_init(MachineState *machine)
/* allocate RAM */
memory_region_add_subregion(get_system_memory(), 0, machine->ram);

/* allocate and load BIOS */
memory_region_init_rom(bios, NULL, "ppc_core99.bios", BIOS_SIZE,
/* allocate and load firmware ROM */
memory_region_init_rom(bios, NULL, "ppc_core99.bios", PROM_SIZE,
&error_fatal);
memory_region_add_subregion(get_system_memory(), PROM_BASE, bios);

if (bios_name == NULL)
if (!bios_name) {
bios_name = PROM_FILENAME;
}
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
memory_region_add_subregion(get_system_memory(), PROM_ADDR, bios);

/* Load OpenBIOS (ELF) */
if (filename) {
/* Load OpenBIOS (ELF) */
bios_size = load_elf(filename, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, 1, PPC_ELF_MACHINE, 0, 0);

if (bios_size <= 0) {
/* or load binary ROM image */
bios_size = load_image_targphys(filename, PROM_BASE, PROM_SIZE);
}
g_free(filename);
} else {
bios_size = -1;
}
if (bios_size < 0 || bios_size > BIOS_SIZE) {
if (bios_size < 0 || bios_size > PROM_SIZE) {
error_report("could not load PowerPC bios '%s'", bios_name);
exit(1);
}
Expand Down

0 comments on commit 31a6f35

Please sign in to comment.