/* From XE_LPD onwards we support from bpc upto uncompressed bpp-1 BPPs */
        if (DISPLAY_VER(i915) >= 13) {
                bits_per_pixel = min(bits_per_pixel, pipe_bpp - 1);
+
+               /*
+                * According to BSpec, 27 is the max DSC output bpp,
+                * 8 is the min DSC output bpp
+                */
+               bits_per_pixel = clamp_t(u32, bits_per_pixel, 8, 27);
        } else {
                /* Find the nearest match in the array of known BPPs from VESA */
                for (i = 0; i < ARRAY_SIZE(valid_dsc_bpp) - 1; i++) {
                min_slice_count = DIV_ROUND_UP(mode_clock,
                                               DP_DSC_MAX_ENC_THROUGHPUT_1);
 
+       /*
+        * Due to some DSC engine BW limitations, we need to enable second
+        * slice and VDSC engine, whenever we approach close enough to max CDCLK
+        */
+       if (mode_clock >= ((i915->display.cdclk.max_cdclk_freq * 85) / 100))
+               min_slice_count = max_t(u8, min_slice_count, 2);
+
        max_slice_width = drm_dp_dsc_sink_max_slice_width(intel_dp->dsc_dpcd);
        if (max_slice_width < DP_DSC_MIN_SLICE_WIDTH_VALUE) {
                drm_dbg_kms(&i915->drm,
         * is greater than the maximum Cdclock and if slice count is even
         * then we need to use 2 VDSC instances.
         */
-       if (adjusted_mode->crtc_clock > dev_priv->display.cdclk.max_cdclk_freq ||
-           pipe_config->bigjoiner_pipes) {
-               if (pipe_config->dsc.slice_count > 1) {
-                       pipe_config->dsc.dsc_split = true;
-               } else {
-                       drm_dbg_kms(&dev_priv->drm,
-                                   "Cannot split stream to use 2 VDSC instances\n");
-                       return -EINVAL;
-               }
-       }
+       if (pipe_config->bigjoiner_pipes || pipe_config->dsc.slice_count > 1)
+               pipe_config->dsc.dsc_split = true;
 
        ret = intel_dp_dsc_compute_params(&dig_port->base, pipe_config);
        if (ret < 0) {