mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
drm/amd/display: Fix mismatched unlock for DMUB HW lock in HWSS fast path
[Why] The evaluation for whether we need to use the DMUB HW lock isn't the same as whether we need to unlock which results in a hang when the fast path is used for ASIC without FAMS support. [How] Store a flag that indicates whether we should use the lock and use that same flag to specify whether unlocking is needed. Reviewed-by: Swapnil Patel <swapnil.patel@amd.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Chenyu Chen <chen-yu.chen@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
2c6592221e
commit
af3303970d
|
|
@ -741,6 +741,7 @@ void hwss_build_fast_sequence(struct dc *dc,
|
|||
struct dce_hwseq *hws = dc->hwseq;
|
||||
struct pipe_ctx *current_pipe = NULL;
|
||||
struct pipe_ctx *current_mpc_pipe = NULL;
|
||||
bool is_dmub_lock_required = false;
|
||||
unsigned int i = 0;
|
||||
|
||||
*num_steps = 0; // Initialize to 0
|
||||
|
|
@ -763,11 +764,12 @@ void hwss_build_fast_sequence(struct dc *dc,
|
|||
(*num_steps)++;
|
||||
}
|
||||
if (dc->hwss.dmub_hw_control_lock_fast) {
|
||||
is_dmub_lock_required = dc_state_is_fams2_in_use(dc, context) ||
|
||||
dmub_hw_lock_mgr_does_link_require_lock(dc, stream->link);
|
||||
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.dc = dc;
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.lock = true;
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.is_required =
|
||||
dc_state_is_fams2_in_use(dc, context) ||
|
||||
dmub_hw_lock_mgr_does_link_require_lock(dc, stream->link);
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.is_required = is_dmub_lock_required;
|
||||
block_sequence[*num_steps].func = DMUB_HW_CONTROL_LOCK_FAST;
|
||||
(*num_steps)++;
|
||||
}
|
||||
|
|
@ -906,7 +908,7 @@ void hwss_build_fast_sequence(struct dc *dc,
|
|||
if (dc->hwss.dmub_hw_control_lock_fast) {
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.dc = dc;
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.lock = false;
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.is_required = dc_state_is_fams2_in_use(dc, context);
|
||||
block_sequence[*num_steps].params.dmub_hw_control_lock_fast_params.is_required = is_dmub_lock_required;
|
||||
block_sequence[*num_steps].func = DMUB_HW_CONTROL_LOCK_FAST;
|
||||
(*num_steps)++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user