diff options
author | Vijay Purushothaman <vijay.a.purushothaman@linux.intel.com> | 2015-03-05 09:00:57 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-03-17 17:30:12 -0400 |
commit | a945ce7e4eeb9c629d8a75b78203b026f74c2ea2 (patch) | |
tree | ed395d3f6d75bc1a36d97212f3d0b15db6e30022 /drivers | |
parent | ca2b1403e2a3fcfec462c1c75ec2b0f93d65590a (diff) |
drm/i915: Disable M2 frac division for integer case
v2 : Handle M2 frac division for both M2 frac and int cases
v3 : Addressed Ville's review comments. Cleared the old bits for RMW
v4 : Fix feedfwd gain (Ville)
Signed-off-by: Vijay Purushothaman <vijay.a.purushothaman@linux.intel.com>
Reviewed-by: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 14 |
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index f700922bcb56..17b662f0849d 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -1029,6 +1029,7 @@ enum skl_disp_power_wells { | |||
1029 | #define DPIO_CHV_FIRST_MOD (0 << 8) | 1029 | #define DPIO_CHV_FIRST_MOD (0 << 8) |
1030 | #define DPIO_CHV_SECOND_MOD (1 << 8) | 1030 | #define DPIO_CHV_SECOND_MOD (1 << 8) |
1031 | #define DPIO_CHV_FEEDFWD_GAIN_SHIFT 0 | 1031 | #define DPIO_CHV_FEEDFWD_GAIN_SHIFT 0 |
1032 | #define DPIO_CHV_FEEDFWD_GAIN_MASK (0xF << 0) | ||
1032 | #define CHV_PLL_DW3(ch) _PIPE(ch, _CHV_PLL_DW3_CH0, _CHV_PLL_DW3_CH1) | 1033 | #define CHV_PLL_DW3(ch) _PIPE(ch, _CHV_PLL_DW3_CH0, _CHV_PLL_DW3_CH1) |
1033 | 1034 | ||
1034 | #define _CHV_PLL_DW6_CH0 0x8018 | 1035 | #define _CHV_PLL_DW6_CH0 0x8018 |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index c3a58886b32f..8676cb8deaf8 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -6161,6 +6161,7 @@ static void chv_prepare_pll(struct intel_crtc *crtc, | |||
6161 | enum dpio_channel port = vlv_pipe_to_channel(pipe); | 6161 | enum dpio_channel port = vlv_pipe_to_channel(pipe); |
6162 | u32 loopfilter, intcoeff; | 6162 | u32 loopfilter, intcoeff; |
6163 | u32 bestn, bestm1, bestm2, bestp1, bestp2, bestm2_frac; | 6163 | u32 bestn, bestm1, bestm2, bestp1, bestp2, bestm2_frac; |
6164 | u32 dpio_val; | ||
6164 | int refclk; | 6165 | int refclk; |
6165 | 6166 | ||
6166 | bestn = pipe_config->dpll.n; | 6167 | bestn = pipe_config->dpll.n; |
@@ -6169,6 +6170,7 @@ static void chv_prepare_pll(struct intel_crtc *crtc, | |||
6169 | bestm2 = pipe_config->dpll.m2 >> 22; | 6170 | bestm2 = pipe_config->dpll.m2 >> 22; |
6170 | bestp1 = pipe_config->dpll.p1; | 6171 | bestp1 = pipe_config->dpll.p1; |
6171 | bestp2 = pipe_config->dpll.p2; | 6172 | bestp2 = pipe_config->dpll.p2; |
6173 | dpio_val = 0; | ||
6172 | 6174 | ||
6173 | /* | 6175 | /* |
6174 | * Enable Refclk and SSC | 6176 | * Enable Refclk and SSC |
@@ -6194,12 +6196,16 @@ static void chv_prepare_pll(struct intel_crtc *crtc, | |||
6194 | 1 << DPIO_CHV_N_DIV_SHIFT); | 6196 | 1 << DPIO_CHV_N_DIV_SHIFT); |
6195 | 6197 | ||
6196 | /* M2 fraction division */ | 6198 | /* M2 fraction division */ |
6197 | vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW2(port), bestm2_frac); | 6199 | if (bestm2_frac) |
6200 | vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW2(port), bestm2_frac); | ||
6198 | 6201 | ||
6199 | /* M2 fraction division enable */ | 6202 | /* M2 fraction division enable */ |
6200 | vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW3(port), | 6203 | dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW3(port)); |
6201 | DPIO_CHV_FRAC_DIV_EN | | 6204 | dpio_val &= ~(DPIO_CHV_FEEDFWD_GAIN_MASK | DPIO_CHV_FRAC_DIV_EN); |
6202 | (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT)); | 6205 | dpio_val |= (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT); |
6206 | if (bestm2_frac) | ||
6207 | dpio_val |= DPIO_CHV_FRAC_DIV_EN; | ||
6208 | vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW3(port), dpio_val); | ||
6203 | 6209 | ||
6204 | /* Loop filter */ | 6210 | /* Loop filter */ |
6205 | refclk = i9xx_get_refclk(crtc, 0); | 6211 | refclk = i9xx_get_refclk(crtc, 0); |