diff options
author | Damien Lespiau <damien.lespiau@intel.com> | 2014-07-29 13:06:24 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-08-08 11:43:39 -0400 |
commit | ad13d6048f5002f1c5ab21c71a5ee136a2d8e889 (patch) | |
tree | 56450f0cc6f875291366adc95f160da24a32ea5a | |
parent | d664c0cece2dd410d8134aa820112e471e3592dd (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.c | 55 |
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 | ||
1195 | int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv) | 1195 | static 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 | |||
1214 | static 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) | 1232 | int 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 | ||
1222 | static void hsw_ddi_pll_enable(struct drm_i915_private *dev_priv, | 1243 | static void hsw_ddi_pll_enable(struct drm_i915_private *dev_priv, |