On 01/22/2014 07:10 PM, Paulo Zanoni wrote:
Hi

2014/1/22  <naresh.kumar.kac...@intel.com>:
From: Naresh Kumar Kachhi <naresh.kumar.kac...@intel.com>

Once the display is disabled, we need to call runtime_put to
make sure Runtime framework triggers runtime_suspend based on
idleness. Similarly when display gets enabled, runtime_get should
be called. We have similiar function for pc8 feature, but some
platform(BYT) might not have pc8 feature, so creating a generic
function for runtime_pm
Does this patch series help you somehow?
http://lists.freedesktop.org/archives/intel-gfx/2013-December/037721.html

Yes, this patch series helps here. Do we know when these patches will
bemerged to nightly build?

Signed-off-by: Naresh Kumar Kachhi <naresh.kumar.kac...@intel.com>
---
  drivers/gpu/drm/i915/i915_drv.h  |  2 ++
  drivers/gpu/drm/i915/intel_drv.h |  1 +
  drivers/gpu/drm/i915/intel_pm.c  | 50 ++++++++++++++++++++++++++++++++++++++++
  3 files changed, 53 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index d1399f9..6a6f046 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1325,6 +1325,8 @@ struct i915_package_c8 {
  struct i915_runtime_pm {
         bool suspended;
         bool gpu_idle;
+       bool disp_idle;
+       struct mutex lock;
  };

  enum intel_pipe_crc_source {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 9061aa7..94a6127 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -887,6 +887,7 @@ void intel_init_runtime_pm(struct drm_i915_private 
*dev_priv);
  void intel_fini_runtime_pm(struct drm_i915_private *dev_priv);
  void intel_runtime_pm_gpu_busy(struct drm_i915_private *dev_priv);
  void intel_runtime_pm_gpu_idle(struct drm_i915_private *dev_priv);
+void intel_runtime_update_disp_state(struct drm_i915_private *dev_priv);
  void ilk_wm_get_hw_state(struct drm_device *dev);


diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 991ff62..9d6d0e1 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -5501,6 +5501,54 @@ void intel_runtime_pm_gpu_busy(struct drm_i915_private 
*dev_priv)
         }
  }

+static void intel_runtime_pm_disp_idle(struct drm_i915_private *dev_priv)
+{
+       if (!HAS_RUNTIME_PM(dev_priv->dev))
+               return;
+
+       mutex_lock(&dev_priv->pm.lock);
+       if (!dev_priv->pm.disp_idle) {
+               dev_priv->pm.disp_idle = true;
+               intel_runtime_pm_put(dev_priv);
+       }
+       mutex_unlock(&dev_priv->pm.lock);
+}
+
+static void intel_runtime_pm_disp_busy(struct drm_i915_private *dev_priv)
+{
+       if (!HAS_RUNTIME_PM(dev_priv->dev))
+               return;
+
+       mutex_lock(&dev_priv->pm.lock);
+       if (dev_priv->pm.disp_idle) {
+               dev_priv->pm.disp_idle = false;
+               /* This call is coming from an IOCTL so we have already done a
+                * get_sync. get_noresume should suffice here
+                */
+               intel_runtime_pm_get_noresume(dev_priv);
+       }
+       mutex_unlock(&dev_priv->pm.lock);
+}
+
+void intel_runtime_update_disp_state(struct drm_i915_private *dev_priv)
+{
+       struct drm_device *dev = dev_priv->dev;
+       struct intel_crtc *crtc;
+       bool enabled = false;
+
+       if (!HAS_RUNTIME_PM(dev_priv->dev))
+               return;
+
+       list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head)
+               enabled |= crtc->base.enabled;
+
+       if (enabled)
+               intel_runtime_pm_disp_busy(dev_priv);
+       else
+               intel_runtime_pm_disp_idle(dev_priv);
+
+}
+
  void intel_runtime_pm_get(struct drm_i915_private *dev_priv)
  {
         struct drm_device *dev = dev_priv->dev;
@@ -5547,6 +5595,8 @@ void intel_init_runtime_pm(struct drm_i915_private 
*dev_priv)

         dev_priv->pm.suspended = false;
         dev_priv->pm.gpu_idle = true;
+       dev_priv->pm.disp_idle = true;
+       mutex_init(&dev_priv->pm.lock);

         if (!HAS_RUNTIME_PM(dev))
                 return;
--
1.8.1.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx



_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to