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

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

drm/amd/display: Cleanup MST non-atomic code workaround



[why]
It is not correct to touch aconnector within atomic_check.

[How]
It was added as workaround before, and no longer needed.

Signed-off-by: default avatarJerry (Fangzhi) Zuo <Jerry.Zuo@amd.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 108110a3
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -2703,18 +2703,11 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
	drm_connector = &aconnector->base;

	if (!aconnector->dc_sink) {
		/*
		 * Create dc_sink when necessary to MST
		 * Don't apply fake_sink to MST
		 */
		if (aconnector->mst_port) {
			dm_dp_mst_dc_sink_create(drm_connector);
			return stream;
		}

		if (!aconnector->mst_port) {
			sink = create_fake_sink(aconnector);
			if (!sink)
				return stream;
		}
	} else {
		sink = aconnector->dc_sink;
	}
+0 −34
Original line number Diff line number Diff line
@@ -205,40 +205,6 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
	.atomic_get_property = amdgpu_dm_connector_atomic_get_property
};

void dm_dp_mst_dc_sink_create(struct drm_connector *connector)
{
	struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
	struct dc_sink *dc_sink;
	struct dc_sink_init_data init_params = {
			.link = aconnector->dc_link,
			.sink_signal = SIGNAL_TYPE_DISPLAY_PORT_MST };

	/* FIXME none of this is safe. we shouldn't touch aconnector here in
	 * atomic_check
	 */

	/*
	 * TODO: Need to further figure out why ddc.algo is NULL while MST port exists
	 */
	if (!aconnector->port || !aconnector->port->aux.ddc.algo)
		return;

	ASSERT(aconnector->edid);

	dc_sink = dc_link_add_remote_sink(
		aconnector->dc_link,
		(uint8_t *)aconnector->edid,
		(aconnector->edid->extensions + 1) * EDID_LENGTH,
		&init_params);

	dc_sink->priv = aconnector;
	aconnector->dc_sink = dc_sink;

	if (aconnector->dc_sink)
		amdgpu_dm_update_freesync_caps(
				connector, aconnector->edid);
}

static int dm_dp_mst_get_modes(struct drm_connector *connector)
{
	struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+0 −1
Original line number Diff line number Diff line
@@ -31,6 +31,5 @@ struct amdgpu_dm_connector;

void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
				       struct amdgpu_dm_connector *aconnector);
void dm_dp_mst_dc_sink_create(struct drm_connector *connector);

#endif