diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 26 | 
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 76354d3ba925..5f614828d365 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3148,6 +3148,13 @@ static void i965_write_fence_reg(struct drm_device *dev, int reg,  		u32 size = i915_gem_obj_ggtt_size(obj);  		uint64_t val; +		/* Adjust fence size to match tiled area */ +		if (obj->tiling_mode != I915_TILING_NONE) { +			uint32_t row_size = obj->stride * +				(obj->tiling_mode == I915_TILING_Y ? 32 : 8); +			size = (size / row_size) * row_size; +		} +  		val = (uint64_t)((i915_gem_obj_ggtt_offset(obj) + size - 4096) &  				 0xfffff000) << 32;  		val |= i915_gem_obj_ggtt_offset(obj) & 0xfffff000; @@ -4884,25 +4891,18 @@ i915_gem_init_hw(struct drm_device *dev)  	for (i = 0; i < NUM_L3_SLICES(dev); i++)  		i915_gem_l3_remap(&dev_priv->ring[RCS], i); -	/* -	 * XXX: Contexts should only be initialized once. Doing a switch to the -	 * default context switch however is something we'd like to do after -	 * reset or thaw (the latter may not actually be necessary for HW, but -	 * goes with our code better). Context switching requires rings (for -	 * the do_switch), but before enabling PPGTT. So don't move this. -	 */ -	ret = i915_gem_context_enable(dev_priv); +	ret = i915_ppgtt_init_hw(dev);  	if (ret && ret != -EIO) { -		DRM_ERROR("Context enable failed %d\n", ret); +		DRM_ERROR("PPGTT enable failed %d\n", ret);  		i915_gem_cleanup_ringbuffer(dev); - -		return ret;  	} -	ret = i915_ppgtt_init_hw(dev); +	ret = i915_gem_context_enable(dev_priv);  	if (ret && ret != -EIO) { -		DRM_ERROR("PPGTT enable failed %d\n", ret); +		DRM_ERROR("Context enable failed %d\n", ret);  		i915_gem_cleanup_ringbuffer(dev); + +		return ret;  	}  	return ret;  | 
