This patch fixes the kernel EBDA mislocation problem. Thank you, Yinghai.
The change in tables.c protects the legacy x86 BIOS data segment (0x400-0x4ff) from being used for storing coreboot tables. Some bytes from the segment are used by the kernel and should not be garbled. The change in coreboot_table.c is not strictly necessary. It removes some redundancy and confusion. Signed-off-by: Roman Kononov <kononov@dls.net> Acked-by: Marc Jones <marc.jones@amd.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3437 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
2aa804fdcc
commit
96e3022cd4
|
@ -402,7 +402,6 @@ unsigned long write_coreboot_table(
|
||||||
unsigned long low_table_start, unsigned long low_table_end,
|
unsigned long low_table_start, unsigned long low_table_end,
|
||||||
unsigned long rom_table_start, unsigned long rom_table_end)
|
unsigned long rom_table_start, unsigned long rom_table_end)
|
||||||
{
|
{
|
||||||
unsigned long table_size;
|
|
||||||
struct lb_header *head;
|
struct lb_header *head;
|
||||||
struct lb_memory *mem;
|
struct lb_memory *mem;
|
||||||
|
|
||||||
|
@ -445,9 +444,8 @@ unsigned long write_coreboot_table(
|
||||||
low_table_start, low_table_end - low_table_start);
|
low_table_start, low_table_end - low_table_start);
|
||||||
|
|
||||||
/* Record the pirq table, acpi tables, and maybe the mptable */
|
/* Record the pirq table, acpi tables, and maybe the mptable */
|
||||||
table_size=rom_table_end-rom_table_start;
|
|
||||||
lb_add_memory_range(mem, LB_MEM_TABLE,
|
lb_add_memory_range(mem, LB_MEM_TABLE,
|
||||||
rom_table_start, table_size<0x10000?0x10000:table_size);
|
rom_table_start, rom_table_end-rom_table_start);
|
||||||
|
|
||||||
/* Note:
|
/* Note:
|
||||||
* I assume that there is always memory at immediately after
|
* I assume that there is always memory at immediately after
|
||||||
|
|
|
@ -72,8 +72,9 @@ struct lb_memory *write_tables(void)
|
||||||
#if HAVE_MP_TABLE==1
|
#if HAVE_MP_TABLE==1
|
||||||
/* Don't write anything in the traditional x86 BIOS data segment,
|
/* Don't write anything in the traditional x86 BIOS data segment,
|
||||||
* for example the linux kernel smp need to use 0x467 to pass reset vector
|
* for example the linux kernel smp need to use 0x467 to pass reset vector
|
||||||
|
* or use 0x40e/0x413 for EBDA finding...
|
||||||
*/
|
*/
|
||||||
if(new_low_table_end>0x467){
|
if(new_low_table_end>0x400){
|
||||||
unsigned mptable_size;
|
unsigned mptable_size;
|
||||||
unsigned mpc_start;
|
unsigned mpc_start;
|
||||||
low_table_end += SMP_FLOATING_TABLE_LEN; /* keep the mpf in 1k low, so kernel can find it */
|
low_table_end += SMP_FLOATING_TABLE_LEN; /* keep the mpf in 1k low, so kernel can find it */
|
||||||
|
|
Loading…
Reference in New Issue