[Intel-gfx] [PATCH] Revert "drm/i915: Enable RC6 immediately"

2016-07-21 Thread Chris Wilson
This reverts commit b12e0ee2080c ("drm/i915: Enable RC6 immediately"),
as it was never meant to be sent anywhere other than the bug report for
experimentation.

Signed-off-by: Chris Wilson 
Cc: Daniel Vetter 
---
 drivers/gpu/drm/i915/i915_drv.c |  5 +-
 drivers/gpu/drm/i915/i915_drv.h |  1 +
 drivers/gpu/drm/i915/i915_gem.c |  2 +
 drivers/gpu/drm/i915/i915_gem_request.c |  1 +
 drivers/gpu/drm/i915/intel_display.c|  1 -
 drivers/gpu/drm/i915/intel_drv.h|  5 +-
 drivers/gpu/drm/i915/intel_pm.c | 96 -
 drivers/gpu/drm/i915/intel_uncore.c |  2 +-
 8 files changed, 105 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 84e4018b18a7..83afdd0597b5 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1630,6 +1630,7 @@ static int i915_drm_resume(struct drm_device *dev)
 
intel_opregion_notify_adapter(dev_priv, PCI_D0);
 
+   intel_autoenable_gt_powersave(dev_priv);
drm_kms_helper_poll_enable(dev);
 
enable_rpm_wakeref_asserts(dev_priv);
@@ -1811,8 +1812,7 @@ int i915_reset(struct drm_i915_private *dev_priv)
 * previous concerns that it doesn't respond well to some forms
 * of re-init after reset.
 */
-   if (INTEL_GEN(dev_priv) > 5)
-   intel_enable_gt_powersave(dev_priv);
+   intel_autoenable_gt_powersave(dev_priv);
 
return 0;
 
@@ -2440,7 +2440,6 @@ static int intel_runtime_resume(struct device *device)
i915_gem_init_swizzling(dev);
 
intel_runtime_pm_enable_interrupts(dev_priv);
-   intel_enable_gt_powersave(dev_priv);
 
/*
 * On VLV/CHV display interrupts are part of the display
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 52be86e3e07d..c97724d380d3 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1192,6 +1192,7 @@ struct intel_gen6_power_mgmt {
bool client_boost;
 
bool enabled;
+   struct delayed_work autoenable_work;
unsigned boosts;
 
/* manual wa residency calculations */
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 90b9f46d9432..40047eb48826 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4355,6 +4355,8 @@ i915_gem_suspend(struct drm_device *dev)
struct drm_i915_private *dev_priv = to_i915(dev);
int ret = 0;
 
+   intel_suspend_gt_powersave(dev_priv);
+
mutex_lock(&dev->struct_mutex);
 
/* We have to flush all the executing contexts to main memory so
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c 
b/drivers/gpu/drm/i915/i915_gem_request.c
index b20b00410510..60a3a343b3a8 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -405,6 +405,7 @@ static void i915_gem_mark_busy(const struct intel_engine_cs 
*engine)
intel_runtime_pm_get_noresume(dev_priv);
dev_priv->gt.awake = true;
 
+   intel_enable_gt_powersave(dev_priv);
i915_update_gfx_val(dev_priv);
if (INTEL_GEN(dev_priv) >= 6)
gen6_rps_busy(dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 00116092b18a..78beb7e9d384 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -15502,7 +15502,6 @@ void intel_modeset_init_hw(struct drm_device *dev)
dev_priv->atomic_cdclk_freq = dev_priv->cdclk_freq;
 
intel_init_clock_gating(dev);
-   intel_enable_gt_powersave(dev_priv);
 }
 
 /*
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 8bb98ec32da3..e74d851868c5 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1691,9 +1691,12 @@ void intel_pm_setup(struct drm_device *dev);
 void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
 void intel_gpu_ips_teardown(void);
 void intel_init_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_cleanup_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_sanitize_gt_powersave(struct drm_i915_private *dev_priv);
 void intel_enable_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_autoenable_gt_powersave(struct drm_i915_private *dev_priv);
 void intel_disable_gt_powersave(struct drm_i915_private *dev_priv);
-void intel_cleanup_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_suspend_gt_powersave(struct drm_i915_private *dev_priv);
 void gen6_rps_busy(struct drm_i915_private *dev_priv);
 void gen6_rps_reset_ei(struct drm_i915_private *dev_priv);
 void gen6_rps_idle(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 45753e1aa7f1..64d628c915a3 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i9

[Intel-gfx] [PATCH] Revert "drm/i915: Enable RC6 immediately"

2016-07-21 Thread Chris Wilson
This reverts commit b12e0ee2080c ("drm/i915: Enable RC6 immediately"),
as it was never meant to be sent anywhere other than the bug report for
experimentation.

Signed-off-by: Chris Wilson 
Cc: Daniel Vetter 
---
 drivers/gpu/drm/i915/i915_drv.c |  5 +-
 drivers/gpu/drm/i915/i915_drv.h |  1 +
 drivers/gpu/drm/i915/i915_gem.c |  2 +
 drivers/gpu/drm/i915/i915_gem_request.c |  1 +
 drivers/gpu/drm/i915/intel_display.c|  1 -
 drivers/gpu/drm/i915/intel_drv.h|  5 +-
 drivers/gpu/drm/i915/intel_pm.c | 96 -
 drivers/gpu/drm/i915/intel_uncore.c |  2 +-
 8 files changed, 105 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 84e4018b18a7..83afdd0597b5 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1630,6 +1630,7 @@ static int i915_drm_resume(struct drm_device *dev)
 
intel_opregion_notify_adapter(dev_priv, PCI_D0);
 
+   intel_autoenable_gt_powersave(dev_priv);
drm_kms_helper_poll_enable(dev);
 
enable_rpm_wakeref_asserts(dev_priv);
@@ -1811,8 +1812,7 @@ int i915_reset(struct drm_i915_private *dev_priv)
 * previous concerns that it doesn't respond well to some forms
 * of re-init after reset.
 */
