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.
Thanks - Joe
On 10/13/07, joe@smittys.pointclark.net joe@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
Quoting ron minnich rminnich@gmail.com:
On 10/13/07, joe@smittys.pointclark.net joe@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??
Thanks - Joe
Quoting joe@smittys.pointclark.net:
Quoting ron minnich rminnich@gmail.com:
On 10/13/07, joe@smittys.pointclark.net joe@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
Quoting joe@smittys.pointclark.net:
Quoting joe@smittys.pointclark.net:
Quoting ron minnich rminnich@gmail.com:
On 10/13/07, joe@smittys.pointclark.net joe@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
* joe@smittys.pointclark.net joe@smittys.pointclark.net [071014 00:00]:
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.
If tolmk is 128M this looks fine.
ram_resource takes a base address in kilobytes and a size in kilobytes.
so the second resource above goes from 1024K to tolmk-1024+1024, which is tolmk.