• Home
  • Raw
  • Download

Lines Matching refs:fence

43 static struct drm_i915_private *fence_to_i915(struct i915_fence_reg *fence)  in fence_to_i915()  argument
45 return fence->ggtt->vm.i915; in fence_to_i915()
48 static struct intel_uncore *fence_to_uncore(struct i915_fence_reg *fence) in fence_to_uncore() argument
50 return fence->ggtt->vm.gt->uncore; in fence_to_uncore()
53 static void i965_write_fence_reg(struct i915_fence_reg *fence) in i965_write_fence_reg() argument
59 if (GRAPHICS_VER(fence_to_i915(fence)) >= 6) { in i965_write_fence_reg()
60 fence_reg_lo = FENCE_REG_GEN6_LO(fence->id); in i965_write_fence_reg()
61 fence_reg_hi = FENCE_REG_GEN6_HI(fence->id); in i965_write_fence_reg()
65 fence_reg_lo = FENCE_REG_965_LO(fence->id); in i965_write_fence_reg()
66 fence_reg_hi = FENCE_REG_965_HI(fence->id); in i965_write_fence_reg()
71 if (fence->tiling) { in i965_write_fence_reg()
72 unsigned int stride = fence->stride; in i965_write_fence_reg()
76 val = fence->start + fence->size - I965_FENCE_PAGE; in i965_write_fence_reg()
78 val |= fence->start; in i965_write_fence_reg()
80 if (fence->tiling == I915_TILING_Y) in i965_write_fence_reg()
86 struct intel_uncore *uncore = fence_to_uncore(fence); in i965_write_fence_reg()
107 static void i915_write_fence_reg(struct i915_fence_reg *fence) in i915_write_fence_reg() argument
112 if (fence->tiling) { in i915_write_fence_reg()
113 unsigned int stride = fence->stride; in i915_write_fence_reg()
114 unsigned int tiling = fence->tiling; in i915_write_fence_reg()
117 if (is_y_tiled && HAS_128_BYTE_Y_TILING(fence_to_i915(fence))) in i915_write_fence_reg()
123 val = fence->start; in i915_write_fence_reg()
126 val |= I915_FENCE_SIZE_BITS(fence->size); in i915_write_fence_reg()
133 struct intel_uncore *uncore = fence_to_uncore(fence); in i915_write_fence_reg()
134 i915_reg_t reg = FENCE_REG(fence->id); in i915_write_fence_reg()
141 static void i830_write_fence_reg(struct i915_fence_reg *fence) in i830_write_fence_reg() argument
146 if (fence->tiling) { in i830_write_fence_reg()
147 unsigned int stride = fence->stride; in i830_write_fence_reg()
149 val = fence->start; in i830_write_fence_reg()
150 if (fence->tiling == I915_TILING_Y) in i830_write_fence_reg()
152 val |= I830_FENCE_SIZE_BITS(fence->size); in i830_write_fence_reg()
158 struct intel_uncore *uncore = fence_to_uncore(fence); in i830_write_fence_reg()
159 i915_reg_t reg = FENCE_REG(fence->id); in i830_write_fence_reg()
166 static void fence_write(struct i915_fence_reg *fence) in fence_write() argument
168 struct drm_i915_private *i915 = fence_to_i915(fence); in fence_write()
177 i830_write_fence_reg(fence); in fence_write()
179 i915_write_fence_reg(fence); in fence_write()
181 i965_write_fence_reg(fence); in fence_write()
189 static bool gpu_uses_fence_registers(struct i915_fence_reg *fence) in gpu_uses_fence_registers() argument
191 return GRAPHICS_VER(fence_to_i915(fence)) < 4; in gpu_uses_fence_registers()
194 static int fence_update(struct i915_fence_reg *fence, in fence_update() argument
197 struct i915_ggtt *ggtt = fence->ggtt; in fence_update()
198 struct intel_uncore *uncore = fence_to_uncore(fence); in fence_update()
203 fence->tiling = 0; in fence_update()
211 if (gpu_uses_fence_registers(fence)) { in fence_update()
218 fence->start = vma->node.start; in fence_update()
219 fence->size = vma->fence_size; in fence_update()
220 fence->stride = i915_gem_object_get_stride(vma->obj); in fence_update()
221 fence->tiling = i915_gem_object_get_tiling(vma->obj); in fence_update()
223 WRITE_ONCE(fence->dirty, false); in fence_update()
225 old = xchg(&fence->vma, NULL); in fence_update()
228 ret = i915_active_wait(&fence->active); in fence_update()
230 fence->vma = old; in fence_update()
241 GEM_BUG_ON(old->fence != fence); in fence_update()
243 old->fence = NULL; in fence_update()
246 list_move(&fence->link, &ggtt->fence_list); in fence_update()
265 WRITE_ONCE(fence->vma, vma); in fence_update()
266 fence_write(fence); in fence_update()
269 vma->fence = fence; in fence_update()
270 list_move_tail(&fence->link, &ggtt->fence_list); in fence_update()
286 struct i915_fence_reg *fence = vma->fence; in i915_vma_revoke_fence() local
290 if (!fence) in i915_vma_revoke_fence()
293 GEM_BUG_ON(fence->vma != vma); in i915_vma_revoke_fence()
294 GEM_BUG_ON(!i915_active_is_idle(&fence->active)); in i915_vma_revoke_fence()
295 GEM_BUG_ON(atomic_read(&fence->pin_count)); in i915_vma_revoke_fence()
297 fence->tiling = 0; in i915_vma_revoke_fence()
298 WRITE_ONCE(fence->vma, NULL); in i915_vma_revoke_fence()
299 vma->fence = NULL; in i915_vma_revoke_fence()
312 with_intel_runtime_pm_if_active(fence_to_uncore(fence)->rpm, wakeref) in i915_vma_revoke_fence()
313 fence_write(fence); in i915_vma_revoke_fence()
316 static bool fence_is_active(const struct i915_fence_reg *fence) in fence_is_active() argument
318 return fence->vma && i915_vma_is_active(fence->vma); in fence_is_active()
324 struct i915_fence_reg *fence, *fn; in fence_find() local
326 list_for_each_entry_safe(fence, fn, &ggtt->fence_list, link) { in fence_find()
327 GEM_BUG_ON(fence->vma && fence->vma->fence != fence); in fence_find()
329 if (fence == active) /* now seen this fence twice */ in fence_find()
333 if (active != ERR_PTR(-EAGAIN) && fence_is_active(fence)) { in fence_find()
335 active = fence; in fence_find()
337 list_move_tail(&fence->link, &ggtt->fence_list); in fence_find()
341 if (atomic_read(&fence->pin_count)) in fence_find()
344 return fence; in fence_find()
357 struct i915_fence_reg *fence; in __i915_vma_pin_fence() local
364 if (vma->fence) { in __i915_vma_pin_fence()
365 fence = vma->fence; in __i915_vma_pin_fence()
366 GEM_BUG_ON(fence->vma != vma); in __i915_vma_pin_fence()
367 atomic_inc(&fence->pin_count); in __i915_vma_pin_fence()
368 if (!fence->dirty) { in __i915_vma_pin_fence()
369 list_move_tail(&fence->link, &ggtt->fence_list); in __i915_vma_pin_fence()
373 fence = fence_find(ggtt); in __i915_vma_pin_fence()
374 if (IS_ERR(fence)) in __i915_vma_pin_fence()
375 return PTR_ERR(fence); in __i915_vma_pin_fence()
377 GEM_BUG_ON(atomic_read(&fence->pin_count)); in __i915_vma_pin_fence()
378 atomic_inc(&fence->pin_count); in __i915_vma_pin_fence()
383 err = fence_update(fence, set); in __i915_vma_pin_fence()
387 GEM_BUG_ON(fence->vma != set); in __i915_vma_pin_fence()
388 GEM_BUG_ON(vma->fence != (set ? fence : NULL)); in __i915_vma_pin_fence()
394 atomic_dec(&fence->pin_count); in __i915_vma_pin_fence()
420 if (!vma->fence && !i915_gem_object_is_tiled(vma->obj)) in i915_vma_pin_fence()
450 struct i915_fence_reg *fence; in i915_reserve_fence() local
458 list_for_each_entry(fence, &ggtt->fence_list, link) in i915_reserve_fence()
459 count += !atomic_read(&fence->pin_count); in i915_reserve_fence()
463 fence = fence_find(ggtt); in i915_reserve_fence()
464 if (IS_ERR(fence)) in i915_reserve_fence()
465 return fence; in i915_reserve_fence()
467 if (fence->vma) { in i915_reserve_fence()
469 ret = fence_update(fence, NULL); in i915_reserve_fence()
474 list_del(&fence->link); in i915_reserve_fence()
476 return fence; in i915_reserve_fence()
485 void i915_unreserve_fence(struct i915_fence_reg *fence) in i915_unreserve_fence() argument
487 struct i915_ggtt *ggtt = fence->ggtt; in i915_unreserve_fence()
491 list_add(&fence->link, &ggtt->fence_list); in i915_unreserve_fence()
868 struct i915_fence_reg *fence = &ggtt->fence_regs[i]; in intel_ggtt_init_fences() local
870 i915_active_init(&fence->active, NULL, NULL, 0); in intel_ggtt_init_fences()
871 fence->ggtt = ggtt; in intel_ggtt_init_fences()
872 fence->id = i; in intel_ggtt_init_fences()
873 list_add_tail(&fence->link, &ggtt->fence_list); in intel_ggtt_init_fences()
885 struct i915_fence_reg *fence = &ggtt->fence_regs[i]; in intel_ggtt_fini_fences() local
887 i915_active_fini(&fence->active); in intel_ggtt_fini_fences()