[coreboot-gerrit] Patch set updated for coreboot: superio/it8772f: Add switch to enable HWM (Hardware Monitor)
Matt DeVillier (matt.devillier@gmail.com)
gerrit at coreboot.org
Thu Dec 31 00:25:55 CET 2015
Matt DeVillier (matt.devillier at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/12798
-gerrit
commit cc0a1e484ffccfc1ddf44a15701f8fb9e2ed12b9
Author: Ted Kuo <tedkuo at ami.com.tw>
Date: Wed Mar 18 10:42:22 2015 +0800
superio/it8772f: Add switch to enable HWM (Hardware Monitor)
Set up External Temperature to read via thermal diode/resistor
into TMPINx register by setting thermal_mode switch.
Original-Signed-off-by: Ted Kuo <tedkuo at ami.com.tw>
Change-Id: I0e8621b92faa5c6246e009d2f852c8d4db484034
Original-Reviewed-on: https://chromium-review.googlesource.com/260545
Original-Reviewed-by: Shawn N <shawnn at chromium.org>
Original-Commit-Queue: Ted Kuo <tedkuo at ami.com.tw>
Original-Tested-by: Ted Kuo <tedkuo at ami.com.tw>
Original-(cherry picked from commit 973e2d393f2595b756f8aa20f6fbe3b6e045621a)
Original-Reviewed-on: https://chromium-review.googlesource.com/262340
Signed-off-by: Matt DeVillier <matt.devillier at gmail.com>
---
src/superio/ite/it8772f/chip.h | 7 +++++++
src/superio/ite/it8772f/it8772f.h | 8 +++++++
src/superio/ite/it8772f/superio.c | 44 +++++++++++++++++++++++++++++++++++++++
3 files changed, 59 insertions(+)
diff --git a/src/superio/ite/it8772f/chip.h b/src/superio/ite/it8772f/chip.h
index 78ded22..0d80fb8 100644
--- a/src/superio/ite/it8772f/chip.h
+++ b/src/superio/ite/it8772f/chip.h
@@ -18,6 +18,7 @@
#define SUPERIO_ITE_IT8772F_CHIP_H
#include <device/device.h>
+#include "it8772f.h"
struct superio_ite_it8772f_config {
/* GPIO SimpleIO register values via devicetree.cb */
@@ -37,6 +38,12 @@ struct superio_ite_it8772f_config {
u8 peci_tmpin;
/*
+ * Enable thermal mode on tmpinx.
+ */
+ enum thermal_mode tmpin1_mode;
+ enum thermal_mode tmpin2_mode;
+
+ /*
* Enable a FAN for sofware control.
*/
u8 fan1_enable;
diff --git a/src/superio/ite/it8772f/it8772f.h b/src/superio/ite/it8772f/it8772f.h
index 8e82bef..2031fff 100644
--- a/src/superio/ite/it8772f/it8772f.h
+++ b/src/superio/ite/it8772f/it8772f.h
@@ -17,6 +17,13 @@
#ifndef SUPERIO_ITE_IT8772F_H
#define SUPERIO_ITE_IT8772F_H
+/* Supported thermal mode on TMPINx */
+enum thermal_mode {
+ THERMAL_MODE_DISABLED = 0,
+ THERMAL_DIODE,
+ THERMAL_RESISTOR,
+};
+
#define IT8772F_FDC 0x00 /* Floppy disk controller */
#define IT8772F_SP1 0x01 /* Com1 */
#define IT8772F_EC 0x04 /* Environment controller */
@@ -26,6 +33,7 @@
#define IT8772F_IR 0x0a /* Consumer IR */
/* Environmental Controller interface */
+#define IT8772F_CONFIGURATION 0x00
#define IT8772F_INTERFACE_SELECT 0x0a
#define IT8772F_INTERFACE_PSEUDO_EOC (1 << 7)
#define IT8772F_INTERFACE_SMB_ENABLE (1 << 6)
diff --git a/src/superio/ite/it8772f/superio.c b/src/superio/ite/it8772f/superio.c
index 6c6a503..89f7cff 100644
--- a/src/superio/ite/it8772f/superio.c
+++ b/src/superio/ite/it8772f/superio.c
@@ -16,6 +16,7 @@
#include <device/device.h>
#include <device/pnp.h>
+#include <console/console.h>
#include <pc80/keyboard.h>
#include <arch/io.h>
#include <delay.h>
@@ -97,6 +98,43 @@ static void it8772f_enable_peci(struct resource *res, int tmpin)
}
/*
+ * Set up External Temperature to read via thermal diode/resistor
+ * into TMPINx register
+ */
+static void it8772f_enable_tmpin(struct resource *res, int tmpin,
+ enum thermal_mode mode)
+{
+ u8 reg;
+
+ if (tmpin != 1 && tmpin != 2)
+ return;
+
+ reg = it8772f_envc_read(res, IT8772F_ADC_TEMP_CHANNEL_ENABLE);
+
+ switch (mode) {
+ case THERMAL_DIODE:
+ /* Thermal Diode Mode */
+ it8772f_envc_write(res, IT8772F_ADC_TEMP_CHANNEL_ENABLE,
+ reg | tmpin);
+ break;
+ case THERMAL_RESISTOR:
+ /* Thermal Resistor Mode */
+ it8772f_envc_write(res, IT8772F_ADC_TEMP_CHANNEL_ENABLE,
+ reg | (tmpin << 3));
+ break;
+ default:
+ printk(BIOS_ERR, "Unsupported thermal mode 0x%x on TMPIN%d\n",
+ mode, tmpin);
+ return;
+ }
+
+ reg = it8772f_envc_read(res, IT8772F_CONFIGURATION);
+
+ /* Enable the startup of monitoring operation */
+ it8772f_envc_write(res, IT8772F_CONFIGURATION, reg | 0x01);
+}
+
+/*
* Setup a FAN PWM interface for software control
*/
static void it8772f_enable_fan(struct resource *res, int fan)
@@ -160,6 +198,12 @@ static void it8772f_init(struct device *dev)
/* Enable PECI if configured */
it8772f_enable_peci(res, conf->peci_tmpin);
+ /* Enable HWM if configured */
+ if (conf->tmpin1_mode != THERMAL_MODE_DISABLED)
+ it8772f_enable_tmpin(res, 1, conf->tmpin1_mode);
+ if (conf->tmpin2_mode != THERMAL_MODE_DISABLED)
+ it8772f_enable_tmpin(res, 2, conf->tmpin2_mode);
+
/* Enable FANx if configured */
if (conf->fan1_enable)
it8772f_enable_fan(res, 1);
More information about the coreboot-gerrit
mailing list