[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240229122021.1901785-5-tudor.ambarus@linaro.org>
Date: Thu, 29 Feb 2024 12:20:21 +0000
From: Tudor Ambarus <tudor.ambarus@...aro.org>
To: krzysztof.kozlowski@...aro.org,
s.nawrocki@...sung.com,
cw00.choi@...sung.com,
semen.protsenko@...aro.org
Cc: alim.akhtar@...sung.com,
mturquette@...libre.com,
sboyd@...nel.org,
peter.griffin@...aro.org,
andre.draszik@...aro.org,
linux-samsung-soc@...r.kernel.org,
linux-clk@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org,
willmcvicker@...gle.com,
kernel-team@...roid.com,
Tudor Ambarus <tudor.ambarus@...aro.org>
Subject: [PATCH 4/4] clk: samsung: exynos850: fix propagation of SPI IPCLK rate
Fix propagation of SPI IPCLK rate by allowing MUX reparenting for the
dedicated USI MUX clocks. Since these muxes feed just the USI blocks,
reparenting of the muxes do not affect other IPs.
Do not propagate the rate change the from USI muxes to the common bus
dividers (dout_apm_bus and dout_peri_ip). The leaf clocks (HSI2C, I3C)
that are derived from the common bus dividers are no longer affected by
the SPI clock rate change.
This change involves the following clock path propagation:
usi_spi_0:
Clock Div range MUX Selection
---------------------------------------------------------------------
gout_spi0_ipclk - -
dout_peri_spi0 /1..32 -
mout_peri_spi_user - { oscclk (26 MHz), dout_peri_ip }
*Note that the clock rate is no longer propagated to dout_peri_ip.
usi_cmgp0:
Clock Div range MUX Selection
---------------------------------------------------------------------
gout_cmgp_usi0_ipclk - -
dout_cmgp_usi0 /1..32 -
mout_cmgp_usi0 - { clk_rco_cmgp (49.152 MHz)
gout_clkcmu_cmgp_bus }
*Note that the clock rate is no longer propagated to
gout_clkcmu_cmgp_bus and dout_apm_bus.
usi_cmgp1:
Clock Div range MUX Selection
---------------------------------------------------------------------
gout_cmgp_usi1_ipclk - -
dout_cmgp_usi1 /1..32 -
mout_cmgp_usi1 - { clk_rco_cmgp (49.152 MHz)
gout_clkcmu_cmgp_bus }
*Note that the clock rate is no longer propagated to
gout_clkcmu_cmgp_bus and dout_apm_bus.
This comes with no significant clock range modification. Before this
patch the claimed clock ranges are:
SPI0: 200 kHz ... 49.9 MHz
SPI1/2: 400 kHz ... 49.9 MHz
After this patch the clock ranges are:
SPI0: 203.125 kHz ... 49.9 MHz
SPI1/2: 384 kHz ... 49.9 MHz
For SPI1/2 we get an even lower frequency than what was before. For SPI0
the benefit of not modifying common bus clocks, thus other leaf IP nodes
is greater than the change in frequency from 200 to ~203 KHz.
Not tested, the patch was written solely by reading the code.
Fixes: 67c15187d491 ("clk: samsung: exynos850: Propagate SPI IPCLK rate change")
Signed-off-by: Tudor Ambarus <tudor.ambarus@...aro.org>
---
drivers/clk/samsung/clk-exynos850.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/clk/samsung/clk-exynos850.c b/drivers/clk/samsung/clk-exynos850.c
index 82cfa22c0788..42b4b4075aeb 100644
--- a/drivers/clk/samsung/clk-exynos850.c
+++ b/drivers/clk/samsung/clk-exynos850.c
@@ -605,7 +605,7 @@ static const struct samsung_div_clock apm_div_clks[] __initconst = {
static const struct samsung_gate_clock apm_gate_clks[] __initconst = {
GATE(CLK_GOUT_CLKCMU_CMGP_BUS, "gout_clkcmu_cmgp_bus", "dout_apm_bus",
- CLK_CON_GAT_CLKCMU_CMGP_BUS, 21, CLK_SET_RATE_PARENT, 0),
+ CLK_CON_GAT_CLKCMU_CMGP_BUS, 21, 0, 0),
GATE(CLK_GOUT_CLKCMU_CHUB_BUS, "gout_clkcmu_chub_bus",
"mout_clkcmu_chub_bus",
CLK_CON_GAT_GATE_CLKCMU_CHUB_BUS, 21, 0, 0),
@@ -974,10 +974,10 @@ static const struct samsung_fixed_rate_clock cmgp_fixed_clks[] __initconst = {
static const struct samsung_mux_clock cmgp_mux_clks[] __initconst = {
MUX(CLK_MOUT_CMGP_ADC, "mout_cmgp_adc", mout_cmgp_adc_p,
CLK_CON_MUX_CLK_CMGP_ADC, 0, 1),
- MUX_F(CLK_MOUT_CMGP_USI0, "mout_cmgp_usi0", mout_cmgp_usi0_p,
- CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0, 0, 1, CLK_SET_RATE_PARENT, 0),
- MUX_F(CLK_MOUT_CMGP_USI1, "mout_cmgp_usi1", mout_cmgp_usi1_p,
- CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1, 0, 1, CLK_SET_RATE_PARENT, 0),
+ nMUX(CLK_MOUT_CMGP_USI0, "mout_cmgp_usi0", mout_cmgp_usi0_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0, 0, 1),
+ nMUX(CLK_MOUT_CMGP_USI1, "mout_cmgp_usi1", mout_cmgp_usi1_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1, 0, 1),
};
static const struct samsung_div_clock cmgp_div_clks[] __initconst = {
@@ -1557,9 +1557,8 @@ static const struct samsung_mux_clock peri_mux_clks[] __initconst = {
mout_peri_uart_user_p, PLL_CON0_MUX_CLKCMU_PERI_UART_USER, 4, 1),
MUX(CLK_MOUT_PERI_HSI2C_USER, "mout_peri_hsi2c_user",
mout_peri_hsi2c_user_p, PLL_CON0_MUX_CLKCMU_PERI_HSI2C_USER, 4, 1),
- MUX_F(CLK_MOUT_PERI_SPI_USER, "mout_peri_spi_user",
- mout_peri_spi_user_p, PLL_CON0_MUX_CLKCMU_PERI_SPI_USER, 4, 1,
- CLK_SET_RATE_PARENT, 0),
+ nMUX(CLK_MOUT_PERI_SPI_USER, "mout_peri_spi_user",
+ mout_peri_spi_user_p, PLL_CON0_MUX_CLKCMU_PERI_SPI_USER, 4, 1),
};
static const struct samsung_div_clock peri_div_clks[] __initconst = {
--
2.44.0.278.ge034bb2e1d-goog
Powered by blists - more mailing lists