* [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.