Commit c38cc677 authored by Martin Tsai's avatar Martin Tsai Committed by Alex Deucher
Browse files

drm/amd/display: differentiate vsc sdp colorimetry use criteria between MST and SST



[Why]
We should check MST BU support capability on output port before building
vsc info packet.

[How]
Add a new definition for port and sink capability check.

Signed-off-by: default avatarMartin Tsai <martin.tsai@amd.com>
Reviewed-by: default avatarWenjing Liu <Wenjing.Liu@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a19620ea
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -4316,9 +4316,22 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
			struct dmcu *dmcu = core_dc->res_pool->dmcu;

			stream->psr_version = dmcu->dmcu_version.psr_version;
			mod_build_vsc_infopacket(stream,
					&stream->vsc_infopacket,
					&stream->use_vsc_sdp_for_colorimetry);

			//
			// should decide stream support vsc sdp colorimetry capability
			// before building vsc info packet
			//
			stream->use_vsc_sdp_for_colorimetry = false;
			if (aconnector->dc_sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT_MST) {
				stream->use_vsc_sdp_for_colorimetry =
					aconnector->dc_sink->is_vsc_sdp_colorimetry_supported;
			} else {
				if (stream->link->dpcd_caps.dpcd_rev.raw >= 0x14 &&
					stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED) {
					stream->use_vsc_sdp_for_colorimetry = true;
				}
			}
			mod_build_vsc_infopacket(stream, &stream->vsc_infopacket);
		}
	}
finish:
+2 −0
Original line number Diff line number Diff line
@@ -1047,6 +1047,8 @@ struct dc_sink {
	struct dc_sink_dsc_caps dsc_caps;
	struct dc_sink_fec_caps fec_caps;

	bool is_vsc_sdp_colorimetry_supported;

	/* private to DC core */
	struct dc_link *link;
	struct dc_context *ctx;
+1 −2
Original line number Diff line number Diff line
@@ -34,8 +34,7 @@ struct dc_info_packet;
struct mod_vrr_params;

void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
		struct dc_info_packet *info_packet,
		bool *use_vsc_sdp_for_colorimetry);
		struct dc_info_packet *info_packet);

void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream,
		struct dc_info_packet *info_packet, int ALLMEnabled, int ALLMValue);
+3 −17
Original line number Diff line number Diff line
@@ -130,8 +130,7 @@ enum ColorimetryYCCDP {
};

void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
		struct dc_info_packet *info_packet,
		bool *use_vsc_sdp_for_colorimetry)
		struct dc_info_packet *info_packet)
{
	unsigned int vsc_packet_revision = vsc_packet_undefined;
	unsigned int i;
@@ -139,11 +138,6 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
	unsigned int colorimetryFormat = 0;
	bool stereo3dSupport = false;

	/* Initialize first, later if infopacket is valid determine if VSC SDP
	 * should be used to signal colorimetry format and pixel encoding.
	 */
	*use_vsc_sdp_for_colorimetry = false;

	if (stream->timing.timing_3d_format != TIMING_3D_FORMAT_NONE && stream->view_format != VIEW_3D_FORMAT_NONE) {
		vsc_packet_revision = vsc_packet_rev1;
		stereo3dSupport = true;
@@ -153,9 +147,8 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
	if (stream->psr_version != 0)
		vsc_packet_revision = vsc_packet_rev2;

	/* Update to revision 5 for extended colorimetry support for DPCD 1.4+ */
	if (stream->link->dpcd_caps.dpcd_rev.raw >= 0x14 &&
			stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED)
	/* Update to revision 5 for extended colorimetry support */
	if (stream->use_vsc_sdp_for_colorimetry)
		vsc_packet_revision = vsc_packet_rev5;

	/* VSC packet not needed based on the features
@@ -269,13 +262,6 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,

		info_packet->valid = true;

		/* If we are using VSC SDP revision 05h, use this to signal for
		 * colorimetry format and pixel encoding. HW should later be
		 * programmed to set MSA MISC1 bit 6 to indicate ignore
		 * colorimetry format and pixel encoding in the MSA.
		 */
		*use_vsc_sdp_for_colorimetry = true;

		/* Set VSC SDP fields for pixel encoding and colorimetry format from DP 1.3 specs
		 * Data Bytes DB 18~16
		 * Bits 3:0 (Colorimetry Format)        |  Bits 7:4 (Pixel Encoding)