All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: Jagan Teki <jagan@amarulasolutions.com>
Cc: dri-devel@lists.freedesktop.org,
	Robert Foss <robert.foss@linaro.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Sam Ravnborg <sam@ravnborg.org>,
	Maxime Ripard <maxime@cerno.tech>
Subject: Re: [PATCH V3 05/13] drm: bridge: icn6211: Add DSI lane count DT property parsing
Date: Fri, 11 Mar 2022 22:11:16 +0100	[thread overview]
Message-ID: <70828dfb-3010-3258-157b-635af3799b3f@denx.de> (raw)
In-Reply-To: <CAMty3ZBPjxp=6vjDW0fn6UdSUn2CEWYOPuwon1GAbN_6PJNG6g@mail.gmail.com>

On 3/11/22 21:38, Jagan Teki wrote:
> Hi Marek,
> 
> Small correction in the previous comment.
> 
> On Sat, Mar 12, 2022 at 2:05 AM Jagan Teki <jagan@amarulasolutions.com> wrote:
>>
>> Hi Marek,
>>
>> On Sat, Mar 12, 2022 at 1:32 AM Marek Vasut <marex@denx.de> wrote:
>>>
>>> On 3/11/22 17:29, Maxime Ripard wrote:
>>>> On Fri, Mar 11, 2022 at 11:36:58AM +0100, Marek Vasut wrote:
>>>>> On 3/10/22 15:18, Maxime Ripard wrote:
>>>>>> On Thu, Mar 10, 2022 at 01:47:13PM +0100, Marek Vasut wrote:
>>>>>>> On 3/10/22 11:53, Maxime Ripard wrote:
>>>>>>>> On Tue, Mar 08, 2022 at 10:41:05PM +0100, Marek Vasut wrote:
>>>>>>>>> On 3/8/22 17:21, Maxime Ripard wrote:
>>>>>>>>>> On Tue, Mar 08, 2022 at 03:47:22PM +0100, Marek Vasut wrote:
>>>>>>>>>>> On 3/8/22 14:49, Maxime Ripard wrote:
>>>>>>>>>>>> On Tue, Mar 08, 2022 at 02:27:40PM +0100, Marek Vasut wrote:
>>>>>>>>>>>>> On 3/8/22 13:51, Maxime Ripard wrote:
>>>>>>>>>>>>>> On Tue, Mar 08, 2022 at 11:29:59AM +0100, Marek Vasut wrote:
>>>>>>>>>>>>>>> On 3/8/22 11:07, Jagan Teki wrote:
>>>>>>>>>>>>>>>> On Tue, Mar 8, 2022 at 3:19 PM Marek Vasut <marex@denx.de> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On 3/8/22 09:03, Jagan Teki wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> [...]
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> @@ -314,7 +321,9 @@ static const struct drm_bridge_funcs chipone_bridge_funcs = {
>>>>>>>>>>>>>>>>>>>           static int chipone_parse_dt(struct chipone *icn)
>>>>>>>>>>>>>>>>>>>           {
>>>>>>>>>>>>>>>>>>>                  struct device *dev = icn->dev;
>>>>>>>>>>>>>>>>>>> +       struct device_node *endpoint;
>>>>>>>>>>>>>>>>>>>                  struct drm_panel *panel;
>>>>>>>>>>>>>>>>>>> +       int dsi_lanes;
>>>>>>>>>>>>>>>>>>>                  int ret;
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>                  icn->vdd1 = devm_regulator_get_optional(dev, "vdd1");
>>>>>>>>>>>>>>>>>>> @@ -350,15 +359,42 @@ static int chipone_parse_dt(struct chipone *icn)
>>>>>>>>>>>>>>>>>>>                          return PTR_ERR(icn->enable_gpio);
>>>>>>>>>>>>>>>>>>>                  }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> +       endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, 0);
>>>>>>>>>>>>>>>>>>> +       dsi_lanes = of_property_count_u32_elems(endpoint, "data-lanes");
>>>>>>>>>>>>>>>>>>> +       icn->host_node = of_graph_get_remote_port_parent(endpoint);
>>>>>>>>>>>>>>>>>>> +       of_node_put(endpoint);
>>>>>>>>>>>>>>>>>>> +
>>>>>>>>>>>>>>>>>>> +       if (!icn->host_node)
>>>>>>>>>>>>>>>>>>> +               return -ENODEV;
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The non-ports-based OF graph returns a -19 example on the Allwinner
>>>>>>>>>>>>>>>>>> Display pipeline in R16 [1].
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> We need to have a helper to return host_node for non-ports as I have
>>>>>>>>>>>>>>>>>> done it for drm_of_find_bridge.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> [1] https://patchwork.amarulasolutions.com/patch/1805/
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The link points to a patch marked "DO NOT MERGE", maybe that patch is
>>>>>>>>>>>>>>>>> missing the DSI host port@0 OF graph link ? Both port@0 and port@1 are
>>>>>>>>>>>>>>>>> required, see:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/display/bridge/chipone,icn6211.yaml#n53
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> What is "non-ports-based OF graph" ?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I don't see drm_of_find_bridge() in linux-next , what is that ?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> port@0 is optional as some of the DSI host OF-graph represent the
>>>>>>>>>>>>>>>> bridge or panel as child nodes instead of ports. (i think dt-binding
>>>>>>>>>>>>>>>> has to fix it to make port@0 optional)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The current upstream DT binding document says:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>            required:
>>>>>>>>>>>>>>>              - port@0
>>>>>>>>>>>>>>>              - port@1
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> So port@0 is mandatory.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> In the binding, sure, but fundamentally the DT excerpt Jagan provided is
>>>>>>>>>>>>>> correct. If the bridge supports DCS, there's no reason to use the OF
>>>>>>>>>>>>>> graph in the first place: the bridge node will be a child node of the
>>>>>>>>>>>>>> MIPI-DSI controller (and there's no obligation to use the OF-graph for a
>>>>>>>>>>>>>> MIPI-DSI controller).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I believe port@0 should be made optional (or downright removed if
>>>>>>>>>>>>>> MIPI-DCS in the only control bus).
>>>>>>>>>>>>>
>>>>>>>>>>>>> That's out of scope of this series anyway, so Jagan can implement patches
>>>>>>>>>>>>> for that mode if needed.
>>>>>>>>>>>>
>>>>>>>>>>>> Not really? You can't count on the port@0 being there generally
>>>>>>>>>>>> speaking, so you can't count on data-lanes being there either, which
>>>>>>>>>>>> exactly what you're doing in this patch.
>>>>>>>>>>>
>>>>>>>>>>> I can because the upstream DT bindings currently say port@0 must be present,
>>>>>>>>>>> see above. If that requirement should be relaxed, sure, but that's a
>>>>>>>>>>> separate series.
>>>>>>>>>>
>>>>>>>>>> And another upstream DT bindings say that you don't need them at all.
>>>>>>>>>
>>>>>>>>> Which "another upstream DT bindings" do you refer to ?
>>>>>>>>
>>>>>>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/display/mipi-dsi-bus.txt
>>>>>>>>
>>>>>>>>>> Yes, there's a conflict. Yes, it's unfortunate. But the generic DSI
>>>>>>>>>> binding is far more relevant than a single bridge driver.
>>>>>>>>>
>>>>>>>>> That seems to be the wrong way around, how can generic subsystem-wide
>>>>>>>>> binding take precedence over specific driver binding ?
>>>>>>>>
>>>>>>>> This is the binding of the bus. You're part of that bus. You're a child
>>>>>>>> node of that bus, but nothing ever mandates that your parent node uses
>>>>>>>> the same convention. And some don't. And since your bridge can be
>>>>>>>> connected to pretty much any DSI controller, you have to use the lowest
>>>>>>>> common denominator, not make up some new constraints that not all
>>>>>>>> controller will be able to comply with.
>>>>>>>
>>>>>>> It seems to me the ICN6211 DT bindings currently further constraint the
>>>>>>> generic DSI bus bindings, and that seems OK to me.
>>>>>>>
>>>>>>> Let me reiterate this again -- if someone wants to relax the requirements
>>>>>>> currently imposed by the ICN6211 DT bindings, fine, but that can be done in
>>>>>>> a separate patchset AND that needs DT bindings update. Furthermore, there
>>>>>>> are no users of this ICN6211 bridge in upstream DTs, so there is currently
>>>>>>> no bridge which would operate without OF graph using this driver.
>>>>>>
>>>>>> And let me reiterate this again: something that used to work for a user
>>>>>> doesn't anymore when your series is applied. This is a textbook
>>>>>> regression. I suggested a way forward, that you don't like for some
>>>>>> reason, fine. But pushing through a regression is just not acceptable.
>>>>>
>>>>> How can this be a regression if this mode of operation could not have ever
>>>>> been supported with valid upstream DT bindings in the first place ?
>>>>>
>>>>> Should we now require that kernel drivers somehow magically support all
>>>>> kinds of random broken DT bindings in addition to ones which pass YAML DT
>>>>> validation ?
>>>>
>>>> The thing is, as I told you multiple times already, it was broken from
>>>> the bridge standpoint, but not from the controller's. If it had been
>>>> correct for the bridge, it wouldn't have been for the controller. So,
>>>> same story.
>>>>
>>>> The only difference is that it wouldn't affect you, but I don't see how
>>>> it's relevant.
>>>
>>> I'm sorry, I do not understand this answer.
>>>
>>>>>>>>>> So figuring it out is very much a prerequisite to that series,
>>>>>>>>>> especially since those patches effectively make the OF-graph mandatory
>>>>>>>>>> in some situations, while it was purely aesthetics before.
>>>>>>>>>
>>>>>>>>> The OF-graph is mandatory per the DT bindings of this driver. If you
>>>>>>>>> implement invalid DT which does not contain port@0, it will fail DT
>>>>>>>>> validation.
>>>>>>>>>
>>>>>>>>> If this requirement should be relaxed, sure, it can and I don't think it
>>>>>>>>> would be hard to do, but I don't see why that should be part of this series,
>>>>>>>>> which follows the upstream DT binding document for this driver.
>>>>>>>>>
>>>>>>>>> If I cannot trust the driver DT bindings to indicate what is and is not
>>>>>>>>> mandatory, what other document can I trust then ...
>>>>>>>>
>>>>>>>> Oh, come on. Doing that, you also require OF-Graph support for the DSI
>>>>>>>> controller you attach to, and you can't require that. This is very
>>>>>>>> different from just requiring a property that doesn't have any impact on
>>>>>>>> any other device, and you know that very well.
>>>>>>>
>>>>>>> Currently the ICN6211 DT bindings DO require that kind of bridge.
>>>>>>
>>>>>> And while this wasn't enforced before, you make it a hard requirement
>>>>>> with this series. This is what changed, and what caused this whole
>>>>>> discussion.
>>>>>
>>>>> The current DT bindings already make it a hard requirement, so no, nothing
>>>>> changed here.
>>>>>
>>>>> Unless what you are trying to ask for is support for broken DT bindings
>>>>> which do not pass YAML DT validation by this driver, but that is very
>>>>> dangerous, because then the question is, how far should we support such
>>>>> broken bindings. What kind of broken is still OK and what kind of broken is
>>>>> no longer OK ?
>>>>
>>>> If it ever worked in a mainline release, it must always work. See:
>>>> https://www.kernel.org/doc/html/latest/devicetree/bindings/ABI.html
>>>
>>>> As far as I'm concerned, it's the sole criteria. So to answer your
>>>> question, if it was broken but worked at some point, yes, we need to
>>>> keep supporting it. If it never worked, no, we don't.
>>>
>>> There are no users of this driver in any mainline release.
>>>
>>> DT is ABI, and ICN6211 DT bindings says port@0 is mandatory. If this
>>> driver worked with some broken downstream DT without port@0, then that
>>> downstream depended on undefined behavior which I cannot fathom how it
>>> can be considered part of kernel ABI. That downstream should fix its DT
>>> instead.
>>
>> Yes, agreed that ICN6211 DT bindings say port@0 is mandatory. However,
>> marking port@0 (after fixing DT binding) with non-I2C-ICN6211 is still
> 
> s/port@0/port@0 as optional/

