diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_fbdev.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_fbdev.c | 26 | 
1 files changed, 18 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index 97a91e631915..ab8d09a81f14 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c @@ -122,6 +122,7 @@ static int intelfb_alloc(struct drm_fb_helper *helper,  	struct drm_framebuffer *fb;  	struct drm_device *dev = helper->dev;  	struct drm_i915_private *dev_priv = to_i915(dev); +	struct i915_ggtt *ggtt = &dev_priv->ggtt;  	struct drm_mode_fb_cmd2 mode_cmd = {};  	struct drm_i915_gem_object *obj = NULL;  	int size, ret; @@ -146,7 +147,7 @@ static int intelfb_alloc(struct drm_fb_helper *helper,  	/* If the FB is too big, just don't use it since fbdev is not very  	 * important and we should probably use that space with FBC or other  	 * features. */ -	if (size * 2 < dev_priv->gtt.stolen_usable_size) +	if (size * 2 < ggtt->stolen_usable_size)  		obj = i915_gem_object_create_stolen(dev, size);  	if (obj == NULL)  		obj = i915_gem_alloc_object(dev, size); @@ -181,7 +182,8 @@ static int intelfb_create(struct drm_fb_helper *helper,  		container_of(helper, struct intel_fbdev, helper);  	struct intel_framebuffer *intel_fb = ifbdev->fb;  	struct drm_device *dev = helper->dev; -	struct drm_i915_private *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = to_i915(dev); +	struct i915_ggtt *ggtt = &dev_priv->ggtt;  	struct fb_info *info;  	struct drm_framebuffer *fb;  	struct drm_i915_gem_object *obj; @@ -220,7 +222,7 @@ static int intelfb_create(struct drm_fb_helper *helper,  	 * This also validates that any existing fb inherited from the  	 * BIOS is suitable for own access.  	 */ -	ret = intel_pin_and_fence_fb_obj(NULL, &ifbdev->fb->base, NULL); +	ret = intel_pin_and_fence_fb_obj(&ifbdev->fb->base, BIT(DRM_ROTATE_0));  	if (ret)  		goto out_unlock; @@ -244,13 +246,13 @@ static int intelfb_create(struct drm_fb_helper *helper,  	/* setup aperture base/size for vesafb takeover */  	info->apertures->ranges[0].base = dev->mode_config.fb_base; -	info->apertures->ranges[0].size = dev_priv->gtt.mappable_end; +	info->apertures->ranges[0].size = ggtt->mappable_end;  	info->fix.smem_start = dev->mode_config.fb_base + i915_gem_obj_ggtt_offset(obj);  	info->fix.smem_len = size;  	info->screen_base = -		ioremap_wc(dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(obj), +		ioremap_wc(ggtt->mappable_base + i915_gem_obj_ggtt_offset(obj),  			   size);  	if (!info->screen_base) {  		DRM_ERROR("Failed to remap framebuffer into virtual memory\n"); @@ -366,12 +368,12 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,  	uint64_t conn_configured = 0, mask;  	int pass = 0; -	save_enabled = kcalloc(dev->mode_config.num_connector, sizeof(bool), +	save_enabled = kcalloc(fb_helper->connector_count, sizeof(bool),  			       GFP_KERNEL);  	if (!save_enabled)  		return false; -	memcpy(save_enabled, enabled, dev->mode_config.num_connector); +	memcpy(save_enabled, enabled, fb_helper->connector_count);  	mask = (1 << fb_helper->connector_count) - 1;  retry:  	for (i = 0; i < fb_helper->connector_count; i++) { @@ -379,6 +381,7 @@ retry:  		struct drm_connector *connector;  		struct drm_encoder *encoder;  		struct drm_fb_helper_crtc *new_crtc; +		struct intel_crtc *intel_crtc;  		fb_conn = fb_helper->connector_info[i];  		connector = fb_conn->connector; @@ -420,6 +423,13 @@ retry:  		num_connectors_enabled++; +		intel_crtc = to_intel_crtc(connector->state->crtc); +		for (j = 0; j < 256; j++) { +			intel_crtc->lut_r[j] = j; +			intel_crtc->lut_g[j] = j; +			intel_crtc->lut_b[j] = j; +		} +  		new_crtc = intel_fb_helper_crtc(fb_helper, connector->state->crtc);  		/* @@ -510,7 +520,7 @@ retry:  	if (fallback) {  bail:  		DRM_DEBUG_KMS("Not using firmware configuration\n"); -		memcpy(enabled, save_enabled, dev->mode_config.num_connector); +		memcpy(enabled, save_enabled, fb_helper->connector_count);  		kfree(save_enabled);  		return false;  	}  |