1 From b98027285bd1fa95da0645a4234a5fc1f1a83f92 Mon Sep 17 00:00:00 2001
2 From: Jonas Gorski <jonas.gorski@gmail.com>
3 Date: Sun, 26 Feb 2017 11:59:52 +0100
4 Subject: [PATCH V2 8/8] MIPS: BCM63XX: split out swpkt_sar/usb clocks
6 Make the secondary switch clocks their own clocks. This allows proper
7 enable reference counting between SAR/XTM and the main switch clocks,
8 and controlling them individually from drivers.
10 Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
12 arch/mips/bcm63xx/clk.c | 61 +++++++++++++++++++++++++++++++++++++++++--------
13 1 file changed, 51 insertions(+), 10 deletions(-)
15 --- a/arch/mips/bcm63xx/clk.c
16 +++ b/arch/mips/bcm63xx/clk.c
17 @@ -121,21 +121,56 @@ static struct clk clk_ephy = {
21 + * Ethernet switch SAR clock
23 +static void swpkt_sar_set(struct clk *clk, int enable)
25 + if (BCMCPU_IS_6368())
26 + bcm_hwclock_set(CKCTL_6368_SWPKT_SAR_EN, enable);
31 +static struct clk clk_swpkt_sar = {
32 + .set = swpkt_sar_set,
36 + * Ethernet switch USB clock
38 +static void swpkt_usb_set(struct clk *clk, int enable)
40 + if (BCMCPU_IS_6368())
41 + bcm_hwclock_set(CKCTL_6368_SWPKT_USB_EN, enable);
46 +static struct clk clk_swpkt_usb = {
47 + .set = swpkt_usb_set,
51 * Ethernet switch clock
53 static void enetsw_set(struct clk *clk, int enable)
55 - if (BCMCPU_IS_6328())
56 + if (BCMCPU_IS_6328()) {
57 bcm_hwclock_set(CKCTL_6328_ROBOSW_EN, enable);
58 - else if (BCMCPU_IS_6362())
59 + } else if (BCMCPU_IS_6362()) {
60 bcm_hwclock_set(CKCTL_6362_ROBOSW_EN, enable);
61 - else if (BCMCPU_IS_6368())
62 - bcm_hwclock_set(CKCTL_6368_ROBOSW_EN |
63 - CKCTL_6368_SWPKT_USB_EN |
64 - CKCTL_6368_SWPKT_SAR_EN,
67 + } else if (BCMCPU_IS_6368()) {
69 + clk_enable_unlocked(&clk_swpkt_sar);
70 + clk_enable_unlocked(&clk_swpkt_usb);
72 + clk_disable_unlocked(&clk_swpkt_usb);
73 + clk_disable_unlocked(&clk_swpkt_sar);
75 + bcm_hwclock_set(CKCTL_6368_ROBOSW_EN, enable);
81 /* reset switch core afer clock change */
82 @@ -260,8 +295,12 @@ static void xtm_set(struct clk *clk, int
83 if (!BCMCPU_IS_6368())
86 - bcm_hwclock_set(CKCTL_6368_SAR_EN |
87 - CKCTL_6368_SWPKT_SAR_EN, enable);
89 + clk_enable_unlocked(&clk_swpkt_sar);
91 + clk_disable_unlocked(&clk_swpkt_sar);
93 + bcm_hwclock_set(CKCTL_6368_SAR_EN, enable);
96 /* reset sar core afer clock change */
97 @@ -447,6 +486,8 @@ static struct clk_lookup bcm6358_clks[]
98 CLKDEV_INIT(NULL, "usbd", &clk_usbd),
99 CLKDEV_INIT(NULL, "spi", &clk_spi),
100 CLKDEV_INIT(NULL, "pcm", &clk_pcm),
101 + CLKDEV_INIT(NULL, "swpkt_sar", &clk_swpkt_sar),
102 + CLKDEV_INIT(NULL, "swpkt_usb", &clk_swpkt_usb),
103 CLKDEV_INIT("bcm63xx_enet.0", "enet", &clk_enet0),
104 CLKDEV_INIT("bcm63xx_enet.1", "enet", &clk_enet1),