diff options
| author | Prike Liang <Prike.Liang@amd.com> | 2026-10-14 13:45:38 +0800 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2026-10-27 13:58:55 -0400 |
| commit | 2dd4abe27a40b48a521b0536044949eaaf9fed3b (patch) | |
| tree | 62c72d21c175fb9915184c599a56dbe372085472 | |
| parent | 7ca6f3359b557a267c7b07a2fd748b1473395e10 (diff) | |
| download | linux-next-2dd4abe27a40b48a521b0536044949eaaf9fed3b.tar.gz linux-next-2dd4abe27a40b48a521b0536044949eaaf9fed3b.zip | |
drm/amdgpu: drop the unused firmware loading mutex
adev->firmware.mutex was added to serialize amdgpu_ucode_init_bo()
between the PSP and powerplay firmware loaders. Powerplay no longer loads
firmware through it, so the mutex no longer protects anything: its only
users are psp_hw_init() and psp_resume(), which the IP init, resume and
reset sequences already serialize.
psp_hw_init() still allocates and reserves the PSP ring, TMR and TA
buffers with it held, and GPU recovery takes the same mutex in
psp_resume() while holding reset_domain->sem, so lockdep reports:
&adev->firmware.mutex --> &userq_mgr->userq_mutex --> &reset_domain->sem
Remove the mutex instead of keeping a lock that recovery shares with an
allocating path.
Signed-off-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 9 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 1 |
3 files changed, 0 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index c65bc575a57a..e9caffe2036f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3824,7 +3824,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, /* mutex initialization are all done here so we * can recall function without having locking issues */ - mutex_init(&adev->firmware.mutex); mutex_init(&adev->pm.mutex); mutex_init(&adev->gfx.gpu_clock_mutex); mutex_init(&adev->srbm_mutex); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index 36bc4b431dd5..01dca6858833 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -4157,8 +4157,6 @@ static int psp_hw_init(struct amdgpu_ip_block *ip_block) int ret; struct amdgpu_device *adev = ip_block->adev; - mutex_lock(&adev->firmware.mutex); - ret = amdgpu_ucode_init_bo(adev); if (ret) goto failed; @@ -4169,12 +4167,10 @@ static int psp_hw_init(struct amdgpu_ip_block *ip_block) goto failed; } - mutex_unlock(&adev->firmware.mutex); return 0; failed: adev->firmware.load_type = AMDGPU_FW_LOAD_DIRECT; - mutex_unlock(&adev->firmware.mutex); return -EINVAL; } @@ -4282,8 +4278,6 @@ static int psp_resume(struct amdgpu_ip_block *ip_block) } } - mutex_lock(&adev->firmware.mutex); - ret = amdgpu_ucode_init_bo(adev); if (ret) goto failed; @@ -4345,13 +4339,10 @@ static int psp_resume(struct amdgpu_ip_block *ip_block) "SECUREDISPLAY: Failed to initialize SECUREDISPLAY\n"); } - mutex_unlock(&adev->firmware.mutex); - return 0; failed: dev_err(adev->dev, "PSP resume failed\n"); - mutex_unlock(&adev->firmware.mutex); return ret; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h index 35277b240f25..7c809692807f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h @@ -612,7 +612,6 @@ struct amdgpu_firmware { /* firmwares are loaded by psp instead of smu from vega10 */ const struct amdgpu_psp_funcs *funcs; struct amdgpu_bo *rbuf; - struct mutex mutex; /* gpu info firmware data pointer */ const struct firmware *gpu_info_fw; |
