mode issue about no EDID and first mode when weston start

Kristian Høgsberg hoegsberg at gmail.com
Mon Jul 30 14:14:34 PDT 2012


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