All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Krummenacher <max.krummenacher@active.ch>
To: Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Maxime Ripard <maxime@cerno.tech>
Cc: Marek Vasut <marex@denx.de>,
	Christoph Niedermaier <cniedermaier@dh-electronics.com>,
	Max Krummenacher <max.krummenacher@toradex.com>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	 David Airlie <airlied@linux.ie>, Sam Ravnborg <sam@ravnborg.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	 DRI Development <dri-devel@lists.freedesktop.org>,
	DenysDrozdov <denys.drozdov@toradex.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Shawn Guo <shawnguo@kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	NXP Linux Team <linux-imx@nxp.com>
Subject: Re: [RFC PATCH] drm/panel: simple: panel-dpi: use bus-format to set bpc and bus_format
Date: Wed, 23 Mar 2022 09:42:11 +0100	[thread overview]
Message-ID: <5ae44b7cd1f7577c98f316a7d288aa4cf423da2d.camel@active.ch> (raw)
In-Reply-To: <CAPY8ntAjnmAyr=6sdAJWbmiEODHM3=Q3c5UnBCTNgyZqBsWBzQ@mail.gmail.com>

Am Freitag, den 18.03.2022, 17:53 +0000 schrieb Dave Stevenson:
> On Fri, 18 Mar 2022 at 17:16, Maxime Ripard <maxime@cerno.tech> wrote:
> > On Fri, Mar 18, 2022 at 05:05:11PM +0000, Dave Stevenson wrote:
> > > Hi Maxime
> > > 
> > > On Fri, 18 Mar 2022 at 16:35, Maxime Ripard <maxime@cerno.tech> wrote:
> > > > On Mon, Mar 07, 2022 at 04:26:56PM +0100, Max Krummenacher wrote:
> > > > > On Wed, Mar 2, 2022 at 5:22 PM Marek Vasut <marex@denx.de> wrote:
> > > > > > On 3/2/22 15:21, Maxime Ripard wrote:
> > > > > > > Hi,
> > > > > > 
> > > > > > Hi,
> > > > > > 
> > > > > > > Please try to avoid top posting
> > > > > Sorry.
> > > > > 
> > > > > > > On Wed, Feb 23, 2022 at 04:25:19PM +0100, Max Krummenacher wrote:
> > > > > > > > The goal here is to set the element bus_format in the struct
> > > > > > > > panel_desc. This is an enum with the possible values defined in
> > > > > > > > include/uapi/linux/media-bus-format.h.
> > > > > > > > 
> > > > > > > > The enum values are not constructed in a way that you could calculate
> > > > > > > > the value from color channel width/shift/mapping/whatever. You rather
> > > > > > > > would have to check if the combination of color channel
> > > > > > > > width/shift/mapping/whatever maps to an existing value and otherwise
> > > > > > > > EINVAL out.
> > > > > > > > 
> > > > > > > > I don't see the value in having yet another way of how this
> > > > > > > > information can be specified and then having to write a more
> > > > > > > > complicated parser which maps the dt data to bus_format.
> > > > > > > 
> > > > > > > Generally speaking, sending an RFC without explicitly stating what you
> > > > > > > want a comment on isn't very efficient.
> > > > > > 
> > > > > > Isn't that what RFC stands for -- Request For Comment ?
> > > > > 
> > > > > I hoped that the link to the original discussion was enough.
> > > > > 
> > > > > panel-simple used to have a finite number of hardcoded panels selected
> > > > > by their compatible.
> > > > > The following patchsets added a compatible 'panel-dpi' which should
> > > > > allow to specify the panel in the device tree with timing etc.
> > > > >   
> > > > > https://patchwork.kernel.org/project/dri-devel/patch/20200216181513.28109-6-sam@ravnborg.org/
> > > > > In the same release cycle part of it got reverted:
> > > > >   
> > > > > https://patchwork.kernel.org/project/dri-devel/patch/20200314153047.2486-3-sam@ravnborg.org/
> > > > > With this it is no longer possible to set bus_format.
> > > > > 
> > > > > The explanation what makes the use of a property "data-mapping" not a
> > > > > suitable way in that revert
> > > > > is a bit vague.
> > > > 
> > > > Indeed, but I can only guess. BGR666 in itself doesn't mean much for
> > > > example. Chances are the DPI interface will use a 24 bit bus, so where
> > > > is the padding?
> > > > 
> > > > I think that's what Sam and Laurent were talking about: there wasn't
> > > > enough information encoded in that property to properly describe the
> > > > format, hence the revert.

