[PATCH 06/16] drm: renesas: rzg2l_mipi_dsi: Add RZ/G3L MIPI DSI support
From: Biju
Date: Sat Jul 04 2026 - 05:37:14 EST
From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
Add support for the MIPI DSI controller found on the Renesas RZ/G3L
(R9A08G046) SoC. The D-PHY global timing table of RZ/G3L SoC different
compared to the other SoCs. Introduce a dedicated D-PHY global timing
table rzg3l_mipi_dsi_global_timings and wire it up via a new
rzg3l_mipi_dsi_info hw_info variant for RZ/G3L SoC.
Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
---
.../gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 129 +++++++++++++++++-
1 file changed, 128 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
index 8bd664aa69ac..25f7602397dc 100644
--- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
+++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
@@ -227,6 +227,107 @@ static const struct rzg2l_mipi_dsi_timings rzg2l_mipi_dsi_global_timings[] = {
},
};
+static const struct rzg2l_mipi_dsi_timings rzg3l_mipi_dsi_global_timings[] = {
+ {
+ .hsfreq_max = 100000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 18,
+ .tclk_zero = 35,
+ .tclk_pre = 13,
+ .tclk_post = 94,
+ .tclk_trail = 10,
+ .ths_zero = 16,
+ .ths_trail = 22,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+ {
+ .hsfreq_max = 150000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 16,
+ .tclk_zero = 35,
+ .tclk_pre = 13,
+ .tclk_post = 94,
+ .tclk_trail = 10,
+ .ths_zero = 16,
+ .ths_trail = 15,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+ {
+ .hsfreq_max = 250000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 13,
+ .tclk_zero = 35,
+ .tclk_pre = 13,
+ .tclk_post = 58,
+ .tclk_trail = 8,
+ .ths_zero = 16,
+ .ths_trail = 10,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+ {
+ .hsfreq_max = 400000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 12,
+ .tclk_zero = 35,
+ .tclk_pre = 4,
+ .tclk_post = 58,
+ .tclk_trail = 7,
+ .ths_zero = 16,
+ .ths_trail = 9,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+ {
+ .hsfreq_max = 600000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 11,
+ .tclk_zero = 35,
+ .tclk_pre = 4,
+ .tclk_post = 35,
+ .tclk_trail = 5,
+ .ths_zero = 16,
+ .ths_trail = 6,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+ {
+ .hsfreq_max = 1000000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 11,
+ .tclk_zero = 35,
+ .tclk_pre = 4,
+ .tclk_post = 35,
+ .tclk_trail = 5,
+ .ths_zero = 16,
+ .ths_trail = 6,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+ {
+ .hsfreq_max = 1500000000,
+ .t_init = 79801,
+ .tclk_prepare = 10,
+ .ths_prepare = 11,
+ .tclk_zero = 35,
+ .tclk_pre = 4,
+ .tclk_post = 35,
+ .tclk_trail = 4,
+ .ths_zero = 16,
+ .ths_trail = 5,
+ .ths_exit = 15,
+ .tlpx = 9,
+ },
+};
+
/**
* struct rzv2h_mipi_dsi_timings - Timing parameter table structure
*
@@ -1132,6 +1233,7 @@ static int rzg2l_mipi_dsi_host_attach(struct mipi_dsi_host *host,
struct mipi_dsi_device *device)
{
struct rzg2l_mipi_dsi *dsi = host_to_rzg2l_mipi_dsi(host);
+ struct clk *clk_parent;
int bpp;
int ret;
@@ -1186,7 +1288,10 @@ static int rzg2l_mipi_dsi_host_attach(struct mipi_dsi_host *host,
*/
rzg2l_cpg_dsi_div_set_divider(bpp * 2 / dsi->lanes, PLL5_TARGET_DSI);
- return 0;
+ /* DSI has symmetric 50% duty cycle */
+ clk_parent = clk_get_parent(dsi->vclk);
+
+ return clk_set_duty_cycle(clk_parent, 1, 2);
}
static int rzg2l_mipi_dsi_host_detach(struct mipi_dsi_host *host,
@@ -1600,7 +1705,29 @@ static const struct rzg2l_mipi_dsi_hw_info rzg2l_mipi_dsi_info = {
.activation_dly = 1000,
};
+static const struct reg_field rzg3l_pwrrdy_reg_field = {
+ .reg = 0xd70,
+ .lsb = 0,
+ .msb = 1,
+};
+
+static const struct rzg2l_mipi_dsi_hw_info rzg3l_mipi_dsi_info = {
+ .dphy_init = rzg2l_mipi_dsi_dphy_init,
+ .dphy_exit = rzg2l_mipi_dsi_dphy_exit,
+ .dphy_conf_clks = rzg2l_dphy_conf_clks,
+ .syscon_field = &rzg3l_pwrrdy_reg_field,
+ .dsi_global_timings = rzg3l_mipi_dsi_global_timings,
+ .num_dsi_global_timings = ARRAY_SIZE(rzg3l_mipi_dsi_global_timings),
+ .link_reg_offset = 0x10000,
+ .dphyctrl0_init_val = DSIDPHYCTRL0_CMN_MASTER_EN | DSIDPHYCTRL0_EN_BGR,
+ .min_dclk = 5440,
+ .max_dclk = 187500,
+ .activation_dly = 100,
+ .features = RZ_MIPI_DSI_FEATURE_16BPP,
+};
+
static const struct of_device_id rzg2l_mipi_dsi_of_table[] = {
+ { .compatible = "renesas,r9a08g046-mipi-dsi", .data = &rzg3l_mipi_dsi_info, },
{ .compatible = "renesas,r9a09g057-mipi-dsi", .data = &rzv2h_mipi_dsi_info, },
{ .compatible = "renesas,rzg2l-mipi-dsi", .data = &rzg2l_mipi_dsi_info, },
{ /* sentinel */ }
--
2.43.0