Re: [PATCH v4 1/4] clk: sunxi-ng: a64: force select PLL_MIPI in TCON0 mux
Dne petek, 05. maj 2023 ob 07:21:07 CEST je Roman Beranek napisal(a): > TCON0's source clock can be fed from either PLL_MIPI, or PLL_VIDEO0(2X), > however MIPI DSI output only seems to work when PLL_MIPI is selected and > thus the choice must be hardcoded in. > > Currently, this driver can't propagate rate change from N-K-M clocks > (such as PLL_MIPI) upwards. This prevents PLL_VIDEO0 from participating > in setting of the TCON0 data clock rate, limiting the precision with > which a target pixel clock can be matched. > > For outputs with fixed TCON0 divider, that is DSI and LVDS, the dotclock > can deviate up to 8% off target. > > Signed-off-by: Roman Beranek Applied, thanks! Best regards, Jernej
Re: [PATCH v4 1/4] clk: sunxi-ng: a64: force select PLL_MIPI in TCON0 mux
Dne petek, 05. maj 2023 ob 07:21:07 CEST je Roman Beranek napisal(a): > TCON0's source clock can be fed from either PLL_MIPI, or PLL_VIDEO0(2X), > however MIPI DSI output only seems to work when PLL_MIPI is selected and > thus the choice must be hardcoded in. > > Currently, this driver can't propagate rate change from N-K-M clocks > (such as PLL_MIPI) upwards. This prevents PLL_VIDEO0 from participating > in setting of the TCON0 data clock rate, limiting the precision with > which a target pixel clock can be matched. > > For outputs with fixed TCON0 divider, that is DSI and LVDS, the dotclock > can deviate up to 8% off target. > > Signed-off-by: Roman Beranek Reviewed-by: Jernej Skrabec Best regards, Jernej
Re: [PATCH v4 1/4] clk: sunxi-ng: a64: force select PLL_MIPI in TCON0 mux
On Fri, May 05, 2023 at 07:21:07AM +0200, Roman Beranek wrote: > TCON0's source clock can be fed from either PLL_MIPI, or PLL_VIDEO0(2X), > however MIPI DSI output only seems to work when PLL_MIPI is selected and > thus the choice must be hardcoded in. > > Currently, this driver can't propagate rate change from N-K-M clocks > (such as PLL_MIPI) upwards. This prevents PLL_VIDEO0 from participating > in setting of the TCON0 data clock rate, limiting the precision with > which a target pixel clock can be matched. > > For outputs with fixed TCON0 divider, that is DSI and LVDS, the dotclock > can deviate up to 8% off target. > > Signed-off-by: Roman Beranek Acked-by: Maxime Ripard signature.asc Description: PGP signature
[PATCH v4 1/4] clk: sunxi-ng: a64: force select PLL_MIPI in TCON0 mux
TCON0's source clock can be fed from either PLL_MIPI, or PLL_VIDEO0(2X), however MIPI DSI output only seems to work when PLL_MIPI is selected and thus the choice must be hardcoded in. Currently, this driver can't propagate rate change from N-K-M clocks (such as PLL_MIPI) upwards. This prevents PLL_VIDEO0 from participating in setting of the TCON0 data clock rate, limiting the precision with which a target pixel clock can be matched. For outputs with fixed TCON0 divider, that is DSI and LVDS, the dotclock can deviate up to 8% off target. Signed-off-by: Roman Beranek --- drivers/clk/sunxi-ng/ccu-sun50i-a64.c | 14 +- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a64.c b/drivers/clk/sunxi-ng/ccu-sun50i-a64.c index 41519185600a..eb36f8f77d55 100644 --- a/drivers/clk/sunxi-ng/ccu-sun50i-a64.c +++ b/drivers/clk/sunxi-ng/ccu-sun50i-a64.c @@ -528,11 +528,18 @@ static SUNXI_CCU_M_WITH_MUX_GATE(de_clk, "de", de_parents, 0x104, 0, 4, 24, 3, BIT(31), CLK_SET_RATE_PARENT); +/* + * DSI output seems to work only when PLL_MIPI selected. Set it and prevent + * the mux from reparenting. + */ +#define SUN50I_A64_TCON0_CLK_REG 0x118 + static const char * const tcon0_parents[] = { "pll-mipi", "pll-video0-2x" }; static const u8 tcon0_table[] = { 0, 2, }; static SUNXI_CCU_MUX_TABLE_WITH_GATE(tcon0_clk, "tcon0", tcon0_parents, tcon0_table, 0x118, 24, 3, BIT(31), -CLK_SET_RATE_PARENT); +CLK_SET_RATE_PARENT | +CLK_SET_RATE_NO_REPARENT); static const char * const tcon1_parents[] = { "pll-video0", "pll-video1" }; static const u8 tcon1_table[] = { 0, 2, }; @@ -953,6 +960,11 @@ static int sun50i_a64_ccu_probe(struct platform_device *pdev) writel(0x515, reg + SUN50I_A64_PLL_MIPI_REG); + /* Set PLL MIPI as parent for TCON0 */ + val = readl(reg + SUN50I_A64_TCON0_CLK_REG); + val &= ~GENMASK(26, 24); + writel(val | (0 << 24), reg + SUN50I_A64_TCON0_CLK_REG); + ret = devm_sunxi_ccu_probe(&pdev->dev, reg, &sun50i_a64_ccu_desc); if (ret) return ret; -- 2.32.0 (Apple Git-132)