2006-03-15 06:49:04

by Luming Yu

[permalink] [raw]
Subject: RE: 2.6.16-rc5: known regressions [TP 600X S3, vanilla DSDT]


>> If you remove the real THM0._TMP, and fake a dummy THM0._TMP in
>> DSDT, and don't change anything in kernel, then if S3 works well, I
>> will be convinced that THM0._TMP was causing trouble.
>
>I'll try it, to test my theory above! But one clarification first: Do
>you mean that I use a vanilla thermal.c, or should I keep using the
>modified thermal.c with zone_to_keep=0 as the module parameter? I
>don't think I revert to the vanilla thermal.c. Suppose that there are
>two bugs, which I think is likely (see previous email). Commenting
>out only THM0._TMP but preserving everything else in the DSDT & kernel
>might eliminate any bug caused by THM0._TMP. But if it still hangs --
>and I'm pretty sure it will -- it means there's a another bug
>somewhere else.

Ok, I'm fine whatever way you choose to start, But I think you need to
verify
the findings with the UN-modified kernek ,UN-modified Thermal.c and
others
that can reproduce S3 hang with UN-modified DSDT.




2006-03-15 07:06:57

by Sanjoy Mahajan

[permalink] [raw]
Subject: Re: 2.6.16-rc5: known regressions [TP 600X S3, vanilla DSDT]

[Sorry, forgot to reply to all the first time.]

How about this plan (basically what you suggested, but I want to
confirm its sensibility since these tests take a while):

Since I know (or think I know) that just THM0 with just _TMP causes
problems when investigating it by modifying the kernel, I'll instead
use a vanilla kernel but modify the DSDT as follows:

Remove the THM2, THM6, and THM7 code blocks. See whether the DSDT
even compiles (e.g. TWAK might complain because of the "Notify
(\_TZ.THM7, 0x81)"). If it does, see if the resulting kernel hangs.
If it hangs (which I expect), then I'll bisect within THM0 to find at
least one method that causes a problem.

So, before I begin that search, which THM0 methods can I safely get
rid of? All of PSL, TC1, TC2, TSP, MODP? That'll leave _TMP, _AC0,
_SCP, PSV to bisect among. I'll assume that the NAME statements are
okay.

Here's the THM0 code:

ThermalZone (THM0)
{
Name (MODE, 0x00)
Name (AC0M, 0x00)
Name (AC1M, 0x00)
Name (TBL0, Package (0x02)
{
Package (0x03)
{
Package (0x02)
{
0x0E62,
0x0E49
},

Package (0x02)
{
0x0E30,
0x0DBD
},

Package (0x02)
{
0x0E26,
0x0DB3
}
},

Package (0x03)
{
Package (0x02)
{
0x0E26,
0x0DB3
},

Package (0x02)
{
0x0E62,
0x0E49
},

Package (0x02)
{
0x0E30,
0x0DBD
}
}
})
Method (MODP, 1, NotSerialized)
{
Return (Index (DerefOf (Index (TBL0, MODE)), Arg0))
}

Method (_TMP, 0, NotSerialized)
{
\_SB.PCI0.ISA0.EC0.UPDT ()
Store (\_SB.PCI0.ISA0.EC0.TMP0, Local0)
If (LGreater (Local0, 0x0AAC))
{
Return (Local0)
}
Else
{
Return (0x0BB8)
}
}

Method (_AC0, 0, NotSerialized)
{
If (H8DR)
{
Store (\_SB.PCI0.ISA0.EC0.HT00, Local1)
}
Else
{
And (\_SB.RBEC (0x20), 0x01, Local1)
}

Store (Local1, \_TZ.THM0.AC0M)
Store (DerefOf (Index (DerefOf (MODP (0x01)),
Local1)), Local0)
Return (Local0)
}

Name (_CRT, 0x0E80)
Method (_SCP, 1, NotSerialized)
{
Notify (\_TZ.THM0, 0x81)
}

Name (_AL0, Package (0x01)
{
FN00
})
Method (_PSV, 0, NotSerialized)
{
Store (DerefOf (Index (DerefOf (MODP (0x00)), 0x01)),
Local0)
Return (Local0)
}

Name (_PSL, Package (0x01)
{
\_PR.CPU0
})
Method (_TC1, 0, NotSerialized)
{
Return (TTC1)
}

Method (_TC2, 0, NotSerialized)
{
Return (TTC2)
}

Method (_TSP, 0, NotSerialized)
{
Return (TTSP)
}
}

-Sanjoy

`Never underestimate the evil of which men of power are capable.'
--Bertrand Russell, _War Crimes in Vietnam_, chapter 1.