}
 #endif
 
+static bool is_subvp_high_refresh_candidate(struct dc_stream_state *stream)
+{
+       uint32_t refresh_rate;
+       struct dc *dc = stream->ctx->dc;
+
+       refresh_rate = (stream->timing.pix_clk_100hz * (uint64_t)100 +
+               stream->timing.v_total * stream->timing.h_total - (uint64_t)1);
+       refresh_rate = div_u64(refresh_rate, stream->timing.v_total);
+       refresh_rate = div_u64(refresh_rate, stream->timing.h_total);
+
+       /* If there's any stream that fits the SubVP high refresh criteria,
+        * we must return true. This is because cursor updates are asynchronous
+        * with full updates, so we could transition into a SubVP config and
+        * remain in HW cursor mode if there's no cursor update which will
+        * then cause corruption.
+        */
+       if ((refresh_rate >= 120 && refresh_rate <= 165 &&
+                       stream->timing.v_addressable >= 1440 &&
+                       stream->timing.v_addressable <= 2160) &&
+                       (dc->current_state->stream_count > 1 ||
+                       (dc->current_state->stream_count == 1 && !stream->allow_freesync)))
+               return true;
+
+       return false;
+}
+
 /*
  * dc_stream_set_cursor_attributes() - Update cursor attributes and set cursor surface address
  */
 
        /* SubVP is not compatible with HW cursor larger than 64 x 64 x 4.
         * Therefore, if cursor is greater than 64 x 64 x 4, fallback to SW cursor in the following case:
-        * 1. For single display cases, if resolution is >= 5K and refresh rate < 120hz
-        * 2. For multi display cases, if resolution is >= 4K and refresh rate < 120hz
-        *
-        * [< 120hz is a requirement for SubVP configs]
+        * 1. If the config is a candidate for SubVP high refresh (both single an dual display configs)
+        * 2. If not subvp high refresh, for single display cases, if resolution is >= 5K and refresh rate < 120hz
+        * 3. If not subvp high refresh, for multi display cases, if resolution is >= 4K and refresh rate < 120hz
         */
        if (dc->debug.allow_sw_cursor_fallback && attributes->height * attributes->width * 4 > 16384) {
+               if (!dc->debug.disable_subvp_high_refresh && is_subvp_high_refresh_candidate(stream))
+                       return false;
                if (dc->current_state->stream_count == 1 && stream->timing.v_addressable >= 2880 &&
                                ((stream->timing.pix_clk_100hz * 100) / stream->timing.v_total / stream->timing.h_total) < 120)
                        return false;