Re: [Intel-gfx] [PATCH 04/20] drm/i915: add io_size plumbing

2022-01-31 Thread Thomas Hellström



On 1/26/22 16:21, Matthew Auld wrote:

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.

Signed-off-by: Matthew Auld 
Cc: Thomas Hellström 


Reviewed-by: Thomas Hellström 



---
  drivers/gpu/drm/i915/gem/i915_gem_shmem.c| 2 +-
  drivers/gpu/drm/i915/gem/i915_gem_stolen.c   | 8 +---
  drivers/gpu/drm/i915/gem/i915_gem_ttm.c  | 2 +-
  drivers/gpu/drm/i915/gem/selftests/huge_pages.c  | 2 +-
  drivers/gpu/drm/i915/gt/intel_region_lmem.c  | 6 +-
  drivers/gpu/drm/i915/intel_memory_region.c   | 6 +-
  drivers/gpu/drm/i915/intel_memory_region.h   | 2 ++
  drivers/gpu/drm/i915/selftests/intel_memory_region.c | 8 
  drivers/gpu/drm/i915/selftests/mock_region.c | 6 --
  drivers/gpu/drm/i915/selftests/mock_region.h | 3 ++-
  10 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c 
b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 6c57b0a79c8a..a9aca11cedbb 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -696,7 +696,7 @@ struct intel_memory_region *i915_gem_shmem_setup(struct 
drm_i915_private *i915,
  {
return intel_memory_region_create(i915, 0,
  totalram_pages() << PAGE_SHIFT,
- PAGE_SIZE, 0,
+ PAGE_SIZE, 0, 0,
  type, instance,
  _region_ops);
  }
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index 26975d857776..387b48686851 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -490,6 +490,7 @@ static int i915_gem_init_stolen(struct intel_memory_region 
*mem)
  
  	/* Exclude the reserved region from driver use */

mem->region.end = reserved_base - 1;
+   mem->io_size = resource_size(>region);
  
  	/* It is possible for the reserved area to end before the end of stolen

 * memory, so just consider the start. */
@@ -746,7 +747,7 @@ static int init_stolen_lmem(struct intel_memory_region *mem)
  
  	if (!io_mapping_init_wc(>iomap,

mem->io_start,
-   resource_size(>region)))
+   mem->io_size))
return -EIO;
  
  	/*

@@ -801,7 +802,8 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, 
u16 type,
I915_GTT_PAGE_SIZE_4K;
  
  	mem = intel_memory_region_create(i915, lmem_base, lmem_size,

-min_page_size, io_start,
+min_page_size,
+io_start, lmem_size,
 type, instance,
 _region_stolen_lmem_ops);
if (IS_ERR(mem))
@@ -832,7 +834,7 @@ i915_gem_stolen_smem_setup(struct drm_i915_private *i915, 
u16 type,
mem = intel_memory_region_create(i915,
 intel_graphics_stolen_res.start,
 
resource_size(_graphics_stolen_res),
-PAGE_SIZE, 0, type, instance,
+PAGE_SIZE, 0, 0, type, instance,
 _region_stolen_smem_ops);
if (IS_ERR(mem))
return mem;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c 
b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
index 84cae740b4a5..e1140ca3d9a0 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
@@ -1103,7 +1103,7 @@ i915_gem_ttm_system_setup(struct drm_i915_private *i915,
  
  	mr = intel_memory_region_create(i915, 0,

totalram_pages() << PAGE_SHIFT,
-   PAGE_SIZE, 0,
+   PAGE_SIZE, 0, 0,
type, instance,
_system_region_ops);
if (IS_ERR(mr))
diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c 
b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index f36191ebf964..42db9cd30978 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -499,7 +499,7 @@ static int igt_mock_memory_region_huge_pages(void *arg)
int bit;
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);

[Intel-gfx] [PATCH 04/20] drm/i915: add io_size plumbing

2022-01-26 Thread Matthew Auld
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.

Signed-off-by: Matthew Auld 
Cc: Thomas Hellström 
---
 drivers/gpu/drm/i915/gem/i915_gem_shmem.c| 2 +-
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c   | 8 +---
 drivers/gpu/drm/i915/gem/i915_gem_ttm.c  | 2 +-
 drivers/gpu/drm/i915/gem/selftests/huge_pages.c  | 2 +-
 drivers/gpu/drm/i915/gt/intel_region_lmem.c  | 6 +-
 drivers/gpu/drm/i915/intel_memory_region.c   | 6 +-
 drivers/gpu/drm/i915/intel_memory_region.h   | 2 ++
 drivers/gpu/drm/i915/selftests/intel_memory_region.c | 8 
 drivers/gpu/drm/i915/selftests/mock_region.c | 6 --
 drivers/gpu/drm/i915/selftests/mock_region.h | 3 ++-
 10 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c 
b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 6c57b0a79c8a..a9aca11cedbb 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -696,7 +696,7 @@ struct intel_memory_region *i915_gem_shmem_setup(struct 
drm_i915_private *i915,
 {
return intel_memory_region_create(i915, 0,
  totalram_pages() << PAGE_SHIFT,
- PAGE_SIZE, 0,
+ PAGE_SIZE, 0, 0,
  type, instance,
  _region_ops);
 }
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index 26975d857776..387b48686851 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -490,6 +490,7 @@ static int i915_gem_init_stolen(struct intel_memory_region 
*mem)
 
/* Exclude the reserved region from driver use */
mem->region.end = reserved_base - 1;
+   mem->io_size = resource_size(>region);
 
/* It is possible for the reserved area to end before the end of stolen
 * memory, so just consider the start. */
@@ -746,7 +747,7 @@ static int init_stolen_lmem(struct intel_memory_region *mem)
 
if (!io_mapping_init_wc(>iomap,
mem->io_start,
-   resource_size(>region)))
+   mem->io_size))
return -EIO;
 
/*
@@ -801,7 +802,8 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, 
u16 type,
I915_GTT_PAGE_SIZE_4K;
 
mem = intel_memory_region_create(i915, lmem_base, lmem_size,
-min_page_size, io_start,
+min_page_size,
+io_start, lmem_size,
 type, instance,
 _region_stolen_lmem_ops);
if (IS_ERR(mem))
@@ -832,7 +834,7 @@ i915_gem_stolen_smem_setup(struct drm_i915_private *i915, 
u16 type,
mem = intel_memory_region_create(i915,
 intel_graphics_stolen_res.start,
 
resource_size(_graphics_stolen_res),
-PAGE_SIZE, 0, type, instance,
+PAGE_SIZE, 0, 0, type, instance,
 _region_stolen_smem_ops);
if (IS_ERR(mem))
return mem;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c 
b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
index 84cae740b4a5..e1140ca3d9a0 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
@@ -1103,7 +1103,7 @@ i915_gem_ttm_system_setup(struct drm_i915_private *i915,
 
mr = intel_memory_region_create(i915, 0,
totalram_pages() << PAGE_SHIFT,
-   PAGE_SIZE, 0,
+   PAGE_SIZE, 0, 0,
type, instance,
_system_region_ops);
if (IS_ERR(mr))
diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c 
b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index f36191ebf964..42db9cd30978 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -499,7 +499,7 @@ static int igt_mock_memory_region_huge_pages(void *arg)
int bit;
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)) {
pr_err("%s failed to create memory