Re: [PATCH] drm/ttm: merge offset and base in ttm_bus_placement

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Acked-by: Nirmoy Das <nirmoy.das@xxxxxxx>

On 9/7/20 2:05 PM, Christian König wrote:
This is used by TTM to communicate the physical address
which should be used with ioremap(), ioremap_wc(). We don't
need to separate the base and offset in any way here.

Signed-off-by: Christian König <christian.koenig@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    |  7 ++++---
  drivers/gpu/drm/drm_gem_ttm_helper.c       |  5 +----
  drivers/gpu/drm/drm_gem_vram_helper.c      |  3 +--
  drivers/gpu/drm/nouveau/nouveau_bo.c       |  9 ++++-----
  drivers/gpu/drm/nouveau/nouveau_fbcon.c    |  3 +--
  drivers/gpu/drm/qxl/qxl_ttm.c              |  7 +++----
  drivers/gpu/drm/radeon/radeon_ttm.c        | 14 ++++++--------
  drivers/gpu/drm/ttm/ttm_bo.c               |  3 ---
  drivers/gpu/drm/ttm/ttm_bo_util.c          | 17 ++++++-----------
  drivers/gpu/drm/ttm/ttm_bo_vm.c            |  3 +--
  drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c |  4 ++--
  include/drm/ttm/ttm_resource.h             |  6 ++----
  12 files changed, 31 insertions(+), 50 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 46d620817482..b39d2a834340 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -773,7 +773,7 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_reso
  			mem->bus.addr = (u8 *)adev->mman.aper_base_kaddr +
  					mem->bus.offset;
- mem->bus.base = adev->gmc.aper_base;
+		mem->bus.offset += adev->gmc.aper_base;
  		mem->bus.is_iomem = true;
  		break;
  	default:
@@ -785,12 +785,13 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_reso
  static unsigned long amdgpu_ttm_io_mem_pfn(struct ttm_buffer_object *bo,
  					   unsigned long page_offset)
  {
+	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);
  	uint64_t offset = (page_offset << PAGE_SHIFT);
  	struct drm_mm_node *mm;
mm = amdgpu_find_mm_node(&bo->mem, &offset);
-	return (bo->mem.bus.base >> PAGE_SHIFT) + mm->start +
-		(offset >> PAGE_SHIFT);
+	offset += adev->gmc.aper_base;
+	return mm->start + (offset >> PAGE_SHIFT);
  }
/**
diff --git a/drivers/gpu/drm/drm_gem_ttm_helper.c b/drivers/gpu/drm/drm_gem_ttm_helper.c
index 892b2288a104..0e4fb9ba43ad 100644
--- a/drivers/gpu/drm/drm_gem_ttm_helper.c
+++ b/drivers/gpu/drm/drm_gem_ttm_helper.c
@@ -43,12 +43,9 @@ void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent,
  	drm_print_bits(p, bo->mem.placement, plname, ARRAY_SIZE(plname));
  	drm_printf(p, "\n");
- if (bo->mem.bus.is_iomem) {
-		drm_printf_indent(p, indent, "bus.base=%lx\n",
-				  (unsigned long)bo->mem.bus.base);
+	if (bo->mem.bus.is_iomem)
  		drm_printf_indent(p, indent, "bus.offset=%lx\n",
  				  (unsigned long)bo->mem.bus.offset);
-	}
  }
  EXPORT_SYMBOL(drm_gem_ttm_print_info);
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index 545a877406f4..255560591916 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -1042,8 +1042,7 @@ static int bo_driver_io_mem_reserve(struct ttm_bo_device *bdev,
  	case TTM_PL_SYSTEM:	/* nothing to do */
  		break;
  	case TTM_PL_VRAM:
-		mem->bus.offset = mem->start << PAGE_SHIFT;
-		mem->bus.base = vmm->vram_base;
+		mem->bus.offset = (mem->start << PAGE_SHIFT) + vmm->vram_base;
  		mem->bus.is_iomem = true;
  		break;
  	default:
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index f74988771ed8..4c2cc862eb19 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -1081,8 +1081,8 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_resource *reg)
  	case TTM_PL_TT:
  #if IS_ENABLED(CONFIG_AGP)
  		if (drm->agp.bridge) {
-			reg->bus.offset = reg->start << PAGE_SHIFT;
-			reg->bus.base = drm->agp.base;
+			reg->bus.offset = (reg->start << PAGE_SHIFT) +
+				drm->agp.base;
  			reg->bus.is_iomem = !drm->agp.cma;
  		}
  #endif
@@ -1094,8 +1094,8 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_resource *reg)
  		}
  		fallthrough;	/* tiled memory */
  	case TTM_PL_VRAM:
-		reg->bus.offset = reg->start << PAGE_SHIFT;
-		reg->bus.base = device->func->resource_addr(device, 1);
+		reg->bus.offset = (reg->start << PAGE_SHIFT) +
+			device->func->resource_addr(device, 1);
  		reg->bus.is_iomem = true;
  		if (drm->client.mem->oclass >= NVIF_CLASS_MEM_NV50) {
  			union {
@@ -1133,7 +1133,6 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_resource *reg)
  				goto out;
  			}
- reg->bus.base = 0;
  			reg->bus.offset = handle;
  			ret = 0;
  		}
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index fad8030ec1f8..3159a2172db5 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -378,8 +378,7 @@ nouveau_fbcon_create(struct drm_fb_helper *helper,
  			      FBINFO_HWACCEL_FILLRECT |
  			      FBINFO_HWACCEL_IMAGEBLIT;
  	info->fbops = &nouveau_fbcon_sw_ops;
-	info->fix.smem_start = nvbo->bo.mem.bus.base +
-			       nvbo->bo.mem.bus.offset;
+	info->fix.smem_start = nvbo->bo.mem.bus.offset;
  	info->fix.smem_len = nvbo->bo.mem.num_pages << PAGE_SHIFT;
info->screen_base = nvbo_kmap_obj_iovirtual(nvbo);
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 7aae0a96f043..b20c356229c3 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -81,13 +81,12 @@ int qxl_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
  		return 0;
  	case TTM_PL_VRAM:
  		mem->bus.is_iomem = true;
-		mem->bus.base = qdev->vram_base;
-		mem->bus.offset = mem->start << PAGE_SHIFT;
+		mem->bus.offset = (mem->start << PAGE_SHIFT) + qdev->vram_base;
  		break;
  	case TTM_PL_PRIV:
  		mem->bus.is_iomem = true;
-		mem->bus.base = qdev->surfaceram_base;
-		mem->bus.offset = mem->start << PAGE_SHIFT;
+		mem->bus.offset = (mem->start << PAGE_SHIFT) +
+			qdev->surfaceram_base;
  		break;
  	default:
  		return -EINVAL;
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index 74ad50c7491c..4cfadda7be2b 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -372,8 +372,8 @@ static int radeon_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_reso
  #if IS_ENABLED(CONFIG_AGP)
  		if (rdev->flags & RADEON_IS_AGP) {
  			/* RADEON_IS_AGP is set only if AGP is active */
-			mem->bus.offset = mem->start << PAGE_SHIFT;
-			mem->bus.base = rdev->mc.agp_base;
+			mem->bus.offset = (mem->start << PAGE_SHIFT) +
+				rdev->mc.agp_base;
  			mem->bus.is_iomem = !rdev->ddev->agp->cant_use_aperture;
  		}
  #endif
@@ -383,7 +383,7 @@ static int radeon_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_reso
  		/* check if it's visible */
  		if ((mem->bus.offset + bus_size) > rdev->mc.visible_vram_size)
  			return -EINVAL;
-		mem->bus.base = rdev->mc.aper_base;
+		mem->bus.offset += rdev->mc.aper_base;
  		mem->bus.is_iomem = true;
  #ifdef __alpha__
  		/*
@@ -392,12 +392,10 @@ static int radeon_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_reso
  		 */
  		if (mem->placement & TTM_PL_FLAG_WC)
  			mem->bus.addr =
-				ioremap_wc(mem->bus.base + mem->bus.offset,
-					   bus_size);
+				ioremap_wc(mem->bus.offset, bus_size);
  		else
  			mem->bus.addr =
-				ioremap(mem->bus.base + mem->bus.offset,
-					bus_size);
+				ioremap(mem->bus.offset, bus_size);
  		if (!mem->bus.addr)
  			return -ENOMEM;
@@ -407,7 +405,7 @@ static int radeon_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_reso
  		 * It then can be used to build PTEs for VRAM
  		 * access, as done in ttm_bo_vm_fault().
  		 */
-		mem->bus.base = (mem->bus.base & 0x0ffffffffUL) +
+		mem->bus.offset = (mem->bus.offset & 0x0ffffffffUL) +
  			rdev->ddev->hose->dense_mem_base;
  #endif
  		break;
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 89d8ab6edd40..0812f4ce40db 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -641,7 +641,6 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo,
evict_mem = bo->mem;
  	evict_mem.mm_node = NULL;
-	evict_mem.bus.base = 0;
  	evict_mem.bus.offset = 0;
  	evict_mem.bus.addr = NULL;
@@ -1076,7 +1075,6 @@ static int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
  	mem.num_pages = bo->num_pages;
  	mem.size = mem.num_pages << PAGE_SHIFT;
  	mem.page_alignment = bo->mem.page_alignment;
-	mem.bus.base = 0;
  	mem.bus.offset = 0;
  	mem.bus.addr = NULL;
  	mem.mm_node = NULL;
@@ -1235,7 +1233,6 @@ int ttm_bo_init_reserved(struct ttm_bo_device *bdev,
  	bo->mem.num_pages = bo->num_pages;
  	bo->mem.mm_node = NULL;
  	bo->mem.page_alignment = page_alignment;
-	bo->mem.bus.base = 0;
  	bo->mem.bus.offset = 0;
  	bo->mem.bus.addr = NULL;
  	bo->moving = NULL;
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 2c967607d485..85b670e7c20d 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -94,7 +94,7 @@ EXPORT_SYMBOL(ttm_bo_move_ttm);
  int ttm_mem_io_reserve(struct ttm_bo_device *bdev,
  		       struct ttm_resource *mem)
  {
-	if (mem->bus.base || mem->bus.offset || mem->bus.addr)
+	if (mem->bus.offset || mem->bus.addr)
  		return 0;
mem->bus.is_iomem = false;
@@ -107,13 +107,12 @@ int ttm_mem_io_reserve(struct ttm_bo_device *bdev,
  void ttm_mem_io_free(struct ttm_bo_device *bdev,
  		     struct ttm_resource *mem)
  {
-	if (!mem->bus.base && !mem->bus.offset && !mem->bus.addr)
+	if (!mem->bus.offset && !mem->bus.addr)
  		return;
if (bdev->driver->io_mem_free)
  		bdev->driver->io_mem_free(bdev, mem);
- mem->bus.base = 0;
  	mem->bus.offset = 0;
  	mem->bus.addr = NULL;
  }
@@ -136,11 +135,9 @@ static int ttm_resource_ioremap(struct ttm_bo_device *bdev,
  		size_t bus_size = (size_t)mem->num_pages << PAGE_SHIFT;
if (mem->placement & TTM_PL_FLAG_WC)
-			addr = ioremap_wc(mem->bus.base + mem->bus.offset,
-					  bus_size);
+			addr = ioremap_wc(mem->bus.offset, bus_size);
  		else
-			addr = ioremap(mem->bus.base + mem->bus.offset,
-				       bus_size);
+			addr = ioremap(mem->bus.offset, bus_size);
  		if (!addr) {
  			ttm_mem_io_free(bdev, mem);
  			return -ENOMEM;
@@ -427,12 +424,10 @@ static int ttm_bo_ioremap(struct ttm_buffer_object *bo,
  	} else {
  		map->bo_kmap_type = ttm_bo_map_iomap;
  		if (mem->placement & TTM_PL_FLAG_WC)
-			map->virtual = ioremap_wc(bo->mem.bus.base +
-						  bo->mem.bus.offset + offset,
+			map->virtual = ioremap_wc(bo->mem.bus.offset + offset,
  						  size);
  		else
-			map->virtual = ioremap(bo->mem.bus.base +
-					       bo->mem.bus.offset + offset,
+			map->virtual = ioremap(bo->mem.bus.offset + offset,
  					       size);
  	}
  	return (!map->virtual) ? -ENOMEM : 0;
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index d3dc0682425c..eb1017af0710 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -101,8 +101,7 @@ static unsigned long ttm_bo_io_mem_pfn(struct ttm_buffer_object *bo,
  	if (bdev->driver->io_mem_pfn)
  		return bdev->driver->io_mem_pfn(bo, page_offset);
- return ((bo->mem.bus.base + bo->mem.bus.offset) >> PAGE_SHIFT)
-		+ page_offset;
+	return (bo->mem.bus.offset >> PAGE_SHIFT) + page_offset;
  }
/**
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index c7f10b2c93d2..0adbacd29066 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -721,8 +721,8 @@ static int vmw_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_resourc
  	case VMW_PL_MOB:
  		return 0;
  	case TTM_PL_VRAM:
-		mem->bus.offset = mem->start << PAGE_SHIFT;
-		mem->bus.base = dev_priv->vram_start;
+		mem->bus.offset = (mem->start << PAGE_SHIFT) +
+			dev_priv->vram_start;
  		mem->bus.is_iomem = true;
  		break;
  	default:
diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
index 406baa8f0068..7b8a3157fbb3 100644
--- a/include/drm/ttm/ttm_resource.h
+++ b/include/drm/ttm/ttm_resource.h
@@ -148,16 +148,14 @@ struct ttm_resource_manager {
   * struct ttm_bus_placement
   *
   * @addr:		mapped virtual address
- * @base:		bus base address
+ * @offset:		physical addr
   * @is_iomem:		is this io memory ?
- * @offset:		offset from the base address
   *
   * Structure indicating the bus placement of an object.
   */
  struct ttm_bus_placement {
  	void		*addr;
-	phys_addr_t	base;
-	unsigned long	offset;
+	phys_addr_t	offset;
  	bool		is_iomem;
  };
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux