diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_fbdev.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_fbdev.c | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index b4d44e62f0c7..f73ba5e6b7a8 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c @@ -132,6 +132,16 @@ static int intelfb_create(struct drm_fb_helper *helper,  	mutex_lock(&dev->struct_mutex); +	if (intel_fb && +	    (sizes->fb_width > intel_fb->base.width || +	     sizes->fb_height > intel_fb->base.height)) { +		DRM_DEBUG_KMS("BIOS fb too small (%dx%d), we require (%dx%d)," +			      " releasing it\n", +			      intel_fb->base.width, intel_fb->base.height, +			      sizes->fb_width, sizes->fb_height); +		drm_framebuffer_unreference(&intel_fb->base); +		intel_fb = ifbdev->fb = NULL; +	}  	if (!intel_fb || WARN_ON(!intel_fb->obj)) {  		DRM_DEBUG_KMS("no BIOS fb, allocating a new one\n");  		ret = intelfb_alloc(helper, sizes); @@ -377,6 +387,15 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,  							  height);  		} +		/* No preferred mode marked by the EDID? Are there any modes? */ +		if (!modes[i] && !list_empty(&connector->modes)) { +			DRM_DEBUG_KMS("using first mode listed on connector %s\n", +				      drm_get_connector_name(connector)); +			modes[i] = list_first_entry(&connector->modes, +						    struct drm_display_mode, +						    head); +		} +  		/* last resort: use current mode */  		if (!modes[i]) {  			/* | 
