ath79: ar7242: Update dts for current ag71xx driver
[oweals/openwrt.git] / target / linux / brcm63xx / patches-4.9 / 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 @@ -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),
105  };