Commit fe099c38 authored by Alexander Wilhelm's avatar Alexander Wilhelm Committed by Bjorn Andersson
Browse files

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: default avatarAlexander Wilhelm <alexander.wilhelm@westermo.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20251119104008.3505152-4-alexander.wilhelm@westermo.com


Signed-off-by: default avatarBjorn Andersson <andersson@kernel.org>
parent d9c83903
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -406,6 +406,7 @@ static int qmi_encode(const struct qmi_elem_info *ei_array, void *out_buf,
			break;

		case QMI_DATA_LEN:
			memcpy(&data_len_value, buf_src, sizeof(u32));
			data_len_sz = temp_ei->elem_size == sizeof(u8) ?
					sizeof(u8) : sizeof(u16);
			/* 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,
				return -ETOOSMALL;
			}
			if (data_len_sz == sizeof(u8)) {
				val8 = *(u8 *)buf_src;
				data_len_value = (u32)val8;
				val8 = data_len_value;
				rc = qmi_encode_basic_elem(buf_dst, &val8,
							   1, data_len_sz);
				if (rc < 0)
					return rc;
			} else {
				val16 = *(u16 *)buf_src;
				data_len_value = (u32)le16_to_cpu(val16);
				val16 = data_len_value;
				rc = qmi_encode_basic_elem(buf_dst, &val16,
							   1, data_len_sz);
				if (rc < 0)
@@ -721,7 +720,6 @@ static int qmi_decode(const struct qmi_elem_info *ei_array, void *out_c_struct,
	int rc;
	u8 val8;
	u16 val16;
	u32 val32;

	while (decoded_bytes < in_buf_len) {
		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,
					return rc;
				data_len_value = (u32)val16;
			}
			val32 = cpu_to_le32(data_len_value);
			memcpy(buf_dst, &val32, sizeof(u32));
			memcpy(buf_dst, &data_len_value, sizeof(u32));
			temp_ei = temp_ei + 1;
			buf_dst = out_c_struct + temp_ei->offset;
			tlv_len -= data_len_sz;