summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMukul Joshi <mukul.joshi@amd.com>2026-04-27 19:31:03 -0400
committerAlex Deucher <alexander.deucher@amd.com>2026-09-02 15:24:07 -0400
commit2b046bf04a9f528e93fd57f55fe4ff540fac83a0 (patch)
tree74b4ae88f5c355686994b58c2b9c2a0c0d81d209 /drivers
parent37195ac8bd37fd3677346918cdded37959ceede3 (diff)
downloadlinux-next-2b046bf04a9f528e93fd57f55fe4ff540fac83a0.tar.gz
linux-next-2b046bf04a9f528e93fd57f55fe4ff540fac83a0.zip
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 <mukul.joshi@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c18
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h3
2 files changed, 20 insertions, 1 deletions
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);