[PATCH v2] drm/dp: follow DP link CTS spec to read link status back

Lee, Shawn C shawn.c.lee at intel.com
Thu Aug 19 07:55:20 UTC 2021


On Wed, 08 Jul 2021, Lee Shawn C <shawn.c.lee at intel.com> wrote:
>On Wed, 07 Jul 2021, 4:14 p.m, Jani Nikula <jani.nikula at intel.com> wrote:
>>On Wed, 07 Jul 2021, Lee Shawn C <shawn.c.lee at intel.com> wrote:
>>> Refer to DP link CTS 1.2/1.4 spec, the following test case request 
>>> source read DPCD 200h - 205h to get latest link status from sink.
>>>
>>> (4.3.2.4) Handling of IRQ HPD Pulse with No Error Status Bits Set
>>> (400.3.2.1) Successful Link Re-training After IRQ HPD Pulse
>>>             Due to Loss of Symbol Lock: HBR2 Extension
>>> (400.3.2.2) Successful Link Re-training After IRQ HPD Pulse Due
>>>             to Loss of Clock Recovery Lock: HBR2 Extension
>>> (400.3.2.3) Successful Link Re-training After IRQ HPD Pulse Due
>>>             to Loss of Inter-lane Alignment Lock: HBR2 Extension
>>>
>>> So far, DRM DP driver just read back the link status from 202h to 
>>> 207h. DPR-120 would judge source can't pass these cases and shows 
>>> below error messages.
>>>
>>> "Test FAILED, Source DUT does not read DPCD registers 200h-205h 
>>> within
>>> 100 ms".
>>
>>Acked-by: Jani Nikula <jani.nikula at intel.com>
>>
>>for making the test pass iff everything else seems to work.
>>
>>The underlying question is, though, should we look at 0x200-0x201 for some status we don't look at?
>>
>
>Look into 200h. While doing link train with DPRX. In my opinion, sink_count and cp_ready status should be constant.
>And sink would trigger HPD to source to notify 201h value was changed. Seems source driver don't need this value at link training stage as well. What do you think?
>
>Best regards,
>Shawn
>

Hi Simon and all, 

Please share your recommendations for this patch to pass DP link layer compliance test. Thanks!

Best regards,
Shawn

>>
>>>
>>> v2: Use sizeof() to retrieve array size.
>>>
>>> Cc: Jani Nikula <jani.nikula at intel.com>
>>> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
>>> Cc: Lyude Paul <lyude at redhat.com>
>>> Cc: Simon Ser <contact at emersion.fr>
>>> Cc: Cooper Chiou <cooper.chiou at intel.com>
>>> Cc: William Tseng <william.tseng at intel.com>
>>> Signed-off-by: Lee Shawn C <shawn.c.lee at intel.com>
>>> ---
>>>  drivers/gpu/drm/drm_dp_helper.c | 10 ++++++----
>>>  1 file changed, 6 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/drm_dp_helper.c 
>>> b/drivers/gpu/drm/drm_dp_helper.c index 24bbc710c825..4f03df317d62
>>> 100644
>>> --- a/drivers/gpu/drm/drm_dp_helper.c
>>> +++ b/drivers/gpu/drm/drm_dp_helper.c
>>> @@ -410,17 +410,19 @@ int drm_dp_dpcd_read_phy_link_status(struct drm_dp_aux *aux,
>>>  				     u8 link_status[DP_LINK_STATUS_SIZE])  {
>>>  	int ret;
>>> +	u8 full_link_stat[DP_LINK_STATUS_SIZE + 2];
>>>  
>>>  	if (dp_phy == DP_PHY_DPRX) {
>>>  		ret = drm_dp_dpcd_read(aux,
>>> -				       DP_LANE0_1_STATUS,
>>> -				       link_status,
>>> -				       DP_LINK_STATUS_SIZE);
>>> +				       DP_SINK_COUNT,
>>> +				       full_link_stat,
>>> +				       sizeof(full_link_stat));
>>>  
>>>  		if (ret < 0)
>>>  			return ret;
>>>  
>>> -		WARN_ON(ret != DP_LINK_STATUS_SIZE);
>>> +		memcpy(link_status, full_link_stat + 2, DP_LINK_STATUS_SIZE);
>>> +		WARN_ON(ret != DP_LINK_STATUS_SIZE + 2);
>>>  
>>>  		return 0;
>>>  	}
>>
>>--
>>Jani Nikula, Intel Open Source Graphics Center
>


More information about the dri-devel mailing list