aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2014-07-29 13:06:24 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-08-08 11:43:39 -0400
commitad13d6048f5002f1c5ab21c71a5ee136a2d8e889 (patch)
tree56450f0cc6f875291366adc95f160da24a32ea5a
parentd664c0cece2dd410d8134aa820112e471e3592dd (diff)
drm/i915: Split the CDCLK retrieval per-platform
This is only going to get worse, so split it now to avoid adding more cases to the if/else ladder. Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c55
1 files changed, 38 insertions, 17 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index eb8e494ce569..b5870fd920ff 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1192,31 +1192,52 @@ static void intel_disable_ddi(struct intel_encoder *intel_encoder)
1192 } 1192 }
1193} 1193}
1194 1194
1195int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv) 1195static int bdw_get_cdclk_freq(struct drm_i915_private *dev_priv)
1196{
1197 uint32_t lcpll = I915_READ(LCPLL_CTL);
1198 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
1199
1200 if (lcpll & LCPLL_CD_SOURCE_FCLK)
1201 return 800000;
1202 else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
1203 return 450000;
1204 else if (freq == LCPLL_CLK_FREQ_450)
1205 return 450000;
1206 else if (freq == LCPLL_CLK_FREQ_54O_BDW)
1207 return 540000;
1208 else if (freq == LCPLL_CLK_FREQ_337_5_BDW)
1209 return 337500;
1210 else
1211 return 675000;
1212}
1213
1214static int hsw_get_cdclk_freq(struct drm_i915_private *dev_priv)
1196{ 1215{
1197 struct drm_device *dev = dev_priv->dev; 1216 struct drm_device *dev = dev_priv->dev;
1198 uint32_t lcpll = I915_READ(LCPLL_CTL); 1217 uint32_t lcpll = I915_READ(LCPLL_CTL);
1199 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK; 1218 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
1200 1219
1201 if (lcpll & LCPLL_CD_SOURCE_FCLK) { 1220 if (lcpll & LCPLL_CD_SOURCE_FCLK)
1202 return 800000; 1221 return 800000;
1203 } else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT) { 1222 else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
1204 return 450000; 1223 return 450000;
1205 } else if (freq == LCPLL_CLK_FREQ_450) { 1224 else if (freq == LCPLL_CLK_FREQ_450)
1206 return 450000; 1225 return 450000;
1207 } else if (IS_HASWELL(dev)) { 1226 else if (IS_ULT(dev))
1208 if (IS_ULT(dev)) 1227 return 337500;
1209 return 337500; 1228 else
1210 else 1229 return 540000;
1211 return 540000; 1230}
1212 } else { 1231
1213 if (freq == LCPLL_CLK_FREQ_54O_BDW) 1232int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv)
1214 return 540000; 1233{
1215 else if (freq == LCPLL_CLK_FREQ_337_5_BDW) 1234 struct drm_device *dev = dev_priv->dev;
1216 return 337500; 1235
1217 else 1236 if (IS_BROADWELL(dev))
1218 return 675000; 1237 return bdw_get_cdclk_freq(dev_priv);
1219 } 1238
1239 /* Haswell */
1240 return hsw_get_cdclk_freq(dev_priv);
1220} 1241}
1221 1242
1222static void hsw_ddi_pll_enable(struct drm_i915_private *dev_priv, 1243static void hsw_ddi_pll_enable(struct drm_i915_private *dev_priv,