On Tue, Feb 19, 2013 at 01:31:39PM -0800, Jesse Barnes wrote:
> Rather than building a config which may or may not work, let the driver
> build an initial fb config.  This allows the driver to use the BIOS boot
> configuration for example, displaying kernel messages and the initial fb
> console on the same outputs the BIOS lit up at boot time.  If that
> fails, the driver can still fall back the same way as the core.
> 
> Signed-off-by: Jesse Barnes <jbar...@virtuousgeek.org>
> Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
> Cc: dri-de...@lists.freedesktop.org
Queued for -next with Dave's irc ack, thanks for the patch. Note that
you've frobbed the authorship stuff a bit, probably through an amend,
without adding a patch reflog. Tsk ;-)
-Daniel

> ---
>  drivers/gpu/drm/drm_fb_helper.c |   23 +++++++++++++++--------
>  include/drm/drm_fb_helper.h     |    4 ++++
>  2 files changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 0c6e25e..0d96471 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -1275,7 +1275,7 @@ static void drm_setup_crtcs(struct drm_fb_helper 
> *fb_helper)
>       struct drm_mode_set *modeset;
>       bool *enabled;
>       int width, height;
> -     int i, ret;
> +     int i;
>  
>       DRM_DEBUG_KMS("\n");
>  
> @@ -1296,16 +1296,23 @@ static void drm_setup_crtcs(struct drm_fb_helper 
> *fb_helper)
>  
>       drm_enable_connectors(fb_helper, enabled);
>  
> -     ret = drm_target_cloned(fb_helper, modes, enabled, width, height);
> -     if (!ret) {
> -             ret = drm_target_preferred(fb_helper, modes, enabled, width, 
> height);
> -             if (!ret)
> +     if (!(fb_helper->funcs->initial_config &&
> +           fb_helper->funcs->initial_config(fb_helper, crtcs, modes,
> +                                            enabled, width, height))) {
> +             memset(modes, 0, 
> dev->mode_config.num_connector*sizeof(modes[0]));
> +             memset(crtcs, 0, 
> dev->mode_config.num_connector*sizeof(crtcs[0]));
> +
> +             if (!drm_target_cloned(fb_helper,
> +                                    modes, enabled, width, height) &&
> +                 !drm_target_preferred(fb_helper,
> +                                       modes, enabled, width, height))
>                       DRM_ERROR("Unable to find initial modes\n");
> -     }
>  
> -     DRM_DEBUG_KMS("picking CRTCs for %dx%d config\n", width, height);
> +             DRM_DEBUG_KMS("picking CRTCs for %dx%d config\n",
> +                           width, height);
>  
> -     drm_pick_crtcs(fb_helper, crtcs, modes, 0, width, height);
> +             drm_pick_crtcs(fb_helper, crtcs, modes, 0, width, height);
> +     }
>  
>       /* need to set the modesets up here for use later */
>       /* fill out the connector<->crtc mappings into the modesets */
> diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
> index 5120b01..40b0c5c 100644
> --- a/include/drm/drm_fb_helper.h
> +++ b/include/drm/drm_fb_helper.h
> @@ -56,6 +56,10 @@ struct drm_fb_helper_funcs {
>  
>       int (*fb_probe)(struct drm_fb_helper *helper,
>                       struct drm_fb_helper_surface_size *sizes);
> +     bool (*initial_config)(struct drm_fb_helper *fb_helper,
> +                            struct drm_fb_helper_crtc **crtcs,
> +                            struct drm_display_mode **modes,
> +                            bool *enabled, int width, int height);
>  };
>  
>  struct drm_fb_helper_connector {
> -- 
> 1.7.9.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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to