* [PATCH 1/2] drm/qxl: don't touch mem.bus.offset
@ 2020-09-07 13:29 Christian König
2020-09-07 13:29 ` [PATCH 2/2] drm/ttm: merge offset and base in ttm_bus_placement Christian König
0 siblings, 1 reply; 3+ messages in thread
From: Christian König @ 2020-09-07 13:29 UTC (permalink / raw)
To: airlied, dri-devel
This is internal to TTM and should not be used by drivers directly.
Drop the call to qxl_ttm_io_mem_reserve() and use mem->start instead.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/qxl/qxl_object.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index f838b6d689aa..b2a1fa61920b 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -167,6 +167,7 @@ int qxl_bo_kmap(struct qxl_bo *bo, void **ptr)
void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev,
struct qxl_bo *bo, int page_offset)
{
+ unsigned long offset;
void *rptr;
int ret;
struct io_mapping *map;
@@ -178,9 +179,8 @@ void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev,
else
goto fallback;
- ret = qxl_ttm_io_mem_reserve(bo->tbo.bdev, &bo->tbo.mem);
-
- return io_mapping_map_atomic_wc(map, bo->tbo.mem.bus.offset + page_offset);
+ offset = bo->tbo.mem.start << PAGE_SHIFT;
+ return io_mapping_map_atomic_wc(map, offset + page_offset);
fallback:
if (bo->kptr) {
rptr = bo->kptr + (page_offset * PAGE_SIZE);
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] drm/ttm: merge offset and base in ttm_bus_placement
2020-09-07 13:29 [PATCH 1/2] drm/qxl: don't touch mem.bus.offset Christian König
@ 2020-09-07 13:29 ` Christian König
2020-09-07 18:57 ` Dave Airlie
0 siblings, 1 reply; 3+ messages in thread
From: Christian König @ 2020-09-07 13:29 UTC (permalink / raw)
To: airlied, dri-devel
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@amd.com>
---
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;
};
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] drm/ttm: merge offset and base in ttm_bus_placement
2020-09-07 13:29 ` [PATCH 2/2] drm/ttm: merge offset and base in ttm_bus_placement Christian König
@ 2020-09-07 18:57 ` Dave Airlie
0 siblings, 0 replies; 3+ messages in thread
From: Dave Airlie @ 2020-09-07 18:57 UTC (permalink / raw)
To: Christian König; +Cc: dri-devel
I'd written something similar but didn't finish it!
For the series,
Reviewed-by: Dave Airlie <airlied@redhat.com>
On Mon, 7 Sep 2020 at 23:29, Christian König
<ckoenig.leichtzumerken@gmail.com> 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@amd.com>
> ---
> 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;
> };
>
> --
> 2.17.1
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-09-07 18:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-07 13:29 [PATCH 1/2] drm/qxl: don't touch mem.bus.offset Christian König
2020-09-07 13:29 ` [PATCH 2/2] drm/ttm: merge offset and base in ttm_bus_placement Christian König
2020-09-07 18:57 ` Dave Airlie
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.