Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: Add gpu_addr support to seq64 allocation

Add gpu address support to seq64 alloc function.

v1:(Christian)
- Add the user of this new interface change to the same
patch.

Signed-off-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Arunpravin Paneer Selvam and committed by
Alex Deucher
f7cb6a28 cb4a73f4

+15 -7
+8 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c
··· 163 163 * Returns: 164 164 * 0 on success or a negative error code on failure 165 165 */ 166 - int amdgpu_seq64_alloc(struct amdgpu_device *adev, u64 *va, u64 **cpu_addr) 166 + int amdgpu_seq64_alloc(struct amdgpu_device *adev, u64 *va, 167 + u64 *gpu_addr, u64 **cpu_addr) 167 168 { 168 169 unsigned long bit_pos; 169 170 ··· 173 172 return -ENOSPC; 174 173 175 174 __set_bit(bit_pos, adev->seq64.used); 175 + 176 176 *va = bit_pos * sizeof(u64) + amdgpu_seq64_get_va_base(adev); 177 + 178 + if (gpu_addr) 179 + *gpu_addr = bit_pos * sizeof(u64) + adev->seq64.gpu_addr; 180 + 177 181 *cpu_addr = bit_pos + adev->seq64.cpu_base_addr; 178 182 179 183 return 0; ··· 239 233 */ 240 234 r = amdgpu_bo_create_kernel(adev, AMDGPU_VA_RESERVED_SEQ64_SIZE, 241 235 PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT, 242 - &adev->seq64.sbo, NULL, 236 + &adev->seq64.sbo, &adev->seq64.gpu_addr, 243 237 (void **)&adev->seq64.cpu_base_addr); 244 238 if (r) { 245 239 dev_warn(adev->dev, "(%d) create seq64 failed\n", r);
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.h
··· 32 32 struct amdgpu_seq64 { 33 33 struct amdgpu_bo *sbo; 34 34 u32 num_sem; 35 + u64 gpu_addr; 35 36 u64 *cpu_base_addr; 36 37 DECLARE_BITMAP(used, AMDGPU_MAX_SEQ64_SLOTS); 37 38 }; 38 39 39 40 void amdgpu_seq64_fini(struct amdgpu_device *adev); 40 41 int amdgpu_seq64_init(struct amdgpu_device *adev); 41 - int amdgpu_seq64_alloc(struct amdgpu_device *adev, u64 *gpu_addr, u64 **cpu_addr); 42 + int amdgpu_seq64_alloc(struct amdgpu_device *adev, u64 *va, u64 *gpu_addr, u64 **cpu_addr); 42 43 void amdgpu_seq64_free(struct amdgpu_device *adev, u64 gpu_addr); 43 44 int amdgpu_seq64_map(struct amdgpu_device *adev, struct amdgpu_vm *vm, 44 45 struct amdgpu_bo_va **bo_va);
+4 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
··· 82 82 } 83 83 84 84 /* Acquire seq64 memory */ 85 - r = amdgpu_seq64_alloc(adev, &fence_drv->gpu_addr, 85 + r = amdgpu_seq64_alloc(adev, &fence_drv->va, &fence_drv->gpu_addr, 86 86 &fence_drv->cpu_addr); 87 87 if (r) { 88 88 kfree(fence_drv); ··· 113 113 return 0; 114 114 115 115 free_seq64: 116 - amdgpu_seq64_free(adev, fence_drv->gpu_addr); 116 + amdgpu_seq64_free(adev, fence_drv->va); 117 117 free_fence_drv: 118 118 kfree(fence_drv); 119 119 ··· 183 183 xa_unlock_irqrestore(xa, flags); 184 184 185 185 /* Free seq64 memory */ 186 - amdgpu_seq64_free(adev, fence_drv->gpu_addr); 186 + amdgpu_seq64_free(adev, fence_drv->va); 187 187 kfree(fence_drv); 188 188 } 189 189 ··· 839 839 } 840 840 841 841 /* Store drm syncobj's gpu va address and value */ 842 - fence_info[cnt].va = fence_drv->gpu_addr; 842 + fence_info[cnt].va = fence_drv->va; 843 843 fence_info[cnt].value = fences[i]->seqno; 844 844 845 845 dma_fence_put(fences[i]);
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.h
··· 44 44 45 45 struct amdgpu_userq_fence_driver { 46 46 struct kref refcount; 47 + u64 va; 47 48 u64 gpu_addr; 48 49 u64 *cpu_addr; 49 50 u64 context;