drm/amdkfd: move TBA/TMA from system to device memory

for GFX9.4.2 and above.

-v2: keep APU with GTT allocation
-v3: use dev->adev->apu_prefer_gtt instead

Signed-off-by: James Zhu <James.Zhu@amd.com>
Reviewed-by: Vladimir Indic <vladimir.indic@amd.com>
Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Reviewed-by: Philip Yang <philip.yang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
James Zhu 2025-09-03 17:21:00 -04:00 committed by Alex Deucher
parent f8f759426b
commit fe5966d4fd

View File

@ -776,9 +776,14 @@ static int kfd_process_alloc_gpuvm(struct kfd_process_device *pdd,
}
if (kptr) {
u32 domain;
if (flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM)
domain = AMDGPU_GEM_DOMAIN_VRAM;
else
domain = AMDGPU_GEM_DOMAIN_GTT;
err = amdgpu_amdkfd_gpuvm_map_bo_to_kernel((struct kgd_mem *)*mem,
kptr, NULL,
AMDGPU_GEM_DOMAIN_GTT);
kptr, NULL, domain);
if (err) {
pr_debug("Map BO to kernel failed err %d\n", err);
goto sync_memory_failed;
@ -1484,8 +1489,7 @@ static int kfd_process_device_init_cwsr_dgpu(struct kfd_process_device *pdd)
{
struct kfd_node *dev = pdd->dev;
struct qcm_process_device *qpd = &pdd->qpd;
uint32_t flags = KFD_IOC_ALLOC_MEM_FLAGS_GTT
| KFD_IOC_ALLOC_MEM_FLAGS_NO_SUBSTITUTE
u32 flags = KFD_IOC_ALLOC_MEM_FLAGS_NO_SUBSTITUTE
| KFD_IOC_ALLOC_MEM_FLAGS_EXECUTABLE;
struct kgd_mem *mem;
void *kaddr;
@ -1494,7 +1498,12 @@ static int kfd_process_device_init_cwsr_dgpu(struct kfd_process_device *pdd)
if (!dev->kfd->cwsr_enabled || qpd->cwsr_kaddr || !qpd->cwsr_base)
return 0;
/* cwsr_base is only set for dGPU */
if (KFD_GC_VERSION(dev) >= IP_VERSION(9, 4, 2) && !dev->adev->apu_prefer_gtt)
flags |= KFD_IOC_ALLOC_MEM_FLAGS_VRAM;
else
flags |= KFD_IOC_ALLOC_MEM_FLAGS_GTT;
/* Allocate CWSR TBA/TMA buffers */
ret = kfd_process_alloc_gpuvm(pdd, qpd->cwsr_base,
KFD_CWSR_TBA_TMA_SIZE, flags, &mem, &kaddr);
if (ret)