From 42cb7c53fa2894a8592fa75fef34cf404a9f0945 Mon Sep 17 00:00:00 2001 From: Mukul Joshi Date: Tue, 2 Jun 2026 19:09:25 -0400 Subject: [PATCH] drm/amdgpu: Create a drm client for UALink NPA BOs Create a drm client for storing the GEM handles corresponding to NPA BOs. We always want to keep one GEM handle alive for the NPA BOs during the lifetime of the BO. Signed-off-by: Mukul Joshi Reviewed-by: Felix Kuehling Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c | 28 ++++++++++++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c index 162187101ab2..171b442b46ae 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c @@ -31,6 +31,27 @@ #include #include +static const struct drm_client_funcs ualink_client_funcs = { + .unregister = drm_client_release, +}; + +static int amdgpu_ualink_drm_client_create(struct amdgpu_device *adev) +{ + int ret; + + ret = drm_client_init(&adev->ddev, &adev->ualink.client, "ualink", + &ualink_client_funcs); + if (ret) { + dev_err(adev->dev, "Failed to init UALink DRM client: %d\n", + ret); + return ret; + } + + drm_client_register(&adev->ualink.client); + + return 0; +} + int amdgpu_ualink_init(struct amdgpu_device *adev) { int r; @@ -62,6 +83,13 @@ int amdgpu_ualink_init(struct amdgpu_device *adev) return r; } + r = amdgpu_ualink_drm_client_create(adev); + if (r) { + dev_err(adev->dev, "Failed to create UALink DRM client: %d\n", + r); + return r; + } + r = amdgpu_ualink_init_interrupt(adev); if (r) { dev_err(adev->dev, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h index 3fde1b80c3e9..cb971ac8bdd9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h @@ -186,6 +186,9 @@ struct amdgpu_ualink_mgr { /* NPA-VM used on the exporter.*/ struct amdgpu_vm npa_vm; + /* DRM client for UALink to manage GEM handles for NPA BOs */ + struct drm_client_dev client; + /* Sequence number to track the need for TLB flushes */ atomic64_t last_flushed_tlb_seq; };