aboutsummaryrefslogtreecommitdiff
path: root/hw/occ-sensor.c
diff options
context:
space:
mode:
authorShilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>2017-07-28 00:45:32 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-07-28 14:53:19 +1000
commitfa57f7ccff403e5035c5cec32f92ac4826438195 (patch)
tree003184371f20fff5b0db00c14608aac71929e62c /hw/occ-sensor.c
parent89d80cad678e7cc9e6240b451f80793c953880e5 (diff)
downloadskiboot-fa57f7ccff403e5035c5cec32f92ac4826438195.zip
skiboot-fa57f7ccff403e5035c5cec32f92ac4826438195.tar.gz
skiboot-fa57f7ccff403e5035c5cec32f92ac4826438195.tar.bz2
sensors: occ: Skip the deconfigured core sensors
This patch skips the deconfigured cores from the core sensors while parsing the sensor names in the main memory as these sensor values are not updated by OCC. Signed-off-by: Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/occ-sensor.c')
-rw-r--r--hw/occ-sensor.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/hw/occ-sensor.c b/hw/occ-sensor.c
index 2b7974a..87886db 100644
--- a/hw/occ-sensor.c
+++ b/hw/occ-sensor.c
@@ -19,6 +19,7 @@
#include <chip.h>
#include <sensor.h>
#include <device.h>
+#include <cpu.h>
/*
* OCC Sensor Data
@@ -474,9 +475,11 @@ static void add_sensor_label(struct dt_node *node, struct occ_sensor_name *md,
if (!strncmp(str_maps[i].occ_str, md->name,
strlen(str_maps[i].occ_str))) {
char *end;
- int num;
+ int num = -1;
+
+ if (md->location != OCC_SENSOR_LOC_CORE)
+ num = parse_entity(md->name, &end);
- num = parse_entity(md->name, &end);
if (num != -1) {
snprintf(sname, sizeof(sname), "%s%s %d %s",
prefix, str_maps[i].opal_str, num,
@@ -573,11 +576,22 @@ void occ_sensors_init(void)
char name[30];
const char *type, *loc;
struct dt_node *node;
+ struct cpu_thread *c = NULL;
u32 handler;
if (!(md[i].type & HWMON_SENSORS_MASK))
continue;
+ if (md[i].location == OCC_SENSOR_LOC_CORE) {
+ int num = parse_entity(md[i].name, NULL);
+
+ for_each_available_core_in_chip(c, chip->id)
+ if (pir_to_core_id(c->pir) == num)
+ break;
+ if (!c)
+ continue;
+ }
+
type = get_sensor_type_string(md[i].type);
loc = get_sensor_loc_string(md[i].location);
snprintf(name, sizeof(name), "%s-%s", loc, type);
@@ -598,6 +612,9 @@ void occ_sensors_init(void)
"ibm,opal-sensor");
dt_add_property_string(node, "occ_label", md[i].name);
add_sensor_label(node, &md[i], chip->id);
+
+ if (md[i].location == OCC_SENSOR_LOC_CORE)
+ dt_add_property_cells(node, "ibm,pir", c->pir);
}
occ_num++;
}