All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
To: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	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: Wed, 9 Sep 2026 17:04:12 +0200	[thread overview]
Message-ID: <aqF1FCVywlyt1eK4@tom-desktop> (raw)
In-Reply-To: <d50816260b8be29948c4cc04172b5c88ea3313a4.camel@pengutronix.de>

Hi Philipp,
Thanks for your feedback.

On Thu, Sep 03, 2026 at 10:17:23AM +0200, Philipp Zabel wrote:
> On Mi, 2026-09-02 at 17:11 +0200, Tommaso Merciai wrote:
> > 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...
> > 
> > Right, IMHO names keep the driver flexible enough for such a variant,
> > indices don't.
> 
> I would like to get rid of the reset_control_get_by_index() API
> altogether, if possible. Currently there are only users with index ==
> 0, so this would be the first and so far only valid user. I'd prefer if
> we could keep reset lookup aligned with clock lookup, with via clock-
> names as well.
> 
> That being said, why are the two DU units represented as a single
> device tree node at all? Aren't they two completely separate instances
> of the same IP core?

They are, and maybe describing them as one node was the wrong call.
Let me explain what pushed me there, because it also settles the
reset-names question above.

RZ/G3E instantiates the LCDC twice, and some outputs can be driven by
either instance. DSI is wired to both and the LVDS channel 1 same.

For userspace to pick the source at runtime, the two CRTCs and that
output's encoder have to live in the same drm_device.

With one drm_device per DU node, an output reachable from both instances
can only be exposed on one card, and the other instance is unreachable for it.

So I merged the two instances into a single DT node to obtain that
single drm_device.

That solves a driver issue but maybe distorting the hardware description.

The right shape maybe can be the virtual subsystem node already used by
other DRM drivers:

	- fsl,imx-display-subsystem [1]
	- rockchip,display-subsystem [2]
	- sprd,display-subsystem [3].

Maybe we can have:

    display-subsystem {
            compatible = "renesas,r9a09g047-display-subsystem";
            ports = <&du0_ports>, <&du1_ports>;
    };

with du0 and du1 nodes:

    du0: display@16460000 {
            compatible = "renesas,r9a09g047-du";
            reg = <0 0x16460000 0 0x10000>;
            interrupts = <GIC_SPI 882 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cpg CPG_MOD 0xed>,
                     <&cpg CPG_MOD 0xee>,
                     <&cpg CPG_MOD 0xef>;
            clock-names = "aclk", "pclk", "vclk";
            power-domains = <&cpg>;
            resets = <&cpg 0xdc>;
            renesas,vsps = <&vspd0 0>;
            status = "disabled";

            du0_ports: ports {
                    #address-cells = <1>;
                    #size-cells = <0>;

                    port@0 {
                            reg = <0>;
                            du0_out_dsi: endpoint {
                            };
                    };

                    port@2 {
                            reg = <2>;
                            du0_out_lvds0: endpoint {
                            };
                    };

                    port@3 {
                            reg = <3>;
                            du0_out_lvds1: endpoint {
                            };
                    };
            };
    };

    du1: display@16490000 {
            compatible = "renesas,r9a09g047-du";
            reg = <0 0x16490000 0 0x10000>;
            interrupts = <GIC_SPI 922 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cpg CPG_MOD 0x1a8>,
                     <&cpg CPG_MOD 0x1a9>,
                     <&cpg CPG_MOD 0x1aa>;
            clock-names = "aclk", "pclk", "vclk";
            power-domains = <&cpg>;
            resets = <&cpg 0x11e>;
            renesas,vsps = <&vspd1 0>;
            status = "disabled";

            du1_ports: ports {
                    #address-cells = <1>;
                    #size-cells = <0>;

                    port@0 {
                            reg = <0>;
                            du1_out_dsi: endpoint {
                            };
                    };

                    port@1 {
                            reg = <1>;
                            du1_out_rgb: endpoint {
                            };
                    };

                    port@3 {
                            reg = <3>;
                            du1_out_lvds1: endpoint {
                            };
                    };
            };
    };

Each node then carries a single reg, a single interrupt, three clocks
and a single reset.

With this solution reg-names, interrupt-names and reset-names all go away.

This will need one new binding:

    Documentation/devicetree/bindings/display/renesas,r9a09g047-drm.yaml

For describint the "renesas,r9a09g047-display-subsystem", a virtual device
that groups the Display Unit instances comprising the graphics subsystem.
The existing renesas,rzg2l-du.yaml keeps describing a single DU instance
unchanged, which is what the v5 approach [4] already did.

What this buys at runtime, with both DU nodes enabled: the SoC DTS wires
DSI to both instances, so the DSI encoder ends up with both CRTCs in its
possible_crtcs mask and userspace can move the output between them:

e.g.
    modetest -M rzg2l-du -s <dsi-connector-0>@<crtc0>:1920x1080-59.94@XR24
    modetest -M rzg2l-du -s <dsi-connector-0>@<crtc1>:1920x1080-59.94@XR24

LVDS channel 1 is the same situation in hardware.

What do you think?

[1] https://elixir.bootlin.com/linux/v7.3-rc1/source/Documentation/devicetree/bindings/display/imx/fsl,imx-display-subsystem.yaml
[2] https://elixir.bootlin.com/linux/v7.3-rc1/source/Documentation/devicetree/bindings/display/rockchip/rockchip-drm.yaml
[3] https://elixir.bootlin.com/linux/v7.3-rc1/source/Documentation/devicetree/bindings/display/sprd/sprd,display-subsystem.yaml
[4] https://lore.kernel.org/all/ca022fdbba5236c36e0cb3095db4c31e8e0cb1b8.1770996493.git.tommaso.merciai.xr@bp.renesas.com/

Kind regards,
Tommaso

> 
> regards
> Philipp

  parent reply	other threads:[~2026-09-09 15:04 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 [this message]
2026-09-03 11:01         ` Tommaso Merciai
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=aqF1FCVywlyt1eK4@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.