[PATCH v2 0/7] clk: prepare for adding Linux CCF port

Casey Connolly <[email protected]> Wed, 01 Apr 2026 16:34:01 +0200
Newsgroups io.groups.u-boot-amlogic,org.u-boot-project.lists.u-boot
Message-ID <[email protected]>
This series adjusts the clock framework in preparation for the addition
of full Linux CCF support. Most of the changes here are standalone
improvements which is why this is a separate series.

Patch 1 fixes the clk Makefile so that some IMX specific drivers don't
get built when CLK_CCF is enabled for a different platform.

Patch 2 moves the existing U-Boot CCF port to clk/uccf so it's easier to
keep track of once the Linux CCF versions of the drivers are added.

Patch 3 then moves the basic (not CCF specific) fixed factor/rate
clocks to clk/basic, these may also be used with U-Boot CCF but are
incompatible with Linux CCF.

Patch 4 renames struct clk_ops to clk_ops_uboot, unfortunately these
ops are totally incompatible with Linux CCF. I went with this approach
rather than using a different name for the Linux clk_ops mostly because
it reduces the diff for ported Linux clock drivers.

Patches 5/6 deal with some tech debt by fixing the function prototypes
for clk_set_rate() and clk_get_parent_rate(), both of these can return
a negative errno (and some drivers do this) but the prototype is an
unsigned long. This should help encourage better error checking.

Patch 7 introduces clk_prepare/unprepare and associated functions. These
are stubs for UCLASS_CLK but will be enabled for CCF_FULL. Most drivers
should use clk_prepare_enable() but CCF will automatically prepare
unprepared clocks to aid in the transition.

While it might be convenient to remove support for prepare/unprepare,
there are relevant usecases for it for clocks that can't necessarily
be enabled or that need things like PLL tuning which only needs to be
done once.

---
Changes since v1:
 * Added prepare/unprepare stubs for clk-uclass
 * v1: https://lore.kernel.org/u-boot/[email protected]/

To: Tom Rini <[email protected]>
To: Lukasz Majewski <[email protected]>
To: Marek Vasut <[email protected]>
Cc: Casey Connolly <[email protected]>
Cc: Neil Armstrong <[email protected]>
Cc: Quentin Schulz <[email protected]>
Cc: Mattijs Korpershoek <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

