diff mbox series

[RESEND] dmaengine: imx-sdma: support dual fifo for DEV_TO_DEV

Message ID 1711682887-15676-1-git-send-email-shengjiu.wang@nxp.com (mailing list archive)
State Handled Elsewhere
Headers show
Series [RESEND] dmaengine: imx-sdma: support dual fifo for DEV_TO_DEV | expand

Commit Message

Shengjiu Wang March 29, 2024, 3:28 a.m. UTC
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>
---
 drivers/dma/imx-sdma.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

Comments

Frank Li March 29, 2024, 4:18 a.m. UTC | #1
On Fri, Mar 29, 2024 at 11:28:07AM +0800, Shengjiu Wang wrote:
> 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>

This already in my sdma improvement patch list.

https://lore.kernel.org/imx/20240318-sdma_upstream-v3-0-da37ddd44d49@nxp.com/T/#m59e4e03a527103de7bf1a7fe86e8fbc570454970

This have more nice commit message. Can I take one into my patch series to
avoid conflict. 

Frank

> ---
>  drivers/dma/imx-sdma.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> index 9b42f5e96b1e..079e6e8f4f59 100644
> --- a/drivers/dma/imx-sdma.c
> +++ b/drivers/dma/imx-sdma.c
> @@ -137,7 +137,11 @@
>   *						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
> @@ -168,6 +172,8 @@
>  #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)
> @@ -1255,6 +1261,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)
> -- 
> 2.34.1
>
Shengjiu Wang March 29, 2024, 4:25 a.m. UTC | #2
On Fri, Mar 29, 2024 at 12:18 PM Frank Li <Frank.li@nxp.com> wrote:
>
> On Fri, Mar 29, 2024 at 11:28:07AM +0800, Shengjiu Wang wrote:
> > 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>
>
> This already in my sdma improvement patch list.
>
> https://lore.kernel.org/imx/20240318-sdma_upstream-v3-0-da37ddd44d49@nxp.com/T/#m59e4e03a527103de7bf1a7fe86e8fbc570454970
>
> This have more nice commit message. Can I take one into my patch series to
> avoid conflict.

Yes, please.

best regards
wang shengjiu
>
> Frank
>
> > ---
> >  drivers/dma/imx-sdma.c | 18 +++++++++++++++++-
> >  1 file changed, 17 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> > index 9b42f5e96b1e..079e6e8f4f59 100644
> > --- a/drivers/dma/imx-sdma.c
> > +++ b/drivers/dma/imx-sdma.c
> > @@ -137,7 +137,11 @@
> >   *                                           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
> > @@ -168,6 +172,8 @@
> >  #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)
> > @@ -1255,6 +1261,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)
> > --
> > 2.34.1
> >
diff mbox series

Patch

diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 9b42f5e96b1e..079e6e8f4f59 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -137,7 +137,11 @@ 
  *						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
@@ -168,6 +172,8 @@ 
 #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)
@@ -1255,6 +1261,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)