We ignored this error for a long time since there was no any stability
issues caused by it, but recently we encountered Windows 2008 reboot
problem (one of 10 reboots hangs with ACPI error) that, according to
Microsoft, is caused by CMOS access from AML code. Eliminating the
access indeed fixed reboot problem. ACPI spec defines a way to read
CMOS without accessing IO ports directly, but unfortunately neither
Windows XP nor Linux implements this part of the spec (it works in
Windows 2008 though).
Index: bios/acpi-dsdt.dsl
===================================================================
RCS file: /cvsroot/bochs/bochs/bios/acpi-dsdt.dsl,v
retrieving revision 1.3
diff -u -r1.3 acpi-dsdt.dsl
--- bios/acpi-dsdt.dsl 26 Jan 2008 09:15:27 -0000 1.3
+++ bios/acpi-dsdt.dsl 20 Aug 2008 12:54:04 -0000
@@ -27,20 +27,6 @@
{
Scope (\)
{
- /* CMOS memory access */
- OperationRegion (CMS, SystemIO, 0x70, 0x02)
- Field (CMS, ByteAcc, NoLock, Preserve)
- {
- CMSI, 8,
- CMSD, 8
- }
- Method (CMRD, 1, NotSerialized)
- {
- Store (Arg0, CMSI)
- Store (CMSD, Local0)
- Return (Local0)
- }
-
/* Debug Output */
OperationRegion (DBG, SystemIO, 0xb044, 0x04)
Field (DBG, DWordAcc, NoLock, Preserve)
@@ -99,9 +85,7 @@
Package() {0x0005ffff, 3, LNKD, 0},
})
- Method (_CRS, 0, NotSerialized)
- {
- Name (MEMP, ResourceTemplate ()
+ Name (_CRS, ResourceTemplate ()
{
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
0x0000, // Address Space Granularity
@@ -139,25 +123,12 @@
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinNotFixed,
MaxFixed, NonCacheable, ReadWrite,
0x00000000, // Address Space Granularity
- 0x00000000, // Address Range Minimum
+ 0xE0000000, // Address Range Minimum
0xFEBFFFFF, // Address Range Maximum
0x00000000, // Address Translation Offset
- 0x00000000, // Address Length
- ,, MEMF, AddressRangeMemory, TypeStatic)
+ 0x1EC00000, // Address Length
+ ,, , AddressRangeMemory, TypeStatic)
})
- CreateDWordField (MEMP, \_SB.PCI0._CRS.MEMF._MIN, PMIN)
- CreateDWordField (MEMP, \_SB.PCI0._CRS.MEMF._MAX, PMAX)
- CreateDWordField (MEMP, \_SB.PCI0._CRS.MEMF._LEN, PLEN)
- /* compute available RAM */
- Add(CMRD(0x34), ShiftLeft(CMRD(0x35), 8), Local0)
- ShiftLeft(Local0, 16, Local0)
- Add(Local0, 0x1000000, Local0)
- /* update field of last region */
- Store(Local0, PMIN)
- Subtract (PMAX, PMIN, PLEN)
- Increment (PLEN)
- Return (MEMP)
- }
}
}