[PATCH v8 0/9] drm: renesas: rz-du: Add RZ/G3E support
From: Tommaso Merciai
Date: Fri Aug 28 2026 - 08:22:39 EST
Dear All,
This patch series adds DU/DRM support for the 2 Display Units (DUs) interface
found on the Renesas RZ/G3E SoC.
RZ/G3E SoC has 2 LCD controller (LCDC0 and LCDC1), both are composed
of Frame Compression Processor (FCPVD), Video Signal Processor (VSPD),
and Display Unit (DU).
LCDC0 is connected to LVDS (single or dual channel) and DSI.
LCDC1 is connected to LVDS (single ch), DSI, and GPIO (Parallel I/F).
The first patches prepare the driver for SoCs with more than one DU
channel: the registers, clocks and resets become per channel, and the
CRTCs are created from the channels_mask of the SoC information.
The RZ/G3E support and the DU node follow.
This series apply on top of RZ/G3L du support [1]
[1] https://lore.kernel.org/all/20260826174854.199139-1-biju.das.jz@xxxxxxxxxxxxxx/
Kind regards,
Tommaso
v7->v8:
- Rebased on top of next-20260827 + [1].
- Improved cover letter.
- Modelled using ports/port instead of port/ep.
- PATCH 01/9: Add RZ/G3E support on top of [1] using R-Car like architecture,
improved commit msg and commit body.
- PATCH 08/9: Use R-Car like architecture for RZ/G3E and added
mode_clock_min, mode_clock_max for parallel output, improved commit msg
and commit body.
v6->v7:
- Rebased on top of next-20260605
- Splitted the original series into smaller chunks for easy review and easy
merging. The original series is available here:
http://lore.kernel.org/all/cover.1775636898.git.tommaso.merciai.xr@xxxxxxxxxxxxxx/
- PATCH 01/13: Collected LPinchart tag. Removed wrong fixes tag.
- PATCH 02/13: Rebased on top of [1]. Use single DRM device aggregating
both DU instances (1 DU dt node), modelling single port for each DU0,
DU1 and multiple endpoints for outputs.
- PATCH 12/13: Removed feature flag usage, rebased on top of T2H/N2H LCDC series [1]
Reworked commit body as now outputs routing is based on endpoint id
instead of port number. Fixed rzg2l_du_r9a09g047_info instead of
rzg2l_du_r9a09g047_du_info.
Added bump of RZG2L_DU_MAX_CRTCS and RZG2L_DU_MAX_VSPS to 2.
v5->v6:
- Rebased on top of next-20260406
- PATCH 1: Fixed rzv2h_cpg_plldsi_smux_clk_register() removed u8 width, mask
variables and replaced with direct use of smux.width and clk_div_mask(smux.width).
- PATCH 9: New patch.
- PATCH 10: Extend patternProperties from "^port@[0-1]$" to "^port@[0-3]$" and
explicitly disable port@2 and port@3 for existing SoCs that do not expose
them. Reworked ports numbering + improved/fixed ports descriptions in the
bindings documentation. Improved commit body.
- PATCH 15: Aligned ports numbering with the bindings changes.
- PATCH 20: Update ports numbering accordingly to the latest DT bindings.
v4->v5:
- Rebased on top of next-20260211
- PATCH 9: Dropped renesas,id property.
- PATCH 10: Collected tag.
- PATCH 14: Fixed RG2L_DU_FEATURE_SMUX2_DSI_CLK to RZG2L_DU_FEATURE_SMUX2_DSI_CLK
Added features field documentation.
- PATCH 19: Rename du0_out_dsi0 into du0_out_dsi.
Rename du1_out_dsi0 into du1_out_dsi.
Drop renesas,id entry from DU nodes.
- PATCH 20: Use DU0 -> DSI instead of DU1 -> DSI.
v3->v4:
- Rebased on top of next-20260130
- PATCH 1: Fixed build error: https://lore.kernel.org/oe-kbuild-all/202601311423.gWtJuxiU-lkp@xxxxxxxxx/
v2->v3:
- PATCH 1: Added missing defines for duty num/den.
v1->v2:
- Rebased on top of next-20260129.
- PATCH 1: Added rzv2h_cpg_plldsi_smux_{get,set}_duty_cycle clock
operations to allow the DRM driver to query and configure the
appropriate clock path based on the required output duty cycle.
Updated commit message accordingly.
- PATCH 2-5: Collected tags.
- PATCH 6: Moved clk_ids to match enum order.
- PATCH 7: Collected GUytterhoeven tag. Fixed "dsi_0_vclk2" position
to match order.
- PATCH 8: Collected GUytterhoeven tag.
- PATCH 9: Use single compatible string instead of multiple compatible
strings for the two DU instances, leveraging a 'renesas,id' property
to differentiate between DU0 and DU1. Updated commit message.
- PATCH 10: Removed oneOf from clocks property, which is not sufficient
to differentiate between RZ/G3E, RZ/V2H(P) and RZ/G2L. Use the already
existing vclk instead of vclk1 for RZ/G3E DSI bindings. Updated allOf.
- PATCH 14: Instead of using clk-provider API to select the right parent
clock, just set the correct duty cycle based on the output. Updated
commit message accordingly.
- PATCH 15-16: Collected tags.
- PATCH 17: Squashed fcpvd0 and fcpvd1 patches into a single patch.
Collected tags.
- PATCH 18: Squashed vspd0 and vspd1 patches into a single patch.
Collected tags.
- PATCH 19: Reworked DU nodes to use single compatible. Use vclk instead
of vclk1 for DSI Node and set to the right position.
- PATCH 20: Fixed: dsi, du and adv7535 are part of the R9A09G047E57
SMARC SoM board then add entries in the rzg3e-smarc-som.dtsi instead
of using the r9a09g047e57-smarc-du1-adv7535.dtsi.
Tommaso Merciai (9):
dt-bindings: display: renesas,rzg2l-du: Document RZ/G3E SoC
drm: renesas: rz-du: Move mmio from rzg2l_du_device to rzg2l_du_crtc
drm: renesas: rz-du: crtc: Parameterize rzg2l_du_crtc_create()
drm: renesas: rz-du: vsp: Keep the planes in the VSP
drm: renesas: rz-du: kms: Enable multi CRTC creation
drm: renesas: rz-du: crtc: Support per-channel named resources
drm: renesas: rz-du: Rename possible_outputs to possible_crtcs
drm: renesas: rz-du: Add RZ/G3E (R9A09G047) DU support
arm64: dts: renesas: r9a09g047: Add DU node
.../bindings/display/renesas,rzg2l-du.yaml | 95 ++++++++++++++++++-
arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 52 ++++++++++
drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c | 88 ++++++++++++-----
drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.h | 5 +-
drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c | 50 +++++++---
drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.h | 14 +--
.../gpu/drm/renesas/rz-du/rzg2l_du_encoder.c | 3 +-
drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c | 18 +++-
drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c | 21 +---
drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h | 11 +--
10 files changed, 279 insertions(+), 78 deletions(-)
--
2.54.0