diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2014-07-04 10:27:38 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-07-10 16:12:37 -0400 |
commit | bd2bb1b9a1c8b8f7b673db22d628ffd491669deb (patch) | |
tree | 43ba68484caf27b4c34bc4e73470cce779cab73f | |
parent | 96f6128cbb1cf020e5b4c53656fd6b2f588727d9 (diff) |
drm/i915: add POWER_DOMAIN_PLLS
And get/put it when needed. The special thing about this commit is
that it will now return false in ibx_pch_dpll_get_hw_state() in case
the power domain is not enabled. This will fix some WARNs we have when
we run pm_rpm on SNB.
Testcase: igt/pm_rpm
Bugzilla:https://bugs.freedesktop.org/show_bug.cgi?id=80463
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 1 |
4 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index f22a81dba64a..2effe1a37815 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -2043,6 +2043,8 @@ static const char *power_domain_str(enum intel_display_power_domain domain) | |||
2043 | return "VGA"; | 2043 | return "VGA"; |
2044 | case POWER_DOMAIN_AUDIO: | 2044 | case POWER_DOMAIN_AUDIO: |
2045 | return "AUDIO"; | 2045 | return "AUDIO"; |
2046 | case POWER_DOMAIN_PLLS: | ||
2047 | return "PLLS"; | ||
2046 | case POWER_DOMAIN_INIT: | 2048 | case POWER_DOMAIN_INIT: |
2047 | return "INIT"; | 2049 | return "INIT"; |
2048 | default: | 2050 | default: |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 26982d12039f..479a9aa77ee3 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -129,6 +129,7 @@ enum intel_display_power_domain { | |||
129 | POWER_DOMAIN_PORT_OTHER, | 129 | POWER_DOMAIN_PORT_OTHER, |
130 | POWER_DOMAIN_VGA, | 130 | POWER_DOMAIN_VGA, |
131 | POWER_DOMAIN_AUDIO, | 131 | POWER_DOMAIN_AUDIO, |
132 | POWER_DOMAIN_PLLS, | ||
132 | POWER_DOMAIN_INIT, | 133 | POWER_DOMAIN_INIT, |
133 | 134 | ||
134 | POWER_DOMAIN_NUM, | 135 | POWER_DOMAIN_NUM, |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 0874f3589722..d61c5e43fc19 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -1814,6 +1814,8 @@ static void intel_enable_shared_dpll(struct intel_crtc *crtc) | |||
1814 | } | 1814 | } |
1815 | WARN_ON(pll->on); | 1815 | WARN_ON(pll->on); |
1816 | 1816 | ||
1817 | intel_display_power_get(dev_priv, POWER_DOMAIN_PLLS); | ||
1818 | |||
1817 | DRM_DEBUG_KMS("enabling %s\n", pll->name); | 1819 | DRM_DEBUG_KMS("enabling %s\n", pll->name); |
1818 | pll->enable(dev_priv, pll); | 1820 | pll->enable(dev_priv, pll); |
1819 | pll->on = true; | 1821 | pll->on = true; |
@@ -1850,6 +1852,8 @@ static void intel_disable_shared_dpll(struct intel_crtc *crtc) | |||
1850 | DRM_DEBUG_KMS("disabling %s\n", pll->name); | 1852 | DRM_DEBUG_KMS("disabling %s\n", pll->name); |
1851 | pll->disable(dev_priv, pll); | 1853 | pll->disable(dev_priv, pll); |
1852 | pll->on = false; | 1854 | pll->on = false; |
1855 | |||
1856 | intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS); | ||
1853 | } | 1857 | } |
1854 | 1858 | ||
1855 | static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv, | 1859 | static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv, |
@@ -11302,6 +11306,9 @@ static bool ibx_pch_dpll_get_hw_state(struct drm_i915_private *dev_priv, | |||
11302 | { | 11306 | { |
11303 | uint32_t val; | 11307 | uint32_t val; |
11304 | 11308 | ||
11309 | if (!intel_display_power_enabled(dev_priv, POWER_DOMAIN_PLLS)) | ||
11310 | return false; | ||
11311 | |||
11305 | val = I915_READ(PCH_DPLL(pll->id)); | 11312 | val = I915_READ(PCH_DPLL(pll->id)); |
11306 | hw_state->dpll = val; | 11313 | hw_state->dpll = val; |
11307 | hw_state->fp0 = I915_READ(PCH_FP0(pll->id)); | 11314 | hw_state->fp0 = I915_READ(PCH_FP0(pll->id)); |
@@ -12867,6 +12874,9 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) | |||
12867 | 12874 | ||
12868 | DRM_DEBUG_KMS("%s hw state readout: refcount %i, on %i\n", | 12875 | DRM_DEBUG_KMS("%s hw state readout: refcount %i, on %i\n", |
12869 | pll->name, pll->refcount, pll->on); | 12876 | pll->name, pll->refcount, pll->on); |
12877 | |||
12878 | if (pll->refcount) | ||
12879 | intel_display_power_get(dev_priv, POWER_DOMAIN_PLLS); | ||
12870 | } | 12880 | } |
12871 | 12881 | ||
12872 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, | 12882 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 19c5c26badae..55228df5cf23 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -6346,6 +6346,7 @@ EXPORT_SYMBOL_GPL(i915_get_cdclk_freq); | |||
6346 | BIT(POWER_DOMAIN_PORT_DDI_D_2_LANES) | \ | 6346 | BIT(POWER_DOMAIN_PORT_DDI_D_2_LANES) | \ |
6347 | BIT(POWER_DOMAIN_PORT_DDI_D_4_LANES) | \ | 6347 | BIT(POWER_DOMAIN_PORT_DDI_D_4_LANES) | \ |
6348 | BIT(POWER_DOMAIN_PORT_CRT) | \ | 6348 | BIT(POWER_DOMAIN_PORT_CRT) | \ |
6349 | BIT(POWER_DOMAIN_PLLS) | \ | ||
6349 | BIT(POWER_DOMAIN_INIT)) | 6350 | BIT(POWER_DOMAIN_INIT)) |
6350 | #define HSW_DISPLAY_POWER_DOMAINS ( \ | 6351 | #define HSW_DISPLAY_POWER_DOMAINS ( \ |
6351 | (POWER_DOMAIN_MASK & ~HSW_ALWAYS_ON_POWER_DOMAINS) | \ | 6352 | (POWER_DOMAIN_MASK & ~HSW_ALWAYS_ON_POWER_DOMAINS) | \ |