Jan Kiszka <jan.kis...@siemens.com> writes: > On 2012-10-08 20:52, Anthony Liguori wrote: >> Jan Kiszka <jan.kis...@siemens.com> writes: >> >>> On 2012-09-11 17:53, Jan Kiszka wrote: >>>> Our one and only BIOS depends on a writable shadowed BIOS in the ISA >>>> range. As we have no interface to control the write property, make that >>>> region writable by default. >>>> >>>> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> >>>> --- >>>> >>>> This unbreaks isapc for TCG, and keep it working for KVM once it starts >>>> supporting read-only memslots. >>>> >>>> hw/pc_sysfw.c | 13 +++++++++---- >>>> 1 files changed, 9 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/hw/pc_sysfw.c b/hw/pc_sysfw.c >>>> index b45f0ac..027d98a 100644 >>>> --- a/hw/pc_sysfw.c >>>> +++ b/hw/pc_sysfw.c >>>> @@ -136,6 +136,7 @@ static void old_pc_system_rom_init(MemoryRegion >>>> *rom_memory) >>>> { >>>> char *filename; >>>> MemoryRegion *bios, *isa_bios; >>>> + void *isa_bios_ptr; >>>> int bios_size, isa_bios_size; >>>> int ret; >>>> >>>> @@ -167,19 +168,23 @@ static void old_pc_system_rom_init(MemoryRegion >>>> *rom_memory) >>>> g_free(filename); >>>> } >>>> >>>> - /* map the last 128KB of the BIOS in ISA space */ >>>> + /* Shadow the last 128KB of the BIOS in ISA space as RAM - >>>> + * Seabios depends on this */ >>>> isa_bios_size = bios_size; >>>> if (isa_bios_size > (128 * 1024)) { >>>> isa_bios_size = 128 * 1024; >>>> } >>>> isa_bios = g_malloc(sizeof(*isa_bios)); >>>> - memory_region_init_alias(isa_bios, "isa-bios", bios, >>>> - bios_size - isa_bios_size, isa_bios_size); >>>> + memory_region_init_ram(isa_bios, "isa-bios", isa_bios_size); >>>> + vmstate_register_ram_global(isa_bios); >>>> memory_region_add_subregion_overlap(rom_memory, >>>> 0x100000 - isa_bios_size, >>>> isa_bios, >>>> 1); >>>> - memory_region_set_readonly(isa_bios, true); >>>> + >>>> + /* copy ISA rom image from top of the ROM */ >>>> + isa_bios_ptr = memory_region_get_ram_ptr(isa_bios); >>>> + rom_copy(isa_bios_ptr, (uint32_t)(-isa_bios_size), isa_bios_size); >>>> >>>> /* map all the bios at the top of memory */ >>>> memory_region_add_subregion(rom_memory, >>>> >>> >>> Ping. Or already queued? >> >> I've got it queued now. Thanks. > > I'm withdrawing it: This breaks Windows 95 booting. For unknown reasons, > this nice OS decided to overwrite the F-segment during boot. That is > fine as long as it is properly protected. But it breaks under current > KVM and with the patch above for the isapc. So we need a firmware > interface to enable/disable write protection for this segment in isapc > mode, specifically as that machine targets these old OSes.
Ah, if it wasn't for a build break caused by one of the pull requests, I would have pushed last night. Thanks for the heads up, I'll remove it from my queue. Is fw_cfg the right interface? I presume this is i440fx specific? How does q35 handle this? Presumably there's a second window for the BIOS mapping. There's got to be some way to do shadowing of it I would think. Regards, Anthony Liguori > > Jan > > -- > Siemens AG, Corporate Technology, CT RTC ITP SDP-DE > Corporate Competence Center Embedded Linux