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

Commit b73a22d3 authored by Harry Wentland's avatar Harry Wentland Committed by Alex Deucher
Browse files

drm/amd/display: Roll core_sink into dc_sink

parent 89899039
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -562,9 +562,9 @@ struct amdgpu_connector {
	int num_modes;
	/* The 'old' sink - before an HPD.
	 * The 'current' sink is in dc_link->sink. */
	const struct dc_sink *dc_sink;
	struct dc_sink *dc_sink;
	struct dc_link *dc_link;
	const struct dc_sink *dc_em_sink;
	struct dc_sink *dc_em_sink;
	const struct dc_stream *stream;
	void *con_priv;
	bool dac_load_detect;
+1 −1
Original line number Diff line number Diff line
@@ -697,7 +697,7 @@ void amdgpu_dm_update_connector_after_detect(
{
	struct drm_connector *connector = &aconnector->base;
	struct drm_device *dev = connector->dev;
	const struct dc_sink *sink;
	struct dc_sink *sink;

	/* MST handled by drm_mst framework */
	if (aconnector->mst_mgr.mst_state == true)
+2 −2
Original line number Diff line number Diff line
@@ -1266,7 +1266,7 @@ int amdgpu_dm_connector_mode_valid(
		struct drm_display_mode *mode)
{
	int result = MODE_ERROR;
	const struct dc_sink *dc_sink;
	struct dc_sink *dc_sink;
	struct amdgpu_device *adev = connector->dev->dev_private;
	struct dc_validation_set val_set = { 0 };
	/* TODO: Unhardcode stream count */
@@ -1535,7 +1535,7 @@ int dm_create_validation_set_for_connector(struct drm_connector *connector,
		struct drm_display_mode *mode, struct dc_validation_set *val_set)
{
	int result = MODE_ERROR;
	const struct dc_sink *dc_sink =
	struct dc_sink *dc_sink =
			to_amdgpu_connector(connector)->dc_sink;
	/* TODO: Unhardcode stream count */
	struct dc_stream *stream;
+2 −2
Original line number Diff line number Diff line
@@ -939,7 +939,7 @@ static bool dc_commit_context_no_check(struct dc *dc, struct validate_context *c
	program_timing_sync(core_dc, context);

	for (i = 0; i < context->stream_count; i++) {
		const struct core_sink *sink = context->streams[i]->sink;
		const struct dc_sink *sink = context->streams[i]->sink;

		for (j = 0; j < context->stream_status[i].surface_count; j++) {
			const struct dc_surface *surface =
@@ -1984,7 +1984,7 @@ void dc_link_set_sink(struct dc_link *link, struct dc_sink *sink)
	}
}

void dc_link_remove_remote_sink(struct dc_link *link, const struct dc_sink *sink)
void dc_link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink)
{
	int i;

+29 −31
Original line number Diff line number Diff line
@@ -541,8 +541,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
	struct audio_support *aud_support = &link->dc->res_pool->audio_support;
	enum dc_edid_status edid_status;
	struct dc_context *dc_ctx = link->ctx;
	struct dc_sink *dc_sink;
	struct core_sink *sink = NULL;
	struct dc_sink *sink;
	enum dc_connection_type new_connection_type = dc_connection_none;

	if (link->connector_signal == SIGNAL_TYPE_VIRTUAL)
@@ -637,22 +636,21 @@ bool dc_link_detect(struct dc_link *link, bool boot)
		sink_init_data.link = link;
		sink_init_data.sink_signal = sink_caps.signal;

		dc_sink = dc_sink_create(&sink_init_data);
		if (!dc_sink) {
		sink = dc_sink_create(&sink_init_data);
		if (!sink) {
			DC_ERROR("Failed to create sink!\n");
			return false;
		}

		dc_sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
		dc_sink->converter_disable_audio = converter_disable_audio;
		sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
		sink->converter_disable_audio = converter_disable_audio;

		sink = DC_SINK_TO_CORE(dc_sink);
		link->local_sink = &sink->public;
		link->local_sink = sink;

		edid_status = dm_helpers_read_local_edid(
				link->ctx,
				link,
				&sink->public);
				sink);

		switch (edid_status) {
		case EDID_BAD_CHECKSUM:
@@ -669,16 +667,16 @@ bool dc_link_detect(struct dc_link *link, bool boot)
		}

		/* HDMI-DVI Dongle */
		if (dc_sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
				!dc_sink->edid_caps.edid_hdmi)
			dc_sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
		if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
				!sink->edid_caps.edid_hdmi)
			sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;

		/* Connectivity log: detection */
		for (i = 0; i < sink->public.dc_edid.length / EDID_BLOCK_SIZE; i++) {
		for (i = 0; i < sink->dc_edid.length / EDID_BLOCK_SIZE; i++) {
			CONN_DATA_DETECT(link,
					&sink->public.dc_edid.raw_edid[i * EDID_BLOCK_SIZE],
					&sink->dc_edid.raw_edid[i * EDID_BLOCK_SIZE],
					EDID_BLOCK_SIZE,
					"%s: [Block %d] ", sink->public.edid_caps.display_name, i);
					"%s: [Block %d] ", sink->edid_caps.display_name, i);
		}

		dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER,
@@ -692,16 +690,16 @@ bool dc_link_detect(struct dc_link *link, bool boot)
			"speaker_flag = %d, "
			"audio_mode_count = %d\n",
			__func__,
			sink->public.edid_caps.manufacturer_id,
			sink->public.edid_caps.product_id,
			sink->public.edid_caps.serial_number,
			sink->public.edid_caps.manufacture_week,
			sink->public.edid_caps.manufacture_year,
			sink->public.edid_caps.display_name,
			sink->public.edid_caps.speaker_flags,
			sink->public.edid_caps.audio_mode_count);

		for (i = 0; i < sink->public.edid_caps.audio_mode_count; i++) {
			sink->edid_caps.manufacturer_id,
			sink->edid_caps.product_id,
			sink->edid_caps.serial_number,
			sink->edid_caps.manufacture_week,
			sink->edid_caps.manufacture_year,
			sink->edid_caps.display_name,
			sink->edid_caps.speaker_flags,
			sink->edid_caps.audio_mode_count);

		for (i = 0; i < sink->edid_caps.audio_mode_count; i++) {
			dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER,
				"%s: mode number = %d, "
				"format_code = %d, "
@@ -710,10 +708,10 @@ bool dc_link_detect(struct dc_link *link, bool boot)
				"sample_size = %d\n",
				__func__,
				i,
				sink->public.edid_caps.audio_modes[i].format_code,
				sink->public.edid_caps.audio_modes[i].channel_count,
				sink->public.edid_caps.audio_modes[i].sample_rate,
				sink->public.edid_caps.audio_modes[i].sample_size);
				sink->edid_caps.audio_modes[i].format_code,
				sink->edid_caps.audio_modes[i].channel_count,
				sink->edid_caps.audio_modes[i].sample_rate,
				sink->edid_caps.audio_modes[i].sample_size);
		}

	} else {
@@ -732,7 +730,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
	}

	LINK_INFO("link=%d, dc_sink_in=%p is now %s\n",
		link->link_index, &sink->public,
		link->link_index, sink,
		(sink_caps.signal == SIGNAL_TYPE_NONE ?
			"Disconnected":"Connected"));

@@ -1347,7 +1345,7 @@ enum dc_status dc_link_validate_mode_timing(
		struct dc_link *link,
		const struct dc_crtc_timing *timing)
{
	uint32_t max_pix_clk = stream->sink->public.dongle_max_pix_clk;
	uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk;

	/* A hack to avoid failing any modes for EDID override feature on
	 * topology change such as lower quality cable for DP or different dongle
Loading