From ef95c35647c814a7e817389dbd739e72b6837060 Mon Sep 17 00:00:00 2001 From: Shengjiu Wang Date: Fri, 30 Apr 2021 16:21:56 +0800 Subject: [PATCH] LF-3724-9: ASoC: fsl_sai: Set proper burst size for multi-fifo case multi fifo sdma script needs the maxburst = words_per_fifo * pins And the update the watermark level accordingly. Signed-off-by: Shengjiu Wang Reviewed-by: Robin Gong --- sound/soc/fsl/fsl_sai.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 4303df1788f3..68f69fb03eec 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -646,16 +646,24 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, sai->audio_config[tx].words_per_fifo = min(slots, channels); sai->audio_config[tx].dst_fifo_num = pins; sai->audio_config[tx].dst_fifo_off = dl_cfg[dl_cfg_idx].offset[tx]; - sai->dma_params_tx.maxburst = FSL_SAI_MAXBURST_TX * pins; + sai->dma_params_tx.maxburst = sai->audio_config[tx].words_per_fifo * pins; sai->dma_params_tx.peripheral_config = &sai->audio_config[tx]; sai->dma_params_tx.peripheral_size = sizeof(sai->audio_config[tx]); + + regmap_update_bits(sai->regmap, FSL_SAI_TCR1(ofs), + FSL_SAI_CR1_RFW_MASK(sai->soc_data->fifo_depth), + sai->soc_data->fifo_depth - sai->dma_params_tx.maxburst); } else { sai->audio_config[tx].words_per_fifo = min(slots, channels); sai->audio_config[tx].src_fifo_num = pins; sai->audio_config[tx].src_fifo_off = dl_cfg[dl_cfg_idx].offset[tx]; - sai->dma_params_rx.maxburst = FSL_SAI_MAXBURST_RX * pins; + sai->dma_params_rx.maxburst = sai->audio_config[tx].words_per_fifo * pins; sai->dma_params_rx.peripheral_config = &sai->audio_config[tx]; sai->dma_params_rx.peripheral_size = sizeof(sai->audio_config[tx]); + + regmap_update_bits(sai->regmap, FSL_SAI_RCR1(ofs), + FSL_SAI_CR1_RFW_MASK(sai->soc_data->fifo_depth), + sai->dma_params_rx.maxburst - 1); } } -- 2.17.1