[Intel-gfx] [PATCH 6/9] drm/i915: Keep plane watermarks enabled more aggressively
Matt Roper
matthew.d.roper at intel.com
Tue Mar 19 00:09:39 UTC 2019
On Tue, Mar 12, 2019 at 10:58:41PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Currently we disable all the watermarks above the selected max
> level for every plane. That would mean that the cursor's watermarks
> may also get modified when another plane causes the selected
> max watermark level to change. That is not so great as we would
> like to keep the cursor as indepenedent as possible to avoid
> having to throttle it in resposne to other plane activity.
>
> To avoid that let's keep the watermarks enabled even for levels
> above the max selected watermark level, iff the plane has enough
> ddb for that particular level. This way the cursor's enabled
> watermarks only depend on the cursor itself. This is safe because
> the hardware will never choose to use a watermark level unless
> all enabled planes have also enabled that level.
>
> Cc: Neel Desai <neel.desai at intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
Iirc, we also had different levels enabled for different planes with the
old algorithm that calculated DDB first and watermarks second. So
agreed; this should be very safe.
Patches 1-6 are
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
Matt
> ---
> drivers/gpu/drm/i915/intel_pm.c | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index c866663b31bc..8afbc56ad89a 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -4500,7 +4500,22 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
> for (level++; level <= ilk_wm_max_level(dev_priv); level++) {
> for_each_plane_id_on_crtc(intel_crtc, plane_id) {
> wm = &cstate->wm.skl.optimal.planes[plane_id];
> - memset(&wm->wm[level], 0, sizeof(wm->wm[level]));
> +
> + /*
> + * We only disable the watermarks for each plane if
> + * they exceed the ddb allocation of said plane. This
> + * is done so that we don't end up touching cursor
> + * watermarks needlessly when some other plane reduces
> + * our max possible watermark level.
> + *
> + * Bspec has this to say about the PLANE_WM enable bit:
> + * "All the watermarks at this level for all enabled
> + * planes must be enabled before the level will be used."
> + * So this is actually safe to do.
> + */
> + if (wm->wm[level].min_ddb_alloc > total[plane_id] ||
> + wm->uv_wm[level].min_ddb_alloc > uv_total[plane_id])
> + memset(&wm->wm[level], 0, sizeof(wm->wm[level]));
>
> /*
> * Wa_1408961008:icl
> --
> 2.19.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Matt Roper
Graphics Software Engineer
IoTG Platform Enabling & Development
Intel Corporation
(916) 356-2795
More information about the Intel-gfx
mailing list