[Intel-gfx] [PATCH v2] drm/i915/fbdev: Enable late fbdev initial configuration

Chris Wilson chris at chris-wilson.co.uk
Tue Apr 24 08:47:08 UTC 2018


Quoting José Roberto de Souza (2018-04-19 00:41:58)
> If the initial fbdev configuration(intel_fbdev_initial_config()) runs and
> there still no sink connected it will cause
> drm_fb_helper_initial_config() to return 0 as no error happened(but
> internally the return is -EAGAIN).
> Because no framebuffer was allocated, when a sink is connected
> intel_fbdev_output_poll_changed() will not execute
> drm_fb_helper_hotplug_event() that would trigger another try to do the
> initial fbdev configuration.
> 
> So here allowing drm_fb_helper_hotplug_event() to be executed when there
> is not frambebuffer allocated and fbdev was not setup yet.
> 
> This issue also happens when a MST DP sink is connected since boot, as
> the MST topology is discovered in parallel if intel_fbdev_initial_config()
> is executed before the first sink MST is discovered it will cause this
> same issue.
> 
> This is a follow up patch of
> https://patchwork.freedesktop.org/patch/196089/
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104158
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104425
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> ---
> 
> Changes from v1:
> - not creating a dump framebuffer anymore, instead just allowing
> drm_fb_helper_hotplug_event() to execute when fbdev is not setup yet.
> 
>  drivers/gpu/drm/i915/intel_fbdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
> index 7d41d139341b..e9e02b58b7be 100644
> --- a/drivers/gpu/drm/i915/intel_fbdev.c
> +++ b/drivers/gpu/drm/i915/intel_fbdev.c
> @@ -807,7 +807,7 @@ void intel_fbdev_output_poll_changed(struct drm_device *dev)
>                 return;
>  
>         intel_fbdev_sync(ifbdev);
> -       if (ifbdev->vma)
> +       if (ifbdev->vma || ifbdev->helper.deferred_setup)

Feels slightly dodgy, vma can only be set and deferred_setup only be
cleared at runtime, so at worst we may miss sending a hpd event during a
runtime configuration phase. Which is probably just as well.

What happens if we send two hpd events, and the first gets a deferred setup
that fails. Do we hit the previous error condition? At least we are not
hitting the condition of running the hotplug event while trying to do
the initial configuration, but does the deferred setup have the same
bugs?

>                 drm_fb_helper_hotplug_event(&ifbdev->helper);

I fear this is just poking the bear,
Acked-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris


More information about the Intel-gfx mailing list