Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f358b39d authored by Jerry (Fangzhi) Zuo's avatar Jerry (Fangzhi) Zuo Committed by Alex Deucher
Browse files

drm/amd/display: Fix Vega10 black screen after mode change



[Why]
The sequence is slightly changed when bring .set_bandwidth out
from the end of programming backend to the end of programming
surface. Vega10 doesn't like to get clocks updated if
stream_count is zero in the current context (Atomic Reset).

[How]
Do not update clocks if no stream is showing up in the context.

Fixes 1b2b130192 "dc: Remove 300Mhz minimum disp clk limit."

Signed-off-by: default avatarJerry (Fangzhi) Zuo <Jerry.Zuo@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 65c78961
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2552,7 +2552,7 @@ static void pplib_apply_display_requirements(
	dc->prev_display_config = *pp_display_cfg;
}

static void dce110_set_bandwidth(
void dce110_set_bandwidth(
		struct dc *dc,
		struct dc_state *context,
		bool decrease_allowed)
+5 −0
Original line number Diff line number Diff line
@@ -68,6 +68,11 @@ void dce110_fill_display_configs(
	const struct dc_state *context,
	struct dm_pp_display_configuration *pp_display_cfg);

void dce110_set_bandwidth(
		struct dc *dc,
		struct dc_state *context,
		bool decrease_allowed);

uint32_t dce110_get_min_vblank_time_us(const struct dc_state *context);

void dp_receiver_power_ctrl(struct dc_link *link, bool on);
+10 −0
Original line number Diff line number Diff line
@@ -244,7 +244,16 @@ static void dce120_update_dchub(
	dh_data->dchub_info_valid = false;
}

static void dce120_set_bandwidth(
		struct dc *dc,
		struct dc_state *context,
		bool decrease_allowed)
{
	if (context->stream_count <= 0)
		return;

	dce110_set_bandwidth(dc, context, decrease_allowed);
}

void dce120_hw_sequencer_construct(struct dc *dc)
{
@@ -254,5 +263,6 @@ void dce120_hw_sequencer_construct(struct dc *dc)
	dce110_hw_sequencer_construct(dc);
	dc->hwss.enable_display_power_gating = dce120_enable_display_power_gating;
	dc->hwss.update_dchub = dce120_update_dchub;
	dc->hwss.set_bandwidth = dce120_set_bandwidth;
}