---
Casey Connolly (7):
      clk: restrict clk/imx to MACH_IMX
      clk: move U-Boot CCF to clk/uccf
      clk: rename clk_ops to clk_ops_uboot
      clk: move fixed clocks to clk/basic
      clk: make clk_set_rate() return signed long
      clk: make clk_get_parent_rate return signed long
      clk: compat: add clk (un)prepare and associated functions

 arch/arm/cpu/armv7/bcm281xx/clk-core.c             |  8 +--
 arch/arm/cpu/armv7/bcm281xx/clk-core.h             | 14 ++---
 cmd/clk.c                                          |  2 +-
 drivers/clk/Kconfig                                | 51 +++++----------
 drivers/clk/Makefile                               | 17 ++---
 drivers/clk/adi/clk-adi-pll.c                      |  2 +-
 drivers/clk/adi/clk-shared.c                       |  4 +-
 drivers/clk/adi/clk.h                              |  2 +-
 drivers/clk/airoha/clk-airoha.c                    |  4 +-
 drivers/clk/altera/clk-agilex.c                    |  2 +-
 drivers/clk/altera/clk-agilex5.c                   |  2 +-
 drivers/clk/altera/clk-arria10.c                   |  2 +-
 drivers/clk/altera/clk-mem-n5x.c                   |  2 +-
 drivers/clk/altera/clk-n5x.c                       |  2 +-
 drivers/clk/aspeed/clk_ast2500.c                   |  4 +-
 drivers/clk/aspeed/clk_ast2600.c                   |  4 +-
 drivers/clk/at91/clk-generic.c                     |  4 +-
 drivers/clk/at91/clk-main.c                        |  8 +--
 drivers/clk/at91/clk-master.c                      |  8 +--
 drivers/clk/at91/clk-peripheral.c                  |  6 +-
 drivers/clk/at91/clk-programmable.c                |  4 +-
 drivers/clk/at91/clk-sam9x60-pll.c                 | 10 +--
 drivers/clk/at91/clk-sam9x60-usb.c                 |  4 +-
 drivers/clk/at91/clk-system.c                      |  2 +-
 drivers/clk/at91/clk-utmi.c                        |  4 +-
 drivers/clk/at91/compat.c                          | 30 ++++-----
 drivers/clk/at91/pmc.c                             |  2 +-
 drivers/clk/at91/pmc.h                             |  2 +-
 drivers/clk/at91/sckc.c                            |  4 +-
 drivers/clk/basic/Makefile                         |  7 +++
 drivers/clk/{ => basic}/clk_fixed_factor.c         |  2 +-
 drivers/clk/{ => basic}/clk_fixed_rate.c           |  4 +-
 drivers/clk/clk-cdce9xx.c                          |  4 +-
 drivers/clk/clk-gpio.c                             |  2 +-
 drivers/clk/clk-hsdk-cgu.c                         |  4 +-
 drivers/clk/clk-stub.c                             |  4 +-
 drivers/clk/clk-uclass.c                           | 33 ++++++----
 drivers/clk/clk-xlnx-clock-wizard.c                |  4 +-
 drivers/clk/clk_bcm6345.c                          |  2 +-
 drivers/clk/clk_boston.c                           |  2 +-
 drivers/clk/clk_k210.c                             |  8 +--
 drivers/clk/clk_octeon.c                           |  2 +-
 drivers/clk/clk_pic32.c                            |  4 +-
 drivers/clk/clk_sandbox.c                          |  4 +-
 drivers/clk/clk_sandbox_test.c                     |  2 +-
 drivers/clk/clk_scmi.c                             |  6 +-
 drivers/clk/clk_versaclock.c                       | 22 +++----
 drivers/clk/clk_versal.c                           |  4 +-
 drivers/clk/clk_vexpress_osc.c                     |  4 +-
 drivers/clk/clk_zynq.c                             |  8 +--
 drivers/clk/clk_zynqmp.c                           |  6 +-
 drivers/clk/exynos/clk-exynos7420.c                |  6 +-
 drivers/clk/exynos/clk-pll.c                       |  4 +-
 drivers/clk/exynos/clk.h                           |  2 +-
 drivers/clk/ics8n3qv01.c                           |  4 +-
 drivers/clk/imx/clk-composite-8m.c                 |  6 +-
 drivers/clk/imx/clk-composite-93.c                 |  2 +-
 drivers/clk/imx/clk-fracn-gppll.c                  |  4 +-
 drivers/clk/imx/clk-gate-93.c                      |  4 +-
 drivers/clk/imx/clk-gate2.c                        |  4 +-
 drivers/clk/imx/clk-imx6q.c                        |  2 +-
 drivers/clk/imx/clk-imx6ul.c                       |  2 +-
 drivers/clk/imx/clk-imx8.c                         |  4 +-
 drivers/clk/imx/clk-imx8.h                         |  2 +-
 drivers/clk/imx/clk-imx8qm.c                       |  2 +-
 drivers/clk/imx/clk-imx8qxp.c                      |  2 +-
 drivers/clk/imx/clk-imxrt1020.c                    |  2 +-
 drivers/clk/imx/clk-imxrt1170.c                    |  4 +-
 drivers/clk/imx/clk-pfd.c                          |  4 +-
 drivers/clk/imx/clk-pll14xx.c                      |  8 +--
 drivers/clk/imx/clk-pllv3.c                        | 18 +++---
 drivers/clk/intel/clk_intel.c                      |  2 +-
 drivers/clk/mediatek/clk-mtk.c                     | 14 ++---
 drivers/clk/mediatek/clk-mtk.h                     | 10 +--
 drivers/clk/meson/a1.c                             |  8 +--
 drivers/clk/meson/axg-ao.c                         |  2 +-
 drivers/clk/meson/axg.c                            |  2 +-
 drivers/clk/meson/clk-measure.c                    |  2 +-
 drivers/clk/meson/g12a-ao.c                        |  2 +-
 drivers/clk/meson/g12a.c                           | 10 +--
 drivers/clk/meson/gxbb.c                           |  8 +--
 drivers/clk/microchip/mpfs_clk_cfg.c               |  4 +-
 drivers/clk/microchip/mpfs_clk_msspll.c            |  2 +-
 drivers/clk/microchip/mpfs_clk_periph.c            |  2 +-
 drivers/clk/mpc83xx_clk.c                          |  2 +-
 drivers/clk/mtmips/clk-mt7620.c                    |  2 +-
 drivers/clk/mtmips/clk-mt7621.c                    |  2 +-
 drivers/clk/mtmips/clk-mt7628.c                    |  2 +-
 drivers/clk/mvebu/armada-37xx-periph.c             |  4 +-
 drivers/clk/mvebu/armada-37xx-tbg.c                |  2 +-
 drivers/clk/nuvoton/clk_npcm.c                     |  4 +-
 drivers/clk/nuvoton/clk_npcm.h                     |  2 +-
 drivers/clk/owl/clk_owl.c                          |  6 +-
 drivers/clk/qcom/clock-apq8016.c                   |  2 +-
 drivers/clk/qcom/clock-apq8096.c                   |  2 +-
 drivers/clk/qcom/clock-ipq4019.c                   |  2 +-
 drivers/clk/qcom/clock-ipq5424.c                   |  2 +-
 drivers/clk/qcom/clock-ipq9574.c                   |  2 +-
 drivers/clk/qcom/clock-qcm2290.c                   |  2 +-
 drivers/clk/qcom/clock-qcom.c                      |  4 +-
 drivers/clk/qcom/clock-qcom.h                      |  2 +-
 drivers/clk/qcom/clock-qcs404.c                    |  2 +-
 drivers/clk/qcom/clock-qcs615.c                    |  2 +-
 drivers/clk/qcom/clock-qcs8300.c                   |  2 +-
 drivers/clk/qcom/clock-sa8775p.c                   |  2 +-
 drivers/clk/qcom/clock-sc7280.c                    |  2 +-
 drivers/clk/qcom/clock-sdm845.c                    |  4 +-
 drivers/clk/qcom/clock-sm6115.c                    |  2 +-
 drivers/clk/qcom/clock-sm6350.c                    |  2 +-
 drivers/clk/qcom/clock-sm7150.c                    |  2 +-
 drivers/clk/qcom/clock-sm8150.c                    |  2 +-
 drivers/clk/qcom/clock-sm8250.c                    |  2 +-
 drivers/clk/qcom/clock-sm8550.c                    |  4 +-
 drivers/clk/qcom/clock-sm8650.c                    |  4 +-
 drivers/clk/qcom/clock-x1e80100.c                  |  4 +-
 drivers/clk/renesas/clk-rcar-gen2.c                |  4 +-
 drivers/clk/renesas/clk-rcar-gen3.c                |  4 +-
 drivers/clk/renesas/compound-clock.c               |  4 +-
 drivers/clk/renesas/r9a06g032-clocks.c             |  6 +-
 drivers/clk/renesas/rcar-gen2-cpg.h                |  2 +-
 drivers/clk/renesas/rcar-gen3-cpg.h                |  2 +-
 drivers/clk/renesas/rzg2l-cpg.c                    |  8 +--
 drivers/clk/rockchip/clk_px30.c                    | 12 ++--
 drivers/clk/rockchip/clk_rk3036.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3066.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3128.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3188.c                  |  4 +-
 drivers/clk/rockchip/clk_rk322x.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3288.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3308.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3328.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3368.c                  |  4 +-
 drivers/clk/rockchip/clk_rk3399.c                  |  8 +--
 drivers/clk/rockchip/clk_rk3528.c                  | 10 +--
 drivers/clk/rockchip/clk_rk3568.c                  | 14 ++---
 drivers/clk/rockchip/clk_rk3576.c                  |  8 +--
 drivers/clk/rockchip/clk_rk3588.c                  | 12 ++--
 drivers/clk/rockchip/clk_rv1108.c                  |  4 +-
 drivers/clk/rockchip/clk_rv1126.c                  | 12 ++--
 drivers/clk/sifive/sifive-prci.c                   |  4 +-
 drivers/clk/sophgo/clk-cv1800b.c                   |  4 +-
 drivers/clk/sophgo/clk-ip.c                        | 30 ++++-----
 drivers/clk/sophgo/clk-ip.h                        | 18 +++---
 drivers/clk/sophgo/clk-pll.c                       |  8 +--
 drivers/clk/sophgo/clk-pll.h                       |  4 +-
 drivers/clk/starfive/clk-jh7110-pll.c              |  4 +-
 drivers/clk/starfive/clk.h                         |  2 +-
 drivers/clk/stm32/clk-stm32-core.c                 | 22 +++----
 drivers/clk/stm32/clk-stm32-core.h                 |  2 +-
 drivers/clk/stm32/clk-stm32f.c                     |  4 +-
 drivers/clk/stm32/clk-stm32h7.c                    |  2 +-
 drivers/clk/stm32/clk-stm32mp1.c                   |  4 +-
 drivers/clk/sunxi/clk_sun6i_rtc.c                  |  2 +-
 drivers/clk/sunxi/clk_sunxi.c                      |  2 +-
 drivers/clk/tegra/tegra-car-clk.c                  |  4 +-
 drivers/clk/tegra/tegra186-clk.c                   |  4 +-
 drivers/clk/thead/clk-th1520-ap.c                  |  8 +--
 drivers/clk/ti/clk-am3-dpll-x2.c                   |  2 +-
 drivers/clk/ti/clk-am3-dpll.c                      |  4 +-
 drivers/clk/ti/clk-ctrl.c                          |  2 +-
 drivers/clk/ti/clk-divider.c                       |  4 +-
 drivers/clk/ti/clk-gate.c                          |  2 +-
 drivers/clk/ti/clk-k3-pll.c                        |  4 +-
 drivers/clk/ti/clk-k3.c                            |  6 +-
 drivers/clk/ti/clk-mux.c                           |  4 +-
 drivers/clk/ti/clk-sci.c                           |  4 +-
 drivers/clk/uccf/Kconfig                           | 22 +++++++
 drivers/clk/uccf/Makefile                          | 11 ++++
 drivers/clk/{ => uccf}/clk-composite.c             | 20 +++---
 drivers/clk/{ => uccf}/clk-divider.c               |  4 +-
 drivers/clk/{ => uccf}/clk-fixed-factor.c          |  2 +-
 drivers/clk/{ => uccf}/clk-gate.c                  |  2 +-
 drivers/clk/{ => uccf}/clk-mux.c                   |  2 +-
 drivers/clk/{ => uccf}/clk.c                       |  4 +-
 .../{clk_sandbox_ccf.c => uccf/clk_sandbox_uccf.c} |  8 +--
 drivers/clk/uniphier/clk-uniphier-core.c           |  6 +-
 drivers/phy/cadence/phy-cadence-sierra.c           |  2 +-
 drivers/phy/cadence/phy-cadence-torrent.c          |  2 +-
 drivers/phy/phy-stm32-usbphyc.c                    |  2 +-
 drivers/phy/phy-ti-am654.c                         |  2 +-
 drivers/phy/rockchip/phy-rockchip-inno-usb2.c      |  2 +-
 drivers/phy/ti/phy-j721e-wiz.c                     |  6 +-
 drivers/power/domain/imx8mp-hsiomix.c              |  2 +-
 include/clk-uclass.h                               |  6 +-
 include/clk.h                                      | 72 +++++++++++++++++++++-
 include/clk/sunxi.h                                |  2 +-
 include/linux/clk-provider.h                       | 24 ++++----
 include/sandbox-clk.h                              |  2 +-
 188 files changed, 596 insertions(+), 497 deletions(-)
---
base-commit: c704af3c8b0f37929bce8c2a4bba27d6e89919c7

// Casey (she/they)