Commit 235582ca authored by Matthew Auld's avatar Matthew Auld
Browse files

drm/i915: add io_size plumbing



With small LMEM-BAR we need to be able to differentiate between the
total size of LMEM, and how much of it is CPU mappable. The end goal is
to be able to utilize the entire range, even if part of is it not CPU
accessible.

v2: also update intelfb_create

Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Acked-by: default avatarNirmoy Das <nirmoy.das@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220225145502.331818-1-matthew.auld@intel.com
parent d2cc01e1
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -265,7 +265,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
		struct intel_memory_region *mem = obj->mm.region;
		struct intel_memory_region *mem = obj->mm.region;


		info->apertures->ranges[0].base = mem->io_start;
		info->apertures->ranges[0].base = mem->io_start;
		info->apertures->ranges[0].size = mem->total;
		info->apertures->ranges[0].size = mem->io_size;


		/* Use fbdev's framebuffer from lmem for discrete */
		/* Use fbdev's framebuffer from lmem for discrete */
		info->fix.smem_start =
		info->fix.smem_start =
+1 −1
Original line number Original line Diff line number Diff line
@@ -699,7 +699,7 @@ struct intel_memory_region *i915_gem_shmem_setup(struct drm_i915_private *i915,
{
{
	return intel_memory_region_create(i915, 0,
	return intel_memory_region_create(i915, 0,
					  totalram_pages() << PAGE_SHIFT,
					  totalram_pages() << PAGE_SHIFT,
					  PAGE_SIZE, 0,
					  PAGE_SIZE, 0, 0,
					  type, instance,
					  type, instance,
					  &shmem_region_ops);
					  &shmem_region_ops);
}
}
+5 −3
Original line number Original line Diff line number Diff line
@@ -492,6 +492,7 @@ static int i915_gem_init_stolen(struct intel_memory_region *mem)


	/* Exclude the reserved region from driver use */
	/* Exclude the reserved region from driver use */
	mem->region.end = reserved_base - 1;
	mem->region.end = reserved_base - 1;
	mem->io_size = resource_size(&mem->region);


	/* It is possible for the reserved area to end before the end of stolen
	/* It is possible for the reserved area to end before the end of stolen
	 * memory, so just consider the start. */
	 * memory, so just consider the start. */
@@ -751,7 +752,7 @@ static int init_stolen_lmem(struct intel_memory_region *mem)


	if (!io_mapping_init_wc(&mem->iomap,
	if (!io_mapping_init_wc(&mem->iomap,
				mem->io_start,
				mem->io_start,
				resource_size(&mem->region)))
				mem->io_size))
		return -EIO;
		return -EIO;


	/*
	/*
@@ -806,7 +807,8 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
						I915_GTT_PAGE_SIZE_4K;
						I915_GTT_PAGE_SIZE_4K;


	mem = intel_memory_region_create(i915, lmem_base, lmem_size,
	mem = intel_memory_region_create(i915, lmem_base, lmem_size,
					 min_page_size, io_start,
					 min_page_size,
					 io_start, lmem_size,
					 type, instance,
					 type, instance,
					 &i915_region_stolen_lmem_ops);
					 &i915_region_stolen_lmem_ops);
	if (IS_ERR(mem))
	if (IS_ERR(mem))
@@ -837,7 +839,7 @@ i915_gem_stolen_smem_setup(struct drm_i915_private *i915, u16 type,
	mem = intel_memory_region_create(i915,
	mem = intel_memory_region_create(i915,
					 intel_graphics_stolen_res.start,
					 intel_graphics_stolen_res.start,
					 resource_size(&intel_graphics_stolen_res),
					 resource_size(&intel_graphics_stolen_res),
					 PAGE_SIZE, 0, type, instance,
					 PAGE_SIZE, 0, 0, type, instance,
					 &i915_region_stolen_smem_ops);
					 &i915_region_stolen_smem_ops);
	if (IS_ERR(mem))
	if (IS_ERR(mem))
		return mem;
		return mem;
+1 −1
Original line number Original line Diff line number Diff line
@@ -1103,7 +1103,7 @@ i915_gem_ttm_system_setup(struct drm_i915_private *i915,


	mr = intel_memory_region_create(i915, 0,
	mr = intel_memory_region_create(i915, 0,
					totalram_pages() << PAGE_SHIFT,
					totalram_pages() << PAGE_SHIFT,
					PAGE_SIZE, 0,
					PAGE_SIZE, 0, 0,
					type, instance,
					type, instance,
					&ttm_system_region_ops);
					&ttm_system_region_ops);
	if (IS_ERR(mr))
	if (IS_ERR(mr))
+1 −1
Original line number Original line Diff line number Diff line
@@ -500,7 +500,7 @@ static int igt_mock_memory_region_huge_pages(void *arg)
	int bit;
	int bit;
	int err = 0;
	int err = 0;


	mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0);
	mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0, 0);
	if (IS_ERR(mem)) {
	if (IS_ERR(mem)) {
		pr_err("%s failed to create memory region\n", __func__);
		pr_err("%s failed to create memory region\n", __func__);
		return PTR_ERR(mem);
		return PTR_ERR(mem);
Loading