drm/i915: don't allow interlaced pipeconf on gen2
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Sat, 28 Jan 2012 13:49:23 +0000 (14:49 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 10 Feb 2012 16:28:45 +0000 (17:28 +0100)
gen2 doesn't support it, so be a bit more paranoid and add a check to
ensure that we never ever set an unsupported interlaced bit.

Ensure that userspace can't set an interlaced mode by resetting
interlace_allowed for the crt on gen2. dvo and lvds are the only other
encoders that gen2 supports and these already disallow interlaced
modes.

Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_crt.c
drivers/gpu/drm/i915/intel_display.c

index dd729d46a61fb55a3caffb265cce9744cebd2e57..4d3d736a4f56a9c65b315162dac4dc1b2b372c28 100644 (file)
@@ -594,7 +594,10 @@ void intel_crt_init(struct drm_device *dev)
                                1 << INTEL_ANALOG_CLONE_BIT |
                                1 << INTEL_SDVO_LVDS_CLONE_BIT);
        crt->base.crtc_mask = (1 << 0) | (1 << 1);
-       connector->interlace_allowed = 1;
+       if (IS_GEN2(dev))
+               connector->interlace_allowed = 0;
+       else
+               connector->interlace_allowed = 1;
        connector->doublescan_allowed = 0;
 
        drm_encoder_helper_add(&crt->base.base, &intel_crt_helper_funcs);
index d588aec47904029f97b1717c1fe6b721e0068b3a..1fde35d536083163ee6411c200bc0a4de432d741 100644 (file)
@@ -5385,7 +5385,8 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
        }
 
        pipeconf &= ~PIPECONF_INTERLACE_MASK;
-       if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
+       if (!IS_GEN2(dev) &&
+           adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
                pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
                /* the chip adds 2 halflines automatically */
                adjusted_mode->crtc_vtotal -= 1;