On Wed, Aug 23, 2023 at 10:07:13AM -0700, Lucas De Marchi wrote: > From: Stanislav Lisovskiy <stanislav.lisovskiy@xxxxxxxxx> > > We now start calculating relative plane data rate for sursor plane as s/sursor/cursor/ > 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.lisovskiy@xxxxxxxxx> > Signed-off-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> Bspec: 68907 Reviewed-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > --- > .../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 > -- Matt Roper Graphics Software Engineer Linux GPU Platform Enablement Intel Corporation