qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 03/10] raven: move BIOS loading from board co


From: Andreas Färber
Subject: Re: [Qemu-devel] [PATCH v3 03/10] raven: move BIOS loading from board code to PCI host
Date: Mon, 23 Dec 2013 02:05:01 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0

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 <address@hidden>
> ---
>  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]




reply via email to

[Prev in Thread] Current Thread [Next in Thread]