]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ASoC: SOF: ipc4-topology: Account for different ChainDMA host buffer size
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Thu, 2 Oct 2025 13:57:51 +0000 (16:57 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 19 Oct 2025 14:33:38 +0000 (16:33 +0200)
[ Upstream commit 3dcf683bf1062d69014fe81b90d285c7eb85ca8a ]

For ChainDMA the firmware allocates 5ms host buffer instead of the standard
4ms which should be taken into account when setting the constraint on the
buffer size.

Fixes: 842bb8b62cc6 ("ASoC: SOF: ipc4-topology: Save the DMA maximum burst size for PCMs")
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://patch.msgid.link/20251002135752.2430-3-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/sof/ipc4-topology.c
sound/soc/sof/ipc4-topology.h

index f82db7f2a6b7e74eb8655eb66e355bcb25dcc476..ac836d0d20de0103d5cac06bef47e99952745420 100644 (file)
@@ -519,8 +519,13 @@ static int sof_ipc4_widget_setup_pcm(struct snd_sof_widget *swidget)
                                      swidget->tuples,
                                      swidget->num_tuples, sizeof(u32), 1);
                /* Set default DMA buffer size if it is not specified in topology */
-               if (!sps->dsp_max_burst_size_in_ms)
-                       sps->dsp_max_burst_size_in_ms = SOF_IPC4_MIN_DMA_BUFFER_SIZE;
+               if (!sps->dsp_max_burst_size_in_ms) {
+                       struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget;
+                       struct sof_ipc4_pipeline *pipeline = pipe_widget->private;
+
+                       sps->dsp_max_burst_size_in_ms = pipeline->use_chain_dma ?
+                               SOF_IPC4_CHAIN_DMA_BUFFER_SIZE : SOF_IPC4_MIN_DMA_BUFFER_SIZE;
+               }
        } else {
                /* Capture data is copied from DSP to host in 1ms bursts */
                spcm->stream[dir].dsp_max_burst_size_in_ms = 1;
index 187e186ba4f8fceec6c89397f9527887d4f0098c..adb52a1eff85fc2a5301f403a874bc9f894afb41 100644 (file)
@@ -63,6 +63,9 @@
 /* FW requires minimum 4ms DMA buffer size */
 #define SOF_IPC4_MIN_DMA_BUFFER_SIZE   4
 
+/* ChainDMA in fw uses 5ms DMA buffer */
+#define SOF_IPC4_CHAIN_DMA_BUFFER_SIZE 5
+
 /*
  * The base of multi-gateways. Multi-gateways addressing starts from
  * ALH_MULTI_GTW_BASE and there are ALH_MULTI_GTW_COUNT multi-sources