linux-tegra.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* DSI panel not working on -next
@ 2015-02-13  6:29 Alexandre Courbot
       [not found] ` <54DD99B5.2080504-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Alexandre Courbot @ 2015-02-13  6:29 UTC (permalink / raw)
  To: Thierry Reding,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

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-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
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:


Working case:
[    2.045189] [<c02f4cc8>] (panel_simple_probe) from [<c02f4e6c>] 
(panel_simple_dsi_probe+0x2c/0x64)
[    2.054159] [<c02f4e6c>] (panel_simple_dsi_probe) from [<c0303618>] 
(driver_probe_device+0x108/0x23c)
[    2.063413] [<c0303618>] (driver_probe_device) from [<c0301c84>] 
(bus_for_each_drv+0x64/0x98)
[    2.072027] [<c0301c84>] (bus_for_each_drv) from [<c03034e0>] 
(device_attach+0x74/0x88)
[    2.080126] [<c03034e0>] (device_attach) from [<c0302bcc>] 
(bus_probe_device+0x84/0xa8)
[    2.088227] [<c0302bcc>] (bus_probe_device) from [<c0300fac>] 
(device_add+0x398/0x520)
[    2.096248] [<c0300fac>] (device_add) from [<c02e35cc>] 
(mipi_dsi_host_register+0xb8/0x198)
[    2.104698] [<c02e35cc>] (mipi_dsi_host_register) from [<c02f0ad4>] 
(tegra_dsi_probe+0x2dc/0x4d4)
[    2.113611] [<c02f0ad4>] (tegra_dsi_probe) from [<c0304d74>] 
(platform_drv_probe+0x44/0xa4)
[    2.122031] [<c0304d74>] (platform_drv_probe) from [<c0303618>] 
(driver_probe_device+0x108/0x23c)
[    2.130991] [<c0303618>] (driver_probe_device) from [<c0301c84>] 
(bus_for_each_drv+0x64/0x98)
[    2.139608] [<c0301c84>] (bus_for_each_drv) from [<c03034e0>] 
(device_attach+0x74/0x88)
[    2.147706] [<c03034e0>] (device_attach) from [<c0302bcc>] 
(bus_probe_device+0x84/0xa8)
[    2.155806] [<c0302bcc>] (bus_probe_device) from [<c0302fec>] 
(deferred_probe_work_func+0x64/0x94)
[    2.164863] [<c0302fec>] (deferred_probe_work_func) from [<c0038c5c>] 
(process_one_work+0x120/0x330)
[    2.174033] [<c0038c5c>] (process_one_work) from [<c00394cc>] 
(worker_thread+0x4c/0x474)
[    2.182193] [<c00394cc>] (worker_thread) from [<c003d548>] 
(kthread+0xdc/0xf4)
[    2.189505] [<c003d548>] (kthread) from [<c000e8c0>] 
(ret_from_fork+0x14/0x34)


Failure case:
[    1.540582] [<c03067f0>] (panel_simple_probe) from [<c0306994>] 
(panel_simple_dsi_probe+0x2c/0x64)
[    1.549731] [<c0306994>] (panel_simple_dsi_probe) from [<c030ced8>] 
(driver_probe_device+0x108/0x23c)
[    1.559145] [<c030ced8>] (driver_probe_device) from [<c030d0dc>] 
(__driver_attach+0x8c/0x90)
[    1.567763] [<c030d0dc>] (__driver_attach) from [<c030b498>] 
(bus_for_each_dev+0x6c/0xa0)
[    1.576122] [<c030b498>] (bus_for_each_dev) from [<c030c700>] 
(bus_add_driver+0x148/0x1f0)
[    1.584565] [<c030c700>] (bus_add_driver) from [<c030d6e0>] 
(driver_register+0x78/0xf8)
[    1.592723] [<c030d6e0>] (driver_register) from [<c09792c8>] 
(panel_simple_init+0x28/0x34)
[    1.601160] [<c09792c8>] (panel_simple_init) from [<c0008b30>] 
(do_one_initcall+0x8c/0x1d4)
[    1.609697] [<c0008b30>] (do_one_initcall) from [<c095ddc8>] 
(kernel_init_freeable+0x144/0x1e4)
[    1.618577] [<c095ddc8>] (kernel_init_freeable) from [<c0675da8>] 
(kernel_init+0x8/0xe8)
[    1.626850] [<c0675da8>] (kernel_init) from [<c000e8c0>] 
(ret_from_fork+0x14/0x34)


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


Are you aware of this? Does it affect other DSI panels? Does SHIELD's DT 
need an update of some sort?

Cheers,
Alex.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: DSI panel not working on -next
       [not found] ` <54DD99B5.2080504-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2015-02-13  9:55   ` Thierry Reding
       [not found]     ` <20150213095516.GA17888-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Thierry Reding @ 2015-02-13  9:55 UTC (permalink / raw)
  To: Alexandre Courbot; +Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

[-- Attachment #1: Type: text/plain, Size: 1806 bytes --]

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-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> 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.

Thierry

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: DSI panel not working on -next
       [not found]     ` <20150213095516.GA17888-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
@ 2015-02-13 10:18       ` Alexandre Courbot
       [not found]         ` <54DDCF63.7040208-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Alexandre Courbot @ 2015-02-13 10:18 UTC (permalink / raw)
  To: Thierry Reding; +Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

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-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> 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.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: DSI panel not working on -next
       [not found]         ` <54DDCF63.7040208-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2015-02-19  8:12           ` Thierry Reding
  0 siblings, 0 replies; 4+ messages in thread
From: Thierry Reding @ 2015-02-19  8:12 UTC (permalink / raw)
  To: Alexandre Courbot; +Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

[-- Attachment #1: Type: text/plain, Size: 4214 bytes --]

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-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> >>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 #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-02-19  8:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-13  6:29 DSI panel not working on -next Alexandre Courbot
     [not found] ` <54DD99B5.2080504-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-02-13  9:55   ` Thierry Reding
     [not found]     ` <20150213095516.GA17888-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2015-02-13 10:18       ` Alexandre Courbot
     [not found]         ` <54DDCF63.7040208-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-02-19  8:12           ` Thierry Reding

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).