pll531x PLL is used in Exynos Auto v920 SoC for shared pll.
pll531x: Integer/fractional PLL with mid frequency FVCO (800 to 3120 MHz)
PLL531x
FOUT = (MDIV + F/2^32-F[31]) * FIN/(PDIV x 2^SDIV)
Signed-off-by: Sunyeal Hong <sunyeal.hong@samsung.com>
---
drivers/clk/samsung/clk-pll.c | 45 +++++++++++++++++++++++++++++++++++
drivers/clk/samsung/clk-pll.h | 1 +
2 files changed, 46 insertions(+)
diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c
index 4be879ab917e..b3bcef074ab7 100644
--- a/drivers/clk/samsung/clk-pll.c
+++ b/drivers/clk/samsung/clk-pll.c
@@ -1261,6 +1261,48 @@ static const struct clk_ops samsung_pll2650xx_clk_min_ops = {
.recalc_rate = samsung_pll2650xx_recalc_rate,
};
+/*
+ * PLL531X Clock Type
+ */
+/* Maximum lock time can be 500 * PDIV cycles */
+#define PLL531X_LOCK_FACTOR (500)
+#define PLL531X_MDIV_MASK (0x3FF)
+#define PLL531X_PDIV_MASK (0x3F)
+#define PLL531X_SDIV_MASK (0x7)
+#define PLL531X_FDIV_MASK (0xFFFF)
+#define PLL531X_MDIV_SHIFT (16)
+#define PLL531X_PDIV_SHIFT (8)
+#define PLL531X_SDIV_SHIFT (0)
+
+static unsigned long samsung_pll531x_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct samsung_clk_pll *pll = to_clk_pll(hw);
+ u32 mdiv, pdiv, sdiv, pll_con0, pll_con8;
+ s32 fdiv;
+ u64 fout = parent_rate;
+
+ pll_con0 = readl_relaxed(pll->con_reg);
+ pll_con8 = readl_relaxed(pll->con_reg + 20);
+ mdiv = (pll_con0 >> PLL531X_MDIV_SHIFT) & PLL531X_MDIV_MASK;
+ pdiv = (pll_con0 >> PLL531X_PDIV_SHIFT) & PLL531X_PDIV_MASK;
+ sdiv = (pll_con0 >> PLL531X_SDIV_SHIFT) & PLL531X_SDIV_MASK;
+ fdiv = (s32)(pll_con8 & PLL531X_FDIV_MASK);
+
+ if (fdiv >> 31)
+ mdiv--;
+
+ fout *= ((u64)mdiv << 24) + (fdiv >> 8);
+ do_div(fout, (pdiv << sdiv));
+ fout >>= 24;
+
+ return (unsigned long)fout;
+}
+
+static const struct clk_ops samsung_pll531x_clk_ops = {
+ .recalc_rate = samsung_pll531x_recalc_rate,
+};
+
static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
const struct samsung_pll_clock *pll_clk)
{
@@ -1394,6 +1436,9 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
else
init.ops = &samsung_pll2650xx_clk_ops;
break;
+ case pll_531x:
+ init.ops = &samsung_pll531x_clk_ops;
+ break;
default:
pr_warn("%s: Unknown pll type for pll clk %s\n",
__func__, pll_clk->name);
diff --git a/drivers/clk/samsung/clk-pll.h b/drivers/clk/samsung/clk-pll.h
index ffd3d52c0dec..ce9d6f21f993 100644
--- a/drivers/clk/samsung/clk-pll.h
+++ b/drivers/clk/samsung/clk-pll.h
@@ -41,6 +41,7 @@ enum samsung_pll_type {
pll_0516x,
pll_0517x,
pll_0518x,
+ pll_531x,
};
#define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \
--
2.45.2
Hi Sunyeal,
kernel test robot noticed the following build warnings:
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Sunyeal-Hong/dt-bindings-clock-add-Exynos-Auto-v920-SoC-CMU-bindings/20240708-072150
base: https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git for-next
patch link: https://lore.kernel.org/r/20240707231331.3433340-4-sunyeal.hong%40samsung.com
patch subject: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for pll_531x
config: arc-randconfig-r071-20240719 (https://download.01.org/0day-ci/archive/20240720/202407200028.5AADGhmj-lkp@intel.com/config)
compiler: arc-elf-gcc (GCC) 13.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202407200028.5AADGhmj-lkp@intel.com/
smatch warnings:
drivers/clk/samsung/clk-pll.c:1292 samsung_pll531x_recalc_rate() warn: mask and shift to zero: expr='fdiv >> 31'
vim +1292 drivers/clk/samsung/clk-pll.c
5c788df7a25de7 Sunyeal Hong 2024-07-08 1277 static unsigned long samsung_pll531x_recalc_rate(struct clk_hw *hw,
5c788df7a25de7 Sunyeal Hong 2024-07-08 1278 unsigned long parent_rate)
5c788df7a25de7 Sunyeal Hong 2024-07-08 1279 {
5c788df7a25de7 Sunyeal Hong 2024-07-08 1280 struct samsung_clk_pll *pll = to_clk_pll(hw);
5c788df7a25de7 Sunyeal Hong 2024-07-08 1281 u32 mdiv, pdiv, sdiv, pll_con0, pll_con8;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1282 s32 fdiv;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1283 u64 fout = parent_rate;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1284
5c788df7a25de7 Sunyeal Hong 2024-07-08 1285 pll_con0 = readl_relaxed(pll->con_reg);
5c788df7a25de7 Sunyeal Hong 2024-07-08 1286 pll_con8 = readl_relaxed(pll->con_reg + 20);
5c788df7a25de7 Sunyeal Hong 2024-07-08 1287 mdiv = (pll_con0 >> PLL531X_MDIV_SHIFT) & PLL531X_MDIV_MASK;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1288 pdiv = (pll_con0 >> PLL531X_PDIV_SHIFT) & PLL531X_PDIV_MASK;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1289 sdiv = (pll_con0 >> PLL531X_SDIV_SHIFT) & PLL531X_SDIV_MASK;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1290 fdiv = (s32)(pll_con8 & PLL531X_FDIV_MASK);
PLL531X_FDIV_MASK is 0xffff. Was this supposed to be a cast to s16
instead of s32? Why is fdiv signed? Shifting negative values is
undefined in C.
5c788df7a25de7 Sunyeal Hong 2024-07-08 1291
5c788df7a25de7 Sunyeal Hong 2024-07-08 @1292 if (fdiv >> 31)
It's really unclear what's happening here. If I had to guess, I'd say
that this was testing to see if fdiv was negative.
5c788df7a25de7 Sunyeal Hong 2024-07-08 1293 mdiv--;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1294
5c788df7a25de7 Sunyeal Hong 2024-07-08 1295 fout *= ((u64)mdiv << 24) + (fdiv >> 8);
^^^^^^^^^
More shifting.
5c788df7a25de7 Sunyeal Hong 2024-07-08 1296 do_div(fout, (pdiv << sdiv));
5c788df7a25de7 Sunyeal Hong 2024-07-08 1297 fout >>= 24;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1298
5c788df7a25de7 Sunyeal Hong 2024-07-08 1299 return (unsigned long)fout;
5c788df7a25de7 Sunyeal Hong 2024-07-08 1300 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hello Dan,
> -----Original Message-----
> From: Dan Carpenter <dan.carpenter@linaro.org>
> Sent: Saturday, July 20, 2024 3:48 AM
> To: oe-kbuild@lists.linux.dev; Sunyeal Hong <sunyeal.hong@samsung.com>;
> Krzysztof Kozlowski <krzk@kernel.org>; Sylwester Nawrocki
> <s.nawrocki@samsung.com>; Chanwoo Choi <cw00.choi@samsung.com>; Alim
> Akhtar <alim.akhtar@samsung.com>; Michael Turquette
> <mturquette@baylibre.com>; Stephen Boyd <sboyd@kernel.org>; Rob Herring
> <robh@kernel.org>; Conor Dooley <conor+dt@kernel.org>
> Cc: lkp@intel.com; oe-kbuild-all@lists.linux.dev; linux-samsung-
> soc@vger.kernel.org; linux-clk@vger.kernel.org;
devicetree@vger.kernel.org;
> linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org;
> Sunyeal Hong <sunyeal.hong@samsung.com>
> Subject: Re: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for
> pll_531x
>
> Hi Sunyeal,
>
> kernel test robot noticed the following build warnings:
>
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://protect2.fireeye.com/v1/url?k=ccd9a91d-93426779-ccd82252-
> 000babda0201-b5083e850ec85e2b&q=1&e=dc8f0621-d4ce-45e5-8254-
> 9a5da18037d5&u=https%3A%2F%2Fgithub.com%2Fintel-lab-
> lkp%2Flinux%2Fcommits%2FSunyeal-Hong%2Fdt-bindings-clock-add-Exynos-Auto-
> v920-SoC-CMU-bindings%2F20240708-072150
> base: https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
> for-next
> patch link: https://lore.kernel.org/r/20240707231331.3433340-4-
> sunyeal.hong%40samsung.com
> patch subject: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for
> pll_531x
> config: arc-randconfig-r071-20240719 (https://download.01.org/0day-
> ci/archive/20240720/202407200028.5AADGhmj-lkp@intel.com/config)
> compiler: arc-elf-gcc (GCC) 13.2.0
>
> If you fix the issue in a separate patch/commit (i.e. not just a new
> version of the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
> | Closes: https://lore.kernel.org/r/202407200028.5AADGhmj-lkp@intel.com/
>
> smatch warnings:
> drivers/clk/samsung/clk-pll.c:1292 samsung_pll531x_recalc_rate() warn:
> mask and shift to zero: expr='fdiv >> 31'
>
> vim +1292 drivers/clk/samsung/clk-pll.c
>
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1277 static unsigned long
> samsung_pll531x_recalc_rate(struct clk_hw *hw,
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1278
> unsigned long parent_rate)
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1279 {
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1280 struct
samsung_clk_pll *pll
> = to_clk_pll(hw);
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1281 u32 mdiv, pdiv,
sdiv,
> pll_con0, pll_con8;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1282 s32 fdiv;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1283 u64 fout =
parent_rate;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1284
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1285 pll_con0 =
> readl_relaxed(pll->con_reg);
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1286 pll_con8 =
> readl_relaxed(pll->con_reg + 20);
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1287 mdiv = (pll_con0 >>
> PLL531X_MDIV_SHIFT) & PLL531X_MDIV_MASK;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1288 pdiv = (pll_con0 >>
> PLL531X_PDIV_SHIFT) & PLL531X_PDIV_MASK;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1289 sdiv = (pll_con0 >>
> PLL531X_SDIV_SHIFT) & PLL531X_SDIV_MASK;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1290 fdiv =
(s32)(pll_con8 &
> PLL531X_FDIV_MASK);
>
> PLL531X_FDIV_MASK is 0xffff. Was this supposed to be a cast to s16
> instead of s32? Why is fdiv signed? Shifting negative values is
undefined
> in C.
>
As you reviewed, I will change fdiv to u32 type and modify it to use a mask
of 0xffffffff.
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1291
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 @1292 if (fdiv >> 31)
>
> It's really unclear what's happening here. If I had to guess, I'd say
> that this was testing to see if fdiv was negative.
>
the bit of fdiv 31 is a bit that can check negative numbers. In this case,
the mdiv is first subtracting 1. Please refer to the formula of commit
description.
FOUT = (MDIV + F/2^32-F[31]) x FIN/(PDIV x 2^SDIV) for fractional PLL
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1293 mdiv--;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1294
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1295 fout *= ((u64)mdiv
<< 24) +
> (fdiv >> 8);
>
^^^^^^^^^ More
> shifting.
>
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1296 do_div(fout, (pdiv
<<
> sdiv));
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1297 fout >>= 24;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1298
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1299 return (unsigned
long)fout;
> 5c788df7a25de7 Sunyeal Hong 2024-07-08 1300 }
>
> --
> 0-DAY CI Kernel Test Service
> https://protect2.fireeye.com/v1/url?k=8c19bb62-d3827506-8c18302d-
> 000babda0201-2f20ef1ee86cc8ae&q=1&e=dc8f0621-d4ce-45e5-8254-
> 9a5da18037d5&u=https%3A%2F%2Fgithub.com%2Fintel%2Flkp-tests%2Fwiki
>
I will fix the patch and update again.
Thanks,
Sunyeal Hong.
Hello Sunyeal,
> -----Original Message-----
> From: Sunyeal Hong <sunyeal.hong@samsung.com>
> Sent: Monday, July 8, 2024 4:44 AM
> To: Krzysztof Kozlowski <krzk@kernel.org>; Sylwester Nawrocki
> <s.nawrocki@samsung.com>; Chanwoo Choi <cw00.choi@samsung.com>;
> Alim Akhtar <alim.akhtar@samsung.com>; Michael Turquette
> <mturquette@baylibre.com>; Stephen Boyd <sboyd@kernel.org>; Rob
> Herring <robh@kernel.org>; Conor Dooley <conor+dt@kernel.org>
> Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org;
> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org; Sunyeal Hong <sunyeal.hong@samsung.com>
> Subject: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for pll_531x
>
> pll531x PLL is used in Exynos Auto v920 SoC for shared pll.
> pll531x: Integer/fractional PLL with mid frequency FVCO (800 to 3120 MHz)
>
> PLL531x
> FOUT = (MDIV + F/2^32-F[31]) * FIN/(PDIV x 2^SDIV)
>
Any reason for not mentioning equation for integer PLL?
> Signed-off-by: Sunyeal Hong <sunyeal.hong@samsung.com>
> ---
Anyway, LGTM,
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
> drivers/clk/samsung/clk-pll.c | 45
> +++++++++++++++++++++++++++++++++++
> drivers/clk/samsung/clk-pll.h | 1 +
> 2 files changed, 46 insertions(+)
>
> diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c index
> 4be879ab917e..b3bcef074ab7 100644
> --- a/drivers/clk/samsung/clk-pll.c
> +++ b/drivers/clk/samsung/clk-pll.c
> @@ -1261,6 +1261,48 @@ static const struct clk_ops
> samsung_pll2650xx_clk_min_ops = {
> .recalc_rate = samsung_pll2650xx_recalc_rate, };
>
> +/*
> + * PLL531X Clock Type
> + */
> +/* Maximum lock time can be 500 * PDIV cycles */
> +#define PLL531X_LOCK_FACTOR (500)
> +#define PLL531X_MDIV_MASK (0x3FF)
> +#define PLL531X_PDIV_MASK (0x3F)
> +#define PLL531X_SDIV_MASK (0x7)
> +#define PLL531X_FDIV_MASK (0xFFFF)
> +#define PLL531X_MDIV_SHIFT (16)
> +#define PLL531X_PDIV_SHIFT (8)
> +#define PLL531X_SDIV_SHIFT (0)
> +
> +static unsigned long samsung_pll531x_recalc_rate(struct clk_hw *hw,
> + unsigned long parent_rate)
> +{
> + struct samsung_clk_pll *pll = to_clk_pll(hw);
> + u32 mdiv, pdiv, sdiv, pll_con0, pll_con8;
> + s32 fdiv;
> + u64 fout = parent_rate;
> +
> + pll_con0 = readl_relaxed(pll->con_reg);
> + pll_con8 = readl_relaxed(pll->con_reg + 20);
> + mdiv = (pll_con0 >> PLL531X_MDIV_SHIFT) & PLL531X_MDIV_MASK;
> + pdiv = (pll_con0 >> PLL531X_PDIV_SHIFT) & PLL531X_PDIV_MASK;
> + sdiv = (pll_con0 >> PLL531X_SDIV_SHIFT) & PLL531X_SDIV_MASK;
> + fdiv = (s32)(pll_con8 & PLL531X_FDIV_MASK);
> +
> + if (fdiv >> 31)
> + mdiv--;
> +
> + fout *= ((u64)mdiv << 24) + (fdiv >> 8);
> + do_div(fout, (pdiv << sdiv));
> + fout >>= 24;
> +
> + return (unsigned long)fout;
> +}
> +
> +static const struct clk_ops samsung_pll531x_clk_ops = {
> + .recalc_rate = samsung_pll531x_recalc_rate, };
> +
> static void __init _samsung_clk_register_pll(struct samsung_clk_provider
> *ctx,
> const struct samsung_pll_clock *pll_clk) {
> @@ -1394,6 +1436,9 @@ static void __init _samsung_clk_register_pll(struct
> samsung_clk_provider *ctx,
> else
> init.ops = &samsung_pll2650xx_clk_ops;
> break;
> + case pll_531x:
> + init.ops = &samsung_pll531x_clk_ops;
> + break;
> default:
> pr_warn("%s: Unknown pll type for pll clk %s\n",
> __func__, pll_clk->name);
> diff --git a/drivers/clk/samsung/clk-pll.h b/drivers/clk/samsung/clk-pll.h
> index ffd3d52c0dec..ce9d6f21f993 100644
> --- a/drivers/clk/samsung/clk-pll.h
> +++ b/drivers/clk/samsung/clk-pll.h
> @@ -41,6 +41,7 @@ enum samsung_pll_type {
> pll_0516x,
> pll_0517x,
> pll_0518x,
> + pll_531x,
> };
>
> #define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \
> --
> 2.45.2
Hello Alim,
> -----Original Message-----
> From: Alim Akhtar <alim.akhtar@samsung.com>
> Sent: Monday, July 8, 2024 8:58 PM
> To: 'Sunyeal Hong' <sunyeal.hong@samsung.com>; 'Krzysztof Kozlowski'
> <krzk@kernel.org>; 'Sylwester Nawrocki' <s.nawrocki@samsung.com>; 'Chanwoo
> Choi' <cw00.choi@samsung.com>; 'Michael Turquette'
> <mturquette@baylibre.com>; 'Stephen Boyd' <sboyd@kernel.org>; 'Rob
> Herring' <robh@kernel.org>; 'Conor Dooley' <conor+dt@kernel.org>
> Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org;
> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org
> Subject: RE: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for
> pll_531x
>
> Hello Sunyeal,
>
> > -----Original Message-----
> > From: Sunyeal Hong <sunyeal.hong@samsung.com>
> > Sent: Monday, July 8, 2024 4:44 AM
> > To: Krzysztof Kozlowski <krzk@kernel.org>; Sylwester Nawrocki
> > <s.nawrocki@samsung.com>; Chanwoo Choi <cw00.choi@samsung.com>; Alim
> > Akhtar <alim.akhtar@samsung.com>; Michael Turquette
> > <mturquette@baylibre.com>; Stephen Boyd <sboyd@kernel.org>; Rob
> > Herring <robh@kernel.org>; Conor Dooley <conor+dt@kernel.org>
> > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org;
> > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> > linux- kernel@vger.kernel.org; Sunyeal Hong <sunyeal.hong@samsung.com>
> > Subject: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for
> > pll_531x
> >
> > pll531x PLL is used in Exynos Auto v920 SoC for shared pll.
> > pll531x: Integer/fractional PLL with mid frequency FVCO (800 to 3120
> > MHz)
> >
> > PLL531x
> > FOUT = (MDIV + F/2^32-F[31]) * FIN/(PDIV x 2^SDIV)
> >
> Any reason for not mentioning equation for integer PLL?
>
If the F value is 0, it operates as an integer PLL.
> > Signed-off-by: Sunyeal Hong <sunyeal.hong@samsung.com>
> > ---
> Anyway, LGTM,
>
> Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
>
> > drivers/clk/samsung/clk-pll.c | 45
> > +++++++++++++++++++++++++++++++++++
> > drivers/clk/samsung/clk-pll.h | 1 +
> > 2 files changed, 46 insertions(+)
> >
> > diff --git a/drivers/clk/samsung/clk-pll.c
> > b/drivers/clk/samsung/clk-pll.c index
> > 4be879ab917e..b3bcef074ab7 100644
> > --- a/drivers/clk/samsung/clk-pll.c
> > +++ b/drivers/clk/samsung/clk-pll.c
> > @@ -1261,6 +1261,48 @@ static const struct clk_ops
> > samsung_pll2650xx_clk_min_ops = {
> > .recalc_rate = samsung_pll2650xx_recalc_rate, };
> >
> > +/*
> > + * PLL531X Clock Type
> > + */
> > +/* Maximum lock time can be 500 * PDIV cycles */
> > +#define PLL531X_LOCK_FACTOR (500)
> > +#define PLL531X_MDIV_MASK (0x3FF)
> > +#define PLL531X_PDIV_MASK (0x3F)
> > +#define PLL531X_SDIV_MASK (0x7)
> > +#define PLL531X_FDIV_MASK (0xFFFF)
> > +#define PLL531X_MDIV_SHIFT (16)
> > +#define PLL531X_PDIV_SHIFT (8)
> > +#define PLL531X_SDIV_SHIFT (0)
> > +
> > +static unsigned long samsung_pll531x_recalc_rate(struct clk_hw *hw,
> > + unsigned long parent_rate)
> > +{
> > + struct samsung_clk_pll *pll = to_clk_pll(hw);
> > + u32 mdiv, pdiv, sdiv, pll_con0, pll_con8;
> > + s32 fdiv;
> > + u64 fout = parent_rate;
> > +
> > + pll_con0 = readl_relaxed(pll->con_reg);
> > + pll_con8 = readl_relaxed(pll->con_reg + 20);
> > + mdiv = (pll_con0 >> PLL531X_MDIV_SHIFT) & PLL531X_MDIV_MASK;
> > + pdiv = (pll_con0 >> PLL531X_PDIV_SHIFT) & PLL531X_PDIV_MASK;
> > + sdiv = (pll_con0 >> PLL531X_SDIV_SHIFT) & PLL531X_SDIV_MASK;
> > + fdiv = (s32)(pll_con8 & PLL531X_FDIV_MASK);
> > +
> > + if (fdiv >> 31)
> > + mdiv--;
> > +
> > + fout *= ((u64)mdiv << 24) + (fdiv >> 8);
> > + do_div(fout, (pdiv << sdiv));
> > + fout >>= 24;
> > +
> > + return (unsigned long)fout;
> > +}
> > +
> > +static const struct clk_ops samsung_pll531x_clk_ops = {
> > + .recalc_rate = samsung_pll531x_recalc_rate, };
> > +
> > static void __init _samsung_clk_register_pll(struct
> > samsung_clk_provider *ctx,
> > const struct samsung_pll_clock *pll_clk) { @@ -
> 1394,6 +1436,9 @@
> > static void __init _samsung_clk_register_pll(struct
> > samsung_clk_provider *ctx,
> > else
> > init.ops = &samsung_pll2650xx_clk_ops;
> > break;
> > + case pll_531x:
> > + init.ops = &samsung_pll531x_clk_ops;
> > + break;
> > default:
> > pr_warn("%s: Unknown pll type for pll clk %s\n",
> > __func__, pll_clk->name);
> > diff --git a/drivers/clk/samsung/clk-pll.h
> > b/drivers/clk/samsung/clk-pll.h index ffd3d52c0dec..ce9d6f21f993
> > 100644
> > --- a/drivers/clk/samsung/clk-pll.h
> > +++ b/drivers/clk/samsung/clk-pll.h
> > @@ -41,6 +41,7 @@ enum samsung_pll_type {
> > pll_0516x,
> > pll_0517x,
> > pll_0518x,
> > + pll_531x,
> > };
> >
> > #define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \
> > --
> > 2.45.2
>
Hello Sunyeal, > -----Original Message----- > From: sunyeal.hong <sunyeal.hong@samsung.com> > Sent: Wednesday, July 10, 2024 7:50 AM > To: 'Alim Akhtar' <alim.akhtar@samsung.com>; 'Krzysztof Kozlowski' > <krzk@kernel.org>; 'Sylwester Nawrocki' <s.nawrocki@samsung.com>; > 'Chanwoo Choi' <cw00.choi@samsung.com>; 'Michael Turquette' > <mturquette@baylibre.com>; 'Stephen Boyd' <sboyd@kernel.org>; 'Rob > Herring' <robh@kernel.org>; 'Conor Dooley' <conor+dt@kernel.org> > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux- > kernel@vger.kernel.org > Subject: RE: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for pll_531x > > Hello Alim, > > > -----Original Message----- > > From: Alim Akhtar <alim.akhtar@samsung.com> > > Sent: Monday, July 8, 2024 8:58 PM > > To: 'Sunyeal Hong' <sunyeal.hong@samsung.com>; 'Krzysztof Kozlowski' > > <krzk@kernel.org>; 'Sylwester Nawrocki' <s.nawrocki@samsung.com>; > > 'Chanwoo Choi' <cw00.choi@samsung.com>; 'Michael Turquette' > > <mturquette@baylibre.com>; 'Stephen Boyd' <sboyd@kernel.org>; 'Rob > > Herring' <robh@kernel.org>; 'Conor Dooley' <conor+dt@kernel.org> > > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux- kernel@vger.kernel.org > > Subject: RE: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for > > pll_531x > > > > Hello Sunyeal, > > > > > -----Original Message----- > > > From: Sunyeal Hong <sunyeal.hong@samsung.com> > > > Sent: Monday, July 8, 2024 4:44 AM > > > To: Krzysztof Kozlowski <krzk@kernel.org>; Sylwester Nawrocki > > > <s.nawrocki@samsung.com>; Chanwoo Choi > <cw00.choi@samsung.com>; Alim > > > Akhtar <alim.akhtar@samsung.com>; Michael Turquette > > > <mturquette@baylibre.com>; Stephen Boyd <sboyd@kernel.org>; Rob > > > Herring <robh@kernel.org>; Conor Dooley <conor+dt@kernel.org> > > > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > > linux- kernel@vger.kernel.org; Sunyeal Hong > > > <sunyeal.hong@samsung.com> > > > Subject: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for > > > pll_531x > > > > > > pll531x PLL is used in Exynos Auto v920 SoC for shared pll. > > > pll531x: Integer/fractional PLL with mid frequency FVCO (800 to 3120 > > > MHz) > > > > > > PLL531x > > > FOUT = (MDIV + F/2^32-F[31]) * FIN/(PDIV x 2^SDIV) > > > > > Any reason for not mentioning equation for integer PLL? > > > If the F value is 0, it operates as an integer PLL. Thanks for clarification, it is good to mention the same in the commit message. [snip] > > > -- > > > 2.45.2 > > >
Hello Alim, > -----Original Message----- > From: Alim Akhtar <alim.akhtar@samsung.com> > Sent: Wednesday, July 10, 2024 11:35 AM > To: 'sunyeal.hong' <sunyeal.hong@samsung.com>; 'Krzysztof Kozlowski' > <krzk@kernel.org>; 'Sylwester Nawrocki' <s.nawrocki@samsung.com>; 'Chanwoo > Choi' <cw00.choi@samsung.com>; 'Michael Turquette' > <mturquette@baylibre.com>; 'Stephen Boyd' <sboyd@kernel.org>; 'Rob > Herring' <robh@kernel.org>; 'Conor Dooley' <conor+dt@kernel.org> > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux- > kernel@vger.kernel.org > Subject: RE: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for > pll_531x > > Hello Sunyeal, > > > -----Original Message----- > > From: sunyeal.hong <sunyeal.hong@samsung.com> > > Sent: Wednesday, July 10, 2024 7:50 AM > > To: 'Alim Akhtar' <alim.akhtar@samsung.com>; 'Krzysztof Kozlowski' > > <krzk@kernel.org>; 'Sylwester Nawrocki' <s.nawrocki@samsung.com>; > > 'Chanwoo Choi' <cw00.choi@samsung.com>; 'Michael Turquette' > > <mturquette@baylibre.com>; 'Stephen Boyd' <sboyd@kernel.org>; 'Rob > > Herring' <robh@kernel.org>; 'Conor Dooley' <conor+dt@kernel.org> > > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux- kernel@vger.kernel.org > > Subject: RE: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for > > pll_531x > > > > Hello Alim, > > > > > -----Original Message----- > > > From: Alim Akhtar <alim.akhtar@samsung.com> > > > Sent: Monday, July 8, 2024 8:58 PM > > > To: 'Sunyeal Hong' <sunyeal.hong@samsung.com>; 'Krzysztof Kozlowski' > > > <krzk@kernel.org>; 'Sylwester Nawrocki' <s.nawrocki@samsung.com>; > > > 'Chanwoo Choi' <cw00.choi@samsung.com>; 'Michael Turquette' > > > <mturquette@baylibre.com>; 'Stephen Boyd' <sboyd@kernel.org>; 'Rob > > > Herring' <robh@kernel.org>; 'Conor Dooley' <conor+dt@kernel.org> > > > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > > linux- kernel@vger.kernel.org > > > Subject: RE: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for > > > pll_531x > > > > > > Hello Sunyeal, > > > > > > > -----Original Message----- > > > > From: Sunyeal Hong <sunyeal.hong@samsung.com> > > > > Sent: Monday, July 8, 2024 4:44 AM > > > > To: Krzysztof Kozlowski <krzk@kernel.org>; Sylwester Nawrocki > > > > <s.nawrocki@samsung.com>; Chanwoo Choi > > <cw00.choi@samsung.com>; Alim > > > > Akhtar <alim.akhtar@samsung.com>; Michael Turquette > > > > <mturquette@baylibre.com>; Stephen Boyd <sboyd@kernel.org>; Rob > > > > Herring <robh@kernel.org>; Conor Dooley <conor+dt@kernel.org> > > > > Cc: linux-samsung-soc@vger.kernel.org; linux-clk@vger.kernel.org; > > > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > > > linux- kernel@vger.kernel.org; Sunyeal Hong > > > > <sunyeal.hong@samsung.com> > > > > Subject: [PATCH v2 3/4] clk: samsung: clk-pll: Add support for > > > > pll_531x > > > > > > > > pll531x PLL is used in Exynos Auto v920 SoC for shared pll. > > > > pll531x: Integer/fractional PLL with mid frequency FVCO (800 to > > > > 3120 > > > > MHz) > > > > > > > > PLL531x > > > > FOUT = (MDIV + F/2^32-F[31]) * FIN/(PDIV x 2^SDIV) > > > > > > > Any reason for not mentioning equation for integer PLL? > > > > > If the F value is 0, it operates as an integer PLL. > Thanks for clarification, it is good to mention the same in the commit > message. > Okay. I will update comment for integer PLL description. > [snip] > > > > -- > > > > 2.45.2 > > > > > > Thanks, Sunyeal Hong
© 2016 - 2026 Red Hat, Inc.