* [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk
@ 2017-01-25 8:19 Scott Wood
2017-01-25 8:19 ` [PATCH 2/3] arm64: dts: ls1012a: " Scott Wood
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Scott Wood @ 2017-01-25 8:19 UTC (permalink / raw)
To: linux-arm-kernel
ls1012a has separate input root clocks for core PLLs versus the platform
PLL, with the latter described as sysclk in the hw docs.
Update the qoriq-clock binding to allow a second input clock, named
"coreclk". If present, this clock will be used for the core PLLs.
Signed-off-by: Scott Wood <oss@buserror.net>
Cc: devicetree at vger.kernel.org
---
Documentation/devicetree/bindings/clock/qoriq-clock.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/clock/qoriq-clock.txt b/Documentation/devicetree/bindings/clock/qoriq-clock.txt
index df9cb5a..97a9666 100644
--- a/Documentation/devicetree/bindings/clock/qoriq-clock.txt
+++ b/Documentation/devicetree/bindings/clock/qoriq-clock.txt
@@ -55,6 +55,11 @@ Optional properties:
- clocks: If clock-frequency is not specified, sysclk may be provided
as an input clock. Either clock-frequency or clocks must be
provided.
+ A second input clock, called "coreclk", may be provided if
+ core PLLs are based on a different input clock from the
+ platform PLL.
+- clock-names: Required if a coreclk is present. Valid names are
+ "sysclk" and "coreclk".
2. Clock Provider
@@ -71,6 +76,7 @@ second cell is the clock index for the specified type.
2 hwaccel index (n in CLKCGnHWACSR)
3 fman 0 for fm1, 1 for fm2
4 platform pll 0=pll, 1=pll/2, 2=pll/3, 3=pll/4
+ 5 coreclk must be 0
3. Example
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] arm64: dts: ls1012a: Add coreclk
2017-01-25 8:19 [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Scott Wood
@ 2017-01-25 8:19 ` Scott Wood
2017-01-28 1:36 ` Shawn Guo
2017-01-25 8:19 ` [PATCH 3/3] clk: qoriq: Separate root input clock for core PLLs on ls1012a Scott Wood
2017-01-27 22:38 ` [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Rob Herring
2 siblings, 1 reply; 6+ messages in thread
From: Scott Wood @ 2017-01-25 8:19 UTC (permalink / raw)
To: linux-arm-kernel
ls1012a has separate input root clocks for core PLLs versus the platform
PLL, with the latter described as sysclk in the hw docs.
Signed-off-by: Scott Wood <oss@buserror.net>
---
Note that current versions of U-Boot are blindly updating the frequency
of all fixed-clock nodes. That needs to be fixed for the split input
frequency to work properly, but until U-Boot is fixed this change doesn't
make anything worse than it already was.
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
index cffebb4..515f8488 100644
--- a/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
@@ -66,10 +66,17 @@
sysclk: sysclk {
compatible = "fixed-clock";
#clock-cells = <0>;
- clock-frequency = <100000000>;
+ clock-frequency = <125000000>;
clock-output-names = "sysclk";
};
+ coreclk: coreclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <100000000>;
+ clock-output-names = "coreclk";
+ };
+
timer {
compatible = "arm,armv8-timer";
interrupts = <1 13 IRQ_TYPE_LEVEL_LOW>,/* Physical Secure PPI */
@@ -124,7 +131,8 @@
compatible = "fsl,ls1012a-clockgen";
reg = <0x0 0x1ee1000 0x0 0x1000>;
#clock-cells = <2>;
- clocks = <&sysclk>;
+ clocks = <&sysclk &coreclk>;
+ clock-names = "sysclk", "coreclk";
};
i2c0: i2c at 2180000 {
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] clk: qoriq: Separate root input clock for core PLLs on ls1012a
2017-01-25 8:19 [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Scott Wood
2017-01-25 8:19 ` [PATCH 2/3] arm64: dts: ls1012a: " Scott Wood
@ 2017-01-25 8:19 ` Scott Wood
2017-01-27 22:38 ` [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Rob Herring
2 siblings, 0 replies; 6+ messages in thread
From: Scott Wood @ 2017-01-25 8:19 UTC (permalink / raw)
To: linux-arm-kernel
ls1012a has separate input root clocks for core PLLs versus the
platform PLL, with the latter described as sysclk in the hw docs.
If a second input clock, named "coreclk", is present, this clock will be
used for the core PLLs.
Signed-off-by: Scott Wood <oss@buserror.net>
---
drivers/clk/clk-qoriq.c | 91 +++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 77 insertions(+), 14 deletions(-)
diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
index d0bf8b1..f3931e3 100644
--- a/drivers/clk/clk-qoriq.c
+++ b/drivers/clk/clk-qoriq.c
@@ -87,7 +87,7 @@ struct clockgen {
struct device_node *node;
void __iomem *regs;
struct clockgen_chipinfo info; /* mutable copy */
- struct clk *sysclk;
+ struct clk *sysclk, *coreclk;
struct clockgen_pll pll[6];
struct clk *cmux[NUM_CMUX];
struct clk *hwaccel[NUM_HWACCEL];
@@ -904,7 +904,12 @@ static void __init create_muxes(struct clockgen *cg)
static void __init clockgen_init(struct device_node *np);
-/* Legacy nodes may get probed before the parent clockgen node */
+/*
+ * Legacy nodes may get probed before the parent clockgen node.
+ * It is assumed that device trees with legacy nodes will not
+ * contain a "clocks" property -- otherwise the input clocks may
+ * not be initialized at this point.
+ */
static void __init legacy_init_clockgen(struct device_node *np)
{
if (!clockgen.node)
@@ -945,18 +950,13 @@ static struct clk __init
return clk_register_fixed_rate(NULL, name, NULL, 0, rate);
}
-static struct clk *sysclk_from_parent(const char *name)
+static struct clk __init *input_clock(const char *name, struct clk *clk)
{
- struct clk *clk;
- const char *parent_name;
-
- clk = of_clk_get(clockgen.node, 0);
- if (IS_ERR(clk))
- return clk;
+ const char *input_name;
/* Register the input clock under the desired name. */
- parent_name = __clk_get_name(clk);
- clk = clk_register_fixed_factor(NULL, name, parent_name,
+ input_name = __clk_get_name(clk);
+ clk = clk_register_fixed_factor(NULL, name, input_name,
0, 1, 1);
if (IS_ERR(clk))
pr_err("%s: Couldn't register %s: %ld\n", __func__, name,
@@ -965,6 +965,29 @@ static struct clk *sysclk_from_parent(const char *name)
return clk;
}
+static struct clk __init *input_clock_by_name(const char *name,
+ const char *dtname)
+{
+ struct clk *clk;
+
+ clk = of_clk_get_by_name(clockgen.node, dtname);
+ if (IS_ERR(clk))
+ return clk;
+
+ return input_clock(name, clk);
+}
+
+static struct clk __init *input_clock_by_index(const char *name, int idx)
+{
+ struct clk *clk;
+
+ clk = of_clk_get(clockgen.node, 0);
+ if (IS_ERR(clk))
+ return clk;
+
+ return input_clock(name, clk);
+}
+
static struct clk * __init create_sysclk(const char *name)
{
struct device_node *sysclk;
@@ -974,7 +997,11 @@ static struct clk * __init create_sysclk(const char *name)
if (!IS_ERR(clk))
return clk;
- clk = sysclk_from_parent(name);
+ clk = input_clock_by_name(name, "sysclk");
+ if (!IS_ERR(clk))
+ return clk;
+
+ clk = input_clock_by_index(name, 0);
if (!IS_ERR(clk))
return clk;
@@ -985,7 +1012,27 @@ static struct clk * __init create_sysclk(const char *name)
return clk;
}
- pr_err("%s: No input clock\n", __func__);
+ pr_err("%s: No input sysclk\n", __func__);
+ return NULL;
+}
+
+static struct clk * __init create_coreclk(const char *name)
+{
+ struct clk *clk;
+
+ clk = input_clock_by_name(name, "coreclk");
+ if (!IS_ERR(clk))
+ return clk;
+
+ /*
+ * This indicates a mix of legacy nodes with the new coreclk
+ * mechanism, which should never happen. If this error occurs,
+ * don't use the wrong input clock just because coreclk isn't
+ * ready yet.
+ */
+ if (WARN_ON(PTR_ERR(clk) == -EPROBE_DEFER))
+ return clk;
+
return NULL;
}
@@ -1008,11 +1055,19 @@ static void __init create_one_pll(struct clockgen *cg, int idx)
u32 __iomem *reg;
u32 mult;
struct clockgen_pll *pll = &cg->pll[idx];
+ const char *input = "cg-sysclk";
int i;
if (!(cg->info.pll_mask & (1 << idx)))
return;
+ if (cg->coreclk && idx != PLATFORM_PLL) {
+ if (IS_ERR(cg->coreclk))
+ return;
+
+ input = "cg-coreclk";
+ }
+
if (cg->info.flags & CG_VER3) {
switch (idx) {
case PLATFORM_PLL:
@@ -1063,7 +1118,7 @@ static void __init create_one_pll(struct clockgen *cg, int idx)
"cg-pll%d-div%d", idx, i + 1);
clk = clk_register_fixed_factor(NULL,
- pll->div[i].name, "cg-sysclk", 0, mult, i + 1);
+ pll->div[i].name, input, 0, mult, i + 1);
if (IS_ERR(clk)) {
pr_err("%s: %s: register failed %ld\n",
__func__, pll->div[i].name, PTR_ERR(clk));
@@ -1200,6 +1255,13 @@ static struct clk *clockgen_clk_get(struct of_phandle_args *clkspec, void *data)
goto bad_args;
clk = pll->div[idx].clk;
break;
+ case 5:
+ if (idx != 0)
+ goto bad_args;
+ clk = cg->coreclk;
+ if (IS_ERR(clk))
+ clk = NULL;
+ break;
default:
goto bad_args;
}
@@ -1311,6 +1373,7 @@ static void __init clockgen_init(struct device_node *np)
clockgen.info.flags |= CG_CMUX_GE_PLAT;
clockgen.sysclk = create_sysclk("cg-sysclk");
+ clockgen.coreclk = create_coreclk("cg-coreclk");
create_plls(&clockgen);
create_muxes(&clockgen);
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk
2017-01-25 8:19 [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Scott Wood
2017-01-25 8:19 ` [PATCH 2/3] arm64: dts: ls1012a: " Scott Wood
2017-01-25 8:19 ` [PATCH 3/3] clk: qoriq: Separate root input clock for core PLLs on ls1012a Scott Wood
@ 2017-01-27 22:38 ` Rob Herring
2017-01-27 23:51 ` Scott Wood
2 siblings, 1 reply; 6+ messages in thread
From: Rob Herring @ 2017-01-27 22:38 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Jan 25, 2017 at 02:19:21AM -0600, Scott Wood wrote:
> ls1012a has separate input root clocks for core PLLs versus the platform
> PLL, with the latter described as sysclk in the hw docs.
>
> Update the qoriq-clock binding to allow a second input clock, named
> "coreclk". If present, this clock will be used for the core PLLs.
>
> Signed-off-by: Scott Wood <oss@buserror.net>
> Cc: devicetree at vger.kernel.org
> ---
> Documentation/devicetree/bindings/clock/qoriq-clock.txt | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/clock/qoriq-clock.txt b/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> index df9cb5a..97a9666 100644
> --- a/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> +++ b/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> @@ -55,6 +55,11 @@ Optional properties:
> - clocks: If clock-frequency is not specified, sysclk may be provided
> as an input clock. Either clock-frequency or clocks must be
> provided.
> + A second input clock, called "coreclk", may be provided if
> + core PLLs are based on a different input clock from the
> + platform PLL.
> +- clock-names: Required if a coreclk is present. Valid names are
> + "sysclk" and "coreclk".
'clk' part is redundant.
>
> 2. Clock Provider
>
> @@ -71,6 +76,7 @@ second cell is the clock index for the specified type.
> 2 hwaccel index (n in CLKCGnHWACSR)
> 3 fman 0 for fm1, 1 for fm2
> 4 platform pll 0=pll, 1=pll/2, 2=pll/3, 3=pll/4
> + 5 coreclk must be 0
>
> 3. Example
>
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk
2017-01-27 22:38 ` [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Rob Herring
@ 2017-01-27 23:51 ` Scott Wood
0 siblings, 0 replies; 6+ messages in thread
From: Scott Wood @ 2017-01-27 23:51 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, 2017-01-27 at 16:38 -0600, Rob Herring wrote:
> On Wed, Jan 25, 2017 at 02:19:21AM -0600, Scott Wood wrote:
> >
> > ls1012a has separate input root clocks for core PLLs versus the platform
> > PLL, with the latter described as sysclk in the hw docs.
> >
> > Update the qoriq-clock binding to allow a second input clock, named
> > "coreclk".??If present, this clock will be used for the core PLLs.
> >
> > Signed-off-by: Scott Wood <oss@buserror.net>
> > Cc: devicetree at vger.kernel.org
> > ---
> > ?Documentation/devicetree/bindings/clock/qoriq-clock.txt | 6 ++++++
> > ?1 file changed, 6 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> > b/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> > index df9cb5a..97a9666 100644
> > --- a/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> > +++ b/Documentation/devicetree/bindings/clock/qoriq-clock.txt
> > @@ -55,6 +55,11 @@ Optional properties:
> > ?- clocks: If clock-frequency is not specified, sysclk may be provided
> > ? as an input clock.??Either clock-frequency or clocks must be
> > ? provided.
> > + A second input clock, called "coreclk", may be provided if
> > + core PLLs are based on a different input clock from the
> > + platform PLL.
> > +- clock-names: Required if a coreclk is present.??Valid names are
> > + "sysclk" and "coreclk".
> 'clk' part is redundant.
"sysclk" is a term used by the hardware documentation and I'd rather leave it
intact. ?"coreclk" isn't named (only described) by the hardware documentation
but it is a special variant of sysclk and having similar naming helps make
that clear.
-Scott
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] arm64: dts: ls1012a: Add coreclk
2017-01-25 8:19 ` [PATCH 2/3] arm64: dts: ls1012a: " Scott Wood
@ 2017-01-28 1:36 ` Shawn Guo
0 siblings, 0 replies; 6+ messages in thread
From: Shawn Guo @ 2017-01-28 1:36 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Jan 25, 2017 at 02:19:22AM -0600, Scott Wood wrote:
> ls1012a has separate input root clocks for core PLLs versus the platform
> PLL, with the latter described as sysclk in the hw docs.
>
> Signed-off-by: Scott Wood <oss@buserror.net>
> ---
> Note that current versions of U-Boot are blindly updating the frequency
> of all fixed-clock nodes. That needs to be fixed for the split input
> frequency to work properly, but until U-Boot is fixed this change doesn't
> make anything worse than it already was.
>
> arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
> index cffebb4..515f8488 100644
> --- a/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
> @@ -66,10 +66,17 @@
> sysclk: sysclk {
> compatible = "fixed-clock";
> #clock-cells = <0>;
> - clock-frequency = <100000000>;
> + clock-frequency = <125000000>;
Should we mention this change a bit in the commit log?
Shawn
> clock-output-names = "sysclk";
> };
>
> + coreclk: coreclk {
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <100000000>;
> + clock-output-names = "coreclk";
> + };
> +
> timer {
> compatible = "arm,armv8-timer";
> interrupts = <1 13 IRQ_TYPE_LEVEL_LOW>,/* Physical Secure PPI */
> @@ -124,7 +131,8 @@
> compatible = "fsl,ls1012a-clockgen";
> reg = <0x0 0x1ee1000 0x0 0x1000>;
> #clock-cells = <2>;
> - clocks = <&sysclk>;
> + clocks = <&sysclk &coreclk>;
> + clock-names = "sysclk", "coreclk";
> };
>
> i2c0: i2c at 2180000 {
> --
> 2.7.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-01-28 1:36 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-25 8:19 [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Scott Wood
2017-01-25 8:19 ` [PATCH 2/3] arm64: dts: ls1012a: " Scott Wood
2017-01-28 1:36 ` Shawn Guo
2017-01-25 8:19 ` [PATCH 3/3] clk: qoriq: Separate root input clock for core PLLs on ls1012a Scott Wood
2017-01-27 22:38 ` [PATCH 1/3] dt-bindings: qoriq-clock: Add coreclk Rob Herring
2017-01-27 23:51 ` Scott Wood
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).