Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-04-20 Thread Laurent Pinchart
Hi Frieder,

On Tue, Apr 20, 2021 at 01:42:05PM +0200, Frieder Schrempf wrote:
> On 23.02.21 13:07, Daniel Vetter wrote:
> > On Thu, Feb 18, 2021 at 5:02 PM Andrzej Hajda  wrote:
> >> W dniu 18.02.2021 o 09:04, Michael Tretter pisze:
> >>> On Wed, 10 Feb 2021 10:10:37 +0100, Frieder Schrempf wrote:
>  On 04.02.21 18:46, Daniel Vetter wrote:
> > On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart 
> >  wrote:
> >> On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:
> >>> On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:
>  W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> > On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
> >> On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> >>> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:
>  On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> >> W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> >>> On 14.09.2020 22:01, Michael Tretter wrote:
>  On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > On 14.09.2020 10:29, Marek Szyprowski wrote:
> >> On 11.09.2020 15:54, Michael Tretter wrote:
> >>> Make the exynos_dsi driver a full drm bridge that can be 
> >>> found and
> >>> used
> >>> from other drivers.
> >>>
> >>> Other drivers can only attach to the bridge, if a mipi 
> >>> dsi device
> >>> already attached to the bridge. This allows to defer the 
> >>> probe of the
> >>> display pipe until the downstream bridges are available, 
> >>> too.
> >>>
> >>> Signed-off-by: Michael Tretter 
> >> This one (and the whole series applied) still fails on 
> >> Exynos boards:
> >>
> >> [drm] Exynos DRM: using 11c0.fimd device for DMA 
> >> mapping
> >> operations
> >> exynos-drm exynos-drm: bound 11c0.fimd (ops 
> >> fimd_component_ops)
> >> OF: graph: no port node found in /soc/dsi@11c8
> >> 8<--- cut here ---
> >> Unable to handle kernel NULL pointer dereference at 
> >> virtual address
> >> 0084
> >> pgd = (ptrval)
> >> [0084] *pgd=
> >> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> >> Modules linked in:
> >> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> >> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> >> Hardware name: Samsung Exynos (Flattened Device Tree)
> >> PC is at drm_bridge_attach+0x18/0x164
> >> LR is at exynos_dsi_bind+0x88/0xa8
> >> pc : []lr : []psr: 2013
> >> sp : ef0dfca8  ip : 0002  fp : c13190e0
> >> r10:   r9 : ee46d580  r8 : c13190e0
> >> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> >> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> >> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  
> >> Segment none
> >> Control: 10c5387d  Table: 4000404a  DAC: 0051
> >> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> >> Stack: (0xef0dfca8 to 0xef0e)
> >> ...
> >> [] (drm_bridge_attach) from []
> >> (exynos_dsi_bind+0x88/0xa8)
> >> [] (exynos_dsi_bind) from []
> >> (component_bind_all+0xfc/0x290)
> >> [] (component_bind_all) from []
> >> (exynos_drm_bind+0xe4/0x19c)
> >> [] (exynos_drm_bind) from []
> >> (try_to_bring_up_master+0x1e4/0x2c4)
> >> [] (try_to_bring_up_master) from []
> >> (component_master_add_with_match+0xd4/0x108)
> >> [] (component_master_add_with_match) from 
> >> []
> >> (exynos_drm_platform_probe+0xe4/0x110)
> >> [] (exynos_drm_platform_probe) from []
> >> (platform_drv_probe+0x6c/0xa4)
> >> [] (platform_drv_probe) from []
> >> (really_probe+0x200/0x4fc)
> >> [] (really_probe) from []
> >> (driver_probe_device+0x78/0x1fc)
> >> [] (driver_probe_device) from []
> >> (device_driver_attach+0x58/0x60)
> >> [] (device_driver_attach) from []
> >> (__driver_attach+0xdc/0x174)
> >> [] 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-04-20 Thread Frieder Schrempf

On 23.02.21 13:07, Daniel Vetter wrote:

On Thu, Feb 18, 2021 at 5:02 PM Andrzej Hajda  wrote:


Hi Michael,

W dniu 18.02.2021 o 09:04, Michael Tretter pisze:

On Wed, 10 Feb 2021 10:10:37 +0100, Frieder Schrempf wrote:

On 04.02.21 18:46, Daniel Vetter wrote:

On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart 
 wrote:

On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:

On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:

W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:

On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:

On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:

On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:

On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:

On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:

W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:

On 14.09.2020 22:01, Michael Tretter wrote:

On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:

On 14.09.2020 10:29, Marek Szyprowski wrote:

On 11.09.2020 15:54, Michael Tretter wrote:

Make the exynos_dsi driver a full drm bridge that can be found and
used
from other drivers.

Other drivers can only attach to the bridge, if a mipi dsi device
already attached to the bridge. This allows to defer the probe of the
display pipe until the downstream bridges are available, too.

Signed-off-by: Michael Tretter 

This one (and the whole series applied) still fails on Exynos boards:

[drm] Exynos DRM: using 11c0.fimd device for DMA mapping
operations
exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
OF: graph: no port node found in /soc/dsi@11c8
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address
0084
pgd = (ptrval)
[0084] *pgd=
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Not tainted
5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
Hardware name: Samsung Exynos (Flattened Device Tree)
PC is at drm_bridge_attach+0x18/0x164
LR is at exynos_dsi_bind+0x88/0xa8
pc : []lr : []psr: 2013
sp : ef0dfca8  ip : 0002  fp : c13190e0
r10:   r9 : ee46d580  r8 : c13190e0
r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5387d  Table: 4000404a  DAC: 0051
Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
Stack: (0xef0dfca8 to 0xef0e)
...
[] (drm_bridge_attach) from []
(exynos_dsi_bind+0x88/0xa8)
[] (exynos_dsi_bind) from []
(component_bind_all+0xfc/0x290)
[] (component_bind_all) from []
(exynos_drm_bind+0xe4/0x19c)
[] (exynos_drm_bind) from []
(try_to_bring_up_master+0x1e4/0x2c4)
[] (try_to_bring_up_master) from []
(component_master_add_with_match+0xd4/0x108)
[] (component_master_add_with_match) from []
(exynos_drm_platform_probe+0xe4/0x110)
[] (exynos_drm_platform_probe) from []
(platform_drv_probe+0x6c/0xa4)
[] (platform_drv_probe) from []
(really_probe+0x200/0x4fc)
[] (really_probe) from []
(driver_probe_device+0x78/0x1fc)
[] (driver_probe_device) from []
(device_driver_attach+0x58/0x60)
[] (device_driver_attach) from []
(__driver_attach+0xdc/0x174)
[] (__driver_attach) from []
(bus_for_each_dev+0x68/0xb4)
[] (bus_for_each_dev) from []
(bus_add_driver+0x158/0x214)
[] (bus_add_driver) from []
(driver_register+0x78/0x110)
[] (driver_register) from []
(exynos_drm_init+0xe4/0x118)
[] (exynos_drm_init) from []
(do_one_initcall+0x8c/0x42c)
[] (do_one_initcall) from []
(kernel_init_freeable+0x190/0x1dc)
[] (kernel_init_freeable) from []
(kernel_init+0x8/0x118)
[] (kernel_init) from [] (ret_from_fork+0x14/0x20)
Exception stack(0xef0dffb0 to 0xef0dfff8)
...
---[ end trace ee27f313f9ed9da1 ]---

# arm-linux-gnueabi-addr2line -e vmlinux c0628c08
drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)

I will try to debug it a bit more today.

The above crash has been caused by lack of in_bridge initialization to
NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
another issue:

[drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
OF: graph: no port node found in /soc/dsi@11c8
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address
0280
pgd = (ptrval)
[0280] *pgd=
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted
5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
Hardware name: Samsung Exynos (Flattened Device Tree)
PC is at __mutex_lock+0x54/0xb18
LR is at lock_is_held_type+0x80/0x138
pc : []lr : []psr: 6013
sp : ef0dfd30  ip : 33937b74  fp : c13193c8
r10: c1208eec  r9 :   r8 : ee45f808
r7 : c19561a4  r6 :   r5 :   r4 : 024c
r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-23 Thread Daniel Vetter
On Thu, Feb 18, 2021 at 5:02 PM Andrzej Hajda  wrote:
>
> Hi Michael,
>
> W dniu 18.02.2021 o 09:04, Michael Tretter pisze:
> > On Wed, 10 Feb 2021 10:10:37 +0100, Frieder Schrempf wrote:
> >> On 04.02.21 18:46, Daniel Vetter wrote:
> >>> On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart 
> >>>  wrote:
>  On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:
> > On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:
> >> W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> >>> On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
>  On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> > On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:
> >> On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> >>> On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
>  W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > On 14.09.2020 22:01, Michael Tretter wrote:
> >> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> >>> On 14.09.2020 10:29, Marek Szyprowski wrote:
>  On 11.09.2020 15:54, Michael Tretter wrote:
> > Make the exynos_dsi driver a full drm bridge that can be 
> > found and
> > used
> > from other drivers.
> >
> > Other drivers can only attach to the bridge, if a mipi dsi 
> > device
> > already attached to the bridge. This allows to defer the 
> > probe of the
> > display pipe until the downstream bridges are available, 
> > too.
> >
> > Signed-off-by: Michael Tretter 
>  This one (and the whole series applied) still fails on 
>  Exynos boards:
> 
>  [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
>  operations
>  exynos-drm exynos-drm: bound 11c0.fimd (ops 
>  fimd_component_ops)
>  OF: graph: no port node found in /soc/dsi@11c8
>  8<--- cut here ---
>  Unable to handle kernel NULL pointer dereference at virtual 
>  address
>  0084
>  pgd = (ptrval)
>  [0084] *pgd=
>  Internal error: Oops: 5 [#1] PREEMPT SMP ARM
>  Modules linked in:
>  CPU: 1 PID: 1 Comm: swapper/0 Not tainted
>  5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
>  Hardware name: Samsung Exynos (Flattened Device Tree)
>  PC is at drm_bridge_attach+0x18/0x164
>  LR is at exynos_dsi_bind+0x88/0xa8
>  pc : []lr : []psr: 2013
>  sp : ef0dfca8  ip : 0002  fp : c13190e0
>  r10:   r9 : ee46d580  r8 : c13190e0
>  r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
>  r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
>  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment 
>  none
>  Control: 10c5387d  Table: 4000404a  DAC: 0051
>  Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
>  Stack: (0xef0dfca8 to 0xef0e)
>  ...
>  [] (drm_bridge_attach) from []
>  (exynos_dsi_bind+0x88/0xa8)
>  [] (exynos_dsi_bind) from []
>  (component_bind_all+0xfc/0x290)
>  [] (component_bind_all) from []
>  (exynos_drm_bind+0xe4/0x19c)
>  [] (exynos_drm_bind) from []
>  (try_to_bring_up_master+0x1e4/0x2c4)
>  [] (try_to_bring_up_master) from []
>  (component_master_add_with_match+0xd4/0x108)
>  [] (component_master_add_with_match) from 
>  []
>  (exynos_drm_platform_probe+0xe4/0x110)
>  [] (exynos_drm_platform_probe) from []
>  (platform_drv_probe+0x6c/0xa4)
>  [] (platform_drv_probe) from []
>  (really_probe+0x200/0x4fc)
>  [] (really_probe) from []
>  (driver_probe_device+0x78/0x1fc)
>  [] (driver_probe_device) from []
>  (device_driver_attach+0x58/0x60)
>  [] (device_driver_attach) from []
>  (__driver_attach+0xdc/0x174)
>  [] (__driver_attach) from []
>  (bus_for_each_dev+0x68/0xb4)
>  [] (bus_for_each_dev) from []
>  (bus_add_driver+0x158/0x214)
>  [] (bus_add_driver) from []
>  (driver_register+0x78/0x110)
>  [] (driver_register) from []
> 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-18 Thread Andrzej Hajda
Hi Michael,

W dniu 18.02.2021 o 09:04, Michael Tretter pisze:
> On Wed, 10 Feb 2021 10:10:37 +0100, Frieder Schrempf wrote:
>> On 04.02.21 18:46, Daniel Vetter wrote:
>>> On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart 
>>>  wrote:
 On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:
> On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:
>> W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
>>> On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
 On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:
>> On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
>>> On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
 W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> On 14.09.2020 22:01, Michael Tretter wrote:
>> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
>>> On 14.09.2020 10:29, Marek Szyprowski wrote:
 On 11.09.2020 15:54, Michael Tretter wrote:
> Make the exynos_dsi driver a full drm bridge that can be 
> found and
> used
> from other drivers.
>
> Other drivers can only attach to the bridge, if a mipi dsi 
> device
> already attached to the bridge. This allows to defer the 
> probe of the
> display pipe until the downstream bridges are available, too.
>
> Signed-off-by: Michael Tretter 
 This one (and the whole series applied) still fails on Exynos 
 boards:

 [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
 operations
 exynos-drm exynos-drm: bound 11c0.fimd (ops 
 fimd_component_ops)
 OF: graph: no port node found in /soc/dsi@11c8
 8<--- cut here ---
 Unable to handle kernel NULL pointer dereference at virtual 
 address
 0084
 pgd = (ptrval)
 [0084] *pgd=
 Internal error: Oops: 5 [#1] PREEMPT SMP ARM
 Modules linked in:
 CPU: 1 PID: 1 Comm: swapper/0 Not tainted
 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
 Hardware name: Samsung Exynos (Flattened Device Tree)
 PC is at drm_bridge_attach+0x18/0x164
 LR is at exynos_dsi_bind+0x88/0xa8
 pc : []lr : []psr: 2013
 sp : ef0dfca8  ip : 0002  fp : c13190e0
 r10:   r9 : ee46d580  r8 : c13190e0
 r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
 r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
 Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment 
 none
 Control: 10c5387d  Table: 4000404a  DAC: 0051
 Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
 Stack: (0xef0dfca8 to 0xef0e)
 ...
 [] (drm_bridge_attach) from []
 (exynos_dsi_bind+0x88/0xa8)
 [] (exynos_dsi_bind) from []
 (component_bind_all+0xfc/0x290)
 [] (component_bind_all) from []
 (exynos_drm_bind+0xe4/0x19c)
 [] (exynos_drm_bind) from []
 (try_to_bring_up_master+0x1e4/0x2c4)
 [] (try_to_bring_up_master) from []
 (component_master_add_with_match+0xd4/0x108)
 [] (component_master_add_with_match) from 
 []
 (exynos_drm_platform_probe+0xe4/0x110)
 [] (exynos_drm_platform_probe) from []
 (platform_drv_probe+0x6c/0xa4)
 [] (platform_drv_probe) from []
 (really_probe+0x200/0x4fc)
 [] (really_probe) from []
 (driver_probe_device+0x78/0x1fc)
 [] (driver_probe_device) from []
 (device_driver_attach+0x58/0x60)
 [] (device_driver_attach) from []
 (__driver_attach+0xdc/0x174)
 [] (__driver_attach) from []
 (bus_for_each_dev+0x68/0xb4)
 [] (bus_for_each_dev) from []
 (bus_add_driver+0x158/0x214)
 [] (bus_add_driver) from []
 (driver_register+0x78/0x110)
 [] (driver_register) from []
 (exynos_drm_init+0xe4/0x118)
 [] (exynos_drm_init) from []
 (do_one_initcall+0x8c/0x42c)
 [] (do_one_initcall) from []
 (kernel_init_freeable+0x190/0x1dc)
 [] 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-18 Thread Michael Tretter
On Wed, 10 Feb 2021 10:10:37 +0100, Frieder Schrempf wrote:
> On 04.02.21 18:46, Daniel Vetter wrote:
> > On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart 
> >  wrote:
> > > On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:
> > > > On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:
> > > > > W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> > > > > > On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
> > > > > > > On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> > > > > > > > On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:
> > > > > > > > > On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > > > > > > > > > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > > > > > > > > > > W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > > > > > > > > > > > On 14.09.2020 22:01, Michael Tretter wrote:
> > > > > > > > > > > > > On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski 
> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > On 14.09.2020 10:29, Marek Szyprowski wrote:
> > > > > > > > > > > > > > > On 11.09.2020 15:54, Michael Tretter wrote:
> > > > > > > > > > > > > > > > Make the exynos_dsi driver a full drm bridge 
> > > > > > > > > > > > > > > > that can be found and
> > > > > > > > > > > > > > > > used
> > > > > > > > > > > > > > > > from other drivers.
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Other drivers can only attach to the bridge, if 
> > > > > > > > > > > > > > > > a mipi dsi device
> > > > > > > > > > > > > > > > already attached to the bridge. This allows to 
> > > > > > > > > > > > > > > > defer the probe of the
> > > > > > > > > > > > > > > > display pipe until the downstream bridges are 
> > > > > > > > > > > > > > > > available, too.
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Signed-off-by: Michael Tretter 
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > This one (and the whole series applied) still 
> > > > > > > > > > > > > > > fails on Exynos boards:
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > [drm] Exynos DRM: using 11c0.fimd device for 
> > > > > > > > > > > > > > > DMA mapping
> > > > > > > > > > > > > > > operations
> > > > > > > > > > > > > > > exynos-drm exynos-drm: bound 11c0.fimd (ops 
> > > > > > > > > > > > > > > fimd_component_ops)
> > > > > > > > > > > > > > > OF: graph: no port node found in /soc/dsi@11c8
> > > > > > > > > > > > > > > 8<--- cut here ---
> > > > > > > > > > > > > > > Unable to handle kernel NULL pointer dereference 
> > > > > > > > > > > > > > > at virtual address
> > > > > > > > > > > > > > > 0084
> > > > > > > > > > > > > > > pgd = (ptrval)
> > > > > > > > > > > > > > > [0084] *pgd=
> > > > > > > > > > > > > > > Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > > > > > > > > > > > > > > Modules linked in:
> > > > > > > > > > > > > > > CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > > > > > > > > > > > > > > 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > > > > > > > > > > > > > > Hardware name: Samsung Exynos (Flattened Device 
> > > > > > > > > > > > > > > Tree)
> > > > > > > > > > > > > > > PC is at drm_bridge_attach+0x18/0x164
> > > > > > > > > > > > > > > LR is at exynos_dsi_bind+0x88/0xa8
> > > > > > > > > > > > > > > pc : []lr : []psr: 
> > > > > > > > > > > > > > > 2013
> > > > > > > > > > > > > > > sp : ef0dfca8  ip : 0002  fp : c13190e0
> > > > > > > > > > > > > > > r10:   r9 : ee46d580  r8 : c13190e0
> > > > > > > > > > > > > > > r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : 
> > > > > > > > > > > > > > > ef39e840
> > > > > > > > > > > > > > > r3 :   r2 : 0018  r1 : ef39e888  r0 : 
> > > > > > > > > > > > > > > ef39e840
> > > > > > > > > > > > > > > Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA 
> > > > > > > > > > > > > > > ARM  Segment none
> > > > > > > > > > > > > > > Control: 10c5387d  Table: 4000404a  DAC: 0051
> > > > > > > > > > > > > > > Process swapper/0 (pid: 1, stack limit = 
> > > > > > > > > > > > > > > 0x(ptrval))
> > > > > > > > > > > > > > > Stack: (0xef0dfca8 to 0xef0e)
> > > > > > > > > > > > > > > ...
> > > > > > > > > > > > > > > [] (drm_bridge_attach) from []
> > > > > > > > > > > > > > > (exynos_dsi_bind+0x88/0xa8)
> > > > > > > > > > > > > > > [] (exynos_dsi_bind) from []
> > > > > > > > > > > > > > > (component_bind_all+0xfc/0x290)
> > > > > > > > > > > > > > > [] (component_bind_all) from 
> > > > > > > > > > > > > > > []
> > > > > > > > > > > > > > > (exynos_drm_bind+0xe4/0x19c)
> > > > > > > > > > > > > > > [] (exynos_drm_bind) from []
> > > > > > > > > > > > > > > (try_to_bring_up_master+0x1e4/0x2c4)
> > > > > > > > > > > > > > > [] (try_to_bring_up_master) from 
> > > > > > > > > > > > > > > []
> > > > > > > > > > > > > > > (component_master_add_with_match+0xd4/0x108)
> > > > > > > > > > > > > > > [] (component_master_add_with_match) 
> > > > > > > > > > > > > > > from []
> > > > > > > > > > > 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-10 Thread Frieder Schrempf

On 04.02.21 18:46, Daniel Vetter wrote:

On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart
 wrote:


Hi Daniel,

On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:

On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:

W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:

On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:

On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:

On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:

On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:

On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:

W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:

On 14.09.2020 22:01, Michael Tretter wrote:

On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:

On 14.09.2020 10:29, Marek Szyprowski wrote:

On 11.09.2020 15:54, Michael Tretter wrote:

Make the exynos_dsi driver a full drm bridge that can be found and
used
from other drivers.

Other drivers can only attach to the bridge, if a mipi dsi device
already attached to the bridge. This allows to defer the probe of the
display pipe until the downstream bridges are available, too.

Signed-off-by: Michael Tretter 

This one (and the whole series applied) still fails on Exynos boards:

[drm] Exynos DRM: using 11c0.fimd device for DMA mapping
operations
exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
OF: graph: no port node found in /soc/dsi@11c8
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address
0084
pgd = (ptrval)
[0084] *pgd=
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Not tainted
5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
Hardware name: Samsung Exynos (Flattened Device Tree)
PC is at drm_bridge_attach+0x18/0x164
LR is at exynos_dsi_bind+0x88/0xa8
pc : []lr : []psr: 2013
sp : ef0dfca8  ip : 0002  fp : c13190e0
r10:   r9 : ee46d580  r8 : c13190e0
r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5387d  Table: 4000404a  DAC: 0051
Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
Stack: (0xef0dfca8 to 0xef0e)
...
[] (drm_bridge_attach) from []
(exynos_dsi_bind+0x88/0xa8)
[] (exynos_dsi_bind) from []
(component_bind_all+0xfc/0x290)
[] (component_bind_all) from []
(exynos_drm_bind+0xe4/0x19c)
[] (exynos_drm_bind) from []
(try_to_bring_up_master+0x1e4/0x2c4)
[] (try_to_bring_up_master) from []
(component_master_add_with_match+0xd4/0x108)
[] (component_master_add_with_match) from []
(exynos_drm_platform_probe+0xe4/0x110)
[] (exynos_drm_platform_probe) from []
(platform_drv_probe+0x6c/0xa4)
[] (platform_drv_probe) from []
(really_probe+0x200/0x4fc)
[] (really_probe) from []
(driver_probe_device+0x78/0x1fc)
[] (driver_probe_device) from []
(device_driver_attach+0x58/0x60)
[] (device_driver_attach) from []
(__driver_attach+0xdc/0x174)
[] (__driver_attach) from []
(bus_for_each_dev+0x68/0xb4)
[] (bus_for_each_dev) from []
(bus_add_driver+0x158/0x214)
[] (bus_add_driver) from []
(driver_register+0x78/0x110)
[] (driver_register) from []
(exynos_drm_init+0xe4/0x118)
[] (exynos_drm_init) from []
(do_one_initcall+0x8c/0x42c)
[] (do_one_initcall) from []
(kernel_init_freeable+0x190/0x1dc)
[] (kernel_init_freeable) from []
(kernel_init+0x8/0x118)
[] (kernel_init) from [] (ret_from_fork+0x14/0x20)
Exception stack(0xef0dffb0 to 0xef0dfff8)
...
---[ end trace ee27f313f9ed9da1 ]---

# arm-linux-gnueabi-addr2line -e vmlinux c0628c08
drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)

I will try to debug it a bit more today.

The above crash has been caused by lack of in_bridge initialization to
NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
another issue:

[drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
OF: graph: no port node found in /soc/dsi@11c8
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address
0280
pgd = (ptrval)
[0280] *pgd=
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted
5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
Hardware name: Samsung Exynos (Flattened Device Tree)
PC is at __mutex_lock+0x54/0xb18
LR is at lock_is_held_type+0x80/0x138
pc : []lr : []psr: 6013
sp : ef0dfd30  ip : 33937b74  fp : c13193c8
r10: c1208eec  r9 :   r8 : ee45f808
r7 : c19561a4  r6 :   r5 :   r4 : 024c
r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5387d  Table: 4000404a  DAC: 0051
Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
Stack: (0xef0dfd30 to 0xef0e)
...
[] (__mutex_lock) from []
(mutex_lock_nested+0x1c/0x24)
[] (mutex_lock_nested) from 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Daniel Vetter
On Thu, Feb 4, 2021 at 6:26 PM Laurent Pinchart
 wrote:
>
> Hi Daniel,
>
> On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:
> > On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:
> > > W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> > > > On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
> > > >> On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> > > >>> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:
> > >  On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > > > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > > >> W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > > >>> On 14.09.2020 22:01, Michael Tretter wrote:
> > >  On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > > > On 14.09.2020 10:29, Marek Szyprowski wrote:
> > > >> On 11.09.2020 15:54, Michael Tretter wrote:
> > > >>> Make the exynos_dsi driver a full drm bridge that can be 
> > > >>> found and
> > > >>> used
> > > >>> from other drivers.
> > > >>>
> > > >>> Other drivers can only attach to the bridge, if a mipi dsi 
> > > >>> device
> > > >>> already attached to the bridge. This allows to defer the 
> > > >>> probe of the
> > > >>> display pipe until the downstream bridges are available, too.
> > > >>>
> > > >>> Signed-off-by: Michael Tretter 
> > > >> This one (and the whole series applied) still fails on Exynos 
> > > >> boards:
> > > >>
> > > >> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
> > > >> operations
> > > >> exynos-drm exynos-drm: bound 11c0.fimd (ops 
> > > >> fimd_component_ops)
> > > >> OF: graph: no port node found in /soc/dsi@11c8
> > > >> 8<--- cut here ---
> > > >> Unable to handle kernel NULL pointer dereference at virtual 
> > > >> address
> > > >> 0084
> > > >> pgd = (ptrval)
> > > >> [0084] *pgd=
> > > >> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > > >> Modules linked in:
> > > >> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > > >> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > > >> Hardware name: Samsung Exynos (Flattened Device Tree)
> > > >> PC is at drm_bridge_attach+0x18/0x164
> > > >> LR is at exynos_dsi_bind+0x88/0xa8
> > > >> pc : []lr : []psr: 2013
> > > >> sp : ef0dfca8  ip : 0002  fp : c13190e0
> > > >> r10:   r9 : ee46d580  r8 : c13190e0
> > > >> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> > > >> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> > > >> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment 
> > > >> none
> > > >> Control: 10c5387d  Table: 4000404a  DAC: 0051
> > > >> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> > > >> Stack: (0xef0dfca8 to 0xef0e)
> > > >> ...
> > > >> [] (drm_bridge_attach) from []
> > > >> (exynos_dsi_bind+0x88/0xa8)
> > > >> [] (exynos_dsi_bind) from []
> > > >> (component_bind_all+0xfc/0x290)
> > > >> [] (component_bind_all) from []
> > > >> (exynos_drm_bind+0xe4/0x19c)
> > > >> [] (exynos_drm_bind) from []
> > > >> (try_to_bring_up_master+0x1e4/0x2c4)
> > > >> [] (try_to_bring_up_master) from []
> > > >> (component_master_add_with_match+0xd4/0x108)
> > > >> [] (component_master_add_with_match) from 
> > > >> []
> > > >> (exynos_drm_platform_probe+0xe4/0x110)
> > > >> [] (exynos_drm_platform_probe) from []
> > > >> (platform_drv_probe+0x6c/0xa4)
> > > >> [] (platform_drv_probe) from []
> > > >> (really_probe+0x200/0x4fc)
> > > >> [] (really_probe) from []
> > > >> (driver_probe_device+0x78/0x1fc)
> > > >> [] (driver_probe_device) from []
> > > >> (device_driver_attach+0x58/0x60)
> > > >> [] (device_driver_attach) from []
> > > >> (__driver_attach+0xdc/0x174)
> > > >> [] (__driver_attach) from []
> > > >> (bus_for_each_dev+0x68/0xb4)
> > > >> [] (bus_for_each_dev) from []
> > > >> (bus_add_driver+0x158/0x214)
> > > >> [] (bus_add_driver) from []
> > > >> (driver_register+0x78/0x110)
> > > >> [] (driver_register) from []
> > > >> (exynos_drm_init+0xe4/0x118)
> > > >> [] (exynos_drm_init) from []
> > > >> (do_one_initcall+0x8c/0x42c)
> > > >> [] (do_one_initcall) from []
> > > >> (kernel_init_freeable+0x190/0x1dc)
> > > >> [] (kernel_init_freeable) from []
> > > >> (kernel_init+0x8/0x118)
> > > >> [] (kernel_init) from [] 
> > > >> (ret_from_fork+0x14/0x20)
> > > >> 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Laurent Pinchart
Hi Daniel,

On Thu, Feb 04, 2021 at 06:19:22PM +0100, Daniel Vetter wrote:
> On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda wrote:
> > W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> > > On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
> > >> On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> > >>> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter wrote:
> >  On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > >> W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > >>> On 14.09.2020 22:01, Michael Tretter wrote:
> >  On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > > On 14.09.2020 10:29, Marek Szyprowski wrote:
> > >> On 11.09.2020 15:54, Michael Tretter wrote:
> > >>> Make the exynos_dsi driver a full drm bridge that can be found 
> > >>> and
> > >>> used
> > >>> from other drivers.
> > >>>
> > >>> Other drivers can only attach to the bridge, if a mipi dsi 
> > >>> device
> > >>> already attached to the bridge. This allows to defer the probe 
> > >>> of the
> > >>> display pipe until the downstream bridges are available, too.
> > >>>
> > >>> Signed-off-by: Michael Tretter 
> > >> This one (and the whole series applied) still fails on Exynos 
> > >> boards:
> > >>
> > >> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
> > >> operations
> > >> exynos-drm exynos-drm: bound 11c0.fimd (ops 
> > >> fimd_component_ops)
> > >> OF: graph: no port node found in /soc/dsi@11c8
> > >> 8<--- cut here ---
> > >> Unable to handle kernel NULL pointer dereference at virtual 
> > >> address
> > >> 0084
> > >> pgd = (ptrval)
> > >> [0084] *pgd=
> > >> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > >> Modules linked in:
> > >> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > >> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > >> Hardware name: Samsung Exynos (Flattened Device Tree)
> > >> PC is at drm_bridge_attach+0x18/0x164
> > >> LR is at exynos_dsi_bind+0x88/0xa8
> > >> pc : []lr : []psr: 2013
> > >> sp : ef0dfca8  ip : 0002  fp : c13190e0
> > >> r10:   r9 : ee46d580  r8 : c13190e0
> > >> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> > >> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> > >> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> > >> Control: 10c5387d  Table: 4000404a  DAC: 0051
> > >> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> > >> Stack: (0xef0dfca8 to 0xef0e)
> > >> ...
> > >> [] (drm_bridge_attach) from []
> > >> (exynos_dsi_bind+0x88/0xa8)
> > >> [] (exynos_dsi_bind) from []
> > >> (component_bind_all+0xfc/0x290)
> > >> [] (component_bind_all) from []
> > >> (exynos_drm_bind+0xe4/0x19c)
> > >> [] (exynos_drm_bind) from []
> > >> (try_to_bring_up_master+0x1e4/0x2c4)
> > >> [] (try_to_bring_up_master) from []
> > >> (component_master_add_with_match+0xd4/0x108)
> > >> [] (component_master_add_with_match) from []
> > >> (exynos_drm_platform_probe+0xe4/0x110)
> > >> [] (exynos_drm_platform_probe) from []
> > >> (platform_drv_probe+0x6c/0xa4)
> > >> [] (platform_drv_probe) from []
> > >> (really_probe+0x200/0x4fc)
> > >> [] (really_probe) from []
> > >> (driver_probe_device+0x78/0x1fc)
> > >> [] (driver_probe_device) from []
> > >> (device_driver_attach+0x58/0x60)
> > >> [] (device_driver_attach) from []
> > >> (__driver_attach+0xdc/0x174)
> > >> [] (__driver_attach) from []
> > >> (bus_for_each_dev+0x68/0xb4)
> > >> [] (bus_for_each_dev) from []
> > >> (bus_add_driver+0x158/0x214)
> > >> [] (bus_add_driver) from []
> > >> (driver_register+0x78/0x110)
> > >> [] (driver_register) from []
> > >> (exynos_drm_init+0xe4/0x118)
> > >> [] (exynos_drm_init) from []
> > >> (do_one_initcall+0x8c/0x42c)
> > >> [] (do_one_initcall) from []
> > >> (kernel_init_freeable+0x190/0x1dc)
> > >> [] (kernel_init_freeable) from []
> > >> (kernel_init+0x8/0x118)
> > >> [] (kernel_init) from [] 
> > >> (ret_from_fork+0x14/0x20)
> > >> Exception stack(0xef0dffb0 to 0xef0dfff8)
> > >> ...
> > >> ---[ end trace ee27f313f9ed9da1 ]---
> > >>
> > >> # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> > >> drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> > >>
> > 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Daniel Vetter
On Thu, Feb 4, 2021 at 5:28 PM Andrzej Hajda  wrote:
>
>
> W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> > On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
> >> On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> >>> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter  
> >>> wrote:
>  On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> >> W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> >>> On 14.09.2020 22:01, Michael Tretter wrote:
>  On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > On 14.09.2020 10:29, Marek Szyprowski wrote:
> >> On 11.09.2020 15:54, Michael Tretter wrote:
> >>> Make the exynos_dsi driver a full drm bridge that can be found and
> >>> used
> >>> from other drivers.
> >>>
> >>> Other drivers can only attach to the bridge, if a mipi dsi device
> >>> already attached to the bridge. This allows to defer the probe of 
> >>> the
> >>> display pipe until the downstream bridges are available, too.
> >>>
> >>> Signed-off-by: Michael Tretter 
> >> This one (and the whole series applied) still fails on Exynos 
> >> boards:
> >>
> >> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
> >> operations
> >> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> >> OF: graph: no port node found in /soc/dsi@11c8
> >> 8<--- cut here ---
> >> Unable to handle kernel NULL pointer dereference at virtual address
> >> 0084
> >> pgd = (ptrval)
> >> [0084] *pgd=
> >> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> >> Modules linked in:
> >> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> >> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> >> Hardware name: Samsung Exynos (Flattened Device Tree)
> >> PC is at drm_bridge_attach+0x18/0x164
> >> LR is at exynos_dsi_bind+0x88/0xa8
> >> pc : []lr : []psr: 2013
> >> sp : ef0dfca8  ip : 0002  fp : c13190e0
> >> r10:   r9 : ee46d580  r8 : c13190e0
> >> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> >> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> >> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> >> Control: 10c5387d  Table: 4000404a  DAC: 0051
> >> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> >> Stack: (0xef0dfca8 to 0xef0e)
> >> ...
> >> [] (drm_bridge_attach) from []
> >> (exynos_dsi_bind+0x88/0xa8)
> >> [] (exynos_dsi_bind) from []
> >> (component_bind_all+0xfc/0x290)
> >> [] (component_bind_all) from []
> >> (exynos_drm_bind+0xe4/0x19c)
> >> [] (exynos_drm_bind) from []
> >> (try_to_bring_up_master+0x1e4/0x2c4)
> >> [] (try_to_bring_up_master) from []
> >> (component_master_add_with_match+0xd4/0x108)
> >> [] (component_master_add_with_match) from []
> >> (exynos_drm_platform_probe+0xe4/0x110)
> >> [] (exynos_drm_platform_probe) from []
> >> (platform_drv_probe+0x6c/0xa4)
> >> [] (platform_drv_probe) from []
> >> (really_probe+0x200/0x4fc)
> >> [] (really_probe) from []
> >> (driver_probe_device+0x78/0x1fc)
> >> [] (driver_probe_device) from []
> >> (device_driver_attach+0x58/0x60)
> >> [] (device_driver_attach) from []
> >> (__driver_attach+0xdc/0x174)
> >> [] (__driver_attach) from []
> >> (bus_for_each_dev+0x68/0xb4)
> >> [] (bus_for_each_dev) from []
> >> (bus_add_driver+0x158/0x214)
> >> [] (bus_add_driver) from []
> >> (driver_register+0x78/0x110)
> >> [] (driver_register) from []
> >> (exynos_drm_init+0xe4/0x118)
> >> [] (exynos_drm_init) from []
> >> (do_one_initcall+0x8c/0x42c)
> >> [] (do_one_initcall) from []
> >> (kernel_init_freeable+0x190/0x1dc)
> >> [] (kernel_init_freeable) from []
> >> (kernel_init+0x8/0x118)
> >> [] (kernel_init) from [] 
> >> (ret_from_fork+0x14/0x20)
> >> Exception stack(0xef0dffb0 to 0xef0dfff8)
> >> ...
> >> ---[ end trace ee27f313f9ed9da1 ]---
> >>
> >> # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> >> drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> >>
> >> I will try to debug it a bit more today.
> > The above crash has been caused by lack of in_bridge initialization 
> > to
> > NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
> > another issue:
> >
> > [drm] Exynos DRM: using 11c0.fimd device for DMA 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Andrzej Hajda

W dniu 04.02.2021 o 17:05, Daniel Vetter pisze:
> On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
>> On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
>>> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter  
>>> wrote:
 On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
>> W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
>>> On 14.09.2020 22:01, Michael Tretter wrote:
 On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> On 14.09.2020 10:29, Marek Szyprowski wrote:
>> On 11.09.2020 15:54, Michael Tretter wrote:
>>> Make the exynos_dsi driver a full drm bridge that can be found and
>>> used
>>> from other drivers.
>>>
>>> Other drivers can only attach to the bridge, if a mipi dsi device
>>> already attached to the bridge. This allows to defer the probe of 
>>> the
>>> display pipe until the downstream bridges are available, too.
>>>
>>> Signed-off-by: Michael Tretter 
>> This one (and the whole series applied) still fails on Exynos boards:
>>
>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
>> operations
>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
>> OF: graph: no port node found in /soc/dsi@11c8
>> 8<--- cut here ---
>> Unable to handle kernel NULL pointer dereference at virtual address
>> 0084
>> pgd = (ptrval)
>> [0084] *pgd=
>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
>> Modules linked in:
>> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
>> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
>> Hardware name: Samsung Exynos (Flattened Device Tree)
>> PC is at drm_bridge_attach+0x18/0x164
>> LR is at exynos_dsi_bind+0x88/0xa8
>> pc : []lr : []psr: 2013
>> sp : ef0dfca8  ip : 0002  fp : c13190e0
>> r10:   r9 : ee46d580  r8 : c13190e0
>> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
>> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
>> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
>> Control: 10c5387d  Table: 4000404a  DAC: 0051
>> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
>> Stack: (0xef0dfca8 to 0xef0e)
>> ...
>> [] (drm_bridge_attach) from []
>> (exynos_dsi_bind+0x88/0xa8)
>> [] (exynos_dsi_bind) from []
>> (component_bind_all+0xfc/0x290)
>> [] (component_bind_all) from []
>> (exynos_drm_bind+0xe4/0x19c)
>> [] (exynos_drm_bind) from []
>> (try_to_bring_up_master+0x1e4/0x2c4)
>> [] (try_to_bring_up_master) from []
>> (component_master_add_with_match+0xd4/0x108)
>> [] (component_master_add_with_match) from []
>> (exynos_drm_platform_probe+0xe4/0x110)
>> [] (exynos_drm_platform_probe) from []
>> (platform_drv_probe+0x6c/0xa4)
>> [] (platform_drv_probe) from []
>> (really_probe+0x200/0x4fc)
>> [] (really_probe) from []
>> (driver_probe_device+0x78/0x1fc)
>> [] (driver_probe_device) from []
>> (device_driver_attach+0x58/0x60)
>> [] (device_driver_attach) from []
>> (__driver_attach+0xdc/0x174)
>> [] (__driver_attach) from []
>> (bus_for_each_dev+0x68/0xb4)
>> [] (bus_for_each_dev) from []
>> (bus_add_driver+0x158/0x214)
>> [] (bus_add_driver) from []
>> (driver_register+0x78/0x110)
>> [] (driver_register) from []
>> (exynos_drm_init+0xe4/0x118)
>> [] (exynos_drm_init) from []
>> (do_one_initcall+0x8c/0x42c)
>> [] (do_one_initcall) from []
>> (kernel_init_freeable+0x190/0x1dc)
>> [] (kernel_init_freeable) from []
>> (kernel_init+0x8/0x118)
>> [] (kernel_init) from [] 
>> (ret_from_fork+0x14/0x20)
>> Exception stack(0xef0dffb0 to 0xef0dfff8)
>> ...
>> ---[ end trace ee27f313f9ed9da1 ]---
>>
>> # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
>> drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
>>
>> I will try to debug it a bit more today.
> The above crash has been caused by lack of in_bridge initialization to
> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
> another issue:
>
> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping 
> operations
> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> OF: graph: no port node found in /soc/dsi@11c8
> 8<--- cut here ---
> Unable to handle kernel NULL pointer dereference at virtual address

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Daniel Vetter
On Thu, Feb 04, 2021 at 11:56:32AM +0100, Michael Tretter wrote:
> On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> > On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter  
> > wrote:
> > >
> > > On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > > > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > > > > W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > > > > > On 14.09.2020 22:01, Michael Tretter wrote:
> > > > > >> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > > > > >>> On 14.09.2020 10:29, Marek Szyprowski wrote:
> > > > >  On 11.09.2020 15:54, Michael Tretter wrote:
> > > > > > Make the exynos_dsi driver a full drm bridge that can be found 
> > > > > > and
> > > > > > used
> > > > > > from other drivers.
> > > > > >
> > > > > > Other drivers can only attach to the bridge, if a mipi dsi 
> > > > > > device
> > > > > > already attached to the bridge. This allows to defer the probe 
> > > > > > of the
> > > > > > display pipe until the downstream bridges are available, too.
> > > > > >
> > > > > > Signed-off-by: Michael Tretter 
> > > > >  This one (and the whole series applied) still fails on Exynos 
> > > > >  boards:
> > > > > 
> > > > >  [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
> > > > >  operations
> > > > >  exynos-drm exynos-drm: bound 11c0.fimd (ops 
> > > > >  fimd_component_ops)
> > > > >  OF: graph: no port node found in /soc/dsi@11c8
> > > > >  8<--- cut here ---
> > > > >  Unable to handle kernel NULL pointer dereference at virtual 
> > > > >  address
> > > > >  0084
> > > > >  pgd = (ptrval)
> > > > >  [0084] *pgd=
> > > > >  Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > > > >  Modules linked in:
> > > > >  CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > > > >  5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > > > >  Hardware name: Samsung Exynos (Flattened Device Tree)
> > > > >  PC is at drm_bridge_attach+0x18/0x164
> > > > >  LR is at exynos_dsi_bind+0x88/0xa8
> > > > >  pc : []lr : []psr: 2013
> > > > >  sp : ef0dfca8  ip : 0002  fp : c13190e0
> > > > >  r10:   r9 : ee46d580  r8 : c13190e0
> > > > >  r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> > > > >  r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> > > > >  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> > > > >  Control: 10c5387d  Table: 4000404a  DAC: 0051
> > > > >  Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> > > > >  Stack: (0xef0dfca8 to 0xef0e)
> > > > >  ...
> > > > >  [] (drm_bridge_attach) from []
> > > > >  (exynos_dsi_bind+0x88/0xa8)
> > > > >  [] (exynos_dsi_bind) from []
> > > > >  (component_bind_all+0xfc/0x290)
> > > > >  [] (component_bind_all) from []
> > > > >  (exynos_drm_bind+0xe4/0x19c)
> > > > >  [] (exynos_drm_bind) from []
> > > > >  (try_to_bring_up_master+0x1e4/0x2c4)
> > > > >  [] (try_to_bring_up_master) from []
> > > > >  (component_master_add_with_match+0xd4/0x108)
> > > > >  [] (component_master_add_with_match) from []
> > > > >  (exynos_drm_platform_probe+0xe4/0x110)
> > > > >  [] (exynos_drm_platform_probe) from []
> > > > >  (platform_drv_probe+0x6c/0xa4)
> > > > >  [] (platform_drv_probe) from []
> > > > >  (really_probe+0x200/0x4fc)
> > > > >  [] (really_probe) from []
> > > > >  (driver_probe_device+0x78/0x1fc)
> > > > >  [] (driver_probe_device) from []
> > > > >  (device_driver_attach+0x58/0x60)
> > > > >  [] (device_driver_attach) from []
> > > > >  (__driver_attach+0xdc/0x174)
> > > > >  [] (__driver_attach) from []
> > > > >  (bus_for_each_dev+0x68/0xb4)
> > > > >  [] (bus_for_each_dev) from []
> > > > >  (bus_add_driver+0x158/0x214)
> > > > >  [] (bus_add_driver) from []
> > > > >  (driver_register+0x78/0x110)
> > > > >  [] (driver_register) from []
> > > > >  (exynos_drm_init+0xe4/0x118)
> > > > >  [] (exynos_drm_init) from []
> > > > >  (do_one_initcall+0x8c/0x42c)
> > > > >  [] (do_one_initcall) from []
> > > > >  (kernel_init_freeable+0x190/0x1dc)
> > > > >  [] (kernel_init_freeable) from []
> > > > >  (kernel_init+0x8/0x118)
> > > > >  [] (kernel_init) from [] 
> > > > >  (ret_from_fork+0x14/0x20)
> > > > >  Exception stack(0xef0dffb0 to 0xef0dfff8)
> > > > >  ...
> > > > >  ---[ end trace ee27f313f9ed9da1 ]---
> > > > > 
> > > > >  # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> > > > >  drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> > > > > 
> > > > >  I will try to debug it a bit more today.
> > > > > >>> The above crash has been caused by lack of in_bridge 
> > > > > >>> initialization to
> > > > > >>> NULL in exynos_dsi_bind() in this 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Michael Tretter
On Thu, 04 Feb 2021 11:17:49 +0100, Daniel Vetter wrote:
> On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter  
> wrote:
> >
> > On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > > > W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > > > > On 14.09.2020 22:01, Michael Tretter wrote:
> > > > >> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > > > >>> On 14.09.2020 10:29, Marek Szyprowski wrote:
> > > >  On 11.09.2020 15:54, Michael Tretter wrote:
> > > > > Make the exynos_dsi driver a full drm bridge that can be found and
> > > > > used
> > > > > from other drivers.
> > > > >
> > > > > Other drivers can only attach to the bridge, if a mipi dsi device
> > > > > already attached to the bridge. This allows to defer the probe of 
> > > > > the
> > > > > display pipe until the downstream bridges are available, too.
> > > > >
> > > > > Signed-off-by: Michael Tretter 
> > > >  This one (and the whole series applied) still fails on Exynos 
> > > >  boards:
> > > > 
> > > >  [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
> > > >  operations
> > > >  exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> > > >  OF: graph: no port node found in /soc/dsi@11c8
> > > >  8<--- cut here ---
> > > >  Unable to handle kernel NULL pointer dereference at virtual address
> > > >  0084
> > > >  pgd = (ptrval)
> > > >  [0084] *pgd=
> > > >  Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > > >  Modules linked in:
> > > >  CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > > >  5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > > >  Hardware name: Samsung Exynos (Flattened Device Tree)
> > > >  PC is at drm_bridge_attach+0x18/0x164
> > > >  LR is at exynos_dsi_bind+0x88/0xa8
> > > >  pc : []lr : []psr: 2013
> > > >  sp : ef0dfca8  ip : 0002  fp : c13190e0
> > > >  r10:   r9 : ee46d580  r8 : c13190e0
> > > >  r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> > > >  r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> > > >  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> > > >  Control: 10c5387d  Table: 4000404a  DAC: 0051
> > > >  Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> > > >  Stack: (0xef0dfca8 to 0xef0e)
> > > >  ...
> > > >  [] (drm_bridge_attach) from []
> > > >  (exynos_dsi_bind+0x88/0xa8)
> > > >  [] (exynos_dsi_bind) from []
> > > >  (component_bind_all+0xfc/0x290)
> > > >  [] (component_bind_all) from []
> > > >  (exynos_drm_bind+0xe4/0x19c)
> > > >  [] (exynos_drm_bind) from []
> > > >  (try_to_bring_up_master+0x1e4/0x2c4)
> > > >  [] (try_to_bring_up_master) from []
> > > >  (component_master_add_with_match+0xd4/0x108)
> > > >  [] (component_master_add_with_match) from []
> > > >  (exynos_drm_platform_probe+0xe4/0x110)
> > > >  [] (exynos_drm_platform_probe) from []
> > > >  (platform_drv_probe+0x6c/0xa4)
> > > >  [] (platform_drv_probe) from []
> > > >  (really_probe+0x200/0x4fc)
> > > >  [] (really_probe) from []
> > > >  (driver_probe_device+0x78/0x1fc)
> > > >  [] (driver_probe_device) from []
> > > >  (device_driver_attach+0x58/0x60)
> > > >  [] (device_driver_attach) from []
> > > >  (__driver_attach+0xdc/0x174)
> > > >  [] (__driver_attach) from []
> > > >  (bus_for_each_dev+0x68/0xb4)
> > > >  [] (bus_for_each_dev) from []
> > > >  (bus_add_driver+0x158/0x214)
> > > >  [] (bus_add_driver) from []
> > > >  (driver_register+0x78/0x110)
> > > >  [] (driver_register) from []
> > > >  (exynos_drm_init+0xe4/0x118)
> > > >  [] (exynos_drm_init) from []
> > > >  (do_one_initcall+0x8c/0x42c)
> > > >  [] (do_one_initcall) from []
> > > >  (kernel_init_freeable+0x190/0x1dc)
> > > >  [] (kernel_init_freeable) from []
> > > >  (kernel_init+0x8/0x118)
> > > >  [] (kernel_init) from [] 
> > > >  (ret_from_fork+0x14/0x20)
> > > >  Exception stack(0xef0dffb0 to 0xef0dfff8)
> > > >  ...
> > > >  ---[ end trace ee27f313f9ed9da1 ]---
> > > > 
> > > >  # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> > > >  drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> > > > 
> > > >  I will try to debug it a bit more today.
> > > > >>> The above crash has been caused by lack of in_bridge initialization 
> > > > >>> to
> > > > >>> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
> > > > >>> another issue:
> > > > >>>
> > > > >>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping 
> > > > >>> operations
> > > > >>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> > > > >>> OF: graph: no port node found in /soc/dsi@11c8
> > > > >>> 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-04 Thread Daniel Vetter
On Wed, Feb 3, 2021 at 9:32 PM Michael Tretter  wrote:
>
> On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> > On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > > W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > > > On 14.09.2020 22:01, Michael Tretter wrote:
> > > >> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > > >>> On 14.09.2020 10:29, Marek Szyprowski wrote:
> > >  On 11.09.2020 15:54, Michael Tretter wrote:
> > > > Make the exynos_dsi driver a full drm bridge that can be found and
> > > > used
> > > > from other drivers.
> > > >
> > > > Other drivers can only attach to the bridge, if a mipi dsi device
> > > > already attached to the bridge. This allows to defer the probe of 
> > > > the
> > > > display pipe until the downstream bridges are available, too.
> > > >
> > > > Signed-off-by: Michael Tretter 
> > >  This one (and the whole series applied) still fails on Exynos boards:
> > > 
> > >  [drm] Exynos DRM: using 11c0.fimd device for DMA mapping
> > >  operations
> > >  exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> > >  OF: graph: no port node found in /soc/dsi@11c8
> > >  8<--- cut here ---
> > >  Unable to handle kernel NULL pointer dereference at virtual address
> > >  0084
> > >  pgd = (ptrval)
> > >  [0084] *pgd=
> > >  Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > >  Modules linked in:
> > >  CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > >  5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > >  Hardware name: Samsung Exynos (Flattened Device Tree)
> > >  PC is at drm_bridge_attach+0x18/0x164
> > >  LR is at exynos_dsi_bind+0x88/0xa8
> > >  pc : []lr : []psr: 2013
> > >  sp : ef0dfca8  ip : 0002  fp : c13190e0
> > >  r10:   r9 : ee46d580  r8 : c13190e0
> > >  r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> > >  r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> > >  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> > >  Control: 10c5387d  Table: 4000404a  DAC: 0051
> > >  Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> > >  Stack: (0xef0dfca8 to 0xef0e)
> > >  ...
> > >  [] (drm_bridge_attach) from []
> > >  (exynos_dsi_bind+0x88/0xa8)
> > >  [] (exynos_dsi_bind) from []
> > >  (component_bind_all+0xfc/0x290)
> > >  [] (component_bind_all) from []
> > >  (exynos_drm_bind+0xe4/0x19c)
> > >  [] (exynos_drm_bind) from []
> > >  (try_to_bring_up_master+0x1e4/0x2c4)
> > >  [] (try_to_bring_up_master) from []
> > >  (component_master_add_with_match+0xd4/0x108)
> > >  [] (component_master_add_with_match) from []
> > >  (exynos_drm_platform_probe+0xe4/0x110)
> > >  [] (exynos_drm_platform_probe) from []
> > >  (platform_drv_probe+0x6c/0xa4)
> > >  [] (platform_drv_probe) from []
> > >  (really_probe+0x200/0x4fc)
> > >  [] (really_probe) from []
> > >  (driver_probe_device+0x78/0x1fc)
> > >  [] (driver_probe_device) from []
> > >  (device_driver_attach+0x58/0x60)
> > >  [] (device_driver_attach) from []
> > >  (__driver_attach+0xdc/0x174)
> > >  [] (__driver_attach) from []
> > >  (bus_for_each_dev+0x68/0xb4)
> > >  [] (bus_for_each_dev) from []
> > >  (bus_add_driver+0x158/0x214)
> > >  [] (bus_add_driver) from []
> > >  (driver_register+0x78/0x110)
> > >  [] (driver_register) from []
> > >  (exynos_drm_init+0xe4/0x118)
> > >  [] (exynos_drm_init) from []
> > >  (do_one_initcall+0x8c/0x42c)
> > >  [] (do_one_initcall) from []
> > >  (kernel_init_freeable+0x190/0x1dc)
> > >  [] (kernel_init_freeable) from []
> > >  (kernel_init+0x8/0x118)
> > >  [] (kernel_init) from [] 
> > >  (ret_from_fork+0x14/0x20)
> > >  Exception stack(0xef0dffb0 to 0xef0dfff8)
> > >  ...
> > >  ---[ end trace ee27f313f9ed9da1 ]---
> > > 
> > >  # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> > >  drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> > > 
> > >  I will try to debug it a bit more today.
> > > >>> The above crash has been caused by lack of in_bridge initialization to
> > > >>> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
> > > >>> another issue:
> > > >>>
> > > >>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping 
> > > >>> operations
> > > >>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> > > >>> OF: graph: no port node found in /soc/dsi@11c8
> > > >>> 8<--- cut here ---
> > > >>> Unable to handle kernel NULL pointer dereference at virtual address
> > > >>> 0280
> > > >>> pgd = (ptrval)
> > > >>> [0280] *pgd=
> > > >>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > > >>> Modules linked in:
> > > >>> CPU: 0 PID: 1 Comm: 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-03 Thread Michael Tretter
On Mon, 01 Feb 2021 17:33:14 +0100, Michael Tretter wrote:
> On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> > W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > > On 14.09.2020 22:01, Michael Tretter wrote:
> > >> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> > >>> On 14.09.2020 10:29, Marek Szyprowski wrote:
> >  On 11.09.2020 15:54, Michael Tretter wrote:
> > > Make the exynos_dsi driver a full drm bridge that can be found and 
> > > used
> > > from other drivers.
> > >
> > > Other drivers can only attach to the bridge, if a mipi dsi device
> > > already attached to the bridge. This allows to defer the probe of the
> > > display pipe until the downstream bridges are available, too.
> > >
> > > Signed-off-by: Michael Tretter 
> >  This one (and the whole series applied) still fails on Exynos boards:
> > 
> >  [drm] Exynos DRM: using 11c0.fimd device for DMA mapping 
> >  operations
> >  exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> >  OF: graph: no port node found in /soc/dsi@11c8
> >  8<--- cut here ---
> >  Unable to handle kernel NULL pointer dereference at virtual address 
> >  0084
> >  pgd = (ptrval)
> >  [0084] *pgd=
> >  Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> >  Modules linked in:
> >  CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> >  5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> >  Hardware name: Samsung Exynos (Flattened Device Tree)
> >  PC is at drm_bridge_attach+0x18/0x164
> >  LR is at exynos_dsi_bind+0x88/0xa8
> >  pc : []    lr : []    psr: 2013
> >  sp : ef0dfca8  ip : 0002  fp : c13190e0
> >  r10:   r9 : ee46d580  r8 : c13190e0
> >  r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> >  r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> >  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> >  Control: 10c5387d  Table: 4000404a  DAC: 0051
> >  Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> >  Stack: (0xef0dfca8 to 0xef0e)
> >  ...
> >  [] (drm_bridge_attach) from []
> >  (exynos_dsi_bind+0x88/0xa8)
> >  [] (exynos_dsi_bind) from []
> >  (component_bind_all+0xfc/0x290)
> >  [] (component_bind_all) from []
> >  (exynos_drm_bind+0xe4/0x19c)
> >  [] (exynos_drm_bind) from []
> >  (try_to_bring_up_master+0x1e4/0x2c4)
> >  [] (try_to_bring_up_master) from []
> >  (component_master_add_with_match+0xd4/0x108)
> >  [] (component_master_add_with_match) from []
> >  (exynos_drm_platform_probe+0xe4/0x110)
> >  [] (exynos_drm_platform_probe) from []
> >  (platform_drv_probe+0x6c/0xa4)
> >  [] (platform_drv_probe) from []
> >  (really_probe+0x200/0x4fc)
> >  [] (really_probe) from []
> >  (driver_probe_device+0x78/0x1fc)
> >  [] (driver_probe_device) from []
> >  (device_driver_attach+0x58/0x60)
> >  [] (device_driver_attach) from []
> >  (__driver_attach+0xdc/0x174)
> >  [] (__driver_attach) from []
> >  (bus_for_each_dev+0x68/0xb4)
> >  [] (bus_for_each_dev) from []
> >  (bus_add_driver+0x158/0x214)
> >  [] (bus_add_driver) from [] 
> >  (driver_register+0x78/0x110)
> >  [] (driver_register) from []
> >  (exynos_drm_init+0xe4/0x118)
> >  [] (exynos_drm_init) from []
> >  (do_one_initcall+0x8c/0x42c)
> >  [] (do_one_initcall) from []
> >  (kernel_init_freeable+0x190/0x1dc)
> >  [] (kernel_init_freeable) from []
> >  (kernel_init+0x8/0x118)
> >  [] (kernel_init) from [] (ret_from_fork+0x14/0x20)
> >  Exception stack(0xef0dffb0 to 0xef0dfff8)
> >  ...
> >  ---[ end trace ee27f313f9ed9da1 ]---
> > 
> >  # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> >  drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> > 
> >  I will try to debug it a bit more today.
> > >>> The above crash has been caused by lack of in_bridge initialization to
> > >>> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
> > >>> another issue:
> > >>>
> > >>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
> > >>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> > >>> OF: graph: no port node found in /soc/dsi@11c8
> > >>> 8<--- cut here ---
> > >>> Unable to handle kernel NULL pointer dereference at virtual address 
> > >>> 0280
> > >>> pgd = (ptrval)
> > >>> [0280] *pgd=
> > >>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > >>> Modules linked in:
> > >>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted
> > >>> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
> > >>> Hardware name: Samsung Exynos (Flattened Device Tree)
> > >>> PC is at __mutex_lock+0x54/0xb18
> > >>> LR is at lock_is_held_type+0x80/0x138
> > >>> pc : []    lr : []    psr: 6013
> > >>> sp : ef0dfd30 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2021-02-01 Thread Michael Tretter
On Tue, 15 Sep 2020 21:40:40 +0200, Andrzej Hajda wrote:
> W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> > On 14.09.2020 22:01, Michael Tretter wrote:
> >> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> >>> On 14.09.2020 10:29, Marek Szyprowski wrote:
>  On 11.09.2020 15:54, Michael Tretter wrote:
> > Make the exynos_dsi driver a full drm bridge that can be found and 
> > used
> > from other drivers.
> >
> > Other drivers can only attach to the bridge, if a mipi dsi device
> > already attached to the bridge. This allows to defer the probe of the
> > display pipe until the downstream bridges are available, too.
> >
> > Signed-off-by: Michael Tretter 
>  This one (and the whole series applied) still fails on Exynos boards:
> 
>  [drm] Exynos DRM: using 11c0.fimd device for DMA mapping 
>  operations
>  exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
>  OF: graph: no port node found in /soc/dsi@11c8
>  8<--- cut here ---
>  Unable to handle kernel NULL pointer dereference at virtual address 
>  0084
>  pgd = (ptrval)
>  [0084] *pgd=
>  Internal error: Oops: 5 [#1] PREEMPT SMP ARM
>  Modules linked in:
>  CPU: 1 PID: 1 Comm: swapper/0 Not tainted
>  5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
>  Hardware name: Samsung Exynos (Flattened Device Tree)
>  PC is at drm_bridge_attach+0x18/0x164
>  LR is at exynos_dsi_bind+0x88/0xa8
>  pc : []    lr : []    psr: 2013
>  sp : ef0dfca8  ip : 0002  fp : c13190e0
>  r10:   r9 : ee46d580  r8 : c13190e0
>  r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
>  r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
>  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
>  Control: 10c5387d  Table: 4000404a  DAC: 0051
>  Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
>  Stack: (0xef0dfca8 to 0xef0e)
>  ...
>  [] (drm_bridge_attach) from []
>  (exynos_dsi_bind+0x88/0xa8)
>  [] (exynos_dsi_bind) from []
>  (component_bind_all+0xfc/0x290)
>  [] (component_bind_all) from []
>  (exynos_drm_bind+0xe4/0x19c)
>  [] (exynos_drm_bind) from []
>  (try_to_bring_up_master+0x1e4/0x2c4)
>  [] (try_to_bring_up_master) from []
>  (component_master_add_with_match+0xd4/0x108)
>  [] (component_master_add_with_match) from []
>  (exynos_drm_platform_probe+0xe4/0x110)
>  [] (exynos_drm_platform_probe) from []
>  (platform_drv_probe+0x6c/0xa4)
>  [] (platform_drv_probe) from []
>  (really_probe+0x200/0x4fc)
>  [] (really_probe) from []
>  (driver_probe_device+0x78/0x1fc)
>  [] (driver_probe_device) from []
>  (device_driver_attach+0x58/0x60)
>  [] (device_driver_attach) from []
>  (__driver_attach+0xdc/0x174)
>  [] (__driver_attach) from []
>  (bus_for_each_dev+0x68/0xb4)
>  [] (bus_for_each_dev) from []
>  (bus_add_driver+0x158/0x214)
>  [] (bus_add_driver) from [] 
>  (driver_register+0x78/0x110)
>  [] (driver_register) from []
>  (exynos_drm_init+0xe4/0x118)
>  [] (exynos_drm_init) from []
>  (do_one_initcall+0x8c/0x42c)
>  [] (do_one_initcall) from []
>  (kernel_init_freeable+0x190/0x1dc)
>  [] (kernel_init_freeable) from []
>  (kernel_init+0x8/0x118)
>  [] (kernel_init) from [] (ret_from_fork+0x14/0x20)
>  Exception stack(0xef0dffb0 to 0xef0dfff8)
>  ...
>  ---[ end trace ee27f313f9ed9da1 ]---
> 
>  # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
>  drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> 
>  I will try to debug it a bit more today.
> >>> The above crash has been caused by lack of in_bridge initialization to
> >>> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
> >>> another issue:
> >>>
> >>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
> >>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> >>> OF: graph: no port node found in /soc/dsi@11c8
> >>> 8<--- cut here ---
> >>> Unable to handle kernel NULL pointer dereference at virtual address 
> >>> 0280
> >>> pgd = (ptrval)
> >>> [0280] *pgd=
> >>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> >>> Modules linked in:
> >>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted
> >>> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
> >>> Hardware name: Samsung Exynos (Flattened Device Tree)
> >>> PC is at __mutex_lock+0x54/0xb18
> >>> LR is at lock_is_held_type+0x80/0x138
> >>> pc : []    lr : []    psr: 6013
> >>> sp : ef0dfd30  ip : 33937b74  fp : c13193c8
> >>> r10: c1208eec  r9 :   r8 : ee45f808
> >>> r7 : c19561a4  r6 :   r5 :   r4 : 024c
> >>> r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
> >>> Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2020-09-15 Thread Andrzej Hajda
Hi again,

W dniu 14.09.2020 o 23:19, Andrzej Hajda pisze:
> Hi Marek, Michael,
>
> On 14.09.2020 22:01, Michael Tretter wrote:
>> Hi,
>>
>> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
>>> On 14.09.2020 10:29, Marek Szyprowski wrote:
 On 11.09.2020 15:54, Michael Tretter wrote:
> Make the exynos_dsi driver a full drm bridge that can be found and 
> used
> from other drivers.
>
> Other drivers can only attach to the bridge, if a mipi dsi device
> already attached to the bridge. This allows to defer the probe of the
> display pipe until the downstream bridges are available, too.
>
> Signed-off-by: Michael Tretter 
 This one (and the whole series applied) still fails on Exynos boards:

 [drm] Exynos DRM: using 11c0.fimd device for DMA mapping 
 operations
 exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
 OF: graph: no port node found in /soc/dsi@11c8
 8<--- cut here ---
 Unable to handle kernel NULL pointer dereference at virtual address 
 0084
 pgd = (ptrval)
 [0084] *pgd=
 Internal error: Oops: 5 [#1] PREEMPT SMP ARM
 Modules linked in:
 CPU: 1 PID: 1 Comm: swapper/0 Not tainted
 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
 Hardware name: Samsung Exynos (Flattened Device Tree)
 PC is at drm_bridge_attach+0x18/0x164
 LR is at exynos_dsi_bind+0x88/0xa8
 pc : []    lr : []    psr: 2013
 sp : ef0dfca8  ip : 0002  fp : c13190e0
 r10:   r9 : ee46d580  r8 : c13190e0
 r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
 r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
 Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
 Control: 10c5387d  Table: 4000404a  DAC: 0051
 Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
 Stack: (0xef0dfca8 to 0xef0e)
 ...
 [] (drm_bridge_attach) from []
 (exynos_dsi_bind+0x88/0xa8)
 [] (exynos_dsi_bind) from []
 (component_bind_all+0xfc/0x290)
 [] (component_bind_all) from []
 (exynos_drm_bind+0xe4/0x19c)
 [] (exynos_drm_bind) from []
 (try_to_bring_up_master+0x1e4/0x2c4)
 [] (try_to_bring_up_master) from []
 (component_master_add_with_match+0xd4/0x108)
 [] (component_master_add_with_match) from []
 (exynos_drm_platform_probe+0xe4/0x110)
 [] (exynos_drm_platform_probe) from []
 (platform_drv_probe+0x6c/0xa4)
 [] (platform_drv_probe) from []
 (really_probe+0x200/0x4fc)
 [] (really_probe) from []
 (driver_probe_device+0x78/0x1fc)
 [] (driver_probe_device) from []
 (device_driver_attach+0x58/0x60)
 [] (device_driver_attach) from []
 (__driver_attach+0xdc/0x174)
 [] (__driver_attach) from []
 (bus_for_each_dev+0x68/0xb4)
 [] (bus_for_each_dev) from []
 (bus_add_driver+0x158/0x214)
 [] (bus_add_driver) from [] 
 (driver_register+0x78/0x110)
 [] (driver_register) from []
 (exynos_drm_init+0xe4/0x118)
 [] (exynos_drm_init) from []
 (do_one_initcall+0x8c/0x42c)
 [] (do_one_initcall) from []
 (kernel_init_freeable+0x190/0x1dc)
 [] (kernel_init_freeable) from []
 (kernel_init+0x8/0x118)
 [] (kernel_init) from [] (ret_from_fork+0x14/0x20)
 Exception stack(0xef0dffb0 to 0xef0dfff8)
 ...
 ---[ end trace ee27f313f9ed9da1 ]---

 # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
 drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)

 I will try to debug it a bit more today.
>>> The above crash has been caused by lack of in_bridge initialization to
>>> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
>>> another issue:
>>>
>>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
>>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
>>> OF: graph: no port node found in /soc/dsi@11c8
>>> 8<--- cut here ---
>>> Unable to handle kernel NULL pointer dereference at virtual address 
>>> 0280
>>> pgd = (ptrval)
>>> [0280] *pgd=
>>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
>>> Modules linked in:
>>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted
>>> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
>>> Hardware name: Samsung Exynos (Flattened Device Tree)
>>> PC is at __mutex_lock+0x54/0xb18
>>> LR is at lock_is_held_type+0x80/0x138
>>> pc : []    lr : []    psr: 6013
>>> sp : ef0dfd30  ip : 33937b74  fp : c13193c8
>>> r10: c1208eec  r9 :   r8 : ee45f808
>>> r7 : c19561a4  r6 :   r5 :   r4 : 024c
>>> r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
>>> Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
>>> Control: 10c5387d  Table: 4000404a  DAC: 0051
>>> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
>>> Stack: (0xef0dfd30 to 0xef0e)
>>> ...
>>> [] (__mutex_lock) from [] 
>>> (mutex_lock_nested+0x1c/0x24)
>>> [] 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2020-09-14 Thread Andrzej Hajda
Hi Marek, Michael,

On 14.09.2020 22:01, Michael Tretter wrote:
> Hi,
>
> On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
>> On 14.09.2020 10:29, Marek Szyprowski wrote:
>>> On 11.09.2020 15:54, Michael Tretter wrote:
 Make the exynos_dsi driver a full drm bridge that can be found and used
 from other drivers.

 Other drivers can only attach to the bridge, if a mipi dsi device
 already attached to the bridge. This allows to defer the probe of the
 display pipe until the downstream bridges are available, too.

 Signed-off-by: Michael Tretter 
>>> This one (and the whole series applied) still fails on Exynos boards:
>>>
>>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
>>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
>>> OF: graph: no port node found in /soc/dsi@11c8
>>> 8<--- cut here ---
>>> Unable to handle kernel NULL pointer dereference at virtual address 0084
>>> pgd = (ptrval)
>>> [0084] *pgd=
>>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
>>> Modules linked in:
>>> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
>>> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
>>> Hardware name: Samsung Exynos (Flattened Device Tree)
>>> PC is at drm_bridge_attach+0x18/0x164
>>> LR is at exynos_dsi_bind+0x88/0xa8
>>> pc : []    lr : []    psr: 2013
>>> sp : ef0dfca8  ip : 0002  fp : c13190e0
>>> r10:   r9 : ee46d580  r8 : c13190e0
>>> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
>>> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
>>> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
>>> Control: 10c5387d  Table: 4000404a  DAC: 0051
>>> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
>>> Stack: (0xef0dfca8 to 0xef0e)
>>> ...
>>> [] (drm_bridge_attach) from []
>>> (exynos_dsi_bind+0x88/0xa8)
>>> [] (exynos_dsi_bind) from []
>>> (component_bind_all+0xfc/0x290)
>>> [] (component_bind_all) from []
>>> (exynos_drm_bind+0xe4/0x19c)
>>> [] (exynos_drm_bind) from []
>>> (try_to_bring_up_master+0x1e4/0x2c4)
>>> [] (try_to_bring_up_master) from []
>>> (component_master_add_with_match+0xd4/0x108)
>>> [] (component_master_add_with_match) from []
>>> (exynos_drm_platform_probe+0xe4/0x110)
>>> [] (exynos_drm_platform_probe) from []
>>> (platform_drv_probe+0x6c/0xa4)
>>> [] (platform_drv_probe) from []
>>> (really_probe+0x200/0x4fc)
>>> [] (really_probe) from []
>>> (driver_probe_device+0x78/0x1fc)
>>> [] (driver_probe_device) from []
>>> (device_driver_attach+0x58/0x60)
>>> [] (device_driver_attach) from []
>>> (__driver_attach+0xdc/0x174)
>>> [] (__driver_attach) from []
>>> (bus_for_each_dev+0x68/0xb4)
>>> [] (bus_for_each_dev) from []
>>> (bus_add_driver+0x158/0x214)
>>> [] (bus_add_driver) from [] (driver_register+0x78/0x110)
>>> [] (driver_register) from []
>>> (exynos_drm_init+0xe4/0x118)
>>> [] (exynos_drm_init) from []
>>> (do_one_initcall+0x8c/0x42c)
>>> [] (do_one_initcall) from []
>>> (kernel_init_freeable+0x190/0x1dc)
>>> [] (kernel_init_freeable) from []
>>> (kernel_init+0x8/0x118)
>>> [] (kernel_init) from [] (ret_from_fork+0x14/0x20)
>>> Exception stack(0xef0dffb0 to 0xef0dfff8)
>>> ...
>>> ---[ end trace ee27f313f9ed9da1 ]---
>>>
>>> # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
>>> drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
>>>
>>> I will try to debug it a bit more today.
>> The above crash has been caused by lack of in_bridge initialization to
>> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals
>> another issue:
>>
>> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
>> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
>> OF: graph: no port node found in /soc/dsi@11c8
>> 8<--- cut here ---
>> Unable to handle kernel NULL pointer dereference at virtual address 0280
>> pgd = (ptrval)
>> [0280] *pgd=
>> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
>> Modules linked in:
>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted
>> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
>> Hardware name: Samsung Exynos (Flattened Device Tree)
>> PC is at __mutex_lock+0x54/0xb18
>> LR is at lock_is_held_type+0x80/0x138
>> pc : []    lr : []    psr: 6013
>> sp : ef0dfd30  ip : 33937b74  fp : c13193c8
>> r10: c1208eec  r9 :   r8 : ee45f808
>> r7 : c19561a4  r6 :   r5 :   r4 : 024c
>> r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
>> Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
>> Control: 10c5387d  Table: 4000404a  DAC: 0051
>> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
>> Stack: (0xef0dfd30 to 0xef0e)
>> ...
>> [] (__mutex_lock) from [] (mutex_lock_nested+0x1c/0x24)
>> [] (mutex_lock_nested) from []
>> (__exynos_dsi_host_attach+0x20/0x6c)
>> [] (__exynos_dsi_host_attach) from []
>> (exynos_dsi_host_attach+0x70/0x194)
>> [] (exynos_dsi_host_attach) from []
>> 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2020-09-14 Thread Michael Tretter
Hi,

On Mon, 14 Sep 2020 14:31:19 +0200, Marek Szyprowski wrote:
> On 14.09.2020 10:29, Marek Szyprowski wrote:
> > On 11.09.2020 15:54, Michael Tretter wrote:
> >> Make the exynos_dsi driver a full drm bridge that can be found and used
> >> from other drivers.
> >>
> >> Other drivers can only attach to the bridge, if a mipi dsi device
> >> already attached to the bridge. This allows to defer the probe of the
> >> display pipe until the downstream bridges are available, too.
> >>
> >> Signed-off-by: Michael Tretter 
> > This one (and the whole series applied) still fails on Exynos boards:
> >
> > [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
> > exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> > OF: graph: no port node found in /soc/dsi@11c8
> > 8<--- cut here ---
> > Unable to handle kernel NULL pointer dereference at virtual address 0084
> > pgd = (ptrval)
> > [0084] *pgd=
> > Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > Modules linked in:
> > CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> > 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> > Hardware name: Samsung Exynos (Flattened Device Tree)
> > PC is at drm_bridge_attach+0x18/0x164
> > LR is at exynos_dsi_bind+0x88/0xa8
> > pc : []    lr : []    psr: 2013
> > sp : ef0dfca8  ip : 0002  fp : c13190e0
> > r10:   r9 : ee46d580  r8 : c13190e0
> > r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> > r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> > Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> > Control: 10c5387d  Table: 4000404a  DAC: 0051
> > Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> > Stack: (0xef0dfca8 to 0xef0e)
> > ...
> > [] (drm_bridge_attach) from []
> > (exynos_dsi_bind+0x88/0xa8)
> > [] (exynos_dsi_bind) from []
> > (component_bind_all+0xfc/0x290)
> > [] (component_bind_all) from []
> > (exynos_drm_bind+0xe4/0x19c)
> > [] (exynos_drm_bind) from []
> > (try_to_bring_up_master+0x1e4/0x2c4)
> > [] (try_to_bring_up_master) from []
> > (component_master_add_with_match+0xd4/0x108)
> > [] (component_master_add_with_match) from []
> > (exynos_drm_platform_probe+0xe4/0x110)
> > [] (exynos_drm_platform_probe) from []
> > (platform_drv_probe+0x6c/0xa4)
> > [] (platform_drv_probe) from []
> > (really_probe+0x200/0x4fc)
> > [] (really_probe) from []
> > (driver_probe_device+0x78/0x1fc)
> > [] (driver_probe_device) from []
> > (device_driver_attach+0x58/0x60)
> > [] (device_driver_attach) from []
> > (__driver_attach+0xdc/0x174)
> > [] (__driver_attach) from []
> > (bus_for_each_dev+0x68/0xb4)
> > [] (bus_for_each_dev) from []
> > (bus_add_driver+0x158/0x214)
> > [] (bus_add_driver) from [] (driver_register+0x78/0x110)
> > [] (driver_register) from []
> > (exynos_drm_init+0xe4/0x118)
> > [] (exynos_drm_init) from []
> > (do_one_initcall+0x8c/0x42c)
> > [] (do_one_initcall) from []
> > (kernel_init_freeable+0x190/0x1dc)
> > [] (kernel_init_freeable) from []
> > (kernel_init+0x8/0x118)
> > [] (kernel_init) from [] (ret_from_fork+0x14/0x20)
> > Exception stack(0xef0dffb0 to 0xef0dfff8)
> > ...
> > ---[ end trace ee27f313f9ed9da1 ]---
> >
> > # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> > drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
> >
> > I will try to debug it a bit more today.
> 
> The above crash has been caused by lack of in_bridge initialization to 
> NULL in exynos_dsi_bind() in this patch. However, fixing it reveals 
> another issue:
> 
> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> OF: graph: no port node found in /soc/dsi@11c8
> 8<--- cut here ---
> Unable to handle kernel NULL pointer dereference at virtual address 0280
> pgd = (ptrval)
> [0280] *pgd=
> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> Modules linked in:
> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 
> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
> Hardware name: Samsung Exynos (Flattened Device Tree)
> PC is at __mutex_lock+0x54/0xb18
> LR is at lock_is_held_type+0x80/0x138
> pc : []    lr : []    psr: 6013
> sp : ef0dfd30  ip : 33937b74  fp : c13193c8
> r10: c1208eec  r9 :   r8 : ee45f808
> r7 : c19561a4  r6 :   r5 :   r4 : 024c
> r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
> Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> Control: 10c5387d  Table: 4000404a  DAC: 0051
> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> Stack: (0xef0dfd30 to 0xef0e)
> ...
> [] (__mutex_lock) from [] (mutex_lock_nested+0x1c/0x24)
> [] (mutex_lock_nested) from [] 
> (__exynos_dsi_host_attach+0x20/0x6c)
> [] (__exynos_dsi_host_attach) from [] 
> (exynos_dsi_host_attach+0x70/0x194)
> [] (exynos_dsi_host_attach) from [] 
> (s6e8aa0_probe+0x1b0/0x218)
> [] (s6e8aa0_probe) from [] (really_probe+0x200/0x4fc)
> [] (really_probe) from [] 
> 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2020-09-14 Thread Marek Szyprowski
Hi,

On 14.09.2020 10:29, Marek Szyprowski wrote:
> On 11.09.2020 15:54, Michael Tretter wrote:
>> Make the exynos_dsi driver a full drm bridge that can be found and used
>> from other drivers.
>>
>> Other drivers can only attach to the bridge, if a mipi dsi device
>> already attached to the bridge. This allows to defer the probe of the
>> display pipe until the downstream bridges are available, too.
>>
>> Signed-off-by: Michael Tretter 
> This one (and the whole series applied) still fails on Exynos boards:
>
> [drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
> exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
> OF: graph: no port node found in /soc/dsi@11c8
> 8<--- cut here ---
> Unable to handle kernel NULL pointer dereference at virtual address 0084
> pgd = (ptrval)
> [0084] *pgd=
> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> Modules linked in:
> CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> 5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
> Hardware name: Samsung Exynos (Flattened Device Tree)
> PC is at drm_bridge_attach+0x18/0x164
> LR is at exynos_dsi_bind+0x88/0xa8
> pc : []    lr : []    psr: 2013
> sp : ef0dfca8  ip : 0002  fp : c13190e0
> r10:   r9 : ee46d580  r8 : c13190e0
> r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
> r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> Control: 10c5387d  Table: 4000404a  DAC: 0051
> Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
> Stack: (0xef0dfca8 to 0xef0e)
> ...
> [] (drm_bridge_attach) from []
> (exynos_dsi_bind+0x88/0xa8)
> [] (exynos_dsi_bind) from []
> (component_bind_all+0xfc/0x290)
> [] (component_bind_all) from []
> (exynos_drm_bind+0xe4/0x19c)
> [] (exynos_drm_bind) from []
> (try_to_bring_up_master+0x1e4/0x2c4)
> [] (try_to_bring_up_master) from []
> (component_master_add_with_match+0xd4/0x108)
> [] (component_master_add_with_match) from []
> (exynos_drm_platform_probe+0xe4/0x110)
> [] (exynos_drm_platform_probe) from []
> (platform_drv_probe+0x6c/0xa4)
> [] (platform_drv_probe) from []
> (really_probe+0x200/0x4fc)
> [] (really_probe) from []
> (driver_probe_device+0x78/0x1fc)
> [] (driver_probe_device) from []
> (device_driver_attach+0x58/0x60)
> [] (device_driver_attach) from []
> (__driver_attach+0xdc/0x174)
> [] (__driver_attach) from []
> (bus_for_each_dev+0x68/0xb4)
> [] (bus_for_each_dev) from []
> (bus_add_driver+0x158/0x214)
> [] (bus_add_driver) from [] (driver_register+0x78/0x110)
> [] (driver_register) from []
> (exynos_drm_init+0xe4/0x118)
> [] (exynos_drm_init) from []
> (do_one_initcall+0x8c/0x42c)
> [] (do_one_initcall) from []
> (kernel_init_freeable+0x190/0x1dc)
> [] (kernel_init_freeable) from []
> (kernel_init+0x8/0x118)
> [] (kernel_init) from [] (ret_from_fork+0x14/0x20)
> Exception stack(0xef0dffb0 to 0xef0dfff8)
> ...
> ---[ end trace ee27f313f9ed9da1 ]---
>
> # arm-linux-gnueabi-addr2line -e vmlinux c0628c08
> drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)
>
> I will try to debug it a bit more today.

The above crash has been caused by lack of in_bridge initialization to 
NULL in exynos_dsi_bind() in this patch. However, fixing it reveals 
another issue:

[drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
OF: graph: no port node found in /soc/dsi@11c8
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 0280
pgd = (ptrval)
[0280] *pgd=
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 
5.9.0-rc4-next-20200911-00010-g417dc70d70ec-dirty #1613
Hardware name: Samsung Exynos (Flattened Device Tree)
PC is at __mutex_lock+0x54/0xb18
LR is at lock_is_held_type+0x80/0x138
pc : []    lr : []    psr: 6013
sp : ef0dfd30  ip : 33937b74  fp : c13193c8
r10: c1208eec  r9 :   r8 : ee45f808
r7 : c19561a4  r6 :   r5 :   r4 : 024c
r3 :   r2 : 00204140  r1 : c124f13c  r0 : 
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5387d  Table: 4000404a  DAC: 0051
Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
Stack: (0xef0dfd30 to 0xef0e)
...
[] (__mutex_lock) from [] (mutex_lock_nested+0x1c/0x24)
[] (mutex_lock_nested) from [] 
(__exynos_dsi_host_attach+0x20/0x6c)
[] (__exynos_dsi_host_attach) from [] 
(exynos_dsi_host_attach+0x70/0x194)
[] (exynos_dsi_host_attach) from [] 
(s6e8aa0_probe+0x1b0/0x218)
[] (s6e8aa0_probe) from [] (really_probe+0x200/0x4fc)
[] (really_probe) from [] 
(driver_probe_device+0x78/0x1fc)
[] (driver_probe_device) from [] 
(device_driver_attach+0x58/0x60)
[] (device_driver_attach) from [] 
(__driver_attach+0xdc/0x174)
[] (__driver_attach) from [] 
(bus_for_each_dev+0x68/0xb4)
[] (bus_for_each_dev) from [] 
(bus_add_driver+0x158/0x214)
[] (bus_add_driver) 

Re: [PATCH v2 10/16] drm/exynos: implement a drm bridge

2020-09-14 Thread Marek Szyprowski
Hi Michael,

On 11.09.2020 15:54, Michael Tretter wrote:
> Make the exynos_dsi driver a full drm bridge that can be found and used
> from other drivers.
>
> Other drivers can only attach to the bridge, if a mipi dsi device
> already attached to the bridge. This allows to defer the probe of the
> display pipe until the downstream bridges are available, too.
>
> Signed-off-by: Michael Tretter 

This one (and the whole series applied) still fails on Exynos boards:

[drm] Exynos DRM: using 11c0.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 11c0.fimd (ops fimd_component_ops)
OF: graph: no port node found in /soc/dsi@11c8
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 0084
pgd = (ptrval)
[0084] *pgd=
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 
5.9.0-rc4-next-20200911-00010-g417dc70d70ec #1608
Hardware name: Samsung Exynos (Flattened Device Tree)
PC is at drm_bridge_attach+0x18/0x164
LR is at exynos_dsi_bind+0x88/0xa8
pc : []    lr : []    psr: 2013
sp : ef0dfca8  ip : 0002  fp : c13190e0
r10:   r9 : ee46d580  r8 : c13190e0
r7 : ee438800  r6 : 0018  r5 : ef253810  r4 : ef39e840
r3 :   r2 : 0018  r1 : ef39e888  r0 : ef39e840
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5387d  Table: 4000404a  DAC: 0051
Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
Stack: (0xef0dfca8 to 0xef0e)
...
[] (drm_bridge_attach) from [] 
(exynos_dsi_bind+0x88/0xa8)
[] (exynos_dsi_bind) from [] 
(component_bind_all+0xfc/0x290)
[] (component_bind_all) from [] 
(exynos_drm_bind+0xe4/0x19c)
[] (exynos_drm_bind) from [] 
(try_to_bring_up_master+0x1e4/0x2c4)
[] (try_to_bring_up_master) from [] 
(component_master_add_with_match+0xd4/0x108)
[] (component_master_add_with_match) from [] 
(exynos_drm_platform_probe+0xe4/0x110)
[] (exynos_drm_platform_probe) from [] 
(platform_drv_probe+0x6c/0xa4)
[] (platform_drv_probe) from [] 
(really_probe+0x200/0x4fc)
[] (really_probe) from [] 
(driver_probe_device+0x78/0x1fc)
[] (driver_probe_device) from [] 
(device_driver_attach+0x58/0x60)
[] (device_driver_attach) from [] 
(__driver_attach+0xdc/0x174)
[] (__driver_attach) from [] 
(bus_for_each_dev+0x68/0xb4)
[] (bus_for_each_dev) from [] 
(bus_add_driver+0x158/0x214)
[] (bus_add_driver) from [] (driver_register+0x78/0x110)
[] (driver_register) from [] 
(exynos_drm_init+0xe4/0x118)
[] (exynos_drm_init) from [] 
(do_one_initcall+0x8c/0x42c)
[] (do_one_initcall) from [] 
(kernel_init_freeable+0x190/0x1dc)
[] (kernel_init_freeable) from [] 
(kernel_init+0x8/0x118)
[] (kernel_init) from [] (ret_from_fork+0x14/0x20)
Exception stack(0xef0dffb0 to 0xef0dfff8)
...
---[ end trace ee27f313f9ed9da1 ]---

# arm-linux-gnueabi-addr2line -e vmlinux c0628c08
drivers/gpu/drm/drm_bridge.c:184 (discriminator 1)

I will try to debug it a bit more today.

> ---
> v2:
> - move attach of out_bridge to bridge_attach
> - add bridge_detach
> - don't cleanup encoder if create_connector failed
> ---
>   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 103 +---
>   1 file changed, 75 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
> b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> index 2d75f9877dc0..5e7c1a99a3ee 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> @@ -266,6 +266,7 @@ struct exynos_dsi_driver_data {
>   
>   struct exynos_dsi {
>   struct drm_encoder encoder;
> + struct drm_bridge bridge;
>   struct mipi_dsi_host dsi_host;
>   struct drm_connector connector;
>   struct drm_panel *panel;
> @@ -1602,6 +1603,60 @@ static const struct drm_encoder_helper_funcs 
> exynos_dsi_encoder_helper_funcs = {
>   .disable = exynos_dsi_disable,
>   };
>   
> +static int exynos_dsi_bridge_attach(struct drm_bridge *bridge,
> + enum drm_bridge_attach_flags flags)
> +{
> + struct exynos_dsi *dsi = bridge->driver_private;
> + struct drm_encoder *encoder = bridge->encoder;
> + int ret;
> +
> + if (!dsi->out_bridge && !dsi->panel)
> + return -EPROBE_DEFER;
> +
> + if (dsi->out_bridge) {
> + ret = drm_bridge_attach(encoder, dsi->out_bridge,
> + bridge, flags);
> + if (ret)
> + return ret;
> + list_splice_init(>bridge_chain, >bridge_chain);
> + } else {
> + ret = exynos_dsi_create_connector(encoder);
> + if (ret)
> + return ret;
> +
> + if (dsi->panel) {
> + dsi->connector.status = connector_status_connected;
> + }
> + }
> +
> + return 0;
> +}
> +
> +static void exynos_dsi_bridge_detach(struct drm_bridge *bridge)
> +{
> + struct exynos_dsi *dsi = bridge->driver_private;
> + struct 

[PATCH v2 10/16] drm/exynos: implement a drm bridge

2020-09-11 Thread Michael Tretter
Make the exynos_dsi driver a full drm bridge that can be found and used
from other drivers.

Other drivers can only attach to the bridge, if a mipi dsi device
already attached to the bridge. This allows to defer the probe of the
display pipe until the downstream bridges are available, too.

Signed-off-by: Michael Tretter 
---
v2:
- move attach of out_bridge to bridge_attach
- add bridge_detach
- don't cleanup encoder if create_connector failed
---
 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 103 +---
 1 file changed, 75 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 2d75f9877dc0..5e7c1a99a3ee 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -266,6 +266,7 @@ struct exynos_dsi_driver_data {
 
 struct exynos_dsi {
struct drm_encoder encoder;
+   struct drm_bridge bridge;
struct mipi_dsi_host dsi_host;
struct drm_connector connector;
struct drm_panel *panel;
@@ -1602,6 +1603,60 @@ static const struct drm_encoder_helper_funcs 
exynos_dsi_encoder_helper_funcs = {
.disable = exynos_dsi_disable,
 };
 
+static int exynos_dsi_bridge_attach(struct drm_bridge *bridge,
+   enum drm_bridge_attach_flags flags)
+{
+   struct exynos_dsi *dsi = bridge->driver_private;
+   struct drm_encoder *encoder = bridge->encoder;
+   int ret;
+
+   if (!dsi->out_bridge && !dsi->panel)
+   return -EPROBE_DEFER;
+
+   if (dsi->out_bridge) {
+   ret = drm_bridge_attach(encoder, dsi->out_bridge,
+   bridge, flags);
+   if (ret)
+   return ret;
+   list_splice_init(>bridge_chain, >bridge_chain);
+   } else {
+   ret = exynos_dsi_create_connector(encoder);
+   if (ret)
+   return ret;
+
+   if (dsi->panel) {
+   dsi->connector.status = connector_status_connected;
+   }
+   }
+
+   return 0;
+}
+
+static void exynos_dsi_bridge_detach(struct drm_bridge *bridge)
+{
+   struct exynos_dsi *dsi = bridge->driver_private;
+   struct drm_encoder *encoder = bridge->encoder;
+   struct drm_device *drm = encoder->dev;
+
+   if (dsi->panel) {
+   mutex_lock(>mode_config.mutex);
+   exynos_dsi_disable(>encoder);
+   dsi->panel = NULL;
+   dsi->connector.status = connector_status_disconnected;
+   mutex_unlock(>mode_config.mutex);
+   } else {
+   if (dsi->out_bridge->funcs->detach)
+   dsi->out_bridge->funcs->detach(dsi->out_bridge);
+   dsi->out_bridge = NULL;
+   INIT_LIST_HEAD(>bridge_chain);
+   }
+}
+
+static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
+   .attach = exynos_dsi_bridge_attach,
+   .detach = exynos_dsi_bridge_detach,
+};
+
 MODULE_DEVICE_TABLE(of, exynos_dsi_of_match);
 
 static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
@@ -1609,25 +1664,12 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host 
*host,
 {
struct exynos_dsi *dsi = host_to_dsi(host);
const struct exynos_dsi_host_ops *ops = dsi->driver_data->host_ops;
-   struct drm_encoder *encoder = >encoder;
struct drm_bridge *out_bridge;
 
-   out_bridge  = of_drm_find_bridge(device->dev.of_node);
+   out_bridge = of_drm_find_bridge(device->dev.of_node);
if (out_bridge) {
-   drm_bridge_attach(encoder, out_bridge, NULL, 0);
dsi->out_bridge = out_bridge;
-   list_splice_init(>bridge_chain, >bridge_chain);
} else {
-   int ret = exynos_dsi_create_connector(encoder);
-
-   if (ret) {
-   DRM_DEV_ERROR(dsi->dev,
- "failed to create connector ret = %d\n",
- ret);
-   drm_encoder_cleanup(encoder);
-   return ret;
-   }
-
dsi->panel = of_drm_find_panel(device->dev.of_node);
if (IS_ERR(dsi->panel))
dsi->panel = NULL;
@@ -1662,20 +1704,6 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host 
*host,
 {
struct exynos_dsi *dsi = host_to_dsi(host);
const struct exynos_dsi_host_ops *ops = dsi->driver_data->host_ops;
-   struct drm_device *drm = dsi->encoder.dev;
-
-   if (dsi->panel) {
-   mutex_lock(>mode_config.mutex);
-   exynos_dsi_disable(>encoder);
-   dsi->panel = NULL;
-   dsi->connector.status = connector_status_disconnected;
-   mutex_unlock(>mode_config.mutex);
-   } else {
-   if (dsi->out_bridge->funcs->detach)
-