From 2b046bf04a9f528e93fd57f55fe4ff540fac83a0 Mon Sep 17 00:00:00 2001 From: Mukul Joshi Date: Mon, 27 Apr 2026 19:31:03 -0400 Subject: [PATCH] drm/amdgpu: Initialize VM for NPA addr management Initialize a NPA VM for managing NPA addresses on the exporter GPU. Signed-off-by: Mukul Joshi Reviewed-by: Felix Kuehling Signed-off-by: Alex Deucher --- 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 4582299d96c4..9d550c21f69a 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 a056d89d163b..c32b4fd3c322 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);