[SeaBIOS] How much RAM is required?
armbru at redhat.com
Thu Sep 6 09:32:35 CEST 2012
Markus Armbruster <armbru at redhat.com> writes:
> "Kevin O'Connor" <kevin at koconnor.net> writes:
>> On Fri, Aug 10, 2012 at 04:54:06PM +0200, Markus Armbruster wrote:
>>> Peter Stuge <peter at stuge.se> writes:
>>> > Markus Armbruster wrote:
>>> >> Could SeaBIOS fail more cleanly when it detects insufficient RAM?
>>> > What would you propose?
>>> Fail POST with panic("Not enough RAM")?
>> The amount of memory is communicated from QEMU to SeaBIOS via nvram
>> variables. As far as I know, those variables can only communicate ram
>> sizes in 1meg chunks - so there is no way to communicate (and/or
>> detect) a ramsize of under 1 meg.
> Not true, the variables *can* communicate more.
> Here's what QEMU stores in the RTC's NVRAM ("CMOS memory") on RAM:
> addr size meaning [unit]
> 0x15 2 base memory (below 1MiB) [KiB]
> 0x17 2 extended memory (between 1MiB and 64MiB) [KiB]
> 0x30 2 copy of 0x17/0x18
> 0x34 2 memory between 16MiB and 4GiB [64KiB]
> 0x5b 3 memory above 4GiB [64KiB]
> Thus, memory sizes up to 16MiB can be declared with 1KiB granularity,
> and up to 1TiB with 64KiB granularity.
> Note that RAM 0xa0000..0xfffff is inaccessible.
> However, the values QEMU *currently* stores are buggy for RAM sizes
> under 640KiB: base memory is set to 640KiB, and extended memory
> underflows. Code is pc_cmos_init() in hw/pc.c. I'll try to get that
> fixed, either by storing correct values, or by enforcing a 1MiB minimum.
1MiB minimum was rejected. Instead, QEMU 1.2 got this fix:
Author: Markus Armbruster <armbru at redhat.com>
Date: Wed Aug 15 13:12:20 2012 +0200
pc: Fix RTC CMOS info on RAM for ram_size < 1MiB
pc_cmos_init() always claims 640KiB base memory, and ram_size - 1MiB
extended memory. The latter can underflow to "lots of extended
memory". Fix both, and clean up some.
Note: SeaBIOS currently requires 1MiB of RAM, and doesn't check
whether it got enough.
More information about the SeaBIOS