[PATCH v2] dmaengine: mmp_pdma: fix wrong extended DRCMR base for SpacemiT K3
Frank Li
Frank.li at oss.nxp.com
Fri Aug 14 13:17:54 PDT 2026
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 <troy.mitchell at linux.spacemit.com>
> ---
Reviewed-by: Frank Li <Frank.Li at nxp.com>
> 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 <vkoul at kernel.org>
> To: Frank Li <Frank.Li at kernel.org>
> To: Yixun Lan <dlan at kernel.org>
> To: Guodong Xu <guodong at riscstar.com>
> To: Troy Mitchell <troy.mitchell at linux.spacemit.com>
> To: Paul Walmsley <pjw at kernel.org>
> To: Palmer Dabbelt <palmer at dabbelt.com>
> To: Albert Ou <aou at eecs.berkeley.edu>
> To: Alexandre Ghiti <alex at ghiti.fr>
> Cc: dmaengine at vger.kernel.org
> Cc: linux-kernel at vger.kernel.org
> Cc: linux-riscv at lists.infradead.org
> Cc: spacemit at lists.linux.dev
> ---
> 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 <troy.mitchell at linux.spacemit.com>
>
More information about the linux-riscv
mailing list