Lines Matching refs:fence
60 static void i965_write_fence_reg(struct drm_i915_fence_reg *fence, in i965_write_fence_reg() argument
67 if (INTEL_GEN(fence->i915) >= 6) { in i965_write_fence_reg()
68 fence_reg_lo = FENCE_REG_GEN6_LO(fence->id); in i965_write_fence_reg()
69 fence_reg_hi = FENCE_REG_GEN6_HI(fence->id); in i965_write_fence_reg()
73 fence_reg_lo = FENCE_REG_965_LO(fence->id); in i965_write_fence_reg()
74 fence_reg_hi = FENCE_REG_965_HI(fence->id); in i965_write_fence_reg()
96 struct drm_i915_private *dev_priv = fence->i915; in i965_write_fence_reg()
116 static void i915_write_fence_reg(struct drm_i915_fence_reg *fence, in i915_write_fence_reg() argument
132 if (is_y_tiled && HAS_128_BYTE_Y_TILING(fence->i915)) in i915_write_fence_reg()
148 struct drm_i915_private *dev_priv = fence->i915; in i915_write_fence_reg()
149 i915_reg_t reg = FENCE_REG(fence->id); in i915_write_fence_reg()
156 static void i830_write_fence_reg(struct drm_i915_fence_reg *fence, in i830_write_fence_reg() argument
180 struct drm_i915_private *dev_priv = fence->i915; in i830_write_fence_reg()
181 i915_reg_t reg = FENCE_REG(fence->id); in i830_write_fence_reg()
188 static void fence_write(struct drm_i915_fence_reg *fence, in fence_write() argument
196 if (IS_GEN2(fence->i915)) in fence_write()
197 i830_write_fence_reg(fence, vma); in fence_write()
198 else if (IS_GEN3(fence->i915)) in fence_write()
199 i915_write_fence_reg(fence, vma); in fence_write()
201 i965_write_fence_reg(fence, vma); in fence_write()
207 fence->dirty = false; in fence_write()
210 static int fence_update(struct drm_i915_fence_reg *fence, in fence_update() argument
232 if (fence->vma) { in fence_update()
233 struct i915_vma *old = fence->vma; in fence_update()
243 if (fence->vma && fence->vma != vma) { in fence_update()
247 GEM_BUG_ON(fence->vma->fence != fence); in fence_update()
248 i915_vma_revoke_mmap(fence->vma); in fence_update()
250 fence->vma->fence = NULL; in fence_update()
251 fence->vma = NULL; in fence_update()
253 list_move(&fence->link, &fence->i915->mm.fence_list); in fence_update()
260 if (intel_runtime_pm_get_if_in_use(fence->i915)) { in fence_update()
261 fence_write(fence, vma); in fence_update()
262 intel_runtime_pm_put(fence->i915); in fence_update()
266 if (fence->vma != vma) { in fence_update()
267 vma->fence = fence; in fence_update()
268 fence->vma = vma; in fence_update()
271 list_move_tail(&fence->link, &fence->i915->mm.fence_list); in fence_update()
290 struct drm_i915_fence_reg *fence = vma->fence; in i915_vma_put_fence() local
292 if (!fence) in i915_vma_put_fence()
295 if (fence->pin_count) in i915_vma_put_fence()
298 return fence_update(fence, NULL); in i915_vma_put_fence()
303 struct drm_i915_fence_reg *fence; in fence_find() local
305 list_for_each_entry(fence, &dev_priv->mm.fence_list, link) { in fence_find()
306 GEM_BUG_ON(fence->vma && fence->vma->fence != fence); in fence_find()
308 if (fence->pin_count) in fence_find()
311 return fence; in fence_find()
342 struct drm_i915_fence_reg *fence; in i915_vma_pin_fence() local
352 if (vma->fence) { in i915_vma_pin_fence()
353 fence = vma->fence; in i915_vma_pin_fence()
354 GEM_BUG_ON(fence->vma != vma); in i915_vma_pin_fence()
355 fence->pin_count++; in i915_vma_pin_fence()
356 if (!fence->dirty) { in i915_vma_pin_fence()
357 list_move_tail(&fence->link, in i915_vma_pin_fence()
358 &fence->i915->mm.fence_list); in i915_vma_pin_fence()
362 fence = fence_find(vma->vm->i915); in i915_vma_pin_fence()
363 if (IS_ERR(fence)) in i915_vma_pin_fence()
364 return PTR_ERR(fence); in i915_vma_pin_fence()
366 GEM_BUG_ON(fence->pin_count); in i915_vma_pin_fence()
367 fence->pin_count++; in i915_vma_pin_fence()
371 err = fence_update(fence, set); in i915_vma_pin_fence()
375 GEM_BUG_ON(fence->vma != set); in i915_vma_pin_fence()
376 GEM_BUG_ON(vma->fence != (set ? fence : NULL)); in i915_vma_pin_fence()
382 fence->pin_count--; in i915_vma_pin_fence()
396 struct drm_i915_fence_reg *fence; in i915_reserve_fence() local
404 list_for_each_entry(fence, &dev_priv->mm.fence_list, link) in i915_reserve_fence()
405 count += !fence->pin_count; in i915_reserve_fence()
409 fence = fence_find(dev_priv); in i915_reserve_fence()
410 if (IS_ERR(fence)) in i915_reserve_fence()
411 return fence; in i915_reserve_fence()
413 if (fence->vma) { in i915_reserve_fence()
415 ret = fence_update(fence, NULL); in i915_reserve_fence()
420 list_del(&fence->link); in i915_reserve_fence()
421 return fence; in i915_reserve_fence()
430 void i915_unreserve_fence(struct drm_i915_fence_reg *fence) in i915_unreserve_fence() argument
432 lockdep_assert_held(&fence->i915->drm.struct_mutex); in i915_unreserve_fence()
434 list_add(&fence->link, &fence->i915->mm.fence_list); in i915_unreserve_fence()
454 struct drm_i915_fence_reg *fence = &dev_priv->fence_regs[i]; in i915_gem_revoke_fences() local
456 GEM_BUG_ON(fence->vma && fence->vma->fence != fence); in i915_gem_revoke_fences()
458 if (fence->vma) in i915_gem_revoke_fences()
459 i915_vma_revoke_mmap(fence->vma); in i915_gem_revoke_fences()
479 GEM_BUG_ON(vma && vma->fence != reg); in i915_gem_restore_fences()
490 vma->fence = NULL; in i915_gem_restore_fences()