bcm53xx: drop linux 4.4 and 4.9 support
[openwrt/staging/wigyori.git] / target / linux / brcm63xx / patches-4.4 / 001-4.15-07-MIPS-BCM63XX-split-out-swpkt_sar-usb-clocks.patch
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
5
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.
9
10 Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
11 ---
12 arch/mips/bcm63xx/clk.c | 61 +++++++++++++++++++++++++++++++++++++++++--------
13 1 file changed, 51 insertions(+), 10 deletions(-)
14
15 --- a/arch/mips/bcm63xx/clk.c
16 +++ b/arch/mips/bcm63xx/clk.c
17 @@ -121,21 +121,56 @@ static struct clk clk_ephy = {
18 };
19
20 /*
21 + * Ethernet switch SAR clock
22 + */
23 +static void swpkt_sar_set(struct clk *clk, int enable)
24 +{
25 + if (BCMCPU_IS_6368())
26 + bcm_hwclock_set(CKCTL_6368_SWPKT_SAR_EN, enable);
27 + else
28 + return;
29 +}
30 +
31 +static struct clk clk_swpkt_sar = {
32 + .set = swpkt_sar_set,
33 +};
34 +
35 +/*
36 + * Ethernet switch USB clock
37 + */
38 +static void swpkt_usb_set(struct clk *clk, int enable)
39 +{
40 + if (BCMCPU_IS_6368())
41 + bcm_hwclock_set(CKCTL_6368_SWPKT_USB_EN, enable);
42 + else
43 + return;
44 +}
45 +
46 +static struct clk clk_swpkt_usb = {
47 + .set = swpkt_usb_set,
48 +};
49 +
50 +/*
51 * Ethernet switch clock
52 */
53 static void enetsw_set(struct clk *clk, int enable)
54 {
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,
65 - enable);
66 - else
67 + } else if (BCMCPU_IS_6368()) {
68 + if (enable) {
69 + clk_enable_unlocked(&clk_swpkt_sar);
70 + clk_enable_unlocked(&clk_swpkt_usb);
71 + } else {
72 + clk_disable_unlocked(&clk_swpkt_usb);
73 + clk_disable_unlocked(&clk_swpkt_sar);
74 + }
75 + bcm_hwclock_set(CKCTL_6368_ROBOSW_EN, enable);
76 + } else {
77 return;
78 + }
79
80 if (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())
84 return;
85
86 - bcm_hwclock_set(CKCTL_6368_SAR_EN |
87 - CKCTL_6368_SWPKT_SAR_EN, enable);
88 + if (enable)
89 + clk_enable_unlocked(&clk_swpkt_sar);
90 + else
91 + clk_disable_unlocked(&clk_swpkt_sar);
92 +
93 + bcm_hwclock_set(CKCTL_6368_SAR_EN, enable);
94
95 if (enable) {
96 /* reset sar core afer clock change */
97 @@ -444,6 +483,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),
105 };