On Tue, 2007-05-22 at 21:27 +0200, Rafael J. Wysocki wrote: > Hi, > > On Tuesday, 22 May 2007 20:49, Peter Clifton wrote: > > Hi, > > > > I just updated my bios to HP's latest, and have recently been upgraded > > to Ubuntu Gutsy kernel version: > > > > Linux version 2.6.22-1-generic (buildd@palmer) (gcc version 4.1.3 > > 20070423 (prerelease) (Ubuntu 4.1.2-3ubuntu3)) #1 SMP Mon Apr 30 > > 10:49:22 GMT 2007 [snip] > Well, threre's a couple of such things. You may try the kernel.org kernel > 2.6.22-rc2 with the hibernation and suspend patchset available from > http://www.sisk.pl/kernel/hibernation_and_suspend/2.6.22-rc2/patches . I wonder if those are included in Ubuntu's kernel (I'm being dumb today, but I couldn't work out if the debian build was adding patches or not, nor which exact version they started from. (The source filename is linux-source-2.6.22_2.6.22-5.11.tar.gz) Just FYI, the link you posted has a file with funny permissions on it: http://www.sisk.pl/kernel/hibernation_and_suspend/2.6.22-rc2/patches/16-usb-use-freezable-workqueue.patch Gives me a 403 error. > > After resume from suspend, I see: > > > > dmesg | grep ACPI | grep Error > > [ 4763.428000] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.C241] (Node df94c9dc), AE_AML_PACKAGE_LIMIT > > [ 4763.428000] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.C002.C0DC.C349._STM] (Node df94fba8), AE_AML_PACKAGE_LIMIT > > [ 6417.528000] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.C241] (Node df94c9dc), AE_AML_PACKAGE_LIMIT > > [ 6417.528000] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.C002.C0DC.C349._STM] (Node df94fba8), AE_AML_PACKAGE_LIMIT > > > > Is this anything to worry about - should I post a dsdt for the new bios? Looking at the ACPI 3.0 spec: _STM Optional control method that sets the IDE controller’s transfer timing sttings. IDE-only (IE. shouldn't be called for an SATA drive). That may mean its for my CD writer (which shows up as hda). This is in the first SSDT, "HPQSAT" which I've attached the dissasembly of. > This means we are unable to set the IDE controller transfer timings after the > resume. I don't know how serious this is in practice, though. iasl decompiles and recompiles the dsdt and all ssdt ok (after minor tweaking due to decompile discrepancies). The remaining warnings only relate to _BCQ (A Microsoft induced typo for _BQC?) And, unreachable code in the _STA method of the "ACEL" device. (They have blanked that function off with a Return (0x00). Thats a shame - if it means what I think (that the acceleration sensor doesn't work). Many places in the ACEL device code check If (_STA ()) around big blocks of code, so presumably the AML code for it is not doing a great deal. (I wounder how Windows uses it - a custom driver perhaps?) Thanks for the great work on suspend / resume (and of course ACPI support in general) everyone! Peter
/* * Intel ACPI Component Architecture * AML Disassembler version 20061109 * * Disassembly of ssdt1.aml, Tue May 22 20:59:05 2007 * * * Original Table Header: * Signature "SSDT" * Length 0x00000326 (806) * Revision 0x01 * OEM ID "HP " * OEM Table ID "HPQSAT" * OEM Revision 0x00000001 (1) * Creator ID "MSFT" * Creator Revision 0x0100000E (16777230) */ DefinitionBlock ("ssdt1.aml", "SSDT", 1, "HP ", "HPQSAT", 0x00000001) { External (C0EC, MethodObj) // 6 Arguments External (C0E8, MethodObj) // 5 Arguments External (C0E6, MethodObj) // 2 Arguments External (C0E7, MethodObj) // 1 Argument? External (C0E4, MethodObj) // 2 Arguments External (C240) External (\_SB_.C14A) External (\_SB_.C248, MethodObj) External (\_SB_.C241, MethodObj) // 4 Arguments External (\_SB_.C002, DeviceObj) External (\_SB_.C002.C0DC, DeviceObj) Scope (\_SB.C002) { Device (C351) { Name (_ADR, 0x001F0002) Device (C0F6) { Name (_ADR, 0xFFFF) Name (C352, Package (0x06) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) Method (_SDD, 1, Serialized) { If (LEqual (SizeOf (Arg0), 0x0200)) { Store (0x00, Local0) Store (Buffer (Multiply (SizeOf (C240), 0x02)) {}, Local1) While (LLess (Local0, SizeOf (C240))) { Store (DerefOf (Index (C240, Local0)), Local2) Multiply (Local2, 0x02, Local2) Multiply (Local0, 0x02, Local3) Store (DerefOf (Index (Arg0, Local2)), Index (Local1, Local3)) Store (DerefOf (Index (Arg0, Add (Local2, 0x01))), Index ( Local1, Add (Local3, 0x01))) Increment (Local0) } \_SB.C241 (0x00010000, 0x00, Local1, C352) } } Method (_GTF, 0, NotSerialized) { Return (\_SB.C248(C352, 0x00)) } } } } Scope (\_SB.C002.C0DC) { Name (_ADR, 0x001F0001) Name (C353, 0x01) Device (C349) { Name (_ADR, 0x00) Name (C34A, Package (0x05) { 0x00, 0x00, 0x00, 0x00, 0x00 }) Method (_GTM, 0, NotSerialized) { Store (Buffer (0x14) { /* 0000 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0008 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF }, Local0) CreateDWordField (Local0, 0x00, C34B) CreateDWordField (Local0, 0x04, C34C) CreateDWordField (Local0, 0x08, C354) CreateDWordField (Local0, 0x0C, C355) CreateDWordField (Local0, 0x10, C34D) Store (C0E4 (0x00, 0x00), C34B) Store (C0E7 (0x00), C34D) If (And (C34D, 0x01)) { Store (C0E6 (0x00, 0x00), C34C) } Else { Store (C34B, C34C) } If (LOr (LEqual (And (\_SB.C14A, 0x0F), 0x07), LEqual (And ( C353, 0x01), 0x00))) { Store (0x78, C354) Store (0x11, C355) Or (C34D, 0x0C, C34D) } Else { Store (C0E4 (0x00, 0x01), C354) If (And (C34D, 0x04)) { Store (C0E6 (0x00, 0x01), C355) } Else { Store (C354, C355) } } Return (Local0) } Method (_STM, 3, NotSerialized) { CreateDWordField (Arg0, 0x00, C34B) CreateDWordField (Arg0, 0x04, C34C) CreateDWordField (Arg0, 0x08, C354) CreateDWordField (Arg0, 0x0C, C355) CreateDWordField (Arg0, 0x10, C34D) If (LEqual (And (\_SB.C14A, 0x0F), 0x01)) { Or (C353, 0x01, C353) If (LEqual (SizeOf (Arg1), 0x0200)) { Store (0x00, Local0) Store (Buffer (Multiply (SizeOf (C240), 0x02)) {}, Local1) While (LLess (Local0, SizeOf (C240))) { Store (DerefOf (Index (C240, Local0)), Local2) Multiply (Local2, 0x02, Local2) Multiply (Local0, 0x02, Local3) Store (DerefOf (Index (Arg1, Local2)), Index (Local1, Local3)) Store (DerefOf (Index (Arg1, Add (Local2, 0x01))), Index ( Local1, Add (Local3, 0x01))) Increment (Local0) } Store (C0E8 (0x00, 0x00, C34B, C34D, Local1), Local2) Store (C0EC (0x00, 0x00, C34C, C34D, Local1, Local3), \_SB.C241 (Local2, Local3, Local1, C34A)) } } } Device (C34E) { Name (_ADR, 0x00) Method (_GTF, 0, NotSerialized) { Return (\_SB.C248 (C34A, 0x00)) } } } } }