On Mon, Sep 02, 2013 at 09:13:39PM +0300, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > intel_fixed_panel_mode() overwrote the adjusted_mode with the fixed mode > only partially. Notably it forgot to copy over the sync flags. The LVDS > code however programmed the hardware with the sync flags from fixed > mode, and then later the pipe config comparison obviously failed as we > filled out the adjusted_mode in get_config from the real registers. > > Just call drm_mode_copy() in intel_fixed_panel_mode() to copy over the > whole thing, and then just use adjusted_mode in the LVDS code to figure > out which sync settings the hardware needs. > > Also constify the fixed_mode argument to intel_fixed_panel_mode(). > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Makes too much sense, so merged right away to dinq ;-) Thanks, Daniel > --- > drivers/gpu/drm/i915/intel_drv.h | 2 +- > drivers/gpu/drm/i915/intel_lvds.c | 8 ++++---- > drivers/gpu/drm/i915/intel_panel.c | 14 ++------------ > 3 files changed, 7 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 594d9f4..a71b47c 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -559,7 +559,7 @@ extern int intel_panel_init(struct intel_panel *panel, > struct drm_display_mode *fixed_mode); > extern void intel_panel_fini(struct intel_panel *panel); > > -extern void intel_fixed_panel_mode(struct drm_display_mode *fixed_mode, > +extern void intel_fixed_panel_mode(const struct drm_display_mode *fixed_mode, > struct drm_display_mode *adjusted_mode); > extern void intel_pch_panel_fitting(struct intel_crtc *crtc, > struct intel_crtc_config *pipe_config, > diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c > index 4d33278..831a5c0 100644 > --- a/drivers/gpu/drm/i915/intel_lvds.c > +++ b/drivers/gpu/drm/i915/intel_lvds.c > @@ -128,8 +128,8 @@ static void intel_pre_enable_lvds(struct intel_encoder *encoder) > struct drm_device *dev = encoder->base.dev; > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); > - struct drm_display_mode *fixed_mode = > - lvds_encoder->attached_connector->base.panel.fixed_mode; > + const struct drm_display_mode *adjusted_mode = > + &crtc->config.adjusted_mode; > int pipe = crtc->pipe; > u32 temp; > > @@ -183,9 +183,9 @@ static void intel_pre_enable_lvds(struct intel_encoder *encoder) > temp &= ~LVDS_ENABLE_DITHER; > } > temp &= ~(LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY); > - if (fixed_mode->flags & DRM_MODE_FLAG_NHSYNC) > + if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) > temp |= LVDS_HSYNC_POLARITY; > - if (fixed_mode->flags & DRM_MODE_FLAG_NVSYNC) > + if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) > temp |= LVDS_VSYNC_POLARITY; > > I915_WRITE(lvds_encoder->reg, temp); > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c > index c361f04..c9dba46 100644 > --- a/drivers/gpu/drm/i915/intel_panel.c > +++ b/drivers/gpu/drm/i915/intel_panel.c > @@ -36,20 +36,10 @@ > #define PCI_LBPC 0xf4 /* legacy/combination backlight modes */ > > void > -intel_fixed_panel_mode(struct drm_display_mode *fixed_mode, > +intel_fixed_panel_mode(const struct drm_display_mode *fixed_mode, > struct drm_display_mode *adjusted_mode) > { > - adjusted_mode->hdisplay = fixed_mode->hdisplay; > - adjusted_mode->hsync_start = fixed_mode->hsync_start; > - adjusted_mode->hsync_end = fixed_mode->hsync_end; > - adjusted_mode->htotal = fixed_mode->htotal; > - > - adjusted_mode->vdisplay = fixed_mode->vdisplay; > - adjusted_mode->vsync_start = fixed_mode->vsync_start; > - adjusted_mode->vsync_end = fixed_mode->vsync_end; > - adjusted_mode->vtotal = fixed_mode->vtotal; > - > - adjusted_mode->clock = fixed_mode->clock; > + drm_mode_copy(adjusted_mode, fixed_mode); > > drm_mode_set_crtcinfo(adjusted_mode, 0); > } > -- > 1.8.1.5 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx