drm/i915/gem: Support discontiguous lmem object maps
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / selftests / intel_memory_region.c
index 19e1cca..3ef3620 100644 (file)
@@ -32,7 +32,7 @@ static void close_objects(struct intel_memory_region *mem,
                if (i915_gem_object_has_pinned_pages(obj))
                        i915_gem_object_unpin_pages(obj);
                /* No polluting the memory region between tests */
-               __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
+               __i915_gem_object_put_pages(obj);
                list_del(&obj->st_link);
                i915_gem_object_put(obj);
        }
@@ -122,7 +122,7 @@ put:
 static void igt_object_release(struct drm_i915_gem_object *obj)
 {
        i915_gem_object_unpin_pages(obj);
-       __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
+       __i915_gem_object_put_pages(obj);
        list_del(&obj->st_link);
        i915_gem_object_put(obj);
 }
@@ -270,36 +270,31 @@ static int igt_gpu_write_dw(struct intel_context *ce,
 
 static int igt_cpu_check(struct drm_i915_gem_object *obj, u32 dword, u32 val)
 {
-       unsigned long n;
+       unsigned long n = obj->base.size >> PAGE_SHIFT;
+       u32 *ptr;
        int err;
 
-       i915_gem_object_lock(obj);
-       err = i915_gem_object_set_to_wc_domain(obj, false);
-       i915_gem_object_unlock(obj);
-       if (err)
-               return err;
-
-       err = i915_gem_object_pin_pages(obj);
+       err = i915_gem_object_wait(obj, 0, MAX_SCHEDULE_TIMEOUT);
        if (err)
                return err;
 
-       for (n = 0; n < obj->base.size >> PAGE_SHIFT; ++n) {
-               u32 __iomem *base;
-               u32 read_val;
-
-               base = i915_gem_object_lmem_io_map_page_atomic(obj, n);
+       ptr = i915_gem_object_pin_map(obj, I915_MAP_WC);
+       if (IS_ERR(ptr))
+               return PTR_ERR(ptr);
 
-               read_val = ioread32(base + dword);
-               io_mapping_unmap_atomic(base);
-               if (read_val != val) {
-                       pr_err("n=%lu base[%u]=%u, val=%u\n",
-                              n, dword, read_val, val);
+       ptr += dword;
+       while (n--) {
+               if (*ptr != val) {
+                       pr_err("base[%u]=%08x, val=%08x\n",
+                              dword, *ptr, val);
                        err = -EINVAL;
                        break;
                }
+
+               ptr += PAGE_SIZE / sizeof(*ptr);
        }
 
-       i915_gem_object_unpin_pages(obj);
+       i915_gem_object_unpin_map(obj);
        return err;
 }
 
@@ -404,7 +399,7 @@ static int igt_lmem_write_gpu(void *arg)
        struct drm_i915_private *i915 = arg;
        struct drm_i915_gem_object *obj;
        struct i915_gem_context *ctx;
-       struct drm_file *file;
+       struct file *file;
        I915_RND_STATE(prng);
        u32 sz;
        int err;
@@ -439,7 +434,7 @@ static int igt_lmem_write_gpu(void *arg)
 out_put:
        i915_gem_object_put(obj);
 out_file:
-       mock_file_free(i915, file);
+       fput(file);
        return err;
 }
 
@@ -506,7 +501,9 @@ static int igt_lmem_write_cpu(void *arg)
        }
 
        /* Put the pages into a known state -- from the gpu for added fun */
+       intel_engine_pm_get(engine);
        err = i915_gem_object_fill_blt(obj, engine->kernel_context, 0xdeadbeaf);
+       intel_engine_pm_put(engine);
        if (err)
                goto out_unpin;