mode issue about no EDID and first mode when weston start

Wang, Quanxian quanxian.wang at intel.com
Tue Jul 31 18:50:32 PDT 2012


Got it.

Thanks

Quanxian Wang

> -----Original Message-----
> From: Kristian Høgsberg [mailto:hoegsberg at gmail.com]
> Sent: Wednesday, August 01, 2012 7:52 AM
> To: Wang, Quanxian
> Cc: wayland-devel at lists.freedesktop.org
> Subject: Re: mode issue about no EDID and first mode when weston start
> 
> On Tue, Jul 31, 2012 at 01:46:17AM +0000, Wang, Quanxian wrote:
> 
> > Ok, if we don't use builtin mode in weston. That is fine. In this
> > case, I supposed to provide some useful error output to user instead
> > of core dump weston.
> 
> Yep, we should handle that better now.
> 
> > Another case is if we don't get active mode from current connector,
> > and at the same time EDID mode information from KMS is available. In
> > this case, I use the first mode we get from KMS as the default mode
> > for connector. If not, we will still core dump weston.
> 
> The EDID information should have a preferred mode.  I guess we can add a
> final fallback to pick the first mode if there is no preferred or current mode.
> Also, there's a patch on the list now from Scott that lets you add a modeline in
> the weston.ini config file.
> 
> Kristian
> 
> > > -----Original Message-----
> > > From: Kristian Høgsberg [mailto:hoegsberg at gmail.com]
> > > Sent: Tuesday, July 31, 2012 5:15 AM
> > > To: Wang, Quanxian
> > > Cc: wayland-devel at lists.freedesktop.org
> > > Subject: Re: mode issue about no EDID and first mode when weston
> > > start
> > >
> > > On Thu, Jul 26, 2012 at 07:54:45PM +0000, Wang, Quanxian wrote:
> > > > Hi, All
> > > >
> > > > Help review.
> > > >
> > > > Background
> > > >
> > > > 1) Some platforms has no EDID mode information. Therefore when KMS
> > > > initializes the driver, there will be no mode provided for user.
> > > > At that time, have to use the fixed mode defined by the
> > > > user.(builtin-800x480)
> > >
> > > What you want to do in this case is to either compile an EDID blob
> > > into the kernel or specify one through the firmware mechanism.  See
> > > Documentation/EDID/HOWTO.txt in the kernel and use
> > >
> > >   video=HDMI-A-1:e drm_kms_helper.edid_firmware=HDMI-A-1:edid
> > >
> > > on the kernel command line.  This example assumes you're trying to
> > > bring up the HDMI-A-1 connector with an edid blob in
> > > /lib/firmware/edid.  That will bring up KMS early on and weston will
> > > be able to reuse the mode set from the custom EDID blob.  We will
> > > also add a feature to specify a modeline in weston.ini, so you'll be able to
> use that instead.  Something like:
> > >
> > > [output]
> > > name=HDMI-A-1
> > > modeline=29.50  800 824 896 992  480 483 493 500 -hsync +vsync
> > >
> > > I don't want to build in a mode in weston.  KMS should give us a
> > > valid mode in all cases and if it doesn't it's probably something
> > > like this case where you have a custom board/driver/panel.
> > >
> > > Kristian
> > >
> > > > 2) In the very beginning of weston restart, there exists a case,
> > > > no active mode is set to connector. We provide the first mode
> > > > gotten from KMS as default mode for connector.
> > > >
> > > > We got weston core dump when weston start because drm will add
> > > > null mode when cases above happen.
> > > >
> > > > commit 1a87302f288497ed8bbef3677286e27bb6931f72
> > > > Author: Wang Quanxian
> > > <quanxian.wang at intel.com<mailto:quanxian.wang at intel.com>>
> > > > Date:   Wed Jul 25 11:21:00 2012 +0800
> > > >
> > > >     Bug fix for mode issue when weston start
> > > >
> > > >     Provide the default builtin(800x480) mode when platforms
> > > >     have no EDID and KMS could not provide mode information.
> > > >     In the very beginning of weston, the connector could not
> > > >     be set active mode. At that time, take the first mode in
> > > >     mode list from KMS as default mode.
> > > >
> > > >     Signed-Off-By Quanxian Wang
> > > > <quanxian.wang at intel.com<mailto:quanxian.wang at intel.com>>
> > > >
> > > > diff --git a/src/compositor-drm.c b/src/compositor-drm.c index
> > > > 4dffa1d..47cd512 100644
> > > > --- a/src/compositor-drm.c
> > > > +++ b/src/compositor-drm.c
> > > > @@ -143,6 +143,16 @@ struct drm_sprite {
> > > >         uint32_t formats[];
> > > >  };
> > > >
> > > > +static drmModeModeInfo builtin_800x480 = {
> > > > +       33750,                  /* clock */
> > > > +       800, 864, 976, 1088, 0,
> > > > +       480, 486, 494, 517, 0,
> > > > +       59920,
> > > > +       DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC,
> > > > +       0,
> > > > +       "800x480"
> > > > +};
> > > > +
> > > >  static int
> > > >  surface_is_primary(struct weston_compositor *ec, struct
> > > > weston_surface *es)  { @@ -1344,13 +1354,30 @@
> > > > create_output_for_connector(struct drm_compositor *ec,
> > > >         drmModeFreeEncoder(encoder);
> > > >         if (crtc == NULL)
> > > >                 goto err_free;
> > > > -       crtc_mode = crtc->mode;
> > > > +
> > > > +       /* if don't get mode from drm driver, use default 800x480 */
> > > > +       if (crtc->mode.clock != 0)
> > > > +       {
> > > > +               crtc_mode = crtc->mode;
> > > > +       } else {
> > > > +               if (connector->count_modes == 0)
> > > > +                       crtc_mode = builtin_800x480;
> > > > +               else
> > > > +                       crtc_mode = connector->modes[0];
> > > > +       }
> > > > +
> > > >         drmModeFreeCrtc(crtc);
> > > >
> > > > -       for (i = 0; i < connector->count_modes; i++) {
> > > > -               ret = drm_output_add_mode(output,
> > > &connector->modes[i]);
> > > > +       if (connector->count_modes == 0) {
> > > > +               ret = drm_output_add_mode(output, &crtc_mode);
> > > >                 if (ret)
> > > >                         goto err_free;
> > > > +       }else{
> > > > +               for (i = 0; i < connector->count_modes; i++) {
> > > > +                       ret = drm_output_add_mode(output,
> > > &connector->modes[i]);
> > > > +                       if (ret)
> > > > +                               goto err_free;
> > > > +               }
> > > >         }
> > > >
> > > >         preferred = NULL;
> > > >
> > > >
> > > > Thanks
> > > >
> > > > Quanxian Wang
> > > >
> > > >
> > >
> > >
> > > > _______________________________________________
> > > > wayland-devel mailing list
> > > > wayland-devel at lists.freedesktop.org
> > > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> >


More information about the wayland-devel mailing list