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 <[email protected]>
Reviewed-by: Vladimir Indic <[email protected]>
Reviewed-by: Harish Kasiviswanathan <[email protected]>
Reviewed-by: Philip Yang <[email protected]>
---
 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index 08f6db864bf9..8e701dcda8ec 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -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;
@@ -1490,8 +1495,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;
@@ -1500,7 +1504,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)
-- 
2.43.0

Reply via email to