google/panther: Re-read temperature if current reading would cause power-off

Sometimes the SuperIO seems to provide wrong readings, especially early
on after a resume from suspend. This will cause the system to power off.
If that happens, wait for 1s and read again, to make sure the high
temperature value was not just a flaky read.

BUG=chrome-os-partner:24918
BRANCH=panther
TEST=Boot tested on Panther.

Change-Id: Ib3768528d90e34448e96ad587b2503d8d8b1a775
Signed-off-by: Stefan Reinauer <reinauer@google.com>
Signed-off-by: Stefan Reinauer <reinauer@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/182188
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Tested-by: Stefan Reinauer <reinauer@chromium.org>
Commit-Queue: Stefan Reinauer <reinauer@chromium.org>
Reviewed-on: http://review.coreboot.org/6001
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Stefan Reinauer 2014-01-10 16:06:03 -08:00 committed by Patrick Georgi
parent 06946cabd9
commit a0819eb38d
1 changed files with 26 additions and 1 deletions

View File

@ -61,7 +61,7 @@ Scope (\_TZ)
Return (\PPKG ()) Return (\PPKG ())
} }
Method (_TMP, 0, Serialized) Method (TCHK, 0, Serialized)
{ {
// Get CPU Temperature from PECI via SuperIO TMPIN3 // Get CPU Temperature from PECI via SuperIO TMPIN3
Store (\_SB.PCI0.LPCB.SIO.ENVC.TIN3, Local0) Store (\_SB.PCI0.LPCB.SIO.ENVC.TIN3, Local0)
@ -84,6 +84,31 @@ Scope (\_TZ)
Return (CTOK (Local0)) Return (CTOK (Local0))
} }
Method (_TMP, 0, Serialized)
{
// Get temperature from SuperIO in deci-kelvin
Store (TCHK (), Local0)
// Critical temperature in deci-kelvin
Store (CTOK (\TMAX), Local1)
If (LGreaterEqual (Local0, Local1)) {
Store ("CRITICAL TEMPERATURE", Debug)
Store (Local0, Debug)
// Wait 1 second for SuperIO to re-poll
Sleep (1000)
// Re-read temperature from SuperIO
Store (TCHK (), Local0)
Store ("RE-READ TEMPERATURE", Debug)
Store (Local0, Debug)
}
Return (Local0)
}
Method (_AC0) { Method (_AC0) {
If (LLessEqual (\FLVL, 0)) { If (LLessEqual (\FLVL, 0)) {
Return (CTOK (\F0OF)) Return (CTOK (\F0OF))