aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bcm63xx_enet.c
diff options
context:
space:
mode:
authorJonas Gorski <jogo@openwrt.org>2013-03-09 22:57:47 -0500
committerDavid S. Miller <davem@davemloft.net>2013-03-10 16:57:01 -0400
commit1c03da0522e91617fcadeb7dd596ee41f2b116b9 (patch)
tree84c465a7db8277be96b78fc787389b1d65a07b57 /drivers/net/ethernet/broadcom/bcm63xx_enet.c
parente41eef8f317a4cfe43ec4de2527703a2e6f16087 (diff)
bcm63xx_enet: use managed io memory allocations
Signed-off-by: Jonas Gorski <jogo@openwrt.org> Acked-by: Kevin Cernekee <cernekee@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bcm63xx_enet.c')
-rw-r--r--drivers/net/ethernet/broadcom/bcm63xx_enet.c43
1 files changed, 7 insertions, 36 deletions
diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
index 7d81e059e811..8256b55883e2 100644
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
@@ -1619,7 +1619,6 @@ static int bcm_enet_probe(struct platform_device *pdev)
1619 struct resource *res_mem, *res_irq, *res_irq_rx, *res_irq_tx; 1619 struct resource *res_mem, *res_irq, *res_irq_rx, *res_irq_tx;
1620 struct mii_bus *bus; 1620 struct mii_bus *bus;
1621 const char *clk_name; 1621 const char *clk_name;
1622 unsigned int iomem_size;
1623 int i, ret; 1622 int i, ret;
1624 1623
1625 /* stop if shared driver failed, assume driver->probe will be 1624 /* stop if shared driver failed, assume driver->probe will be
@@ -1644,17 +1643,12 @@ static int bcm_enet_probe(struct platform_device *pdev)
1644 if (ret) 1643 if (ret)
1645 goto out; 1644 goto out;
1646 1645
1647 iomem_size = resource_size(res_mem); 1646 priv->base = devm_request_and_ioremap(&pdev->dev, res_mem);
1648 if (!request_mem_region(res_mem->start, iomem_size, "bcm63xx_enet")) {
1649 ret = -EBUSY;
1650 goto out;
1651 }
1652
1653 priv->base = ioremap(res_mem->start, iomem_size);
1654 if (priv->base == NULL) { 1647 if (priv->base == NULL) {
1655 ret = -ENOMEM; 1648 ret = -ENOMEM;
1656 goto out_release_mem; 1649 goto out;
1657 } 1650 }
1651
1658 dev->irq = priv->irq = res_irq->start; 1652 dev->irq = priv->irq = res_irq->start;
1659 priv->irq_rx = res_irq_rx->start; 1653 priv->irq_rx = res_irq_rx->start;
1660 priv->irq_tx = res_irq_tx->start; 1654 priv->irq_tx = res_irq_tx->start;
@@ -1674,7 +1668,7 @@ static int bcm_enet_probe(struct platform_device *pdev)
1674 priv->mac_clk = clk_get(&pdev->dev, clk_name); 1668 priv->mac_clk = clk_get(&pdev->dev, clk_name);
1675 if (IS_ERR(priv->mac_clk)) { 1669 if (IS_ERR(priv->mac_clk)) {
1676 ret = PTR_ERR(priv->mac_clk); 1670 ret = PTR_ERR(priv->mac_clk);
1677 goto out_unmap; 1671 goto out;
1678 } 1672 }
1679 clk_enable(priv->mac_clk); 1673 clk_enable(priv->mac_clk);
1680 1674
@@ -1814,12 +1808,6 @@ out_uninit_hw:
1814out_put_clk_mac: 1808out_put_clk_mac:
1815 clk_disable(priv->mac_clk); 1809 clk_disable(priv->mac_clk);
1816 clk_put(priv->mac_clk); 1810 clk_put(priv->mac_clk);
1817
1818out_unmap:
1819 iounmap(priv->base);
1820
1821out_release_mem:
1822 release_mem_region(res_mem->start, iomem_size);
1823out: 1811out:
1824 free_netdev(dev); 1812 free_netdev(dev);
1825 return ret; 1813 return ret;
@@ -1833,7 +1821,6 @@ static int bcm_enet_remove(struct platform_device *pdev)
1833{ 1821{
1834 struct bcm_enet_priv *priv; 1822 struct bcm_enet_priv *priv;
1835 struct net_device *dev; 1823 struct net_device *dev;
1836 struct resource *res;
1837 1824
1838 /* stop netdevice */ 1825 /* stop netdevice */
1839 dev = platform_get_drvdata(pdev); 1826 dev = platform_get_drvdata(pdev);
@@ -1856,11 +1843,6 @@ static int bcm_enet_remove(struct platform_device *pdev)
1856 bcm_enet_mdio_write_mii); 1843 bcm_enet_mdio_write_mii);
1857 } 1844 }
1858 1845
1859 /* release device resources */
1860 iounmap(priv->base);
1861 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1862 release_mem_region(res->start, resource_size(res));
1863
1864 /* disable hw block clocks */ 1846 /* disable hw block clocks */
1865 if (priv->phy_clk) { 1847 if (priv->phy_clk) {
1866 clk_disable(priv->phy_clk); 1848 clk_disable(priv->phy_clk);
@@ -1889,31 +1871,20 @@ struct platform_driver bcm63xx_enet_driver = {
1889static int bcm_enet_shared_probe(struct platform_device *pdev) 1871static int bcm_enet_shared_probe(struct platform_device *pdev)
1890{ 1872{
1891 struct resource *res; 1873 struct resource *res;
1892 unsigned int iomem_size;
1893 1874
1894 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1875 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1895 if (!res) 1876 if (!res)
1896 return -ENODEV; 1877 return -ENODEV;
1897 1878
1898 iomem_size = resource_size(res); 1879 bcm_enet_shared_base = devm_request_and_ioremap(&pdev->dev, res);
1899 if (!request_mem_region(res->start, iomem_size, "bcm63xx_enet_dma")) 1880 if (!bcm_enet_shared_base)
1900 return -EBUSY;
1901
1902 bcm_enet_shared_base = ioremap(res->start, iomem_size);
1903 if (!bcm_enet_shared_base) {
1904 release_mem_region(res->start, iomem_size);
1905 return -ENOMEM; 1881 return -ENOMEM;
1906 } 1882
1907 return 0; 1883 return 0;
1908} 1884}
1909 1885
1910static int bcm_enet_shared_remove(struct platform_device *pdev) 1886static int bcm_enet_shared_remove(struct platform_device *pdev)
1911{ 1887{
1912 struct resource *res;
1913
1914 iounmap(bcm_enet_shared_base);
1915 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1916 release_mem_region(res->start, resource_size(res));
1917 return 0; 1888 return 0;
1918} 1889}
1919 1890