diff options
author | Duncan Laurie <dlaurie@chromium.org> | 2013-06-28 15:59:19 -0700 |
---|---|---|
committer | Alexandru Gagniuc <mr.nuke.me@gmail.com> | 2013-12-07 03:28:48 +0100 |
commit | ddf68901f7640aa3789e2c04159804142ca26812 (patch) | |
tree | 848ef46df77203b96bde462a8290e1ea39d5428a /src/mainboard | |
parent | 10a070b447c2b847352b3fc9b8e23cb51a080309 (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.asl | 10 | ||||
-rw-r--r-- | src/mainboard/google/peppy/acpi_tables.c | 13 | ||||
-rw-r--r-- | src/mainboard/google/peppy/thermal.h | 15 |
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 |