From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH] drm/i915: leave rc6 enabled at suspend time v4 Date: Tue, 10 Jun 2014 16:42:50 +0300 Message-ID: <1402407770.7876.72.camel@intelbox> References: <1401910389-14722-1-git-send-email-jbarnes@virtuousgeek.org> <1401914722-17532-1-git-send-email-jbarnes@virtuousgeek.org> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1425165031==" Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 7A2666E69D for ; Tue, 10 Jun 2014 06:42:53 -0700 (PDT) In-Reply-To: <1401914722-17532-1-git-send-email-jbarnes@virtuousgeek.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jesse Barnes Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org --===============1425165031== Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-gP1Gk2hHFoA300sVYq9x" --=-gP1Gk2hHFoA300sVYq9x Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2014-06-04 at 13:45 -0700, Jesse Barnes wrote: > This allows the system to enter the lowest power mode during system freez= e. >=20 > v2: delete force wake timer at suspend (Imre) > v3: add GT work suspend function (Imre) > v4: use uncore forcewake reset (Daniel) >=20 > Signed-off-by: Kristen Carlson Accardi > Signed-off-by: Jesse Barnes > --- > drivers/gpu/drm/i915/i915_drv.c | 4 ++-- > drivers/gpu/drm/i915/i915_drv.h | 1 + > drivers/gpu/drm/i915/intel_drv.h | 1 + > drivers/gpu/drm/i915/intel_pm.c | 20 ++++++++++++++++++++ > drivers/gpu/drm/i915/intel_uncore.c | 2 +- > 5 files changed, 25 insertions(+), 3 deletions(-) >=20 > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_= drv.c > index 66c6ffb..7148eac 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -521,7 +521,7 @@ static int i915_drm_freeze(struct drm_device *dev) > drm_irq_uninstall(dev); > dev_priv->enable_hotplug_processing =3D false; > =20 > - intel_disable_gt_powersave(dev); > + intel_suspend_gt_powersave(dev); I realized now that we actually do need to enable RC6 explicitly. If we get here right after runtime resume, the deferred RC6 enabling might be still pending and so RC6 might not be enabled. --Imre > =20 > /* > * Disable CRTCs directly since we want to preserve sw state > @@ -542,8 +542,8 @@ static int i915_drm_freeze(struct drm_device *dev) > =20 > i915_save_state(dev); > =20 > + intel_uncore_forcewake_reset(dev, false); > intel_opregion_fini(dev); > - intel_uncore_fini(dev); > =20 > console_lock(); > intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED); > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_= drv.h > index bea9ab40..89d6b47 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2084,6 +2084,7 @@ extern void intel_uncore_early_sanitize(struct drm_= device *dev); > extern void intel_uncore_init(struct drm_device *dev); > extern void intel_uncore_check_errors(struct drm_device *dev); > extern void intel_uncore_fini(struct drm_device *dev); > +extern void intel_uncore_forcewake_reset(struct drm_device *dev, bool re= store); > =20 > void > i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe, > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/inte= l_drv.h > index c597b0d..74fbe4d 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -957,6 +957,7 @@ void intel_init_gt_powersave(struct drm_device *dev); > void intel_cleanup_gt_powersave(struct drm_device *dev); > void intel_enable_gt_powersave(struct drm_device *dev); > void intel_disable_gt_powersave(struct drm_device *dev); > +void intel_suspend_gt_powersave(struct drm_device *dev); > void intel_reset_gt_powersave(struct drm_device *dev); > void ironlake_teardown_rc6(struct drm_device *dev); > void gen6_update_ring_freq(struct drm_device *dev); > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel= _pm.c > index 1840d15..139eebe 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -4864,6 +4864,26 @@ void intel_cleanup_gt_powersave(struct drm_device = *dev) > valleyview_cleanup_gt_powersave(dev); > } > =20 > +/** > + * intel_suspend_gt_powersave - suspend PM work and helper threads > + * @dev: drm device > + * > + * We don't want to disable RC6 or other features here, we just want > + * to make sure any work we've queued has finished and won't bother > + * us while we're suspended. > + */ > +void intel_suspend_gt_powersave(struct drm_device *dev) > +{ > + struct drm_i915_private *dev_priv =3D dev->dev_private; > + > + /* Interrupts should be disabled already to avoid re-arming. */ > + WARN_ON(dev->irq_enabled); > + > + flush_delayed_work(&dev_priv->rps.delayed_resume_work); > + > + cancel_work_sync(&dev_priv->rps.work); > +} > + > void intel_disable_gt_powersave(struct drm_device *dev) > { > struct drm_i915_private *dev_priv =3D dev->dev_private; > diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/i= ntel_uncore.c > index 871c284..741a4e3 100644 > --- a/drivers/gpu/drm/i915/intel_uncore.c > +++ b/drivers/gpu/drm/i915/intel_uncore.c > @@ -316,7 +316,7 @@ static void gen6_force_wake_timer(unsigned long arg) > intel_runtime_pm_put(dev_priv); > } > =20 > -static void intel_uncore_forcewake_reset(struct drm_device *dev, bool re= store) > +void intel_uncore_forcewake_reset(struct drm_device *dev, bool restore) > { > struct drm_i915_private *dev_priv =3D dev->dev_private; > unsigned long irqflags; --=-gP1Gk2hHFoA300sVYq9x Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQEcBAABAgAGBQJTlwtbAAoJEORIIAnNuWDFp3AIAODtat25zy8k80SAXeXV7NMk kP/PqNGvgvyzvGDbhs4MaFZ/7/XFwrBDQ7c2Rty9O6diCyKUTfv8n9e3mr8KSVID +GHUuWymWKk8xC/3kQWUmfuQG+0G5BXcskM3hqIAEs2+7sj9fhLsjibBl1EUnFNB EJy+ENgeQDcArGxg1MeyoCYztMGodr2aYZlcklSA885+bTVnOu+THegvYMLyX2gU MWFVoCRkOl1TtgyQ9gnzmlGFLS3m96TkjSi8wZmDtG+rqCqXNTHarTBdB4ML1yu/ rdnlMHDa36eohfq2ychvcbldDjwVPFapf2BCQ1CVoCxFQmhMTwPLNtV0f5Kegvk= =6RUA -----END PGP SIGNATURE----- --=-gP1Gk2hHFoA300sVYq9x-- --===============1425165031== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx --===============1425165031==--