Commit 187a002b authored by Cristian Marussi's avatar Cristian Marussi Committed by Sudeep Holla

firmware: arm_scmi: Avoid padding in sensor message structure

scmi_resp_sensor_reading_complete structure is meant to represent an
SCMI asynchronous reading complete message. The readings field with
a 64bit type forces padding and breaks reads in scmi_sensor_reading_get.

Split it in two adjacent 32bit readings_low/high subfields to avoid the
padding within the structure. Alternatively we could to mark the structure
packed.

Link: https://lore.kernel.org/r/20210628170042.34105-1-cristian.marussi@arm.com
Fixes: e2083d36 ("firmware: arm_scmi: Add SCMI v3.0 sensors timestamped reads")
Signed-off-by: default avatarCristian Marussi <cristian.marussi@arm.com>
Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent b98cf55e
...@@ -166,7 +166,8 @@ struct scmi_msg_sensor_reading_get { ...@@ -166,7 +166,8 @@ struct scmi_msg_sensor_reading_get {
struct scmi_resp_sensor_reading_complete { struct scmi_resp_sensor_reading_complete {
__le32 id; __le32 id;
__le64 readings; __le32 readings_low;
__le32 readings_high;
}; };
struct scmi_sensor_reading_resp { struct scmi_sensor_reading_resp {
...@@ -717,7 +718,8 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph, ...@@ -717,7 +718,8 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph,
resp = t->rx.buf; resp = t->rx.buf;
if (le32_to_cpu(resp->id) == sensor_id) if (le32_to_cpu(resp->id) == sensor_id)
*value = get_unaligned_le64(&resp->readings); *value =
get_unaligned_le64(&resp->readings_low);
else else
ret = -EPROTO; ret = -EPROTO;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment