devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Inki Dae <inki.dae@samsung.com>
To: Andrzej Hajda <a.hajda@samsung.com>
Cc: Tomasz Figa <t.figa@samsung.com>,
	Mark Rutland <mark.rutland@arm.com>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-samsung-soc@vger.kernel.org"
	<linux-samsung-soc@vger.kernel.org>,
	Pawel Moll <pawel.moll@arm.com>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	DRI mailing list <dri-devel@lists.freedesktop.org>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Rob Herring <robh+dt@kernel.org>,
	Kumar Gala <galak@codeaurora.org>,
	Grant Likely <grant.likely@linaro.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [RFC PATCH v2 00/21] Add DSI display support for Exynos based boards
Date: Fri, 14 Mar 2014 00:35:24 +0900	[thread overview]
Message-ID: <CAAQKjZNxdfs1aF8_gjj_+HnnkQDvUy-G8fTUP=+sp-SsSCH-iw@mail.gmail.com> (raw)
In-Reply-To: <5321B576.5070409@samsung.com>

2014-03-13 22:41 GMT+09:00 Andrzej Hajda <a.hajda@samsung.com>:
> On 03/13/2014 08:08 AM, Inki Dae wrote:
>> 2014-03-12 20:16 GMT+09:00 Tomasz Figa <t.figa@samsung.com>:
>>> On 12.03.2014 11:08, Inki Dae wrote:
>>>> 2014-03-07 19:00 GMT+09:00 Andrzej Hajda <a.hajda@samsung.com>:
>>>>> On 03/05/2014 03:56 AM, Inki Dae wrote:
>>>>>> Hi Andrzej,
>>>>>>
>>>>>> Thanks for your contributions.
>>>>>>
>>>>>> 2014-02-12 20:31 GMT+09:00 Andrzej Hajda <a.hajda@samsung.com>:
>>>>>>> Hi,
>>>>>>>
>>>>>>> This patchset adds drivers and bindings to the following devices:
>>>>>>> - Exynos DSI master,
>>>>>>> - S6E8AA0 DSI panel,
>>>>>>> - TC358764 DSI/LVDS bridge,
>>>>>>> - HV070WSA-100 LVDS panel.
>>>>>>>
>>>>>>> It adds also display support in DTS files for the following boards:
>>>>>>> - Exynos4210/Trats,
>>>>>>> - Exynos4412/Trats2,
>>>>>>> - Exynos5250/Arndale.
>>>>>>>
>>>>>>> Things worth mentioning:
>>>>>>>
>>>>>>> 1. I have implemented DSI/LVDS bridge using drm_panel framework, ie.
>>>>>>> the driver exposes drm_panel interface on DSI side, and interact with
>>>>>>> panels on LVDS side using drm_panel framework. This approach seems to
>>>>>>> me simpler and more natural than using drm_bridge.
>>>>>> Can you give me more details about why you think better to use panel
>>>>>> framework than using drm_bridge?  "Simpler" and "more natural" are
>>>>>> ambiguous to me.
>>>>> In this particular case DSI master expects on the other end
>>>>> any device having DSI slave interface, it could be panel or bridge.
>>>>> So it seems natural that both types of slave devices should expose
>>>>> the same interface also  on programming level.
>>>>> Another problem with drm_bridge is that it is not scalable -
>>>>> if some manufacturer will decide to add another block between the bridge
>>>>> and the panel there is no drm component which can be used for it.
>>>>> Using drm_panel the way I have used in toshiba bridge makes scalability
>>>>> possible,
>>>>> it will be only a matter of adding a driver for new block and making
>>>>> proper links in device tree, I see no easy way of doing it with
>>>>> drm_bridge approach.
>>>>
>>>> Now drm_bridge may not cover all hardware. However drm_bridge has
>>>> already been merged to mainline so I think we need to use drm_bridge
>>>> somehow instead of using other one, and also we could extend
>>>> drm_bridge if needed. It would be definitely impossible for a new
>>>> framework to cover all hardware because there may be other hardware
>>>> not appeared yet. That is what we are doing for mainline until now.
>>>>
>>> Well, maybe drm_bridge has been merged, but so has been drm_panel. Moreover,
>>> merged code is not carved in stone, if there is a better option that could
>>> replace it, users of it can be converted to the new approach and the old one
>>> can be removed.
>>>
>>> As I believe Andrzej has demonstrated, drm_panel framework is clearly
>>> superior over drm_bridge and I can't think of any good reason why it
>>> couldn't become more generic and replace drm_bridge. Of course it can be
>>> renamed then to something more generic appropriately.
>>>
>>>
>>>>>
>>>>>> Using same drm_panel framework for LDVS bridge and real panel drivers
>>>>>> isn't reasonable to me as now because drm_panel framework would be for
>>>>>> real panel device even if the use of drm_panel framework looks like
>>>>>> suitable to LVDS bridge driver. I thought Sean's way, ptn3460 driver
>>>>>> using drm_bride stuff, is good enough, and that would be why
>>>>>> drm_bridge exists and why drm_encoder has drm_bridge.
>>>>>>
>>>>>> And I'm finding more generic way, how to handle LVDS bridge using
>>>>>> super node so that  LVDS bridge driver isn't embedded to connector
>>>>>> drivers such as eDP and MIPI-DSI, and dt binding of LVDS bridge can be
>>>>>> done at top level of Exynos drm. Once the binding is done, encoder of
>>>>>> display bus driver will have drm_bridge object of LVDS bridge driver
>>>>>> so that display bus driver can handle LVDS bridge driver.
>>>>> Could you explain what you mean by "dt binding of LVDS bridge can be
>>>>> done at top level of Exynos drm" ? How it will look like if there
>>>>> will be more bridges, one for DSI, one for HDMI, etc... What if there
>>>>> will be two
>>>>> bridges in one chain. How it will cope with video pipeline bindings?
>>>>
>>>> it was just my idea so I have no implementation about it yet.
>>>>
>>>> My idea is that crtc and encoder are binded at top level of Exynos drm
>>>> as is. And for bridge support, the only difference is, in case that
>>>> encoder driver has bridge, the dt binding of the encoder driver is
>>>> done once last one between encoder and bridge driver is binded. It
>>>> would mean that bridge driver can use driver model and it doesn't need
>>>> to concern about probe order issue.
>>>>
>>>> For this, encoder driver with bridge, MIPI-DSI or eDP, would need to
>>>> use component interfaces specific to Exynos drm. As a result, once the
>>>> dt bindings of crtc and encoder are completed at top level, encoder
>>>> driver has its own drm_bridge for bridge, and dt binding you proposed
>>>> could be used without any change, and drm_panel could also be used
>>>> only for real lcd panel driver.
>>>>
>>>> And below is a block diagram I think,
>>>>
>>>>                                    DRM KMS
>>>>                     /                      |                 \
>>>>                /                           |                      \
>>>>           crtc                      encoder              connector
>>>>             |                           /     \                          |
>>>>             |                       /             \                      |
>>>>             |                      |           drm_bridge   drm_panel
>>>>             |                      |                   |                 |
>>>>             |                      |                   |                 |
>>>>          FIMD         MIPI-DSI    LVDS bridge    Panel
>>>>
>>> Hmm, this doesn't seem to be complete. Several bridges can be chained
>>> together. Also I believe "Panel" and "drm_panel" on your diagram should be
>>> basically the same. This leads to obvious conclusion that drm_bridge and
>>> drm_panel should be merged and Andrzej has shown an example (and IMHO good)
>>> way to do it, as drm_panel already provides a significant amount of existing
>>> infrastructure.
>>>
>> Not opposite to using drm_panel framework. What I disagree is to
>> implement encoder/connector to crtc driver, and to use drm_panel
>> framework for bridge device.
>> I tend to believe that obvious fact is that crtc driver, fimd, is not
>> proper place that encoder and connector should be implemented. Is
>> there other SoC using such way? I think other SoC guys had ever
>> agonized about same issue.
> Quick look at some mobile drm drivers:
> 1. tegra - in rgb pseudo-driver encoder/connector is bound to crtc device,
>     it is separate file but the same device driver.
> 2. imx - crtc and encoder are separated, but parallel driver is a pure
>     virtual device driver, no hw associated with it.
> 3. shmob - crtc, encoder and connector are in the same device.
> 4. omap - all drm components are created in omap_drv, physical devices
>     are bound to them using internal framework.
>
> I prefer to avoid creating virtual devices, I think the simpler solution
> for parallel output for now could be something like in tegra.
>
> Generally I tend to omap solution but instead of creating internal
> framework use what we have already, ie drm_panel.

Doesn't it better to use internal framework like omap did ? Or, I
think it's better to change drm_panel to more generic name if you want
to use drm_panel so that drm_panel can be used commonly for other
hardware block devices. It's curious to control all hardware blocks
and real panel device using drm_panel.

>
> Btw I do not see drm_panel as sth strange in this context,
> for example in the chain:
> FIMD --> DSIM --> DSI/LVDS --> Panel
> any device in the chain sees device on the right side of the link as a
> panel. Ie.
> FIMD sees RGB panel,
> DSIM sees DSI panel,
> bridge sees LVDS panel.
>
>>
>> And I'm not sure that how several bridges can be chained together so
>> can you show me the real case, real hardware? If there is my missing
>> something and we cannot really cover such hardware support with
>> drm_bridge framework, I think we could consider to use drm_panel
>> framework instead of drm_bridge. And maybe, we may need opinions from
>> other maintainers.
>
> Real cases I have showed in another thread:
> FIMD --> MIE --> DSI --> DSI/LVDS --> Panel

I didn't see these hardware blocks are called bridge. :) Yes, right,
and also these can be chained together in more various ways.

>
> Five hw devices in the chain, we are not able to map them
> to 3+1 drm components 1:1, something should be squashed.
> Probably squashing MIE with FIMD would be a some solution.
> But in place of MIE there can be also mDNIe --> FIMDlite.
> So we need another sub-framework or bunch of conditionals
> to handle it.
> On the other side drm_panel would solve these problems
> in generic way.
>

Ok, but for more clear I think we would need to look into how other
SoC guys are handling similar hardware blocks in drm world.

Thanks,
Inki Dae

> Regards
> Andrzej
>
>>
>> Thanks,
>> Inki Dae
>>
>>> Best regards,
>>> Tomasz
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel@lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

      reply	other threads:[~2014-03-13 15:35 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-12 11:31 [RFC PATCH v2 00/21] Add DSI display support for Exynos based boards Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 01/21] drm_mipi_dsi: add flags to DSI messages Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 02/21] drm/exynos: delay fbdev initialization until an output is connected Andrzej Hajda
2014-02-12 12:03   ` Sachin Kamat
2014-02-12 11:31 ` [RFC PATCH v2 03/21] exynos/dsim: add DT bindings Andrzej Hajda
2014-03-05  5:56   ` Inki Dae
2014-03-07 10:54     ` Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 04/21] drm/exynos: add DSIM driver Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 05/21] panel/s6e8aa0: add DT bindings Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 06/21] drm/panel: add S6E8AA0 driver Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 07/21] panel/tc358764: add DT bindings Andrzej Hajda
     [not found] ` <1392204688-4591-1-git-send-email-a.hajda-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2014-02-12 11:31   ` [RFC PATCH v2 08/21] drm/panel: add TC358764 driver Andrzej Hajda
2014-03-05  6:46     ` Inki Dae
2014-03-07 10:44       ` Andrzej Hajda
2014-02-12 11:31   ` [RFC PATCH v2 09/21] panel/simple: add video interface DT bindings Andrzej Hajda
2014-02-12 11:31   ` [RFC PATCH v2 12/21] ARM: dts: exynos4: add MIPI DSI Master node Andrzej Hajda
2014-02-12 11:31   ` [RFC PATCH v2 20/21] ARM: dts: exynos4210-trats: enable exynos/fimd node Andrzej Hajda
2014-02-12 11:31   ` [RFC PATCH v2 21/21] ARM: dts: exynos4412-trats2: " Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 10/21] panel/hv070wsa-100: add DT bindings Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 11/21] drm/panel: add support for BOE HV070WSA-100 panel to simple-panel Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 13/21] ARM: dts: exynos4210-trats: add panel node Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 14/21] ARM: dts: exynos4412-trats2: " Andrzej Hajda
2014-02-28 13:33   ` Tomi Valkeinen
2014-03-04 12:07     ` Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 15/21] ARM: dts: exynos5250: add mipi-phy node Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 16/21] ARM: dts: exynos5250: add display power domain node Andrzej Hajda
2014-02-12 11:51   ` Sachin Kamat
2014-02-12 11:59     ` Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 17/21] ARM: dts: exynos5250: add DSI node Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 18/21] ARM: dts: exynos5250-arndale: add display regulators Andrzej Hajda
2014-02-12 11:31 ` [RFC PATCH v2 19/21] ARM: dts: exynos5250-arndale: add dsi and panel nodes Andrzej Hajda
2014-02-28 13:31   ` Tomi Valkeinen
2014-02-28 13:39     ` Tomi Valkeinen
2014-03-04 12:00       ` Andrzej Hajda
2014-03-04 12:40         ` Tomi Valkeinen
2014-03-05 12:06         ` Inki Dae
2014-03-07 12:22           ` Andrzej Hajda
2014-03-07 12:32             ` Tomi Valkeinen
2014-03-07 13:07               ` Andrzej Hajda
2014-03-07 13:28                 ` Tomi Valkeinen
2014-03-07 14:17                   ` Andrzej Hajda
2014-03-07 14:36                     ` Tomi Valkeinen
2014-03-05  2:56 ` [RFC PATCH v2 00/21] Add DSI display support for Exynos based boards Inki Dae
2014-03-07 10:00   ` Andrzej Hajda
2014-03-12 10:08     ` Inki Dae
2014-03-12 11:16       ` Tomasz Figa
2014-03-13  7:08         ` Inki Dae
2014-03-13 13:41           ` Andrzej Hajda
2014-03-13 15:35             ` Inki Dae [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAAQKjZNxdfs1aF8_gjj_+HnnkQDvUy-G8fTUP=+sp-SsSCH-iw@mail.gmail.com' \
    --to=inki.dae@samsung.com \
    --cc=a.hajda@samsung.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=galak@codeaurora.org \
    --cc=grant.likely@linaro.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mark.rutland@arm.com \
    --cc=pawel.moll@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=t.figa@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).