diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-09-25 17:24:01 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-10-01 01:45:25 -0400 |
commit | 662c6ecbcdca1fe8a5402f6c83d98d242917a043 (patch) | |
tree | 2952928eeda7ddc199351ca596bf3b247dfc2ca5 /drivers/gpu/drm/i915/intel_display.c | |
parent | acbec814a27f233b5ddb88a1bcaa2ac20daf64e0 (diff) |
drm/i915/vlv: fix up broken precision in vlv_crtc_clock_get
With some divider values we end up with the wrong result. So remove the
intermediates (like Ville suggested in the first place) to get the right
answer.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 5b52ab0ccaff..f52e6d4ebb2e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -5084,7 +5084,7 @@ static void vlv_crtc_clock_get(struct intel_crtc *crtc, | |||
5084 | int pipe = pipe_config->cpu_transcoder; | 5084 | int pipe = pipe_config->cpu_transcoder; |
5085 | intel_clock_t clock; | 5085 | intel_clock_t clock; |
5086 | u32 mdiv; | 5086 | u32 mdiv; |
5087 | int refclk = 100000, fastclk, update_rate; | 5087 | int refclk = 100000; |
5088 | 5088 | ||
5089 | mutex_lock(&dev_priv->dpio_lock); | 5089 | mutex_lock(&dev_priv->dpio_lock); |
5090 | mdiv = vlv_dpio_read(dev_priv, pipe, DPIO_DIV(pipe)); | 5090 | mdiv = vlv_dpio_read(dev_priv, pipe, DPIO_DIV(pipe)); |
@@ -5096,10 +5096,8 @@ static void vlv_crtc_clock_get(struct intel_crtc *crtc, | |||
5096 | clock.p1 = (mdiv >> DPIO_P1_SHIFT) & 7; | 5096 | clock.p1 = (mdiv >> DPIO_P1_SHIFT) & 7; |
5097 | clock.p2 = (mdiv >> DPIO_P2_SHIFT) & 0x1f; | 5097 | clock.p2 = (mdiv >> DPIO_P2_SHIFT) & 0x1f; |
5098 | 5098 | ||
5099 | update_rate = refclk / clock.n; | 5099 | clock.vco = refclk * clock.m1 * clock.m2 / clock.n; |
5100 | clock.vco = update_rate * clock.m1 * clock.m2; | 5100 | clock.dot = 2 * clock.vco / (clock.p1 * clock.p2); |
5101 | fastclk = clock.vco / clock.p1 / clock.p2; | ||
5102 | clock.dot = (2 * fastclk); | ||
5103 | 5101 | ||
5104 | pipe_config->port_clock = clock.dot / 10; | 5102 | pipe_config->port_clock = clock.dot / 10; |
5105 | } | 5103 | } |