[PATCH v3] drm/amd/display: Check & log if receiver supports MST, DSC & FEC.

Aurabindo Pillai aurabindo.pillai at amd.com
Mon Apr 17 17:15:29 UTC 2023



On 4/17/23 12:57, Srinivasan Shanmugam wrote:
> After reading from receiver via DPCD, check & log if it supports MST,
> DSC & FEC
> 
> Cc: Aurabindo Pillai <aurabindo.pillai at amd.com>
> Cc: Fangzhi Zuo <Jerry.Zuo at amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam at amd.com>
> ---
> v2:
>   - Added %s: to print the function name.
> 
> v3:
>   - Used the defined struct instead of the bitwise logic here, like
> fec_cap.bits.FEC_CAPABLE. Makes it more readable. (Aurabindo)
> 
>   - For DSC, it would be useful to print both basic DSC and passthrough
> capability. (Aurabindo)
> 
>   .../dc/link/protocols/link_dp_capability.c       | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
> index ba98013fecd0..59adc61156cb 100644
> --- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
> +++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
> @@ -1554,6 +1554,9 @@ static bool retrieve_link_cap(struct dc_link *link)
>   	int i;
>   	struct dp_sink_hw_fw_revision dp_hw_fw_revision;
>   	const uint32_t post_oui_delay = 30; // 30ms
> +	bool is_fec_supported = false;
> +	bool is_dsc_basic_supported = false;
> +	bool is_dsc_passthrough_supported = false;
>   
>   	memset(dpcd_data, '\0', sizeof(dpcd_data));
>   	memset(&down_strm_port_count,
> @@ -1696,6 +1699,7 @@ static bool retrieve_link_cap(struct dc_link *link)
>   
>   	/* TODO - decouple raw mst capability from policy decision */
>   	link->dpcd_caps.is_mst_capable = read_is_mst_supported(link);
> +	DC_LOG_DC("%s: MST_Support: %s\n", __func__, str_yes_no(link->dpcd_caps.is_mst_capable));
>   
>   	get_active_converter_info(ds_port.byte, link);
>   
> @@ -1803,6 +1807,18 @@ static bool retrieve_link_cap(struct dc_link *link)
>   				DP_DSC_SUPPORT,
>   				link->dpcd_caps.dsc_caps.dsc_basic_caps.raw,
>   				sizeof(link->dpcd_caps.dsc_caps.dsc_basic_caps.raw));
> +		if (status == DC_OK) {
> +			is_fec_supported = link->dpcd_caps.fec_cap.bits.FEC_CAPABLE;
> +			is_dsc_basic_supported = link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT;
> +			is_dsc_passthrough_supported = link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_PASSTHROUGH_SUPPORT;
> +			DC_LOG_DC("%s: FEC_Sink_Support: %s\n", __func__,
> +				  str_yes_no(is_fec_supported));
> +			DC_LOG_DC("%s: DSC_Basic_Sink_Support: %s\n", __func__,
> +				  str_yes_no(is_dsc_basic_supported));
> +			if (link->dpcd_caps.is_mst_capable)
> +				DC_LOG_DC("%s: DSC_Passthrough_Sink_Support: %s\n", __func__,
> +					  str_yes_no(is_dsc_passthrough_supported));
> +		}
>   		if (link->dpcd_caps.dongle_type != DISPLAY_DONGLE_NONE) {
>   			status = core_link_read_dpcd(
>   					link,


Reviewed-by: Aurabindo Pillai <aurabindo.pillai at amd.com>


More information about the amd-gfx mailing list