drm/i915/ttm: require mappable by default
authorMatthew Auld <matthew.auld@intel.com>
Fri, 25 Feb 2022 14:54:57 +0000 (14:54 +0000)
committerMatthew Auld <matthew.auld@intel.com>
Mon, 28 Feb 2022 08:47:34 +0000 (08:47 +0000)
On devices with non-mappable LMEM ensure we always allocate the pages
within the mappable portion. For now we assume that all LMEM buffers
will require CPU access, which is also inline with pretty much all
current kernel internal users. In the next patch we will introduce a new
flag to override this behaviour.

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Acked-by: Nirmoy Das <nirmoy.das@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220225145502.331818-2-matthew.auld@intel.com
drivers/gpu/drm/i915/gem/i915_gem_ttm.c
drivers/gpu/drm/i915/intel_region_ttm.c

index 53c183f..0363987 100644 (file)
@@ -130,6 +130,10 @@ i915_ttm_place_from_region(const struct intel_memory_region *mr,
 
        if (flags & I915_BO_ALLOC_CONTIGUOUS)
                place->flags = TTM_PL_FLAG_CONTIGUOUS;
+       if (mr->io_size && mr->io_size < mr->total) {
+               place->fpfn = 0;
+               place->lpfn = mr->io_size >> PAGE_SHIFT;
+       }
 }
 
 static void
index 7dea07c..5a40310 100644 (file)
@@ -199,6 +199,11 @@ intel_region_ttm_resource_alloc(struct intel_memory_region *mem,
        struct ttm_resource *res;
        int ret;
 
+       if (mem->io_size && mem->io_size < mem->total) {
+               place.fpfn = 0;
+               place.lpfn = mem->io_size >> PAGE_SHIFT;
+       }
+
        mock_bo.base.size = size;
        mock_bo.bdev = &mem->i915->bdev;
        place.flags = flags;