ASoC: SOF: ipc4-topology: set config_length based on device_count
authorBard Liao <yung-chuan.liao@linux.intel.com>
Tue, 13 Feb 2024 12:30:07 +0000 (14:30 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 13 Feb 2024 14:23:00 +0000 (14:23 +0000)
Set ipc4_copier->data.gtw_cfg.config_length dynamically based on
blob->alh_cfg.device_count to align with the other OS.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://msgid.link/r/20240213123007.29956-1-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/ipc4-topology.c

index f779156fe0e600965b493e5da9c92bf43a75a917..1dc935d737dd3069f0dc7cb0108b3b8be7ffc51c 100644 (file)
@@ -598,7 +598,11 @@ static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget)
                }
 
                ipc4_copier->copier_config = (uint32_t *)blob;
-               ipc4_copier->data.gtw_cfg.config_length = sizeof(*blob) >> 2;
+               /* set data.gtw_cfg.config_length based on device_count */
+               ipc4_copier->data.gtw_cfg.config_length = (sizeof(blob->gw_attr) +
+                                                          sizeof(blob->alh_cfg.device_count) +
+                                                          sizeof(*blob->alh_cfg.mapping) *
+                                                          blob->alh_cfg.device_count) >> 2;
                break;
        }
        case SOF_DAI_INTEL_SSP: