Skip to contentSkip to conversation

clk: ux500: move AB8500 sysclk over to PRCMU clk driver

PATCH Applied Linus Walleij 3 participants 5 messages Jan 13, 2017 – Jan 27, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/3 clk: ux500: move AB8500 sysclk over to PRCMU clk driver

The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.

---
 drivers/clk/ux500/abx500-clk.c   | 8 --------
 drivers/clk/ux500/u8500_of_clk.c | 3 +++
 2 files changed, 3 insertions(+), 8 deletions(-)
drivers/clk/ux500/abx500-clk.c +0 -8
index a07c31e6f26d..0467fcae3b0e 100644
@@ -15,7 +15,6 @@
 #include <linux/mfd/abx500/ab8500-sysctrl.h>
 #include <linux/clkdev.h>
 #include <linux/clk-provider.h>
-#include <linux/mfd/dbx500-prcmu.h>
 #include "clk.h"
 
 /* Clock definitions for ab8500 */
@@ -39,13 +38,6 @@ static int ab8500_reg_clks(struct device *dev)
 	if (ret)
 		return ret;
 
-	/* ab8500_sysclk */
-	clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
-	clk_register_clkdev(clk, "sysclk", "ab8500-usb.0");
-	clk_register_clkdev(clk, "sysclk", "ab-iddet.0");
-	clk_register_clkdev(clk, "sysclk", "snd-soc-mop500.0");
-	clk_register_clkdev(clk, "sysclk", "shrm_bus");
-
 	/* ab8500_sysclk2 */
 	clk = clk_reg_sysctrl_gate(dev , "ab8500_sysclk2", "ab8500_sysclk",
 		AB8500_SYSULPCLKCTRL1, AB8500_SYSULPCLKCTRL1_SYSCLKBUF2REQ,
drivers/clk/ux500/u8500_of_clk.c +3 -0
index e960d686d9db..d5888591e1a9 100644
@@ -206,6 +206,9 @@ static void u8500_clk_init(struct device_node *np)
 	clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, 0);
 	prcmu_clk[PRCMU_TIMCLK] = clk;
 
+	clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
+	prcmu_clk[PRCMU_SYSCLK] = clk;
+
 	clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL, PRCMU_SDMMCCLK,
 					100000000, CLK_SET_RATE_GATE);
 	prcmu_clk[PRCMU_SDMMCCLK] = clk;
Signature · 1 line
2.9.3
#1 lore raw
Quoted 2 lines · Linus Walleij

The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of

Right, this change makes sense to me!

Quoted 23 lines

the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.

---
 drivers/clk/ux500/abx500-clk.c   | 8 --------
 drivers/clk/ux500/u8500_of_clk.c | 3 +++
 2 files changed, 3 insertions(+), 8 deletions(-)
drivers/clk/ux500/abx500-clk.c +0 -1
index a07c31e6f26d..0467fcae3b0e 100644
@@ -15,7 +15,6 @@
 #include <linux/mfd/abx500/ab8500-sysctrl.h>
 #include <linux/clkdev.h>
 #include <linux/clk-provider.h>
-#include <linux/mfd/dbx500-prcmu.h>
 #include "clk.h"
 
 /* Clock definitions for ab8500 */

drivers/clk/ux500/abx500-clk.c static int ab8500_reg_clks(struct device *dev) · line 47

Quoted 9 lines
drivers/clk/ux500/abx500-clk.c +0 -6
@@ -39,13 +38,6 @@ static int ab8500_reg_clks(struct device *dev)
        if (ret)
                return ret;
 
-       /* ab8500_sysclk */
-       clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
-       clk_register_clkdev(clk, "sysclk", "ab8500-usb.0");
-       clk_register_clkdev(clk, "sysclk", "ab-iddet.0");
-       clk_register_clkdev(clk, "sysclk", "snd-soc-mop500.0");
-       clk_register_clkdev(clk, "sysclk", "shrm_bus");

These lookups are removed in this change. Are there already existing name lookups already defined in the DTS?

