From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org, stable@vger.kernel.org,
Mark Janes <mark.a.janes@intel.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Daniel Vetter <daniel.vetter@ffwll.ch>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Oscar Mateo <oscar.mateo@intel.com>,
Mika Kuoppala <mika.kuoppala@linux.intel.com>
Subject: Re: [PATCH] drm/i915: Move init_clock_gating() back to where it was
Date: Fri, 3 Nov 2017 16:20:33 +0200 [thread overview]
Message-ID: <20171103142033.GW10981@intel.com> (raw)
In-Reply-To: <150971567553.13980.17236087493117130108@mail.alporthouse.com>
On Fri, Nov 03, 2017 at 01:27:55PM +0000, Chris Wilson wrote:
> Quoting Ville Syrjala (2017-11-03 13:03:37)
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Apparently setting up a bunch of GT registers before we've properly
> > initialized the rest of the GT hardware leads to these setting being
> > lost. So looks like I broke HSW with commit b7048ea12fbb ("drm/i915:
> > Do .init_clock_gating() earlier to avoid it clobbering watermarks")
> > by doing init_clock_gating() too early. This should actually affect
> > other platforms as well, but apparently not to such a great degree.
> >
> > What I was ultimately after in that commit was to move the
> > ilk_init_lp_watermarks() call earlier. So let's undo the damage and
> > move init_clock_gating() back to where it was, and call
> > ilk_init_lp_watermarks() just before the watermark state readout.
> >
> > This highlights how fragile and messed up our init order really is.
> > I wonder why we even initialize the display before gem. The opposite
> > order would make much more sense to me...
>
> Indeed this will cause some fun for me momentarily as I will have to
> move init_clock_gating() to i915_gem_init(). We can only wish for that
> magic wand to be waved sooner.
>
> Does that make sense, or will I have to start carving up
> init_clock_gating()?
i915_gem_init() should be fine as far as the display is concerned
at least, albeit a bit unexpected. Do we need to do that already in
this patch, or a followup?
>
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index 07118c0b69d3..352a6739ed70 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -5754,12 +5754,30 @@ void vlv_wm_sanitize(struct drm_i915_private *dev_priv)
> > mutex_unlock(&dev_priv->wm.wm_mutex);
> > }
> >
> > +/*
> > + * FIXME should probably kill this and improve
> > + * the real watermark readout/sanitation instead
> > + */
> > +static void ilk_init_lp_watermarks(struct drm_i915_private *dev_priv)
> > +{
> > + I915_WRITE(WM3_LP_ILK, I915_READ(WM3_LP_ILK) & ~WM1_LP_SR_EN);
> > + I915_WRITE(WM2_LP_ILK, I915_READ(WM2_LP_ILK) & ~WM1_LP_SR_EN);
> > + I915_WRITE(WM1_LP_ILK, I915_READ(WM1_LP_ILK) & ~WM1_LP_SR_EN);
> > +
> > + /*
> > + * Don't touch WM1S_LP_EN here.
> > + * Doing so could cause underruns.
> > + */
> > +}
> > +
> > void ilk_wm_get_hw_state(struct drm_device *dev)
> > {
> > struct drm_i915_private *dev_priv = to_i915(dev);
> > struct ilk_wm_values *hw = &dev_priv->wm.hw;
> > struct drm_crtc *crtc;
> >
> > + ilk_init_lp_watermarks(dev_priv);
>
> Wasn't expecting this, but the rest lgtm. Could you explain you decision
> to put it here in a bit more detail?
The original problem was that this guy turned off the LP1+ watermarks
after we'd already done the state readout in ilk_wm_get_hw_state(). So
the state we had read out no longer matched the hardware state.
To keep the software and hardware states in sync we just need to make
sure ilk_init_lp_watermarks() is called before the readout. And the
obvious thing to do then is to call it immediately before to the
readout.
--
Ville Syrjälä
Intel OTC
WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org, stable@vger.kernel.org,
Mark Janes <mark.a.janes@intel.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Daniel Vetter <daniel.vetter@ffwll.ch>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Oscar Mateo <oscar.mateo@intel.com>,
Mika Kuoppala <mika.kuoppala@linux.intel.com>
Subject: Re: [PATCH] drm/i915: Move init_clock_gating() back to where it was
Date: Fri, 3 Nov 2017 16:20:33 +0200 [thread overview]
Message-ID: <20171103142033.GW10981@intel.com> (raw)
In-Reply-To: <150971567553.13980.17236087493117130108@mail.alporthouse.com>
On Fri, Nov 03, 2017 at 01:27:55PM +0000, Chris Wilson wrote:
> Quoting Ville Syrjala (2017-11-03 13:03:37)
> > From: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> >
> > Apparently setting up a bunch of GT registers before we've properly
> > initialized the rest of the GT hardware leads to these setting being
> > lost. So looks like I broke HSW with commit b7048ea12fbb ("drm/i915:
> > Do .init_clock_gating() earlier to avoid it clobbering watermarks")
> > by doing init_clock_gating() too early. This should actually affect
> > other platforms as well, but apparently not to such a great degree.
> >
> > What I was ultimately after in that commit was to move the
> > ilk_init_lp_watermarks() call earlier. So let's undo the damage and
> > move init_clock_gating() back to where it was, and call
> > ilk_init_lp_watermarks() just before the watermark state readout.
> >
> > This highlights how fragile and messed up our init order really is.
> > I wonder why we even initialize the display before gem. The opposite
> > order would make much more sense to me...
>
> Indeed this will cause some fun for me momentarily as I will have to
> move init_clock_gating() to i915_gem_init(). We can only wish for that
> magic wand to be waved sooner.
>
> Does that make sense, or will I have to start carving up
> init_clock_gating()?
i915_gem_init() should be fine as far as the display is concerned
at least, albeit a bit unexpected. Do we need to do that already in
this patch, or a followup?
>
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index 07118c0b69d3..352a6739ed70 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -5754,12 +5754,30 @@ void vlv_wm_sanitize(struct drm_i915_private *dev_priv)
> > mutex_unlock(&dev_priv->wm.wm_mutex);
> > }
> >
> > +/*
> > + * FIXME should probably kill this and improve
> > + * the real watermark readout/sanitation instead
> > + */
> > +static void ilk_init_lp_watermarks(struct drm_i915_private *dev_priv)
> > +{
> > + I915_WRITE(WM3_LP_ILK, I915_READ(WM3_LP_ILK) & ~WM1_LP_SR_EN);
> > + I915_WRITE(WM2_LP_ILK, I915_READ(WM2_LP_ILK) & ~WM1_LP_SR_EN);
> > + I915_WRITE(WM1_LP_ILK, I915_READ(WM1_LP_ILK) & ~WM1_LP_SR_EN);
> > +
> > + /*
> > + * Don't touch WM1S_LP_EN here.
> > + * Doing so could cause underruns.
> > + */
> > +}
> > +
> > void ilk_wm_get_hw_state(struct drm_device *dev)
> > {
> > struct drm_i915_private *dev_priv = to_i915(dev);
> > struct ilk_wm_values *hw = &dev_priv->wm.hw;
> > struct drm_crtc *crtc;
> >
> > + ilk_init_lp_watermarks(dev_priv);
>
> Wasn't expecting this, but the rest lgtm. Could you explain you decision
> to put it here in a bit more detail?
The original problem was that this guy turned off the LP1+ watermarks
after we'd already done the state readout in ilk_wm_get_hw_state(). So
the state we had read out no longer matched the hardware state.
To keep the software and hardware states in sync we just need to make
sure ilk_init_lp_watermarks() is called before the readout. And the
obvious thing to do then is to call it immediately before to the
readout.
--
Ville Syrj�l�
Intel OTC
next prev parent reply other threads:[~2017-11-03 14:20 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-03 13:03 [PATCH] drm/i915: Move init_clock_gating() back to where it was Ville Syrjala
2017-11-03 13:03 ` Ville Syrjala
2017-11-03 13:26 ` ✗ Fi.CI.BAT: failure for " Patchwork
2017-11-03 13:27 ` [PATCH] " Chris Wilson
2017-11-03 13:27 ` Chris Wilson
2017-11-03 14:20 ` Ville Syrjälä [this message]
2017-11-03 14:20 ` Ville Syrjälä
2017-11-03 14:41 ` Chris Wilson
2017-11-03 14:58 ` Chris Wilson
2017-11-03 17:05 ` ✗ Fi.CI.BAT: failure for " Patchwork
2017-11-03 17:08 ` Chris Wilson
2017-11-03 17:37 ` Ville Syrjälä
2017-11-03 18:20 ` Patchwork
2017-11-08 13:35 ` [PATCH v2] " Ville Syrjala
2017-11-08 13:35 ` Ville Syrjala
2017-11-08 16:18 ` Chris Wilson
2017-11-08 16:18 ` Chris Wilson
2017-11-08 16:32 ` Chris Wilson
2017-11-08 17:38 ` Ville Syrjälä
2017-11-08 17:38 ` Ville Syrjälä
2017-11-08 15:31 ` ✗ Fi.CI.BAT: failure for drm/i915: Move init_clock_gating() back to where it was (rev2) Patchwork
2017-11-08 16:25 ` ✓ Fi.CI.BAT: success " Patchwork
2017-11-08 19:59 ` ✓ Fi.CI.IGT: " 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=20171103142033.GW10981@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=daniel.vetter@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
--cc=joonas.lahtinen@linux.intel.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mark.a.janes@intel.com \
--cc=mika.kuoppala@linux.intel.com \
--cc=oscar.mateo@intel.com \
--cc=stable@vger.kernel.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 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.