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 9c8601f4d16be..db9dce8fa8708 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
@@ -1111,10 +1111,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);
@@ -1132,6 +1142,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)
@@ -1148,4 +1163,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 95e770b69a48b..506335b56c3b8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h
@@ -170,6 +170,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