From: Ander Conselvan De Oliveira <conselvan2@gmail.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 02/12] drm/i915: Calculate watermark related members in the crtc_state, v3.
Date: Tue, 24 Nov 2015 16:03:33 +0200 [thread overview]
Message-ID: <1448373813.2672.19.camel@gmail.com> (raw)
In-Reply-To: <1447945645-32005-3-git-send-email-maarten.lankhorst@linux.intel.com>
On Thu, 2015-11-19 at 16:07 +0100, Maarten Lankhorst wrote:
> This removes pre/post_wm_update from intel_crtc->atomic, and
> creates atomic state for it in intel_crtc.
>
> Changes since v1:
> - Rebase on top of wm changes.
> Changes since v2:
> - Split disable_cxsr into a separate patch.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_atomic.c | 1 +
> drivers/gpu/drm/i915/intel_display.c | 31 +++++++++++++------------------
> drivers/gpu/drm/i915/intel_drv.h | 2 +-
> 3 files changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_atomic.c
> b/drivers/gpu/drm/i915/intel_atomic.c
> index 9f0638a37b6d..4625f8a9ba12 100644
> --- a/drivers/gpu/drm/i915/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/intel_atomic.c
> @@ -96,6 +96,7 @@ intel_crtc_duplicate_state(struct drm_crtc *crtc)
> crtc_state->update_pipe = false;
> crtc_state->disable_lp_wm = false;
> crtc_state->disable_cxsr = false;
> + crtc_state->wm_changed = false;
>
> return &crtc_state->base;
> }
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index 5ee64e67ad8a..db4995406277 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -4741,6 +4741,8 @@ intel_pre_disable_primary(struct drm_crtc *crtc)
> static void intel_post_plane_update(struct intel_crtc *crtc)
> {
> struct intel_crtc_atomic_commit *atomic = &crtc->atomic;
> + struct intel_crtc_state *pipe_config =
> + to_intel_crtc_state(crtc->base.state);
> struct drm_device *dev = crtc->base.dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
>
> @@ -4751,7 +4753,7 @@ static void intel_post_plane_update(struct intel_crtc
> *crtc)
>
> crtc->wm.cxsr_allowed = true;
>
> - if (crtc->atomic.update_wm_post)
> + if (pipe_config->wm_changed)
> intel_update_watermarks(&crtc->base);
This adds an extra call to intel_update_watermarks() for the case where
previously update_wm_pre would be set. This won't cause extra register writes
because of the dirty check, but I think it deserves a note in the commit
message.
>
> if (atomic->update_fbc)
> @@ -4784,6 +4786,9 @@ static void intel_pre_plane_update(struct intel_crtc
> *crtc)
> crtc->wm.cxsr_allowed = false;
> intel_set_memory_cxsr(dev_priv, false);
> }
> +
> + if (!needs_modeset(&pipe_config->base) && pipe_config->wm_changed)
> + intel_update_watermarks(&crtc->base);
> }
>
> static void intel_crtc_disable_planes(struct drm_crtc *crtc, unsigned
> plane_mask)
> @@ -11706,25 +11711,18 @@ int intel_plane_atomic_calc_changes(struct
> drm_crtc_state *crtc_state,
> plane->base.id, was_visible, visible,
> turn_off, turn_on, mode_changed);
>
> - if (turn_on) {
> - intel_crtc->atomic.update_wm_pre = true;
> - /* must disable cxsr around plane enable/disable */
> - if (plane->type != DRM_PLANE_TYPE_CURSOR) {
> - pipe_config->disable_cxsr = true;
> - /* to potentially re-enable cxsr */
> - intel_crtc->atomic.wait_vblank = true;
> - intel_crtc->atomic.update_wm_post = true;
> - }
> - } else if (turn_off) {
> - intel_crtc->atomic.update_wm_post = true;
> + if (turn_on || turn_off) {
> + pipe_config->wm_changed = true;
> +
> /* must disable cxsr around plane enable/disable */
> if (plane->type != DRM_PLANE_TYPE_CURSOR) {
> if (is_crtc_enabled)
> intel_crtc->atomic.wait_vblank = true;
> pipe_config->disable_cxsr = true;
> }
> - } else if (intel_wm_need_update(plane, plane_state)) {
> - intel_crtc->atomic.update_wm_pre = true;
> + } else if ((was_visible || visible) &&
So this avoids watermark changes when the plane is not visible before or after
the update. Wouldn't it be better to fix intel_wm_need_update() instead if
returns true in that case?
Ander
> + intel_wm_need_update(plane, plane_state)) {
> + pipe_config->wm_changed = true;
> }
>
> if (visible || was_visible)
> @@ -11869,7 +11867,7 @@ static int intel_crtc_atomic_check(struct drm_crtc
> *crtc,
> }
>
> if (mode_changed && !crtc_state->active)
> - intel_crtc->atomic.update_wm_post = true;
> + pipe_config->wm_changed = true;
>
> if (mode_changed && crtc_state->enable &&
> dev_priv->display.crtc_compute_clock &&
> @@ -13762,9 +13760,6 @@ static void intel_begin_crtc_commit(struct drm_crtc
> *crtc,
> to_intel_crtc_state(old_crtc_state);
> bool modeset = needs_modeset(crtc->state);
>
> - if (intel_crtc->atomic.update_wm_pre)
> - intel_update_watermarks(crtc);
> -
> /* Perform vblank evasion around commit operation */
> intel_pipe_update_start(intel_crtc);
>
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index dd89342832e2..db61c37dbf09 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -372,6 +372,7 @@ struct intel_crtc_state {
>
> bool update_pipe; /* can a fast modeset be performed? */
> bool disable_cxsr;
> + bool wm_changed; /* watermarks are updated */
>
> /* Pipe source size (ie. panel fitter input size)
> * All planes will be positioned inside this space,
> @@ -535,7 +536,6 @@ struct intel_crtc_atomic_commit {
> bool disable_fbc;
> bool disable_ips;
> bool pre_disable_primary;
> - bool update_wm_pre, update_wm_post;
>
> /* Sleepable operations to perform after commit */
> unsigned fb_bits;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-11-24 14:03 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-19 15:07 [PATCH 00/12] Remove intel_crtc->atomic and fix BAT! Maarten Lankhorst
2015-11-19 15:07 ` [PATCH 01/12] drm/i915: Move disable_cxsr to the crtc_state Maarten Lankhorst
2015-11-24 12:24 ` Ander Conselvan De Oliveira
2015-11-19 15:07 ` [PATCH 02/12] drm/i915: Calculate watermark related members in the crtc_state, v3 Maarten Lankhorst
2015-11-24 14:03 ` Ander Conselvan De Oliveira [this message]
2015-11-24 14:55 ` Maarten Lankhorst
2015-11-25 9:22 ` Ander Conselvan De Oliveira
2015-11-30 8:52 ` Maarten Lankhorst
2015-12-03 12:49 ` [PATCH v2 02/12] drm/i915: Calculate watermark related members in the crtc_state, v4 Maarten Lankhorst
2015-12-03 14:32 ` Daniel Vetter
2015-11-19 15:07 ` [PATCH 03/12] drm/i915/skl: Update watermarks before the crtc is disabled Maarten Lankhorst
2015-11-25 9:33 ` Ander Conselvan De Oliveira
2015-11-25 9:33 ` [Intel-gfx] " Ander Conselvan De Oliveira
2015-11-19 15:07 ` [PATCH 04/12] drm/i915: Remove double wait_for_vblank on broadwell Maarten Lankhorst
2015-11-25 9:44 ` Ander Conselvan De Oliveira
2015-12-08 14:14 ` Ville Syrjälä
2015-12-09 15:27 ` Maarten Lankhorst
2015-12-10 8:43 ` Daniel Vetter
2015-11-19 15:07 ` [PATCH 05/12] drm/i915: Kill off intel_crtc->atomic.wait_vblank, v2 Maarten Lankhorst
2015-11-25 12:21 ` Ander Conselvan De Oliveira
2015-11-25 12:38 ` Imre Deak
2015-11-25 13:37 ` Daniel Stone
2015-11-25 12:39 ` Ander Conselvan De Oliveira
2015-11-19 15:07 ` [PATCH 06/12] drm/i915: Remove intel_crtc->atomic.disable_ips Maarten Lankhorst
2015-11-25 12:51 ` Ander Conselvan De Oliveira
2015-11-19 15:07 ` [PATCH 07/12] drm/i915: Remove atomic.pre_disable_primary Maarten Lankhorst
2015-11-19 15:07 ` [PATCH 08/12] drm/i915: Remove update_sprite_watermarks Maarten Lankhorst
2015-11-19 15:07 ` [PATCH 09/12] drm/i915: Remove some post-commit members from intel_crtc->atomic, v2 Maarten Lankhorst
2015-11-25 13:11 ` Ander Conselvan De Oliveira
2015-11-19 15:07 ` [PATCH 10/12] drm/i915: Nuke fbc members from intel_crtc->atomic Maarten Lankhorst
2015-11-26 11:28 ` Ander Conselvan De Oliveira
2015-11-19 15:07 ` [PATCH 11/12] drm/i915: Keep track of the cdclk as if all crtc's were active Maarten Lankhorst
2015-11-26 13:31 ` Ander Conselvan De Oliveira
2015-11-26 13:32 ` Ander Conselvan De Oliveira
2015-12-21 13:17 ` Mika Kahola
2015-11-19 15:07 ` [PATCH 12/12] drm/i915: Calculate visibility in check_plane correctly regardless of dpms Maarten Lankhorst
2015-11-26 13:48 ` Ander Conselvan De Oliveira
2015-11-30 9:45 ` Maarten Lankhorst
2015-12-21 13:27 ` Mika Kahola
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1448373813.2672.19.camel@gmail.com \
--to=conselvan2@gmail.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.