Skip to content

Commit b1a8ef9

Browse files
nirmoyChristianKoenigAMD
authored andcommitted
drm/amdgpu: move ttm bo->offset to amdgpu_bo
GPU address should belong to driver not in memory management. This patch moves ttm bo.offset and gpu_offset calculation to amdgpu driver. Signed-off-by: Nirmoy Das <[email protected]> Acked-by: Huang Rui <[email protected]> Reviewed-by: Christian König <[email protected]> Signed-off-by: Christian König <[email protected]> Link: https://patchwork.freedesktop.org/patch/372930/
1 parent ebf9301 commit b1a8ef9

File tree

5 files changed

+48
-11
lines changed

5 files changed

+48
-11
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_object.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,8 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
918918
bo->pin_count++;
919919

920920
if (max_offset != 0) {
921-
u64 domain_start = bo->tbo.bdev->man[mem_type].gpu_offset;
921+
u64 domain_start = amdgpu_ttm_domain_start(adev,
922+
mem_type);
922923
WARN_ON_ONCE(max_offset <
923924
(amdgpu_bo_gpu_offset(bo) - domain_start));
924925
}
@@ -1484,7 +1485,25 @@ u64 amdgpu_bo_gpu_offset(struct amdgpu_bo *bo)
14841485
WARN_ON_ONCE(bo->tbo.mem.mem_type == TTM_PL_VRAM &&
14851486
!(bo->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS));
14861487

1487-
return amdgpu_gmc_sign_extend(bo->tbo.offset);
1488+
return amdgpu_bo_gpu_offset_no_check(bo);
1489+
}
1490+
1491+
/**
1492+
* amdgpu_bo_gpu_offset_no_check - return GPU offset of bo
1493+
* @bo: amdgpu object for which we query the offset
1494+
*
1495+
* Returns:
1496+
* current GPU offset of the object without raising warnings.
1497+
*/
1498+
u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo)
1499+
{
1500+
struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
1501+
uint64_t offset;
1502+
1503+
offset = (bo->tbo.mem.start << PAGE_SHIFT) +
1504+
amdgpu_ttm_domain_start(adev, bo->tbo.mem.mem_type);
1505+
1506+
return amdgpu_gmc_sign_extend(offset);
14881507
}
14891508

14901509
/**

drivers/gpu/drm/amd/amdgpu/amdgpu_object.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ int amdgpu_bo_sync_wait_resv(struct amdgpu_device *adev, struct dma_resv *resv,
282282
bool intr);
283283
int amdgpu_bo_sync_wait(struct amdgpu_bo *bo, void *owner, bool intr);
284284
u64 amdgpu_bo_gpu_offset(struct amdgpu_bo *bo);
285+
u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo);
285286
int amdgpu_bo_validate(struct amdgpu_bo *bo);
286287
int amdgpu_bo_restore_shadow(struct amdgpu_bo *shadow,
287288
struct dma_fence **fence);

drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,13 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
9696
case TTM_PL_TT:
9797
/* GTT memory */
9898
man->func = &amdgpu_gtt_mgr_func;
99-
man->gpu_offset = adev->gmc.gart_start;
10099
man->available_caching = TTM_PL_MASK_CACHING;
101100
man->default_caching = TTM_PL_FLAG_CACHED;
102101
man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA;
103102
break;
104103
case TTM_PL_VRAM:
105104
/* "On-card" video ram */
106105
man->func = &amdgpu_vram_mgr_func;
107-
man->gpu_offset = adev->gmc.vram_start;
108106
man->flags = TTM_MEMTYPE_FLAG_FIXED |
109107
TTM_MEMTYPE_FLAG_MAPPABLE;
110108
man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
@@ -115,7 +113,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
115113
case AMDGPU_PL_OA:
116114
/* On-chip GDS memory*/
117115
man->func = &ttm_bo_manager_func;
118-
man->gpu_offset = 0;
119116
man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_CMA;
120117
man->available_caching = TTM_PL_FLAG_UNCACHED;
121118
man->default_caching = TTM_PL_FLAG_UNCACHED;
@@ -263,7 +260,8 @@ static uint64_t amdgpu_mm_node_addr(struct ttm_buffer_object *bo,
263260

264261
if (mm_node->start != AMDGPU_BO_INVALID_OFFSET) {
265262
addr = mm_node->start << PAGE_SHIFT;
266-
addr += bo->bdev->man[mem->mem_type].gpu_offset;
263+
addr += amdgpu_ttm_domain_start(amdgpu_ttm_adev(bo->bdev),
264+
mem->mem_type);
267265
}
268266
return addr;
269267
}
@@ -750,6 +748,27 @@ static unsigned long amdgpu_ttm_io_mem_pfn(struct ttm_buffer_object *bo,
750748
(offset >> PAGE_SHIFT);
751749
}
752750

751+
/**
752+
* amdgpu_ttm_domain_start - Returns GPU start address
753+
* @adev: amdgpu device object
754+
* @type: type of the memory
755+
*
756+
* Returns:
757+
* GPU start address of a memory domain
758+
*/
759+
760+
uint64_t amdgpu_ttm_domain_start(struct amdgpu_device *adev, uint32_t type)
761+
{
762+
switch (type) {
763+
case TTM_PL_TT:
764+
return adev->gmc.gart_start;
765+
case TTM_PL_VRAM:
766+
return adev->gmc.vram_start;
767+
}
768+
769+
return 0;
770+
}
771+
753772
/*
754773
* TTM backend functions.
755774
*/
@@ -1163,9 +1182,6 @@ int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo)
11631182
bo->mem = tmp;
11641183
}
11651184

1166-
bo->offset = (bo->mem.start << PAGE_SHIFT) +
1167-
bo->bdev->man[bo->mem.mem_type].gpu_offset;
1168-
11691185
return 0;
11701186
}
11711187

drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo,
112112
int amdgpu_mmap(struct file *filp, struct vm_area_struct *vma);
113113
int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo);
114114
int amdgpu_ttm_recover_gart(struct ttm_buffer_object *tbo);
115+
uint64_t amdgpu_ttm_domain_start(struct amdgpu_device *adev, uint32_t type);
115116

116117
#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR)
117118
int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages);

drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static void amdgpu_vm_sdma_copy_ptes(struct amdgpu_vm_update_params *p,
141141

142142
src += p->num_dw_left * 4;
143143

144-
pe += amdgpu_gmc_sign_extend(bo->tbo.offset);
144+
pe += amdgpu_bo_gpu_offset_no_check(bo);
145145
trace_amdgpu_vm_copy_ptes(pe, src, count, p->direct);
146146

147147
amdgpu_vm_copy_pte(p->adev, ib, pe, src, count);
@@ -168,7 +168,7 @@ static void amdgpu_vm_sdma_set_ptes(struct amdgpu_vm_update_params *p,
168168
{
169169
struct amdgpu_ib *ib = p->job->ibs;
170170

171-
pe += amdgpu_gmc_sign_extend(bo->tbo.offset);
171+
pe += amdgpu_bo_gpu_offset_no_check(bo);
172172
trace_amdgpu_vm_set_ptes(pe, addr, count, incr, flags, p->direct);
173173
if (count < 3) {
174174
amdgpu_vm_write_pte(p->adev, ib, pe, addr | flags,

0 commit comments

Comments
 (0)