diff options
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/dmabuf.c | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/i915/gvt/dmabuf.c b/drivers/gpu/drm/i915/gvt/dmabuf.c index 5d887f7cc0d5..69a9a1b2ea4a 100644 --- a/drivers/gpu/drm/i915/gvt/dmabuf.c +++ b/drivers/gpu/drm/i915/gvt/dmabuf.c @@ -209,7 +209,7 @@ static int vgpu_get_plane_info(struct drm_device *dev,  	struct drm_i915_private *dev_priv = to_i915(dev);  	struct intel_vgpu_primary_plane_format p;  	struct intel_vgpu_cursor_plane_format c; -	int ret; +	int ret, tile_height = 1;  	if (plane_id == DRM_PLANE_TYPE_PRIMARY) {  		ret = intel_vgpu_decode_primary_plane(vgpu, &p); @@ -228,12 +228,15 @@ static int vgpu_get_plane_info(struct drm_device *dev,  			break;  		case PLANE_CTL_TILED_X:  			info->drm_format_mod = I915_FORMAT_MOD_X_TILED; +			tile_height = 8;  			break;  		case PLANE_CTL_TILED_Y:  			info->drm_format_mod = I915_FORMAT_MOD_Y_TILED; +			tile_height = 32;  			break;  		case PLANE_CTL_TILED_YF:  			info->drm_format_mod = I915_FORMAT_MOD_Yf_TILED; +			tile_height = 32;  			break;  		default:  			gvt_vgpu_err("invalid tiling mode: %x\n", p.tiled); @@ -264,8 +267,8 @@ static int vgpu_get_plane_info(struct drm_device *dev,  		return -EINVAL;  	} -	info->size = (info->stride * info->height + PAGE_SIZE - 1) -		      >> PAGE_SHIFT; +	info->size = (info->stride * roundup(info->height, tile_height) +		      + PAGE_SIZE - 1) >> PAGE_SHIFT;  	if (info->size == 0) {  		gvt_vgpu_err("fb size is zero\n");  		return -EINVAL; | 
