FAILED: patch "[PATCH] drm/amd/display: Update phantom pipe enable / disable" failed to apply to 6.6-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x ca8179ba11f211cdcb6c12ddd83814eaec999738
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024021958-alabaster-zipping-c367@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
ca8179ba11f2 ("drm/amd/display: Update phantom pipe enable / disable sequence") 09a4ec5da92c ("drm/amd/display: Refactor dc_state interface")abd26a3252cb ("drm/amd/display: Add dml2 copy functions")ed6e2782e974 ("drm/amd/display: For cursor P-State allow for SubVP")f583db812bc9 ("drm/amd/display: Update FAMS sequence for DCN30 & DCN32")ddd5298c63e4 ("drm/amd/display: Update cursor limits based on SW cursor fallback limits") 7966f319c66d ("drm/amd/display: Introduce DML2")6e2c4941ce0c ("drm/amd/display: Move dml code under CONFIG_DRM_AMD_DC_FP guard") 13c0e836316a ("drm/amd/display: Adjust code style for hw_sequencer.h")1288d7020809 ("drm/amd/display: Improve x86 and dmub ips handshake")ad3b63a0d298 ("drm/amd/display: add new windowed mpo odm minimal transition sequence") 177ea58bef72 ("drm/amd/display: reset stream slice count for new ODM policy")c0f8b83188c7 ("drm/amd/display: disable IPS")93a66cef607c ("drm/amd/display: Add IPS control flag")dc01c4b79bfe ("drm/amd/display: Update driver and IPS interop")83b5b7bb8673 ("drm/amd/display: minior logging improvements")15c6798ae26d ("drm/amd/display: add seamless pipe topology transition check")c06ef68a7946 ("drm/amd/display: Add check for vrr_active_fixed")c51d87202d1f ("drm/amd/display: do not attempt ODM power optimization if minimal transition doesn't exist") a4246c635166 ("drm/amd/display: fix the white screen issue when >= 64GB DRAM")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ca8179ba11f211cdcb6c12ddd83814eaec999738 Mon Sep 17 00:00:00 2001
From: Alvin Lee <[email protected]>
Date: Fri, 26 Jan 2024 16:47:20 -0500
Subject: [PATCH] drm/amd/display: Update phantom pipe enable / disable
sequence
Previously we would call apply_ctx_to_hw to enable and disable phantom pipes. However, apply_ctx_to_hw can potentially update non-phantom pipes as well which is undesired. Instead of calling apply_ctx_to_hw as a whole, call the relevant helpers for each phantom pipe when enabling / disabling which will avoid us modifying hardware state for non-phantom pipes unknowingly.
The use case is for an FRL display where FRL_Update is requested by the display. In this case link_state_valid flag is cleared in a passive callback thread and should be handled in the next stream / link update. However, due to the call to apply_ctx_to_hw for the phantom pipes during a flip, the main pipes were modified outside of the desired sequence (driver does not handle link_state_valid = 0 on flips).
drivers/gpu/drm/amd/display/dc/core/dc.c +3 -1
@@ -3817,7 +3817,9 @@ static void commit_planes_for_stream(struct dc *dc,* programming has completed (we turn on phantom OTG in order * to complete the plane disable for phantom pipes). */ - dc->hwss.apply_ctx_to_hw (dc, context); + +if (dc->hwss.disable_phantom_streams) + dc->hwss.disable_phantom_streams (dc, context); }if (update_type !=UPDATE_TYPE_FAST )
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c +2 -2
@@ -1476,7 +1476,7 @@ static enum dc_status dce110_enable_stream_timing(return DC_OK ; } -static enum dc_status apply_single_controller_ctx_to_hw ( +enum dc_status dce110_apply_single_controller_ctx_to_hw (struct pipe_ctx *pipe_ctx,struct dc_state *context,struct dc *dc)
@@ -2302,7 +2302,7 @@ enum dc_status dce110_apply_ctx_to_hw(if (pipe_ctx->top_pipe || pipe_ctx->prev_odm_pipe)continue ; - status =apply_single_controller_ctx_to_hw ( + status =dce110_apply_single_controller_ctx_to_hw ( pipe_ctx, context, dc);
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.h +4 -0
@@ -39,6 +39,10 @@ enum dc_status dce110_apply_ctx_to_hw(struct dc *dc, struct dc_state *context); +enum dc_status dce110_apply_single_controller_ctx_to_hw ( +struct pipe_ctx *pipe_ctx, +struct dc_state *context, +struct dc *dc);void dce110_enable_stream (struct pipe_ctx *pipe_ctx);
drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c +1 -1
@@ -2561,7 +2561,7 @@ void dcn20_setup_vupdate_interrupt(struct dc *dc, struct pipe_ctx *pipe_ctx) tg->funcs->setup_vertical_interrupt2 (tg, start_line); } -static void dcn20_reset_back_end_for_pipe ( +void dcn20_reset_back_end_for_pipe (struct dc *dc,struct pipe_ctx *pipe_ctx,struct dc_state *context)
drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.h +4 -0
@@ -84,6 +84,10 @@ enum dc_status dcn20_enable_stream_timing(void dcn20_disable_stream_gating (struct dc *dc,struct pipe_ctx *pipe_ctx);void dcn20_enable_stream_gating (struct dc *dc,struct pipe_ctx *pipe_ctx);void dcn20_setup_vupdate_interrupt (struct dc *dc,struct pipe_ctx *pipe_ctx); +void dcn20_reset_back_end_for_pipe ( +struct dc *dc, +struct pipe_ctx *pipe_ctx, +struct dc_state *context);void dcn20_init_blank (struct dc *dc,struct timing_generator *tg);
drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c +66 -8
91 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.h +2 -0
@@ -111,6 +111,8 @@ void dcn32_update_dsc_pg(struct dc *dc,void dcn32_enable_phantom_streams (struct dc *dc,struct dc_state *context); +void dcn32_disable_phantom_streams (struct dc *dc,struct dc_state *context); +void dcn32_init_blank (struct dc *dc,struct timing_generator *tg);
drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_init.c +3 -0
@@ -109,6 +109,7 @@ static const struct hw_sequencer_funcs dcn32_funcs = { .get_dcc_en_bits = dcn10_get_dcc_en_bits, .commit_subvp_config = dcn32_commit_subvp_config, .enable_phantom_streams = dcn32_enable_phantom_streams, + .disable_phantom_streams = dcn32_disable_phantom_streams, .subvp_pipe_control_lock = dcn32_subvp_pipe_control_lock, .update_visual_confirm_color = dcn10_update_visual_confirm_color, .subvp_pipe_control_lock_fast = dcn32_subvp_pipe_control_lock_fast,
@@ -159,6 +160,8 @@ static const struct hwseq_private_funcs dcn32_private_funcs = { .set_pixels_per_cycle = dcn32_set_pixels_per_cycle, .resync_fifo_dccg_dio = dcn32_resync_fifo_dccg_dio, .is_dp_dig_pixel_rate_div_policy = dcn32_is_dp_dig_pixel_rate_div_policy, + .apply_single_controller_ctx_to_hw = dce110_apply_single_controller_ctx_to_hw, + .reset_back_end_for_pipe = dcn20_reset_back_end_for_pipe, };void dcn32_hw_sequencer_init_functions (struct dc *dc)
drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer.h +1 -0
@@ -379,6 +379,7 @@ struct hw_sequencer_funcs { struct dc_cursor_attributes *cursor_attr);void (*commit_subvp_config)(struct dc *dc,struct dc_state *context);void (*enable_phantom_streams)(struct dc *dc,struct dc_state *context); +void (*disable_phantom_streams)(struct dc *dc,struct dc_state *context); void (*subvp_pipe_control_lock)(struct dc *dc, struct dc_state *context, bool lock,
drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer_private.h +7 -0
@@ -165,8 +165,15 @@ struct hwseq_private_funcs {void (*set_pixels_per_cycle)(struct pipe_ctx *pipe_ctx);void (*resync_fifo_dccg_dio)(struct dce_hwseq *hws,struct dc *dc,struct dc_state *context); +enum dc_status (*apply_single_controller_ctx_to_hw)( +struct pipe_ctx *pipe_ctx, +struct dc_state *context, +struct dc *dc);bool (*is_dp_dig_pixel_rate_div_policy)(struct pipe_ctx *pipe_ctx);#endif +void (*reset_back_end_for_pipe)(struct dc *dc, +struct pipe_ctx *pipe_ctx, +struct dc_state *context); };struct dce_hwseq {