From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH v4 7/8] drm/i915: Do not compute watermarks on a noop.
Date: Wed, 10 Feb 2016 13:49:42 +0100 [thread overview]
Message-ID: <1455108583-29227-8-git-send-email-maarten.lankhorst@linux.intel.com> (raw)
In-Reply-To: <1455108583-29227-1-git-send-email-maarten.lankhorst@linux.intel.com>
No atomic state should be included after all validation when nothing has
changed. During modeset all active planes will be added to the state,
while disabled planes won't change their state.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 3 +-
drivers/gpu/drm/i915/intel_drv.h | 13 ++++++++
drivers/gpu/drm/i915/intel_pm.c | 61 +++++++++++++++++++++---------------
3 files changed, 51 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 00cb261c6787..6bb1f5dbc7a0 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11910,7 +11910,8 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
}
ret = 0;
- if (dev_priv->display.compute_pipe_wm) {
+ if (dev_priv->display.compute_pipe_wm &&
+ (mode_changed || pipe_config->update_pipe || crtc_state->planes_changed)) {
ret = dev_priv->display.compute_pipe_wm(intel_crtc, state);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 8effb9ece21e..144597ac74e3 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1583,6 +1583,19 @@ intel_atomic_get_crtc_state(struct drm_atomic_state *state,
return to_intel_crtc_state(crtc_state);
}
+
+static inline struct intel_plane_state *
+intel_atomic_get_existing_plane_state(struct drm_atomic_state *state,
+ struct intel_plane *plane)
+{
+ struct drm_plane_state *plane_state;
+
+ plane_state = drm_atomic_get_existing_plane_state(state, &plane->base);
+
+ return to_intel_plane_state(plane_state);
+}
+
+
int intel_atomic_setup_scalers(struct drm_device *dev,
struct intel_crtc *intel_crtc,
struct intel_crtc_state *crtc_state);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 379eabe093cb..8fb8c6891ae6 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2010,11 +2010,18 @@ static void ilk_compute_wm_level(const struct drm_i915_private *dev_priv,
cur_latency *= 5;
}
- result->pri_val = ilk_compute_pri_wm(cstate, pristate,
- pri_latency, level);
- result->spr_val = ilk_compute_spr_wm(cstate, sprstate, spr_latency);
- result->cur_val = ilk_compute_cur_wm(cstate, curstate, cur_latency);
- result->fbc_val = ilk_compute_fbc_wm(cstate, pristate, result->pri_val);
+ if (pristate) {
+ result->pri_val = ilk_compute_pri_wm(cstate, pristate,
+ pri_latency, level);
+ result->fbc_val = ilk_compute_fbc_wm(cstate, pristate, result->pri_val);
+ }
+
+ if (sprstate)
+ result->spr_val = ilk_compute_spr_wm(cstate, sprstate, spr_latency);
+
+ if (curstate)
+ result->cur_val = ilk_compute_cur_wm(cstate, curstate, cur_latency);
+
result->enable = true;
}
@@ -2287,7 +2294,6 @@ static int ilk_compute_pipe_wm(struct intel_crtc *intel_crtc,
const struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc_state *cstate = NULL;
struct intel_plane *intel_plane;
- struct drm_plane_state *ps;
struct intel_plane_state *pristate = NULL;
struct intel_plane_state *sprstate = NULL;
struct intel_plane_state *curstate = NULL;
@@ -2306,30 +2312,37 @@ static int ilk_compute_pipe_wm(struct intel_crtc *intel_crtc,
memset(pipe_wm, 0, sizeof(*pipe_wm));
for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
- ps = drm_atomic_get_plane_state(state,
- &intel_plane->base);
- if (IS_ERR(ps))
- return PTR_ERR(ps);
+ struct intel_plane_state *ps;
+
+ ps = intel_atomic_get_existing_plane_state(state,
+ intel_plane);
+ if (!ps)
+ continue;
if (intel_plane->base.type == DRM_PLANE_TYPE_PRIMARY)
- pristate = to_intel_plane_state(ps);
- else if (intel_plane->base.type == DRM_PLANE_TYPE_OVERLAY)
- sprstate = to_intel_plane_state(ps);
- else if (intel_plane->base.type == DRM_PLANE_TYPE_CURSOR)
- curstate = to_intel_plane_state(ps);
+ pristate = ps;
+ else if (intel_plane->base.type == DRM_PLANE_TYPE_OVERLAY) {
+ sprstate = ps;
+
+ if (ps) {
+ pipe_wm->sprites_enabled = sprstate->visible;
+ pipe_wm->sprites_scaled = sprstate->visible &&
+ (drm_rect_width(&sprstate->dst) != drm_rect_width(&sprstate->src) >> 16 ||
+ drm_rect_height(&sprstate->dst) != drm_rect_height(&sprstate->src) >> 16);
+ }
+ } else if (intel_plane->base.type == DRM_PLANE_TYPE_CURSOR)
+ curstate = ps;
}
- config.sprites_enabled = sprstate->visible;
- config.sprites_scaled = sprstate->visible &&
- (drm_rect_width(&sprstate->dst) != drm_rect_width(&sprstate->src) >> 16 ||
- drm_rect_height(&sprstate->dst) != drm_rect_height(&sprstate->src) >> 16);
+ config.sprites_enabled = pipe_wm->sprites_enabled;
+ config.sprites_scaled = pipe_wm->sprites_scaled;
pipe_wm->pipe_enabled = cstate->base.active;
pipe_wm->sprites_enabled = config.sprites_enabled;
pipe_wm->sprites_scaled = config.sprites_scaled;
/* ILK/SNB: LP2+ watermarks only w/o sprites */
- if (INTEL_INFO(dev)->gen <= 6 && sprstate->visible)
+ if (INTEL_INFO(dev)->gen <= 6 && pipe_wm->sprites_enabled)
max_level = 1;
/* ILK/SNB/IVB: LP1+ watermarks only w/o scaling */
@@ -2352,20 +2365,18 @@ static int ilk_compute_pipe_wm(struct intel_crtc *intel_crtc,
ilk_compute_wm_reg_maximums(dev, 1, &max);
for (level = 1; level <= max_level; level++) {
- struct intel_wm_level wm = {};
+ struct intel_wm_level *wm = &pipe_wm->wm[level];
ilk_compute_wm_level(dev_priv, intel_crtc, level, cstate,
- pristate, sprstate, curstate, &wm);
+ pristate, sprstate, curstate, wm);
/*
* Disable any watermark level that exceeds the
* register maximums since such watermarks are
* always invalid.
*/
- if (!ilk_validate_wm_level(level, &max, &wm))
+ if (!ilk_validate_wm_level(level, &max, wm))
break;
-
- pipe_wm->wm[level] = wm;
}
return 0;
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-02-10 12:49 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-10 12:49 [PATCH v4 0/8] Kill off intel_crtc->atomic! Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 1/8] drm/i915: Pass crtc state to modeset_get_crtc_power_domains Maarten Lankhorst
2016-02-17 17:54 ` Zanoni, Paulo R
2016-02-18 9:51 ` Maarten Lankhorst
2016-02-18 13:08 ` Zanoni, Paulo R
2016-02-18 13:21 ` Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 2/8] drm/i915: Unify power domain handling Maarten Lankhorst
2016-02-17 19:54 ` Zanoni, Paulo R
2016-02-10 12:49 ` [PATCH v4 3/8] drm/i915: Kill off intel_crtc->atomic.wait_vblank, v4 Maarten Lankhorst
2016-02-17 21:20 ` Zanoni, Paulo R
2016-02-18 13:22 ` Maarten Lankhorst
2016-02-18 14:14 ` Zanoni, Paulo R
2016-02-18 14:46 ` Maarten Lankhorst
2016-02-18 17:02 ` Zanoni, Paulo R
2016-02-24 10:24 ` [PATCH v6 3/8] drm/i915: Kill off intel_crtc->atomic.wait_vblank, v6 Maarten Lankhorst
2016-02-24 14:50 ` Zanoni, Paulo R
2016-02-10 12:49 ` [PATCH v4 4/8] drm/i915: Remove update_sprite_watermarks Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 5/8] drm/i915: Remove some post-commit members from intel_crtc->atomic, v2 Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 6/8] drm/i915: Nuke fbc " Maarten Lankhorst
2016-02-12 13:56 ` Zanoni, Paulo R
2016-02-15 14:31 ` Maarten Lankhorst
2016-02-18 17:17 ` Zanoni, Paulo R
2016-02-29 9:58 ` [PATCH v4.1 6/8] drm/i915: Nuke fbc members from intel_crtc->atomic, v3 Maarten Lankhorst
2016-02-29 21:06 ` Zanoni, Paulo R
2016-03-01 8:27 ` Maarten Lankhorst
2016-02-10 12:49 ` Maarten Lankhorst [this message]
2016-02-18 20:51 ` [PATCH v4 7/8] drm/i915: Do not compute watermarks on a noop Zanoni, Paulo R
2016-03-01 10:11 ` Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 8/8] drm/i915: Remove vblank wait from hsw_enable_ips Maarten Lankhorst
2016-02-12 12:06 ` Zanoni, Paulo R
2016-02-16 10:32 ` Maarten Lankhorst
2016-03-23 13:33 ` [PATCH v5 8/8] drm/i915: Remove vblank wait from hsw_enable_ips, v2 Maarten Lankhorst
2016-03-23 14:43 ` Zanoni, Paulo R
2016-02-15 13:35 ` ✗ Fi.CI.BAT: failure for Kill off intel_crtc->atomic! (rev8) Patchwork
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=1455108583-29227-8-git-send-email-maarten.lankhorst@linux.intel.com \
--to=maarten.lankhorst@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).