[Skiboot] [PATCH 03/11] dts: add device tree nodes for the core temperatures

Cédric Le Goater clg at fr.ibm.com
Thu Feb 5 17:30:51 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.

The device tree nodes use the new layout.

Signed-off-by: Cédric Le Goater <clg at fr.ibm.com>
---

Changes since RFC:

 - "/ibm,opal/sensors" needs to be created on open power platform

 core/sensor.c |    3 +++
 hw/dts.c      |   42 ++++++++++++++++++++++++++++++++++++++++++
 include/dts.h |    1 +
 3 files changed, 46 insertions(+)

diff --git a/core/sensor.c b/core/sensor.c
index 5db072e0e501..83ef2d98cd94 100644
--- a/core/sensor.c
+++ b/core/sensor.c
@@ -18,6 +18,7 @@
 #include <sensor.h>
 #include <skiboot.h>
 #include <opal.h>
+#include <dts.h>
 
 static int64_t opal_sensor_read(uint32_t sensor_hndl, int token,
 		uint32_t *sensor_data)
@@ -32,4 +33,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 288793a1c68d..356080e9e756 100644
--- a/hw/dts.c
+++ b/hw/dts.c
@@ -162,3 +162,45 @@ int64_t dts_sensor_read(uint32_t sensor_hndl, uint32_t *sensor_data)
 
 	return 0;
 }
+
+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) {
+		prlog(PR_WARNING, "DTS: creating node /ibm,opal/sensors\n");
+		sensors = dt_new(opal_node, "sensors");
+	}
+
+	/* 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_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