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

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
...@@ -4316,9 +4316,22 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector, ...@@ -4316,9 +4316,22 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
struct dmcu *dmcu = core_dc->res_pool->dmcu; struct dmcu *dmcu = core_dc->res_pool->dmcu;
stream->psr_version = dmcu->dmcu_version.psr_version; 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: finish:
......
...@@ -1047,6 +1047,8 @@ struct dc_sink { ...@@ -1047,6 +1047,8 @@ struct dc_sink {
struct dc_sink_dsc_caps dsc_caps; struct dc_sink_dsc_caps dsc_caps;
struct dc_sink_fec_caps fec_caps; struct dc_sink_fec_caps fec_caps;
bool is_vsc_sdp_colorimetry_supported;
/* private to DC core */ /* private to DC core */
struct dc_link *link; struct dc_link *link;
struct dc_context *ctx; struct dc_context *ctx;
......
...@@ -34,8 +34,7 @@ struct dc_info_packet; ...@@ -34,8 +34,7 @@ struct dc_info_packet;
struct mod_vrr_params; struct mod_vrr_params;
void mod_build_vsc_infopacket(const struct dc_stream_state *stream, void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
struct dc_info_packet *info_packet, struct dc_info_packet *info_packet);
bool *use_vsc_sdp_for_colorimetry);
void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream, void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream,
struct dc_info_packet *info_packet, int ALLMEnabled, int ALLMValue); struct dc_info_packet *info_packet, int ALLMEnabled, int ALLMValue);
......
...@@ -130,8 +130,7 @@ enum ColorimetryYCCDP { ...@@ -130,8 +130,7 @@ enum ColorimetryYCCDP {
}; };
void mod_build_vsc_infopacket(const struct dc_stream_state *stream, void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
struct dc_info_packet *info_packet, struct dc_info_packet *info_packet)
bool *use_vsc_sdp_for_colorimetry)
{ {
unsigned int vsc_packet_revision = vsc_packet_undefined; unsigned int vsc_packet_revision = vsc_packet_undefined;
unsigned int i; unsigned int i;
...@@ -139,11 +138,6 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream, ...@@ -139,11 +138,6 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
unsigned int colorimetryFormat = 0; unsigned int colorimetryFormat = 0;
bool stereo3dSupport = false; 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) { if (stream->timing.timing_3d_format != TIMING_3D_FORMAT_NONE && stream->view_format != VIEW_3D_FORMAT_NONE) {
vsc_packet_revision = vsc_packet_rev1; vsc_packet_revision = vsc_packet_rev1;
stereo3dSupport = true; stereo3dSupport = true;
...@@ -153,9 +147,8 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream, ...@@ -153,9 +147,8 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
if (stream->psr_version != 0) if (stream->psr_version != 0)
vsc_packet_revision = vsc_packet_rev2; vsc_packet_revision = vsc_packet_rev2;
/* Update to revision 5 for extended colorimetry support for DPCD 1.4+ */ /* Update to revision 5 for extended colorimetry support */
if (stream->link->dpcd_caps.dpcd_rev.raw >= 0x14 && if (stream->use_vsc_sdp_for_colorimetry)
stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED)
vsc_packet_revision = vsc_packet_rev5; vsc_packet_revision = vsc_packet_rev5;
/* VSC packet not needed based on the features /* VSC packet not needed based on the features
...@@ -269,13 +262,6 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream, ...@@ -269,13 +262,6 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
info_packet->valid = true; 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 /* Set VSC SDP fields for pixel encoding and colorimetry format from DP 1.3 specs
* Data Bytes DB 18~16 * Data Bytes DB 18~16
* Bits 3:0 (Colorimetry Format) | Bits 7:4 (Pixel Encoding) * Bits 3:0 (Colorimetry Format) | Bits 7:4 (Pixel Encoding)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment