From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 12/12] drm/i915: Fix pipe config warnings when dealing with LVDS fixed mode Date: Mon, 2 Sep 2013 20:44:31 +0200 Message-ID: <20130902184431.GD9374@phenom.ffwll.local> References: <1378145619-22655-1-git-send-email-ville.syrjala@linux.intel.com> <1378145619-22655-13-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Received: from mail-ee0-f46.google.com (mail-ee0-f46.google.com [74.125.83.46]) by gabe.freedesktop.org (Postfix) with ESMTP id 254F4E5D50 for ; Mon, 2 Sep 2013 11:44:17 -0700 (PDT) Received: by mail-ee0-f46.google.com with SMTP id c13so2532412eek.33 for ; Mon, 02 Sep 2013 11:44:17 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1378145619-22655-13-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: ville.syrjala@linux.intel.com Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org On Mon, Sep 02, 2013 at 09:13:39PM +0300, ville.syrjala@linux.intel.com wro= te: > From: Ville Syrj=E4l=E4 > = > 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=E4l=E4 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/inte= l_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/int= el_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_encode= r *encoder) > struct drm_device *dev =3D encoder->base.dev; > struct drm_i915_private *dev_priv =3D dev->dev_private; > struct intel_crtc *crtc =3D to_intel_crtc(encoder->base.crtc); > - struct drm_display_mode *fixed_mode =3D > - lvds_encoder->attached_connector->base.panel.fixed_mode; > + const struct drm_display_mode *adjusted_mode =3D > + &crtc->config.adjusted_mode; > int pipe =3D crtc->pipe; > u32 temp; > = > @@ -183,9 +183,9 @@ static void intel_pre_enable_lvds(struct intel_encode= r *encoder) > temp &=3D ~LVDS_ENABLE_DITHER; > } > temp &=3D ~(LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY); > - if (fixed_mode->flags & DRM_MODE_FLAG_NHSYNC) > + if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) > temp |=3D LVDS_HSYNC_POLARITY; > - if (fixed_mode->flags & DRM_MODE_FLAG_NVSYNC) > + if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) > temp |=3D LVDS_VSYNC_POLARITY; > = > I915_WRITE(lvds_encoder->reg, temp); > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/in= tel_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 =3D fixed_mode->hdisplay; > - adjusted_mode->hsync_start =3D fixed_mode->hsync_start; > - adjusted_mode->hsync_end =3D fixed_mode->hsync_end; > - adjusted_mode->htotal =3D fixed_mode->htotal; > - > - adjusted_mode->vdisplay =3D fixed_mode->vdisplay; > - adjusted_mode->vsync_start =3D fixed_mode->vsync_start; > - adjusted_mode->vsync_end =3D fixed_mode->vsync_end; > - adjusted_mode->vtotal =3D fixed_mode->vtotal; > - > - adjusted_mode->clock =3D 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- = Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch