From: Yao Zi <me@ziyao.cc>
To: Guodong Xu <guodong@riscstar.com>, u-boot@lists.denx.de
Cc: Tom Rini <trini@konsulko.com>, Lukasz Majewski <lukma@denx.de>,
Patrice Chotard <patrice.chotard@foss.st.com>,
Patrick Delaunay <patrick.delaunay@foss.st.com>,
Michal Simek <michal.simek@amd.com>,
Quentin Schulz <quentin.schulz@cherry.de>,
Junhui Liu <junhui.liu@pigmoral.tech>,
Peter Korsgaard <peter@korsgaard.com>,
Leo Yu-Chi Liang <ycliang@andestech.com>,
Raymond Mao <raymond.mao@riscstar.com>,
Gabriel Fernandez <gabriel.fernandez@foss.st.com>,
Kever Yang <kever.yang@rock-chips.com>,
Finley Xiao <finley.xiao@rock-chips.com>,
Rick Chen <rick@andestech.com>,
Conor Dooley <conor.dooley@microchip.com>,
u-boot-spacemit@groups.io, Vincent Legoll <legoll@online.fr>,
Heinrich Schuchardt <xypron.glpk@gmx.de>
Subject: Re: [PATCH 1/8] clk: spacemit: Add support for K1 SoC
Date: Fri, 22 May 2026 16:09:41 +0000 [thread overview]
Message-ID: <ahB_xeaHbMHkIxO6@pie> (raw)
In-Reply-To: <20260510-b4-k1-clk-reset-upstream-dts-v1-1-db0b0503ee44@riscstar.com>
On Sun, May 10, 2026 at 08:06:23AM -0400, Guodong Xu wrote:
> From: Junhui Liu <junhui.liu@pigmoral.tech>
>
> The K1 SoC exposes four clock providers in the kernel mainline DT: one
> PLL controller ("spacemit,k1-pll") and three syscon clock nodes
> ("spacemit,k1-syscon-{mpmu,apbc,apmu}"). Register a separate
> U_BOOT_DRIVER for each.
>
> Inter-controller ordering is enforced where the registers actually
> depend on each other.
What do you mean by "registers actually depend on each other"? Do you
refer to the fact that some APBC clocks are derived from APMU/PLL
controllers thus must be registered after them? If so, would this
series[1] help which allows arbitrary clock registration order and
handles dependencies in CCF instead?
> Signed-off-by: Junhui Liu <junhui.liu@pigmoral.tech>
> Signed-off-by: Raymond Mao <raymond.mao@riscstar.com>
> Signed-off-by: Guodong Xu <guodong@riscstar.com>
> ---
> drivers/clk/Kconfig | 5 +-
> drivers/clk/Makefile | 1 +
> drivers/clk/spacemit/Kconfig | 23 +
> drivers/clk/spacemit/Makefile | 7 +
> drivers/clk/spacemit/clk-k1.c | 1722 +++++++++++++++++++++++++++++++++++++
> drivers/clk/spacemit/clk_common.h | 79 ++
> drivers/clk/spacemit/clk_ddn.c | 93 ++
> drivers/clk/spacemit/clk_ddn.h | 53 ++
> drivers/clk/spacemit/clk_mix.c | 403 +++++++++
> drivers/clk/spacemit/clk_mix.h | 224 +++++
> drivers/clk/spacemit/clk_pll.c | 157 ++++
> drivers/clk/spacemit/clk_pll.h | 81 ++
> include/soc/spacemit/k1-syscon.h | 149 ++++
> 13 files changed, 2995 insertions(+), 2 deletions(-)
...
> diff --git a/drivers/clk/spacemit/Kconfig b/drivers/clk/spacemit/Kconfig
> new file mode 100644
> index 00000000000..03aecefddc4
> --- /dev/null
> +++ b/drivers/clk/spacemit/Kconfig
> @@ -0,0 +1,23 @@
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +#
> +# Copyright (c) 2025, Junhui Liu <junhui.liu@pigmoral.tech>
> +
> +config CLK_SPACEMIT
> + bool "Clock support for SpacemiT SoCs"
> + depends on CLK
What about
depends on CLK || COMPILE_TEST
to allow building-only tests?
> + select REGMAP
> + help
> + This enables support clock driver for Spacemit SoC
> + family.
> +
> +if CLK_SPACEMIT
> +
> +config CLK_SPACEMIT_K1
> + bool "SpacemiT K1 clock support"
> + select CLK_CCF
> + select LIB_RATIONAL
CLK_SPACEMIT instead of CLK_SPACEMIT_K1 should selects LIB_RATIONAL...
> + help
> + This enables support clock driver for Spacemit K1 SoC.
> + It's based on Common Clock Framework.
> +
> +endif
> diff --git a/drivers/clk/spacemit/Makefile b/drivers/clk/spacemit/Makefile
> new file mode 100644
> index 00000000000..824e94d1f74
> --- /dev/null
> +++ b/drivers/clk/spacemit/Makefile
> @@ -0,0 +1,7 @@
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +#
> +# Copyright (C) 2025 Junhui Liu <junhui.liu@pigmoral.tech>
> +
> +obj-$(CONFIG_CLK_SPACEMIT) += clk_ddn.o clk_mix.o clk_pll.o
... since the driver actually makes use of rational routines, clk_ddn.o,
is guarded by CONFIG_CLK_SPACEMIT, not CONFIG_CLK_SPACEMIT_K1.
> +obj-$(CONFIG_CLK_SPACEMIT_K1) += clk-k1.o
> diff --git a/drivers/clk/spacemit/clk-k1.c b/drivers/clk/spacemit/clk-k1.c
> new file mode 100644
> index 00000000000..4c0972d952e
> --- /dev/null
> +++ b/drivers/clk/spacemit/clk-k1.c
...
> +struct clk_retry_item {
> + struct ccu_common *common;
> + struct list_head link;
> +};
> +
> +static LIST_HEAD(retry_list);
> +
> +static int k1_clk_retry_register(void)
> +{
> + struct clk_retry_item *item, *tmp;
> + int retries = 5;
> + int ret;
> +
> + while (!list_empty(&retry_list) && retries) {
> + list_for_each_entry_safe(item, tmp, &retry_list, link) {
> + struct ccu_common *common = item->common;
> +
> + ret = common->init(common);
> + if (ret)
> + return ret;
> +
> + list_del(&item->link);
> + kfree(item);
> + }
> + retries--;
> + }
> +
> + return 0;
> +}
Is retrying for handling dependencies between clocks? Could the series
I mentioned above help? This version looks very hacking...
Another solution might be carefully specify the order in which clocks
are registered to ensure parents are always registered before children.
...
> diff --git a/drivers/clk/spacemit/clk_ddn.c b/drivers/clk/spacemit/clk_ddn.c
> new file mode 100644
> index 00000000000..7b93f30d5c3
> --- /dev/null
> +++ b/drivers/clk/spacemit/clk_ddn.c
...
> +static unsigned long ccu_ddn_calc_best_rate(struct ccu_ddn *ddn,
> + unsigned long rate, unsigned long prate,
> + unsigned long *num, unsigned long *den)
> +{
> + rational_best_approximation(rate, prate / ddn->pre_div,
> + ddn->den_mask >> ddn->den_shift,
> + ddn->num_mask >> ddn->num_shift,
> + den, num);
Rational routines are used here.
> + return ccu_ddn_calc_rate(prate, *num, *den, ddn->pre_div);
> +}
Best regards,
Yao Zi
[1]: https://lore.kernel.org/u-boot/20260120-clk-reparent-v3-0-0d43d4b362ac@outlook.com/
next prev parent reply other threads:[~2026-05-22 16:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-10 12:06 [PATCH 0/8] riscv: spacemit: k1: add clock reset drivers, switch to upstream DT Guodong Xu
2026-05-10 12:06 ` [PATCH 1/8] clk: spacemit: Add support for K1 SoC Guodong Xu
2026-05-22 16:09 ` Yao Zi [this message]
2026-05-23 13:11 ` Guodong Xu
2026-05-10 12:06 ` [PATCH 2/8] reset: spacemit: k1: introduce syscon-bound reset driver Guodong Xu
2026-05-10 12:06 ` [PATCH 3/8] clk: spacemit: k1: spawn reset device from per-syscon clock drivers Guodong Xu
2026-05-10 12:06 ` [PATCH 4/8] configs: bananapi-f3: enable Spacemit K1 clock driver Guodong Xu
2026-05-10 12:06 ` [PATCH 5/8] dts: k1: switch BPI-F3 build to upstream DT Guodong Xu
2026-05-10 12:06 ` [PATCH 6/8] dts: k1: drop legacy local DT files Guodong Xu
2026-05-10 12:06 ` [PATCH 7/8] reset: spacemit: k1: drop legacy spacemit,k1-reset driver Guodong Xu
2026-05-10 12:06 ` [PATCH 8/8] dt-bindings: reset: drop spacemit-k1-reset.h Guodong Xu
2026-05-10 19:44 ` [PATCH 0/8] riscv: spacemit: k1: add clock reset drivers, switch to upstream DT Vincent Legoll
2026-05-11 4:52 ` Yao Zi
2026-05-11 6:51 ` Vincent Legoll
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=ahB_xeaHbMHkIxO6@pie \
--to=me@ziyao.cc \
--cc=conor.dooley@microchip.com \
--cc=finley.xiao@rock-chips.com \
--cc=gabriel.fernandez@foss.st.com \
--cc=guodong@riscstar.com \
--cc=junhui.liu@pigmoral.tech \
--cc=kever.yang@rock-chips.com \
--cc=legoll@online.fr \
--cc=lukma@denx.de \
--cc=michal.simek@amd.com \
--cc=patrice.chotard@foss.st.com \
--cc=patrick.delaunay@foss.st.com \
--cc=peter@korsgaard.com \
--cc=quentin.schulz@cherry.de \
--cc=raymond.mao@riscstar.com \
--cc=rick@andestech.com \
--cc=trini@konsulko.com \
--cc=u-boot-spacemit@groups.io \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
--cc=ycliang@andestech.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox