Lines Matching refs:obj

19 static bool gpu_write_needs_clflush(struct drm_i915_gem_object *obj)  in gpu_write_needs_clflush()  argument
21 return !(obj->cache_level == I915_CACHE_NONE || in gpu_write_needs_clflush()
22 obj->cache_level == I915_CACHE_WT); in gpu_write_needs_clflush()
26 flush_write_domain(struct drm_i915_gem_object *obj, unsigned int flush_domains) in flush_write_domain() argument
30 assert_object_held(obj); in flush_write_domain()
32 if (!(obj->write_domain & flush_domains)) in flush_write_domain()
35 switch (obj->write_domain) { in flush_write_domain()
37 spin_lock(&obj->vma.lock); in flush_write_domain()
38 for_each_ggtt_vma(vma, obj) { in flush_write_domain()
42 spin_unlock(&obj->vma.lock); in flush_write_domain()
44 i915_gem_object_flush_frontbuffer(obj, ORIGIN_CPU); in flush_write_domain()
52 i915_gem_clflush_object(obj, I915_CLFLUSH_SYNC); in flush_write_domain()
56 if (gpu_write_needs_clflush(obj)) in flush_write_domain()
57 obj->cache_dirty = true; in flush_write_domain()
61 obj->write_domain = 0; in flush_write_domain()
64 static void __i915_gem_object_flush_for_display(struct drm_i915_gem_object *obj) in __i915_gem_object_flush_for_display() argument
70 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); in __i915_gem_object_flush_for_display()
71 if (obj->cache_dirty) in __i915_gem_object_flush_for_display()
72 i915_gem_clflush_object(obj, I915_CLFLUSH_FORCE); in __i915_gem_object_flush_for_display()
73 obj->write_domain = 0; in __i915_gem_object_flush_for_display()
76 void i915_gem_object_flush_if_display(struct drm_i915_gem_object *obj) in i915_gem_object_flush_if_display() argument
78 if (!i915_gem_object_is_framebuffer(obj)) in i915_gem_object_flush_if_display()
81 i915_gem_object_lock(obj, NULL); in i915_gem_object_flush_if_display()
82 __i915_gem_object_flush_for_display(obj); in i915_gem_object_flush_if_display()
83 i915_gem_object_unlock(obj); in i915_gem_object_flush_if_display()
86 void i915_gem_object_flush_if_display_locked(struct drm_i915_gem_object *obj) in i915_gem_object_flush_if_display_locked() argument
88 if (i915_gem_object_is_framebuffer(obj)) in i915_gem_object_flush_if_display_locked()
89 __i915_gem_object_flush_for_display(obj); in i915_gem_object_flush_if_display_locked()
101 i915_gem_object_set_to_wc_domain(struct drm_i915_gem_object *obj, bool write) in i915_gem_object_set_to_wc_domain() argument
105 assert_object_held(obj); in i915_gem_object_set_to_wc_domain()
107 ret = i915_gem_object_wait(obj, in i915_gem_object_set_to_wc_domain()
114 if (obj->write_domain == I915_GEM_DOMAIN_WC) in i915_gem_object_set_to_wc_domain()
125 ret = i915_gem_object_pin_pages(obj); in i915_gem_object_set_to_wc_domain()
129 flush_write_domain(obj, ~I915_GEM_DOMAIN_WC); in i915_gem_object_set_to_wc_domain()
135 if ((obj->read_domains & I915_GEM_DOMAIN_WC) == 0) in i915_gem_object_set_to_wc_domain()
141 GEM_BUG_ON((obj->write_domain & ~I915_GEM_DOMAIN_WC) != 0); in i915_gem_object_set_to_wc_domain()
142 obj->read_domains |= I915_GEM_DOMAIN_WC; in i915_gem_object_set_to_wc_domain()
144 obj->read_domains = I915_GEM_DOMAIN_WC; in i915_gem_object_set_to_wc_domain()
145 obj->write_domain = I915_GEM_DOMAIN_WC; in i915_gem_object_set_to_wc_domain()
146 obj->mm.dirty = true; in i915_gem_object_set_to_wc_domain()
149 i915_gem_object_unpin_pages(obj); in i915_gem_object_set_to_wc_domain()
162 i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write) in i915_gem_object_set_to_gtt_domain() argument
166 assert_object_held(obj); in i915_gem_object_set_to_gtt_domain()
168 ret = i915_gem_object_wait(obj, in i915_gem_object_set_to_gtt_domain()
175 if (obj->write_domain == I915_GEM_DOMAIN_GTT) in i915_gem_object_set_to_gtt_domain()
186 ret = i915_gem_object_pin_pages(obj); in i915_gem_object_set_to_gtt_domain()
190 flush_write_domain(obj, ~I915_GEM_DOMAIN_GTT); in i915_gem_object_set_to_gtt_domain()
196 if ((obj->read_domains & I915_GEM_DOMAIN_GTT) == 0) in i915_gem_object_set_to_gtt_domain()
202 GEM_BUG_ON((obj->write_domain & ~I915_GEM_DOMAIN_GTT) != 0); in i915_gem_object_set_to_gtt_domain()
203 obj->read_domains |= I915_GEM_DOMAIN_GTT; in i915_gem_object_set_to_gtt_domain()
207 obj->read_domains = I915_GEM_DOMAIN_GTT; in i915_gem_object_set_to_gtt_domain()
208 obj->write_domain = I915_GEM_DOMAIN_GTT; in i915_gem_object_set_to_gtt_domain()
209 obj->mm.dirty = true; in i915_gem_object_set_to_gtt_domain()
211 spin_lock(&obj->vma.lock); in i915_gem_object_set_to_gtt_domain()
212 for_each_ggtt_vma(vma, obj) in i915_gem_object_set_to_gtt_domain()
215 spin_unlock(&obj->vma.lock); in i915_gem_object_set_to_gtt_domain()
218 i915_gem_object_unpin_pages(obj); in i915_gem_object_set_to_gtt_domain()
237 int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj, in i915_gem_object_set_cache_level() argument
242 if (obj->cache_level == cache_level) in i915_gem_object_set_cache_level()
245 ret = i915_gem_object_wait(obj, in i915_gem_object_set_cache_level()
253 if (obj->cache_level != cache_level) { in i915_gem_object_set_cache_level()
254 i915_gem_object_set_cache_coherency(obj, cache_level); in i915_gem_object_set_cache_level()
255 obj->cache_dirty = true; in i915_gem_object_set_cache_level()
259 return i915_gem_object_unbind(obj, in i915_gem_object_set_cache_level()
268 struct drm_i915_gem_object *obj; in i915_gem_get_caching_ioctl() local
275 obj = i915_gem_object_lookup_rcu(file, args->handle); in i915_gem_get_caching_ioctl()
276 if (!obj) { in i915_gem_get_caching_ioctl()
281 switch (obj->cache_level) { in i915_gem_get_caching_ioctl()
305 struct drm_i915_gem_object *obj; in i915_gem_set_caching_ioctl() local
335 obj = i915_gem_object_lookup(file, args->handle); in i915_gem_set_caching_ioctl()
336 if (!obj) in i915_gem_set_caching_ioctl()
343 if (i915_gem_object_is_proxy(obj)) { in i915_gem_set_caching_ioctl()
348 if (!i915_gem_object_is_userptr(obj) || in i915_gem_set_caching_ioctl()
355 ret = i915_gem_object_lock_interruptible(obj, NULL); in i915_gem_set_caching_ioctl()
359 ret = i915_gem_object_set_cache_level(obj, level); in i915_gem_set_caching_ioctl()
360 i915_gem_object_unlock(obj); in i915_gem_set_caching_ioctl()
363 i915_gem_object_put(obj); in i915_gem_set_caching_ioctl()
374 i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, in i915_gem_object_pin_to_display_plane() argument
380 struct drm_i915_private *i915 = to_i915(obj->base.dev); in i915_gem_object_pin_to_display_plane()
385 if (HAS_LMEM(i915) && !i915_gem_object_is_lmem(obj)) in i915_gem_object_pin_to_display_plane()
398 ret = i915_gem_object_set_cache_level(obj, in i915_gem_object_pin_to_display_plane()
415 vma = i915_gem_object_ggtt_pin_ww(obj, ww, view, 0, alignment, in i915_gem_object_pin_to_display_plane()
419 vma = i915_gem_object_ggtt_pin_ww(obj, ww, view, 0, in i915_gem_object_pin_to_display_plane()
427 i915_gem_object_flush_if_display_locked(obj); in i915_gem_object_pin_to_display_plane()
441 i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write) in i915_gem_object_set_to_cpu_domain() argument
445 assert_object_held(obj); in i915_gem_object_set_to_cpu_domain()
447 ret = i915_gem_object_wait(obj, in i915_gem_object_set_to_cpu_domain()
454 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); in i915_gem_object_set_to_cpu_domain()
457 if ((obj->read_domains & I915_GEM_DOMAIN_CPU) == 0) { in i915_gem_object_set_to_cpu_domain()
458 i915_gem_clflush_object(obj, I915_CLFLUSH_SYNC); in i915_gem_object_set_to_cpu_domain()
459 obj->read_domains |= I915_GEM_DOMAIN_CPU; in i915_gem_object_set_to_cpu_domain()
465 GEM_BUG_ON(obj->write_domain & ~I915_GEM_DOMAIN_CPU); in i915_gem_object_set_to_cpu_domain()
471 __start_cpu_write(obj); in i915_gem_object_set_to_cpu_domain()
488 struct drm_i915_gem_object *obj; in i915_gem_set_domain_ioctl() local
510 obj = i915_gem_object_lookup(file, args->handle); in i915_gem_set_domain_ioctl()
511 if (!obj) in i915_gem_set_domain_ioctl()
519 err = i915_gem_object_wait(obj, in i915_gem_set_domain_ioctl()
527 if (i915_gem_object_is_userptr(obj)) { in i915_gem_set_domain_ioctl()
532 err = i915_gem_object_userptr_validate(obj); in i915_gem_set_domain_ioctl()
534 err = i915_gem_object_wait(obj, in i915_gem_set_domain_ioctl()
548 if (i915_gem_object_is_proxy(obj)) { in i915_gem_set_domain_ioctl()
553 err = i915_gem_object_lock_interruptible(obj, NULL); in i915_gem_set_domain_ioctl()
566 err = i915_gem_object_pin_pages(obj); in i915_gem_set_domain_ioctl()
580 if (READ_ONCE(obj->write_domain) == read_domains) in i915_gem_set_domain_ioctl()
584 err = i915_gem_object_set_to_wc_domain(obj, write_domain); in i915_gem_set_domain_ioctl()
586 err = i915_gem_object_set_to_gtt_domain(obj, write_domain); in i915_gem_set_domain_ioctl()
588 err = i915_gem_object_set_to_cpu_domain(obj, write_domain); in i915_gem_set_domain_ioctl()
591 i915_gem_object_unpin_pages(obj); in i915_gem_set_domain_ioctl()
594 i915_gem_object_unlock(obj); in i915_gem_set_domain_ioctl()
597 i915_gem_object_invalidate_frontbuffer(obj, ORIGIN_CPU); in i915_gem_set_domain_ioctl()
600 i915_gem_object_put(obj); in i915_gem_set_domain_ioctl()
609 int i915_gem_object_prepare_read(struct drm_i915_gem_object *obj, in i915_gem_object_prepare_read() argument
615 if (!i915_gem_object_has_struct_page(obj)) in i915_gem_object_prepare_read()
618 assert_object_held(obj); in i915_gem_object_prepare_read()
620 ret = i915_gem_object_wait(obj, in i915_gem_object_prepare_read()
626 ret = i915_gem_object_pin_pages(obj); in i915_gem_object_prepare_read()
630 if (obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ || in i915_gem_object_prepare_read()
632 ret = i915_gem_object_set_to_cpu_domain(obj, false); in i915_gem_object_prepare_read()
639 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); in i915_gem_object_prepare_read()
646 if (!obj->cache_dirty && in i915_gem_object_prepare_read()
647 !(obj->read_domains & I915_GEM_DOMAIN_CPU)) in i915_gem_object_prepare_read()
655 i915_gem_object_unpin_pages(obj); in i915_gem_object_prepare_read()
659 int i915_gem_object_prepare_write(struct drm_i915_gem_object *obj, in i915_gem_object_prepare_write() argument
665 if (!i915_gem_object_has_struct_page(obj)) in i915_gem_object_prepare_write()
668 assert_object_held(obj); in i915_gem_object_prepare_write()
670 ret = i915_gem_object_wait(obj, in i915_gem_object_prepare_write()
677 ret = i915_gem_object_pin_pages(obj); in i915_gem_object_prepare_write()
681 if (obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE || in i915_gem_object_prepare_write()
683 ret = i915_gem_object_set_to_cpu_domain(obj, true); in i915_gem_object_prepare_write()
690 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); in i915_gem_object_prepare_write()
697 if (!obj->cache_dirty) { in i915_gem_object_prepare_write()
704 if (!(obj->read_domains & I915_GEM_DOMAIN_CPU)) in i915_gem_object_prepare_write()
709 i915_gem_object_invalidate_frontbuffer(obj, ORIGIN_CPU); in i915_gem_object_prepare_write()
710 obj->mm.dirty = true; in i915_gem_object_prepare_write()
715 i915_gem_object_unpin_pages(obj); in i915_gem_object_prepare_write()