[LinuxBIOS] BIOS-provided physical RAM map

joe at smittys.pointclark.net joe at smittys.pointclark.net
Sun Oct 14 18:01:28 CEST 2007


Quoting joe at smittys.pointclark.net:

> Quoting joe at smittys.pointclark.net:
>
>> Quoting ron minnich <rminnich at gmail.com>:
>>
>>> On 10/13/07, joe at smittys.pointclark.net <joe at smittys.pointclark.net> wrote:
>>>> How can I adjust the "BIOS-provided physical RAM map" that the linux
>>>> kernel uses? Is this done in northbridge.c with ram_resource()???
>>>> Because mine does not look the same.
>>>>
>>>> ram_resource(dev, idx++, 0, 640);
>>>> ram_resource(dev, idx++, 1024, tolmk - 1024);
>>>>
>>>> BIOS-provided physical RAM map:
>>>>
>>>>   BIOS-e820: 0000000000001000 - 00000000000a0000 (usable)
>>>>
>>>>   BIOS-e820: 0000000000100000 - 0000000008000000 (usable)
>>>>
>>>> 128MB LOWMEM available.
>>>
>>> hi joe, I am not sure I understand your question? what is the value of
>>> tolmk in this case?
>>>
>>> When booting the kernel, there are a few cmdline parameters you can
>>> use and, if you do, it will IIRC ignore the e820 map. It's been a
>>> while since I looked at that code, though ...
>>>
>>> ron
>>
>> Well the problem is I don't think the memory regions are allocating
>> memory properly still. For example here is the "BIOS-provided physical
>> RAM map" from the original bios:
>>
>> BIOS-provided physical RAM map:
>>
>>   BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
>>
>>   BIOS-e801: 0000000000100000 - 0000000007f00000 (usable)
>>
>> 127MB LOWMEM available.
>>
>> See how the map ends at 127MB. The last 1MB of memory is pre-allocated
>> for the VGA frame buffer (IGD). The original bios excludes this from
>> the ram map while LinuxBIOS does not. Linux will think this area is
>> useable for system memory and the graphics will think it is useable
>> for graphics causing them to write over each other and not good stuff
>> will start to happen:-(
>>
>> Anyways, I am tring to figure out in what code LinuxBIOS configures
>> this map so I can make adjustments. Basicly I need to tell LinuxBIOS to:
>>
>> Total LOWMEM - IGD pre-allocated memory = New LOWMEM
>>
>> I should be able to do this in northbridge.c right?? But would I
>> subtract it from tomk or tolmk??
>>
>>
> Yep, I had a feeling. It looks like the AMD gx2 northbridge.c does
> this exact thing.
>
> /* Sort out the framebuffer size */
> tomk -= FRAMEBUFFERK;
>
> I will test it and get back.....
>
>
> Thanks - Joe
>
This myth is confirmed. I setup northbridge.c to subtract the IGD  
pre-allocated memory from tomk, and setup the IGD pre-allocated memory  
registers in raminit.c. For this example I used the max 8MB.

BIOS-provided physical RAM map:

  BIOS-e820: 0000000000001000 - 00000000000a0000 (usable)

  BIOS-e820: 0000000000100000 - 0000000007800000 (usable)

120MB LOWMEM available.


Sweet, that's just one more thing to cross off my list:-)
Thanks - Joe




More information about the coreboot mailing list