Message ID | 1698824426-16111-1-git-send-email-shengjiu.wang@nxp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | dmaengine: imx-sdma: support dual fifo for DEV_TO_DEV | expand |
On 11/1/2023 9:40 AM, 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> Thanks, Iulia > --- > 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 f81ecf5863e8..892e23cc0ce8 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) > @@ -1259,6 +1265,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)
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index f81ecf5863e8..892e23cc0ce8 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) @@ -1259,6 +1265,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)