diff options
author | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2013-03-27 19:07:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-28 14:41:19 -0400 |
commit | ace58010c458e54865d39bc522d0d84dadba2182 (patch) | |
tree | d447814a0d2508f2acfcec20cec43e0dd5c07efc /drivers/net/ethernet/cadence | |
parent | a1ae385df210a9fe272b87683192f2789ddf144e (diff) |
net/macb: make clk_enable atomic
Use clk_prepare_enable/clk_disable_unprepare to be safe on SMP systems.
Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Fabio Estevam <festevam@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/cadence')
-rw-r--r-- | drivers/net/ethernet/cadence/macb.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index 2747a7f59528..ed2cb130f988 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c | |||
@@ -1561,14 +1561,14 @@ static int __init macb_probe(struct platform_device *pdev) | |||
1561 | dev_err(&pdev->dev, "failed to get macb_clk\n"); | 1561 | dev_err(&pdev->dev, "failed to get macb_clk\n"); |
1562 | goto err_out_free_dev; | 1562 | goto err_out_free_dev; |
1563 | } | 1563 | } |
1564 | clk_enable(bp->pclk); | 1564 | clk_prepare_enable(bp->pclk); |
1565 | 1565 | ||
1566 | bp->hclk = clk_get(&pdev->dev, "hclk"); | 1566 | bp->hclk = clk_get(&pdev->dev, "hclk"); |
1567 | if (IS_ERR(bp->hclk)) { | 1567 | if (IS_ERR(bp->hclk)) { |
1568 | dev_err(&pdev->dev, "failed to get hclk\n"); | 1568 | dev_err(&pdev->dev, "failed to get hclk\n"); |
1569 | goto err_out_put_pclk; | 1569 | goto err_out_put_pclk; |
1570 | } | 1570 | } |
1571 | clk_enable(bp->hclk); | 1571 | clk_prepare_enable(bp->hclk); |
1572 | 1572 | ||
1573 | bp->regs = ioremap(regs->start, resource_size(regs)); | 1573 | bp->regs = ioremap(regs->start, resource_size(regs)); |
1574 | if (!bp->regs) { | 1574 | if (!bp->regs) { |
@@ -1658,9 +1658,9 @@ err_out_free_irq: | |||
1658 | err_out_iounmap: | 1658 | err_out_iounmap: |
1659 | iounmap(bp->regs); | 1659 | iounmap(bp->regs); |
1660 | err_out_disable_clocks: | 1660 | err_out_disable_clocks: |
1661 | clk_disable(bp->hclk); | 1661 | clk_disable_unprepare(bp->hclk); |
1662 | clk_put(bp->hclk); | 1662 | clk_put(bp->hclk); |
1663 | clk_disable(bp->pclk); | 1663 | clk_disable_unprepare(bp->pclk); |
1664 | err_out_put_pclk: | 1664 | err_out_put_pclk: |
1665 | clk_put(bp->pclk); | 1665 | clk_put(bp->pclk); |
1666 | err_out_free_dev: | 1666 | err_out_free_dev: |
@@ -1687,9 +1687,9 @@ static int __exit macb_remove(struct platform_device *pdev) | |||
1687 | unregister_netdev(dev); | 1687 | unregister_netdev(dev); |
1688 | free_irq(dev->irq, dev); | 1688 | free_irq(dev->irq, dev); |
1689 | iounmap(bp->regs); | 1689 | iounmap(bp->regs); |
1690 | clk_disable(bp->hclk); | 1690 | clk_disable_unprepare(bp->hclk); |
1691 | clk_put(bp->hclk); | 1691 | clk_put(bp->hclk); |
1692 | clk_disable(bp->pclk); | 1692 | clk_disable_unprepare(bp->pclk); |
1693 | clk_put(bp->pclk); | 1693 | clk_put(bp->pclk); |
1694 | free_netdev(dev); | 1694 | free_netdev(dev); |
1695 | platform_set_drvdata(pdev, NULL); | 1695 | platform_set_drvdata(pdev, NULL); |
@@ -1707,8 +1707,8 @@ static int macb_suspend(struct platform_device *pdev, pm_message_t state) | |||
1707 | netif_carrier_off(netdev); | 1707 | netif_carrier_off(netdev); |
1708 | netif_device_detach(netdev); | 1708 | netif_device_detach(netdev); |
1709 | 1709 | ||
1710 | clk_disable(bp->hclk); | 1710 | clk_disable_unprepare(bp->hclk); |
1711 | clk_disable(bp->pclk); | 1711 | clk_disable_unprepare(bp->pclk); |
1712 | 1712 | ||
1713 | return 0; | 1713 | return 0; |
1714 | } | 1714 | } |
@@ -1718,8 +1718,8 @@ static int macb_resume(struct platform_device *pdev) | |||
1718 | struct net_device *netdev = platform_get_drvdata(pdev); | 1718 | struct net_device *netdev = platform_get_drvdata(pdev); |
1719 | struct macb *bp = netdev_priv(netdev); | 1719 | struct macb *bp = netdev_priv(netdev); |
1720 | 1720 | ||
1721 | clk_enable(bp->pclk); | 1721 | clk_prepare_enable(bp->pclk); |
1722 | clk_enable(bp->hclk); | 1722 | clk_prepare_enable(bp->hclk); |
1723 | 1723 | ||
1724 | netif_device_attach(netdev); | 1724 | netif_device_attach(netdev); |
1725 | 1725 | ||