There seem to be a significant number of shutdowns during suspend resume tests related to critical temperatures. It is possible that we are getting a bad reading from PECI and shutting down prematurely in some cases. If we get a reading that is above critical then wait for the EC to re-poll and then re-check the temperature in case it was just a bad reading. Also add some ACPI debug messages when this happens. Original-Change-Id: I0ab7bdcc50d133981c0f36fc696b06d4a1d939a7 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/66937 Reviewed-by: Aaron Durbin <adurbin@chromium.org> (cherry picked from commit a39d7b11dd7b2af37fc2658542d56b32e3966ed4) Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Change-Id: Ib612266511d90749ec6507f8467c71523ee8fb95 Reviewed-on: https://chromium-review.googlesource.com/66939 Tested-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Commit-Queue: Duncan Laurie <dlaurie@chromium.org> (cherry picked from commit e98da983dca7819490464bddf08b9c53f28d2712) Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com> Reviewed-on: http://review.coreboot.org/6457 Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
137 lines
3.0 KiB
Plaintext
137 lines
3.0 KiB
Plaintext
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright (C) 2012 Google Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
// Thermal Zone
|
|
|
|
Scope (\_TZ)
|
|
{
|
|
// Handler for throttle requests on this platform
|
|
// 0 = Stop throttling
|
|
// 1 = Start throttling
|
|
Method (THRT, 1, Serialized)
|
|
{
|
|
If (LEqual (Arg0, 0)) {
|
|
/* Disable Power Limit */
|
|
\_SB.PCI0.MCHC.CTLD ()
|
|
} Else {
|
|
/* Enable Power Limit */
|
|
\_SB.PCI0.MCHC.CTLE (\F0PW)
|
|
}
|
|
}
|
|
|
|
ThermalZone (THRM)
|
|
{
|
|
Name (_TC1, 0x02)
|
|
Name (_TC2, 0x05)
|
|
|
|
// Thermal zone polling frequency: 10 seconds
|
|
Name (_TZP, 100)
|
|
|
|
// Thermal sampling period for passive cooling: 2 seconds
|
|
Name (_TSP, 20)
|
|
|
|
// Convert from Degrees C to 1/10 Kelvin for ACPI
|
|
Method (CTOK, 1) {
|
|
// 10th of Degrees C
|
|
Multiply (Arg0, 10, Local0)
|
|
|
|
// Convert to Kelvin
|
|
Add (Local0, 2732, Local0)
|
|
|
|
Return (Local0)
|
|
}
|
|
|
|
// Threshold for OS to shutdown
|
|
Method (_CRT, 0, Serialized)
|
|
{
|
|
Return (CTOK (\TCRT))
|
|
}
|
|
|
|
// Threshold for passive cooling
|
|
Method (_PSV, 0, Serialized)
|
|
{
|
|
Return (CTOK (\TPSV))
|
|
}
|
|
|
|
// Processors used for passive cooling
|
|
Method (_PSL, 0, Serialized)
|
|
{
|
|
Return (\PPKG ())
|
|
}
|
|
|
|
Method (TCHK, 0, Serialized)
|
|
{
|
|
// Get Temperature from TIN# set in NVS
|
|
Store (\_SB.PCI0.LPCB.EC0.TINS (TMPS), Local0)
|
|
|
|
// Check for sensor not calibrated
|
|
If (LEqual (Local0, \_SB.PCI0.LPCB.EC0.TNCA)) {
|
|
Return (CTOK(0))
|
|
}
|
|
|
|
// Check for sensor not present
|
|
If (LEqual (Local0, \_SB.PCI0.LPCB.EC0.TNPR)) {
|
|
Return (CTOK(0))
|
|
}
|
|
|
|
// Check for sensor not powered
|
|
If (LEqual (Local0, \_SB.PCI0.LPCB.EC0.TNOP)) {
|
|
Return (CTOK(0))
|
|
}
|
|
|
|
// Check for sensor bad reading
|
|
If (LEqual (Local0, \_SB.PCI0.LPCB.EC0.TBAD)) {
|
|
Return (CTOK(0))
|
|
}
|
|
|
|
// Adjust by offset to get Kelvin
|
|
Add (\_SB.PCI0.LPCB.EC0.TOFS, Local0, Local0)
|
|
|
|
// Convert to 1/10 Kelvin
|
|
Multiply (Local0, 10, Local0)
|
|
Return (Local0)
|
|
}
|
|
|
|
Method (_TMP, 0, Serialized)
|
|
{
|
|
// Get temperature from EC in deci-kelvin
|
|
Store (TCHK (), Local0)
|
|
|
|
// Critical temperature in deci-kelvin
|
|
Store (CTOK (\TCRT), Local1)
|
|
|
|
If (LGreaterEqual (Local0, Local1)) {
|
|
Store ("CRITICAL TEMPERATURE", Debug)
|
|
Store (Local0, Debug)
|
|
|
|
// Wait 1 second for EC to re-poll
|
|
Sleep (1000)
|
|
|
|
// Re-read temperature from EC
|
|
Store (TCHK (), Local0)
|
|
|
|
Store ("RE-READ TEMPERATURE", Debug)
|
|
Store (Local0, Debug)
|
|
}
|
|
|
|
Return (Local0)
|
|
}
|
|
}
|
|
}
|