Re: [PATCH v4 2/8] clk: starfive: Add system-0 domain PLL clock driver
Changhuang Liang <[email protected]>
| Newsgroups | org.infradead.lists.linux-riscv,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <ZQ4PR01MB12022BC787EF8C07DBB34E34F2DD2@ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn> |
Hi, Brian > Hi Changhuang, > > On Sat, Aug 08, 2026 at 06:50:48PM -0700, Changhuang Liang wrote: > > Add system-0 domain PLL clock driver for StarFive JHB100 SoC. > > > > Signed-off-by: Changhuang Liang <[email protected]> > > --- > > drivers/clk/starfive/Kconfig | 8 + > > drivers/clk/starfive/Makefile | 1 + > > .../clk/starfive/clk-starfive-jhb100-pll.c | 535 ++++++++++++++++++ > > 3 files changed, 544 insertions(+) > > create mode 100644 drivers/clk/starfive/clk-starfive-jhb100-pll.c > > > > diff --git a/drivers/clk/starfive/Kconfig > > b/drivers/clk/starfive/Kconfig index 852464949334..a39dd22112fa 100644 > > --- a/drivers/clk/starfive/Kconfig > > +++ b/drivers/clk/starfive/Kconfig > > @@ -117,6 +117,14 @@ config CLK_STARFIVE_JHB100_PER3 > > Say yes here to support the peripheral-3 clock controller > > on the StarFive JHB100 SoC. > > > > +config CLK_STARFIVE_JHB100_PLL > > + bool "StarFive JHB100 PLL clock support" > > Can this be a tristate? I checked again, this doesn't affect the critical clock, so it can be changed to tristate > > > + depends on ARCH_STARFIVE || COMPILE_TEST > > + default ARCH_STARFIVE > > + help > > + Say yes here to support the PLL clock controller on the > > + StarFive JHB100 SoC. > > + > > config CLK_STARFIVE_JHB100_SYS0 > > bool "StarFive JHB100 system-0 clock support" > > depends on ARCH_STARFIVE || COMPILE_TEST diff --git > > a/drivers/clk/starfive/Makefile b/drivers/clk/starfive/Makefile index > > f00690f0cdad..547a8c170728 100644 > > --- a/drivers/clk/starfive/Makefile > > +++ b/drivers/clk/starfive/Makefile > > @@ -15,6 +15,7 @@ obj-$(CONFIG_CLK_STARFIVE_JHB100_PER0) > += clk-starfive-jhb100-per0.o > > obj-$(CONFIG_CLK_STARFIVE_JHB100_PER1) += > clk-starfive-jhb100-per1.o > > obj-$(CONFIG_CLK_STARFIVE_JHB100_PER2) += > clk-starfive-jhb100-per2.o > > obj-$(CONFIG_CLK_STARFIVE_JHB100_PER3) += > clk-starfive-jhb100-per3.o > > +obj-$(CONFIG_CLK_STARFIVE_JHB100_PLL) += > clk-starfive-jhb100-pll.o > > obj-$(CONFIG_CLK_STARFIVE_JHB100_SYS0) += > clk-starfive-jhb100-sys0.o > > obj-$(CONFIG_CLK_STARFIVE_JHB100_SYS1) += > clk-starfive-jhb100-sys1.o > > obj-$(CONFIG_CLK_STARFIVE_JHB100_SYS2) += > clk-starfive-jhb100-sys2.o > > diff --git a/drivers/clk/starfive/clk-starfive-jhb100-pll.c > > b/drivers/clk/starfive/clk-starfive-jhb100-pll.c > > new file mode 100644 > > index 000000000000..55d589bc831e > > --- /dev/null > > +++ b/drivers/clk/starfive/clk-starfive-jhb100-pll.c > > @@ -0,0 +1,535 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* > > + * StarFive JHB100 PLL Clock Generator Driver > > + * > > + * Copyright (C) 2024 StarFive Technology Co., Ltd. > > + * > > + * Author: Changhuang Liang <[email protected]> > > + */ > > + > > +#include <linux/bits.h> > > +#include <linux/clk-provider.h> > > +#include <linux/debugfs.h> > > +#include <linux/device.h> > > +#include <linux/kernel.h> > > +#include <linux/math64.h> > > +#include <linux/mfd/syscon.h> > > +#include <linux/platform_device.h> > > +#include <linux/regmap.h> > > +#include <linux/units.h> > > + > > +#include <dt-bindings/clock/starfive,jhb100-crg.h> > > + > > +/* this driver expects a 25MHz input frequency from the oscillator */ > > +#define JHB100_PLL_OSC_RATE (25 * HZ_PER_MHZ) > > + > > +/* System-0 domain PLL */ > > +#define JHB100_PLL2_OFFSET 0x00 > > +#define JHB100_PLL3_OFFSET 0x0c > > +#define JHB100_PLL4_OFFSET 0x18 > > +#define JHB100_PLL5_OFFSET 0x24 > > + > > +#define JHB100_PLL_CFG0_OFFSET 0x0 > > +#define JHB100_PLL_CFG1_OFFSET 0x4 > > +#define JHB100_PLL_CFG2_OFFSET 0x8 > > + > > +#define JHB100_PLLX_CFG0(offset) ((offset) + JHB100_PLL_CFG0_OFFSET) > > +/* fbdiv value should be 16 to 4095 */ > > +#define JHB100_PLL_FBDIV GENMASK(13, 2) > > +#define JHB100_PLL_FBDIV_SHIFT 2 > > +#define JHB100_PLL_FOUTPOSTDIV_EN BIT(14) > > +#define JHB100_PLL_FOUTPOSTDIV_EN_SHIFT 14 > > +#define JHB100_PLL_FOUTVCOP_EN BIT(16) > > +#define JHB100_PLL_FOUTVCOP_EN_SHIFT 16 > > + > > +#define JHB100_PLLX_CFG1(offset) ((offset) + JHB100_PLL_CFG1_OFFSET) > > +/* frac value should be decimals multiplied by 2^24 */ > > +#define JHB100_PLL_FRAC GENMASK(23, 0) > > +#define JHB100_PLL_FRAC_SHIFT 0 > > +#define JHB100_PLL_LOCK BIT(24) > > +#define JHB100_PLL_LOCK_SHIFT 24 > > + > > +#define JHB100_PLLX_CFG2(offset) ((offset) + JHB100_PLL_CFG2_OFFSET) > > +#define JHB100_PLL_PD BIT(13) > > +#define JHB100_PLL_PD_SHIFT 13 > > +#define JHB100_PLL_POSTDIV GENMASK(15, 14) > > +#define JHB100_PLL_POSTDIV_SHIFT 14 > > +#define JHB100_PLL_REFDIV GENMASK(23, 18) > > +#define JHB100_PLL_REFDIV_SHIFT 18 > > + > > +#define JHB100_PLL_TIMEOUT_US 1000 > > +#define JHB100_PLL_INTERVAL_US 100 > > + > > +struct jhb100_pll_preset { > > + unsigned long freq; > > + u32 frac; /* frac value should be decimals multiplied by 2^24 > */ > > + unsigned fbdiv : 12; /* fbdiv value should be 16 to 4095 */ > > + unsigned refdiv : 6; > > + unsigned postdiv : 2; > > + unsigned foutpostdiv_en : 1; > > + unsigned foutvcop_en : 1; > > +}; > > + > > +struct jhb100_pll_info { > > + char *name; > > const char *name ? Will Fix. Best Regards, Changhuang _______________________________________________ linux-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-riscv