For Gen9, RPM suspend is failing if rps.enabled=false. This is needed for other platforms as RC6 and RPS enabling is indicated by rps.enabled. RPM Suspend depends only on RC6, so we need to remove the check of rps.enabled. For Gen9 RC6 and RPS enabling is separated hence do rps.enabled check only for non-Gen9 platforms. Once RC6 and RPS enabling is separated for other GENs this check can be completely removed. Moved setting of rps.enabled to platform level functions as there is case of disabling of RPS in gen9_enable_rps. v2: Changing parameter to dev_priv for IS_GEN9 and HAS_RUNTIME_PM and line spacing changes. (David) and commit message update for checkpatch issues. v3: Rebase. Reviewed-by: David Weinehall <david.weinehall@xxxxxxxxxxxxxxx> Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_drv.c | 14 +++++++++++--- drivers/gpu/drm/i915/intel_pm.c | 20 ++++++++++++++++++-- drivers/gpu/drm/i915/intel_runtime_pm.c | 2 +- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 5a7c0c2..53b5968 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -2293,10 +2293,18 @@ static int intel_runtime_suspend(struct device *kdev) struct drm_i915_private *dev_priv = to_i915(dev); int ret; - if (WARN_ON_ONCE(!(dev_priv->rps.enabled && intel_enable_rc6()))) + if (WARN_ON_ONCE(!intel_enable_rc6())) return -ENODEV; - if (WARN_ON_ONCE(!HAS_RUNTIME_PM(dev))) + /* + * Once RC6 and RPS enabling is separated for non-GEN9 platforms + * below check should be removed. + */ + if (!IS_GEN9(dev_priv)) + if (WARN_ON_ONCE(!dev_priv->rps.enabled)) + return -ENODEV; + + if (WARN_ON_ONCE(!HAS_RUNTIME_PM(dev_priv))) return -ENODEV; DRM_DEBUG_KMS("Suspending device\n"); @@ -2400,7 +2408,7 @@ static int intel_runtime_resume(struct device *kdev) struct drm_i915_private *dev_priv = to_i915(dev); int ret = 0; - if (WARN_ON_ONCE(!HAS_RUNTIME_PM(dev))) + if (WARN_ON_ONCE(!HAS_RUNTIME_PM(dev_priv))) return -ENODEV; DRM_DEBUG_KMS("Resuming device\n"); diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 5e3f170..9dad6df 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -5155,6 +5155,8 @@ static void gen9_disable_rc6(struct drm_i915_private *dev_priv) static void gen9_disable_rps(struct drm_i915_private *dev_priv) { I915_WRITE(GEN6_RP_CONTROL, 0); + + dev_priv->rps.enabled = false; } static void gen6_disable_rps(struct drm_i915_private *dev_priv) @@ -5162,11 +5164,15 @@ static void gen6_disable_rps(struct drm_i915_private *dev_priv) I915_WRITE(GEN6_RC_CONTROL, 0); I915_WRITE(GEN6_RPNSWREQ, 1 << 31); I915_WRITE(GEN6_RP_CONTROL, 0); + + dev_priv->rps.enabled = false; } static void cherryview_disable_rps(struct drm_i915_private *dev_priv) { I915_WRITE(GEN6_RC_CONTROL, 0); + + dev_priv->rps.enabled = false; } static void valleyview_disable_rps(struct drm_i915_private *dev_priv) @@ -5178,6 +5184,8 @@ static void valleyview_disable_rps(struct drm_i915_private *dev_priv) I915_WRITE(GEN6_RC_CONTROL, 0); intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); + + dev_priv->rps.enabled = false; } static void intel_print_rc6_info(struct drm_i915_private *dev_priv, u32 mode) @@ -5395,6 +5403,8 @@ static void gen9_enable_rps(struct drm_i915_private *dev_priv) reset_rps(dev_priv, gen6_set_rps); intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); + + dev_priv->rps.enabled = true; } static void gen9_enable_rc6(struct drm_i915_private *dev_priv) @@ -5538,6 +5548,8 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv) reset_rps(dev_priv, gen6_set_rps); intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); + + dev_priv->rps.enabled = true; } static void gen6_enable_rps(struct drm_i915_private *dev_priv) @@ -5634,6 +5646,8 @@ static void gen6_enable_rps(struct drm_i915_private *dev_priv) } intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); + + dev_priv->rps.enabled = true; } static void gen6_update_ring_freq(struct drm_i915_private *dev_priv) @@ -6108,6 +6122,8 @@ static void cherryview_enable_rps(struct drm_i915_private *dev_priv) reset_rps(dev_priv, valleyview_set_rps); intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); + + dev_priv->rps.enabled = true; } static void valleyview_enable_rps(struct drm_i915_private *dev_priv) @@ -6188,6 +6204,8 @@ static void valleyview_enable_rps(struct drm_i915_private *dev_priv) reset_rps(dev_priv, valleyview_set_rps); intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); + + dev_priv->rps.enabled = true; } static unsigned long intel_pxfreq(u32 vidfreq) @@ -6777,7 +6795,6 @@ void intel_disable_gt_powersave(struct drm_i915_private *dev_priv) ironlake_disable_drps(dev_priv); } - dev_priv->rps.enabled = false; mutex_unlock(&dev_priv->rps.hw_lock); } @@ -6821,7 +6838,6 @@ void intel_enable_gt_powersave(struct drm_i915_private *dev_priv) WARN_ON(dev_priv->rps.efficient_freq < dev_priv->rps.min_freq); WARN_ON(dev_priv->rps.efficient_freq > dev_priv->rps.max_freq); - dev_priv->rps.enabled = true; mutex_unlock(&dev_priv->rps.hw_lock); } diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c index 6c11168..9a7ff5e 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -2770,7 +2770,7 @@ void intel_runtime_pm_enable(struct drm_i915_private *dev_priv) * so the driver's own RPM reference tracking asserts also work on * platforms without RPM support. */ - if (!HAS_RUNTIME_PM(dev)) { + if (!HAS_RUNTIME_PM(dev_priv)) { pm_runtime_dont_use_autosuspend(kdev); pm_runtime_get_sync(kdev); } else { -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx