}
 
                // Include cursor size for CAB allocation
+               cursor_size = dc->caps.max_cursor_size * dc->caps.max_cursor_size;
+               switch (stream->cursor_attributes.color_format) {
+               case CURSOR_MODE_MONO:
+                       cursor_size /= 2;
+                       break;
+               case CURSOR_MODE_COLOR_1BIT_AND:
+               case CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA:
+               case CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA:
+                       cursor_size *= 4;
+                       break;
+
+               case CURSOR_MODE_COLOR_64BIT_FP_PRE_MULTIPLIED:
+               case CURSOR_MODE_COLOR_64BIT_FP_UN_PRE_MULTIPLIED:
+                       cursor_size *= 8;
+                       break;
+               }
+
                if (stream->cursor_position.enable && plane->address.grph.cursor_cache_addr.quad_part) {
-                       cursor_size = dc->caps.max_cursor_size * dc->caps.max_cursor_size;
-                       switch (stream->cursor_attributes.color_format) {
-                       case CURSOR_MODE_MONO:
-                               cursor_size /= 2;
-                               break;
-                       case CURSOR_MODE_COLOR_1BIT_AND:
-                       case CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA:
-                       case CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA:
-                               cursor_size *= 4;
-                               break;
-
-                       case CURSOR_MODE_COLOR_64BIT_FP_PRE_MULTIPLIED:
-                       case CURSOR_MODE_COLOR_64BIT_FP_UN_PRE_MULTIPLIED:
-                               cursor_size *= 8;
-                               break;
-                       }
                        cache_lines_used += dcn32_cache_lines_for_surface(dc, cursor_size,
                                        plane->address.grph.cursor_cache_addr.quad_part);
                }
        if (cache_lines_used % lines_per_way > 0)
                num_ways++;
 
+       if (stream->cursor_position.enable &&
+           !plane->address.grph.cursor_cache_addr.quad_part &&
+           cursor_size > 16384)
+               /* Cursor caching is not supported since it won't be on the same line.
+                * So we need an extra line to accommodate it. With large cursors and a single 4k monitor
+                * this case triggers corruption. If we're at the edge, then dont trigger display refresh
+                * from MALL. We only need to cache cursor if its greater that 64x64 at 4 bpp.
+                */
+               num_ways++;
+
        return num_ways;
 }