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: Martin Tsai <martin.tsai@amd.com> Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a19620ea91
commit
c38cc6770f
@ -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 {
|
|||||||
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;
|
|||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user