diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_overlay.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_overlay.c | 79 | 
1 files changed, 37 insertions, 42 deletions
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index ddfd0aefe0c..daa118978ee 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c @@ -189,11 +189,11 @@ struct intel_overlay {  static struct overlay_registers __iomem *  intel_overlay_map_regs(struct intel_overlay *overlay)  { -	drm_i915_private_t *dev_priv = overlay->dev->dev_private; +	struct drm_i915_private *dev_priv = overlay->dev->dev_private;  	struct overlay_registers __iomem *regs;  	if (OVERLAY_NEEDS_PHYSICAL(overlay->dev)) -		regs = (struct overlay_registers __iomem *)overlay->reg_bo->phys_obj->handle->vaddr; +		regs = (struct overlay_registers __iomem *)overlay->reg_bo->phys_handle->vaddr;  	else  		regs = io_mapping_map_wc(dev_priv->gtt.mappable,  					 i915_gem_obj_ggtt_offset(overlay->reg_bo)); @@ -212,8 +212,8 @@ static int intel_overlay_do_wait_request(struct intel_overlay *overlay,  					 void (*tail)(struct intel_overlay *))  {  	struct drm_device *dev = overlay->dev; -	drm_i915_private_t *dev_priv = dev->dev_private; -	struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; +	struct drm_i915_private *dev_priv = dev->dev_private; +	struct intel_engine_cs *ring = &dev_priv->ring[RCS];  	int ret;  	BUG_ON(overlay->last_flip_req); @@ -236,7 +236,7 @@ static int intel_overlay_on(struct intel_overlay *overlay)  {  	struct drm_device *dev = overlay->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; +	struct intel_engine_cs *ring = &dev_priv->ring[RCS];  	int ret;  	BUG_ON(overlay->active); @@ -262,8 +262,8 @@ static int intel_overlay_continue(struct intel_overlay *overlay,  				  bool load_polyphase_filter)  {  	struct drm_device *dev = overlay->dev; -	drm_i915_private_t *dev_priv = dev->dev_private; -	struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; +	struct drm_i915_private *dev_priv = dev->dev_private; +	struct intel_engine_cs *ring = &dev_priv->ring[RCS];  	u32 flip_addr = overlay->flip_addr;  	u32 tmp;  	int ret; @@ -293,7 +293,7 @@ static void intel_overlay_release_old_vid_tail(struct intel_overlay *overlay)  {  	struct drm_i915_gem_object *obj = overlay->old_vid_bo; -	i915_gem_object_unpin(obj); +	i915_gem_object_ggtt_unpin(obj);  	drm_gem_object_unreference(&obj->base);  	overlay->old_vid_bo = NULL; @@ -306,7 +306,7 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)  	/* never have the overlay hw on without showing a frame */  	BUG_ON(!overlay->vid_bo); -	i915_gem_object_unpin(obj); +	i915_gem_object_ggtt_unpin(obj);  	drm_gem_object_unreference(&obj->base);  	overlay->vid_bo = NULL; @@ -320,7 +320,7 @@ static int intel_overlay_off(struct intel_overlay *overlay)  {  	struct drm_device *dev = overlay->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; +	struct intel_engine_cs *ring = &dev_priv->ring[RCS];  	u32 flip_addr = overlay->flip_addr;  	int ret; @@ -362,8 +362,8 @@ static int intel_overlay_off(struct intel_overlay *overlay)  static int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay)  {  	struct drm_device *dev = overlay->dev; -	drm_i915_private_t *dev_priv = dev->dev_private; -	struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; +	struct drm_i915_private *dev_priv = dev->dev_private; +	struct intel_engine_cs *ring = &dev_priv->ring[RCS];  	int ret;  	if (overlay->last_flip_req == 0) @@ -388,8 +388,8 @@ static int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay)  static int intel_overlay_release_old_vid(struct intel_overlay *overlay)  {  	struct drm_device *dev = overlay->dev; -	drm_i915_private_t *dev_priv = dev->dev_private; -	struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; +	struct drm_i915_private *dev_priv = dev->dev_private; +	struct intel_engine_cs *ring = &dev_priv->ring[RCS];  	int ret;  	/* Only wait if there is actually an old frame to release to @@ -606,14 +606,14 @@ static void update_colorkey(struct intel_overlay *overlay,  {  	u32 key = overlay->color_key; -	switch (overlay->crtc->base.fb->bits_per_pixel) { +	switch (overlay->crtc->base.primary->fb->bits_per_pixel) {  	case 8:  		iowrite32(0, ®s->DCLRKV);  		iowrite32(CLK_RGB8I_MASK | DST_KEY_ENABLE, ®s->DCLRKM);  		break;  	case 16: -		if (overlay->crtc->base.fb->depth == 15) { +		if (overlay->crtc->base.primary->fb->depth == 15) {  			iowrite32(RGB15_TO_COLORKEY(key), ®s->DCLRKV);  			iowrite32(CLK_RGB15_MASK | DST_KEY_ENABLE,  				  ®s->DCLRKM); @@ -688,7 +688,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,  	u32 swidth, swidthsw, sheight, ostride;  	BUG_ON(!mutex_is_locked(&dev->struct_mutex)); -	BUG_ON(!mutex_is_locked(&dev->mode_config.mutex)); +	BUG_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));  	BUG_ON(!overlay);  	ret = intel_overlay_release_old_vid(overlay); @@ -782,7 +782,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,  	return 0;  out_unpin: -	i915_gem_object_unpin(new_bo); +	i915_gem_object_ggtt_unpin(new_bo);  	return ret;  } @@ -793,7 +793,7 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)  	int ret;  	BUG_ON(!mutex_is_locked(&dev->struct_mutex)); -	BUG_ON(!mutex_is_locked(&dev->mode_config.mutex)); +	BUG_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));  	ret = intel_overlay_recover_from_interrupt(overlay);  	if (ret != 0) @@ -821,14 +821,11 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)  static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,  					  struct intel_crtc *crtc)  { -	drm_i915_private_t *dev_priv = overlay->dev->dev_private; -  	if (!crtc->active)  		return -EINVAL;  	/* can't use the overlay with double wide pipe */ -	if (INTEL_INFO(overlay->dev)->gen < 4 && -	    (I915_READ(PIPECONF(crtc->pipe)) & (PIPECONF_DOUBLE_WIDE | PIPECONF_ENABLE)) != PIPECONF_ENABLE) +	if (crtc->config.double_wide)  		return -EINVAL;  	return 0; @@ -837,7 +834,7 @@ static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,  static void update_pfit_vscale_ratio(struct intel_overlay *overlay)  {  	struct drm_device *dev = overlay->dev; -	drm_i915_private_t *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = dev->dev_private;  	u32 pfit_control = I915_READ(PFIT_CONTROL);  	u32 ratio; @@ -1008,7 +1005,7 @@ static int intel_panel_fitter_pipe(struct drm_device *dev)  	u32  pfit_control;  	/* i830 doesn't have a panel fitter */ -	if (IS_I830(dev)) +	if (INTEL_INFO(dev)->gen <= 3 && (IS_I830(dev) || !IS_MOBILE(dev)))  		return -1;  	pfit_control = I915_READ(PFIT_CONTROL); @@ -1029,7 +1026,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,  			    struct drm_file *file_priv)  {  	struct drm_intel_overlay_put_image *put_image_rec = data; -	drm_i915_private_t *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_overlay *overlay;  	struct drm_mode_object *drmmode_obj;  	struct intel_crtc *crtc; @@ -1056,7 +1053,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,  		return ret;  	} -	params = kmalloc(sizeof(struct put_image_params), GFP_KERNEL); +	params = kmalloc(sizeof(*params), GFP_KERNEL);  	if (!params)  		return -ENOMEM; @@ -1079,7 +1076,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,  	mutex_lock(&dev->struct_mutex);  	if (new_bo->tiling_mode) { -		DRM_ERROR("buffer used for overlay image can not be tiled\n"); +		DRM_DEBUG_KMS("buffer used for overlay image can not be tiled\n");  		ret = -EINVAL;  		goto out_unlock;  	} @@ -1229,7 +1226,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,  			struct drm_file *file_priv)  {  	struct drm_intel_overlay_attrs *attrs = data; -	drm_i915_private_t *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_overlay *overlay;  	struct overlay_registers __iomem *regs;  	int ret; @@ -1314,7 +1311,7 @@ out_unlock:  void intel_setup_overlay(struct drm_device *dev)  { -	drm_i915_private_t *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_overlay *overlay;  	struct drm_i915_gem_object *reg_bo;  	struct overlay_registers __iomem *regs; @@ -1323,7 +1320,7 @@ void intel_setup_overlay(struct drm_device *dev)  	if (!HAS_OVERLAY(dev))  		return; -	overlay = kzalloc(sizeof(struct intel_overlay), GFP_KERNEL); +	overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);  	if (!overlay)  		return; @@ -1343,16 +1340,14 @@ void intel_setup_overlay(struct drm_device *dev)  	overlay->reg_bo = reg_bo;  	if (OVERLAY_NEEDS_PHYSICAL(dev)) { -		ret = i915_gem_attach_phys_object(dev, reg_bo, -						  I915_GEM_PHYS_OVERLAY_REGS, -						  PAGE_SIZE); +		ret = i915_gem_object_attach_phys(reg_bo, PAGE_SIZE);  		if (ret) {  			DRM_ERROR("failed to attach phys overlay regs\n");  			goto out_free_bo;  		} -		overlay->flip_addr = reg_bo->phys_obj->handle->busaddr; +		overlay->flip_addr = reg_bo->phys_handle->busaddr;  	} else { -		ret = i915_gem_obj_ggtt_pin(reg_bo, PAGE_SIZE, true, false); +		ret = i915_gem_obj_ggtt_pin(reg_bo, PAGE_SIZE, PIN_MAPPABLE);  		if (ret) {  			DRM_ERROR("failed to pin overlay register bo\n");  			goto out_free_bo; @@ -1389,7 +1384,7 @@ void intel_setup_overlay(struct drm_device *dev)  out_unpin_bo:  	if (!OVERLAY_NEEDS_PHYSICAL(dev)) -		i915_gem_object_unpin(reg_bo); +		i915_gem_object_ggtt_unpin(reg_bo);  out_free_bo:  	drm_gem_object_unreference(®_bo->base);  out_free: @@ -1400,7 +1395,7 @@ out_free:  void intel_cleanup_overlay(struct drm_device *dev)  { -	drm_i915_private_t *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = dev->dev_private;  	if (!dev_priv->overlay)  		return; @@ -1424,14 +1419,14 @@ struct intel_overlay_error_state {  static struct overlay_registers __iomem *  intel_overlay_map_regs_atomic(struct intel_overlay *overlay)  { -	drm_i915_private_t *dev_priv = overlay->dev->dev_private; +	struct drm_i915_private *dev_priv = overlay->dev->dev_private;  	struct overlay_registers __iomem *regs;  	if (OVERLAY_NEEDS_PHYSICAL(overlay->dev))  		/* Cast to make sparse happy, but it's wc memory anyway, so  		 * equivalent to the wc io mapping on X86. */  		regs = (struct overlay_registers __iomem *) -			overlay->reg_bo->phys_obj->handle->vaddr; +			overlay->reg_bo->phys_handle->vaddr;  	else  		regs = io_mapping_map_atomic_wc(dev_priv->gtt.mappable,  						i915_gem_obj_ggtt_offset(overlay->reg_bo)); @@ -1450,7 +1445,7 @@ static void intel_overlay_unmap_regs_atomic(struct intel_overlay *overlay,  struct intel_overlay_error_state *  intel_overlay_capture_error_state(struct drm_device *dev)  { -	drm_i915_private_t *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_overlay *overlay = dev_priv->overlay;  	struct intel_overlay_error_state *error;  	struct overlay_registers __iomem *regs; @@ -1465,7 +1460,7 @@ intel_overlay_capture_error_state(struct drm_device *dev)  	error->dovsta = I915_READ(DOVSTA);  	error->isr = I915_READ(ISR);  	if (OVERLAY_NEEDS_PHYSICAL(overlay->dev)) -		error->base = (__force long)overlay->reg_bo->phys_obj->handle->vaddr; +		error->base = (__force long)overlay->reg_bo->phys_handle->vaddr;  	else  		error->base = i915_gem_obj_ggtt_offset(overlay->reg_bo);  | 
