From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Krzysztof Kozlowski <krzk@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
tomm.merciai@gmail.com, linux-renesas-soc@vger.kernel.org,
biju.das.jz@bp.renesas.com, David Airlie <airlied@gmail.com>,
Simona Vetter <simona@ffwll.ch>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v8 1/9] dt-bindings: display: renesas,rzg2l-du: Document RZ/G3E SoC
Date: Thu, 3 Sep 2026 13:01:20 +0200 [thread overview]
Message-ID: <aplTgBjpPX9d6XEh@tom-desktop> (raw)
In-Reply-To: <CAMuHMdU0y5Dg9tW7fAM3QQHKpAw_+vmjj7v-XeZmrushQgQFAA@mail.gmail.com>
Hi Geert,
On Wed, Sep 02, 2026 at 04:20:51PM +0200, Geert Uytterhoeven wrote:
> Hi all,
>
> On Wed, 2 Sept 2026 at 16:03, Tommaso Merciai
> <tommaso.merciai.xr@bp.renesas.com> wrote:
> > On Wed, Sep 02, 2026 at 08:37:06AM +0200, Krzysztof Kozlowski wrote:
> > > On Fri, Aug 28, 2026 at 02:21:04PM +0200, Tommaso Merciai wrote:
> > > > The RZ/G3E Soc has 2 LCD controller (LCDC), contain a Frame Compression
> > > > Processor (FCPVD), a Video Signal Processor (VSPD), Video Signal
> > > > Processor (VSPD), and Display Unit (DU).
> > > >
> > > > - LCDC0 supports DSI and LVDS (single or dual-channel) outputs.
> > > > - LCDC1 supports DSI, LVDS (single-channel), and RGB outputs.
> > > >
> > > > Add new SoC-specific compatible string 'renesas,r9a09g047-du'.
> > > >
> > > > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
>
> > > > --- a/Documentation/devicetree/bindings/display/renesas,rzg2l-du.yaml
> > > > +++ b/Documentation/devicetree/bindings/display/renesas,rzg2l-du.yaml
> > > > @@ -21,6 +21,7 @@ properties:
> > > > - renesas,r9a07g043u-du # RZ/G2UL
> > > > - renesas,r9a07g044-du # RZ/G2{L,LC}
> > > > - renesas,r9a08g046-du # RZ/G3L
> > > > + - renesas,r9a09g047-du # RZ/G3E
> > > > - renesas,r9a09g057-du # RZ/V2H(P)
> > > > - renesas,r9a09g077-du # RZ/T2H
> > > > - items:
> > > > @@ -35,25 +36,51 @@ properties:
> > > > - const: renesas,r9a09g077-du # RZ/T2H fallback
> > > >
> > > > reg:
> > > > - maxItems: 1
> > > > + minItems: 1
> > > > + maxItems: 2
> > > > +
> > > > + reg-names:
> > > > + items:
> > > > + - const: du.0
> > > > + - const: du.1
> > >
> > > du is the name of the device, thus calling items "0" and "1" is pretty
> > > pointless - indices already define that. Please drop the reg-names.
> >
> > Will drop this in v8.
> >
> > > > interrupts:
> > > > - maxItems: 1
> > > > + minItems: 1
> > > > + maxItems: 2
> > > > +
> > > > + interrupt-names:
> > > > + items:
> > > > + - const: du.0
> > > > + - const: du.1
> > >
> > > Same here
> >
> > Same, thanks.
> >
> > >
> > > >
> > > > clocks:
> > > > + minItems: 3
> > > > items:
> > > > - description: Main clock
> > > > - description: Register access clock
> > > > - description: Video clock
> > > > + - description: Main clock for DU1
> > > > + - description: Register access clock for DU1
> > > > + - description: Video clock for DU1
> > > >
> > > > clock-names:
> > > > + minItems: 3
> > > > items:
> > > > - const: aclk
> > > > - const: pclk
> > > > - const: vclk
> > > > + - const: aclk1
> > > > + - const: pclk1
> > > > + - const: vclk1
> > > >
> > > > resets:
> > > > - maxItems: 1
> > > > + minItems: 1
> > > > + maxItems: 2
> > > > +
> > > > + reset-names:
> > > > + items:
> > > > + - const: resetn
> > > > + - const: resetn1
> > >
> > > Drop reset-names
> >
> > For reset-names, I got the the following comment from Philipp in v7 [1].
> >
> > Dropping reset-names would force the driver back to an index-based
> > lookup, which is what that comment explicitly asked me to avoid.
> >
> > [1] https://lore.kernel.org/all/8382e2b9fd07fb1132c26e228b3899336fc1fdd4.camel@pengutronix.de/
> >
> > Philipp, Krzysztof, could you agree on which way you'd prefer?
> > I'll follow whatever you decide.
>
> Until we get a variant with a third interrupt (or reset or reg),
> which is not related to the number of channels...
Just to make sure I follow: are you referring to variants like R-Car H3
and M3-N, where the position in the array no longer matches the channel
index? From renesas,du.yaml:
[renesas,du-r8a7795: 4 channels, two resets] [1]
reset-names:
items:
- const: du.0
- const: du.2
[renesas,du-r8a77965: 3 channels, du.2 (channel 2) does not exist] [2]
clock-names:
items:
- const: du.0
- const: du.1
- const: du.3
reset-names:
items:
- const: du.0
- const: du.3
If so, I agree: the names are what makes these unambiguous, and an
index-based lookup could not express them.
Then on RZ/G3E we can keep:
reg-names:
items:
- const: du.0
- const: du.1
interrupt-names:
items:
- const: du.0
- const: du.1
Maybe make sense also for reset-names having:
reset-names:
items:
- const: du.0
- const: du.1
?
Then we can add struct rzg2l_du_channel_res:
struct rzg2l_du_channel_res {
const char *reg;
const char *aclk;
const char *pclk;
const char *vclk;
const char *rst;
};
Into struct rzg2l_du_device_info in this way we can cover future cases
du-r8a77965, du-r8a7795 -like using:
static const struct rzg2l_du_channel_res rzg2l_du_r8a7795_channels_res[] = {
[0] = { "du.0", "aclk", "pclk", "vclk", "du.0" },
[1] = { "du.1", "aclk1", "pclk1", "vclk1", "du.0" },
[2] = { "du.2", "aclk2", "pclk2", "vclk2", "du.2" },
[3] = { "du.3", "aclk3", "pclk3", "vclk3", "du.2" },
};
static const struct rzg2l_du_device_info rzg2l_du_r8a7795_info = {
.channels_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
.channels_res = rzg2l_du_r8a7795_channels_res,
.num_channels_res = ARRAY_SIZE(rzg2l_du_r8a7795_channels_res),
.routes = {
[RZG2L_DU_OUTPUT_DPAD0] = {
.possible_crtcs = BIT(0),
.port = 0,
},
[RZG2L_DU_OUTPUT_DSI0] = {
.possible_crtcs = BIT(1) | BIT(2),
.port = 1,
},
[RZG2L_DU_OUTPUT_LVDS0] = {
.possible_crtcs = BIT(3),
.port = 3,
},
},
.mode_clock_min = 5440,
.mode_clock_max = 87000,
};
/* Channels 0, 1 and 3: channel 2 does not exist, so [2] is a hole. */
static const struct rzg2l_du_channel_res rzg2l_du_r8a77965_channels_res[] = {
[0] = { "du.0", "aclk", "pclk", "vclk", "du.0" },
[1] = { "du.1", "aclk1", "pclk1", "vclk1", "du.0" },
[3] = { "du.3", "aclk3", "pclk3", "vclk3", "du.3" },
};
static const struct rzg2l_du_device_info rzg2l_du_r8a77965_info = {
.channels_mask = BIT(0) | BIT(1) | BIT(3),
.channels_res = rzg2l_du_r8a77965_channels_res,
.num_channels_res = ARRAY_SIZE(rzg2l_du_r8a77965_channels_res),
.routes = {
/*
* possible_crtcs is a software channel index: hardware channel
* 3 is the third populated one, hence BIT(2) and not BIT(3).
*/
[RZG2L_DU_OUTPUT_DPAD0] = {
.possible_crtcs = BIT(0),
.port = 0,
},
[RZG2L_DU_OUTPUT_DSI0] = {
.possible_crtcs = BIT(1),
.port = 1,
},
[RZG2L_DU_OUTPUT_LVDS0] = {
.possible_crtcs = BIT(2),
.port = 2,
},
},
.mode_clock_min = 5440,
.mode_clock_max = 87000,
};
And for RZ/G3E we will have:
static const struct rzg2l_du_channel_res rzg2l_du_r9a09g047_channels_res[] = {
[0] = { "du.0", "aclk", "pclk", "vclk", "du.0" },
[1] = { "du.1", "aclk1", "pclk1", "vclk1", "du.1" },
};
static const struct rzg2l_du_device_info rzg2l_du_r9a09g047_info = {
.channels_mask = BIT(0) | BIT(1),
.channels_res = rzg2l_du_r9a09g047_channels_res,
.num_channels_res = ARRAY_SIZE(rzg2l_du_r9a09g047_channels_res),
.routes = {
[RZG2L_DU_OUTPUT_DSI0] = {
.possible_crtcs = BIT(0) | BIT(1),
.port = 0,
},
[RZG2L_DU_OUTPUT_DPAD0] = {
.possible_crtcs = BIT(1),
.port = 1,
},
[RZG2L_DU_OUTPUT_LVDS0] = {
.possible_crtcs = BIT(0),
.port = 2,
},
[RZG2L_DU_OUTPUT_LVDS1] = {
.possible_crtcs = BIT(0) | BIT(1),
.port = 3,
},
},
.mode_clock_min = 5400,
.mode_clock_max = 87000,
};
What do you think?
[1] https://elixir.bootlin.com/linux/v7.2/source/arch/arm64/boot/dts/renesas/r8a77951.dtsi#L3363
[2] https://elixir.bootlin.com/linux/v7.2/source/arch/arm64/boot/dts/renesas/r8a77965.dtsi#L2819
Kind regards,
Tommaso
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
next prev parent reply other threads:[~2026-09-03 11:01 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-28 12:21 [PATCH v8 0/9] drm: renesas: rz-du: Add RZ/G3E support Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 1/9] dt-bindings: display: renesas, rzg2l-du: Document RZ/G3E SoC Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 1/9] dt-bindings: display: renesas,rzg2l-du: " Tommaso Merciai
2026-09-02 6:37 ` Krzysztof Kozlowski
2026-09-02 14:01 ` Tommaso Merciai
2026-09-02 14:20 ` Geert Uytterhoeven
2026-09-02 15:11 ` Tommaso Merciai
2026-09-03 8:17 ` Philipp Zabel
2026-09-03 8:28 ` Krzysztof Kozlowski
2026-09-09 15:04 ` Tommaso Merciai
2026-09-03 11:01 ` Tommaso Merciai [this message]
2026-09-03 11:44 ` Geert Uytterhoeven
2026-08-28 12:21 ` [PATCH v8 2/9] drm: renesas: rz-du: Move mmio from rzg2l_du_device to rzg2l_du_crtc Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 3/9] drm: renesas: rz-du: crtc: Parameterize rzg2l_du_crtc_create() Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 4/9] drm: renesas: rz-du: vsp: Keep the planes in the VSP Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 5/9] drm: renesas: rz-du: kms: Enable multi CRTC creation Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 6/9] drm: renesas: rz-du: crtc: Support per-channel named resources Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 7/9] drm: renesas: rz-du: Rename possible_outputs to possible_crtcs Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 8/9] drm: renesas: rz-du: Add RZ/G3E (R9A09G047) DU support Tommaso Merciai
2026-08-28 12:21 ` [PATCH v8 9/9] arm64: dts: renesas: r9a09g047: Add DU node Tommaso Merciai
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=aplTgBjpPX9d6XEh@tom-desktop \
--to=tommaso.merciai.xr@bp.renesas.com \
--cc=airlied@gmail.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert+renesas@glider.be \
--cc=geert@linux-m68k.org \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=magnus.damm@gmail.com \
--cc=mripard@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=simona@ffwll.ch \
--cc=tomm.merciai@gmail.com \
--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.