Moore, Robert wrote: >> YCST () >> > > > Regardless of what YCST returns, _CST is returning nothing in the case above. > > You need: > > >> Return (YCST ()) >> > > Or -- enable the implicit return mechanism. > Doh! Of course. Now that you say it, it's obvious.
Thanks - Dana > >> -----Original Message----- >> From: Dana.Myers at Sun.COM [mailto:Dana.Myers at Sun.COM] >> Sent: Thursday, March 19, 2009 1:10 PM >> To: Moore, Robert >> Cc: Li, Aubrey; Bill.Holler at Sun.COM; Liu, Jiang; tesla-dev at >> opensolaris.org >> Subject: Re: [tesla-dev] [Fwd: Lu from b105 - b110, panic on reboot] >> >> Moore, Robert wrote: >> >>> I'll take a stab at it. >>> >>> As far as the ReturnType in an External, this is for compile-time static >>> >> checking only, just like an ordinary external declaration. >> >>> Just a guess here: Are you having problems disassembling (then compiling) >>> >> a secondary table that has references back to the DSDT? If so, I can help >> with that. >> The problem we have here is with a BIOS that contains a _CST object >> in a table that is Load()ed from an _OSC method. >> >> When the _CST object is evaluated, ACPI CA finds the _CST object, >> but no object is returned. _CST is defined to always return a Package(). >> >> The implementation of _CST is contained in a SystemMemory OpRegion, >> Load()ed from an _OSC method, and is: >> >> External (YCST, MethodObj) // 0 Arguments >> [...] >> Method (_CST, 0, NotSerialized) >> { >> If (LNot (And (PDC0, 0x10))) >> { >> Return (Package (0x02) >> { >> 0x01, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x9D, >> 0x03E8 >> } >> }) >> } >> >> YCST () >> } >> >> YCST() is contained in the DSDT; first, a simplified version of it: >> >> Method (YCST, 0, NotSerialized) >> { >> And (\_SB.MEM.CFGD, 0x70, Local0) >> If (LEqual (Local0, 0x00)) >> { >> Return (Package (0x02) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x10)) >> { >> Return (Package (0x03) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x20)) >> { >> Return (Package (0x03) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x40)) >> { >> Return (Package (0x03) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x30)) >> { >> Return (Package (0x04) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x50)) >> { >> Return (Package (0x04) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x60)) >> { >> Return (Package (0x04) >> { >> ... >> }) >> } >> >> If (LEqual (Local0, 0x70)) >> { >> Return (Package (0x05) >> { >> ... >> }) >> } >> } >> >> Note that every possible value of Local0 appears to be tested >> for, and there is a Return (Package ()) in each case. It does >> not appear possible that YCST() can return nothing. >> >> It's confusing me. I'm suspecting something odd with the linkage >> between the dynamically Load()ed _CST and the DSDT. >> >> Cheers, >> Dana >> >> >> Complete DSL of YCST is below: >> >> >> Method (YCST, 0, NotSerialized) >> { >> And (\_SB.MEM.CFGD, 0x70, Local0) >> If (LEqual (Local0, 0x00)) >> { >> Return (Package (0x02) >> { >> 0x01, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> } >> }) >> } >> >> If (LEqual (Local0, 0x10)) >> { >> Return (Package (0x03) >> { >> 0x02, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D814, // Address >> ,) >> }, >> >> 0x02, >> 0x01, >> 0x01F4 >> } >> }) >> } >> >> If (LEqual (Local0, 0x20)) >> { >> Return (Package (0x03) >> { >> 0x02, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D815, // Address >> ,) >> }, >> >> 0x03, >> 0x11, >> 0xFA >> } >> }) >> } >> >> If (LEqual (Local0, 0x40)) >> { >> Return (Package (0x03) >> { >> 0x02, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D816, // Address >> ,) >> }, >> >> 0x03, >> 0x39, >> 0x64 >> } >> }) >> } >> >> If (LEqual (Local0, 0x30)) >> { >> Return (Package (0x04) >> { >> 0x03, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D814, // Address >> ,) >> }, >> >> 0x02, >> 0x01, >> 0x01F4 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D815, // Address >> ,) >> }, >> >> 0x03, >> 0x11, >> 0xFA >> } >> }) >> } >> >> If (LEqual (Local0, 0x50)) >> { >> Return (Package (0x04) >> { >> 0x03, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D814, // Address >> ,) >> }, >> >> 0x02, >> 0x01, >> 0x01F4 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D816, // Address >> ,) >> }, >> >> 0x03, >> 0x39, >> 0x64 >> } >> }) >> } >> >> If (LEqual (Local0, 0x60)) >> { >> Return (Package (0x04) >> { >> 0x03, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D815, // Address >> ,) >> }, >> >> 0x03, >> 0x11, >> 0xFA >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D816, // Address >> ,) >> }, >> >> 0x03, >> 0x39, >> 0x64 >> } >> }) >> } >> >> If (LEqual (Local0, 0x70)) >> { >> Return (Package (0x05) >> { >> 0x04, >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (FFixedHW, >> 0x00, // Bit Width >> 0x00, // Bit Offset >> 0x0000000000000000, // Address >> ,) >> }, >> >> 0x01, >> 0x01, >> 0x03E8 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D814, // Address >> ,) >> }, >> >> 0x02, >> 0x01, >> 0x01F4 >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D815, // Address >> ,) >> }, >> >> 0x03, >> 0x11, >> 0xFA >> }, >> >> Package (0x04) >> { >> ResourceTemplate () >> { >> Register (SystemIO, >> 0x08, // Bit Width >> 0x00, // Bit Offset >> 0x000000000000D816, // Address >> ,) >> }, >> >> 0x03, >> 0x39, >> 0x64 >> } >> }) >> } >> } >> >> >> >> >> >> >>>> -----Original Message----- >>>> From: Dana.Myers at Sun.COM [mailto:Dana.Myers at Sun.COM] >>>> Sent: Thursday, March 19, 2009 12:49 PM >>>> To: Li, Aubrey >>>> Cc: Bill.Holler at Sun.COM; Liu, Jiang; tesla-dev at opensolaris.org; >>>> Moore, >>>> Robert >>>> Subject: Re: [tesla-dev] [Fwd: Lu from b105 - b110, panic on reboot] >>>> >>>> Li, Aubrey wrote: >>>> >>>>> ACPICA do need more work here before we make sure it's really a BIOS >>>>> >>>> issue. >>>> >>>>> Now it appears to be not. >>>>> >>>>> >>>>> >>>> So, I have a hunch what the problem may be. >>>> cs0.dsl (one o the Load()ed tables that contains a _CST object) >>>> contains: >>>> >>>> External (YCST, MethodObj) >>>> >>>> which I believe is truncated; reading section 17.5.42 of the ACPI 3.0a >>>> spec (not the >>>> latest rev, but it hasn't changed), we see that "MethodObj" is an object >>>> type; >>>> when MethodObj is present, the spec seems to imply that at least one >>>> ReturnType >>>> must follow. >>>> >>>> There's no ReturnType specified, so I'm guessing that ACPI CA doesn't >>>> expect a >>>> return from YCST and ignores the returned value. >>>> >>>> I've CC'ed Bob Moore at Intel for his opinion. Bob - I've included darn >>>> near no >>>> information here, but I think it may be sufficient :-) Does the above >>>> description >>>> sound familiar? >>>> >>>> Cheers, >>>> Dana >>>> > >
