* [PATCH 1/4] clk: keystone: use clkod register bits for postdiv
@ 2013-11-19 18:13 Murali Karicheri
2013-11-19 18:13 ` [PATCH 2/4] keystone: dts: add/modify clock nodes Murali Karicheri
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Murali Karicheri @ 2013-11-19 18:13 UTC (permalink / raw)
To: linux-arm-kernel
DDR3A/B, ARM and PA PLL controllers have clkod register bits for
configuring postdiv values. So use it instead of using fixed
post dividers for these pll controllers. Assume that if fixed-postdiv
attribute is not present, use clkod register value for pistdiv.
Also update the Documentation of bindings to reflect the same.
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
---
.../devicetree/bindings/clock/keystone-pll.txt | 8 +++----
drivers/clk/keystone/pll.c | 25 ++++++++++++++++----
2 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/Documentation/devicetree/bindings/clock/keystone-pll.txt b/Documentation/devicetree/bindings/clock/keystone-pll.txt
index 12bd726..225990f 100644
--- a/Documentation/devicetree/bindings/clock/keystone-pll.txt
+++ b/Documentation/devicetree/bindings/clock/keystone-pll.txt
@@ -17,13 +17,14 @@ Required properties:
- reg - pll control0 and pll multipler registers
- reg-names : control and multiplier. The multiplier is applicable only for
main pll clock
-- fixed-postdiv : fixed post divider value
+- fixed-postdiv : fixed post divider value. If absent, use clkod register bits
+ for postdiv
Example:
mainpllclk: mainpllclk at 2310110 {
#clock-cells = <0>;
compatible = "ti,keystone,main-pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclksys>;
reg = <0x02620350 4>, <0x02310110 4>;
reg-names = "control", "multiplier";
fixed-postdiv = <2>;
@@ -32,11 +33,10 @@ Example:
papllclk: papllclk at 2620358 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclkpass>;
clock-output-names = "pa-pll-clk";
reg = <0x02620358 4>;
reg-names = "control";
- fixed-postdiv = <6>;
};
Required properties:
diff --git a/drivers/clk/keystone/pll.c b/drivers/clk/keystone/pll.c
index 47a1bd9..f59d5db 100644
--- a/drivers/clk/keystone/pll.c
+++ b/drivers/clk/keystone/pll.c
@@ -24,6 +24,8 @@
#define MAIN_PLLM_HIGH_MASK 0x7f000
#define PLLM_HIGH_SHIFT 6
#define PLLD_MASK 0x3f
+#define CLKOD_MASK 0x780000
+#define CLKOD_SHIFT 19
/**
* struct clk_pll_data - pll data structure
@@ -41,7 +43,10 @@
* @pllm_upper_mask: multiplier upper mask
* @pllm_upper_shift: multiplier upper shift
* @plld_mask: divider mask
- * @postdiv: Post divider
+ * @clkod_mask: output divider mask
+ * @clkod_shift: output divider shift
+ * @plld_mask: divider mask
+ * @postdiv: Fixed post divider
*/
struct clk_pll_data {
bool has_pllctrl;
@@ -53,6 +58,8 @@ struct clk_pll_data {
u32 pllm_upper_mask;
u32 pllm_upper_shift;
u32 plld_mask;
+ u32 clkod_mask;
+ u32 clkod_shift;
u32 postdiv;
};
@@ -87,10 +94,17 @@ static unsigned long clk_pllclk_recalc(struct clk_hw *hw,
/* bit6-12 of PLLM is in Main PLL control register */
val = readl(pll_data->pll_ctl0);
+
mult |= ((val & pll_data->pllm_upper_mask)
>> pll_data->pllm_upper_shift);
prediv = (val & pll_data->plld_mask);
- postdiv = pll_data->postdiv;
+
+ if (!pll_data->has_pllctrl)
+ /* read post divider from od bits*/
+ postdiv = ((val & pll_data->clkod_mask) >>
+ pll_data->clkod_shift) + 1;
+ else
+ postdiv = pll_data->postdiv;
rate /= (prediv + 1);
rate = (rate * (mult + 1));
@@ -155,8 +169,11 @@ static void __init _of_pll_clk_init(struct device_node *node, bool pllctrl)
}
parent_name = of_clk_get_parent_name(node, 0);
- if (of_property_read_u32(node, "fixed-postdiv", &pll_data->postdiv))
- goto out;
+ if (of_property_read_u32(node, "fixed-postdiv", &pll_data->postdiv)) {
+ /* assume the PLL has output divider register bits */
+ pll_data->clkod_mask = CLKOD_MASK;
+ pll_data->clkod_shift = CLKOD_SHIFT;
+ }
i = of_property_match_string(node, "reg-names", "control");
pll_data->pll_ctl0 = of_iomap(node, i);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] keystone: dts: add/modify clock nodes
2013-11-19 18:13 [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Murali Karicheri
@ 2013-11-19 18:13 ` Murali Karicheri
2013-11-19 18:43 ` Santosh Shilimkar
2013-11-19 18:13 ` [PATCH 3/4] keystone: dts: fix typo in the ddr3 pllclk node name Murali Karicheri
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Murali Karicheri @ 2013-11-19 18:13 UTC (permalink / raw)
To: linux-arm-kernel
K2 SoC has separate ref clock inputs for various clocks. This patch
adds following changes:-
- Add separate ref clock nodes for ARM, DDR3A, DDR3B and PA PLL input
clocks
- While at it, rename refclkmain to refclksys based on device User
Guide naming convention
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
---
arch/arm/boot/dts/keystone-clocks.dtsi | 48 ++++++++++++++++++++++++--------
1 file changed, 36 insertions(+), 12 deletions(-)
diff --git a/arch/arm/boot/dts/keystone-clocks.dtsi b/arch/arm/boot/dts/keystone-clocks.dtsi
index d6713b1..3f1cf28 100644
--- a/arch/arm/boot/dts/keystone-clocks.dtsi
+++ b/arch/arm/boot/dts/keystone-clocks.dtsi
@@ -13,17 +13,45 @@ clocks {
#size-cells = <1>;
ranges;
- refclkmain: refclkmain {
+ refclksys: refclksys {
#clock-cells = <0>;
compatible = "fixed-clock";
clock-frequency = <122880000>;
- clock-output-names = "refclk-main";
+ clock-output-names = "refclk-sys";
+ };
+
+ refclkpass: refclkpass {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <122880000>;
+ clock-output-names = "refclk-pass";
+ };
+
+ refclkarm: refclkarm {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ clock-output-names = "refclk-arm";
+ };
+
+ refclkddr3a: refclkddr3a {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <100000000>;
+ clock-output-names = "refclk-ddr3a";
+ };
+
+ refclkddr3b: refclkddr3b {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <100000000>;
+ clock-output-names = "refclk-ddr3b";
};
mainpllclk: mainpllclk at 2310110 {
#clock-cells = <0>;
compatible = "ti,keystone,main-pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclksys>;
reg = <0x02620350 4>, <0x02310110 4>;
reg-names = "control", "multiplier";
fixed-postdiv = <2>;
@@ -32,47 +60,43 @@ clocks {
papllclk: papllclk at 2620358 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclkpass>;
clock-output-names = "pa-pll-clk";
reg = <0x02620358 4>;
reg-names = "control";
- fixed-postdiv = <6>;
};
ddr3allclk: ddr3apllclk at 2620360 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclkddr3a>;
clock-output-names = "ddr-3a-pll-clk";
reg = <0x02620360 4>;
reg-names = "control";
- fixed-postdiv = <6>;
};
ddr3bllclk: ddr3bpllclk at 2620368 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclkddr3b>;
clock-output-names = "ddr-3b-pll-clk";
reg = <0x02620368 4>;
reg-names = "control";
- fixed-postdiv = <6>;
};
armpllclk: armpllclk at 2620370 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
- clocks = <&refclkmain>;
+ clocks = <&refclkarm>;
clock-output-names = "arm-pll-clk";
reg = <0x02620370 4>;
reg-names = "control";
- fixed-postdiv = <6>;
};
mainmuxclk: mainmuxclk at 2310108 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-mux-clock";
- clocks = <&mainpllclk>, <&refclkmain>;
+ clocks = <&mainpllclk>, <&refclksys>;
reg = <0x02310108 4>;
bit-shift = <23>;
bit-mask = <1>;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] keystone: dts: fix typo in the ddr3 pllclk node name
2013-11-19 18:13 [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Murali Karicheri
2013-11-19 18:13 ` [PATCH 2/4] keystone: dts: add/modify clock nodes Murali Karicheri
@ 2013-11-19 18:13 ` Murali Karicheri
2013-11-19 18:44 ` Santosh Shilimkar
2013-11-19 18:13 ` [PATCH 4/4] keystone: dts: add paclk divider clock node Murali Karicheri
2013-11-19 18:23 ` [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Santosh Shilimkar
3 siblings, 1 reply; 8+ messages in thread
From: Murali Karicheri @ 2013-11-19 18:13 UTC (permalink / raw)
To: linux-arm-kernel
Fix following typo
- ddr3allclk -> ddr3apllclk
- ddr3bllclk -> ddr3bpllclk
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
---
arch/arm/boot/dts/keystone-clocks.dtsi | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/boot/dts/keystone-clocks.dtsi b/arch/arm/boot/dts/keystone-clocks.dtsi
index 3f1cf28..1ebc203 100644
--- a/arch/arm/boot/dts/keystone-clocks.dtsi
+++ b/arch/arm/boot/dts/keystone-clocks.dtsi
@@ -66,7 +66,7 @@ clocks {
reg-names = "control";
};
- ddr3allclk: ddr3apllclk at 2620360 {
+ ddr3apllclk: ddr3apllclk at 2620360 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
clocks = <&refclkddr3a>;
@@ -75,7 +75,7 @@ clocks {
reg-names = "control";
};
- ddr3bllclk: ddr3bpllclk at 2620368 {
+ ddr3bpllclk: ddr3bpllclk at 2620368 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
clocks = <&refclkddr3b>;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] keystone: dts: add paclk divider clock node
2013-11-19 18:13 [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Murali Karicheri
2013-11-19 18:13 ` [PATCH 2/4] keystone: dts: add/modify clock nodes Murali Karicheri
2013-11-19 18:13 ` [PATCH 3/4] keystone: dts: fix typo in the ddr3 pllclk node name Murali Karicheri
@ 2013-11-19 18:13 ` Murali Karicheri
2013-11-19 18:45 ` Santosh Shilimkar
2013-11-19 18:23 ` [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Santosh Shilimkar
3 siblings, 1 reply; 8+ messages in thread
From: Murali Karicheri @ 2013-11-19 18:13 UTC (permalink / raw)
To: linux-arm-kernel
PA subsystem has a fixed factor clock at the input which is
input clock divided by 3. This patch adds this clock node to dts
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
---
arch/arm/boot/dts/keystone-clocks.dtsi | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/arch/arm/boot/dts/keystone-clocks.dtsi b/arch/arm/boot/dts/keystone-clocks.dtsi
index 1ebc203..3715511 100644
--- a/arch/arm/boot/dts/keystone-clocks.dtsi
+++ b/arch/arm/boot/dts/keystone-clocks.dtsi
@@ -159,6 +159,15 @@ clocks {
clock-output-names = "chipclk13";
};
+ paclk13: paclk13 {
+ #clock-cells = <0>;
+ compatible = "fixed-factor-clock";
+ clocks = <&papllclk>;
+ clock-div = <3>;
+ clock-mult = <1>;
+ clock-output-names = "paclk13";
+ };
+
chipclk14: chipclk14 {
#clock-cells = <0>;
compatible = "fixed-factor-clock";
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 1/4] clk: keystone: use clkod register bits for postdiv
2013-11-19 18:13 [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Murali Karicheri
` (2 preceding siblings ...)
2013-11-19 18:13 ` [PATCH 4/4] keystone: dts: add paclk divider clock node Murali Karicheri
@ 2013-11-19 18:23 ` Santosh Shilimkar
3 siblings, 0 replies; 8+ messages in thread
From: Santosh Shilimkar @ 2013-11-19 18:23 UTC (permalink / raw)
To: linux-arm-kernel
On Tuesday 19 November 2013 01:13 PM, Murali Karicheri wrote:
> DDR3A/B, ARM and PA PLL controllers have clkod register bits for
> configuring postdiv values. So use it instead of using fixed
> post dividers for these pll controllers. Assume that if fixed-postdiv
> attribute is not present, use clkod register value for pistdiv.
>
> Also update the Documentation of bindings to reflect the same.
>
> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
> ---
> .../devicetree/bindings/clock/keystone-pll.txt | 8 +++----
> drivers/clk/keystone/pll.c | 25 ++++++++++++++++----
> 2 files changed, 25 insertions(+), 8 deletions(-)
>
[..]
> diff --git a/drivers/clk/keystone/pll.c b/drivers/clk/keystone/pll.c
> index 47a1bd9..f59d5db 100644
> --- a/drivers/clk/keystone/pll.c
> +++ b/drivers/clk/keystone/pll.c
> @@ -24,6 +24,8 @@
> #define MAIN_PLLM_HIGH_MASK 0x7f000
> #define PLLM_HIGH_SHIFT 6
> #define PLLD_MASK 0x3f
> +#define CLKOD_MASK 0x780000
> +#define CLKOD_SHIFT 19
>
> /**
> * struct clk_pll_data - pll data structure
> @@ -41,7 +43,10 @@
> * @pllm_upper_mask: multiplier upper mask
> * @pllm_upper_shift: multiplier upper shift
> * @plld_mask: divider mask
> - * @postdiv: Post divider
> + * @clkod_mask: output divider mask
> + * @clkod_shift: output divider shift
> + * @plld_mask: divider mask
> + * @postdiv: Fixed post divider
> */
> struct clk_pll_data {
> bool has_pllctrl;
> @@ -53,6 +58,8 @@ struct clk_pll_data {
> u32 pllm_upper_mask;
> u32 pllm_upper_shift;
> u32 plld_mask;
> + u32 clkod_mask;
> + u32 clkod_shift;
> u32 postdiv;
> };
>
> @@ -87,10 +94,17 @@ static unsigned long clk_pllclk_recalc(struct clk_hw *hw,
>
> /* bit6-12 of PLLM is in Main PLL control register */
> val = readl(pll_data->pll_ctl0);
> +
Drop that extra line. Other than that patch looks fine to me.
Regards,
Santosh
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/4] keystone: dts: add/modify clock nodes
2013-11-19 18:13 ` [PATCH 2/4] keystone: dts: add/modify clock nodes Murali Karicheri
@ 2013-11-19 18:43 ` Santosh Shilimkar
0 siblings, 0 replies; 8+ messages in thread
From: Santosh Shilimkar @ 2013-11-19 18:43 UTC (permalink / raw)
To: linux-arm-kernel
On Tuesday 19 November 2013 01:13 PM, Murali Karicheri wrote:
> K2 SoC has separate ref clock inputs for various clocks. This patch
> adds following changes:-
> - Add separate ref clock nodes for ARM, DDR3A, DDR3B and PA PLL input
> clocks
> - While at it, rename refclkmain to refclksys based on device User
> Guide naming convention
>
> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
> ---
> arch/arm/boot/dts/keystone-clocks.dtsi | 48 ++++++++++++++++++++++++--------
> 1 file changed, 36 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/boot/dts/keystone-clocks.dtsi b/arch/arm/boot/dts/keystone-clocks.dtsi
> index d6713b1..3f1cf28 100644
> --- a/arch/arm/boot/dts/keystone-clocks.dtsi
> +++ b/arch/arm/boot/dts/keystone-clocks.dtsi
> @@ -13,17 +13,45 @@ clocks {
> #size-cells = <1>;
> ranges;
>
> - refclkmain: refclkmain {
> + refclksys: refclksys {
> #clock-cells = <0>;
> compatible = "fixed-clock";
> clock-frequency = <122880000>;
> - clock-output-names = "refclk-main";
> + clock-output-names = "refclk-sys";
> + };
> +
> + refclkpass: refclkpass {
> + #clock-cells = <0>;
> + compatible = "fixed-clock";
> + clock-frequency = <122880000>;
> + clock-output-names = "refclk-pass";
> + };
> +
lets move these nodes which are board dependent to board file.
This came in for NAND patches as well. I suggested to create a
k2hk-evm.dts file.
Regards,
Santosh
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/4] keystone: dts: fix typo in the ddr3 pllclk node name
2013-11-19 18:13 ` [PATCH 3/4] keystone: dts: fix typo in the ddr3 pllclk node name Murali Karicheri
@ 2013-11-19 18:44 ` Santosh Shilimkar
0 siblings, 0 replies; 8+ messages in thread
From: Santosh Shilimkar @ 2013-11-19 18:44 UTC (permalink / raw)
To: linux-arm-kernel
On Tuesday 19 November 2013 01:13 PM, Murali Karicheri wrote:
> Fix following typo
> - ddr3allclk -> ddr3apllclk
> - ddr3bllclk -> ddr3bpllclk
>
> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
> ---
Looks good..
regards,
Santosh
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/4] keystone: dts: add paclk divider clock node
2013-11-19 18:13 ` [PATCH 4/4] keystone: dts: add paclk divider clock node Murali Karicheri
@ 2013-11-19 18:45 ` Santosh Shilimkar
0 siblings, 0 replies; 8+ messages in thread
From: Santosh Shilimkar @ 2013-11-19 18:45 UTC (permalink / raw)
To: linux-arm-kernel
On Tuesday 19 November 2013 01:13 PM, Murali Karicheri wrote:
> PA subsystem has a fixed factor clock at the input which is
> input clock divided by 3. This patch adds this clock node to dts
>
> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
> ---
Looks good to me.
regards,
Santosh
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-11-19 18:45 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-19 18:13 [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Murali Karicheri
2013-11-19 18:13 ` [PATCH 2/4] keystone: dts: add/modify clock nodes Murali Karicheri
2013-11-19 18:43 ` Santosh Shilimkar
2013-11-19 18:13 ` [PATCH 3/4] keystone: dts: fix typo in the ddr3 pllclk node name Murali Karicheri
2013-11-19 18:44 ` Santosh Shilimkar
2013-11-19 18:13 ` [PATCH 4/4] keystone: dts: add paclk divider clock node Murali Karicheri
2013-11-19 18:45 ` Santosh Shilimkar
2013-11-19 18:23 ` [PATCH 1/4] clk: keystone: use clkod register bits for postdiv Santosh Shilimkar
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).