Patchwork [v2,0.12] Map BIOS f-segment as RAM, not as ROM

login
register
mail settings
Submitter Alexander Graf
Date Dec. 4, 2009, 10:33 a.m.
Message ID <1259922793-20433-1-git-send-email-agraf@suse.de>
Download mbox | patch
Permalink /patch/40320/
State New
Headers show

Comments

Alexander Graf - Dec. 4, 2009, 10:33 a.m.
SeaBIOS needs to write to the f-segment. So it needs to have some way to set
that from read-only to read-write, write in it and when it's done set it to
read-only again.

On PCI we have a mechanism for that. The ISA machine does not though. To stay
regression free and happily enable users to continue using the -M isapc machine
let's just map it as RAM. The BIOS on PCI will set it to r/o later either way.

Signed-off-by: Alexander Graf <agraf@suse.de>

---

v1 -> v2:

  - always map r/w
---
 hw/pc.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Anthony Liguori - Dec. 4, 2009, 1:48 p.m.
Alexander Graf wrote:
> SeaBIOS needs to write to the f-segment. So it needs to have some way to set
> that from read-only to read-write, write in it and when it's done set it to
> read-only again.
>
> On PCI we have a mechanism for that. The ISA machine does not though. To stay
> regression free and happily enable users to continue using the -M isapc machine
> let's just map it as RAM. The BIOS on PCI will set it to r/o later either way.
>
> Signed-off-by: Alexander Graf <agraf@suse.de>
>   

Thanks Alex.  Figuring out what to do here has been on my todo and this 
seems like a reasonable solution.

Regards,

Anthony Liguori
Gleb Natapov - Dec. 4, 2009, 2:10 p.m.
On Fri, Dec 04, 2009 at 11:33:13AM +0100, Alexander Graf wrote:
> SeaBIOS needs to write to the f-segment. So it needs to have some way to set
> that from read-only to read-write, write in it and when it's done set it to
> read-only again.
> 
> On PCI we have a mechanism for that. The ISA machine does not though. To stay
> regression free and happily enable users to continue using the -M isapc machine
> let's just map it as RAM. The BIOS on PCI will set it to r/o later either way.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> 
Looks fine to me. Guest will be able to overwrite BIOS, but I don't
think we should care about this too much. On KVM all ROM slots are
writable anyway.

> ---
> 
> v1 -> v2:
> 
>   - always map r/w
> ---
>  hw/pc.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/pc.c b/hw/pc.c
> index 8c1b7ea..b5dabdd 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -1075,7 +1075,7 @@ static void pc_init1(ram_addr_t ram_size,
>          isa_bios_size = 128 * 1024;
>      cpu_register_physical_memory(0x100000 - isa_bios_size,
>                                   isa_bios_size,
> -                                 (bios_offset + bios_size - isa_bios_size) | IO_MEM_ROM);
> +                                 (bios_offset + bios_size - isa_bios_size));
>  
>  
>  
> -- 
> 1.6.0.2

--
			Gleb.
Kevin O'Connor - Dec. 5, 2009, 4:31 p.m.
On Fri, Dec 04, 2009 at 11:33:13AM +0100, Alexander Graf wrote:
> SeaBIOS needs to write to the f-segment. So it needs to have some way to set
> that from read-only to read-write, write in it and when it's done set it to
> read-only again.
> 
> On PCI we have a mechanism for that. The ISA machine does not though. To stay
> regression free and happily enable users to continue using the -M isapc machine
> let's just map it as RAM. The BIOS on PCI will set it to r/o later either way.

Thanks Alexander.

With this qemu patch, SeaBIOS still wouldn't boot from a harddrive
because it only probed PCI ATA controllers.  I committed 4ccb2312 to
SeaBIOS to have it probe for ISA ATA controllers when no pci devices
are found.

-Kevin

Patch

diff --git a/hw/pc.c b/hw/pc.c
index 8c1b7ea..b5dabdd 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1075,7 +1075,7 @@  static void pc_init1(ram_addr_t ram_size,
         isa_bios_size = 128 * 1024;
     cpu_register_physical_memory(0x100000 - isa_bios_size,
                                  isa_bios_size,
-                                 (bios_offset + bios_size - isa_bios_size) | IO_MEM_ROM);
+                                 (bios_offset + bios_size - isa_bios_size));