Re: [PATCH v2] dmaengine: mmp_pdma: fix wrong extended DRCMR base for SpacemiT K3
Frank Li <[email protected]>
| Newsgroups | dev.linux.lists.spacemit,org.infradead.lists.linux-riscv,org.kernel.vger.dmaengine,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <an938oW_b_W-AYeE@lizhi-Precision-Tower-5810> |
On Mon, Jul 27, 2026 at 01:26:15AM -0700, Troy Mitchell wrote:
> The extended DRCMR window on SpacemiT K3 starts at 0x1100. Commit
> 6587b8661a0b ("dmaengine: mmp_pdma: add SpacemiT K3 support") incorrectly
> set it to 0x1000, causing DRCMR accesses for request IDs >= 64 to target
> offsets 0x100 too low.
>
> The 0x1100 base has been verified on K3 silicon using real SPI and QSPI
> DMA transactions. The K3 DMA documentation [1] was updated on June 24,
> 2026, to reflect the corrected register addresses.
>
> Drop the bogus DRCMR_EXT_BASE_K3 macro and reuse
> DRCMR_EXT_BASE_DEFAULT for the K3 ops.
>
> Fixes: 6587b8661a0b ("dmaengine: mmp_pdma: add SpacemiT K3 support")
> Link: https://www.spacemit.com/community/document/info?nodepath=hardware/key_stone/k3/k3_docs/k3_usermanual/16_peripherals/dma.md&lang=en [1]
> Signed-off-by: Troy Mitchell <[email protected]>
> ---
Reviewed-by: Frank Li <[email protected]>
> This is a minimal fix for the wrong DRCMR_EXT_BASE_K3 value introduced
> by commit 6587b8661a0b ("dmaengine: mmp_pdma: add SpacemiT K3 support").
> K3 silicon uses 0x1100 as the extended DRCMR base, so the K3 ops now
> reuse DRCMR_EXT_BASE_DEFAULT.
>
> I deliberately kept the per-ops drcmr_ext_base field and the
> DRCMR_EXT_BASE_DEFAULT macro to preserve the extensibility that was
> introduced together with the helper refactor, in case a future PDMA
> variant ends up using a different extended base. If reviewers prefer
> to drop this abstraction entirely and collapse it back to a single
> constant now that all known users share the same value, I am happy to
> send a v3 that removes the drcmr_ext_base ops field as a cleanup.
> ---
> Changes in v2:
> - Reword the commit message to remove the inaccurate K1 comparison.
> - Mention successful SPI and QSPI DMA tests on K3 silicon in the commit
> message.
> - Add a link to the corrected K3 DMA documentation, updated June 24,
> 2026.
> - Link to v1: https://patch.msgid.link/20260615-k3-pdma-fix-drcmr-base-v1-1-ee1af124199f@linux.spacemit.com
>
> To: Vinod Koul <[email protected]>
> To: Frank Li <[email protected]>
> To: Yixun Lan <[email protected]>
> To: Guodong Xu <[email protected]>
> To: Troy Mitchell <[email protected]>
> To: Paul Walmsley <[email protected]>
> To: Palmer Dabbelt <[email protected]>
> To: Albert Ou <[email protected]>
> To: Alexandre Ghiti <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> ---
> drivers/dma/mmp_pdma.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c
> index 386e85cd4882..78e3e07e681d 100644
> --- a/drivers/dma/mmp_pdma.c
> +++ b/drivers/dma/mmp_pdma.c
> @@ -52,7 +52,6 @@
> #define DCSR_EORINTR BIT(9) /* The end of Receive */
>
> #define DRCMR_BASE 0x0100
> -#define DRCMR_EXT_BASE_K3 0x1000
> #define DRCMR_EXT_BASE_DEFAULT 0x1100
> #define DRCMR_REQ_LIMIT 64
> #define DRCMR_MAPVLD BIT(7) /* Map Valid (read / write) */
> @@ -1219,7 +1218,7 @@ static const struct mmp_pdma_ops spacemit_k3_pdma_ops = {
> .get_desc_dst_addr = get_desc_dst_addr_64,
> .run_bits = (DCSR_RUN | DCSR_LPAEEN | DCSR_EORIRQEN | DCSR_EORSTOPEN),
> .dma_width = 64,
> - .drcmr_ext_base = DRCMR_EXT_BASE_K3,
> + .drcmr_ext_base = DRCMR_EXT_BASE_DEFAULT,
> };
>
> static const struct of_device_id mmp_pdma_dt_ids[] = {
>
> ---
> base-commit: c425609d6ac4012c8bbf01ec2e10e801b1923a7b
> change-id: 20260615-k3-pdma-fix-drcmr-base-326536770427
>
> Best regards,
> --
> Troy Mitchell <[email protected]>
>