http://bugzilla.kernel.org/show_bug.cgi?id=9513


[EMAIL PROTECTED] changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |acpi-
                   |                            |[EMAIL PROTECTED]
                   |                            |et
             Status|ASSIGNED                    |NEEDINFO
            Summary|cat                         |cat
                   |/proc/acpi/thermal_zone/THRM|/proc/acpi/thermal_zone/THRM
                   |/temperature hangs          |/temperature hangs with new
                   |                            |BIOS




------- Comment #7 from [EMAIL PROTECTED]  2007-12-27 21:49 -------
With the working BIOS, please paste the output from
more /proc/acpi/thermal_zone/THRM/* | cat

And for the failing BIOS, please do the same,
except exclude access to the problematic temperature file.

Can you attach the dmesg from the working 1102 BIOS?
I don't see anything special in the 1202 dmesg in attachment
in comment #1, but maybe the original dmesg will give some clues.

It looks like there is a bug in the AML of BIOS 1202.
They re-named CPU0 to be C000, in both the DSDT
and the SSDT, but didn't update the reference to
it from the thermal zone. (which is why iasl created
an External reference to the missing symbol)

I don't know if this causes the hang or not, but
it is certainly curious and it is in the same neck
of the woods...

$ cat DSDT.dsl.diff
5c5
<  * Disassembly of DSDT.dat, Fri Dec 28 00:18:35 2007
---
>  * Disassembly of DSDT.dat, Fri Dec 28 00:18:48 2007
10c10
<  *     Length           0x000078E1 (30945)
---
>  *     Length           0x00007908 (30984)
19a20,21
>     External (\_PR_.CPU0)
>
22,23c24,27
<         Processor (\_PR.CPU0, 0x00, 0x00000000, 0x00) {}
<         Processor (\_PR.CPU1, 0x01, 0x00000000, 0x00) {}
---
>         Processor (\_PR.C000, 0x00, 0x00000000, 0x00) {}
>         Processor (\_PR.C001, 0x01, 0x00000000, 0x00) {}
>         Processor (\_PR.C002, 0x02, 0x00000000, 0x00) {}
>         Processor (\_PR.C003, 0x03, 0x00000000, 0x00) {}
2949c2953
<                             0x80,               // Length
---
>                             0x02,               // Length

$ cat SSDT.dsl.diff
5c5
<  * Disassembly of SSDT.dat, Fri Dec 28 00:18:35 2007
---
>  * Disassembly of SSDT.dat, Fri Dec 28 00:18:48 2007
20,21c20,21
<     External (\_PR_.CPU1, DeviceObj)
<     External (\_PR_.CPU0, DeviceObj)
---
>     External (\_PR_.C001, DeviceObj)
>     External (\_PR_.C000, DeviceObj)
23c23
<     Scope (\_PR.CPU0)
---
>     Scope (\_PR.C000)
91c91
<     Scope (\_PR.CPU1)
---
>     Scope (\_PR.C001)

While in the DSDT, there is still an access to CPU0 in _PSL:
        ThermalZone (THRM)
        {
            Name (_AL0, Package (0x01)
            {
                FAN
            })
            Method (_INI, 0, NotSerialized)
            {
            }

            Method (_AC0, 0, NotSerialized)
            {
                If (Or (PLCY, PLCY, Local7))
                {
                    Return (KELA (TP2H))
                }
                Else
                {
                    Return (KELA (TP1H))
                }
            }

            Name (_PSL, Package (0x01)
            {
                \_PR.CPU0
            })

The other change was the size of a system IO resource shrunk
from 0x80 to 0x02:

                        IO (Decode16,
                            0x0800,             // Range Minimum
                            0x0800,             // Range Maximum
                            0x01,               // Alignment
                            0x02,               // Length

I have no idea what this resource is used for.
But it would be interesting if you could correct the DSDT
and boot with a DSDT override to see if either the CPU0
or the resource size changes make the hang go away.

How to Build a custom DSDT into the kernel
------------------------------------------
Get original DSDT:
# cp /proc/acpi/dsdt DSDT
or
# acpidump > acpidump.out
$ acpixtract DSDT acpidump > DSDT.dat

Disassemble it
$ iasl -d DSDT.dat
Make your changes:
$ vi DSDT.dsl
Build it:
$ iasl -tc DSDT.dsl
Put it where the kernel build can include it:
$ cp DSDT.hex $SRC/include/

Add this to the kernel .config:

CONFIG_STANDALONE=n
CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE="DSDT.hex"

Make the kernel and off you go!
You should see in dmesg:
Table [DSDT] replaced by host OS


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to