]> www.infradead.org Git - users/hch/misc.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)
committerMark Brown <broonie@kernel.org>
Thu, 2 Oct 2025 14:03:31 +0000 (15:03 +0100)
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>
sound/soc/sof/ipc4-topology.c
sound/soc/sof/ipc4-topology.h

index b6a732d0adb4b7be8b73a9e51278ea11744c1611..60cd7955e24f1a8dc53b734ec2d711313ebdbd89 100644 (file)
@@ -666,8 +666,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 d6894fdd7e1dc5e82a4baf37ce353ef802bdc1ad..fc3b6411b9b2cefc9abae4dbc71b58d850e0b359 100644 (file)
@@ -73,6 +73,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