diff options
author | Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com> | 2017-07-28 00:45:32 +0530 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-07-28 14:53:19 +1000 |
commit | fa57f7ccff403e5035c5cec32f92ac4826438195 (patch) | |
tree | 003184371f20fff5b0db00c14608aac71929e62c /hw | |
parent | 89d80cad678e7cc9e6240b451f80793c953880e5 (diff) | |
download | skiboot-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')
-rw-r--r-- | hw/occ-sensor.c | 21 |
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++; } |