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,