summaryrefslogtreecommitdiff
path: root/include/dptf.h
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 /include/dptf.h
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 'include/dptf.h')
-rw-r--r--include/dptf.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/dptf.h b/include/dptf.h
index 31c9c09bca..f611acb361 100644
--- a/include/dptf.h
+++ b/include/dptf.h
@@ -24,4 +24,10 @@ void dptf_set_temp_threshold(int sensor_id, /* zero-based sensor index */
int idx, /* which threshold (0 or 1) */
int enable); /* true = on, false = off */
+/*
+ * Return the ID of a temp sensor that has crossed its threshold since the last
+ time we asked. -1 means none.
+ */
+int dptf_query_next_sensor_event(void);
+
#endif /* __CROS_EC_DPTF_H */