diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2016-05-13 16:41:33 -0400 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2016-05-23 14:11:15 -0400 |
commit | 709e05c3c46e866243f369a46ca5552a5c1e6b44 (patch) | |
tree | 4bef1cb0c169fd57ff7107773e7a065aefa5512f | |
parent | 63911d7295524e59205ecfa3b2db437544c52eb8 (diff) |
drm/i915: Store cdclk PLL reference clock under dev_priv
Future platforms will have multiple options for the cdclk PLL reference
clock, so let's start tracking that under dev_priv alreday on SKL,
although on SKL it's always 24 MHz.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1463172100-24715-15-git-send-email-ville.syrjala@linux.intel.com
Reviewed-by: Imre Deak <imre.deak@intel.com>
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index f8d8a8119b7c..78d38c246491 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -1823,7 +1823,7 @@ struct drm_i915_private { | |||
1823 | unsigned int czclk_freq; | 1823 | unsigned int czclk_freq; |
1824 | 1824 | ||
1825 | struct { | 1825 | struct { |
1826 | unsigned int vco; | 1826 | unsigned int vco, ref; |
1827 | } cdclk_pll; | 1827 | } cdclk_pll; |
1828 | 1828 | ||
1829 | /** | 1829 | /** |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 40893c0cd960..57771639b94e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -5255,8 +5255,9 @@ static void intel_update_cdclk(struct drm_device *dev) | |||
5255 | dev_priv->cdclk_freq = dev_priv->display.get_display_clock_speed(dev); | 5255 | dev_priv->cdclk_freq = dev_priv->display.get_display_clock_speed(dev); |
5256 | 5256 | ||
5257 | if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) | 5257 | if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) |
5258 | DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz, VCO: %d kHz\n", | 5258 | DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz, VCO: %d kHz, ref: %d kHz\n", |
5259 | dev_priv->cdclk_freq, dev_priv->cdclk_pll.vco); | 5259 | dev_priv->cdclk_freq, dev_priv->cdclk_pll.vco, |
5260 | dev_priv->cdclk_pll.ref); | ||
5260 | else | 5261 | else |
5261 | DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz\n", | 5262 | DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz\n", |
5262 | dev_priv->cdclk_freq); | 5263 | dev_priv->cdclk_freq); |
@@ -5462,6 +5463,8 @@ skl_dpll0_update(struct drm_i915_private *dev_priv) | |||
5462 | { | 5463 | { |
5463 | u32 val; | 5464 | u32 val; |
5464 | 5465 | ||
5466 | dev_priv->cdclk_pll.ref = 24000; | ||
5467 | |||
5465 | val = I915_READ(LCPLL1_CTL); | 5468 | val = I915_READ(LCPLL1_CTL); |
5466 | if ((val & LCPLL_PLL_ENABLE) == 0) { | 5469 | if ((val & LCPLL_PLL_ENABLE) == 0) { |
5467 | dev_priv->cdclk_pll.vco = 0; | 5470 | dev_priv->cdclk_pll.vco = 0; |
@@ -5650,7 +5653,7 @@ static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv); | |||
5650 | 5653 | ||
5651 | void skl_uninit_cdclk(struct drm_i915_private *dev_priv) | 5654 | void skl_uninit_cdclk(struct drm_i915_private *dev_priv) |
5652 | { | 5655 | { |
5653 | skl_set_cdclk(dev_priv, 24000, 0); | 5656 | skl_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref, 0); |
5654 | } | 5657 | } |
5655 | 5658 | ||
5656 | void skl_init_cdclk(struct drm_i915_private *dev_priv) | 5659 | void skl_init_cdclk(struct drm_i915_private *dev_priv) |
@@ -6572,7 +6575,7 @@ static int skylake_get_display_clock_speed(struct drm_device *dev) | |||
6572 | skl_dpll0_update(dev_priv); | 6575 | skl_dpll0_update(dev_priv); |
6573 | 6576 | ||
6574 | if (dev_priv->cdclk_pll.vco == 0) | 6577 | if (dev_priv->cdclk_pll.vco == 0) |
6575 | return 24000; /* 24MHz is the cd freq with NSSC ref */ | 6578 | return dev_priv->cdclk_pll.ref; |
6576 | 6579 | ||
6577 | cdctl = I915_READ(CDCLK_CTL); | 6580 | cdctl = I915_READ(CDCLK_CTL); |
6578 | 6581 | ||
@@ -6604,8 +6607,7 @@ static int skylake_get_display_clock_speed(struct drm_device *dev) | |||
6604 | } | 6607 | } |
6605 | } | 6608 | } |
6606 | 6609 | ||
6607 | /* error case, do as if DPLL0 isn't enabled */ | 6610 | return dev_priv->cdclk_pll.ref; |
6608 | return 24000; | ||
6609 | } | 6611 | } |
6610 | 6612 | ||
6611 | static int broxton_get_display_clock_speed(struct drm_device *dev) | 6613 | static int broxton_get_display_clock_speed(struct drm_device *dev) |