diff mbox

[v3,01/27] drm/i915: Remove RPM suspend dependency on rps.enabled and related changes

Message ID 1471948800-28641-2-git-send-email-sagar.a.kamble@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

sagar.a.kamble@intel.com Aug. 23, 2016, 10:39 a.m. UTC
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@linux.intel.com>
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
---
 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(-)

Comments

kernel test robot Aug. 23, 2016, 1:09 p.m. UTC | #1
Hi Sagar,

[auto build test WARNING on drm-intel/for-linux-next]
[cannot apply to v4.8-rc3 next-20160823]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]

url:    https://github.com/0day-ci/linux/commits/Sagar-Arun-Kamble/Add-support-for-GuC-based-SLPC/20160823-204034
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: x86_64-randconfig-x016-201634 (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/i915/intel_runtime_pm.c: In function 'intel_runtime_pm_enable':
>> drivers/gpu/drm/i915/intel_runtime_pm.c:2761:21: warning: unused variable 'dev' [-Wunused-variable]
     struct drm_device *dev = &dev_priv->drm;
                        ^~~

vim +/dev +2761 drivers/gpu/drm/i915/intel_runtime_pm.c

c49d13ee David Weinehall 2016-08-22  2745  	pm_runtime_put_autosuspend(kdev);
9c065a7d Daniel Vetter   2014-09-30  2746  }
9c065a7d Daniel Vetter   2014-09-30  2747  
e4e7684f Daniel Vetter   2014-09-30  2748  /**
e4e7684f Daniel Vetter   2014-09-30  2749   * intel_runtime_pm_enable - enable runtime pm
e4e7684f Daniel Vetter   2014-09-30  2750   * @dev_priv: i915 device instance
e4e7684f Daniel Vetter   2014-09-30  2751   *
e4e7684f Daniel Vetter   2014-09-30  2752   * This function enables runtime pm at the end of the driver load sequence.
e4e7684f Daniel Vetter   2014-09-30  2753   *
e4e7684f Daniel Vetter   2014-09-30  2754   * Note that this function does currently not enable runtime pm for the
e4e7684f Daniel Vetter   2014-09-30  2755   * subordinate display power domains. That is only done on the first modeset
e4e7684f Daniel Vetter   2014-09-30  2756   * using intel_display_set_init_power().
e4e7684f Daniel Vetter   2014-09-30  2757   */
f458ebbc Daniel Vetter   2014-09-30  2758  void intel_runtime_pm_enable(struct drm_i915_private *dev_priv)
9c065a7d Daniel Vetter   2014-09-30  2759  {
52a05c30 David Weinehall 2016-08-22  2760  	struct pci_dev *pdev = dev_priv->drm.pdev;
91c8a326 Chris Wilson    2016-07-05 @2761  	struct drm_device *dev = &dev_priv->drm;
52a05c30 David Weinehall 2016-08-22  2762  	struct device *kdev = &pdev->dev;
9c065a7d Daniel Vetter   2014-09-30  2763  
c49d13ee David Weinehall 2016-08-22  2764  	pm_runtime_set_autosuspend_delay(kdev, 10000); /* 10s */
c49d13ee David Weinehall 2016-08-22  2765  	pm_runtime_mark_last_busy(kdev);
cbc68dc9 Imre Deak       2015-12-17  2766  
25b181b4 Imre Deak       2015-12-17  2767  	/*
25b181b4 Imre Deak       2015-12-17  2768  	 * Take a permanent reference to disable the RPM functionality and drop
25b181b4 Imre Deak       2015-12-17  2769  	 * it only when unloading the driver. Use the low level get/put helpers,

:::::: The code at line 2761 was first introduced by commit
:::::: 91c8a326a192117219d5b9b980244c3662e35404 drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm

:::::: TO: Chris Wilson <chris@chris-wilson.co.uk>
:::::: CC: Chris Wilson <chris@chris-wilson.co.uk>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot Aug. 23, 2016, 1:21 p.m. UTC | #2
Hi Sagar,

[auto build test ERROR on drm-intel/for-linux-next]
[cannot apply to v4.8-rc3 next-20160823]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]

url:    https://github.com/0day-ci/linux/commits/Sagar-Arun-Kamble/Add-support-for-GuC-based-SLPC/20160823-204034
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: i386-randconfig-x001-201634 (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/gpu/drm/i915/intel_runtime_pm.c: In function 'intel_runtime_pm_enable':
>> drivers/gpu/drm/i915/intel_runtime_pm.c:2761:21: error: unused variable 'dev' [-Werror=unused-variable]
     struct drm_device *dev = &dev_priv->drm;
                        ^~~
   cc1: all warnings being treated as errors

vim +/dev +2761 drivers/gpu/drm/i915/intel_runtime_pm.c

e4e7684f Daniel Vetter   2014-09-30  2755   * subordinate display power domains. That is only done on the first modeset
e4e7684f Daniel Vetter   2014-09-30  2756   * using intel_display_set_init_power().
e4e7684f Daniel Vetter   2014-09-30  2757   */
f458ebbc Daniel Vetter   2014-09-30  2758  void intel_runtime_pm_enable(struct drm_i915_private *dev_priv)
9c065a7d Daniel Vetter   2014-09-30  2759  {
52a05c30 David Weinehall 2016-08-22  2760  	struct pci_dev *pdev = dev_priv->drm.pdev;
91c8a326 Chris Wilson    2016-07-05 @2761  	struct drm_device *dev = &dev_priv->drm;
52a05c30 David Weinehall 2016-08-22  2762  	struct device *kdev = &pdev->dev;
9c065a7d Daniel Vetter   2014-09-30  2763  
c49d13ee David Weinehall 2016-08-22  2764  	pm_runtime_set_autosuspend_delay(kdev, 10000); /* 10s */

:::::: The code at line 2761 was first introduced by commit
:::::: 91c8a326a192117219d5b9b980244c3662e35404 drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm

:::::: TO: Chris Wilson <chris@chris-wilson.co.uk>
:::::: CC: Chris Wilson <chris@chris-wilson.co.uk>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

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 {