-   if (INTEL_GEN(dev_priv) > 5)
-   intel_enable_gt_powersave(dev_priv);
+   intel_autoenable_gt_powersave(dev_priv);
 
return 0;
 
@@ -2440,7 +2440,6 @@ static int intel_runtime_resume(struct device *device)
i915_gem_init_swizzling(dev);
 
intel_runtime_pm_enable_interrupts(dev_priv);
-   intel_enable_gt_powersave(dev_priv);
 
/*
 * On VLV/CHV display interrupts are part of the display
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 52be86e3e07d..c97724d380d3 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1192,6 +1192,7 @@ struct intel_gen6_power_mgmt {
bool client_boost;
 
bool enabled;
+   struct delayed_work autoenable_work;
unsigned boosts;
 
/* manual wa residency calculations */
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 90b9f46d9432..40047eb48826 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4355,6 +4355,8 @@ i915_gem_suspend(struct drm_device *dev)
struct drm_i915_private *dev_priv = to_i915(dev);
int ret = 0;
 
+   intel_suspend_gt_powersave(dev_priv);
+
mutex_lock(&dev->struct_mutex);
 
/* We have to flush all the executing contexts to main memory so
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c 
b/drivers/gpu/drm/i915/i915_gem_request.c
index b20b00410510..60a3a343b3a8 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -405,6 +405,7 @@ static void i915_gem_mark_busy(const struct intel_engine_cs 
*engine)
intel_runtime_pm_get_noresume(dev_priv);
dev_priv->gt.awake = true;
 
+   intel_enable_gt_powersave(dev_priv);
i915_update_gfx_val(dev_priv);
if (INTEL_GEN(dev_priv) >= 6)
gen6_rps_busy(dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 00116092b18a..78beb7e9d384 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -15502,7 +15502,6 @@ void intel_modeset_init_hw(struct drm_device *dev)
dev_priv->atomic_cdclk_freq = dev_priv->cdclk_freq;
 
intel_init_clock_gating(dev);
-   intel_enable_gt_powersave(dev_priv);
 }
 
 /*
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 8bb98ec32da3..e74d851868c5 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1691,9 +1691,12 @@ void intel_pm_setup(struct drm_device *dev);
 void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
 void intel_gpu_ips_teardown(void);
 void intel_init_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_cleanup_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_sanitize_gt_powersave(struct drm_i915_private *dev_priv);
 void intel_enable_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_autoenable_gt_powersave(struct drm_i915_private *dev_priv);
 void intel_disable_gt_powersave(struct drm_i915_private *dev_priv);
-void intel_cleanup_gt_powersave(struct drm_i915_private *dev_priv);
+void intel_suspend_gt_powersave(struct drm_i915_private *dev_priv);
 void gen6_rps_busy(struct drm_i915_private *dev_priv);
 void gen6_rps_reset_ei(struct drm_i915_private *dev_priv);
 void gen6_rps_idle(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 45753e1aa7f1..64d628c915a3 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i9