[PATCH v3 00/11] clk: k210: Rewrite K210 clock without CCF
Sean Anderson
seanga2 at gmail.com
Fri Jun 11 06:16:06 CEST 2021
This is something I've been meaning to do for a while but only just got around
to. The CCF has been quite unwieldy in a few ways:
* It is very rigid, and there are not easy ways to hook into it without
rewriting many things. See e.g. things like the bypass clock and all the _half
clocks which were created because CCF didn't support the dividers used on the
k210. While preparing this series, I encountered several edge cases which I
had initially overlooked (or which were not supported in the initial release).
These would have been very difficult to fix with CCF, but were much easier to
address because each funcion is implemented in one place.
* There is a lot of magic going on under the curtains because of all the CCF
code which lives in many different files. Some things live in drivers, but
many things live in e.g. clk-uclass.c. So many things live in so many files
and it can be very difficult to get a handle on what exactly happens.
Complicating this is that there is a conflation of struct clk as a handle and
struct clk as a device. In this regard, refcounting is completely broken. IMO
we should just do away with refcounts and only disable clocks when explicitly
asked for.
* It is very dependent on runtime initialization. Typically, everything is
initialized by calling into various register() functions, usually with several
wrappers to avoid specifying all the arguments. This balloons the runtime
memory usage since there are so many devices created. It also makes it hard to
debug, since if you do it the "typical" way it is easy to accidentally assign
a clock to the wrong register.
* It inflates code size by pulling in not just some dead code (e.g. this driver
does not use divider tables but they are in clk-divider anyway) but also
pulling in numerous imx-specific clocks. This could be fixed, but I don't want
to due to the other reasons listed.
I am very happy to have completely excised it from my driver. IMO there should
be big warning signs on the CCF warning not to use it for new code. This would
hopefully dissuade those like myself who had no idea that CCF was *not* in fact
a good way to write a clock driver.
Overall there is a total savings of 12k from this series.
text data bss dec hex filename
292485 32672 12624 337781 52775 before/u-boot
283125 29856 12624 325605 4f7e5 after/u-boot
This series depends on
https://patchwork.ozlabs.org/project/uboot/list/?series=238211
Changes in v3:
- Always define clk_defaults_stage, even if clk_set_defaults is a dummy
- Fix inverted condition for setting defaults
- Fix val not being set for K210_DIV_POWER
- Add CLK_K210_SET_RATE to defconfig so these changes apply
Changes in v2:
- Convert stage to enum
- Only force probe clocks pre-reloc
- Rebase on u-boot/master
Sean Anderson (11):
clk: Allow force setting clock defaults before relocation
clk: k210: Rewrite to remove CCF
clk: k210: Move pll into the rest of the driver
clk: k210: Implement soc_clk_dump
clk: k210: Re-add support for setting rate
clk: k210: Don't set PLL rates if we are already at the correct rate
clk: k210: Remove bypass driver
clk: k210: Move k210 clock out of its own subdirectory
k210: dts: Set PLL1 to the same rate as PLL0
k210: Don't imply CCF
test: Add K210 PLL tests to sandbox defconfigs
MAINTAINERS | 4 +-
arch/riscv/dts/k210.dtsi | 2 +
board/sipeed/maix/Kconfig | 2 -
configs/sandbox64_defconfig | 2 +
configs/sandbox_defconfig | 2 +
configs/sandbox_flattree_defconfig | 2 +
configs/sipeed_maix_bitm_defconfig | 2 +-
drivers/clk/Kconfig | 14 +-
drivers/clk/Makefile | 2 +-
drivers/clk/clk-uclass.c | 27 +-
drivers/clk/clk_kendryte.c | 1320 +++++++++++++++++++++++
drivers/clk/kendryte/Kconfig | 12 -
drivers/clk/kendryte/Makefile | 1 -
drivers/clk/kendryte/bypass.c | 273 -----
drivers/clk/kendryte/clk.c | 668 ------------
drivers/clk/kendryte/pll.c | 585 ----------
drivers/clk/rockchip/clk_rk3308.c | 2 +-
drivers/core/device.c | 2 +-
drivers/net/gmac_rockchip.c | 2 +-
include/clk.h | 30 +-
include/dt-bindings/clock/k210-sysctl.h | 94 +-
include/kendryte/bypass.h | 31 -
include/kendryte/clk.h | 35 -
include/kendryte/pll.h | 34 -
24 files changed, 1437 insertions(+), 1711 deletions(-)
create mode 100644 drivers/clk/clk_kendryte.c
delete mode 100644 drivers/clk/kendryte/Kconfig
delete mode 100644 drivers/clk/kendryte/Makefile
delete mode 100644 drivers/clk/kendryte/bypass.c
delete mode 100644 drivers/clk/kendryte/clk.c
delete mode 100644 drivers/clk/kendryte/pll.c
delete mode 100644 include/kendryte/bypass.h
delete mode 100644 include/kendryte/clk.h
--
2.31.0
More information about the U-Boot
mailing list