diff options
author | Matt Coffin <mcoffin13@gmail.com> | 2020-02-27 02:16:14 +0300 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2020-02-29 00:59:23 +0300 |
commit | eb696d041fa5e1bc3be90881e1432a9bb169b771 (patch) | |
tree | 6257790df838978072e35a6c196ba7e4e1bf4fbd /drivers/gpu/drm/amd/powerplay/smu_v12_0.c | |
parent | ae458c7b9dcc9284eec81c86ef0deab5a087d136 (diff) | |
download | linux-eb696d041fa5e1bc3be90881e1432a9bb169b771.tar.xz |
drm/amdgpu/smu: Add message sending lock
This adds a message lock to the smu_send_smc_msg* implementations to
protect against concurrent access to the mmu registers used to
communicate with the SMU
v2: Implement for smu_v12_0 as well
v3: Add mutex_init for message_lock
Signed-off-by: Matt Coffin <mcoffin13@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay/smu_v12_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smu_v12_0.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c index c18b08c8cb9a..93b85585fd26 100644 --- a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c +++ b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c @@ -88,11 +88,12 @@ smu_v12_0_send_msg_with_param(struct smu_context *smu, if (index < 0) return index; + mutex_lock(&smu->message_lock); ret = smu_v12_0_wait_for_response(smu); if (ret) { pr_err("Msg issuing pre-check failed and " "SMU may be not in the right state!\n"); - return ret; + goto out; } WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); @@ -105,17 +106,18 @@ smu_v12_0_send_msg_with_param(struct smu_context *smu, if (ret) { pr_err("Failed to send message 0x%x, response 0x%x param 0x%x\n", index, ret, param); - return ret; + goto out; } if (read_arg) { ret = smu_v12_0_read_arg(smu, read_arg); if (ret) { pr_err("Failed to read message arg 0x%x, response 0x%x param 0x%x\n", index, ret, param); - return ret; + goto out; } } - +out: + mutex_unlock(&smu->message_lock); return ret; } |