[coreboot] ACPI strangeness on Asus M2A-VM
Myles Watson
mylesgw at gmail.com
Tue Mar 17 16:47:10 CET 2009
2009/3/17 Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>:
> Hi,
>
> I believe I should not getting the following ACPI debug message (and
> similar messages) with only 2 GB RAM installed:
> evregion-0398 [00] ev_address_space_dispa: Handler ffff8800773c9ae0
> (@ffffffff803a9598) Address 0000000100000128 [SystemMemory]
> evregion-0398 [00] ev_address_space_dispa: Handler ffff8800773c9ae0
> (@ffffffff803a9598) Address 0000000100000131 [SystemMemory]
>
> The address in that message is 128/131 bytes above the 4 GB boundary.
> /proc/iomem says no device lives there. AFAICS that means ACPI tries to
> access nonexisting memory.
>
> The machine boots fine, but once I plug in 4 GB RAM, ACPI still tries to
> access the address above although real memory lives at that location and
> booting fails with the following messages:
> ACPI Error (exregion-0164): Could not map memory at 0000000100000128,
> size ED7 [20070126]
> ACPI Exception (evregion-0420): AE_NO_MEMORY, Returned by Handler for
> [SystemMemory] [20070126]
> ACPI Exception (dswexec-0462): AE_NO_MEMORY, While resolving operands
> for [LGreater] [20070126]
> ACPI Error (psparse-0537): Method parse/execution failed
> [\_SB_.PCI0.STCR.PMRY.PMST._STA] (Node ffff81013fa524f0), AE_NO_MEMORY
> ACPI Error (uteval-0233): Method execution failed
> [\_SB_.PCI0.STCR.PMRY.PMST._STA] (Node ffff81013fa524f0), AE_NO_MEMORY
> [...]
> ACPI Error (exregion-0164): Could not map memory at 0000000100000131,
> size ECE [20070126]
> ACPI Exception (evregion-0420): AE_NO_MEMORY, Returned by Handler for
> [SystemMemory] [20070126]
> ACPI Error (psparse-0537): Method parse/execution failed [\_GPE._L1F]
> (Node ffff81013fa52330), AE_NO_MEMORY
> ACPI Exception (evgpe-0577): AE_NO_MEMORY, while evaluating GPE method
> [_L1F] [20070126]
>
> The factory BIOS does not exhibit this behaviour.
>
> Interesting is that the addresses above 4 GB look like they are offsets
> to 0xffffffff, i.e. they all seem to be 4G-1+offset.
>
> Attached are:
> minicom_2009-03-17T053516.cap (coreboot+Linux, 2 GB)
> minicom_2009-03-17T054446.cap (BIOS+Linux, 2 GB)
>
> The following kernel parameters were used to improve debugging:
> mminit_loglevel=4 acpi.debug_level=0x10807
>
> Possibly interesting excerpts from the ACPI code:
>
>
> Device(STCR) {
> Name(_ADR, 0x00120000)
> Device(PMRY)
> {
> Name(_ADR, 0)
> Method(_GTM, 0x0, NotSerialized) {
> Return(STTM)
> }
> Method(_STM, 0x3, NotSerialized) {}
>
> Device(PMST) {
> Name(_ADR, 0)
> Method(_STA,0) {
> if (LGreater(P0IS,0)) {
> return (0x0F) /* sata is visible */
> }
> else {
> return (0x00) /* sata is missing */
> }
> }
> }/* end of PMST */
> ...
> } /* end STCR */
>
> From the excerpt above, it seems that the access to P0IS and causes the
> error.
> OperationRegion(PCFG, SystemMemory, PCBA, 0x01000000) /* Each bus
> consumes 1MB */
It looks like it is using memory-mapped PCI configuration. What is
PCBA? Have you inserted some Store (..., Debug) lines and run it to
see where the values are coming up wrong?
> Field(PCFG, ByteAcc, NoLock, Preserve) {
> /* Byte offsets are computed using the following technique:
> * ((bus number + 1) * ((device number * 8) * 4096)) +
> register offset
> * The 8 comes from 8 functions per device, and 4096 bytes per
> function config space
> */
> Offset(0x00090024), /* Byte offset to SATA register 24h -
> Bus 0, Device 18, Function 0 */
> STB5, 32, /* Address of SATA_BAR5 */
> ...
> }
>
> OperationRegion(SB5, SystemMemory, STB5, 0x1000) /* SATA_BAR5 (ABAR) */
> Field(SB5, AnyAcc, NoLock, Preserve)
> {
> ...
> Offset(0x128), /* Port 0 Serial ATA status */
> P0DD, 4, /* Port 0 Device Detection (DET) */
> , 4,
> P0IS, 4, /* Port 0 Interface Power Management
> (IPM) */
> Offset(0x12C), /* Port 0 Serial ATA control */
> P0DI, 4,
> Offset(0x130), /* Port 0 Serial ATA error */
> , 16,
> P0PR, 1,
>
>
> The only explanation I can come up with is:
> P0IS lives at addrof(SB5)+0x129
> P0PR lives at addrof(SB5)+0x132
> Field SB5 has address STB5.
> Therefore:
> P0IS lives at STB5+0x129
> P0PR lives at STB5+0x132
> The accesses to P0IS happen at 0x100000128.
> The accesses to P0PR happen at 0x100000131.
> Subtraction yields:
> STB5=0xffffffff.
> That's certainly NOT a valid address of a BAR.
...
> Writing IRQ routing tables to 0xf0000...write_pirq_routing_table done.
> ACPI: Writing ACPI tables at f0400...
> ACPI: * HPET
> ACPI: added table 1/9 Length now 40
> ACPI: * MADT
> ACPI: added table 2/9 Length now 44
> ACPI: * SSDT
> processor_brand=AMD Athlon(tm) 64 Processor 3000+
> Pstates Algorithm ...
> Pstate_freq[0] = 1800MHz Pstate_vid[0] = 12 Pstate_volt[0] = 1250mv Pstate_power[0] = 62000mw
> Pstate_freq[1] = 1000MHz Pstate_vid[1] = 18 Pstate_volt[1] = 1100mv Pstate_power[1] = 26673mw
> ACPI: added table 3/9 Length now 48
> ACPI: * FACS
> ACPI: * DSDT
> ACPI: * DSDT @ 000f0748 Length 26a4
> ACPI: * FADT
I expected to see an MCFG here. I know you don't need it, but it
would be easy to add if you have Memory-mapped configuration set up
correctly. I was going to check the address.
> pm_base: 0x0800
> ACPI: added table 4/9 Length now 52
> ACPI: done.
> Wrote the mp table end at: 00000020 - 00000120
> Moving GDT to 0x500...ok
> Multiboot Information structure has been written.
> Adjust low_table_end from 0x00000530 to 0x00001000
> Adjust rom_table_end from 0x000f30d0 to 0x00100000
> uma_memory_base=0x78000000, uma_memory_size=0x8000000
> Wrote coreboot table at: 00000530 - 00000760 checksum d78d
Thanks,
Myles
More information about the coreboot
mailing list