The V4 requires the port@0 only for I2C bus option now, that should at 
least retain the "compatibility".

  reply	other threads:[~2022-03-11 21:11 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-04  0:24 [PATCH V3 00/13] drm: bridge: icn6211: Fix hard-coded panel settings and add I2C support Marek Vasut
2022-03-04  0:24 ` [PATCH V3 01/13] dt-bindings: display: bridge: icn6211: Document DSI data-lanes property Marek Vasut
2022-03-04  0:24   ` Marek Vasut
2022-03-07 23:32   ` Rob Herring
2022-03-07 23:32     ` Rob Herring
2022-03-08 12:45   ` Maxime Ripard
2022-03-08 12:45     ` Maxime Ripard
2022-03-04  0:24 ` [PATCH V3 02/13] drm: bridge: icn6211: Fix register layout Marek Vasut
2022-03-04  0:24 ` [PATCH V3 03/13] drm: bridge: icn6211: Fix HFP_HSW_HBP_HI and HFP_MIN handling Marek Vasut
2022-03-04  0:24 ` [PATCH V3 04/13] drm: bridge: icn6211: Add HS/VS/DE polarity handling Marek Vasut
2022-03-08 12:46   ` Maxime Ripard
2022-03-04  0:25 ` [PATCH V3 05/13] drm: bridge: icn6211: Add DSI lane count DT property parsing Marek Vasut
2022-03-08  8:03   ` Jagan Teki
2022-03-08  9:49     ` Marek Vasut
2022-03-08 10:07       ` Jagan Teki
2022-03-08 10:29         ` Marek Vasut
2022-03-08 11:32           ` Jagan Teki
2022-03-08 12:51           ` Maxime Ripard
2022-03-08 13:27             ` Marek Vasut
2022-03-08 13:49               ` Maxime Ripard
2022-03-08 14:47                 ` Marek Vasut
2022-03-08 16:21                   ` Maxime Ripard
2022-03-08 21:41                     ` Marek Vasut
2022-03-10 10:53                       ` Maxime Ripard
2022-03-10 12:47                         ` Marek Vasut
2022-03-10 14:18                           ` Maxime Ripard
2022-03-11 10:36                             ` Marek Vasut
2022-03-11 16:29                               ` Maxime Ripard
2022-03-11 19:56                                 ` Marek Vasut
2022-03-11 20:35                                   ` Jagan Teki
2022-03-11 20:38                                     ` Jagan Teki
2022-03-11 21:11                                       ` Marek Vasut [this message]
2022-03-10 10:42             ` Laurent Pinchart
2022-03-10 10:57               ` Maxime Ripard
2022-03-10 11:16                 ` Laurent Pinchart
2022-03-10 14:23                   ` Maxime Ripard
2022-03-04  0:25 ` [PATCH V3 06/13] drm: bridge: icn6211: Add generic DSI-to-DPI PLL configuration Marek Vasut
2022-03-08  8:07   ` Jagan Teki
2022-03-08 10:11     ` Marek Vasut
2022-03-04  0:25 ` [PATCH V3 07/13] drm: bridge: icn6211: Use DSI burst mode without EoT and with LP command mode Marek Vasut
2022-03-04  0:25 ` [PATCH V3 08/13] drm: bridge: icn6211: Disable DPI color swap Marek Vasut
2022-03-04  0:25 ` [PATCH V3 09/13] drm: bridge: icn6211: Set SYS_CTRL_1 to value used in examples Marek Vasut
2022-03-04  0:25 ` [PATCH V3 10/13] drm: bridge: icn6211: Implement atomic_get_input_bus_fmts Marek Vasut
2022-03-04  0:25 ` [PATCH V3 11/13] drm: bridge: icn6211: Add I2C configuration support Marek Vasut
2022-03-04  0:25 ` [PATCH V3 12/13] drm: bridge: icn6211: Rework ICN6211_DSI to chipone_writeb() Marek Vasut
2022-03-04  0:25 ` [PATCH V3 13/13] drm: bridge: icn6211: Read and validate chip IDs before configuration Marek Vasut

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=70828dfb-3010-3258-157b-635af3799b3f@denx.de \
    --to=marex@denx.de \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jagan@amarulasolutions.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=maxime@cerno.tech \
    --cc=robert.foss@linaro.org \
    --cc=sam@ravnborg.org \
    --cc=tzimmermann@suse.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.