diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2014-03-28 17:29:32 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-03-31 04:46:33 -0400 |
commit | 1caea6e945e0867d391369097937620c945dcec1 (patch) | |
tree | 571c190878b0e9f8fd0d787e7066a488409f9443 | |
parent | efc2cfff28a9424a0f9f8b068c6c8697435664c3 (diff) |
drm/i915: Make sure vsyncshift is positive
If vsyncshift comes out as negative, add one htotal to it to get the
corresponding positive value.
This is rather theoretical as it would require a mode where the
hsync+back porch is very long and the active+front porch very short.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index a0f4ac187f1a..56018b79da62 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -5369,7 +5369,8 @@ static void intel_set_pipe_timings(struct intel_crtc *intel_crtc) | |||
5369 | enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder; | 5369 | enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder; |
5370 | struct drm_display_mode *adjusted_mode = | 5370 | struct drm_display_mode *adjusted_mode = |
5371 | &intel_crtc->config.adjusted_mode; | 5371 | &intel_crtc->config.adjusted_mode; |
5372 | uint32_t vsyncshift = 0, crtc_vtotal, crtc_vblank_end; | 5372 | uint32_t crtc_vtotal, crtc_vblank_end; |
5373 | int vsyncshift = 0; | ||
5373 | 5374 | ||
5374 | /* We need to be careful not to changed the adjusted mode, for otherwise | 5375 | /* We need to be careful not to changed the adjusted mode, for otherwise |
5375 | * the hw state checker will get angry at the mismatch. */ | 5376 | * the hw state checker will get angry at the mismatch. */ |
@@ -5386,6 +5387,8 @@ static void intel_set_pipe_timings(struct intel_crtc *intel_crtc) | |||
5386 | else | 5387 | else |
5387 | vsyncshift = adjusted_mode->crtc_hsync_start - | 5388 | vsyncshift = adjusted_mode->crtc_hsync_start - |
5388 | adjusted_mode->crtc_htotal / 2; | 5389 | adjusted_mode->crtc_htotal / 2; |
5390 | if (vsyncshift < 0) | ||
5391 | vsyncshift += adjusted_mode->crtc_htotal; | ||
5389 | } | 5392 | } |
5390 | 5393 | ||
5391 | if (INTEL_INFO(dev)->gen > 3) | 5394 | if (INTEL_INFO(dev)->gen > 3) |