Skip to content

Commit fe099c3

Browse files
alewi-westermoandersson
authored andcommitted
soc: qcom: preserve CPU endianness for QMI_DATA_LEN
To ensure correct handling of endianness in the QMI subsystem, the QMI_DATA_LEN field used in host-side drivers remains in CPU-native byte order. Remove unnecessary endianness conversions, considering that QMI_DATA_LEN is always of type `u32` on the host. On the QMI wire interface, however, its representation is variable and may use either 1 or 2 bytes. Signed-off-by: Alexander Wilhelm <alexander.wilhelm@westermo.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Link: https://lore.kernel.org/r/20251119104008.3505152-4-alexander.wilhelm@westermo.com Signed-off-by: Bjorn Andersson <andersson@kernel.org>
1 parent d9c8390 commit fe099c3

1 file changed

Lines changed: 4 additions & 7 deletions

File tree

drivers/soc/qcom/qmi_encdec.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ static int qmi_encode(const struct qmi_elem_info *ei_array, void *out_buf,
406406
break;
407407

408408
case QMI_DATA_LEN:
409+
memcpy(&data_len_value, buf_src, sizeof(u32));
409410
data_len_sz = temp_ei->elem_size == sizeof(u8) ?
410411
sizeof(u8) : sizeof(u16);
411412
/* Check to avoid out of range buffer access */
@@ -416,15 +417,13 @@ static int qmi_encode(const struct qmi_elem_info *ei_array, void *out_buf,
416417
return -ETOOSMALL;
417418
}
418419
if (data_len_sz == sizeof(u8)) {
419-
val8 = *(u8 *)buf_src;
420-
data_len_value = (u32)val8;
420+
val8 = data_len_value;
421421
rc = qmi_encode_basic_elem(buf_dst, &val8,
422422
1, data_len_sz);
423423
if (rc < 0)
424424
return rc;
425425
} else {
426-
val16 = *(u16 *)buf_src;
427-
data_len_value = (u32)le16_to_cpu(val16);
426+
val16 = data_len_value;
428427
rc = qmi_encode_basic_elem(buf_dst, &val16,
429428
1, data_len_sz);
430429
if (rc < 0)
@@ -721,7 +720,6 @@ static int qmi_decode(const struct qmi_elem_info *ei_array, void *out_c_struct,
721720
int rc;
722721
u8 val8;
723722
u16 val16;
724-
u32 val32;
725723

726724
while (decoded_bytes < in_buf_len) {
727725
if (dec_level >= 2 && temp_ei->data_type == QMI_EOTI)
@@ -773,8 +771,7 @@ static int qmi_decode(const struct qmi_elem_info *ei_array, void *out_c_struct,
773771
return rc;
774772
data_len_value = (u32)val16;
775773
}
776-
val32 = cpu_to_le32(data_len_value);
777-
memcpy(buf_dst, &val32, sizeof(u32));
774+
memcpy(buf_dst, &data_len_value, sizeof(u32));
778775
temp_ei = temp_ei + 1;
779776
buf_dst = out_c_struct + temp_ei->offset;
780777
tlv_len -= data_len_sz;

0 commit comments

Comments
 (0)