Vagiz Tarkhanov has uploaded this change for review. ( https://review.coreboot.org/21843
Change subject: superio/ite/common: Add temperature offset ......................................................................
superio/ite/common: Add temperature offset
Add devicetree options to set temperature adjustment registers required for thermal diode sensors and PECI.
Without these adjustmets thermal diode sensors and PECI display raw values. For PECI it means negative temperatures.
I'd gladly update TMPINx shorthands to FANx format, but many boards already assume that TMPINx set mode.
Change-Id: Ibce6809ca86b6c7c0c696676e309665fc57965d4 Signed-off-by: Vagiz Tarkhanov rakkin@autistici.org --- M src/superio/ite/common/env_ctrl.c M src/superio/ite/common/env_ctrl.h M src/superio/ite/common/env_ctrl_chip.h 3 files changed, 47 insertions(+), 12 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/43/21843/1
diff --git a/src/superio/ite/common/env_ctrl.c b/src/superio/ite/common/env_ctrl.c index 1e313ce..5f216c1 100644 --- a/src/superio/ite/common/env_ctrl.c +++ b/src/superio/ite/common/env_ctrl.c @@ -99,13 +99,13 @@ * into TMPINx register */ static void enable_tmpin(const u16 base, const u8 tmpin, - const enum ite_ec_thermal_mode mode) + const struct ite_ec_thermal_config *const conf) { u8 reg;
reg = ite_ec_read(base, ITE_EC_ADC_TEMP_CHANNEL_ENABLE);
- switch (mode) { + switch (conf->mode) { case THERMAL_DIODE: reg |= ITE_EC_ADC_TEMP_DIODE_MODE(tmpin); break; @@ -115,11 +115,17 @@ default: printk(BIOS_WARNING, "Unsupported thermal mode 0x%x on TMPIN%d\n", - mode, tmpin); + conf->mode, tmpin); return; }
ite_ec_write(base, ITE_EC_ADC_TEMP_CHANNEL_ENABLE, reg); + + /* Set temperature offsets */ + reg = ite_ec_read(base, ITE_EC_BEEP_ENABLE); + reg |= ITE_EC_TEMP_ADJUST_WRITE_ENABLE; + ite_ec_write(base, ITE_EC_BEEP_ENABLE, reg); + ite_ec_write(base, ITE_EC_TEMP_ADJUST[tmpin-1], conf->offset);
/* Enable the startup of monitoring operation */ reg = ite_ec_read(base, ITE_EC_CONFIGURATION); @@ -233,7 +239,7 @@
/* Enable HWM if configured */ for (i = 0; i < ITE_EC_TMPIN_CNT; ++i) - enable_tmpin(base, i + 1, conf->tmpin_mode[i]); + enable_tmpin(base, i + 1, &conf->tmpin[i]);
/* Enable reading of voltage pins */ ite_ec_write(base, ITE_EC_ADC_VOLTAGE_CHANNEL_ENABLE, conf->vin_mask); diff --git a/src/superio/ite/common/env_ctrl.h b/src/superio/ite/common/env_ctrl.h index fa13116..1be6436 100644 --- a/src/superio/ite/common/env_ctrl.h +++ b/src/superio/ite/common/env_ctrl.h @@ -93,6 +93,26 @@ #define ITE_EC_ADC_TEMP_DIODE_MODE(x) (1 << ((x)-1)) #define ITE_EC_ADC_TEMP_EXTRA_CHANNEL_ENABLE 0x55
+/* Matches length of ITE_EC_TMPIN_CNT */ +static const u8 ITE_EC_TEMP_ADJUST[] = { 0x56, 0x57, 0x59 }; + +#define ITE_EC_BEEP_ENABLE 0x5C +#define ITE_EC_TEMP_ADJUST_WRITE_ENABLE (1 << 7) +#define ITE_EC_ADC_CLOCK_1MHZ (6 << 4) +#define ITE_EC_ADC_CLOCK_2MHZ (7 << 4) +#define ITE_EC_ADC_CLOCK_24MHZ (5 << 4) +#define ITE_EC_ADC_CLOCK_31KHZ (4 << 4) +#define ITE_EC_ADC_CLOCK_62KHZ (3 << 4) +#define ITE_EC_ADC_CLOCK_125KHZ (2 << 4) +#define ITE_EC_ADC_CLOCK_250KHZ (1 << 4) +#define ITE_EC_ADC_CLOCK_500KHZ (0 << 4) +#define ITE_EC_BEEP_ON_TMP_LIMIT (1 << 2) +#define ITE_EC_BEEP_ON_VIN_LIMIT (1 << 1) +#define ITE_EC_BEEP_ON_FAN_LIMIT (1 << 0) +#define ITE_EC_BEEP_FREQ_DIV_OF_FAN 0x5D +#define ITE_EC_BEEP_FREQ_DIV_OF_VOLT 0x5E +#define ITE_EC_BEEP_FREQ_DIV_OF_TEMP 0x5F + #define ITE_EC_FAN_CTL_TEMP_LIMIT_OFF(x) (0x60 + ((x)-1) * 8) #define ITE_EC_FAN_CTL_TEMP_LIMIT_START(x) (0x61 + ((x)-1) * 8) #define ITE_EC_FAN_CTL_TEMP_LIMIT_FULL(x) (0x62 + ((x)-1) * 8) diff --git a/src/superio/ite/common/env_ctrl_chip.h b/src/superio/ite/common/env_ctrl_chip.h index f01c574..a1bb89d 100644 --- a/src/superio/ite/common/env_ctrl_chip.h +++ b/src/superio/ite/common/env_ctrl_chip.h @@ -28,6 +28,12 @@ THERMAL_RESISTOR, };
+struct ite_ec_thermal_config { + enum ite_ec_thermal_mode mode; + /* Offset is used for diode sensors and PECI */ + u8 offset; +}; + /* Bit mask for voltage pins VINx */ enum ite_ec_voltage_pin { VIN0 = 0x01, @@ -74,25 +80,28 @@ u8 peci_tmpin;
/* - * Enable thermal mode on TMPINx. - */ - enum ite_ec_thermal_mode tmpin_mode[ITE_EC_TMPIN_CNT]; - - /* * Enable reading of voltage pins VINx. */ enum ite_ec_voltage_pin vin_mask;
/* + * Enable temperature sensors in given mode. + */ + struct ite_ec_thermal_config tmpin[ITE_EC_TMPIN_CNT]; + + /* * Enable a FAN in given mode. */ struct ite_ec_fan_config fan[ITE_EC_FAN_CNT]; + + /* FIXME: enable beep when exceeding TMPIN, VIN, FAN limits */ };
/* Some shorthands for device trees */ -#define TMPIN1 ec.tmpin_mode[0] -#define TMPIN2 ec.tmpin_mode[1] -#define TMPIN3 ec.tmpin_mode[2] +#define TMPIN1 ec.tmpin[0].mode +#define TMPIN2 ec.tmpin[1].mode +#define TMPIN3 ec.tmpin[2].mode + #define FAN1 ec.fan[0] #define FAN2 ec.fan[1] #define FAN3 ec.fan[2]