On Wed, May 18, 2011 at 12:40 AM, Scott Duplichan <[email protected]> wrote: > The attached patch works around a Windows XP or Server 2003 setup > failure where an error message such as: > "An unexpected error (805262864) occurred at line 1768 of > d:\xpclient\base\boot\setup\arcdisp.c" > The value 805262864 varies, and is the physical address, in decimal, > of one of the ACPI tables. > > Tested on Persimmon. Others abuild tested only. > Signed-off-by: Scott Duplichan <[email protected]> > > Detailed explanation: The error message is displayed when a 1024 dword > page table array used by setupldr runs out of space. This table is used > for mapping various physical addresses, such as those of ACPI tables > (a separate table identity maps the lower 16MB used by setupldr code > and data). Setupldr only looks at ACPI tables (FACP) to determine make > and model of the system. The make and model of the system is needed when > setupldr scans the good/bad bios lists contained in txtsetup.sif. The > good/bad bios lists are used to bypass installation of the ACPI enabled > kernel on certain systems known to have ACPI problems. The code loop > that scans the lists creates a new mapping each time it reads an ACPI > table, and never frees mappings. The code uses FACP OEM ID to determine > the system model. The code sequentially reads tables listed in the RSDT > array until the FACP is found. Each read consumes one page table entry. > If more that 4 tables precede the FACP in the RSDT array, the 1024 > entry page table array will run out of space before the good/bad bios > list processing completes. BIOS can work around this Windows XP/Server > 2003 limitation by placing the FACP early in the RSDT array. > > Thanks, > Scott
Hi Scott, Good find. This must have been a difficult debug. It looks like src/mainboard/amd/mahogany/acpi_tables.c has a double paste issue. Fix that and it looks good. Acked-by: Marc Jones <[email protected]> Marc -- http://se-eng.com -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

