Some fields are deleted from intel_memory_region in favor of instead
using the new nested drm_mem_region structure.

Note, this is based upon unmerged i915 series [1] in order to show how
i915 might begin to integrate the proposed drm_mem_region.

[1] https://lists.freedesktop.org/archives/intel-gfx/2019-June/203649.html

Signed-off-by: Brian Welty <brian.we...@intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_object.c    |  2 +-
 drivers/gpu/drm/i915/gem/i915_gem_shmem.c     |  2 +-
 drivers/gpu/drm/i915/i915_gem_gtt.c           | 10 +++----
 drivers/gpu/drm/i915/i915_gpu_error.c         |  2 +-
 drivers/gpu/drm/i915/i915_query.c             |  2 +-
 drivers/gpu/drm/i915/intel_memory_region.c    | 10 ++++---
 drivers/gpu/drm/i915/intel_memory_region.h    | 19 ++++----------
 drivers/gpu/drm/i915/intel_region_lmem.c      | 26 +++++++++----------
 .../drm/i915/selftests/intel_memory_region.c  |  8 +++---
 9 files changed, 37 insertions(+), 44 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c 
b/drivers/gpu/drm/i915/gem/i915_gem_object.c
index 73d2d72adc19..7e56fd89a972 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
@@ -606,7 +606,7 @@ static int i915_gem_object_region_select(struct 
drm_i915_private *dev_priv,
                ret = i915_gem_object_migrate(obj, ce, id);
                if (!ret) {
                        if (MEMORY_TYPE_FROM_REGION(region) ==
-                           INTEL_LMEM) {
+                           DRM_MEM_VRAM) {
                                /*
                                 * TODO: this should be part of get_pages(),
                                 * when async get_pages arrives
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c 
b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index d24f34443c4c..ac18e73665d4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -53,7 +53,7 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj)
         * If there's no chance of allocating enough pages for the whole
         * object, bail early.
         */
-       if (obj->base.size > resource_size(&mem->region))
+       if (obj->base.size > mem->region.size)
                return -ENOMEM;
 
        st = kmalloc(sizeof(*st), GFP_KERNEL);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 2288a55f27f1..f4adc7e397ff 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2737,20 +2737,20 @@ int i915_gem_init_memory_regions(struct 
drm_i915_private *i915)
 
        for (i = 0; i < ARRAY_SIZE(intel_region_map); i++) {
                struct intel_memory_region *mem = NULL;
-               u32 type;
+               u8 type;
 
                if (!HAS_REGION(i915, BIT(i)))
                        continue;
 
                type = MEMORY_TYPE_FROM_REGION(intel_region_map[i]);
                switch (type) {
-               case INTEL_SMEM:
+               case DRM_MEM_SYSTEM:
                        mem = i915_gem_shmem_setup(i915);
                        break;
-               case INTEL_STOLEN:
+               case DRM_MEM_STOLEN:
                        mem = i915_gem_stolen_setup(i915);
                        break;
-               case INTEL_LMEM:
+               case DRM_MEM_VRAM:
                        mem = i915_gem_setup_fake_lmem(i915);
                        break;
                }
@@ -2762,7 +2762,7 @@ int i915_gem_init_memory_regions(struct drm_i915_private 
*i915)
                }
 
                mem->id = intel_region_map[i];
-               mem->type = type;
+               mem->region.type = type;
                mem->instance = 
MEMORY_INSTANCE_FROM_REGION(intel_region_map[i]);
 
                i915->regions[i] = mem;
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
index 9feb597f2b01..908691c3aadb 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -1048,7 +1048,7 @@ i915_error_object_create(struct drm_i915_private *i915,
                struct intel_memory_region *mem = vma->obj->memory_region;
 
                for_each_sgt_dma(dma, iter, vma->pages) {
-                       s = io_mapping_map_atomic_wc(&mem->iomap, dma);
+                       s = io_mapping_map_atomic_wc(&mem->region.iomap, dma);
                        ret = compress_page(compress, s, dst);
                        io_mapping_unmap_atomic(s);
 
diff --git a/drivers/gpu/drm/i915/i915_query.c 
b/drivers/gpu/drm/i915/i915_query.c
index 21c4c2592d6c..d16b4a6688e8 100644
--- a/drivers/gpu/drm/i915/i915_query.c
+++ b/drivers/gpu/drm/i915/i915_query.c
@@ -184,7 +184,7 @@ static int query_memregion_info(struct drm_i915_private 
*dev_priv,
                        continue;
 
                info.id = region->id;
-               info.size = resource_size(&region->region);
+               info.size = region->region.size;
 
                if (__copy_to_user(info_ptr, &info, sizeof(info)))
                        return -EFAULT;
diff --git a/drivers/gpu/drm/i915/intel_memory_region.c 
b/drivers/gpu/drm/i915/intel_memory_region.c
index ab57b94b27a9..dcf077c23a72 100644
--- a/drivers/gpu/drm/i915/intel_memory_region.c
+++ b/drivers/gpu/drm/i915/intel_memory_region.c
@@ -200,7 +200,7 @@ i915_memory_region_get_pages_buddy(struct 
drm_i915_gem_object *obj)
 
 int i915_memory_region_init_buddy(struct intel_memory_region *mem)
 {
-       return i915_buddy_init(&mem->mm, resource_size(&mem->region),
+       return i915_buddy_init(&mem->mm, mem->region.size,
                               mem->min_page_size);
 }
 
@@ -285,10 +285,12 @@ intel_memory_region_create(struct drm_i915_private *i915,
                return ERR_PTR(-ENOMEM);
 
        mem->i915 = i915;
-       mem->region = (struct resource)DEFINE_RES_MEM(start, size);
-       mem->io_start = io_start;
-       mem->min_page_size = min_page_size;
        mem->ops = ops;
+       /* FIXME drm_mem_region_init? */
+       mem->region.start = start;
+       mem->region.size = size;
+       mem->region.io_start = io_start;
+       mem->min_page_size = min_page_size;
 
        mutex_init(&mem->obj_lock);
        INIT_LIST_HEAD(&mem->objects);
diff --git a/drivers/gpu/drm/i915/intel_memory_region.h 
b/drivers/gpu/drm/i915/intel_memory_region.h
index 4960096ec30f..fc00d43f07a7 100644
--- a/drivers/gpu/drm/i915/intel_memory_region.h
+++ b/drivers/gpu/drm/i915/intel_memory_region.h
@@ -19,14 +19,8 @@ struct intel_memory_region;
 struct sg_table;
 
 /**
- *  Base memory type
+ *  Define supported memory regions
  */
-enum intel_memory_type {
-       INTEL_SMEM = 0,
-       INTEL_LMEM,
-       INTEL_STOLEN,
-};
-
 enum intel_region_id {
        INTEL_MEMORY_SMEM = 0,
        INTEL_MEMORY_LMEM,
@@ -47,9 +41,9 @@ enum intel_region_id {
  * Memory regions encoded as type | instance
  */
 static const u32 intel_region_map[] = {
-       [INTEL_MEMORY_SMEM] = BIT(INTEL_SMEM + INTEL_MEMORY_TYPE_SHIFT) | 
BIT(0),
-       [INTEL_MEMORY_LMEM] = BIT(INTEL_LMEM + INTEL_MEMORY_TYPE_SHIFT) | 
BIT(0),
-       [INTEL_MEMORY_STOLEN] = BIT(INTEL_STOLEN + INTEL_MEMORY_TYPE_SHIFT) | 
BIT(0),
+       [INTEL_MEMORY_SMEM] = BIT(DRM_MEM_SYSTEM + INTEL_MEMORY_TYPE_SHIFT) | 
BIT(0),
+       [INTEL_MEMORY_LMEM] = BIT(DRM_MEM_VRAM + INTEL_MEMORY_TYPE_SHIFT) | 
BIT(0),
+       [INTEL_MEMORY_STOLEN] = BIT(DRM_MEM_STOLEN + INTEL_MEMORY_TYPE_SHIFT) | 
BIT(0),
 };
 
 struct intel_memory_region_ops {
@@ -69,8 +63,7 @@ struct intel_memory_region {
 
        const struct intel_memory_region_ops *ops;
 
-       struct io_mapping iomap;
-       struct resource region;
+       struct drm_mem_region region;
 
        /* For faking for lmem */
        struct drm_mm_node fake_mappable;
@@ -78,10 +71,8 @@ struct intel_memory_region {
        struct i915_buddy_mm mm;
        struct mutex mm_lock;
 
-       resource_size_t io_start;
        resource_size_t min_page_size;
 
-       unsigned int type;
        unsigned int instance;
        unsigned int id;
 
diff --git a/drivers/gpu/drm/i915/intel_region_lmem.c 
b/drivers/gpu/drm/i915/intel_region_lmem.c
index afde9be72a12..6f0ce0314b98 100644
--- a/drivers/gpu/drm/i915/intel_region_lmem.c
+++ b/drivers/gpu/drm/i915/intel_region_lmem.c
@@ -250,7 +250,7 @@ static int i915_gem_init_fake_lmem_bar(struct 
intel_memory_region *mem)
        int ret;
 
        mem->fake_mappable.start = 0;
-       mem->fake_mappable.size = resource_size(&mem->region);
+       mem->fake_mappable.size = mem->region.size;
        mem->fake_mappable.color = I915_COLOR_UNEVICTABLE;
 
        ret = drm_mm_reserve_node(&ggtt->vm.mm, &mem->fake_mappable);
@@ -277,7 +277,7 @@ static void
 region_lmem_release(struct intel_memory_region *mem)
 {
        i915_gem_relase_fake_lmem_bar(mem);
-       io_mapping_fini(&mem->iomap);
+       io_mapping_fini(&mem->region.iomap);
        i915_memory_region_release_buddy(mem);
 }
 
@@ -294,14 +294,14 @@ region_lmem_init(struct intel_memory_region *mem)
                }
        }
 
-       if (!io_mapping_init_wc(&mem->iomap,
-                               mem->io_start,
-                               resource_size(&mem->region)))
+       if (!io_mapping_init_wc(&mem->region.iomap,
+                               mem->region.io_start,
+                               mem->region.size))
                return -EIO;
 
        ret = i915_memory_region_init_buddy(mem);
        if (ret)
-               io_mapping_fini(&mem->iomap);
+               io_mapping_fini(&mem->region.iomap);
 
        return ret;
 }
@@ -321,7 +321,7 @@ void __iomem *i915_gem_object_lmem_io_map_page(struct 
drm_i915_gem_object *obj,
        offset = i915_gem_object_get_dma_address(obj, n);
        offset -= intel_graphics_fake_lmem_res.start;
 
-       return io_mapping_map_atomic_wc(&obj->memory_region->iomap, offset);
+       return io_mapping_map_atomic_wc(&obj->memory_region->region.iomap, 
offset);
 }
 
 void __iomem *i915_gem_object_lmem_io_map(struct drm_i915_gem_object *obj,
@@ -335,7 +335,7 @@ void __iomem *i915_gem_object_lmem_io_map(struct 
drm_i915_gem_object *obj,
        offset = i915_gem_object_get_dma_address(obj, n);
        offset -= intel_graphics_fake_lmem_res.start;
 
-       return io_mapping_map_wc(&obj->memory_region->iomap, offset, size);
+       return io_mapping_map_wc(&obj->memory_region->region.iomap, offset, 
size);
 }
 
 resource_size_t i915_gem_object_lmem_io_offset(struct drm_i915_gem_object *obj,
@@ -352,14 +352,14 @@ resource_size_t i915_gem_object_lmem_io_offset(struct 
drm_i915_gem_object *obj,
        daddr = i915_gem_object_get_dma_address(obj, n);
        daddr -= intel_graphics_fake_lmem_res.start;
 
-       return mem->io_start + daddr;
+       return mem->region.io_start + daddr;
 }
 
 bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj)
 {
-       struct intel_memory_region *region = obj->memory_region;
+       struct intel_memory_region *mem = obj->memory_region;
 
-       return region && region->type == INTEL_LMEM;
+       return mem && mem->region.type == DRM_MEM_VRAM;
 }
 
 struct drm_i915_gem_object *
@@ -395,9 +395,9 @@ i915_gem_setup_fake_lmem(struct drm_i915_private *i915)
                                         io_start,
                                         &region_lmem_ops);
        if (!IS_ERR(mem)) {
-               DRM_INFO("Intel graphics fake LMEM: %pR\n", &mem->region);
+               DRM_INFO("Intel graphics fake LMEM: %pR\n", mem);
                DRM_INFO("Intel graphics fake LMEM IO start: %llx\n",
-                        (u64)mem->io_start);
+                        (u64)mem->region.io_start);
        }
 
        return mem;
diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c 
b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
index 9793f548a71a..1496f47a794a 100644
--- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
+++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
@@ -32,7 +32,7 @@ static void close_objects(struct list_head *objects)
 static int igt_mock_fill(void *arg)
 {
        struct intel_memory_region *mem = arg;
-       resource_size_t total = resource_size(&mem->region);
+       resource_size_t total = mem->region.size;
        resource_size_t page_size;
        resource_size_t rem;
        unsigned long max_pages;
@@ -98,7 +98,7 @@ static int igt_frag_region(struct intel_memory_region *mem,
        int err = 0;
 
        target = mem->mm.min_size;
-       total = resource_size(&mem->region);
+       total = mem->region.size;
        n_objects = total / target;
 
        while (n_objects--) {
@@ -152,7 +152,7 @@ static int igt_mock_evict(void *arg)
        if (err)
                return err;
 
-       total = resource_size(&mem->region);
+       total = mem->region.size;
        target = mem->mm.min_size;
 
        while (target <= total / 2) {
@@ -198,7 +198,7 @@ static int igt_mock_continuous(void *arg)
        if (err)
                return err;
 
-       total = resource_size(&mem->region);
+       total = mem->region.size;
        target = total / 2;
 
        /*
-- 
2.21.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to