Skip to content

Commit 617cf88

Browse files
committed
drm/i915: fixup interlaced bits clearing in PIPECONF on PCH_SPLIT (v2)
An identical patch has been merged for i9xx_crtc_mode_set: Commit 59df7b1 Author: Christian Schmidt <[email protected]> Date: Mon Dec 19 20:03:33 2011 +0100 drm/intel: Fix initialization if startup happens in interlaced mode [v2] But that one neglected to fix up the ironlake+ path. This should fix the issue reported by Alfonso Fiore where booting with only a HDMI cable connected to his TV failed to display anything. The issue is that the bios set up things for 1080i and used the pannel fitter to scale up the lower progressive resolutions. We failed to clear the interlace bit in the PIPEACONF register, resulting in havoc. v2: Be more paranoid and just unconditionally clear the field before setting new values. Cc: Peter Ross <[email protected]> Cc: Alfonso Fiore <[email protected]> Signed-Off-by: Daniel Vetter <[email protected]> Signed-off-by: Keith Packard <[email protected]>
1 parent e57b688 commit 617cf88

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/gpu/drm/i915/intel_display.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5307,6 +5307,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
53075307
}
53085308
}
53095309

5310+
pipeconf &= ~PIPECONF_INTERLACE_MASK;
53105311
if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
53115312
pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
53125313
/* the chip adds 2 halflines automatically */
@@ -5317,7 +5318,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
53175318
adjusted_mode->crtc_vsync_end -= 1;
53185319
adjusted_mode->crtc_vsync_start -= 1;
53195320
} else
5320-
pipeconf &= ~PIPECONF_INTERLACE_MASK; /* progressive */
5321+
pipeconf |= PIPECONF_PROGRESSIVE;
53215322

53225323
I915_WRITE(HTOTAL(pipe),
53235324
(adjusted_mode->crtc_hdisplay - 1) |
@@ -5902,6 +5903,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
59025903
}
59035904
}
59045905

5906+
pipeconf &= ~PIPECONF_INTERLACE_MASK;
59055907
if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
59065908
pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
59075909
/* the chip adds 2 halflines automatically */
@@ -5912,7 +5914,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
59125914
adjusted_mode->crtc_vsync_end -= 1;
59135915
adjusted_mode->crtc_vsync_start -= 1;
59145916
} else
5915-
pipeconf &= ~PIPECONF_INTERLACE_MASK; /* progressive */
5917+
pipeconf |= PIPECONF_PROGRESSIVE;
59165918

59175919
I915_WRITE(HTOTAL(pipe),
59185920
(adjusted_mode->crtc_hdisplay - 1) |

0 commit comments

Comments
 (0)