Commit 6fce5bce authored by Eric Yang's avatar Eric Yang Committed by Alex Deucher
Browse files

drm/amd/display: move edp sink present detection to hw init



[Why]
At SW init, we may not be ready to do detect eDP sink.

Signed-off-by: default avatarEric Yang <Eric.Yang2@amd.com>
Reviewed-by: default avatarJun Lei <Jun.Lei@amd.com>
Acked-by: default avatarAnson Jacob <Anson.Jacob@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b14e4f20
Loading
Loading
Loading
Loading
+22 −18
Original line number Diff line number Diff line
@@ -205,27 +205,9 @@ static bool create_links(
		link = link_create(&link_init_params);

		if (link) {
			bool should_destory_link = false;

			if (link->connector_signal == SIGNAL_TYPE_EDP) {
				if (dc->config.edp_not_connected) {
					if (!IS_DIAG_DC(dc->ctx->dce_environment))
						should_destory_link = true;
				} else {
					enum dc_connection_type type;
					dc_link_detect_sink(link, &type);
					if (type == dc_connection_none)
						should_destory_link = true;
				}
			}

			if (dc->config.force_enum_edp || !should_destory_link) {
				dc->links[dc->link_count] = link;
				link->dc = dc;
				++dc->link_count;
			} else {
				link_destroy(&link);
			}
		}
	}

@@ -1016,8 +998,30 @@ struct dc *dc_create(const struct dc_init_data *init_params)
	return NULL;
}

static void detect_edp_presence(struct dc *dc)
{
	struct dc_link *edp_link = get_edp_link(dc);
	bool edp_sink_present = true;

	if (!edp_link)
		return;

	if (dc->config.edp_not_connected) {
			edp_sink_present = false;
	} else {
		enum dc_connection_type type;
		dc_link_detect_sink(edp_link, &type);
		if (type == dc_connection_none)
			edp_sink_present = false;
	}

	edp_link->edp_sink_present = edp_sink_present;
}

void dc_hardware_init(struct dc *dc)
{

	detect_edp_presence(dc);
	if (dc->ctx->dce_environment != DCE_ENV_VIRTUAL_HW)
		dc->hwss.init_hw(dc);
}
+2 −0
Original line number Diff line number Diff line
@@ -103,6 +103,8 @@ struct dc_link {
	bool lttpr_non_transparent_mode;
	bool is_internal_display;

	bool edp_sink_present;

	/* caps is the same as reported_link_cap. link_traing use
	 * reported_link_cap. Will clean up.  TODO
	 */