aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2013-11-03 00:07:36 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-11-08 12:09:54 -0500
commite39bf98a91abd5c8fb290f139521dddc3db3c37d (patch)
tree71f046ac641f15105461180bc86d49ca5cbcf0c7 /drivers/gpu
parent756f85cffef2bc84aa85b25031c1c97721928bd2 (diff)
drm/i915/bdw: get the correct LCPLL frequency on Broadwell
v2: Rebased onto Paulo's MHz->kHz change. v3: Rebased on top of the Haswell pc8+ adjustements. v4: Use the exact 337.5MHz clock, should have been done as part of v2. Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> (v1) Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h3
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c25
2 files changed, 21 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index a4a41f5df469..0b7983b87ce8 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5315,6 +5315,9 @@
5315#define LCPLL_PLL_LOCK (1<<30) 5315#define LCPLL_PLL_LOCK (1<<30)
5316#define LCPLL_CLK_FREQ_MASK (3<<26) 5316#define LCPLL_CLK_FREQ_MASK (3<<26)
5317#define LCPLL_CLK_FREQ_450 (0<<26) 5317#define LCPLL_CLK_FREQ_450 (0<<26)
5318#define LCPLL_CLK_FREQ_54O_BDW (1<<26)
5319#define LCPLL_CLK_FREQ_337_5_BDW (2<<26)
5320#define LCPLL_CLK_FREQ_675_BDW (3<<26)
5318#define LCPLL_CD_CLOCK_DISABLE (1<<25) 5321#define LCPLL_CD_CLOCK_DISABLE (1<<25)
5319#define LCPLL_CD2X_CLOCK_DISABLE (1<<23) 5322#define LCPLL_CD2X_CLOCK_DISABLE (1<<23)
5320#define LCPLL_POWER_DOWN_ALLOW (1<<22) 5323#define LCPLL_POWER_DOWN_ALLOW (1<<22)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 0598669f84e8..060add6468ec 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1158,18 +1158,29 @@ static void intel_disable_ddi(struct intel_encoder *intel_encoder)
1158 1158
1159int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv) 1159int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv)
1160{ 1160{
1161 struct drm_device *dev = dev_priv->dev;
1161 uint32_t lcpll = I915_READ(LCPLL_CTL); 1162 uint32_t lcpll = I915_READ(LCPLL_CTL);
1163 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
1162 1164
1163 if (lcpll & LCPLL_CD_SOURCE_FCLK) 1165 if (lcpll & LCPLL_CD_SOURCE_FCLK) {
1164 return 800000; 1166 return 800000;
1165 else if (I915_READ(HSW_FUSE_STRAP) & HSW_CDCLK_LIMIT) 1167 } else if (I915_READ(HSW_FUSE_STRAP) & HSW_CDCLK_LIMIT) {
1166 return 450000; 1168 return 450000;
1167 else if ((lcpll & LCPLL_CLK_FREQ_MASK) == LCPLL_CLK_FREQ_450) 1169 } else if (freq == LCPLL_CLK_FREQ_450) {
1168 return 450000; 1170 return 450000;
1169 else if (IS_ULT(dev_priv->dev)) 1171 } else if (IS_HASWELL(dev)) {
1170 return 337500; 1172 if (IS_ULT(dev))
1171 else 1173 return 337500;
1172 return 540000; 1174 else
1175 return 540000;
1176 } else {
1177 if (freq == LCPLL_CLK_FREQ_54O_BDW)
1178 return 540000;
1179 else if (freq == LCPLL_CLK_FREQ_337_5_BDW)
1180 return 337500;
1181 else
1182 return 675000;
1183 }
1173} 1184}
1174 1185
1175void intel_ddi_pll_init(struct drm_device *dev) 1186void intel_ddi_pll_init(struct drm_device *dev)