From: Stanislav Lisovskiy <stanislav.lisovs...@intel.com>

We now start calculating relative plane data rate for sursor plane as
well, as instructed by BSpec and also treat cursor plane same way as
other planes, when doing allocation, i.e not using fixed allocation for
cursor anymore.

Signed-off-by: Stanislav Lisovskiy <stanislav.lisovs...@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demar...@intel.com>
---
 .../gpu/drm/i915/display/intel_atomic_plane.c    |  6 +++---
 drivers/gpu/drm/i915/display/skl_watermark.c     | 16 +++++++++-------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c 
b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
index cb60165bc415..fb13f0bb8c52 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
@@ -219,9 +219,6 @@ intel_plane_relative_data_rate(const struct 
intel_crtc_state *crtc_state,
        int width, height;
        unsigned int rel_data_rate;
 
-       if (plane->id == PLANE_CURSOR)
-               return 0;
-
        if (!plane_state->uapi.visible)
                return 0;
 
@@ -249,6 +246,9 @@ intel_plane_relative_data_rate(const struct 
intel_crtc_state *crtc_state,
 
        rel_data_rate = width * height * fb->format->cpp[color_plane];
 
+       if (plane->id == PLANE_CURSOR)
+               return rel_data_rate;
+
        return intel_adjusted_rate(&plane_state->uapi.src,
                                   &plane_state->uapi.dst,
                                   rel_data_rate);
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c 
b/drivers/gpu/drm/i915/display/skl_watermark.c
index 063929a42a42..64a122d3c9c0 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -1367,7 +1367,7 @@ skl_total_relative_data_rate(const struct 
intel_crtc_state *crtc_state)
        u64 data_rate = 0;
 
        for_each_plane_id_on_crtc(crtc, plane_id) {
-               if (plane_id == PLANE_CURSOR)
+               if (plane_id == PLANE_CURSOR && DISPLAY_VER(i915) < 20)
                        continue;
 
                data_rate += crtc_state->rel_data_rate[plane_id];
@@ -1514,10 +1514,12 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state 
*state,
                return 0;
 
        /* Allocate fixed number of blocks for cursor. */
-       cursor_size = skl_cursor_allocation(crtc_state, num_active);
-       iter.size -= cursor_size;
-       skl_ddb_entry_init(&crtc_state->wm.skl.plane_ddb[PLANE_CURSOR],
-                          alloc->end - cursor_size, alloc->end);
+       if (DISPLAY_VER(i915) < 20) {
+               cursor_size = skl_cursor_allocation(crtc_state, num_active);
+               iter.size -= cursor_size;
+               skl_ddb_entry_init(&crtc_state->wm.skl.plane_ddb[PLANE_CURSOR],
+                                  alloc->end - cursor_size, alloc->end);
+       }
 
        iter.data_rate = skl_total_relative_data_rate(crtc_state);
 
@@ -1531,7 +1533,7 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state 
*state,
                        const struct skl_plane_wm *wm =
                                &crtc_state->wm.skl.optimal.planes[plane_id];
 
-                       if (plane_id == PLANE_CURSOR) {
+                       if (plane_id == PLANE_CURSOR && DISPLAY_VER(i915) < 20) 
{
                                const struct skl_ddb_entry *ddb =
                                        &crtc_state->wm.skl.plane_ddb[plane_id];
 
@@ -1579,7 +1581,7 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state 
*state,
                const struct skl_plane_wm *wm =
                        &crtc_state->wm.skl.optimal.planes[plane_id];
 
-               if (plane_id == PLANE_CURSOR)
+               if (plane_id == PLANE_CURSOR && DISPLAY_VER(i915) < 20)
                        continue;
 
                if (DISPLAY_VER(i915) < 11 &&
-- 
2.40.1

Reply via email to