[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/6] mips_malta: correct reading MIPS revision a
From: |
Andreas Färber |
Subject: |
Re: [Qemu-devel] [PATCH 2/6] mips_malta: correct reading MIPS revision at 0x1fc00010 |
Date: |
Mon, 29 Jul 2013 06:33:29 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130620 Thunderbird/17.0.7 |
Am 14.06.2013 09:30, schrieb Leon Alrae:
> From: Paul Burton <address@hidden>
>
> Rather than modifying the BIOS code at its original location, copy it
> for the 0x1fc00000 region & modify the copy. This means the original
> ROM code is correctly readable at 0x1e000010 whilst the MIPS revision
> is readable at 0x1fc00010.
>
> Additionally the code previously operated on target memory which would
> later be overwritten by the BIOS image upon CPU reset if the -bios
> argument was used to specify the BIOS image. This led to the written
> MIPS revision being lost. Copying using rom_copy when -bios is used
> fixes this issue.
>
> Signed-off-by: Paul Burton <address@hidden>
> Signed-off-by: Leon Alrae <address@hidden>
> ---
> hw/mips/mips_malta.c | 25 +++++++++++++++++--------
> 1 files changed, 17 insertions(+), 8 deletions(-)
For some reason this commit breaks `make check`, please revert or fix.
Andreas
>
> diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
> index 4def898..9117ae4 100644
> --- a/hw/mips/mips_malta.c
> +++ b/hw/mips/mips_malta.c
> @@ -789,7 +789,7 @@ void mips_malta_init(QEMUMachineInitArgs *args)
> pflash_t *fl;
> MemoryRegion *system_memory = get_system_memory();
> MemoryRegion *ram = g_new(MemoryRegion, 1);
> - MemoryRegion *bios, *bios_alias = g_new(MemoryRegion, 1);
> + MemoryRegion *bios, *bios_copy = g_new(MemoryRegion, 1);
> target_long bios_size = FLASH_SIZE;
> int64_t kernel_entry;
> PCIBus *pci_bus;
> @@ -929,14 +929,23 @@ void mips_malta_init(QEMUMachineInitArgs *args)
> #endif
> }
>
> - /* Map the BIOS at a 2nd physical location, as on the real board. */
> - memory_region_init_alias(bios_alias, "bios.1fc", bios, 0, BIOS_SIZE);
> - memory_region_add_subregion(system_memory, RESET_ADDRESS, bios_alias);
> + /*
> + * Map the BIOS at a 2nd physical location, as on the real board.
> + * Copy it so that we can patch in the MIPS revision, which cannot be
> + * handled by an overlapping region as the resulting ROM code subpage
> + * regions are not executable.
> + */
> + memory_region_init_ram(bios_copy, "bios.1fc", BIOS_SIZE);
> + if (!rom_copy(memory_region_get_ram_ptr(bios_copy),
> + FLASH_ADDRESS, bios_size)) {
> + memcpy(memory_region_get_ram_ptr(bios_copy),
> + memory_region_get_ram_ptr(bios), bios_size);
> + }
> + memory_region_set_readonly(bios_copy, true);
> + memory_region_add_subregion(system_memory, RESET_ADDRESS, bios_copy);
>
> - /* Board ID = 0x420 (Malta Board with CoreLV)
> - XXX: theoretically 0x1e000010 should map to flash and 0x1fc00010
> should
> - map to the board ID. */
> - stl_p(memory_region_get_ram_ptr(bios) + 0x10, 0x00000420);
> + /* Board ID = 0x420 (Malta Board with CoreLV) */
> + stl_p(memory_region_get_ram_ptr(bios_copy) + 0x10, 0x00000420);
>
> /* Init internal devices */
> cpu_mips_irq_init_cpu(env);
>
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH 2/6] mips_malta: correct reading MIPS revision at 0x1fc00010,
Andreas Färber <=