mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
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>
34 lines
1.0 KiB
C
34 lines
1.0 KiB
C
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
/* Functions used to provide the Intel DPTF interface over ACPI */
|
|
|
|
#ifndef __CROS_EC_DPTF_H
|
|
#define __CROS_EC_DPTF_H
|
|
|
|
/* 0-100% sets fixed duty cycle, out of range means let the EC drive */
|
|
void dptf_set_fan_duty_target(int pct);
|
|
|
|
/* 0-100% if in duty mode. -1 if not */
|
|
int dptf_get_fan_duty_target(void);
|
|
|
|
/* Thermal thresholds may be set for each temp sensor. */
|
|
#define DPTF_THRESHOLDS_PER_SENSOR 2
|
|
#define DPTF_THRESHOLD_HYSTERESIS 2
|
|
|
|
/* Set/enable the thresholds */
|
|
void dptf_set_temp_threshold(int sensor_id, /* zero-based sensor index */
|
|
int temp, /* in degrees K */
|
|
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 */
|