Re: [PATCH v2] dmaengine: qcom: gpi: Fix SE ID and SE Protocol fields widths in SCRATCH_0
From: Frank Li
Date: Fri Oct 16 2026 - 12:15:58 EST
On Tue, Jul 21, 2026 at 04:15:46AM -0700, Chandana Kishori Chiluveru wrote:
> GPII_n_CH_k_SCRATCH_0_SEID is currently defined as GENMASK(2, 0), only
> 3 bits wide. Serial engine indices >= 8 get silently truncated by
> FIELD_PREP()/u32_encode_bits() when written into the scratch register,
> causing the GPI channel to bind to the wrong serial engine. The
> channel allocate command still succeeds (it doesn't require the
> target SE to respond), but the subsequent channel start command times
> out waiting for hardware to complete the handoff to the (incorrectly
> bound) SE, and gpi_send_cmd() returns -EIO leading to GSI usecase failures
> for SE8 and SE9 serial engines.
>
> Older documentation, such as the SDM845 hardware programming guide,
> describes the SE ID field as bits [2:0]. More recent QUP hardware
> documentation defines the field as bits [3:0]. Use the wider definition
> to match current hardware documentation while remaining compatible with
> existing platforms and enabling serial engine IDs greater than 7.
>
> Also update the SE Protocol field definition to match the documented
> register layout and keep both fields correctly packed.
>
> Fixes: 5d0c3533a19f ("dmaengine: qcom: Add GPI dma driver")
> Signed-off-by: Chandana Kishori Chiluveru <chandana.chiluveru@xxxxxxxxxxxxxxxx>
> ---
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> Changes in v2:
> - Updated the protocol field value properly
> - Link to v1: https://patch.msgid.link/20260720-fix_se_id_and_se_protocol_fields-v1-1-e41dbb107d97@xxxxxxxxxxxxxxxx
> ---
> drivers/dma/qcom/gpi.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/dma/qcom/gpi.c b/drivers/dma/qcom/gpi.c
> index a5055a6273af..fc12cf9122f9 100644
> --- a/drivers/dma/qcom/gpi.c
> +++ b/drivers/dma/qcom/gpi.c
> @@ -207,8 +207,8 @@ enum CNTXT_OFFS {
>
> /* Scratch registers */
> #define GPII_n_CH_k_SCRATCH_0_OFFS(n, k) (0x20060 + (0x4000 * (n)) + (0x80 * (k)))
> -#define GPII_n_CH_k_SCRATCH_0_SEID GENMASK(2, 0)
> -#define GPII_n_CH_k_SCRATCH_0_PROTO GENMASK(7, 4)
> +#define GPII_n_CH_k_SCRATCH_0_SEID GENMASK(3, 0)
> +#define GPII_n_CH_k_SCRATCH_0_PROTO GENMASK(8, 4)
> #define GPII_n_CH_k_SCRATCH_0_PAIR GENMASK(20, 16)
> #define GPII_n_CH_k_SCRATCH_0(pair, proto, seid) \
> (FIELD_PREP(GPII_n_CH_k_SCRATCH_0_PAIR, pair) | \
>
> ---
> base-commit: 34cf6dafc47441dfb6b356a095b89c3585a93714
> change-id: 20260710-fix_se_id_and_se_protocol_fields-d7f0fe616596
>
> Best regards,
> --
> Chandana Kishori Chiluveru <chandana.chiluveru@xxxxxxxxxxxxxxxx>
>