Lines Matching refs:obj
59 struct drm_i915_gem_object *obj) in i965_write_fence_reg() argument
87 if (obj) { in i965_write_fence_reg()
88 u32 size = i915_gem_obj_ggtt_size(obj); in i965_write_fence_reg()
92 if (obj->tiling_mode != I915_TILING_NONE) { in i965_write_fence_reg()
93 uint32_t row_size = obj->stride * in i965_write_fence_reg()
94 (obj->tiling_mode == I915_TILING_Y ? 32 : 8); in i965_write_fence_reg()
98 val = (uint64_t)((i915_gem_obj_ggtt_offset(obj) + size - 4096) & in i965_write_fence_reg()
100 val |= i915_gem_obj_ggtt_offset(obj) & 0xfffff000; in i965_write_fence_reg()
101 val |= (uint64_t)((obj->stride / 128) - 1) << fence_pitch_shift; in i965_write_fence_reg()
102 if (obj->tiling_mode == I915_TILING_Y) in i965_write_fence_reg()
118 struct drm_i915_gem_object *obj) in i915_write_fence_reg() argument
123 if (obj) { in i915_write_fence_reg()
124 u32 size = i915_gem_obj_ggtt_size(obj); in i915_write_fence_reg()
128 WARN((i915_gem_obj_ggtt_offset(obj) & ~I915_FENCE_START_MASK) || in i915_write_fence_reg()
130 (i915_gem_obj_ggtt_offset(obj) & (size - 1)), in i915_write_fence_reg()
132 i915_gem_obj_ggtt_offset(obj), obj->map_and_fenceable, size); in i915_write_fence_reg()
134 if (obj->tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)) in i915_write_fence_reg()
140 pitch_val = obj->stride / tile_width; in i915_write_fence_reg()
143 val = i915_gem_obj_ggtt_offset(obj); in i915_write_fence_reg()
144 if (obj->tiling_mode == I915_TILING_Y) in i915_write_fence_reg()
157 struct drm_i915_gem_object *obj) in i830_write_fence_reg() argument
162 if (obj) { in i830_write_fence_reg()
163 u32 size = i915_gem_obj_ggtt_size(obj); in i830_write_fence_reg()
166 WARN((i915_gem_obj_ggtt_offset(obj) & ~I830_FENCE_START_MASK) || in i830_write_fence_reg()
168 (i915_gem_obj_ggtt_offset(obj) & (size - 1)), in i830_write_fence_reg()
170 i915_gem_obj_ggtt_offset(obj), size); in i830_write_fence_reg()
172 pitch_val = obj->stride / 128; in i830_write_fence_reg()
175 val = i915_gem_obj_ggtt_offset(obj); in i830_write_fence_reg()
176 if (obj->tiling_mode == I915_TILING_Y) in i830_write_fence_reg()
188 inline static bool i915_gem_object_needs_mb(struct drm_i915_gem_object *obj) in i915_gem_object_needs_mb() argument
190 return obj && obj->base.read_domains & I915_GEM_DOMAIN_GTT; in i915_gem_object_needs_mb()
194 struct drm_i915_gem_object *obj) in i915_gem_write_fence() argument
201 if (i915_gem_object_needs_mb(dev_priv->fence_regs[reg].obj)) in i915_gem_write_fence()
204 WARN(obj && (!obj->stride || !obj->tiling_mode), in i915_gem_write_fence()
206 obj->stride, obj->tiling_mode); in i915_gem_write_fence()
209 i830_write_fence_reg(dev, reg, obj); in i915_gem_write_fence()
211 i915_write_fence_reg(dev, reg, obj); in i915_gem_write_fence()
213 i965_write_fence_reg(dev, reg, obj); in i915_gem_write_fence()
218 if (i915_gem_object_needs_mb(obj)) in i915_gem_write_fence()
228 static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj, in i915_gem_object_update_fence() argument
232 struct drm_i915_private *dev_priv = obj->base.dev->dev_private; in i915_gem_object_update_fence()
235 i915_gem_write_fence(obj->base.dev, reg, enable ? obj : NULL); in i915_gem_object_update_fence()
238 obj->fence_reg = reg; in i915_gem_object_update_fence()
239 fence->obj = obj; in i915_gem_object_update_fence()
242 obj->fence_reg = I915_FENCE_REG_NONE; in i915_gem_object_update_fence()
243 fence->obj = NULL; in i915_gem_object_update_fence()
246 obj->fence_dirty = false; in i915_gem_object_update_fence()
249 static inline void i915_gem_object_fence_lost(struct drm_i915_gem_object *obj) in i915_gem_object_fence_lost() argument
251 if (obj->tiling_mode) in i915_gem_object_fence_lost()
252 i915_gem_release_mmap(obj); in i915_gem_object_fence_lost()
257 obj->fence_dirty = false; in i915_gem_object_fence_lost()
258 obj->fence_reg = I915_FENCE_REG_NONE; in i915_gem_object_fence_lost()
262 i915_gem_object_wait_fence(struct drm_i915_gem_object *obj) in i915_gem_object_wait_fence() argument
264 if (obj->last_fenced_req) { in i915_gem_object_wait_fence()
265 int ret = i915_wait_request(obj->last_fenced_req); in i915_gem_object_wait_fence()
269 i915_gem_request_assign(&obj->last_fenced_req, NULL); in i915_gem_object_wait_fence()
287 i915_gem_object_put_fence(struct drm_i915_gem_object *obj) in i915_gem_object_put_fence() argument
289 struct drm_i915_private *dev_priv = obj->base.dev->dev_private; in i915_gem_object_put_fence()
293 ret = i915_gem_object_wait_fence(obj); in i915_gem_object_put_fence()
297 if (obj->fence_reg == I915_FENCE_REG_NONE) in i915_gem_object_put_fence()
300 fence = &dev_priv->fence_regs[obj->fence_reg]; in i915_gem_object_put_fence()
305 i915_gem_object_fence_lost(obj); in i915_gem_object_put_fence()
306 i915_gem_object_update_fence(obj, fence, false); in i915_gem_object_put_fence()
322 if (!reg->obj) in i915_find_fence_reg()
367 i915_gem_object_get_fence(struct drm_i915_gem_object *obj) in i915_gem_object_get_fence() argument
369 struct drm_device *dev = obj->base.dev; in i915_gem_object_get_fence()
371 bool enable = obj->tiling_mode != I915_TILING_NONE; in i915_gem_object_get_fence()
378 if (obj->fence_dirty) { in i915_gem_object_get_fence()
379 ret = i915_gem_object_wait_fence(obj); in i915_gem_object_get_fence()
385 if (obj->fence_reg != I915_FENCE_REG_NONE) { in i915_gem_object_get_fence()
386 reg = &dev_priv->fence_regs[obj->fence_reg]; in i915_gem_object_get_fence()
387 if (!obj->fence_dirty) { in i915_gem_object_get_fence()
393 if (WARN_ON(!obj->map_and_fenceable)) in i915_gem_object_get_fence()
400 if (reg->obj) { in i915_gem_object_get_fence()
401 struct drm_i915_gem_object *old = reg->obj; in i915_gem_object_get_fence()
412 i915_gem_object_update_fence(obj, reg, enable); in i915_gem_object_get_fence()
433 i915_gem_object_pin_fence(struct drm_i915_gem_object *obj) in i915_gem_object_pin_fence() argument
435 if (obj->fence_reg != I915_FENCE_REG_NONE) { in i915_gem_object_pin_fence()
436 struct drm_i915_private *dev_priv = obj->base.dev->dev_private; in i915_gem_object_pin_fence()
437 struct i915_vma *ggtt_vma = i915_gem_obj_to_ggtt(obj); in i915_gem_object_pin_fence()
440 dev_priv->fence_regs[obj->fence_reg].pin_count > in i915_gem_object_pin_fence()
442 dev_priv->fence_regs[obj->fence_reg].pin_count++; in i915_gem_object_pin_fence()
457 i915_gem_object_unpin_fence(struct drm_i915_gem_object *obj) in i915_gem_object_unpin_fence() argument
459 if (obj->fence_reg != I915_FENCE_REG_NONE) { in i915_gem_object_unpin_fence()
460 struct drm_i915_private *dev_priv = obj->base.dev->dev_private; in i915_gem_object_unpin_fence()
461 WARN_ON(dev_priv->fence_regs[obj->fence_reg].pin_count <= 0); in i915_gem_object_unpin_fence()
462 dev_priv->fence_regs[obj->fence_reg].pin_count--; in i915_gem_object_unpin_fence()
485 if (reg->obj) { in i915_gem_restore_fences()
486 i915_gem_object_update_fence(reg->obj, reg, in i915_gem_restore_fences()
487 reg->obj->tiling_mode); in i915_gem_restore_fences()
746 i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj) in i915_gem_object_do_bit_17_swizzle() argument
751 if (obj->bit_17 == NULL) in i915_gem_object_do_bit_17_swizzle()
755 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) { in i915_gem_object_do_bit_17_swizzle()
759 (test_bit(i, obj->bit_17) != 0)) { in i915_gem_object_do_bit_17_swizzle()
776 i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj) in i915_gem_object_save_bit_17_swizzle() argument
779 int page_count = obj->base.size >> PAGE_SHIFT; in i915_gem_object_save_bit_17_swizzle()
782 if (obj->bit_17 == NULL) { in i915_gem_object_save_bit_17_swizzle()
783 obj->bit_17 = kcalloc(BITS_TO_LONGS(page_count), in i915_gem_object_save_bit_17_swizzle()
785 if (obj->bit_17 == NULL) { in i915_gem_object_save_bit_17_swizzle()
793 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) { in i915_gem_object_save_bit_17_swizzle()
795 __set_bit(i, obj->bit_17); in i915_gem_object_save_bit_17_swizzle()
797 __clear_bit(i, obj->bit_17); in i915_gem_object_save_bit_17_swizzle()