summaryrefslogtreecommitdiff
path: root/common/acpi.c
diff options
context:
space:
mode:
authorBill Richardson <wfrichar@chromium.org>2013-12-13 12:22:42 -0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-12-16 22:57:54 +0000
commit700adf4dea7f12fef6e8f12d34005d82ca58a3a2 (patch)
treea168e24f6a2a59e8592ec79e78bfb02d547c1033 /common/acpi.c
parentc450c2b2202cb3d835a0d8d709b5182c96c92c88 (diff)
downloadchrome-ec-700adf4dea7f12fef6e8f12d34005d82ca58a3a2.tar.gz
Let AP read sensor IDs when DPTF thermal thresholds crossed
The spec does not mandate any way to read back the threshold settings themselves, but when a threshold is crossed the AP needs a way to determine which sensor(s) are responsible. Each reading of the EC_ACPI_MEM_TEMP_ID register clears and returns one sensor ID that has crossed one of its thresholds (in either direction) since the last read. A value of 0xFF means "no new thresholds have tripped". Changing or enabling the thresholds for any sensor will clear the unread event count for that sensor. BUG=chrome-os-partner:23970 BRANCH=none TEST=manual On the host, set a couple of thresholds to low values so they trip immediately (I'm testing on Link): # dptf() { [ "$#" -eq "2" ] || return; iotools io_write8 0x66 0x81 iotools io_write8 0x62 $1 iotools io_write8 0x62 $2 } # # dptf 5 0 # dptf 6 10 # dptf 7 3 # dptf 5 2 # dptf 6 10 # dptf 7 2 On the EC console, see that two thresholds have triggered, and that there are two bits set in the AP seen mask: [45.755365 DPTF sensor 0, threshold -63 C, index 1, enabled] [45.768940 DPTF sensor 2, threshold -63 C, index 0, enabled] [46.169490 DPTF over threshold [0][1] [46.169820 DPTF over threshold [2][0] > dptftemp sensor thresh0 thresh1 0 --- 210* I2C-USB C-Die 1 --- --- I2C-USB C-Object 2 210* --- I2C-PCH D-Die 3 --- --- I2C-PCH D-Object 4 --- --- I2C-Hinge C-Die 5 --- --- I2C-Hinge C-Object 6 --- --- I2C-Charger D-Die 7 --- --- I2C-Charger D-Object 8 --- --- ECInternal 9 --- --- PECI AP seen mask: 0x00000005 > Read the EC_ACPI_MEM_TEMP_ID register from the host, to get the two active sensor IDs (0 and 2), then 0xff when those are seen. # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62 0x00 # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62 0x02 # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62 0xff # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62 0xff # Change-Id: I8f047a517357617f18ad59d21fa13409bc81821b Signed-off-by: Bill Richardson <wfrichar@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/180224 Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/acpi.c')
-rw-r--r--common/acpi.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/common/acpi.c b/common/acpi.c
index 68c281b6e6..69cf3bc837 100644
--- a/common/acpi.c
+++ b/common/acpi.c
@@ -71,6 +71,11 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
result = dptf_get_fan_duty_target();
break;
#endif
+#ifdef CONFIG_TEMP_SENSOR
+ case EC_ACPI_MEM_TEMP_ID:
+ result = dptf_query_next_sensor_event();
+ break;
+#endif
default:
CPRINTF("[%T ACPI read 0x%02x (ignored)]\n", acpi_addr);
break;