[Intel-gfx] [PATCH v3 07/10] drm/exynos: Remove custom FB helper deferred setup

Andrzej Hajda a.hajda at samsung.com
Tue Mar 21 10:42:21 UTC 2017


On 21.03.2017 11:20, Daniel Vetter wrote:
> On Tue, Mar 21, 2017 at 10:58:43AM +0100, Andrzej Hajda wrote:
>> On 21.03.2017 09:13, Thierry Reding wrote:
>>> From: Thierry Reding <treding at nvidia.com>
>>>
>>> The FB helper core now supports deferred setup, so the driver's custom
>>> implementation can be removed.
>>>
>>> Signed-off-by: Thierry Reding <treding at nvidia.com>
>>> ---
>>>  drivers/gpu/drm/exynos/exynos_drm_drv.c   | 6 ++++--
>>>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 2 --
>>>  2 files changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> index 09d3c4c3c858..c5a37dda8d1b 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> @@ -399,8 +399,9 @@ static int exynos_drm_bind(struct device *dev)
>>>  	/* init kms poll for handling hpd */
>>>  	drm_kms_helper_poll_init(drm);
>>>  
>>> -	/* force connectors detection */
>>> -	drm_helper_hpd_irq_event(drm);
>>> +	ret = exynos_drm_fbdev_init(dev);
>>> +	if (ret)
>>> +		goto err_cleanup_poll;
>> It should be rather:
>>     ret = exynos_drm_fbdev_init(drm);
>>
>> Even with this change it does not work, I will try to track down the
>> problem.

The solution was to remove custom equivalent of
drm_fb_helper_maybe_connected - exynos_drm_fbdev_is_anything_connected,
it is called earlier and it was a part of custom deferred fbdev.

> We might need the multi-stage fbdev setup here, i.e. init fbdev, run
> hpd_irq_event() (I suspect that kicks all the connectors to start
> probing), then initial_config for fbdev.
>
> Probably simplest way to achieve this is to keep the hpd_irq_event call,
> but place it _after_ the fbdev_init.
> -Daniel

I wonder if it wouldn't be sufficient to check if there is anything
connected, instead of checking if there is anything not-disconnected, in
drm_fb_helper_maybe_connected.

Regards
Andrzej

>
>> Regards
>> Andrzej
>>
>>
>>>  
>>>  	/* register the DRM device */
>>>  	ret = drm_dev_register(drm, 0);
>>> @@ -411,6 +412,7 @@ static int exynos_drm_bind(struct device *dev)
>>>  
>>>  err_cleanup_fbdev:
>>>  	exynos_drm_fbdev_fini(drm);
>>> +err_cleanup_poll:
>>>  	drm_kms_helper_poll_fini(drm);
>>>  	exynos_drm_device_subdrv_remove(drm);
>>>  err_cleanup_vblank:
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
>>> index 641531243e04..a020fa70c825 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
>>> @@ -306,6 +306,4 @@ void exynos_drm_output_poll_changed(struct drm_device *dev)
>>>  
>>>  	if (fb_helper)
>>>  		drm_fb_helper_hotplug_event(fb_helper);
>>> -	else
>>> -		exynos_drm_fbdev_init(dev);
>>>  }
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel




More information about the Intel-gfx mailing list