From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 11/12] drm: Make drm_match_cea_mode() return the underlying 2D VIC for 3d modes Date: Tue, 17 Sep 2013 11:22:26 +0300 Message-ID: <20130917082226.GQ4531@intel.com> References: <1379353735-4472-1-git-send-email-damien.lespiau@intel.com> <1379353735-4472-12-git-send-email-damien.lespiau@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: <1379353735-4472-12-git-send-email-damien.lespiau@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: Damien Lespiau Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org On Mon, Sep 16, 2013 at 06:48:54PM +0100, Damien Lespiau wrote: > When scanning out a stereo mode, the AVI infoframe vic field has to be > the underlyng 2D VIC. Before that commit, we weren't matching the CEA > mode because of the extra stereo flag and then were setting the VIC > field in the AVI infoframe to 0. I think this is where we hit problems. How do we identify the 2D VIC when the timings of the adjusted mode got mangled already to include both eyes? > = > Signed-off-by: Damien Lespiau > --- > drivers/gpu/drm/drm_edid.c | 4 ++-- > drivers/gpu/drm/drm_modes.c | 18 ++++++++++++------ > include/drm/drm_crtc.h | 2 +- > 3 files changed, 15 insertions(+), 9 deletions(-) > = > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index 9a36b6e..6b74698 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -2401,7 +2401,7 @@ u8 drm_match_cea_mode(const struct drm_display_mode= *to_match) > = > if ((KHZ2PICOS(to_match->clock) =3D=3D KHZ2PICOS(clock1) || > KHZ2PICOS(to_match->clock) =3D=3D KHZ2PICOS(clock2)) && > - drm_mode_equal_no_clocks(to_match, cea_mode)) > + drm_mode_equal_no_clocks_no_stereo(to_match, cea_mode)) > return mode + 1; > } > return 0; > @@ -2450,7 +2450,7 @@ static u8 drm_match_hdmi_mode(const struct drm_disp= lay_mode *to_match) > = > if ((KHZ2PICOS(to_match->clock) =3D=3D KHZ2PICOS(clock1) || > KHZ2PICOS(to_match->clock) =3D=3D KHZ2PICOS(clock2)) && > - drm_mode_equal_no_clocks(to_match, hdmi_mode)) > + drm_mode_equal_no_clocks_no_stereo(to_match, hdmi_mode)) > return mode + 1; > } > return 0; > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c > index 504a602..76adee0 100644 > --- a/drivers/gpu/drm/drm_modes.c > +++ b/drivers/gpu/drm/drm_modes.c > @@ -851,12 +851,16 @@ bool drm_mode_equal(const struct drm_display_mode *= mode1, const struct drm_displ > } else if (mode1->clock !=3D mode2->clock) > return false; > = > - return drm_mode_equal_no_clocks(mode1, mode2); > + if ((mode1->flags & DRM_MODE_FLAG_3D_MASK) !=3D > + (mode2->flags & DRM_MODE_FLAG_3D_MASK)) > + return false; > + > + return drm_mode_equal_no_clocks_no_stereo(mode1, mode2); > } > EXPORT_SYMBOL(drm_mode_equal); > = > /** > - * drm_mode_equal_no_clocks - test modes for equality > + * drm_mode_equal_no_clocks_no_stereo - test modes for equality > * @mode1: first mode > * @mode2: second mode > * > @@ -864,12 +868,13 @@ EXPORT_SYMBOL(drm_mode_equal); > * None. > * > * Check to see if @mode1 and @mode2 are equivalent, but > - * don't check the pixel clocks. > + * don't check the pixel clocks nor the stereo layout. > * > * RETURNS: > * True if the modes are equal, false otherwise. > */ > -bool drm_mode_equal_no_clocks(const struct drm_display_mode *mode1, cons= t struct drm_display_mode *mode2) > +bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *m= ode1, > + const struct drm_display_mode *mode2) > { > if (mode1->hdisplay =3D=3D mode2->hdisplay && > mode1->hsync_start =3D=3D mode2->hsync_start && > @@ -881,12 +886,13 @@ bool drm_mode_equal_no_clocks(const struct drm_disp= lay_mode *mode1, const struct > mode1->vsync_end =3D=3D mode2->vsync_end && > mode1->vtotal =3D=3D mode2->vtotal && > mode1->vscan =3D=3D mode2->vscan && > - mode1->flags =3D=3D mode2->flags) > + (mode1->flags & ~DRM_MODE_FLAG_3D_MASK) =3D=3D > + (mode2->flags & ~DRM_MODE_FLAG_3D_MASK)) > return true; > = > return false; > } > -EXPORT_SYMBOL(drm_mode_equal_no_clocks); > +EXPORT_SYMBOL(drm_mode_equal_no_clocks_no_stereo); > = > /** > * drm_mode_validate_size - make sure modes adhere to size constraints > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index e685baf..f0c5530 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -943,7 +943,7 @@ extern void drm_mode_config_reset(struct drm_device *= dev); > extern void drm_mode_config_cleanup(struct drm_device *dev); > extern void drm_mode_set_name(struct drm_display_mode *mode); > extern bool drm_mode_equal(const struct drm_display_mode *mode1, const s= truct drm_display_mode *mode2); > -extern bool drm_mode_equal_no_clocks(const struct drm_display_mode *mode= 1, const struct drm_display_mode *mode2); > +extern bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_= mode *mode1, const struct drm_display_mode *mode2); > extern int drm_mode_width(const struct drm_display_mode *mode); > extern int drm_mode_height(const struct drm_display_mode *mode); > = > -- = > 1.8.3.1 > = > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- = Ville Syrj=E4l=E4 Intel OTC