summaryrefslogtreecommitdiff
path: root/src/mainboard
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2013-06-28 15:59:19 -0700
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>2013-12-07 03:28:48 +0100
commitddf68901f7640aa3789e2c04159804142ca26812 (patch)
tree848ef46df77203b96bde462a8290e1ea39d5428a /src/mainboard
parent10a070b447c2b847352b3fc9b8e23cb51a080309 (diff)
peppy: Enable power limiting for thermal control
Limit power to 12W at 73C and remove limit at 68C. To have the CPU consume maximum power it is necessary to stress both the CPU and the GPU. Bastion (chrome.supergiantgames.com) and/or webglsamples.googlecode.com can be useful for this. Testing this properly requires a script to report the running average power readings. The watch_power.sh script is attached to this issue in the partner tracker. 1) Run watch_power.sh continuously: localhost ~ # watch -n 0 bash -e /tmp/watch_power.sh 2) Start Bastion (or other stress apps). The power draw should be close to 15W if under enough load. 3) Watch until temperature climbs above 73C and is caught by the thermal zone 10 second poll, this can be sped up by blocking or removing the fan. 4) The ACPI thermal zone states should change to reflect that active[2] is now enabled and power consumption should drop to 12W. 5) Stop the stress apps and wait until the CPU cools off again, enable the fan again if it was removed. 6) The ACPI thermal zone state should switch back to active[3]. Change-Id: Ie6714a8543d4f06edf8513086fc9c968273bdb23 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/60545 Reviewed-on: http://review.coreboot.org/4335 Tested-by: build bot (Jenkins) Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Diffstat (limited to 'src/mainboard')
-rw-r--r--src/mainboard/google/peppy/acpi/thermal.asl10
-rw-r--r--src/mainboard/google/peppy/acpi_tables.c13
-rw-r--r--src/mainboard/google/peppy/thermal.h15
3 files changed, 21 insertions, 17 deletions
diff --git a/src/mainboard/google/peppy/acpi/thermal.asl b/src/mainboard/google/peppy/acpi/thermal.asl
index 69b6ac9834..67f83ef142 100644
--- a/src/mainboard/google/peppy/acpi/thermal.asl
+++ b/src/mainboard/google/peppy/acpi/thermal.asl
@@ -126,12 +126,18 @@ Scope (\_TZ)
}
Method (_ON) {
Store (0, \FLVL)
- \_SB.PCI0.MCHC.STND ()
+
+ /* Enable Power Limit */
+ \_SB.PCI0.MCHC.CTLE (\F0PW)
+
Notify (\_TZ.THRM, 0x81)
}
Method (_OFF) {
Store (1, \FLVL)
- \_SB.PCI0.MCHC.STDN ()
+
+ /* Disable Power Limit */
+ \_SB.PCI0.MCHC.CTLD ()
+
Notify (\_TZ.THRM, 0x81)
}
}
diff --git a/src/mainboard/google/peppy/acpi_tables.c b/src/mainboard/google/peppy/acpi_tables.c
index 7a3ccea50c..4d862ca29a 100644
--- a/src/mainboard/google/peppy/acpi_tables.c
+++ b/src/mainboard/google/peppy/acpi_tables.c
@@ -44,13 +44,16 @@ unsigned long acpi_create_slic(unsigned long current);
static void acpi_update_thermal_table(global_nvs_t *gnvs)
{
- gnvs->tmps = CTDP_SENSOR_ID;
+ gnvs->tmps = CTL_TDP_SENSOR_ID;
- gnvs->f1of = CTDP_NOMINAL_THRESHOLD_OFF;
- gnvs->f1on = CTDP_NOMINAL_THRESHOLD_ON;
+ /* Normal TDP */
+ gnvs->f1of = 0;
+ gnvs->f1on = 0;
- gnvs->f0of = CTDP_DOWN_THRESHOLD_OFF;
- gnvs->f0on = CTDP_DOWN_THRESHOLD_ON;
+ /* Limited TDP */
+ gnvs->f0of = CTL_TDP_THRESHOLD_OFF;
+ gnvs->f0on = CTL_TDP_THRESHOLD_ON;
+ gnvs->f0pw = CTL_TDP_POWER_LIMIT;
gnvs->tcrt = CRITICAL_TEMPERATURE;
gnvs->tpsv = PASSIVE_TEMPERATURE;
diff --git a/src/mainboard/google/peppy/thermal.h b/src/mainboard/google/peppy/thermal.h
index fceaeca6b9..a038502038 100644
--- a/src/mainboard/google/peppy/thermal.h
+++ b/src/mainboard/google/peppy/thermal.h
@@ -20,16 +20,11 @@
#ifndef THERMAL_H
#define THERMAL_H
-/* Config TDP Sensor ID */
-#define CTDP_SENSOR_ID 1 /* PECI */
-
-/* Config TDP Nominal */
-#define CTDP_NOMINAL_THRESHOLD_OFF 0
-#define CTDP_NOMINAL_THRESHOLD_ON 0
-
-/* Config TDP Down */
-#define CTDP_DOWN_THRESHOLD_OFF 80
-#define CTDP_DOWN_THRESHOLD_ON 90
+/* Control TDP Settings */
+#define CTL_TDP_SENSOR_ID 1 /* PECI */
+#define CTL_TDP_POWER_LIMIT 12 /* 12W */
+#define CTL_TDP_THRESHOLD_OFF 68 /* Normal at 68C */
+#define CTL_TDP_THRESHOLD_ON 73 /* Limited at 73C */
/* Temperature which OS will shutdown at */
#define CRITICAL_TEMPERATURE 104