From: Jani Nikula <jani.nikula@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Switch off FBC when disabling the primary plane when obscured
Date: Tue, 12 Jun 2012 16:03:49 +0300 [thread overview]
Message-ID: <871ulkptqi.fsf@intel.com> (raw)
In-Reply-To: <1339501560-31685-1-git-send-email-chris@chris-wilson.co.uk>
On Tue, 12 Jun 2012, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> As we switch on/off the primary plane if it is completely obscured by an
> overlapping video sprite, we also nee to make sure that we update the
> FBC configuration at the same time.
I had a patch to this effect which I didn't get around to sending
yet. Oh well.
Reviewed-by: Jani Nikula <jani.nikula@linux.intel.com>
>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=50238
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
> ---
> drivers/gpu/drm/i915/intel_drv.h | 2 +-
> drivers/gpu/drm/i915/intel_pm.c | 4 +++-
> drivers/gpu/drm/i915/intel_sprite.c | 26 +++++++++++++++-----------
> 3 files changed, 19 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 11eafbd..d5cc0a2 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -172,6 +172,7 @@ struct intel_crtc {
> u8 lut_r[256], lut_g[256], lut_b[256];
> int dpms_mode;
> bool active; /* is the crtc on? independent of the dpms mode */
> + bool primary_disabled; /* is the crtc obscured by a plane? */
> bool lowfreq_avail;
> struct intel_overlay *overlay;
> struct intel_unpin_work *unpin_work;
> @@ -199,7 +200,6 @@ struct intel_plane {
> struct drm_plane base;
> enum pipe pipe;
> struct drm_i915_gem_object *obj;
> - bool primary_disabled;
> int max_downscale;
> u32 lut_r[1024], lut_g[1024], lut_b[1024];
> void (*update_plane)(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 51b5872..2d5a322 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -405,7 +405,9 @@ void intel_update_fbc(struct drm_device *dev)
> * - going to an unsupported config (interlace, pixel multiply, etc.)
> */
> list_for_each_entry(tmp_crtc, &dev->mode_config.crtc_list, head) {
> - if (tmp_crtc->enabled && tmp_crtc->fb) {
> + if (tmp_crtc->enabled &&
> + !tmp_crtc->primary_disabled &&
> + tmp_crtc->fb) {
> if (crtc) {
> DRM_DEBUG_KMS("more than one pipe active, disabling compression\n");
> dev_priv->no_fbc_reason = FBC_MULTIPLE_PIPES;
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index 5369a4c..e8abb8e 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -336,6 +336,12 @@ intel_enable_primary(struct drm_crtc *crtc)
> struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> int reg = DSPCNTR(intel_crtc->plane);
>
> + if (!intel_crtc->primary_disabled)
> + return;
> +
> + intel_crtc->primary_disabled = false;
> + intel_update_fbc(dev);
> +
> I915_WRITE(reg, I915_READ(reg) | DISPLAY_PLANE_ENABLE);
> }
>
> @@ -347,7 +353,13 @@ intel_disable_primary(struct drm_crtc *crtc)
> struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> int reg = DSPCNTR(intel_crtc->plane);
>
> + if (intel_crtc->primary_disabled)
> + return;
> +
> I915_WRITE(reg, I915_READ(reg) & ~DISPLAY_PLANE_ENABLE);
> +
> + intel_crtc->primary_disabled = true;
> + intel_update_fbc(dev);
> }
>
> static int
> @@ -524,18 +536,14 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
> * Be sure to re-enable the primary before the sprite is no longer
> * covering it fully.
> */
> - if (!disable_primary && intel_plane->primary_disabled) {
> + if (!disable_primary)
> intel_enable_primary(crtc);
> - intel_plane->primary_disabled = false;
> - }
>
> intel_plane->update_plane(plane, fb, obj, crtc_x, crtc_y,
> crtc_w, crtc_h, x, y, src_w, src_h);
>
> - if (disable_primary) {
> + if (disable_primary)
> intel_disable_primary(crtc);
> - intel_plane->primary_disabled = true;
> - }
>
> /* Unpin old obj after new one is active to avoid ugliness */
> if (old_obj)
> @@ -554,11 +562,7 @@ intel_disable_plane(struct drm_plane *plane)
> struct intel_plane *intel_plane = to_intel_plane(plane);
> int ret = 0;
>
> - if (intel_plane->primary_disabled) {
> - intel_enable_primary(plane->crtc);
> - intel_plane->primary_disabled = false;
> - }
> -
> + intel_enable_primary(plane->crtc);
> intel_plane->disable_plane(plane);
>
> mutex_lock(&dev->struct_mutex);
> --
> 1.7.10
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2012-06-12 13:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-12 11:46 [PATCH] drm/i915: Switch off FBC when disabling the primary plane when obscured Chris Wilson
2012-06-12 13:03 ` Jani Nikula [this message]
2012-06-12 14:28 ` Jesse Barnes
2012-06-12 20:30 ` Chris Wilson
2012-06-13 10:45 ` Daniel Vetter
2012-06-13 11:18 ` Chris Wilson
2012-06-13 11:40 ` Daniel Vetter
2012-06-13 14:29 ` Daniel Vetter
2012-06-13 16:36 ` Chris Wilson
2012-06-13 18:10 ` Daniel Vetter
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=871ulkptqi.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--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