From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57123) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VutxO-0007BC-Nu for qemu-devel@nongnu.org; Sun, 22 Dec 2013 20:05:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vutx9-0006uo-Jr for qemu-devel@nongnu.org; Sun, 22 Dec 2013 20:05:18 -0500 Received: from mout.web.de ([212.227.17.11]:62122) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vutx9-0006sG-9i for qemu-devel@nongnu.org; Sun, 22 Dec 2013 20:05:03 -0500 Received: from envy.site ([89.158.68.43]) by smtp.web.de (mrweb102) with ESMTPSA (Nemesis) id 0Lrb3x-1VVHZz0c9d-013N7y for ; Mon, 23 Dec 2013 02:05:02 +0100 Message-ID: <52B78C3D.4030703@web.de> Date: Mon, 23 Dec 2013 02:05:01 +0100 From: =?UTF-8?B?QW5kcmVhcyBGw6RyYmVy?= MIME-Version: 1.0 References: <1383606592-12783-1-git-send-email-hpoussin@reactos.org> <1383606592-12783-4-git-send-email-hpoussin@reactos.org> In-Reply-To: <1383606592-12783-4-git-send-email-hpoussin@reactos.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v3 03/10] raven: move BIOS loading from board code to PCI host List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?SGVydsOpIFBvdXNzaW5lYXU=?= , qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org 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 > --- > 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]