Quoted 19 lines
drivers/clk/ux500/abx500-clk.c +0 -1
-
        /* ab8500_sysclk2 */
        clk = clk_reg_sysctrl_gate(dev , "ab8500_sysclk2", "ab8500_sysclk",
                AB8500_SYSULPCLKCTRL1, AB8500_SYSULPCLKCTRL1_SYSCLKBUF2REQ,
drivers/clk/ux500/u8500_of_clk.c +3 -1
index e960d686d9db..d5888591e1a9 100644
@@ -206,6 +206,9 @@ static void u8500_clk_init(struct device_node *np)
        clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, 0);
        prcmu_clk[PRCMU_TIMCLK] = clk;
 
+       clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
+       prcmu_clk[PRCMU_SYSCLK] = clk;
+
        clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL, PRCMU_SDMMCCLK,
                                        100000000, CLK_SET_RATE_GATE);
        prcmu_clk[PRCMU_SDMMCCLK] = clk;
--
Quoted 2 lines

2.9.3

Kind regards
Uffe

#2 lore raw
Quoted 9 lines · Ulf Hansson

drivers/clk/ux500/abx500-clk.c static int ab8500_reg_clks(struct device *dev) · line 47

Quoted 6 lines
drivers/clk/ux500/abx500-clk.c +0 -6
-       /* ab8500_sysclk */
-       clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
-       clk_register_clkdev(clk, "sysclk", "ab8500-usb.0");
-       clk_register_clkdev(clk, "sysclk", "ab-iddet.0");
-       clk_register_clkdev(clk, "sysclk", "snd-soc-mop500.0");
-       clk_register_clkdev(clk, "sysclk", "shrm_bus");

These lookups are removed in this change. Are there already existing name lookups already defined in the DTS?

The USB PHY and snd-soc-mop500 lookup are added in a DTS patch in a separate series.

The ID detection and SHRM drivers are not upstream, but can easily be bound in the device tree the day they are.

Yours,
Linus Walleij

Acked-by on v1 1/3
#3 lore raw
In reply to Linus Walleij
Quoted 7 lines · Linus Walleij

The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.

Stephen, can pick this up once Rob acked the DT change?

Kind regards
Uffe

Quoted 48 lines
---
 drivers/clk/ux500/abx500-clk.c   | 8 --------
 drivers/clk/ux500/u8500_of_clk.c | 3 +++
 2 files changed, 3 insertions(+), 8 deletions(-)
drivers/clk/ux500/abx500-clk.c +0 -8
index a07c31e6f26d..0467fcae3b0e 100644
@@ -15,7 +15,6 @@
 #include <linux/mfd/abx500/ab8500-sysctrl.h>
 #include <linux/clkdev.h>
 #include <linux/clk-provider.h>
-#include <linux/mfd/dbx500-prcmu.h>
 #include "clk.h"
 
 /* Clock definitions for ab8500 */
@@ -39,13 +38,6 @@ static int ab8500_reg_clks(struct device *dev)
        if (ret)
                return ret;
 
-       /* ab8500_sysclk */
-       clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
-       clk_register_clkdev(clk, "sysclk", "ab8500-usb.0");
-       clk_register_clkdev(clk, "sysclk", "ab-iddet.0");
-       clk_register_clkdev(clk, "sysclk", "snd-soc-mop500.0");
-       clk_register_clkdev(clk, "sysclk", "shrm_bus");
-
        /* ab8500_sysclk2 */
        clk = clk_reg_sysctrl_gate(dev , "ab8500_sysclk2", "ab8500_sysclk",
                AB8500_SYSULPCLKCTRL1, AB8500_SYSULPCLKCTRL1_SYSCLKBUF2REQ,
drivers/clk/ux500/u8500_of_clk.c +3 -1
index e960d686d9db..d5888591e1a9 100644
@@ -206,6 +206,9 @@ static void u8500_clk_init(struct device_node *np)
        clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, 0);
        prcmu_clk[PRCMU_TIMCLK] = clk;
 
+       clk = clk_reg_prcmu_gate("ab8500_sysclk", NULL, PRCMU_SYSCLK, 0);
+       prcmu_clk[PRCMU_SYSCLK] = clk;
+
        clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL, PRCMU_SDMMCCLK,
                                        100000000, CLK_SET_RATE_GATE);
        prcmu_clk[PRCMU_SDMMCCLK] = clk;
--

2.9.3

Applied
#4 lore raw
In reply to Linus Walleij
Quoted 8 lines · Linus Walleij

The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.

---

Applied to clk-ux500 and merged into clk-next

Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project