[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <gsjo45cfnhonmstce4egjtid7u43klgxydmxf6z55n4wniv7xt@nqarkxghs3na>
Date: Wed, 19 Nov 2025 10:03:41 +0200
From: Dmitry Baryshkov <dmitry.baryshkov@....qualcomm.com>
To: Alexander Wilhelm <alexander.wilhelm@...termo.com>
Cc: Bjorn Andersson <andersson@...nel.org>,
Konrad Dybcio <konradybcio@...nel.org>, linux-arm-msm@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v4 RESEND 2/3] soc: qcom: fix QMI encoding/decoding for
basic elements
On Tue, Nov 18, 2025 at 07:53:40AM +0100, Alexander Wilhelm wrote:
> Extend the QMI byte encoding and decoding logic to support multiple basic
> data type sizes (u8, u16, u32, u64) using existing macros. Ensure correct
> handling of data sizes and proper byte order conversion on big-endian
> platforms by consistently applying these macros during encoding and
> decoding of basic elements.
>
> Signed-off-by: Alexander Wilhelm <alexander.wilhelm@...termo.com>
> ---
> drivers/soc/qcom/qmi_encdec.c | 46 +++++++++++++++++++++++------------
> 1 file changed, 30 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/soc/qcom/qmi_encdec.c b/drivers/soc/qcom/qmi_encdec.c
> index 1f9091458d72..90a48fa7ecf4 100644
> --- a/drivers/soc/qcom/qmi_encdec.c
> +++ b/drivers/soc/qcom/qmi_encdec.c
> @@ -23,13 +23,6 @@
> *p_length |= ((u8)*p_src) << 8; \
> } while (0)
>
> -#define QMI_ENCDEC_ENCODE_N_BYTES(p_dst, p_src, size) \
> -do { \
> - memcpy(p_dst, p_src, size); \
> - p_dst = (u8 *)p_dst + size; \
> - p_src = (u8 *)p_src + size; \
> -} while (0)
> -
> #define QMI_ENCDEC_ENCODE_U8(p_dst, p_src) \
> do { \
> memcpy(p_dst, p_src, sizeof(u8)); \
> @@ -58,13 +51,6 @@ do { \
> p_src = (u8 *)p_src + sizeof(u64); \
> } while (0)
>
> -#define QMI_ENCDEC_DECODE_N_BYTES(p_dst, p_src, size) \
> -do { \
> - memcpy(p_dst, p_src, size); \
> - p_dst = (u8 *)p_dst + size; \
> - p_src = (u8 *)p_src + size; \
> -} while (0)
> -
> #define QMI_ENCDEC_DECODE_U8(p_dst, p_src) \
> do { \
> memcpy(p_dst, p_src, sizeof(u8)); \
> @@ -225,7 +211,21 @@ static int qmi_encode_basic_elem(void *buf_dst, const void *buf_src,
> u32 i, rc = 0;
>
> for (i = 0; i < elem_len; i++) {
> - QMI_ENCDEC_ENCODE_N_BYTES(buf_dst, buf_src, elem_size);
> + switch (elem_size) {
> + case sizeof(u8):
> + QMI_ENCDEC_ENCODE_U8(buf_dst, buf_src);
> + break;
> + case sizeof(u16):
> + QMI_ENCDEC_ENCODE_U16(buf_dst, buf_src);
> + break;
> + case sizeof(u32):
> + QMI_ENCDEC_ENCODE_U32(buf_dst, buf_src);
> + break;
> + case sizeof(u64):
> + QMI_ENCDEC_ENCODE_U64(buf_dst, buf_src);
> + break;
default: scream?
> + }
> +
> rc += elem_size;
> }
>
> @@ -508,7 +508,21 @@ static int qmi_decode_basic_elem(void *buf_dst, const void *buf_src,
> u32 i, rc = 0;
>
> for (i = 0; i < elem_len; i++) {
> - QMI_ENCDEC_DECODE_N_BYTES(buf_dst, buf_src, elem_size);
> + switch (elem_size) {
> + case sizeof(u8):
> + QMI_ENCDEC_DECODE_U8(buf_dst, buf_src);
> + break;
> + case sizeof(u16):
> + QMI_ENCDEC_DECODE_U16(buf_dst, buf_src);
> + break;
> + case sizeof(u32):
> + QMI_ENCDEC_DECODE_U32(buf_dst, buf_src);
> + break;
> + case sizeof(u64):
> + QMI_ENCDEC_DECODE_U64(buf_dst, buf_src);
> + break;
same here
> + }
> +
> rc += elem_size;
> }
>
> --
> 2.43.0
>
--
With best wishes
Dmitry
Powered by blists - more mailing lists