[Intel-gfx] [Intel-xe] [PATCH 15/42] drm/i915/xe2lpd: Treat cursor plane as regular plane for DDB allocation
Matt Roper
matthew.d.roper at intel.com
Wed Aug 23 18:08:22 UTC 2023
On Wed, Aug 23, 2023 at 10:07:13AM -0700, Lucas De Marchi wrote:
> From: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
>
> 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 at intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
Bspec: 68907
Reviewed-by: Matt Roper <matthew.d.roper at 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
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-gfx
mailing list