Hi, Am 05.11.2013 00:09, schrieb Hervé Poussineau: > 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.
This part we had discussed and no one objected to the approach, so OK. > However, add a specific hack for Open Hack'Ware, which provides only > a 512KB blob to be loaded at 0xfff00000, but expects valid code at > 0xfffffffc (specific Open Hack'Ware reset instruction pointer). Was this part explained before? I don't spot the equivalent in the deleted code. If this is a new workaround, I would rather like to put it in a separate patch for bisecting (can offer to do that myself then). What are the symptoms? I am testing all these patches with OHW. Regards, Andreas > > Signed-off-by: Hervé Poussineau <hpous...@reactos.org> > --- > hw/pci-host/prep.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ > hw/ppc/prep.c | 50 +++++++++++++------------------------------------- > 2 files changed, 64 insertions(+), 37 deletions(-) [...] > diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c > index 9f8538c..8a09e2b 100644 > --- a/hw/ppc/prep.c > +++ b/hw/ppc/prep.c [...] > @@ -510,41 +509,13 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) > 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); > - } > + /* Open Hack'Ware hack: bios size is 512K and is loaded at 0xfff00000. > + * However, reset address is 0xfffffffc. Mirror the bios from > + * 0xfff00000 to 0xfff80000. > + */ > + memory_region_init_alias(bios, NULL, "bios-alias", sysmem, 0xfff00000, > + 0x00080000); > + memory_region_add_subregion_overlap(sysmem, 0xfff80000, bios, 1); > > if (linux_boot) { > kernel_base = KERNEL_LOAD_ADDR; [snip]