aboutsummaryrefslogtreecommitdiff
path: root/hw/fsp/fsp-sensor.c
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2019-12-08 22:23:01 +1000
committerOliver O'Halloran <oohall@gmail.com>2019-12-16 14:50:56 +1100
commite3934d8c3f948300d346902467a8862a701a00bf (patch)
tree7684def4c143e86bce4593e9a4ff4a1b01e9e5c3 /hw/fsp/fsp-sensor.c
parent390c4f5e7b3e24a2a015aa5ce99ed019f0087caa (diff)
downloadskiboot-e3934d8c3f948300d346902467a8862a701a00bf.zip
skiboot-e3934d8c3f948300d346902467a8862a701a00bf.tar.gz
skiboot-e3934d8c3f948300d346902467a8862a701a00bf.tar.bz2
fsp: endian conversions
Reviewed-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Diffstat (limited to 'hw/fsp/fsp-sensor.c')
-rw-r--r--hw/fsp/fsp-sensor.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/hw/fsp/fsp-sensor.c b/hw/fsp/fsp-sensor.c
index 46385b0..5cff258 100644
--- a/hw/fsp/fsp-sensor.c
+++ b/hw/fsp/fsp-sensor.c
@@ -191,7 +191,7 @@ static uint32_t sensor_power_process_data(uint16_t rid,
prlog(PR_TRACE, "Power[%d]: %d mW\n", i,
power->supplies[i].milliwatts);
if (rid == normalize_power_rid(power->supplies[i].rid))
- return power->supplies[i].milliwatts / 1000;
+ return be32_to_cpu(power->supplies[i].milliwatts) / 1000;
}
return 0;
@@ -206,7 +206,7 @@ static void fsp_sensor_process_data(struct opal_sensor_data *attr)
{
uint8_t *sensor_buf_ptr = (uint8_t *)sensor_buffer;
uint32_t sensor_data = INVALID_DATA;
- uint16_t sensor_mod_data[8];
+ __be16 sensor_mod_data[8];
int count;
for (count = 0; count < spcn_mod_data[attr->mod_index].entry_count;
@@ -220,18 +220,18 @@ static void fsp_sensor_process_data(struct opal_sensor_data *attr)
sensor_data = sensor_power_process_data(attr->rid,
(struct sensor_power *) sensor_buf_ptr);
break;
- } else if (sensor_mod_data[0] == attr->frc &&
- sensor_mod_data[1] == attr->rid) {
+ } else if (be16_to_cpu(sensor_mod_data[0]) == attr->frc &&
+ be16_to_cpu(sensor_mod_data[1]) == attr->rid) {
switch (attr->spcn_attr) {
case SENSOR_STATUS:
sensor_data =
- convert_status_to_fault(sensor_mod_data[3]);
+ convert_status_to_fault(be16_to_cpu(sensor_mod_data[3]));
break;
case SENSOR_THRS:
- sensor_data = sensor_mod_data[6];
+ sensor_data = be16_to_cpu(sensor_mod_data[6]);
break;
case SENSOR_DATA:
- sensor_data = sensor_mod_data[2];
+ sensor_data = be16_to_cpu(sensor_mod_data[2]);
break;
default:
break;
@@ -259,7 +259,7 @@ static int fsp_sensor_process_read(struct fsp_msg *resp_msg)
switch (mbx_rsp_status) {
case SP_RSP_STATUS_VALID_DATA:
sensor_state = SENSOR_VALID_DATA;
- size = resp_msg->data.words[1] & 0xffff;
+ size = fsp_msg_get_data_word(resp_msg, 1) & 0xffff;
break;
case SP_RSP_STATUS_INVALID_DATA:
log_simple_error(&e_info(OPAL_RC_SENSOR_READ),
@@ -308,7 +308,7 @@ static void fsp_sensor_read_complete(struct fsp_msg *msg)
prlog(PR_INSANE, "%s()\n", __func__);
- status = (msg->resp->data.words[1] >> 24) & 0xff;
+ status = (fsp_msg_get_data_word(msg->resp, 1) >> 24) & 0xff;
size = fsp_sensor_process_read(msg->resp);
fsp_freemsg(msg);
@@ -576,8 +576,7 @@ static struct dt_node *sensor_get_node(struct dt_node *sensors,
* Just use the resource class name and resource id. This
* should be obvious enough for a node name.
*/
- snprintf(name, sizeof(name), "%s#%d-%s", frc_names[header->frc],
- header->rid, attrname);
+ snprintf(name, sizeof(name), "%s#%d-%s", frc_names[be16_to_cpu(header->frc)], be16_to_cpu(header->rid), attrname);
/*
* The same resources are reported by the different PRS
@@ -592,7 +591,7 @@ static struct dt_node *sensor_get_node(struct dt_node *sensors,
node = dt_new(sensors, name);
snprintf(name, sizeof(name), "ibm,opal-sensor-%s",
- frc_names[header->frc]);
+ frc_names[be16_to_cpu(header->frc)]);
dt_add_property_string(node, "compatible", name);
} else {
/**
@@ -608,7 +607,7 @@ static struct dt_node *sensor_get_node(struct dt_node *sensors,
}
#define sensor_handler(header, attr_num) \
- sensor_make_handler(SENSOR_FSP, (header).frc, (header).rid, attr_num)
+ sensor_make_handler(SENSOR_FSP, be16_to_cpu((header).frc), be16_to_cpu((header).rid), attr_num)
static int add_sensor_prs(struct dt_node *sensors, struct sensor_prs *prs)
{
@@ -655,7 +654,7 @@ static int add_sensor_data(struct dt_node *sensors,
* Some resource, like fans, get their status attribute from
* three different commands ...
*/
- if (data->header.frc == SENSOR_FRC_AMB_TEMP) {
+ if (be16_to_cpu(data->header.frc) == SENSOR_FRC_AMB_TEMP) {
node = sensor_get_node(sensors, &data->header, "faulted");
if (!node)
return -1;
@@ -677,15 +676,15 @@ static int add_sensor_power(struct dt_node *sensors, struct sensor_power *power)
for (i = 0; i < sensor_power_count(power); i++) {
struct sensor_header header = {
- SENSOR_FRC_POWER_SUPPLY,
- normalize_power_rid(power->supplies[i].rid)
+ cpu_to_be16(SENSOR_FRC_POWER_SUPPLY),
+ cpu_to_be16(normalize_power_rid(power->supplies[i].rid))
};
node = sensor_get_node(sensors, &header, "data");
prlog(PR_TRACE, "SENSOR: Power[%d] : %d mW\n",
power->supplies[i].rid,
- power->supplies[i].milliwatts);
+ be32_to_cpu(power->supplies[i].milliwatts));
dt_add_property_cells(node, "sensor-id",
sensor_handler(header, SENSOR_DATA));
@@ -715,7 +714,7 @@ static void add_sensor_ids(struct dt_node *sensors)
struct sensor_header *header =
(struct sensor_header *) sensor_buf_ptr;
- if (!sensor_frc_is_valid(header->frc))
+ if (!sensor_frc_is_valid(be16_to_cpu(header->frc)))
goto out_sensor;
switch (smod->mod) {
@@ -821,7 +820,7 @@ void fsp_init_sensor(void)
rc = fsp_sync_msg(&msg, false);
if (rc >= 0) {
- status = (resp.data.words[1] >> 24) & 0xff;
+ status = (fsp_msg_get_data_word(&resp, 1) >> 24) & 0xff;
size = fsp_sensor_process_read(&resp);
psi_dma_offset += size;
spcn_mod_data[index].entry_count += (size /