Re: DSI panel not working on -next

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Feb 13, 2015 at 07:18:11PM +0900, Alexandre Courbot wrote:
> On 02/13/2015 06:55 PM, Thierry Reding wrote:
> >On Fri, Feb 13, 2015 at 03:29:09PM +0900, Alexandre Courbot wrote:
> >>Hi Thierry,
> >>
> >>I noticed that the DSI panel of SHIELD (tegra114-roth) was not brought up on
> >>-next. I have bisected the following commit as introducing that behavior:
> >>
> >>commit f4c5cf88fbd50e4779042268947b2e2f90c20484
> >>Author: Thierry Reding <treding@xxxxxxxxxx>
> >>Date:   Thu Dec 18 15:29:14 2014 +0100
> >>
> >>     gpu: host1x: Provide a proper struct bus_type
> >>
> >>
> >>With and without this patch, the DSI panel is probed, but the stack trace in
> >>the probe() function is different:
> >
> >This shouldn't make much of a difference, really, since we're attaching
> >to the panel only during mipi_dsi_host_register() anyway. And the panel
> >device can't exist earlier than that because mipi_dsi_host_register()
> >will instantiate it. Still...
> >
> >>i.e. with f4c5cf88fbd, the panel is not probed from tegra_dsi_probe()
> >>anymore, which means DSI remains without a valid connector:
> >>
> >>[    1.378513] [drm] Initialized drm 1.1.0 20060810
> >>[    1.384564] 54300000.dsi supply avdd-dsi-csi not found, using dummy
> >>regulator
> >>[    1.396394] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
> >>[    1.403021] [drm] No driver support for vblank timestamp query.
> >>[    1.409080] drm drm: No connectors reported connected with modes
> >>[    1.415128] [drm] Cannot find any crtc or sizes - going 1024x768
> >
> >... the failing log here does indicate that there is no panel, so I'll
> >need to investigate why that's happening.
> >
> >>Are you aware of this? Does it affect other DSI panels? Does SHIELD's DT
> >>need an update of some sort?
> >
> >I'm almost certain that I've tested this on at least Dalmore and I don't
> >see any differences that could be causing this. I'll look into it.
> 
> Thanks - please don't hesitate to ask me to run some more tests (or just to
> try and fix it by myself) if this can save you time.

Let me try to summarize what we discussed on IRC earlier. The root cause
here is that the panel is probed as part of the mipi_dsi_host_register()
call. In some cases the panel driver may defer probe itself, therefore
causing the DSI output to end up with no attached panel. The KMS fbdev
emulation will then assume a default resolution of 1024x768.

The panel will at some point successfully probe and attach to the host,
which should cause things to work normally for anything that's able to
set a mode by itself. So running modetest or weston should still work,
even if fbcon doesn't.

I see three possible solutions:

  - Defer in the DSI output's ->probe() if after registering the host
    there is no panel attached. That should delay the initialization of
    fbdev until a panel is detected.

    This is somewhat ugly, but I think it would be the easiest fix for
    the regression until a proper solution is implemented.

  - Modify the driver to cope with "hot-pluggable" panels. This isn't
    really going to fix the regression because the outcome will be the
    same. In fact, for DSI panels are already hot-pluggable.

  - Implement a mechanism to tear down and setup from scratch the fbdev
    when the first output is added. So at driver load time the fbdev
    code would skip fbdev initialization if no connected output was
    detected. Once any of the outputs is connected, the native mode of
    that output can be used to create fbdev. That should be enough to
    fix the problem for panels that defer probe, but I think an even
    more generic solution would be to go a step further and completely
    tear down fbdev when the last connected output goes away and then
    create it again when any of the outputs is connected again.

    I'm told that it's very difficult to resize fbcon, but I know that
    at least with the Tegra driver it is properly torn down and set up
    again during a driver unload/load cycle, so it must be possible to
    do this more granularly for fbdev only.

Thierry

Attachment: pgpFFan7eFihQ.pgp
Description: PGP signature


[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux