static void * mmap_coherent(int fd, uint32_t handle, int size) { if (gem_has_llc(fd)) { coherent_domain = I915_GEM_DOMAIN_CPU; return gem_mmap__cpu(fd, handle, 0, size, PROT_WRITE); } coherent_domain = I915_GEM_DOMAIN_GTT; if (gem_mmap__has_wc(fd)) return gem_mmap__wc(fd, handle, 0, size, PROT_WRITE); else return gem_mmap__gtt(fd, handle, size, PROT_WRITE); }
static void * mmap_coherent(int fd, uint32_t handle, int size) { int domain; void *ptr; if (gem_has_llc(fd) || !gem_mmap__has_wc(fd)) { domain = I915_GEM_DOMAIN_CPU; ptr = gem_mmap__cpu(fd, handle, 0, size, PROT_WRITE); } else { domain = I915_GEM_DOMAIN_GTT; ptr = gem_mmap__wc(fd, handle, 0, size, PROT_WRITE); } gem_set_domain(fd, handle, domain, domain); return ptr; }
static void test_write_cpu_read_gtt(int fd) { uint32_t handle; uint32_t *src, *dst; igt_require(gem_has_llc(fd)); handle = gem_create(fd, OBJECT_SIZE); dst = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ); src = gem_mmap__cpu(fd, handle, 0, OBJECT_SIZE, PROT_WRITE); gem_close(fd, handle); memset(src, 0xaa, OBJECT_SIZE); igt_assert(memcmp(dst, src, OBJECT_SIZE) == 0); munmap(src, OBJECT_SIZE); munmap(dst, OBJECT_SIZE); }