* [PATCH V3 1/7] clk: imx: fracn-gppll: fix the rate table
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
@ 2023-04-03 9:52 ` Peng Fan (OSS)
2023-04-09 13:44 ` Abel Vesa
2023-04-03 9:52 ` [PATCH V3 2/7] clk: imx: fracn-gppll: disable hardware select control Peng Fan (OSS)
` (6 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:52 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan, Jacky Bai
From: Peng Fan <peng.fan@nxp.com>
The Fvco should be range 2.4GHz to 5GHz, the original table voilate the
spec, so update the table to fix it.
Fixes: c196175acdd3 ("clk: imx: clk-fracn-gppll: Add more freq config for video pll")
Fixes: 044034efbeea ("clk: imx: clk-fracn-gppll: fix mfd value")
Fixes: 1b26cb8a77a4 ("clk: imx: support fracn gppll")
Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/clk/imx/clk-fracn-gppll.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
index a2aaa14fc1ae..ec50c41e2a4c 100644
--- a/drivers/clk/imx/clk-fracn-gppll.c
+++ b/drivers/clk/imx/clk-fracn-gppll.c
@@ -60,18 +60,20 @@ struct clk_fracn_gppll {
};
/*
- * Fvco = Fref * (MFI + MFN / MFD)
- * Fout = Fvco / (rdiv * odiv)
+ * Fvco = (Fref / rdiv) * (MFI + MFN / MFD)
+ * Fout = Fvco / odiv
+ * The (Fref / rdiv) should be in range 20MHz to 40MHz
+ * The Fvco should be in range 2.5Ghz to 5Ghz
*/
static const struct imx_fracn_gppll_rate_table fracn_tbl[] = {
- PLL_FRACN_GP(650000000U, 81, 0, 1, 0, 3),
+ PLL_FRACN_GP(650000000U, 162, 50, 100, 0, 6),
PLL_FRACN_GP(594000000U, 198, 0, 1, 0, 8),
- PLL_FRACN_GP(560000000U, 70, 0, 1, 0, 3),
- PLL_FRACN_GP(498000000U, 83, 0, 1, 0, 4),
+ PLL_FRACN_GP(560000000U, 140, 0, 1, 0, 6),
+ PLL_FRACN_GP(498000000U, 166, 0, 1, 0, 8),
PLL_FRACN_GP(484000000U, 121, 0, 1, 0, 6),
PLL_FRACN_GP(445333333U, 167, 0, 1, 0, 9),
- PLL_FRACN_GP(400000000U, 50, 0, 1, 0, 3),
- PLL_FRACN_GP(393216000U, 81, 92, 100, 0, 5)
+ PLL_FRACN_GP(400000000U, 200, 0, 1, 0, 12),
+ PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10)
};
struct imx_fracn_gppll_clk imx_fracn_gppll = {
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 1/7] clk: imx: fracn-gppll: fix the rate table
2023-04-03 9:52 ` [PATCH V3 1/7] clk: imx: fracn-gppll: fix the rate table Peng Fan (OSS)
@ 2023-04-09 13:44 ` Abel Vesa
0 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:44 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, linux-imx, linux-clk,
linux-arm-kernel, linux-kernel, devicetree, Peng Fan, Jacky Bai
On 23-04-03 17:52:54, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> The Fvco should be range 2.4GHz to 5GHz, the original table voilate the
> spec, so update the table to fix it.
>
> Fixes: c196175acdd3 ("clk: imx: clk-fracn-gppll: Add more freq config for video pll")
> Fixes: 044034efbeea ("clk: imx: clk-fracn-gppll: fix mfd value")
> Fixes: 1b26cb8a77a4 ("clk: imx: support fracn gppll")
> Signed-off-by: Jacky Bai <ping.bai@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> ---
> drivers/clk/imx/clk-fracn-gppll.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
> index a2aaa14fc1ae..ec50c41e2a4c 100644
> --- a/drivers/clk/imx/clk-fracn-gppll.c
> +++ b/drivers/clk/imx/clk-fracn-gppll.c
> @@ -60,18 +60,20 @@ struct clk_fracn_gppll {
> };
>
> /*
> - * Fvco = Fref * (MFI + MFN / MFD)
> - * Fout = Fvco / (rdiv * odiv)
> + * Fvco = (Fref / rdiv) * (MFI + MFN / MFD)
> + * Fout = Fvco / odiv
> + * The (Fref / rdiv) should be in range 20MHz to 40MHz
> + * The Fvco should be in range 2.5Ghz to 5Ghz
> */
> static const struct imx_fracn_gppll_rate_table fracn_tbl[] = {
> - PLL_FRACN_GP(650000000U, 81, 0, 1, 0, 3),
> + PLL_FRACN_GP(650000000U, 162, 50, 100, 0, 6),
> PLL_FRACN_GP(594000000U, 198, 0, 1, 0, 8),
> - PLL_FRACN_GP(560000000U, 70, 0, 1, 0, 3),
> - PLL_FRACN_GP(498000000U, 83, 0, 1, 0, 4),
> + PLL_FRACN_GP(560000000U, 140, 0, 1, 0, 6),
> + PLL_FRACN_GP(498000000U, 166, 0, 1, 0, 8),
> PLL_FRACN_GP(484000000U, 121, 0, 1, 0, 6),
> PLL_FRACN_GP(445333333U, 167, 0, 1, 0, 9),
> - PLL_FRACN_GP(400000000U, 50, 0, 1, 0, 3),
> - PLL_FRACN_GP(393216000U, 81, 92, 100, 0, 5)
> + PLL_FRACN_GP(400000000U, 200, 0, 1, 0, 12),
> + PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10)
> };
>
> struct imx_fracn_gppll_clk imx_fracn_gppll = {
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH V3 2/7] clk: imx: fracn-gppll: disable hardware select control
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
2023-04-03 9:52 ` [PATCH V3 1/7] clk: imx: fracn-gppll: fix the rate table Peng Fan (OSS)
@ 2023-04-03 9:52 ` Peng Fan (OSS)
2023-04-09 13:44 ` Abel Vesa
2023-04-03 9:52 ` [PATCH V3 3/7] clk: imx: fracn-gppll: support integer pll Peng Fan (OSS)
` (5 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:52 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan
From: Peng Fan <peng.fan@nxp.com>
When programming PLL, should disable Hardware control select to make PLL
controlled by register, not hardware inputs through OSCPLL.
Fixes: 1b26cb8a77a4 ("clk: imx: support fracn gppll")
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/clk/imx/clk-fracn-gppll.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
index ec50c41e2a4c..f6674110a88e 100644
--- a/drivers/clk/imx/clk-fracn-gppll.c
+++ b/drivers/clk/imx/clk-fracn-gppll.c
@@ -15,6 +15,7 @@
#include "clk.h"
#define PLL_CTRL 0x0
+#define HW_CTRL_SEL BIT(16)
#define CLKMUX_BYPASS BIT(2)
#define CLKMUX_EN BIT(1)
#define POWERUP_MASK BIT(0)
@@ -193,6 +194,11 @@ static int clk_fracn_gppll_set_rate(struct clk_hw *hw, unsigned long drate,
rate = imx_get_pll_settings(pll, drate);
+ /* Hardware control select disable. PLL is control by register */
+ tmp = readl_relaxed(pll->base + PLL_CTRL);
+ tmp &= ~HW_CTRL_SEL;
+ writel_relaxed(tmp, pll->base + PLL_CTRL);
+
/* Disable output */
tmp = readl_relaxed(pll->base + PLL_CTRL);
tmp &= ~CLKMUX_EN;
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 2/7] clk: imx: fracn-gppll: disable hardware select control
2023-04-03 9:52 ` [PATCH V3 2/7] clk: imx: fracn-gppll: disable hardware select control Peng Fan (OSS)
@ 2023-04-09 13:44 ` Abel Vesa
0 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:44 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, linux-imx, linux-clk,
linux-arm-kernel, linux-kernel, devicetree, Peng Fan
On 23-04-03 17:52:55, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> When programming PLL, should disable Hardware control select to make PLL
> controlled by register, not hardware inputs through OSCPLL.
>
> Fixes: 1b26cb8a77a4 ("clk: imx: support fracn gppll")
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> ---
> drivers/clk/imx/clk-fracn-gppll.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
> index ec50c41e2a4c..f6674110a88e 100644
> --- a/drivers/clk/imx/clk-fracn-gppll.c
> +++ b/drivers/clk/imx/clk-fracn-gppll.c
> @@ -15,6 +15,7 @@
> #include "clk.h"
>
> #define PLL_CTRL 0x0
> +#define HW_CTRL_SEL BIT(16)
> #define CLKMUX_BYPASS BIT(2)
> #define CLKMUX_EN BIT(1)
> #define POWERUP_MASK BIT(0)
> @@ -193,6 +194,11 @@ static int clk_fracn_gppll_set_rate(struct clk_hw *hw, unsigned long drate,
>
> rate = imx_get_pll_settings(pll, drate);
>
> + /* Hardware control select disable. PLL is control by register */
> + tmp = readl_relaxed(pll->base + PLL_CTRL);
> + tmp &= ~HW_CTRL_SEL;
> + writel_relaxed(tmp, pll->base + PLL_CTRL);
> +
> /* Disable output */
> tmp = readl_relaxed(pll->base + PLL_CTRL);
> tmp &= ~CLKMUX_EN;
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH V3 3/7] clk: imx: fracn-gppll: support integer pll
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
2023-04-03 9:52 ` [PATCH V3 1/7] clk: imx: fracn-gppll: fix the rate table Peng Fan (OSS)
2023-04-03 9:52 ` [PATCH V3 2/7] clk: imx: fracn-gppll: disable hardware select control Peng Fan (OSS)
@ 2023-04-03 9:52 ` Peng Fan (OSS)
2023-04-09 13:45 ` Abel Vesa
2023-04-03 9:52 ` [PATCH V3 4/7] clk: imx: fracn-gppll: Add 300MHz freq support for imx9 Peng Fan (OSS)
` (4 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:52 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan
From: Peng Fan <peng.fan@nxp.com>
The fracn gppll could be configured in FRAC or INTEGER mode during
hardware design. The current driver only support FRAC mode, while
this patch introduces INTEGER support. When the PLL is INTEGER pll,
there is no mfn, mfd, the calculation is as below:
Fvco_clk = (Fref / DIV[RDIV] ) * DIV[MFI]
Fclko_odiv = Fvco_clk / DIV[ODIV]
In this patch, we reuse the FRAC pll logic with some condition check to
simplify the driver
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/clk/imx/clk-fracn-gppll.c | 68 +++++++++++++++++++++++++++----
drivers/clk/imx/clk.h | 7 ++++
2 files changed, 68 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
index f6674110a88e..e2633ad94640 100644
--- a/drivers/clk/imx/clk-fracn-gppll.c
+++ b/drivers/clk/imx/clk-fracn-gppll.c
@@ -53,11 +53,22 @@
.odiv = (_odiv), \
}
+#define PLL_FRACN_GP_INTEGER(_rate, _mfi, _rdiv, _odiv) \
+ { \
+ .rate = (_rate), \
+ .mfi = (_mfi), \
+ .mfn = 0, \
+ .mfd = 0, \
+ .rdiv = (_rdiv), \
+ .odiv = (_odiv), \
+ }
+
struct clk_fracn_gppll {
struct clk_hw hw;
void __iomem *base;
const struct imx_fracn_gppll_rate_table *rate_table;
int rate_count;
+ u32 flags;
};
/*
@@ -83,6 +94,24 @@ struct imx_fracn_gppll_clk imx_fracn_gppll = {
};
EXPORT_SYMBOL_GPL(imx_fracn_gppll);
+/*
+ * Fvco = (Fref / rdiv) * MFI
+ * Fout = Fvco / odiv
+ * The (Fref / rdiv) should be in range 20MHz to 40MHz
+ * The Fvco should be in range 2.5Ghz to 5Ghz
+ */
+static const struct imx_fracn_gppll_rate_table int_tbl[] = {
+ PLL_FRACN_GP_INTEGER(1700000000U, 141, 1, 2),
+ PLL_FRACN_GP_INTEGER(1400000000U, 175, 1, 3),
+ PLL_FRACN_GP_INTEGER(900000000U, 150, 1, 4),
+};
+
+struct imx_fracn_gppll_clk imx_fracn_gppll_integer = {
+ .rate_table = int_tbl,
+ .rate_count = ARRAY_SIZE(int_tbl),
+};
+EXPORT_SYMBOL_GPL(imx_fracn_gppll_integer);
+
static inline struct clk_fracn_gppll *to_clk_fracn_gppll(struct clk_hw *hw)
{
return container_of(hw, struct clk_fracn_gppll, hw);
@@ -169,9 +198,15 @@ static unsigned long clk_fracn_gppll_recalc_rate(struct clk_hw *hw, unsigned lon
break;
}
- /* Fvco = Fref * (MFI + MFN / MFD) */
- fvco = fvco * mfi * mfd + fvco * mfn;
- do_div(fvco, mfd * rdiv * odiv);
+ if (pll->flags & CLK_FRACN_GPPLL_INTEGER) {
+ /* Fvco = (Fref / rdiv) * MFI */
+ fvco = fvco * mfi;
+ do_div(fvco, rdiv * odiv);
+ } else {
+ /* Fvco = (Fref / rdiv) * (MFI + MFN / MFD) */
+ fvco = fvco * mfi * mfd + fvco * mfn;
+ do_div(fvco, mfd * rdiv * odiv);
+ }
return (unsigned long)fvco;
}
@@ -215,8 +250,10 @@ static int clk_fracn_gppll_set_rate(struct clk_hw *hw, unsigned long drate,
pll_div = FIELD_PREP(PLL_RDIV_MASK, rate->rdiv) | rate->odiv |
FIELD_PREP(PLL_MFI_MASK, rate->mfi);
writel_relaxed(pll_div, pll->base + PLL_DIV);
- writel_relaxed(rate->mfd, pll->base + PLL_DENOMINATOR);
- writel_relaxed(FIELD_PREP(PLL_MFN_MASK, rate->mfn), pll->base + PLL_NUMERATOR);
+ if (pll->flags & CLK_FRACN_GPPLL_FRACN) {
+ writel_relaxed(rate->mfd, pll->base + PLL_DENOMINATOR);
+ writel_relaxed(FIELD_PREP(PLL_MFN_MASK, rate->mfn), pll->base + PLL_NUMERATOR);
+ }
/* Wait for 5us according to fracn mode pll doc */
udelay(5);
@@ -300,8 +337,10 @@ static const struct clk_ops clk_fracn_gppll_ops = {
.set_rate = clk_fracn_gppll_set_rate,
};
-struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, void __iomem *base,
- const struct imx_fracn_gppll_clk *pll_clk)
+static struct clk_hw *_imx_clk_fracn_gppll(const char *name, const char *parent_name,
+ void __iomem *base,
+ const struct imx_fracn_gppll_clk *pll_clk,
+ u32 pll_flags)
{
struct clk_fracn_gppll *pll;
struct clk_hw *hw;
@@ -322,6 +361,7 @@ struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, vo
pll->hw.init = &init;
pll->rate_table = pll_clk->rate_table;
pll->rate_count = pll_clk->rate_count;
+ pll->flags = pll_flags;
hw = &pll->hw;
@@ -334,4 +374,18 @@ struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, vo
return hw;
}
+
+struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, void __iomem *base,
+ const struct imx_fracn_gppll_clk *pll_clk)
+{
+ return _imx_clk_fracn_gppll(name, parent_name, base, pll_clk, CLK_FRACN_GPPLL_FRACN);
+}
EXPORT_SYMBOL_GPL(imx_clk_fracn_gppll);
+
+struct clk_hw *imx_clk_fracn_gppll_integer(const char *name, const char *parent_name,
+ void __iomem *base,
+ const struct imx_fracn_gppll_clk *pll_clk)
+{
+ return _imx_clk_fracn_gppll(name, parent_name, base, pll_clk, CLK_FRACN_GPPLL_INTEGER);
+}
+EXPORT_SYMBOL_GPL(imx_clk_fracn_gppll_integer);
diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h
index 055bc9197fb4..cb4e4c4b8278 100644
--- a/drivers/clk/imx/clk.h
+++ b/drivers/clk/imx/clk.h
@@ -73,6 +73,9 @@ extern struct imx_pll14xx_clk imx_1416x_pll;
extern struct imx_pll14xx_clk imx_1443x_pll;
extern struct imx_pll14xx_clk imx_1443x_dram_pll;
+#define CLK_FRACN_GPPLL_INTEGER BIT(0)
+#define CLK_FRACN_GPPLL_FRACN BIT(1)
+
/* NOTE: Rate table should be kept sorted in descending order. */
struct imx_fracn_gppll_rate_table {
unsigned int rate;
@@ -91,8 +94,12 @@ struct imx_fracn_gppll_clk {
struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, void __iomem *base,
const struct imx_fracn_gppll_clk *pll_clk);
+struct clk_hw *imx_clk_fracn_gppll_integer(const char *name, const char *parent_name,
+ void __iomem *base,
+ const struct imx_fracn_gppll_clk *pll_clk);
extern struct imx_fracn_gppll_clk imx_fracn_gppll;
+extern struct imx_fracn_gppll_clk imx_fracn_gppll_integer;
#define imx_clk_cpu(name, parent_name, div, mux, pll, step) \
to_clk(imx_clk_hw_cpu(name, parent_name, div, mux, pll, step))
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 3/7] clk: imx: fracn-gppll: support integer pll
2023-04-03 9:52 ` [PATCH V3 3/7] clk: imx: fracn-gppll: support integer pll Peng Fan (OSS)
@ 2023-04-09 13:45 ` Abel Vesa
0 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:45 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, linux-imx, linux-clk,
linux-arm-kernel, linux-kernel, devicetree, Peng Fan
On 23-04-03 17:52:56, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> The fracn gppll could be configured in FRAC or INTEGER mode during
> hardware design. The current driver only support FRAC mode, while
> this patch introduces INTEGER support. When the PLL is INTEGER pll,
> there is no mfn, mfd, the calculation is as below:
> Fvco_clk = (Fref / DIV[RDIV] ) * DIV[MFI]
> Fclko_odiv = Fvco_clk / DIV[ODIV]
>
> In this patch, we reuse the FRAC pll logic with some condition check to
> simplify the driver
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> drivers/clk/imx/clk-fracn-gppll.c | 68 +++++++++++++++++++++++++++----
> drivers/clk/imx/clk.h | 7 ++++
> 2 files changed, 68 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
> index f6674110a88e..e2633ad94640 100644
> --- a/drivers/clk/imx/clk-fracn-gppll.c
> +++ b/drivers/clk/imx/clk-fracn-gppll.c
> @@ -53,11 +53,22 @@
> .odiv = (_odiv), \
> }
>
> +#define PLL_FRACN_GP_INTEGER(_rate, _mfi, _rdiv, _odiv) \
> + { \
> + .rate = (_rate), \
> + .mfi = (_mfi), \
> + .mfn = 0, \
> + .mfd = 0, \
> + .rdiv = (_rdiv), \
> + .odiv = (_odiv), \
> + }
> +
> struct clk_fracn_gppll {
> struct clk_hw hw;
> void __iomem *base;
> const struct imx_fracn_gppll_rate_table *rate_table;
> int rate_count;
> + u32 flags;
> };
>
> /*
> @@ -83,6 +94,24 @@ struct imx_fracn_gppll_clk imx_fracn_gppll = {
> };
> EXPORT_SYMBOL_GPL(imx_fracn_gppll);
>
> +/*
> + * Fvco = (Fref / rdiv) * MFI
> + * Fout = Fvco / odiv
> + * The (Fref / rdiv) should be in range 20MHz to 40MHz
> + * The Fvco should be in range 2.5Ghz to 5Ghz
> + */
> +static const struct imx_fracn_gppll_rate_table int_tbl[] = {
> + PLL_FRACN_GP_INTEGER(1700000000U, 141, 1, 2),
> + PLL_FRACN_GP_INTEGER(1400000000U, 175, 1, 3),
> + PLL_FRACN_GP_INTEGER(900000000U, 150, 1, 4),
> +};
> +
> +struct imx_fracn_gppll_clk imx_fracn_gppll_integer = {
> + .rate_table = int_tbl,
> + .rate_count = ARRAY_SIZE(int_tbl),
> +};
> +EXPORT_SYMBOL_GPL(imx_fracn_gppll_integer);
> +
> static inline struct clk_fracn_gppll *to_clk_fracn_gppll(struct clk_hw *hw)
> {
> return container_of(hw, struct clk_fracn_gppll, hw);
> @@ -169,9 +198,15 @@ static unsigned long clk_fracn_gppll_recalc_rate(struct clk_hw *hw, unsigned lon
> break;
> }
>
> - /* Fvco = Fref * (MFI + MFN / MFD) */
> - fvco = fvco * mfi * mfd + fvco * mfn;
> - do_div(fvco, mfd * rdiv * odiv);
> + if (pll->flags & CLK_FRACN_GPPLL_INTEGER) {
> + /* Fvco = (Fref / rdiv) * MFI */
> + fvco = fvco * mfi;
> + do_div(fvco, rdiv * odiv);
> + } else {
> + /* Fvco = (Fref / rdiv) * (MFI + MFN / MFD) */
> + fvco = fvco * mfi * mfd + fvco * mfn;
> + do_div(fvco, mfd * rdiv * odiv);
> + }
>
> return (unsigned long)fvco;
> }
> @@ -215,8 +250,10 @@ static int clk_fracn_gppll_set_rate(struct clk_hw *hw, unsigned long drate,
> pll_div = FIELD_PREP(PLL_RDIV_MASK, rate->rdiv) | rate->odiv |
> FIELD_PREP(PLL_MFI_MASK, rate->mfi);
> writel_relaxed(pll_div, pll->base + PLL_DIV);
> - writel_relaxed(rate->mfd, pll->base + PLL_DENOMINATOR);
> - writel_relaxed(FIELD_PREP(PLL_MFN_MASK, rate->mfn), pll->base + PLL_NUMERATOR);
> + if (pll->flags & CLK_FRACN_GPPLL_FRACN) {
> + writel_relaxed(rate->mfd, pll->base + PLL_DENOMINATOR);
> + writel_relaxed(FIELD_PREP(PLL_MFN_MASK, rate->mfn), pll->base + PLL_NUMERATOR);
> + }
>
> /* Wait for 5us according to fracn mode pll doc */
> udelay(5);
> @@ -300,8 +337,10 @@ static const struct clk_ops clk_fracn_gppll_ops = {
> .set_rate = clk_fracn_gppll_set_rate,
> };
>
> -struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, void __iomem *base,
> - const struct imx_fracn_gppll_clk *pll_clk)
> +static struct clk_hw *_imx_clk_fracn_gppll(const char *name, const char *parent_name,
> + void __iomem *base,
> + const struct imx_fracn_gppll_clk *pll_clk,
> + u32 pll_flags)
> {
> struct clk_fracn_gppll *pll;
> struct clk_hw *hw;
> @@ -322,6 +361,7 @@ struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, vo
> pll->hw.init = &init;
> pll->rate_table = pll_clk->rate_table;
> pll->rate_count = pll_clk->rate_count;
> + pll->flags = pll_flags;
>
> hw = &pll->hw;
>
> @@ -334,4 +374,18 @@ struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, vo
>
> return hw;
> }
> +
> +struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, void __iomem *base,
> + const struct imx_fracn_gppll_clk *pll_clk)
> +{
> + return _imx_clk_fracn_gppll(name, parent_name, base, pll_clk, CLK_FRACN_GPPLL_FRACN);
> +}
> EXPORT_SYMBOL_GPL(imx_clk_fracn_gppll);
> +
> +struct clk_hw *imx_clk_fracn_gppll_integer(const char *name, const char *parent_name,
> + void __iomem *base,
> + const struct imx_fracn_gppll_clk *pll_clk)
> +{
> + return _imx_clk_fracn_gppll(name, parent_name, base, pll_clk, CLK_FRACN_GPPLL_INTEGER);
> +}
> +EXPORT_SYMBOL_GPL(imx_clk_fracn_gppll_integer);
> diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h
> index 055bc9197fb4..cb4e4c4b8278 100644
> --- a/drivers/clk/imx/clk.h
> +++ b/drivers/clk/imx/clk.h
> @@ -73,6 +73,9 @@ extern struct imx_pll14xx_clk imx_1416x_pll;
> extern struct imx_pll14xx_clk imx_1443x_pll;
> extern struct imx_pll14xx_clk imx_1443x_dram_pll;
>
> +#define CLK_FRACN_GPPLL_INTEGER BIT(0)
> +#define CLK_FRACN_GPPLL_FRACN BIT(1)
> +
> /* NOTE: Rate table should be kept sorted in descending order. */
> struct imx_fracn_gppll_rate_table {
> unsigned int rate;
> @@ -91,8 +94,12 @@ struct imx_fracn_gppll_clk {
>
> struct clk_hw *imx_clk_fracn_gppll(const char *name, const char *parent_name, void __iomem *base,
> const struct imx_fracn_gppll_clk *pll_clk);
> +struct clk_hw *imx_clk_fracn_gppll_integer(const char *name, const char *parent_name,
> + void __iomem *base,
> + const struct imx_fracn_gppll_clk *pll_clk);
>
> extern struct imx_fracn_gppll_clk imx_fracn_gppll;
> +extern struct imx_fracn_gppll_clk imx_fracn_gppll_integer;
>
> #define imx_clk_cpu(name, parent_name, div, mux, pll, step) \
> to_clk(imx_clk_hw_cpu(name, parent_name, div, mux, pll, step))
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH V3 4/7] clk: imx: fracn-gppll: Add 300MHz freq support for imx9
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
` (2 preceding siblings ...)
2023-04-03 9:52 ` [PATCH V3 3/7] clk: imx: fracn-gppll: support integer pll Peng Fan (OSS)
@ 2023-04-03 9:52 ` Peng Fan (OSS)
2023-04-09 13:46 ` Abel Vesa
2023-04-03 9:52 ` [PATCH V3 5/7] clk: imx: imx93: add mcore_booted module paratemter Peng Fan (OSS)
` (3 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:52 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Jacky Bai, Ye Li, Peng Fan
From: Jacky Bai <ping.bai@nxp.com>
Add 300MHz frequency config support on i.MX93 PLL.
Reviewed-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/clk/imx/clk-fracn-gppll.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
index e2633ad94640..c54f9999da04 100644
--- a/drivers/clk/imx/clk-fracn-gppll.c
+++ b/drivers/clk/imx/clk-fracn-gppll.c
@@ -85,7 +85,8 @@ static const struct imx_fracn_gppll_rate_table fracn_tbl[] = {
PLL_FRACN_GP(484000000U, 121, 0, 1, 0, 6),
PLL_FRACN_GP(445333333U, 167, 0, 1, 0, 9),
PLL_FRACN_GP(400000000U, 200, 0, 1, 0, 12),
- PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10)
+ PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10),
+ PLL_FRACN_GP(300000000U, 150, 0, 1, 0, 12)
};
struct imx_fracn_gppll_clk imx_fracn_gppll = {
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 4/7] clk: imx: fracn-gppll: Add 300MHz freq support for imx9
2023-04-03 9:52 ` [PATCH V3 4/7] clk: imx: fracn-gppll: Add 300MHz freq support for imx9 Peng Fan (OSS)
@ 2023-04-09 13:46 ` Abel Vesa
0 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:46 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, linux-imx, linux-clk,
linux-arm-kernel, linux-kernel, devicetree, Jacky Bai, Ye Li,
Peng Fan
On 23-04-03 17:52:57, Peng Fan (OSS) wrote:
> From: Jacky Bai <ping.bai@nxp.com>
>
> Add 300MHz frequency config support on i.MX93 PLL.
>
> Reviewed-by: Ye Li <ye.li@nxp.com>
> Signed-off-by: Jacky Bai <ping.bai@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> ---
> drivers/clk/imx/clk-fracn-gppll.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
> index e2633ad94640..c54f9999da04 100644
> --- a/drivers/clk/imx/clk-fracn-gppll.c
> +++ b/drivers/clk/imx/clk-fracn-gppll.c
> @@ -85,7 +85,8 @@ static const struct imx_fracn_gppll_rate_table fracn_tbl[] = {
> PLL_FRACN_GP(484000000U, 121, 0, 1, 0, 6),
> PLL_FRACN_GP(445333333U, 167, 0, 1, 0, 9),
> PLL_FRACN_GP(400000000U, 200, 0, 1, 0, 12),
> - PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10)
> + PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10),
> + PLL_FRACN_GP(300000000U, 150, 0, 1, 0, 12)
> };
>
> struct imx_fracn_gppll_clk imx_fracn_gppll = {
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH V3 5/7] clk: imx: imx93: add mcore_booted module paratemter
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
` (3 preceding siblings ...)
2023-04-03 9:52 ` [PATCH V3 4/7] clk: imx: fracn-gppll: Add 300MHz freq support for imx9 Peng Fan (OSS)
@ 2023-04-03 9:52 ` Peng Fan (OSS)
2023-04-09 13:46 ` Abel Vesa
2023-04-03 9:52 ` [PATCH V3 6/7] dt-bindings: clock: imx93: add NIC, A55 and ARM PLL CLK Peng Fan (OSS)
` (2 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:52 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan, Ye Li
From: Peng Fan <peng.fan@nxp.com>
Add mcore_booted boot parameter which could simplify AMP clock
management. To i.MX93, there is CCM(clock control Module) to generate
clock root clock, anatop(analog PLL module) to generate PLL, and LPCG
(clock gating) to gate clocks to peripherals. As below:
anatop->ccm->lpcg->peripheral
Linux handles the clock management and the auxiliary core is under
control of Linux. Although there is per hardware domain control for LPCG
and CCM, auxiliary core normally only use LPCG hardware domain control
to avoid linux gate off the clk to peripherals and leave CCM ana anatop
to Linux.
Reviewed-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/clk/imx/clk-composite-93.c | 8 +++++++-
drivers/clk/imx/clk-imx93.c | 2 ++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/imx/clk-composite-93.c b/drivers/clk/imx/clk-composite-93.c
index 74a66b0203e4..81164bdcd6cc 100644
--- a/drivers/clk/imx/clk-composite-93.c
+++ b/drivers/clk/imx/clk-composite-93.c
@@ -222,7 +222,7 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
hw = clk_hw_register_composite(NULL, name, parent_names, num_parents,
mux_hw, &clk_mux_ro_ops, div_hw,
&clk_divider_ro_ops, NULL, NULL, flags);
- } else {
+ } else if (!mcore_booted) {
gate = kzalloc(sizeof(*gate), GFP_KERNEL);
if (!gate)
goto fail;
@@ -238,6 +238,12 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
&imx93_clk_composite_divider_ops, gate_hw,
&imx93_clk_composite_gate_ops,
flags | CLK_SET_RATE_NO_REPARENT);
+ } else {
+ hw = clk_hw_register_composite(NULL, name, parent_names, num_parents,
+ mux_hw, &imx93_clk_composite_mux_ops, div_hw,
+ &imx93_clk_composite_divider_ops, NULL,
+ &imx93_clk_composite_gate_ops,
+ flags | CLK_SET_RATE_NO_REPARENT);
}
if (IS_ERR(hw))
diff --git a/drivers/clk/imx/clk-imx93.c b/drivers/clk/imx/clk-imx93.c
index 8d0974db6bfd..de1ed1d8ba54 100644
--- a/drivers/clk/imx/clk-imx93.c
+++ b/drivers/clk/imx/clk-imx93.c
@@ -352,6 +352,8 @@ static struct platform_driver imx93_clk_driver = {
},
};
module_platform_driver(imx93_clk_driver);
+module_param(mcore_booted, bool, 0444);
+MODULE_PARM_DESC(mcore_booted, "See Cortex-M core is booted or not");
MODULE_DESCRIPTION("NXP i.MX93 clock driver");
MODULE_LICENSE("GPL v2");
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 5/7] clk: imx: imx93: add mcore_booted module paratemter
2023-04-03 9:52 ` [PATCH V3 5/7] clk: imx: imx93: add mcore_booted module paratemter Peng Fan (OSS)
@ 2023-04-09 13:46 ` Abel Vesa
0 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:46 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, linux-imx, linux-clk,
linux-arm-kernel, linux-kernel, devicetree, Peng Fan, Ye Li
On 23-04-03 17:52:58, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add mcore_booted boot parameter which could simplify AMP clock
> management. To i.MX93, there is CCM(clock control Module) to generate
> clock root clock, anatop(analog PLL module) to generate PLL, and LPCG
> (clock gating) to gate clocks to peripherals. As below:
> anatop->ccm->lpcg->peripheral
>
> Linux handles the clock management and the auxiliary core is under
> control of Linux. Although there is per hardware domain control for LPCG
> and CCM, auxiliary core normally only use LPCG hardware domain control
> to avoid linux gate off the clk to peripherals and leave CCM ana anatop
> to Linux.
>
> Reviewed-by: Ye Li <ye.li@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> ---
> drivers/clk/imx/clk-composite-93.c | 8 +++++++-
> drivers/clk/imx/clk-imx93.c | 2 ++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clk/imx/clk-composite-93.c b/drivers/clk/imx/clk-composite-93.c
> index 74a66b0203e4..81164bdcd6cc 100644
> --- a/drivers/clk/imx/clk-composite-93.c
> +++ b/drivers/clk/imx/clk-composite-93.c
> @@ -222,7 +222,7 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
> hw = clk_hw_register_composite(NULL, name, parent_names, num_parents,
> mux_hw, &clk_mux_ro_ops, div_hw,
> &clk_divider_ro_ops, NULL, NULL, flags);
> - } else {
> + } else if (!mcore_booted) {
> gate = kzalloc(sizeof(*gate), GFP_KERNEL);
> if (!gate)
> goto fail;
> @@ -238,6 +238,12 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
> &imx93_clk_composite_divider_ops, gate_hw,
> &imx93_clk_composite_gate_ops,
> flags | CLK_SET_RATE_NO_REPARENT);
> + } else {
> + hw = clk_hw_register_composite(NULL, name, parent_names, num_parents,
> + mux_hw, &imx93_clk_composite_mux_ops, div_hw,
> + &imx93_clk_composite_divider_ops, NULL,
> + &imx93_clk_composite_gate_ops,
> + flags | CLK_SET_RATE_NO_REPARENT);
> }
>
> if (IS_ERR(hw))
> diff --git a/drivers/clk/imx/clk-imx93.c b/drivers/clk/imx/clk-imx93.c
> index 8d0974db6bfd..de1ed1d8ba54 100644
> --- a/drivers/clk/imx/clk-imx93.c
> +++ b/drivers/clk/imx/clk-imx93.c
> @@ -352,6 +352,8 @@ static struct platform_driver imx93_clk_driver = {
> },
> };
> module_platform_driver(imx93_clk_driver);
> +module_param(mcore_booted, bool, 0444);
> +MODULE_PARM_DESC(mcore_booted, "See Cortex-M core is booted or not");
>
> MODULE_DESCRIPTION("NXP i.MX93 clock driver");
> MODULE_LICENSE("GPL v2");
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH V3 6/7] dt-bindings: clock: imx93: add NIC, A55 and ARM PLL CLK
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
` (4 preceding siblings ...)
2023-04-03 9:52 ` [PATCH V3 5/7] clk: imx: imx93: add mcore_booted module paratemter Peng Fan (OSS)
@ 2023-04-03 9:52 ` Peng Fan (OSS)
2023-04-03 10:32 ` Krzysztof Kozlowski
2023-04-03 9:53 ` [PATCH V3 7/7] clk: imx: imx93: Add nic and A55 clk Peng Fan (OSS)
2023-04-09 13:53 ` [PATCH V3 0/7] clk: imx: imx93: fix and update Abel Vesa
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:52 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX93 NIC, A55 and ARM PLL CLK.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
include/dt-bindings/clock/imx93-clock.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/include/dt-bindings/clock/imx93-clock.h b/include/dt-bindings/clock/imx93-clock.h
index 8e02859d8ce2..35a1f62053a5 100644
--- a/include/dt-bindings/clock/imx93-clock.h
+++ b/include/dt-bindings/clock/imx93-clock.h
@@ -199,6 +199,10 @@
#define IMX93_CLK_MU1_B_GATE 194
#define IMX93_CLK_MU2_A_GATE 195
#define IMX93_CLK_MU2_B_GATE 196
-#define IMX93_CLK_END 197
+#define IMX93_CLK_NIC_AXI 197
+#define IMX93_CLK_ARM_PLL 198
+#define IMX93_CLK_A55_SEL 199
+#define IMX93_CLK_A55_CORE 200
+#define IMX93_CLK_END 201
#endif
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 6/7] dt-bindings: clock: imx93: add NIC, A55 and ARM PLL CLK
2023-04-03 9:52 ` [PATCH V3 6/7] dt-bindings: clock: imx93: add NIC, A55 and ARM PLL CLK Peng Fan (OSS)
@ 2023-04-03 10:32 ` Krzysztof Kozlowski
0 siblings, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2023-04-03 10:32 UTC (permalink / raw)
To: Peng Fan (OSS), abelvesa, mturquette, sboyd, shawnguo, s.hauer,
kernel, festevam, robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan
On 03/04/2023 11:52, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add i.MX93 NIC, A55 and ARM PLL CLK.
>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH V3 7/7] clk: imx: imx93: Add nic and A55 clk
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
` (5 preceding siblings ...)
2023-04-03 9:52 ` [PATCH V3 6/7] dt-bindings: clock: imx93: add NIC, A55 and ARM PLL CLK Peng Fan (OSS)
@ 2023-04-03 9:53 ` Peng Fan (OSS)
2023-04-09 13:47 ` Abel Vesa
2023-04-09 13:53 ` [PATCH V3 0/7] clk: imx: imx93: fix and update Abel Vesa
7 siblings, 1 reply; 16+ messages in thread
From: Peng Fan (OSS) @ 2023-04-03 9:53 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan
From: Peng Fan <peng.fan@nxp.com>
The A55 clock logic as below:
A55_PLL ----------------->\
A55_SEL-->A55_CORE
A55_CCM_ROOT--->A55_GATE->/
Add A55 CPU clk to support freq change.
Add NIC CLK to reflect the clk status
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/clk/imx/clk-imx93.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/imx/clk-imx93.c b/drivers/clk/imx/clk-imx93.c
index de1ed1d8ba54..07b4a043e449 100644
--- a/drivers/clk/imx/clk-imx93.c
+++ b/drivers/clk/imx/clk-imx93.c
@@ -33,6 +33,7 @@ static u32 share_count_sai2;
static u32 share_count_sai3;
static u32 share_count_mub;
+static const char * const a55_core_sels[] = {"a55_alt", "arm_pll"};
static const char *parent_names[MAX_SEL][4] = {
{"osc_24m", "sys_pll_pfd0_div2", "sys_pll_pfd1_div2", "video_pll"},
{"osc_24m", "sys_pll_pfd0_div2", "sys_pll_pfd1_div2", "sys_pll_pfd2_div2"},
@@ -55,7 +56,7 @@ static const struct imx93_clk_root {
/* a55/m33/bus critical clk for system run */
{ IMX93_CLK_A55_PERIPH, "a55_periph_root", 0x0000, FAST_SEL, CLK_IS_CRITICAL },
{ IMX93_CLK_A55_MTR_BUS, "a55_mtr_bus_root", 0x0080, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
- { IMX93_CLK_A55, "a55_root", 0x0100, FAST_SEL, CLK_IS_CRITICAL },
+ { IMX93_CLK_A55, "a55_alt_root", 0x0100, FAST_SEL, CLK_IS_CRITICAL },
{ IMX93_CLK_M33, "m33_root", 0x0180, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
{ IMX93_CLK_BUS_WAKEUP, "bus_wakeup_root", 0x0280, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
{ IMX93_CLK_BUS_AON, "bus_aon_root", 0x0300, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
@@ -117,6 +118,7 @@ static const struct imx93_clk_root {
{ IMX93_CLK_HSIO_USB_TEST_60M, "hsio_usb_test_60m_root", 0x1f00, LOW_SPEED_IO_SEL, },
{ IMX93_CLK_HSIO_ACSCAN_80M, "hsio_acscan_80m_root", 0x1f80, LOW_SPEED_IO_SEL, },
{ IMX93_CLK_HSIO_ACSCAN_480M, "hsio_acscan_480m_root", 0x2000, MISC_SEL, },
+ { IMX93_CLK_NIC_AXI, "nic_axi_root", 0x2080, FAST_SEL, CLK_IS_CRITICAL, },
{ IMX93_CLK_ML_APB, "ml_apb_root", 0x2180, LOW_SPEED_IO_SEL, },
{ IMX93_CLK_ML, "ml_root", 0x2200, FAST_SEL, },
{ IMX93_CLK_MEDIA_AXI, "media_axi_root", 0x2280, FAST_SEL, },
@@ -153,7 +155,7 @@ static const struct imx93_clk_ccgr {
unsigned long flags;
u32 *shared_count;
} ccgr_array[] = {
- { IMX93_CLK_A55_GATE, "a55", "a55_root", 0x8000, },
+ { IMX93_CLK_A55_GATE, "a55_alt", "a55_alt_root", 0x8000, },
/* M33 critical clk for system run */
{ IMX93_CLK_CM33_GATE, "cm33", "m33_root", 0x8040, CLK_IS_CRITICAL },
{ IMX93_CLK_ADC1_GATE, "adc1", "adc_root", 0x82c0, },
@@ -291,6 +293,9 @@ static int imx93_clocks_probe(struct platform_device *pdev)
if (WARN_ON(!anatop_base))
return -ENOMEM;
+ clks[IMX93_CLK_ARM_PLL] = imx_clk_fracn_gppll_integer("arm_pll", "osc_24m",
+ anatop_base + 0x1000,
+ &imx_fracn_gppll_integer);
clks[IMX93_CLK_AUDIO_PLL] = imx_clk_fracn_gppll("audio_pll", "osc_24m", anatop_base + 0x1200,
&imx_fracn_gppll);
clks[IMX93_CLK_VIDEO_PLL] = imx_clk_fracn_gppll("video_pll", "osc_24m", anatop_base + 0x1400,
@@ -318,6 +323,14 @@ static int imx93_clocks_probe(struct platform_device *pdev)
ccgr->shared_count);
}
+ clks[IMX93_CLK_A55_SEL] = imx_clk_hw_mux2("a55_sel", base + 0x4820, 0, 1, a55_core_sels,
+ ARRAY_SIZE(a55_core_sels));
+ clks[IMX93_CLK_A55_CORE] = imx_clk_hw_cpu("a55_core", "a55_sel",
+ clks[IMX93_CLK_A55_SEL]->clk,
+ clks[IMX93_CLK_A55_SEL]->clk,
+ clks[IMX93_CLK_ARM_PLL]->clk,
+ clks[IMX93_CLK_A55_GATE]->clk);
+
imx_check_clk_hws(clks, IMX93_CLK_END);
ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_hw_data);
--
2.37.1
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH V3 7/7] clk: imx: imx93: Add nic and A55 clk
2023-04-03 9:53 ` [PATCH V3 7/7] clk: imx: imx93: Add nic and A55 clk Peng Fan (OSS)
@ 2023-04-09 13:47 ` Abel Vesa
0 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:47 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, linux-imx, linux-clk,
linux-arm-kernel, linux-kernel, devicetree, Peng Fan
On 23-04-03 17:53:00, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> The A55 clock logic as below:
> A55_PLL ----------------->\
> A55_SEL-->A55_CORE
> A55_CCM_ROOT--->A55_GATE->/
>
> Add A55 CPU clk to support freq change.
> Add NIC CLK to reflect the clk status
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> ---
> drivers/clk/imx/clk-imx93.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clk/imx/clk-imx93.c b/drivers/clk/imx/clk-imx93.c
> index de1ed1d8ba54..07b4a043e449 100644
> --- a/drivers/clk/imx/clk-imx93.c
> +++ b/drivers/clk/imx/clk-imx93.c
> @@ -33,6 +33,7 @@ static u32 share_count_sai2;
> static u32 share_count_sai3;
> static u32 share_count_mub;
>
> +static const char * const a55_core_sels[] = {"a55_alt", "arm_pll"};
> static const char *parent_names[MAX_SEL][4] = {
> {"osc_24m", "sys_pll_pfd0_div2", "sys_pll_pfd1_div2", "video_pll"},
> {"osc_24m", "sys_pll_pfd0_div2", "sys_pll_pfd1_div2", "sys_pll_pfd2_div2"},
> @@ -55,7 +56,7 @@ static const struct imx93_clk_root {
> /* a55/m33/bus critical clk for system run */
> { IMX93_CLK_A55_PERIPH, "a55_periph_root", 0x0000, FAST_SEL, CLK_IS_CRITICAL },
> { IMX93_CLK_A55_MTR_BUS, "a55_mtr_bus_root", 0x0080, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
> - { IMX93_CLK_A55, "a55_root", 0x0100, FAST_SEL, CLK_IS_CRITICAL },
> + { IMX93_CLK_A55, "a55_alt_root", 0x0100, FAST_SEL, CLK_IS_CRITICAL },
> { IMX93_CLK_M33, "m33_root", 0x0180, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
> { IMX93_CLK_BUS_WAKEUP, "bus_wakeup_root", 0x0280, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
> { IMX93_CLK_BUS_AON, "bus_aon_root", 0x0300, LOW_SPEED_IO_SEL, CLK_IS_CRITICAL },
> @@ -117,6 +118,7 @@ static const struct imx93_clk_root {
> { IMX93_CLK_HSIO_USB_TEST_60M, "hsio_usb_test_60m_root", 0x1f00, LOW_SPEED_IO_SEL, },
> { IMX93_CLK_HSIO_ACSCAN_80M, "hsio_acscan_80m_root", 0x1f80, LOW_SPEED_IO_SEL, },
> { IMX93_CLK_HSIO_ACSCAN_480M, "hsio_acscan_480m_root", 0x2000, MISC_SEL, },
> + { IMX93_CLK_NIC_AXI, "nic_axi_root", 0x2080, FAST_SEL, CLK_IS_CRITICAL, },
> { IMX93_CLK_ML_APB, "ml_apb_root", 0x2180, LOW_SPEED_IO_SEL, },
> { IMX93_CLK_ML, "ml_root", 0x2200, FAST_SEL, },
> { IMX93_CLK_MEDIA_AXI, "media_axi_root", 0x2280, FAST_SEL, },
> @@ -153,7 +155,7 @@ static const struct imx93_clk_ccgr {
> unsigned long flags;
> u32 *shared_count;
> } ccgr_array[] = {
> - { IMX93_CLK_A55_GATE, "a55", "a55_root", 0x8000, },
> + { IMX93_CLK_A55_GATE, "a55_alt", "a55_alt_root", 0x8000, },
> /* M33 critical clk for system run */
> { IMX93_CLK_CM33_GATE, "cm33", "m33_root", 0x8040, CLK_IS_CRITICAL },
> { IMX93_CLK_ADC1_GATE, "adc1", "adc_root", 0x82c0, },
> @@ -291,6 +293,9 @@ static int imx93_clocks_probe(struct platform_device *pdev)
> if (WARN_ON(!anatop_base))
> return -ENOMEM;
>
> + clks[IMX93_CLK_ARM_PLL] = imx_clk_fracn_gppll_integer("arm_pll", "osc_24m",
> + anatop_base + 0x1000,
> + &imx_fracn_gppll_integer);
> clks[IMX93_CLK_AUDIO_PLL] = imx_clk_fracn_gppll("audio_pll", "osc_24m", anatop_base + 0x1200,
> &imx_fracn_gppll);
> clks[IMX93_CLK_VIDEO_PLL] = imx_clk_fracn_gppll("video_pll", "osc_24m", anatop_base + 0x1400,
> @@ -318,6 +323,14 @@ static int imx93_clocks_probe(struct platform_device *pdev)
> ccgr->shared_count);
> }
>
> + clks[IMX93_CLK_A55_SEL] = imx_clk_hw_mux2("a55_sel", base + 0x4820, 0, 1, a55_core_sels,
> + ARRAY_SIZE(a55_core_sels));
> + clks[IMX93_CLK_A55_CORE] = imx_clk_hw_cpu("a55_core", "a55_sel",
> + clks[IMX93_CLK_A55_SEL]->clk,
> + clks[IMX93_CLK_A55_SEL]->clk,
> + clks[IMX93_CLK_ARM_PLL]->clk,
> + clks[IMX93_CLK_A55_GATE]->clk);
> +
> imx_check_clk_hws(clks, IMX93_CLK_END);
>
> ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_hw_data);
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH V3 0/7] clk: imx: imx93: fix and update
2023-04-03 9:52 [PATCH V3 0/7] clk: imx: imx93: fix and update Peng Fan (OSS)
` (6 preceding siblings ...)
2023-04-03 9:53 ` [PATCH V3 7/7] clk: imx: imx93: Add nic and A55 clk Peng Fan (OSS)
@ 2023-04-09 13:53 ` Abel Vesa
7 siblings, 0 replies; 16+ messages in thread
From: Abel Vesa @ 2023-04-09 13:53 UTC (permalink / raw)
To: abelvesa, mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
robh+dt, krzysztof.kozlowski+dt, Peng Fan (OSS)
Cc: linux-imx, linux-clk, linux-arm-kernel, linux-kernel, devicetree,
Peng Fan
On Mon, 03 Apr 2023 17:52:53 +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> V3:
> Update dt-bindings patch subject to match subsystem
>
> V2:
> Separate the dt-binding clock header into patch 6
> Address kernel test robot build warning in patch 3
> Order the patches
>
> [...]
Applied, thanks!
[1/7] clk: imx: fracn-gppll: fix the rate table
commit: cf8dccfedce848f67eaa42e8839305d028319161
[2/7] clk: imx: fracn-gppll: disable hardware select control
commit: 4435467b15b069e5a6f50ca9a9260e86b74dbc13
[3/7] clk: imx: fracn-gppll: support integer pll
commit: 56b8d0bf3ea8b0db8543e04a6b97348a543405ab
[4/7] clk: imx: fracn-gppll: Add 300MHz freq support for imx9
commit: e040897111a12b7647b8f758336b2f14991e9371
[5/7] clk: imx: imx93: add mcore_booted module paratemter
commit: a740d7350ff77ce1ebbdc3b9c548dd3bcaf39b31
[6/7] dt-bindings: clock: imx93: add NIC, A55 and ARM PLL CLK
commit: 5fd7b00ca2361c81f2026f82dff93e52afd97a0b
[7/7] clk: imx: imx93: Add nic and A55 clk
commit: 6b60c3ae3e98d036945f2d5c11d35b4c178ea423
Best regards,
--
Abel Vesa <abel.vesa@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread