diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2013-11-03 00:07:36 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-11-08 12:09:54 -0500 |
commit | e39bf98a91abd5c8fb290f139521dddc3db3c37d (patch) | |
tree | 71f046ac641f15105461180bc86d49ca5cbcf0c7 /drivers/gpu | |
parent | 756f85cffef2bc84aa85b25031c1c97721928bd2 (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.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 25 |
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 | ||
1159 | int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv) | 1159 | int 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 | ||
1175 | void intel_ddi_pll_init(struct drm_device *dev) | 1186 | void intel_ddi_pll_init(struct drm_device *dev) |