[PATCH 12/41] drm/bridge: analogix_dp: add fast link train for eDP

Andrzej Hajda a.hajda at samsung.com
Wed Mar 22 01:07:48 PDT 2017


On 21.03.2017 21:37, Sean Paul wrote:
> On Thu, Mar 16, 2017 at 03:14:28PM +0100, Andrzej Hajda wrote:
>> On 10.03.2017 05:32, Sean Paul wrote:
>>> From: zain wang <wzz at rock-chips.com>
>>>
>>> We would meet a short black screen when exit PSR with the full link
>>> training, In this case, we should use fast link train instead of full
>>> link training.
>>>
>>> Signed-off-by: zain wang <wzz at rock-chips.com>
>>> Signed-off-by: Sean Paul <seanpaul at chromium.org>
>>> ---
>>>  drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 142 ++++++++++++++++-----
>>>  drivers/gpu/drm/bridge/analogix/analogix_dp_core.h |   3 +
>>>  2 files changed, 114 insertions(+), 31 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>>> index 64d94a34874d..5bc151b0995b 100644
>>> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>>> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>>> @@ -10,17 +10,18 @@
>>>  * option) any later version.
>>>  */
>>>  
>>> -#include <linux/module.h>
>>> -#include <linux/platform_device.h>
>>> -#include <linux/err.h>
>>>  #include <linux/clk.h>
>>> -#include <linux/io.h>
>>> +#include <linux/component.h>
>>> +#include <linux/err.h>
>>> +#include <linux/gpio.h>
>>>  #include <linux/interrupt.h>
>>> +#include <linux/io.h>
>>> +#include <linux/iopoll.h>
>>> +#include <linux/module.h>
>>>  #include <linux/of.h>
>>>  #include <linux/of_gpio.h>
>>> -#include <linux/gpio.h>
>>> -#include <linux/component.h>
>>>  #include <linux/phy/phy.h>
>>> +#include <linux/platform_device.h>
>>>  
>>>  #include <drm/drmP.h>
>>>  #include <drm/drm_atomic_helper.h>
>>> @@ -35,6 +36,8 @@
>>>  
>>>  #define to_dp(nm)	container_of(nm, struct analogix_dp_device, nm)
>>>  
>>> +static const bool verify_fast_training;
>>> +
>> Quite odd debug sentinel, I am not sure if it is good practice to use
>> such construct.
> IIRC, they originally had a #define and then used #ifdef below to gate the
> verification. My concern with that was the code would rot if it wasn't compiled.

It just looks unusual, I am not strongly against current version.

>
> <snip>
>
>>> @@ -853,10 +933,10 @@ static void analogix_dp_commit(struct analogix_dp_device *dp)
>>>  			DRM_ERROR("failed to disable the panel\n");
>>>  	}
>>>  
>>> -	ret = analogix_dp_set_link_train(dp, dp->video_info.max_lane_count,
>>> -					 dp->video_info.max_link_rate);
>>> +	ret = readx_poll_timeout(analogix_dp_train_link, dp, ret, !ret, 100,
>>> +				 DP_TIMEOUT_TRAINING_US * 5);
>>>  	if (ret) {
>>> -		dev_err(dp->dev, "unable to do link train\n");
>>> +		dev_err(dp->dev, "unable to do link train, ret=%d\n", ret);
>> And here we have ", ret=%d\n". Maybe it would be good to make it
>> consistent across whole driver.
> Meh. I don't think it's worth bikeshedding over commas in error messages. I'm
> just happy there are error checks/messages.

But if there will be next iteration it is not big deal to fix it then :)

Regards
Andrzej

>
>
>> Another issue with consistency in DRM_DEV_ERROR vs dev_err.
> Yeah, that's annoying.
>
> Sean
>
>> Regards
>> Andrzej
>>
>>>  		return;
>>>  	}
>>>  
>>> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h
>>> index e135a42cb19e..920607d7eb3e 100644
>>> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h
>>> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h
>>> @@ -20,6 +20,8 @@
>>>  #define MAX_CR_LOOP 5
>>>  #define MAX_EQ_LOOP 5
>>>  
>>> +/* Training takes 22ms if AUX channel comm fails. Use this as retry interval */
>>> +#define DP_TIMEOUT_TRAINING_US			22000
>>>  #define DP_TIMEOUT_PSR_LOOP_MS			300
>>>  
>>>  /* DP_MAX_LANE_COUNT */
>>> @@ -171,6 +173,7 @@ struct analogix_dp_device {
>>>  	int			hpd_gpio;
>>>  	bool                    force_hpd;
>>>  	bool			psr_enable;
>>> +	bool			fast_train_support;
>>>  
>>>  	struct mutex		panel_lock;
>>>  	bool			panel_is_modeset;





More information about the Linux-rockchip mailing list