drm/amd/display: Switch DMCUB notify idle command to NO_WAIT
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Tue, 12 Dec 2023 17:10:49 +0000 (12:10 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 3 Jan 2024 15:47:05 +0000 (10:47 -0500)
[Why]
Race condition between notification of driver idle and the command being
processed. We could theoretically enter idle between the submission and
the wait for idle that occurs after.

[How]
Switch the notification to NO_WAIT to avoid the RPTR access.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Sung joon Kim <sungjoon.kim@amd.com>
Acked-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c

index 7724dcadecba5394a258f1ac0b870a4b8bbc3b53..dadeaa9c92dd528ac9455ca8bc7b981faa385e8b 100644 (file)
@@ -1209,7 +1209,8 @@ static void dc_dmub_srv_notify_idle(const struct dc *dc, bool allow_idle)
        }
 
        /* NOTE: This does not use the "wake" interface since this is part of the wake path. */
-       dm_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
+       /* We also do not perform a wait since DMCUB could enter idle after the notification. */
+       dm_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_NO_WAIT);
 }
 
 static void dc_dmub_srv_exit_low_power_state(const struct dc *dc)