[PATCH v9 0/6] clk: Support spread spectrum and use it in clk-scmi
From: Peng Fan (OSS) <hidden>
Date: 2026-03-12 06:57:23
Also in:
arm-scmi, linux-clk, linux-devicetree, lkml
Since the assigned-clock-sscs property [1] has been accepted into the device tree schema, we can now support it in the Linux clock driver. Therefore, I've picked up the previously submitted work [2] titled "clk: Support spread spectrum and use it in clk-pll144x and clk-scmi." As more than six months have passed since [2] was posted, I’m treating this patchset as a new submission rather than a v3. - Introduce clk_set_spread_spectrum to set the parameters for enabling spread spectrum of a clock. - Parse 'assigned-clock-sscs' and configure it by default before using the clock. This property is parsed before parsing clock rate. - Enable this feature for clk-scmi on i.MX95. Because SCMI spec will not include spread spectrum as a standard extension, we still need to use NXP i.MX OEM extension. [1] https://github.com/devicetree-org/dt-schema/pull/154 [2] https://lore.kernel.org/all/20250205-clk-ssc-v2-0-fa73083caa92@nxp.com/ (local) Signed-off-by: Peng Fan <peng.fan@nxp.com> --- Changes in v9: - Rebased to next-20260311 - Fix kunit test by setting return value to 0 when there is no assigned-clocks in patch 3 - Link to v8: https://lore.kernel.org/r/20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com (local) Changes in v8: - Add R-b from Cristian for patch 5 and patch 6 - Add comment for scmi_clk_oem_info in patch 6 - Rebased to next-20260227 - Link to v7: https://lore.kernel.org/r/20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com (local) Changes in v7: - Add R-b from Sebin - Drop __free usage per comment from Krzysztof in patch 3 - Link to v6: https://lore.kernel.org/linux-clk/20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com/ (local) Changes in v6: - Add kunit build warning - Update OEM string comparation per Sebin - Link to v5: https://lore.kernel.org/linux-clk/20251009-clk-ssc-v5-1-v5-0-d6447d76171e@nxp.com/ (local) Changes in v5: - Per Stephen, export clk_hw_set_spread_spectrum, use enum for method, add const for set_spread_spectrum and rename clk_ss/conf to ss_conf. - Per Sebin, Cristian, Sudeep, I added clk-scmi-oem.c to support vendor extensions. - Link to v4: https://lore.kernel.org/arm-scmi/aNQPWO6pfA_3mmxf@redhat.com/T/#me81231bf286e2a8e4e00a68707ed1e525a2b4a3d (local) Changes in v4: - Add R-b for patch 1 from Brian - Drop unecessary change in patch 4 Per Brian - Link to v3: https://lore.kernel.org/r/20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com (local) Changes in v3: - New patch 1 for dt-bindings per comment from Brian https://lore.kernel.org/all/aLeEFzXkPog_dt2B@x1/ (local) This might not be good to add a new dt-binding file in v3. But this is quite a simple file that just has four macros to encode modulation method. So hope this is fine for DT maintainers. - Add Brain's R-b for patch 2 - New patch 3 to add Kunit test per Brain. Since Brain helped draft part of the code, I added Co-developed-by tag from Brain. - Link to v2: https://lore.kernel.org/r/20250901-clk-ssc-version1-v2-0-1d0a486dffe6@nxp.com (local) Changes in v2: - Simplify the code in patch 2 per Dan Carpenter and Brian Masney - Rebased to next-20250829 - Link to v1: https://lore.kernel.org/r/20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com (local) --- Peng Fan (6): dt-bindings: clock: Add spread spectrum definition clk: Introduce clk_hw_set_spread_spectrum clk: conf: Support assigned-clock-sscs clk: Add KUnit tests for assigned-clock-sscs clk: scmi: Introduce common header for SCMI clock interface clk: scmi: Add i.MX95 OEM extension support for SCMI clock driver drivers/clk/Makefile | 8 +- drivers/clk/clk-conf.c | 76 +++++++++++++ drivers/clk/clk-scmi-oem.c | 108 ++++++++++++++++++ drivers/clk/clk-scmi.c | 44 +++----- drivers/clk/clk-scmi.h | 51 +++++++++ drivers/clk/clk.c | 27 +++++ drivers/clk/clk_test.c | 121 ++++++++++++++++++++- drivers/clk/kunit_clk_assigned_rates.h | 10 ++ drivers/clk/kunit_clk_assigned_rates_multiple.dtso | 6 + ...kunit_clk_assigned_rates_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_one.dtso | 3 + .../clk/kunit_clk_assigned_rates_one_consumer.dtso | 3 + .../clk/kunit_clk_assigned_rates_u64_multiple.dtso | 6 + ...t_clk_assigned_rates_u64_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_u64_one.dtso | 3 + .../kunit_clk_assigned_rates_u64_one_consumer.dtso | 3 + drivers/clk/kunit_clk_assigned_sscs_null.dtso | 16 +++ .../clk/kunit_clk_assigned_sscs_null_consumer.dtso | 20 ++++ drivers/clk/kunit_clk_assigned_sscs_without.dtso | 15 +++ .../kunit_clk_assigned_sscs_without_consumer.dtso | 19 ++++ drivers/clk/kunit_clk_assigned_sscs_zero.dtso | 12 ++ .../clk/kunit_clk_assigned_sscs_zero_consumer.dtso | 16 +++ include/dt-bindings/clock/clock.h | 14 +++ include/linux/clk-provider.h | 31 ++++++ 24 files changed, 592 insertions(+), 32 deletions(-) --- base-commit: 4095b5b3b22162df4bacade89b1814f774c5df42 change-id: 20251231-clk-ssc-v7-1-402dd4f9e629 Best regards, -- Peng Fan [off-list ref]