From: Jonas Karlman <jonas@kwiboo.se>
To: Quentin Schulz <u-boot@0leil.net>,
Kever Yang <kever.yang@rock-chips.com>,
Tom Rini <trini@konsulko.com>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
Simon Glass <sjg@chromium.org>, Lukasz Majewski <lukma@denx.de>
Cc: u-boot@lists.u-boot-project.org, Jonas Karlman <jonas@kwiboo.se>
Subject: [PATCH 11/15] clk: rockchip: rk3576: Fix trivial clock configuration errors
Date: Thu, 30 Jul 2026 14:13:00 +0000 [thread overview]
Message-ID: <20260730141308.1218014-12-jonas@kwiboo.se> (raw)
In-Reply-To: <20260730141308.1218014-1-jonas@kwiboo.se>
The RK3576 clock driver has a few trivial copy-paste mistakes in its
clock handling.
Fix the trivial clock configuration errors:
- use correct VPLL mode reg
- rename and use PHP_PLL_CON macro
- set correct parent for ACLK_TOP clocks
- avoid overriding the selected I2C parent clock
- stop CLK_I2C8 from falling through into CLK_I2C9
- use correct SARADC and TSADC clksel regs
- use correct parent pll rate for UART clocks
- align BPLL configuration to match other PLLs
- remove unused BPLL_CON macro
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
.../include/asm/arch-rockchip/cru_rk3576.h | 5 ++--
drivers/clk/rockchip/clk_rk3576.c | 23 +++++++++----------
2 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/arch/arm/include/asm/arch-rockchip/cru_rk3576.h b/arch/arm/include/asm/arch-rockchip/cru_rk3576.h
index fb77fbd7307a..41e225245843 100644
--- a/arch/arm/include/asm/arch-rockchip/cru_rk3576.h
+++ b/arch/arm/include/asm/arch-rockchip/cru_rk3576.h
@@ -127,24 +127,23 @@ struct pll_rate_table {
#define RK3576_SDMMC_CON0 0xC30
#define RK3576_SDMMC_CON1 0xC34
+#define RK3576_PHP_PLL_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE)
#define RK3576_PHP_CLKSEL_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x300)
#define RK3576_PHP_CLKGATE_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x800)
#define RK3576_PHP_SOFTRST_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE + 0xa00)
-#define RK3576_PMU_PLL_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE)
#define RK3576_PMU_CLKSEL_CON(x) ((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x300)
#define RK3576_PMU_CLKGATE_CON(x) ((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x800)
#define RK3576_PMU_SOFTRST_CON(x) ((x) * 0x4 + RK3576_PMU_CRU_BASE + 0xa00)
+#define RK3576_LPLL_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE)
#define RK3576_CCI_CLKSEL_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x300)
#define RK3576_CCI_CLKGATE_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x800)
#define RK3576_CCI_SOFTRST_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE + 0xa00)
-#define RK3576_BPLL_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE)
#define RK3576_BIGCORE_CLKSEL_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x300)
#define RK3576_BIGCORE_CLKGATE_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x800)
#define RK3576_BIGCORE_SOFTRST_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0xa00)
-#define RK3576_LPLL_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE)
#define RK3576_LITCORE_CLKSEL_CON(x) ((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x300)
#define RK3576_LITCORE_CLKGATE_CON(x) ((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x800)
#define RK3576_LITCORE_SOFTRST_CON(x) ((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0xa00)
diff --git a/drivers/clk/rockchip/clk_rk3576.c b/drivers/clk/rockchip/clk_rk3576.c
index 92bde425b0ee..75b705ffba2f 100644
--- a/drivers/clk/rockchip/clk_rk3576.c
+++ b/drivers/clk/rockchip/clk_rk3576.c
@@ -44,19 +44,18 @@ static struct rockchip_pll_rate_table rk3576_24m_pll_rates[] = {
static struct rockchip_pll_clock rk3576_pll_clks[] = {
[BPLL] = PLL(pll_rk3588, PLL_BPLL, RK3576_PLL_CON(0),
- RK3576_BPLL_MODE_CON0, 0, 15, 0,
- rk3576_24m_pll_rates),
+ RK3576_BPLL_MODE_CON0, 0, 15, 0, rk3576_24m_pll_rates),
[LPLL] = PLL(pll_rk3588, PLL_LPLL, RK3576_LPLL_CON(16),
RK3576_LPLL_MODE_CON0, 0, 15, 0, rk3576_24m_pll_rates),
[VPLL] = PLL(pll_rk3588, PLL_VPLL, RK3576_PLL_CON(88),
- RK3576_LPLL_MODE_CON0, 4, 15, 0, rk3576_24m_pll_rates),
+ RK3576_MODE_CON0, 4, 15, 0, rk3576_24m_pll_rates),
[AUPLL] = PLL(pll_rk3588, PLL_AUPLL, RK3576_PLL_CON(96),
RK3576_MODE_CON0, 6, 15, 0, rk3576_24m_pll_rates),
[CPLL] = PLL(pll_rk3588, PLL_CPLL, RK3576_PLL_CON(104),
RK3576_MODE_CON0, 8, 15, 0, rk3576_24m_pll_rates),
[GPLL] = PLL(pll_rk3588, PLL_GPLL, RK3576_PLL_CON(112),
RK3576_MODE_CON0, 2, 15, 0, rk3576_24m_pll_rates),
- [PPLL] = PLL(pll_rk3588, PLL_PPLL, RK3576_PMU_PLL_CON(128),
+ [PPLL] = PLL(pll_rk3588, PLL_PPLL, RK3576_PHP_PLL_CON(128),
RK3576_MODE_CON0, 10, 15, ROCKCHIP_PLL_FIXED_MODE,
rk3576_24m_pll_rates),
};
@@ -320,8 +319,7 @@ static ulong rk3576_top_set_clk(struct rk3576_clk_priv *priv,
rk_clrsetreg(&cru->clksel_con[10],
ACLK_TOP_MID_DIV_MASK |
ACLK_TOP_MID_SEL_MASK,
- (ACLK_TOP_MID_SEL_GPLL <<
- ACLK_TOP_MID_SEL_SHIFT) |
+ (src_clk << ACLK_TOP_MID_SEL_SHIFT) |
(src_clk_div - 1) << ACLK_TOP_MID_DIV_SHIFT);
break;
case PCLK_TOP_ROOT:
@@ -429,7 +427,7 @@ static ulong rk3576_i2c_set_clk(struct rk3576_clk_priv *priv, ulong clk_id,
src_clk = CLK_I2C_SEL_200M;
else if (rate >= 99 * MHz)
src_clk = CLK_I2C_SEL_100M;
- if (rate >= 50 * MHz)
+ else if (rate >= 50 * MHz)
src_clk = CLK_I2C_SEL_50M;
else
src_clk = CLK_I2C_SEL_OSC;
@@ -470,6 +468,7 @@ static ulong rk3576_i2c_set_clk(struct rk3576_clk_priv *priv, ulong clk_id,
case CLK_I2C8:
rk_clrsetreg(&cru->clksel_con[57], CLK_I2C8_SEL_MASK,
src_clk << CLK_I2C8_SEL_SHIFT);
+ break;
case CLK_I2C9:
rk_clrsetreg(&cru->clksel_con[58], CLK_I2C9_SEL_MASK,
src_clk << CLK_I2C9_SEL_SHIFT);
@@ -691,7 +690,7 @@ static ulong rk3576_adc_set_clk(struct rk3576_clk_priv *priv,
} else {
src_clk_div = DIV_ROUND_UP(priv->gpll_hz, rate);
assert(src_clk_div - 1 <= 255);
- rk_clrsetreg(&cru->clksel_con[59],
+ rk_clrsetreg(&cru->clksel_con[58],
CLK_SARADC_SEL_MASK |
CLK_SARADC_DIV_MASK,
(CLK_SARADC_SEL_GPLL <<
@@ -703,7 +702,7 @@ static ulong rk3576_adc_set_clk(struct rk3576_clk_priv *priv,
case CLK_TSADC:
src_clk_div = DIV_ROUND_UP(OSC_HZ, rate);
assert(src_clk_div - 1 <= 255);
- rk_clrsetreg(&cru->clksel_con[58],
+ rk_clrsetreg(&cru->clksel_con[59],
CLK_TSADC_DIV_MASK,
(src_clk_div - 1) <<
CLK_TSADC_DIV_SHIFT);
@@ -1715,7 +1714,7 @@ static ulong rk3576_uart_frac_set_rate(struct rk3576_clk_priv *priv,
p_rate = OSC_HZ;
} else {
clk_src = CLK_UART_SRC_SEL_GPLL;
- p_rate = priv->cpll_hz;
+ p_rate = priv->gpll_hz;
}
rational_best_approximation(rate, p_rate, GENMASK(16 - 1, 0),
@@ -1843,7 +1842,7 @@ static ulong rk3576_uart_set_rate(struct rk3576_clk_priv *priv,
div = DIV_ROUND_UP(priv->gpll_hz, rate);
} else if (!(priv->cpll_hz % rate)) {
clk_src = CLK_UART_SEL_CPLL;
- div = DIV_ROUND_UP(priv->gpll_hz, rate);
+ div = DIV_ROUND_UP(priv->cpll_hz, rate);
} else if (!(rk3576_uart_frac_get_rate(priv, CLK_UART_FRAC_0) % rate)) {
clk_src = CLK_UART_SEL_FRAC0;
div = DIV_ROUND_UP(rk3576_uart_frac_get_rate(priv, CLK_UART_FRAC_0), rate);
@@ -2458,7 +2457,7 @@ static int rk3576_clk_probe(struct udevice *dev)
RK3576_SCRU_BASE + RK3576_MODE_CON0);
/* fix ppll\aupll\cpll */
writel(BITS_WITH_WMASK(2, 0x7U, 6),
- RK3576_CRU_BASE + RK3576_PMU_PLL_CON(129));
+ RK3576_CRU_BASE + RK3576_PHP_PLL_CON(129));
writel(BITS_WITH_WMASK(2, 0x7U, 6),
RK3576_CRU_BASE + RK3576_PLL_CON(97));
writel(BITS_WITH_WMASK(2, 0x7U, 6),
--
2.54.0
next prev parent reply other threads:[~2026-07-30 14:13 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 14:12 [PATCH 00/15] rockchip: Miscellaneous RK35xx clock fixes Jonas Karlman
2026-07-30 14:12 ` [PATCH 01/15] clk: rockchip: pll: Fix double use of postdiv1 Jonas Karlman
2026-08-07 9:36 ` Quentin Schulz via U-Boot
2026-08-07 10:38 ` Jonas Karlman
2026-08-07 16:38 ` Quentin Schulz via U-Boot
2026-08-07 13:19 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 02/15] clk: rockchip: pll: Always write the dsmpd flag Jonas Karlman
2026-08-07 13:24 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 03/15] clk: rockchip: pll: Always write the k param Jonas Karlman
2026-08-07 13:29 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 04/15] clk: rockchip: pll: Use PLL_FIXED_MODE flag on rk3588/rk3576 plls Jonas Karlman
2026-08-07 14:09 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 05/15] clk: rockchip: pll: Limit special rk3588_pll handling to RK3588 Jonas Karlman
2026-08-07 14:30 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 06/15] clk: rockchip: rk3568: Fix trivial clock configuration errors Jonas Karlman
2026-08-07 14:46 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 07/15] clk: rockchip: rk3588: " Jonas Karlman
2026-08-07 15:07 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 08/15] clk: rockchip: rk3588: Fix possible divide by zero Jonas Karlman
2026-08-07 15:20 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 09/15] clk: rockchip: rk3588: Fix ACLK_BUS_ROOT rate set during probe Jonas Karlman
2026-08-07 15:44 ` Quentin Schulz
2026-07-30 14:12 ` [PATCH 10/15] clk: rockchip: rk3588: Use SPLL_HZ constant Jonas Karlman
2026-08-07 15:46 ` Quentin Schulz
2026-07-30 14:13 ` Jonas Karlman [this message]
2026-08-07 16:04 ` [PATCH 11/15] clk: rockchip: rk3576: Fix trivial clock configuration errors Quentin Schulz via U-Boot
2026-07-30 14:13 ` [PATCH 12/15] clk: rockchip: rk3528: " Jonas Karlman
2026-08-07 16:07 ` Quentin Schulz
2026-07-30 14:13 ` [PATCH 13/15] clk: rockchip: rk3506: " Jonas Karlman
2026-08-07 16:08 ` Quentin Schulz
2026-07-30 14:13 ` [PATCH 14/15] clk: rockchip: rk3568: Drop unused GRF syscon lookup Jonas Karlman
2026-08-07 16:16 ` Quentin Schulz
2026-07-30 14:13 ` [PATCH 15/15] clk: rockchip: rk3588: " Jonas Karlman
2026-08-07 16:19 ` Quentin Schulz
2026-08-08 13:37 ` [PATCH 00/15] rockchip: Miscellaneous RK35xx clock fixes Simon Glass
-- strict thread matches above, loose matches on Subject: below --
2026-08-17 9:16 [PATCH 11/15] clk: rockchip: rk3576: Fix trivial clock configuration errors pcb
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=20260730141308.1218014-12-jonas@kwiboo.se \
--to=jonas@kwiboo.se \
--cc=ilias.apalodimas@linaro.org \
--cc=kever.yang@rock-chips.com \
--cc=lukma@denx.de \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@0leil.net \
--cc=u-boot@lists.u-boot-project.org \
/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.