diff options
Diffstat (limited to 'drivers/gpu/drm/tiny/cirrus.c')
| -rw-r--r-- | drivers/gpu/drm/tiny/cirrus.c | 21 | 
1 files changed, 12 insertions, 9 deletions
| diff --git a/drivers/gpu/drm/tiny/cirrus.c b/drivers/gpu/drm/tiny/cirrus.c index c4f5beea1f90..73fb9f63d227 100644 --- a/drivers/gpu/drm/tiny/cirrus.c +++ b/drivers/gpu/drm/tiny/cirrus.c @@ -316,28 +316,31 @@ static int cirrus_mode_set(struct cirrus_device *cirrus,  }  static int cirrus_fb_blit_rect(struct drm_framebuffer *fb, -			       const struct iosys_map *map, +			       const struct iosys_map *vmap,  			       struct drm_rect *rect)  {  	struct cirrus_device *cirrus = to_cirrus(fb->dev); -	void __iomem *dst = cirrus->vram; -	void *vmap = map->vaddr; /* TODO: Use mapping abstraction properly */ +	struct iosys_map dst; +	void *vaddr = vmap->vaddr; /* TODO: Use mapping abstraction properly */  	int idx;  	if (!drm_dev_enter(&cirrus->dev, &idx))  		return -ENODEV; +	iosys_map_set_vaddr_iomem(&dst, cirrus->vram); +  	if (cirrus->cpp == fb->format->cpp[0]) { -		dst += drm_fb_clip_offset(fb->pitches[0], fb->format, rect); -		drm_fb_memcpy_toio(dst, fb->pitches[0], vmap, fb, rect); +		iosys_map_incr(&dst, drm_fb_clip_offset(fb->pitches[0], fb->format, rect)); +		drm_fb_memcpy(&dst, fb->pitches, vmap, fb, rect);  	} else if (fb->format->cpp[0] == 4 && cirrus->cpp == 2) { -		dst += drm_fb_clip_offset(cirrus->pitch, fb->format, rect); -		drm_fb_xrgb8888_to_rgb565_toio(dst, cirrus->pitch, vmap, fb, rect, false); +		iosys_map_incr(&dst, drm_fb_clip_offset(cirrus->pitch, fb->format, rect)); +		drm_fb_xrgb8888_to_rgb565_toio(dst.vaddr_iomem, cirrus->pitch, vaddr, fb, rect, +					       false);  	} else if (fb->format->cpp[0] == 4 && cirrus->cpp == 3) { -		dst += drm_fb_clip_offset(cirrus->pitch, fb->format, rect); -		drm_fb_xrgb8888_to_rgb888_toio(dst, cirrus->pitch, vmap, fb, rect); +		iosys_map_incr(&dst, drm_fb_clip_offset(cirrus->pitch, fb->format, rect)); +		drm_fb_xrgb8888_to_rgb888_toio(dst.vaddr_iomem, cirrus->pitch, vaddr, fb, rect);  	} else {  		WARN_ON_ONCE("cpp mismatch"); | 
