dmaengine: imx-sdma: support dual fifo for DEV_TO_DEV
authorShengjiu Wang <shengjiu.wang@nxp.com>
Fri, 29 Mar 2024 14:34:43 +0000 (10:34 -0400)
committerVinod Koul <vkoul@kernel.org>
Sun, 7 Apr 2024 11:19:25 +0000 (16:49 +0530)
SSI and SPDIF are dual fifo interface, when support ASRC P2P
with SSI and SPDIF, the src fifo or dst fifo number can be
two.

The p2p watermark level bit 13 and 14 are designed for
these use case. This patch is to complete this function
in driver.

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Signed-off-by: Joy Zou <joy.zou@nxp.com>
Acked-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20240329-sdma_upstream-v4-3-daeb3067dea7@nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/imx-sdma.c

index 6be4c1e4412665313833974facf295ec7fd7c1ee..f68ab34a3c8807a0f3f8b817aec59049e2990824 100644 (file)
  *                                             0: Source on AIPS
  *     12              Destination Bit(DP)     1: Destination on SPBA
  *                                             0: Destination on AIPS
- *     13-15           ---------               MUST BE 0
+ *     13              Source FIFO             1: Source is dual FIFO
+ *                                             0: Source is single FIFO
+ *     14              Destination FIFO        1: Destination is dual FIFO
+ *                                             0: Destination is single FIFO
+ *     15              ---------               MUST BE 0
  *     16-23           Higher WML              HWML
  *     24-27           N                       Total number of samples after
  *                                             which Pad adding/Swallowing
 #define SDMA_WATERMARK_LEVEL_SPDIF     BIT(10)
 #define SDMA_WATERMARK_LEVEL_SP                BIT(11)
 #define SDMA_WATERMARK_LEVEL_DP                BIT(12)
+#define SDMA_WATERMARK_LEVEL_SD                BIT(13)
+#define SDMA_WATERMARK_LEVEL_DD                BIT(14)
 #define SDMA_WATERMARK_LEVEL_HWML      (0xFF << 16)
 #define SDMA_WATERMARK_LEVEL_LWE       BIT(28)
 #define SDMA_WATERMARK_LEVEL_HWE       BIT(29)
@@ -1258,6 +1264,16 @@ static void sdma_set_watermarklevel_for_p2p(struct sdma_channel *sdmac)
                sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_DP;
 
        sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_CONT;
+
+       /*
+        * Limitation: The p2p script support dual fifos in maximum,
+        * So when fifo number is larger than 1, force enable dual
+        * fifos.
+        */
+       if (sdmac->n_fifos_src > 1)
+               sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_SD;
+       if (sdmac->n_fifos_dst > 1)
+               sdmac->watermark_level |= SDMA_WATERMARK_LEVEL_DD;
 }
 
 static void sdma_set_watermarklevel_for_sais(struct sdma_channel *sdmac)