123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- From b98027285bd1fa95da0645a4234a5fc1f1a83f92 Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <[email protected]>
- Date: Sun, 26 Feb 2017 11:59:52 +0100
- Subject: [PATCH V2 8/8] MIPS: BCM63XX: split out swpkt_sar/usb clocks
- Make the secondary switch clocks their own clocks. This allows proper
- enable reference counting between SAR/XTM and the main switch clocks,
- and controlling them individually from drivers.
- Signed-off-by: Jonas Gorski <[email protected]>
- ---
- arch/mips/bcm63xx/clk.c | 61 +++++++++++++++++++++++++++++++++++++++++--------
- 1 file changed, 51 insertions(+), 10 deletions(-)
- --- a/arch/mips/bcm63xx/clk.c
- +++ b/arch/mips/bcm63xx/clk.c
- @@ -121,21 +121,56 @@ static struct clk clk_ephy = {
- };
-
- /*
- + * Ethernet switch SAR clock
- + */
- +static void swpkt_sar_set(struct clk *clk, int enable)
- +{
- + if (BCMCPU_IS_6368())
- + bcm_hwclock_set(CKCTL_6368_SWPKT_SAR_EN, enable);
- + else
- + return;
- +}
- +
- +static struct clk clk_swpkt_sar = {
- + .set = swpkt_sar_set,
- +};
- +
- +/*
- + * Ethernet switch USB clock
- + */
- +static void swpkt_usb_set(struct clk *clk, int enable)
- +{
- + if (BCMCPU_IS_6368())
- + bcm_hwclock_set(CKCTL_6368_SWPKT_USB_EN, enable);
- + else
- + return;
- +}
- +
- +static struct clk clk_swpkt_usb = {
- + .set = swpkt_usb_set,
- +};
- +
- +/*
- * Ethernet switch clock
- */
- static void enetsw_set(struct clk *clk, int enable)
- {
- - if (BCMCPU_IS_6328())
- + if (BCMCPU_IS_6328()) {
- bcm_hwclock_set(CKCTL_6328_ROBOSW_EN, enable);
- - else if (BCMCPU_IS_6362())
- + } else if (BCMCPU_IS_6362()) {
- bcm_hwclock_set(CKCTL_6362_ROBOSW_EN, enable);
- - else if (BCMCPU_IS_6368())
- - bcm_hwclock_set(CKCTL_6368_ROBOSW_EN |
- - CKCTL_6368_SWPKT_USB_EN |
- - CKCTL_6368_SWPKT_SAR_EN,
- - enable);
- - else
- + } else if (BCMCPU_IS_6368()) {
- + if (enable) {
- + clk_enable_unlocked(&clk_swpkt_sar);
- + clk_enable_unlocked(&clk_swpkt_usb);
- + } else {
- + clk_disable_unlocked(&clk_swpkt_usb);
- + clk_disable_unlocked(&clk_swpkt_sar);
- + }
- + bcm_hwclock_set(CKCTL_6368_ROBOSW_EN, enable);
- + } else {
- return;
- + }
-
- if (enable) {
- /* reset switch core afer clock change */
- @@ -260,8 +295,12 @@ static void xtm_set(struct clk *clk, int
- if (!BCMCPU_IS_6368())
- return;
-
- - bcm_hwclock_set(CKCTL_6368_SAR_EN |
- - CKCTL_6368_SWPKT_SAR_EN, enable);
- + if (enable)
- + clk_enable_unlocked(&clk_swpkt_sar);
- + else
- + clk_disable_unlocked(&clk_swpkt_sar);
- +
- + bcm_hwclock_set(CKCTL_6368_SAR_EN, enable);
-
- if (enable) {
- /* reset sar core afer clock change */
- @@ -447,6 +486,8 @@ static struct clk_lookup bcm6358_clks[]
- CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- CLKDEV_INIT(NULL, "spi", &clk_spi),
- CLKDEV_INIT(NULL, "pcm", &clk_pcm),
- + CLKDEV_INIT(NULL, "swpkt_sar", &clk_swpkt_sar),
- + CLKDEV_INIT(NULL, "swpkt_usb", &clk_swpkt_usb),
- CLKDEV_INIT("bcm63xx_enet.0", "enet", &clk_enet0),
- CLKDEV_INIT("bcm63xx_enet.1", "enet", &clk_enet1),
- };
|