mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08:00
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 <jonas.gorski@gmail.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Rob Herring <robh+dt@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Florian Fainelli <f.fainelli@gmail.com> Cc: Kevin Cernekee <cernekee@gmail.com> Cc: Russell King <linux@armlinux.org.uk> Cc: linux-mips@linux-mips.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-serial@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: bcm-kernel-feedback-list@broadcom.com Patchwork: https://patchwork.linux-mips.org/patch/17332/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: James Hogan <jhogan@kernel.org>
This commit is contained in:
parent
ef42351595
commit
072916f55d
@ -121,22 +121,57 @@ static struct clk clk_ephy = {
|
|||||||
.set = ephy_set,
|
.set = ephy_set,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
* Ethernet switch clock
|
||||||
*/
|
*/
|
||||||
static void enetsw_set(struct clk *clk, int enable)
|
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);
|
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);
|
bcm_hwclock_set(CKCTL_6362_ROBOSW_EN, enable);
|
||||||
else if (BCMCPU_IS_6368())
|
} else if (BCMCPU_IS_6368()) {
|
||||||
bcm_hwclock_set(CKCTL_6368_ROBOSW_EN |
|
if (enable) {
|
||||||
CKCTL_6368_SWPKT_USB_EN |
|
clk_enable_unlocked(&clk_swpkt_sar);
|
||||||
CKCTL_6368_SWPKT_SAR_EN,
|
clk_enable_unlocked(&clk_swpkt_usb);
|
||||||
enable);
|
} else {
|
||||||
else
|
clk_disable_unlocked(&clk_swpkt_usb);
|
||||||
|
clk_disable_unlocked(&clk_swpkt_sar);
|
||||||
|
}
|
||||||
|
bcm_hwclock_set(CKCTL_6368_ROBOSW_EN, enable);
|
||||||
|
} else {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (enable) {
|
if (enable) {
|
||||||
/* reset switch core afer clock change */
|
/* reset switch core afer clock change */
|
||||||
@ -261,8 +296,12 @@ static void xtm_set(struct clk *clk, int enable)
|
|||||||
if (!BCMCPU_IS_6368())
|
if (!BCMCPU_IS_6368())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bcm_hwclock_set(CKCTL_6368_SAR_EN |
|
if (enable)
|
||||||
CKCTL_6368_SWPKT_SAR_EN, enable);
|
clk_enable_unlocked(&clk_swpkt_sar);
|
||||||
|
else
|
||||||
|
clk_disable_unlocked(&clk_swpkt_sar);
|
||||||
|
|
||||||
|
bcm_hwclock_set(CKCTL_6368_SAR_EN, enable);
|
||||||
|
|
||||||
if (enable) {
|
if (enable) {
|
||||||
/* reset sar core afer clock change */
|
/* reset sar core afer clock change */
|
||||||
@ -451,6 +490,8 @@ static struct clk_lookup bcm6358_clks[] = {
|
|||||||
CLKDEV_INIT(NULL, "usbd", &clk_usbd),
|
CLKDEV_INIT(NULL, "usbd", &clk_usbd),
|
||||||
CLKDEV_INIT(NULL, "spi", &clk_spi),
|
CLKDEV_INIT(NULL, "spi", &clk_spi),
|
||||||
CLKDEV_INIT(NULL, "pcm", &clk_pcm),
|
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.0", "enet", &clk_enet0),
|
||||||
CLKDEV_INIT("bcm63xx_enet.1", "enet", &clk_enet1),
|
CLKDEV_INIT("bcm63xx_enet.1", "enet", &clk_enet1),
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user