I agree that the strings used to set "data-mapping" weren't self explaining.
However, as there was a
clear 1:1 relation to the bus_format value the meaning
wasn't ambiguous at all.

> > > 
> > > MEDIA_BUS_FMT_RGB666_1X18 defines an 18bit bus, therefore there is no
> > > padding. "bgr666" was selecting that media bus code (I won't ask about
> > > the rgb/bgr swap).
> > > 
> > > If there is padding on a 24 bit bus, then you'd use (for example)
> > > MEDIA_BUS_FMT_RGB666_1X24_CPADHI to denote that the top 2 bits of each
> > > colour are the padding. Define and use a PADLO variant if the padding
> > > is the low bits.
> > 
> > Yeah, that's kind of my point actually :)
> 
> Ah, OK :)
> 
> > Just having a rgb666 string won't allow to differentiate between
> > MEDIA_BUS_FMT_RGB666_1X18 and MEDIA_BUS_FMT_RGB666_1X24_CPADHI: both are
> > RGB666 formats. Or we could say that it's MEDIA_BUS_FMT_RGB666_1X18 and
> > then when we'll need MEDIA_BUS_FMT_RGB666_1X24_CPADHI we'll add a new
> > string but that usually leads to inconsistent or weird names, so this
> > isn't ideal.

We're on the same page that the strings that were used aren't self
explaining and do not follow a pattern which would make it easy to
extend. However that is something I addressed in my RFC proposal, not?

> > 
> > > The string matching would need to be extended to have some string to
> > > select those codes ("lvds666" is a weird choice from the original
> > > patch).
> > > 
> > > Taking those media bus codes and handling them appropriately is
> > > already done in vc4_dpi [1], and the vendor tree has gained
> > > BGR666_1X18 and BGR666_1X24_CPADHI [2] as they aren't defined in
> > > mainline.
> > > 
> > > Now this does potentially balloon out the number of MEDIA_BUS_FMT_xxx
> > > defines needed, but that's the downside of having defines for all
> > > formats.
> > > 
> > > (I will admit to having a similar change in the Pi vendor tree that
> > > allows the media bus code to be selected explicitly by hex value).
> > 
> > I think having an integer value is indeed better: it doesn't change much
> > in the device tree if we're using a header, it makes the driver simpler
> > since we don't have to parse a string, and we can easily extend it or
> > rename the define, it won't change the ABI.

Fine with me.

> > 
> > I'm not sure using the raw media bus format value is ideal though, since
> > that value could then be used by any OS, and it would effectively force
> > the mbus stuff down their throat.

I disagree here, this forces us to use code to map the device tree enum
to the kernel enum for Linux, i.e. adds complexity and maintenance work
if additional bus_formats are needed.
Assuming there is another OS which uses the device tree it would not
make a difference, that OS would still need to map the device tree enum
to the corresponding representation in their kernel.
I would copy the definitions of media-bus-format.h into a header in
include/dt-bindings similarly as it is done for
include/dt-bindings/display/sdtv-standards.h for TV standards.

> 
> I'll agree that the media bus format isn't the nicest, but I was
> looking for a quick fix that could be configured from an overlay.
> 
> If using defines, then possibly go for a partial bitmask?
> 3 bits for RGB order can be defined across the board. An encoding of
> the bus width. And then the packing within that bus width would have
> to be a lookup table, with no padding, padhi, and padlo being defined
> as 0, 1, and 2 respectively. >=3 are extensions per bus width.
> MEDIA_BUS_FMT_RGB666_1X24_CPADHI might then be described as ORDER_RGB
> > BUS_24 | PAD_HI.
> And MEDIA_BUS_FMT_BGR666 as ORDER_BGR | BUS_18 | NO_PAD.
> 
> Hmm, a bit more thought needed for RGB565, as a bus width of 16
> wouldn't guarantee that.

I disagree here, I don't see value in that structuring. It won't
help us mapping it to the corresponding bus_format enum and it
might be incomplete for bus_formats added in the future. 
E.g. besides your RGB565 example consider a Tegra 30 which for RGB666
outputs them on [23:8] and for RGB888 the 6 most significant bits are
kept in [23:8], the 2 least significant ones in [7:0]. That wouldn't
fit in this structured enum you propose, however one could easily add
a new consecutive number to the enum.

Max

> 
>   Dave


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Max Krummenacher <max.krummenacher@active.ch>
To: Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Maxime Ripard <maxime@cerno.tech>
Cc: Marek Vasut <marex@denx.de>,
	Christoph Niedermaier <cniedermaier@dh-electronics.com>,
	Max Krummenacher <max.krummenacher@toradex.com>,
	David Airlie <airlied@linux.ie>, Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	DRI Development <dri-devel@lists.freedesktop.org>,
	DenysDrozdov <denys.drozdov@toradex.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Sam Ravnborg <sam@ravnborg.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	NXP Linux Team <linux-imx@nxp.com>
Subject: Re: [RFC PATCH] drm/panel: simple: panel-dpi: use bus-format to set bpc and bus_format
Date: Wed, 23 Mar 2022 09:42:11 +0100	[thread overview]
Message-ID: <5ae44b7cd1f7577c98f316a7d288aa4cf423da2d.camel@active.ch> (raw)
In-Reply-To: <CAPY8ntAjnmAyr=6sdAJWbmiEODHM3=Q3c5UnBCTNgyZqBsWBzQ@mail.gmail.com>

Am Freitag, den 18.03.2022, 17:53 +0000 schrieb Dave Stevenson:
> On Fri, 18 Mar 2022 at 17:16, Maxime Ripard <maxime@cerno.tech> wrote:
> > On Fri, Mar 18, 2022 at 05:05:11PM +0000, Dave Stevenson wrote:
> > > Hi Maxime
> > > 
> > > On Fri, 18 Mar 2022 at 16:35, Maxime Ripard <maxime@cerno.tech> wrote:
> > > > On Mon, Mar 07, 2022 at 04:26:56PM +0100, Max Krummenacher wrote:
> > > > > On Wed, Mar 2, 2022 at 5:22 PM Marek Vasut <marex@denx.de> wrote:
> > > > > > On 3/2/22 15:21, Maxime Ripard wrote:
> > > > > > > Hi,
> > > > > > 
> > > > > > Hi,
> > > > > > 
> > > > > > > Please try to avoid top posting
> > > > > Sorry.
> > > > > 
> > > > > > > On Wed, Feb 23, 2022 at 04:25:19PM +0100, Max Krummenacher wrote:
> > > > > > > > The goal here is to set the element bus_format in the struct
> > > > > > > > panel_desc. This is an enum with the possible values defined in
> > > > > > > > include/uapi/linux/media-bus-format.h.
> > > > > > > > 
> > > > > > > > The enum values are not constructed in a way that you could calculate
> > > > > > > > the value from color channel width/shift/mapping/whatever. You rather
> > > > > > > > would have to check if the combination of color channel
> > > > > > > > width/shift/mapping/whatever maps to an existing value and otherwise
> > > > > > > > EINVAL out.
> > > > > > > > 
> > > > > > > > I don't see the value in having yet another way of how this
> > > > > > > > information can be specified and then having to write a more
> > > > > > > > complicated parser which maps the dt data to bus_format.
> > > > > > > 
> > > > > > > Generally speaking, sending an RFC without explicitly stating what you
> > > > > > > want a comment on isn't very efficient.
> > > > > > 
> > > > > > Isn't that what RFC stands for -- Request For Comment ?
> > > > > 
> > > > > I hoped that the link to the original discussion was enough.
> > > > > 
> > > > > panel-simple used to have a finite number of hardcoded panels selected
> > > > > by their compatible.
> > > > > The following patchsets added a compatible 'panel-dpi' which should
> > > > > allow to specify the panel in the device tree with timing etc.
> > > > >   
> > > > > https://patchwork.kernel.org/project/dri-devel/patch/20200216181513.28109-6-sam@ravnborg.org/
> > > > > In the same release cycle part of it got reverted:
> > > > >   
> > > > > https://patchwork.kernel.org/project/dri-devel/patch/20200314153047.2486-3-sam@ravnborg.org/
> > > > > With this it is no longer possible to set bus_format.
> > > > > 
> > > > > The explanation what makes the use of a property "data-mapping" not a
> > > > > suitable way in that revert
> > > > > is a bit vague.
> > > > 
> > > > Indeed, but I can only guess. BGR666 in itself doesn't mean much for
> > > > example. Chances are the DPI interface will use a 24 bit bus, so where
> > > > is the padding?
> > > > 
> > > > I think that's what Sam and Laurent were talking about: there wasn't
> > > > enough information encoded in that property to properly describe the
> > > > format, hence the revert.

I agree that the strings used to set "data-mapping" weren't self explaining.
However, as there was a
clear 1:1 relation to the bus_format value the meaning
wasn't ambiguous at all.

> > > 
> > > MEDIA_BUS_FMT_RGB666_1X18 defines an 18bit bus, therefore there is no
> > > padding. "bgr666" was selecting that media bus code (I won't ask about
> > > the rgb/bgr swap).
> > > 
> > > If there is padding on a 24 bit bus, then you'd use (for example)
> > > MEDIA_BUS_FMT_RGB666_1X24_CPADHI to denote that the top 2 bits of each
> > > colour are the padding. Define and use a PADLO variant if the padding
> > > is the low bits.
> > 
> > Yeah, that's kind of my point actually :)
> 
> Ah, OK :)
> 
> > Just having a rgb666 string won't allow to differentiate between
> > MEDIA_BUS_FMT_RGB666_1X18 and MEDIA_BUS_FMT_RGB666_1X24_CPADHI: both are
> > RGB666 formats. Or we could say that it's MEDIA_BUS_FMT_RGB666_1X18 and
> > then when we'll need MEDIA_BUS_FMT_RGB666_1X24_CPADHI we'll add a new
> > string but that usually leads to inconsistent or weird names, so this
> > isn't ideal.

We're on the same page that the strings that were used aren't self
explaining and do not follow a pattern which would make it easy to
extend. However that is something I addressed in my RFC proposal, not?

> > 
> > > The string matching would need to be extended to have some string to
> > > select those codes ("lvds666" is a weird choice from the original
> > > patch).
> > > 
> > > Taking those media bus codes and handling them appropriately is
> > > already done in vc4_dpi [1], and the vendor tree has gained
> > > BGR666_1X18 and BGR666_1X24_CPADHI [2] as they aren't defined in
> > > mainline.
> > > 
> > > Now this does potentially balloon out the number of MEDIA_BUS_FMT_xxx
> > > defines needed, but that's the downside of having defines for all
> > > formats.
> > > 
> > > (I will admit to having a similar change in the Pi vendor tree that
> > > allows the media bus code to be selected explicitly by hex value).
> > 
> > I think having an integer value is indeed better: it doesn't change much
> > in the device tree if we're using a header, it makes the driver simpler
> > since we don't have to parse a string, and we can easily extend it or
> > rename the define, it won't change the ABI.

Fine with me.

> > 
> > I'm not sure using the raw media bus format value is ideal though, since
> > that value could then be used by any OS, and it would effectively force
> > the mbus stuff down their throat.

I disagree here, this forces us to use code to map the device tree enum
to the kernel enum for Linux, i.e. adds complexity and maintenance work
if additional bus_formats are needed.
Assuming there is another OS which uses the device tree it would not
make a difference, that OS would still need to map the device tree enum
to the corresponding representation in their kernel.
I would copy the definitions of media-bus-format.h into a header in
include/dt-bindings similarly as it is done for
include/dt-bindings/display/sdtv-standards.h for TV standards.

> 
> I'll agree that the media bus format isn't the nicest, but I was
> looking for a quick fix that could be configured from an overlay.
> 
> If using defines, then possibly go for a partial bitmask?
> 3 bits for RGB order can be defined across the board. An encoding of
> the bus width. And then the packing within that bus width would have
> to be a lookup table, with no padding, padhi, and padlo being defined
> as 0, 1, and 2 respectively. >=3 are extensions per bus width.
> MEDIA_BUS_FMT_RGB666_1X24_CPADHI might then be described as ORDER_RGB
> > BUS_24 | PAD_HI.
> And MEDIA_BUS_FMT_BGR666 as ORDER_BGR | BUS_18 | NO_PAD.
> 
> Hmm, a bit more thought needed for RGB565, as a bus width of 16
> wouldn't guarantee that.

I disagree here, I don't see value in that structuring. It won't
help us mapping it to the corresponding bus_format enum and it
might be incomplete for bus_formats added in the future. 
E.g. besides your RGB565 example consider a Tegra 30 which for RGB666
outputs them on [23:8] and for RGB888 the 6 most significant bits are
kept in [23:8], the 2 least significant ones in [7:0]. That wouldn't
fit in this structured enum you propose, however one could easily add
a new consecutive number to the enum.

Max

> 
>   Dave


  reply	other threads:[~2022-03-23  8:49 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-22  8:47 [RFC PATCH] drm/panel: simple: panel-dpi: use bus-format to set bpc and bus_format Max Krummenacher
2022-02-22  8:47 ` Max Krummenacher
2022-02-23 13:41 ` Maxime Ripard
2022-02-23 13:41   ` Maxime Ripard
2022-02-23 13:45   ` Marek Vasut
2022-02-23 13:45     ` Marek Vasut
2022-02-23 13:47     ` Maxime Ripard
2022-02-23 13:47       ` Maxime Ripard
2022-02-23 14:09       ` Marek Vasut
2022-02-23 14:09         ` Marek Vasut
2022-02-23 14:37         ` Maxime Ripard
2022-02-23 14:37           ` Maxime Ripard
2022-02-23 14:38           ` Marek Vasut
2022-02-23 14:38             ` Marek Vasut
2022-02-23 16:39             ` Maxime Ripard
2022-02-23 16:39               ` Maxime Ripard
2022-02-23 16:57               ` Marek Vasut
2022-02-23 16:57                 ` Marek Vasut
2022-02-23 15:25     ` Max Krummenacher
2022-02-23 15:25       ` Max Krummenacher
2022-03-02 14:21       ` Maxime Ripard
2022-03-02 14:21         ` Maxime Ripard
2022-03-02 16:22         ` Marek Vasut
2022-03-02 16:22           ` Marek Vasut
2022-03-07 15:26           ` Max Krummenacher
2022-03-07 15:26             ` Max Krummenacher
2022-03-18 16:35             ` Maxime Ripard
2022-03-18 16:35               ` Maxime Ripard
2022-03-18 17:05               ` Dave Stevenson
2022-03-18 17:05                 ` Dave Stevenson
2022-03-18 17:16                 ` Maxime Ripard
2022-03-18 17:16                   ` Maxime Ripard
2022-03-18 17:53                   ` Dave Stevenson
2022-03-18 17:53                     ` Dave Stevenson
2022-03-23  8:42                     ` Max Krummenacher [this message]
2022-03-23  8:42                       ` Max Krummenacher
2022-03-23 15:58                       ` Maxime Ripard
2022-03-23 15:58                         ` Maxime Ripard
2022-03-23 20:06                         ` Max Krummenacher
2022-03-23 20:06                           ` Max Krummenacher
2022-03-24  8:15                           ` Francesco Dolcini
2022-03-24  8:15                             ` Francesco Dolcini
2022-04-08 18:01                             ` Laurent Pinchart
2022-04-08 18:01                               ` Laurent Pinchart
2022-04-08 18:15                           ` Laurent Pinchart
2022-04-08 18:15                             ` Laurent Pinchart
2022-04-19 11:50                             ` Max Krummenacher
2022-04-19 11:50                               ` Max Krummenacher

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=5ae44b7cd1f7577c98f316a7d288aa4cf423da2d.camel@active.ch \
    --to=max.krummenacher@active.ch \
    --cc=airlied@linux.ie \
    --cc=cniedermaier@dh-electronics.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=denys.drozdov@toradex.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kernel@pengutronix.de \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=marex@denx.de \
    --cc=max.krummenacher@gmx.de \
    --cc=max.krummenacher@toradex.com \
    --cc=maxime@cerno.tech \
    --cc=s.hauer@pengutronix.de \
    --cc=sam@ravnborg.org \
    --cc=shawnguo@kernel.org \
    /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.