From: "S, Deepak" <deepak.s@intel.com>
To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 3/2] drm/i915: Streamline VLV forcewake handling
Date: Fri, 28 Feb 2014 19:56:56 +0530 [thread overview]
Message-ID: <53109CB0.7050805@intel.com> (raw)
In-Reply-To: <1393531641-12608-1-git-send-email-ville.syrjala@linux.intel.com>
On 2/28/2014 1:37 AM, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> It occured to me that when we're trying to wake up both render
> and media wells on VLV, we might end up calling the low level
> force_wake_get/put two times even though one call would be
> enough. Make that happen by figuring out which wells really
> need to be woken up based on the forcewake counts.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_uncore.c | 70 +++++++++++++++----------------------
> 1 file changed, 29 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index dacb751..4119ddc 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -251,16 +251,16 @@ void vlv_force_wake_get(struct drm_i915_private *dev_priv,
> unsigned long irqflags;
>
> spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
> - if (FORCEWAKE_RENDER & fw_engine) {
> - if (dev_priv->uncore.fw_rendercount++ == 0)
> - dev_priv->uncore.funcs.force_wake_get(dev_priv,
> - FORCEWAKE_RENDER);
> - }
> - if (FORCEWAKE_MEDIA & fw_engine) {
> - if (dev_priv->uncore.fw_mediacount++ == 0)
> - dev_priv->uncore.funcs.force_wake_get(dev_priv,
> - FORCEWAKE_MEDIA);
> - }
> +
> + if (fw_engine & FORCEWAKE_RENDER &&
> + dev_priv->uncore.fw_rendercount++ != 0)
> + fw_engine &= ~FORCEWAKE_RENDER;
> + if (fw_engine & FORCEWAKE_MEDIA &&
> + dev_priv->uncore.fw_mediacount++ != 0)
> + fw_engine &= ~FORCEWAKE_MEDIA;
Should we add WARN_ON? I think it will help us if we have forcewake
count mismatch?
Other than this. Patch looks good.
Reviewed-by:Deepak S <deepak.s@intel.com>
> + if (fw_engine)
> + dev_priv->uncore.funcs.force_wake_get(dev_priv, fw_engine);
>
> spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
> }
> @@ -272,19 +272,15 @@ void vlv_force_wake_put(struct drm_i915_private *dev_priv,
>
> spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
>
> - if (FORCEWAKE_RENDER & fw_engine) {
> - WARN_ON(dev_priv->uncore.fw_rendercount == 0);
> - if (--dev_priv->uncore.fw_rendercount == 0)
> - dev_priv->uncore.funcs.force_wake_put(dev_priv,
> - FORCEWAKE_RENDER);
> - }
> + if (fw_engine & FORCEWAKE_RENDER &&
> + --dev_priv->uncore.fw_rendercount != 0)
> + fw_engine &= ~FORCEWAKE_RENDER;
> + if (fw_engine & FORCEWAKE_MEDIA &&
> + --dev_priv->uncore.fw_mediacount != 0)
> + fw_engine &= ~FORCEWAKE_MEDIA;
>
> - if (FORCEWAKE_MEDIA & fw_engine) {
> - WARN_ON(dev_priv->uncore.fw_mediacount == 0);
> - if (--dev_priv->uncore.fw_mediacount == 0)
> - dev_priv->uncore.funcs.force_wake_put(dev_priv,
> - FORCEWAKE_MEDIA);
> - }
> + if (fw_engine)
> + dev_priv->uncore.funcs.force_wake_put(dev_priv, fw_engine);
>
> spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
> }
> @@ -502,27 +498,19 @@ gen6_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
> static u##x \
> vlv_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
> unsigned fwengine = 0; \
> - unsigned fwcount; \
> REG_READ_HEADER(x); \
> - if (FORCEWAKE_VLV_RENDER_RANGE_OFFSET(reg)) { \
> - fwengine = FORCEWAKE_RENDER; \
> - fwcount = dev_priv->uncore.fw_rendercount; \
> - } \
> - else if (FORCEWAKE_VLV_MEDIA_RANGE_OFFSET(reg)) { \
> - fwengine = FORCEWAKE_MEDIA; \
> - fwcount = dev_priv->uncore.fw_mediacount; \
> + if (FORCEWAKE_VLV_RENDER_RANGE_OFFSET(reg)) { \
> + if (dev_priv->uncore.fw_rendercount == 0) \
> + fwengine = FORCEWAKE_RENDER; \
> + } else if (FORCEWAKE_VLV_MEDIA_RANGE_OFFSET(reg)) { \
> + if (dev_priv->uncore.fw_mediacount == 0) \
> + fwengine = FORCEWAKE_MEDIA; \
> } \
> - if (fwengine != 0) { \
> - if (fwcount == 0) \
> - (dev_priv)->uncore.funcs.force_wake_get(dev_priv, \
> - fwengine); \
> - val = __raw_i915_read##x(dev_priv, reg); \
> - if (fwcount == 0) \
> - (dev_priv)->uncore.funcs.force_wake_put(dev_priv, \
> - fwengine); \
> - } else { \
> - val = __raw_i915_read##x(dev_priv, reg); \
> - } \
> + if (fwengine) \
> + dev_priv->uncore.funcs.force_wake_get(dev_priv, fwengine); \
> + val = __raw_i915_read##x(dev_priv, reg); \
> + if (fwengine) \
> + dev_priv->uncore.funcs.force_wake_put(dev_priv, fwengine); \
> REG_READ_FOOTER; \
> }
>
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2014-02-28 14:26 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-24 15:02 [PATCH 0/2] drm/i915: VLV forcewake fixes ville.syrjala
2014-02-24 15:02 ` [PATCH 1/2] drm/i915: Fix VLV forcewake after reset ville.syrjala
[not found] ` <CAOh5HuXvv4Kcp+mCYCPp+hb06M_CxZ-Z+hivB7TOcn72tsaBcQ@mail.gmail.com>
2014-02-27 14:24 ` Fwd: " S, Deepak
2014-03-05 14:00 ` Daniel Vetter
2014-02-24 15:02 ` [PATCH 2/2] drm/i915: Drop the forcewake count inc/dec around register read on VLV ville.syrjala
[not found] ` <CAOh5HuU0eA0Pb3q=xDP_T_7N8TfWCbKuHZ==dh2G=V_uQfNZww@mail.gmail.com>
2014-02-27 14:26 ` Fwd: " S, Deepak
2014-02-27 20:07 ` [PATCH 3/2] drm/i915: Streamline VLV forcewake handling ville.syrjala
2014-02-28 14:26 ` S, Deepak [this message]
2014-02-28 14:51 ` Ville Syrjälä
2014-03-05 14:03 ` 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=53109CB0.7050805@intel.com \
--to=deepak.s@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@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.