[Intel-gfx] [PATCH 04/13] drm: add initial_config function to fb helper

Daniel Vetter daniel at ffwll.ch
Tue Mar 26 21:34:29 CET 2013


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 <jbarnes at virtuousgeek.org>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: dri-devel at 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 at 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



More information about the Intel-gfx mailing list