From: Mukul Joshi <[email protected]>

Initialize a NPA VM for managing NPA addresses on the exporter
GPU.

Signed-off-by: Mukul Joshi <[email protected]>
Reviewed-by: Felix Kuehling <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c | 18 +++++++++++++++++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h |  3 +++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
index 4582299d96c4f..9d550c21f69aa 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
@@ -1156,10 +1156,20 @@ int amdgpu_ualink_manager_start(struct amdgpu_device 
*adev)
 {
        int i, r;
 
+       r = amdgpu_vm_init(adev, &adev->ualink.npa_vm, 0);
+       if (r)
+               goto out;
+
+       /* For using CPU for page table updates. */
+       r = amdgpu_vm_make_compute(adev, &adev->ualink.npa_vm);
+       if (r)
+               goto uninit_vm;
+
        adev->ualink.npa_wq = alloc_workqueue("NPA WQ", WQ_UNBOUND, 0);
        if (unlikely(!adev->ualink.npa_wq)) {
                dev_err(adev->dev, "Failed to allocate NPA WQ\n");
-               return -ENOMEM;
+               r = -ENOMEM;
+               goto uninit_vm;
        }
 
        xa_init_flags(&adev->ualink.exp_xa, XA_FLAGS_LOCK_BH);
@@ -1177,6 +1187,11 @@ int amdgpu_ualink_manager_start(struct amdgpu_device 
*adev)
        amdgpu_ualink_npa_mm_init(adev);
 
        return 0;
+
+uninit_vm:
+       amdgpu_vm_fini(adev, &adev->ualink.npa_vm);
+out:
+       return r;
 }
 
 void amdgpu_ualink_manager_stop(struct amdgpu_device *adev)
@@ -1193,4 +1208,5 @@ void amdgpu_ualink_manager_stop(struct amdgpu_device 
*adev)
                mutex_destroy(&adev->ualink.conn_state[i].lock);
 
        destroy_workqueue(adev->ualink.npa_wq);
+       amdgpu_vm_fini(adev, &adev->ualink.npa_vm);
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h
index a056d89d163ba..c32b4fd3c3220 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h
@@ -174,6 +174,9 @@ struct amdgpu_ualink_mgr {
 
        /* Memory-manager for managing NPA address space. */
        struct amdgpu_ualink_npa_mm npa_mm;
+
+       /* NPA-VM used on the exporter.*/
+       struct amdgpu_vm npa_vm;
 };
 
 int amdgpu_ualink_sysfs_init(struct amdgpu_device *adev);
-- 
2.55.0

Reply via email to