diff options
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc')
5 files changed, 16 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c index 3b4d4d68359b..df787fcf8e86 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c @@ -998,8 +998,5 @@ void dcn30_prepare_bandwidth(struct dc *dc,  			dc->clk_mgr->funcs->set_max_memclk(dc->clk_mgr, dc->clk_mgr->bw_params->clk_table.entries[dc->clk_mgr->bw_params->clk_table.num_entries - 1].memclk_mhz);  	dcn20_prepare_bandwidth(dc, context); - -	dc_dmub_srv_p_state_delegate(dc, -		context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching, context);  } diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c index e4472c6be6c3..3fb4bcc34353 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c @@ -271,8 +271,7 @@ static void dccg32_set_dpstreamclk(  	dccg32_set_dtbclk_p_src(dccg, src, otg_inst);  	/* enabled to select one of the DTBCLKs for pipe */ -	switch (otg_inst) -	{ +	switch (dp_hpo_inst) {  	case 0:  		REG_UPDATE_2(DPSTREAMCLK_CNTL,  			     DPSTREAMCLK0_EN, diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c index 16f892125b6f..9d14045cccd6 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c @@ -1104,7 +1104,7 @@ unsigned int dcn32_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsign  			*k2_div = PIXEL_RATE_DIV_BY_2;  		else  			*k2_div = PIXEL_RATE_DIV_BY_4; -	} else if (dc_is_dp_signal(stream->signal) || dc_is_virtual_signal(stream->signal)) { +	} else if (dc_is_dp_signal(stream->signal)) {  		if (two_pix_per_container) {  			*k1_div = PIXEL_RATE_DIV_BY_1;  			*k2_div = PIXEL_RATE_DIV_BY_2; diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c index 74e50c09bb62..4b7abb4af623 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c @@ -1915,6 +1915,7 @@ int dcn32_populate_dml_pipes_from_context(  	bool subvp_in_use = false;  	uint8_t is_pipe_split_expected[MAX_PIPES] = {0};  	struct dc_crtc_timing *timing; +	bool vsr_odm_support = false;  	dcn20_populate_dml_pipes_from_context(dc, context, pipes, fast_validate); @@ -1932,12 +1933,15 @@ int dcn32_populate_dml_pipes_from_context(  		timing = &pipe->stream->timing;  		pipes[pipe_cnt].pipe.dest.odm_combine_policy = dm_odm_combine_policy_dal; +		vsr_odm_support = (res_ctx->pipe_ctx[i].stream->src.width >= 5120 && +				res_ctx->pipe_ctx[i].stream->src.width > res_ctx->pipe_ctx[i].stream->dst.width);  		if (context->stream_count == 1 &&  				context->stream_status[0].plane_count == 1 &&  				!dc_is_hdmi_signal(res_ctx->pipe_ctx[i].stream->signal) &&  				is_h_timing_divisible_by_2(res_ctx->pipe_ctx[i].stream) &&  				pipe->stream->timing.pix_clk_100hz * 100 > DCN3_2_VMIN_DISPCLK_HZ && -				dc->debug.enable_single_display_2to1_odm_policy) { +				dc->debug.enable_single_display_2to1_odm_policy && +				!vsr_odm_support) { //excluding 2to1 ODM combine on >= 5k vsr  			pipes[pipe_cnt].pipe.dest.odm_combine_policy = dm_odm_combine_policy_2to1;  		}  		pipe_cnt++; @@ -2182,6 +2186,7 @@ static bool dcn32_resource_construct(  	dc->caps.edp_dsc_support = true;  	dc->caps.extended_aux_timeout_support = true;  	dc->caps.dmcub_support = true; +	dc->caps.seamless_odm = true;  	/* Color pipeline capabilities */  	dc->caps.color.dpp.dcn_arch = 1; diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c b/drivers/gpu/drm/amd/display/dc/link/link_detection.c index 38216c789d77..f70025ef7b69 100644 --- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c +++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c @@ -855,6 +855,7 @@ static bool detect_link_and_local_sink(struct dc_link *link,  	struct dc_sink *prev_sink = NULL;  	struct dpcd_caps prev_dpcd_caps;  	enum dc_connection_type new_connection_type = dc_connection_none; +	enum dc_connection_type pre_connection_type = link->type;  	const uint32_t post_oui_delay = 30; // 30ms  	DC_LOGGER_INIT(link->ctx->logger); @@ -957,6 +958,8 @@ static bool detect_link_and_local_sink(struct dc_link *link,  			}  			if (!detect_dp(link, &sink_caps, reason)) { +				link->type = pre_connection_type; +  				if (prev_sink)  					dc_sink_release(prev_sink);  				return false; @@ -1244,11 +1247,16 @@ bool link_detect(struct dc_link *link, enum dc_detect_reason reason)  	bool is_delegated_to_mst_top_mgr = false;  	enum dc_connection_type pre_link_type = link->type; +	DC_LOGGER_INIT(link->ctx->logger); +  	is_local_sink_detect_success = detect_link_and_local_sink(link, reason);  	if (is_local_sink_detect_success && link->local_sink)  		verify_link_capability(link, link->local_sink, reason); +	DC_LOG_DC("%s: link_index=%d is_local_sink_detect_success=%d pre_link_type=%d link_type=%d\n", __func__, +				link->link_index, is_local_sink_detect_success, pre_link_type, link->type); +  	if (is_local_sink_detect_success && link->local_sink &&  			dc_is_dp_signal(link->local_sink->sink_signal) &&  			link->dpcd_caps.is_mst_capable) |