mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-05 21:17:44 -05:00
drm/amdgpu/display/mst: update mst_mgr relevant variable when long HPD
[Why & How]
Now the vc_start_slot is controlled at drm side. When we
service a long HPD, we still need to run
dm_helpers_dp_mst_write_payload_allocation_table() to update
drm mst_mgr's relevant variable. Otherwise, on the next plug-in,
payload will get assigned with a wrong start slot.
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2171
Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Fixes: 4d07b0bc40 ("drm/display/dp_mst: Move all payload info into the atomic state")
Cc: stable@vger.kernel.org # 6.1
Acked-by: Harry Wentland <harry.wentland@amd.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Tested-by: Didier Raboud <odyx@debian.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -3995,10 +3995,13 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
||||
struct fixed31_32 avg_time_slots_per_mtp = dc_fixpt_from_int(0);
|
||||
int i;
|
||||
bool mst_mode = (link->type == dc_connection_mst_branch);
|
||||
/* adjust for drm changes*/
|
||||
bool update_drm_mst_state = true;
|
||||
const struct link_hwss *link_hwss = get_link_hwss(link, &pipe_ctx->link_res);
|
||||
const struct dc_link_settings empty_link_settings = {0};
|
||||
DC_LOGGER_INIT(link->ctx->logger);
|
||||
|
||||
|
||||
/* deallocate_mst_payload is called before disable link. When mode or
|
||||
* disable/enable monitor, new stream is created which is not in link
|
||||
* stream[] yet. For this, payload is not allocated yet, so de-alloc
|
||||
@@ -4014,7 +4017,7 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
||||
&empty_link_settings,
|
||||
avg_time_slots_per_mtp);
|
||||
|
||||
if (mst_mode) {
|
||||
if (mst_mode || update_drm_mst_state) {
|
||||
/* when link is in mst mode, reply on mst manager to remove
|
||||
* payload
|
||||
*/
|
||||
@@ -4077,11 +4080,18 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
||||
stream->ctx,
|
||||
stream);
|
||||
|
||||
if (!update_drm_mst_state)
|
||||
dm_helpers_dp_mst_send_payload_allocation(
|
||||
stream->ctx,
|
||||
stream,
|
||||
false);
|
||||
}
|
||||
|
||||
if (update_drm_mst_state)
|
||||
dm_helpers_dp_mst_send_payload_allocation(
|
||||
stream->ctx,
|
||||
stream,
|
||||
false);
|
||||
}
|
||||
|
||||
return DC_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user