]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dmaengine: mmp_pdma: add SpacemiT K3 support
authorGuodong Xu <guodong@riscstar.com>
Mon, 18 May 2026 03:32:43 +0000 (11:32 +0800)
committerVinod Koul <vkoul@kernel.org>
Tue, 19 May 2026 17:16:17 +0000 (22:46 +0530)
SpacemiT K3 reuses most of the PDMA IP design found on K1, with one
difference being the extended DRCMR base address. Add "spacemit,k3-pdma"
compatible string and define a new mmp_pdma_ops for K3 PDMA.

Signed-off-by: Guodong Xu <guodong@riscstar.com>
Signed-off-by: Troy Mitchell <troy.mitchell@linux.spacemit.com>
Link: https://patch.msgid.link/20260518-k3-pdma-v6-3-67fdf319a8f8@linux.spacemit.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/mmp_pdma.c

index 6112369006eed3e51fcf8151f8247c150583873d..386e85cd4882a33d3e479de5b1bf4368d81a48f4 100644 (file)
@@ -52,6 +52,7 @@
 #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) */
@@ -1207,6 +1208,20 @@ static const struct mmp_pdma_ops spacemit_k1_pdma_ops = {
        .drcmr_ext_base = DRCMR_EXT_BASE_DEFAULT,
 };
 
+static const struct mmp_pdma_ops spacemit_k3_pdma_ops = {
+       .write_next_addr = write_next_addr_64,
+       .read_src_addr = read_src_addr_64,
+       .read_dst_addr = read_dst_addr_64,
+       .set_desc_next_addr = set_desc_next_addr_64,
+       .set_desc_src_addr = set_desc_src_addr_64,
+       .set_desc_dst_addr = set_desc_dst_addr_64,
+       .get_desc_src_addr = get_desc_src_addr_64,
+       .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,
+};
+
 static const struct of_device_id mmp_pdma_dt_ids[] = {
        {
                .compatible = "marvell,pdma-1.0",
@@ -1214,6 +1229,9 @@ static const struct of_device_id mmp_pdma_dt_ids[] = {
        }, {
                .compatible = "spacemit,k1-pdma",
                .data = &spacemit_k1_pdma_ops
+       }, {
+               .compatible = "spacemit,k3-pdma",
+               .data = &spacemit_k3_pdma_ops
        }, {
                /* sentinel */
        }