]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: SOF: Intel: hda-pcm: Limit the maximum number of periods by MAX_BDL_ENTRIES
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Thu, 4 Jul 2024 09:01:06 +0000 (11:01 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 4 Jul 2024 11:09:11 +0000 (12:09 +0100)
The HDaudio specification Section 3.6.2 limits the number of BDL entries to 256.

Make sure we don't allow more periods than this normative value.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://patch.msgid.link/20240704090106.371497-1-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-pcm.c

index 9fb8521b896ba07a8c0943400878c3a13a21e349..f6e24edd7adbe9b370b15e11af4b11585d363466 100644 (file)
@@ -258,6 +258,12 @@ int hda_dsp_pcm_open(struct snd_sof_dev *sdev,
        snd_pcm_hw_constraint_integer(substream->runtime,
                                      SNDRV_PCM_HW_PARAM_PERIODS);
 
+       /* Limit the maximum number of periods to not exceed the BDL entries count */
+       if (runtime->hw.periods_max > HDA_DSP_MAX_BDL_ENTRIES)
+               snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIODS,
+                                            runtime->hw.periods_min,
+                                            HDA_DSP_MAX_BDL_ENTRIES);
+
        /* Only S16 and S32 supported by HDA hardware when used without DSP */
        if (sdev->dspless_mode_selected)
                snd_pcm_hw_constraint_mask64(substream->runtime, SNDRV_PCM_HW_PARAM_FORMAT,