All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Widawsky <benjamin.widawsky@intel.com>
To: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
	Mika Kuoppala <mika.kuoppala@intel.com>
Subject: Re: [PATCH] drm/i915: Fix up the forcewake timer initialization
Date: Tue, 18 Mar 2014 17:41:54 -0700	[thread overview]
Message-ID: <20140319004154.GI30656@intel.com> (raw)
In-Reply-To: <1395156663-27627-1-git-send-email-daniel.vetter@ffwll.ch>

On Tue, Mar 18, 2014 at 04:31:03PM +0100, Daniel Vetter wrote:
> This is a regression introduced in
> 
> commit 0294ae7b44bba7ab0d4cef9a8736287f38bdb4fd
> Author: Chris Wilson <chris@chris-wilson.co.uk>
> Date:   Thu Mar 13 12:00:29 2014 +0000
> 
>     drm/i915: Consolidate forcewake resetting to a single function
> 
> The reordered setup sequence ended up calling del_timer_sync before
> the timer was set up correctly, resulting in endless hilarity when
> loading the driver.
> 
> Compared to Ben's patch (which moved around the setup_timer call to
> sanitize_early) this moves the sanitize_early call around in the
> driver load call. This way we avoid calling setup_timer again in the
> resume code (where we also call sanitize_early).
> 
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala@intel.com>
> Cc: Ben Widawsky <benjamin.widawsky@intel.com>
> Tested-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76242
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/i915/i915_dma.c     | 2 --
>  drivers/gpu/drm/i915/intel_uncore.c | 2 ++
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index e4d2b9f15ae2..9faee49f210d 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1608,8 +1608,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
>  		goto put_bridge;
>  	}
>  
> -	intel_uncore_early_sanitize(dev);
> -
>  	/* This must be called before any calls to HAS_PCH_* */
>  	intel_detect_pch(dev);
>  
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index e2e328d86aff..c3832d9270a6 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -736,6 +736,8 @@ void intel_uncore_init(struct drm_device *dev)
>  	setup_timer(&dev_priv->uncore.force_wake_timer,
>  		    gen6_force_wake_timer, (unsigned long)dev_priv);
>  
> +	intel_uncore_early_sanitize(dev);
> +
>  	if (IS_VALLEYVIEW(dev)) {
>  		dev_priv->uncore.funcs.force_wake_get = __vlv_force_wake_get;
>  		dev_priv->uncore.funcs.force_wake_put = __vlv_force_wake_put;

If you only want to setup_timer once, the setup_timer call should be in
intel_uncore_init() which is the only one called only at load time. And
of course, this is where the bug is. Otherwise, thaw calls
uncore_early_sanitize, which will setup_timer again (which I thought was
your complaint with my original patch).

How about this, (only minimally tested):

diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index e2e328d..7ef5aa3 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -387,8 +387,6 @@ void intel_uncore_early_sanitize(struct drm_device *dev)
        if (IS_GEN6(dev) || IS_GEN7(dev))
                __raw_i915_write32(dev_priv, GTFIFODBG,
                                   __raw_i915_read32(dev_priv, GTFIFODBG));
-
-       intel_uncore_forcewake_reset(dev, false);
 }
 
 void intel_uncore_sanitize(struct drm_device *dev)
@@ -413,6 +411,8 @@ void intel_uncore_sanitize(struct drm_device *dev)
                mutex_unlock(&dev_priv->rps.hw_lock);
 
        }
+
+       intel_uncore_forcewake_reset(dev, false);
 }
 
 /*
@@ -846,7 +846,6 @@ void intel_uncore_fini(struct drm_device *dev)
 {
        /* Paranoia: make sure we have disabled everything before we exit. */
        intel_uncore_sanitize(dev);
-       intel_uncore_forcewake_reset(dev, false);
 }
 


-- 
Ben Widawsky, Intel Open Source Technology Center

  reply	other threads:[~2014-03-19  0:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-18 15:31 [PATCH] drm/i915: Fix up the forcewake timer initialization Daniel Vetter
2014-03-19  0:41 ` Ben Widawsky [this message]
2014-03-19  7:15   ` Daniel Vetter
2014-03-19  7:26   ` Chris Wilson
2014-03-19  7:29     ` 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=20140319004154.GI30656@intel.com \
    --to=benjamin.widawsky@intel.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=mika.kuoppala@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.