[Intel-gfx] [PATCH 2/3] drm/drm_edid: Add helper to get max FRL rate for an HDMI sink

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Tue Jan 25 12:30:36 UTC 2022


On 1/25/2022 3:22 PM, Jani Nikula wrote:
> On Tue, 25 Jan 2022, Ankit Nautiyal <ankit.k.nautiyal at intel.com> wrote:
>> Move the common function for getting the max FRL rate for an HDMI sink,
>> from intel_dp.c to drm/drm_edid.
> The subject prefix should be "drm/edid:"
>
> But I'm not sure these functions belong in drm_edid.c though. If you see
> a function prefixed drm_hdmi_, this is not where you'd expect to find
> it. Not sure what the right place should be though.

Hmm. Another candidate which came to my mind was drm_connector,

but since the parsing of the edid got these values, I was thinking this 
might be the correct place.

>
> Please split this to two patches, adding the helpers in drm and using
> them in i915. It's generally easier to manage that way if there's no
> other reason to keep the changes together.
Alright, that make sense. Will split into two patches.
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
>> ---
>>   drivers/gpu/drm/drm_edid.c              | 38 +++++++++++++++++++++++++
>>   drivers/gpu/drm/i915/display/intel_dp.c | 19 ++++---------
>>   include/drm/drm_edid.h                  |  2 ++
>>   3 files changed, 45 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> index eb61a1a92dc0..75b538b4c87f 100644
>> --- a/drivers/gpu/drm/drm_edid.c
>> +++ b/drivers/gpu/drm/drm_edid.c
>> @@ -6176,3 +6176,41 @@ void drm_update_tile_info(struct drm_connector *connector,
>>   		connector->tile_group = NULL;
>>   	}
>>   }
>> +
>> +/**
>> + * drm_hdmi_sink_max_frl - get the max frl rate from HDMI2.1 sink
>> + * @connector - connector with HDMI2.1 sink
> Do you need to first make sure it's a HDMI 2.1 sink? That's what the
> documentation makes you believe.

The thing is that, these fields are the one that helps us to understand 
if the sink is HDMI2.1.

Perhaps I should fix the documentation here:

drm_hdmi_sink_max_frl - get the max frl rate, if supported.
@connector - connector with HDMI sink

>> + *
>> + * RETURNS:
>> + * max frl rate supported by the HDMI2.1 sink, 0 if FRL not supported
>> + */
>> +int drm_hdmi_sink_max_frl(struct drm_connector *connector)
>> +{
>> +	int max_lanes = connector->display_info.hdmi.max_lanes;
>> +	int rate_per_lane = connector->display_info.hdmi.max_frl_rate_per_lane;
>> +
>> +	return max_lanes * rate_per_lane;
>> +}
>> +EXPORT_SYMBOL(drm_hdmi_sink_max_frl);
>> +
>> +/**
>> + * drm_hdmi_sink_dsc_max_frl - get the max frl rate from HDMI2.1 sink
>> + * with DSC1.2 compression.
>> + * @connector - connector with HDMI2.1 sink
> Ditto.

Similar to the above lines, here also the documentation can be fixed.

Thanks & Regards,

Ankit


>
>> + *
>> + * RETURNS:
>> + * max frl rate supported by the HDMI2.1 sink with DSC1.2, 0 if FRL not supported
>> + */
>> +int drm_hdmi_sink_dsc_max_frl(struct drm_connector *connector)
>> +{
>> +	int max_dsc_lanes, dsc_rate_per_lane;
>> +
>> +	if (!connector->display_info.hdmi.dsc_cap.v_1p2)
>> +		return 0;
>> +
>> +	max_dsc_lanes = connector->display_info.hdmi.dsc_cap.max_lanes;
>> +	dsc_rate_per_lane = connector->display_info.hdmi.dsc_cap.max_frl_rate_per_lane;
>> +
>> +	return max_dsc_lanes * dsc_rate_per_lane;
>> +}
>> +EXPORT_SYMBOL(drm_hdmi_sink_dsc_max_frl);
>> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
>> index 4d4579a301f6..f7fe7de7e553 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
>> @@ -2190,22 +2190,13 @@ static int intel_dp_hdmi_sink_max_frl(struct intel_dp *intel_dp)
>>   {
>>   	struct intel_connector *intel_connector = intel_dp->attached_connector;
>>   	struct drm_connector *connector = &intel_connector->base;
>> -	int max_frl_rate;
>> -	int max_lanes, rate_per_lane;
>> -	int max_dsc_lanes, dsc_rate_per_lane;
>> +	int max_frl = drm_hdmi_sink_max_frl(connector);
>> +	int dsc_max_frl = drm_hdmi_sink_dsc_max_frl(connector);
>>   
>> -	max_lanes = connector->display_info.hdmi.max_lanes;
>> -	rate_per_lane = connector->display_info.hdmi.max_frl_rate_per_lane;
>> -	max_frl_rate = max_lanes * rate_per_lane;
>> +	if (dsc_max_frl)
>> +		return min(max_frl, dsc_max_frl);
>>   
>> -	if (connector->display_info.hdmi.dsc_cap.v_1p2) {
>> -		max_dsc_lanes = connector->display_info.hdmi.dsc_cap.max_lanes;
>> -		dsc_rate_per_lane = connector->display_info.hdmi.dsc_cap.max_frl_rate_per_lane;
>> -		if (max_dsc_lanes && dsc_rate_per_lane)
>> -			max_frl_rate = min(max_frl_rate, max_dsc_lanes * dsc_rate_per_lane);
>> -	}
>> -
>> -	return max_frl_rate;
>> +	return max_frl;
>>   }
>>   
>>   static bool
>> diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
>> index 18f6c700f6d0..5003e1254c44 100644
>> --- a/include/drm/drm_edid.h
>> +++ b/include/drm/drm_edid.h
>> @@ -592,6 +592,8 @@ drm_display_mode_from_cea_vic(struct drm_device *dev,
>>   			      u8 video_code);
>>   const u8 *drm_find_edid_extension(const struct edid *edid,
>>   				  int ext_id, int *ext_index);
>> +int drm_hdmi_sink_max_frl(struct drm_connector *connector);
>> +int drm_hdmi_sink_dsc_max_frl(struct drm_connector *connector);
>>   
>>   
>>   #endif /* __DRM_EDID_H__ */


More information about the Intel-gfx mailing list