[Skiboot] [RFC PATCH v2 3/9] dts: add device tree nodes for the core temperatures

Cédric Le Goater clg at fr.ibm.com
Thu Jan 22 18:09:16 AEDT 2015


This patch simply adds sensors nodes for the core temperatures. It
uses the core PIR as a resource identifier to fit in the sensor model.

For the moment, only the core temperature is exposed in the device
tree. The trip bits which could be provided as an alarm need to be 
investigated because they seem to be always set.

The device tree nodes use the new layout.

Signed-off-by: Cédric Le Goater <clg at fr.ibm.com>
---
 core/sensor.c |    2 ++
 hw/dts.c      |   42 ++++++++++++++++++++++++++++++++++++++++++
 include/dts.h |    1 +
 3 files changed, 45 insertions(+)

diff --git a/core/sensor.c b/core/sensor.c
index b109030d8c44..95ad03d91c3c 100644
--- a/core/sensor.c
+++ b/core/sensor.c
@@ -41,4 +41,6 @@ void sensor_init(void)
 {
 	/* Register OPAL interface */
 	opal_register(OPAL_SENSOR_READ, opal_sensor_read, 3);
+
+	dts_sensor_create_nodes();
 }
diff --git a/hw/dts.c b/hw/dts.c
index c94e879b192a..4590d0dba7b6 100644
--- a/hw/dts.c
+++ b/hw/dts.c
@@ -164,3 +164,45 @@ int64_t dts_sensor_read(uint32_t sensor_hndl, uint32_t *sensor_data)
 
 	return rc;
 }
+
+bool dts_sensor_create_nodes(void)
+{
+	uint8_t sensor_class = SENSOR_DTS_CORE_TEMP|SENSOR_DTS;
+
+	struct proc_chip *chip;
+	struct dt_node *sensors;
+	char name[64];
+
+	sensors = dt_find_by_path(dt_root, "/ibm,opal/sensors");
+	if (!sensors) {
+		prerror("DTS: dt node /ibm,opal/sensors not found\n");
+		return false;
+	}
+
+	/* build the device tree nodes :
+	 *
+	 *     sensors/core-temp at pir
+	 *
+	 * The core is identified by its PIR, is stored in the resource
+	 * number of the sensor handler.
+	 */
+	for_each_chip(chip) {
+		struct cpu_thread *c;
+
+		for_each_available_core_in_chip(c, chip->id) {
+			struct dt_node *node;
+			uint32_t handler;
+
+			snprintf(name, sizeof(name), "core-temp@%x", c->pir);
+
+			handler = sensor_make_handler(sensor_class,
+					c->pir, SENSOR_DTS_ATTR_CORE_TEMP_MAX);
+			node = dt_new(sensors, name);
+			dt_add_property_string(node, "compatible",
+					       "ibm,opal-sensor");
+			dt_add_property_cells(node, "sensor-data", handler);
+		}
+	}
+
+	return true;
+}
diff --git a/include/dts.h b/include/dts.h
index 18933909ee08..f506c58efb6f 100644
--- a/include/dts.h
+++ b/include/dts.h
@@ -20,5 +20,6 @@
 #include <stdint.h>
 
 extern int64_t dts_sensor_read(uint32_t sensor_hndl, uint32_t *sensor_data);
+extern bool dts_sensor_create_nodes(void);
 
 #endif /* __DTS_H */
-- 
1.7.10.4



More information about the Skiboot mailing list