From 4c1410d59c6d02882b97ded8c3144bfbd039e0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Wed, 12 Mar 2014 18:43:01 +0100 Subject: [PATCH 1/2] prep: Update ppc_rom.bin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This increases file size from 512 KiB to 1 MiB. Signed-off-by: Andreas Färber --- pc-bios/ppc_rom.bin | Bin 524288 -> 1048576 bytes roms/openhackware | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/ppc_rom.bin b/pc-bios/ppc_rom.bin index d378d9a95e63fe843b7a6234fb45ddf6179198d3..e7f769328b33c67ab02426fc5f643cd11b5b101e 100644 GIT binary patch delta 20336 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 Date: Tue, 5 Nov 2013 00:09:45 +0100 Subject: [PATCH 2/2] raven: Move BIOS loading from board code to PCI host MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Raven datasheet explains where firmware lives in system memory, so do it there instead of in board code. Other boards using the same PCI host will not have to copy the firmware loading code. Signed-off-by: Hervé Poussineau [AF: Drop BIOS size workaround in favor of replacing our firmware blob] Signed-off-by: Andreas Färber --- hw/pci-host/prep.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ hw/ppc/prep.c | 46 ++++++----------------------------------- 2 files changed, 57 insertions(+), 40 deletions(-) diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c index 0c948e2c30..94fdffa777 100644 --- a/hw/pci-host/prep.c +++ b/hw/pci-host/prep.c @@ -28,7 +28,9 @@ #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" #include "hw/i386/pc.h" +#include "hw/loader.h" #include "exec/address-spaces.h" +#include "elf.h" #define TYPE_RAVEN_PCI_DEVICE "raven" #define TYPE_RAVEN_PCI_HOST_BRIDGE "raven-pcihost" @@ -38,6 +40,10 @@ typedef struct RavenPCIState { PCIDevice dev; + + uint32_t elf_machine; + char *bios_name; + MemoryRegion bios; } RavenPCIState; #define RAVEN_PCI_HOST_BRIDGE(obj) \ @@ -52,6 +58,8 @@ typedef struct PRePPCIState { RavenPCIState pci_dev; } PREPPCIState; +#define BIOS_SIZE (1024 * 1024) + static inline uint32_t PPC_PCIIO_config(hwaddr addr) { int i; @@ -169,10 +177,45 @@ static void raven_pcihost_initfn(Object *obj) static int raven_init(PCIDevice *d) { + RavenPCIState *s = RAVEN_PCI_DEVICE(d); + char *filename; + int bios_size = -1; + d->config[0x0C] = 0x08; // cache_line_size d->config[0x0D] = 0x10; // latency_timer d->config[0x34] = 0x00; // capabilities_pointer + memory_region_init_ram(&s->bios, OBJECT(s), "bios", BIOS_SIZE); + memory_region_set_readonly(&s->bios, true); + memory_region_add_subregion(get_system_memory(), (uint32_t)(-BIOS_SIZE), + &s->bios); + vmstate_register_ram_global(&s->bios); + if (s->bios_name) { + filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, s->bios_name); + if (filename) { + if (s->elf_machine != EM_NONE) { + bios_size = load_elf(filename, NULL, NULL, NULL, + NULL, NULL, 1, s->elf_machine, 0); + } + if (bios_size < 0) { + bios_size = get_image_size(filename); + if (bios_size > 0 && bios_size <= BIOS_SIZE) { + hwaddr bios_addr; + bios_size = (bios_size + 0xfff) & ~0xfff; + bios_addr = (uint32_t)(-BIOS_SIZE); + bios_size = load_image_targphys(filename, bios_addr, + bios_size); + } + } + } + if (bios_size < 0 || bios_size > BIOS_SIZE) { + hw_error("qemu: could not load bios image '%s'\n", s->bios_name); + } + if (filename) { + g_free(filename); + } + } + return 0; } @@ -212,12 +255,20 @@ static const TypeInfo raven_info = { .class_init = raven_class_init, }; +static Property raven_pcihost_properties[] = { + DEFINE_PROP_UINT32("elf-machine", PREPPCIState, pci_dev.elf_machine, + EM_NONE), + DEFINE_PROP_STRING("bios-name", PREPPCIState, pci_dev.bios_name), + DEFINE_PROP_END_OF_LIST() +}; + static void raven_pcihost_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); dc->realize = raven_pcihost_realizefn; + dc->props = raven_pcihost_properties; dc->fw_name = "pci"; } diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 9f8538cd20..81e13cb4ac 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -456,7 +456,6 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) MemoryRegion *sysmem = get_system_memory(); PowerPCCPU *cpu = NULL; CPUPPCState *env = NULL; - char *filename; nvram_t nvram; M48t59State *m48t59; MemoryRegion *PPC_io_memory = g_new(MemoryRegion, 1); @@ -464,9 +463,8 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) #if 0 MemoryRegion *xcsr = g_new(MemoryRegion, 1); #endif - int linux_boot, i, nb_nics1, bios_size; + int linux_boot, i, nb_nics1; MemoryRegion *ram = g_new(MemoryRegion, 1); - MemoryRegion *bios = g_new(MemoryRegion, 1); uint32_t kernel_base, initrd_base; long kernel_size, initrd_size; DeviceState *dev; @@ -509,43 +507,6 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) vmstate_register_ram_global(ram); memory_region_add_subregion(sysmem, 0, ram); - /* allocate and load BIOS */ - memory_region_init_ram(bios, NULL, "ppc_prep.bios", BIOS_SIZE); - memory_region_set_readonly(bios, true); - memory_region_add_subregion(sysmem, (uint32_t)(-BIOS_SIZE), bios); - vmstate_register_ram_global(bios); - if (bios_name == NULL) - bios_name = BIOS_FILENAME; - filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); - if (filename) { - bios_size = load_elf(filename, NULL, NULL, NULL, - NULL, NULL, 1, ELF_MACHINE, 0); - if (bios_size < 0) { - bios_size = get_image_size(filename); - if (bios_size > 0 && bios_size <= BIOS_SIZE) { - hwaddr bios_addr; - bios_size = (bios_size + 0xfff) & ~0xfff; - bios_addr = (uint32_t)(-bios_size); - bios_size = load_image_targphys(filename, bios_addr, bios_size); - } - if (bios_size > BIOS_SIZE) { - fprintf(stderr, "qemu: PReP bios '%s' is too large (0x%x)\n", - bios_name, bios_size); - exit(1); - } - } - } else { - bios_size = -1; - } - if (bios_size < 0 && !qtest_enabled()) { - fprintf(stderr, "qemu: could not load PPC PReP bios '%s'\n", - bios_name); - exit(1); - } - if (filename) { - g_free(filename); - } - if (linux_boot) { kernel_base = KERNEL_LOAD_ADDR; /* now we can load the kernel */ @@ -593,6 +554,11 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) } dev = qdev_create(NULL, "raven-pcihost"); + if (bios_name == NULL) { + bios_name = BIOS_FILENAME; + } + qdev_prop_set_string(dev, "bios-name", bios_name); + qdev_prop_set_uint32(dev, "elf-machine", ELF_MACHINE); pcihost = PCI_HOST_BRIDGE(dev); object_property_add_child(qdev_get_machine(), "raven", OBJECT(dev), NULL); qdev_init_nofail(dev);