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; };