summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx/patches-3.8/019-bcm63xx_enet-use-managed-io-memory-allocations.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx/patches-3.8/019-bcm63xx_enet-use-managed-io-memory-allocations.patch')
-rw-r--r--target/linux/brcm63xx/patches-3.8/019-bcm63xx_enet-use-managed-io-memory-allocations.patch118
1 files changed, 118 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-3.8/019-bcm63xx_enet-use-managed-io-memory-allocations.patch b/target/linux/brcm63xx/patches-3.8/019-bcm63xx_enet-use-managed-io-memory-allocations.patch
new file mode 100644
index 000000000..717bcab5c
--- /dev/null
+++ b/target/linux/brcm63xx/patches-3.8/019-bcm63xx_enet-use-managed-io-memory-allocations.patch
@@ -0,0 +1,118 @@
+From 80b0356aea30e9fc9e075d31c2bf37e7cbfea8c9 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Sun, 10 Mar 2013 13:59:55 +0100
+Subject: [PATCH 1/3] bcm63xx_enet: use managed io memory allocations
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ drivers/net/ethernet/broadcom/bcm63xx_enet.c | 43 +++++---------------------
+ 1 file changed, 7 insertions(+), 36 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
++++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
+@@ -1620,7 +1620,6 @@ static int bcm_enet_probe(struct platfor
+ struct resource *res_mem, *res_irq, *res_irq_rx, *res_irq_tx;
+ struct mii_bus *bus;
+ const char *clk_name;
+- unsigned int iomem_size;
+ int i, ret;
+
+ /* stop if shared driver failed, assume driver->probe will be
+@@ -1645,17 +1644,12 @@ static int bcm_enet_probe(struct platfor
+ if (ret)
+ goto out;
+
+- iomem_size = resource_size(res_mem);
+- if (!request_mem_region(res_mem->start, iomem_size, "bcm63xx_enet")) {
+- ret = -EBUSY;
+- goto out;
+- }
+-
+- priv->base = ioremap(res_mem->start, iomem_size);
++ priv->base = devm_request_and_ioremap(&pdev->dev, res_mem);
+ if (priv->base == NULL) {
+ ret = -ENOMEM;
+- goto out_release_mem;
++ goto out;
+ }
++
+ dev->irq = priv->irq = res_irq->start;
+ priv->irq_rx = res_irq_rx->start;
+ priv->irq_tx = res_irq_tx->start;
+@@ -1675,7 +1669,7 @@ static int bcm_enet_probe(struct platfor
+ priv->mac_clk = clk_get(&pdev->dev, clk_name);
+ if (IS_ERR(priv->mac_clk)) {
+ ret = PTR_ERR(priv->mac_clk);
+- goto out_unmap;
++ goto out;
+ }
+ clk_enable(priv->mac_clk);
+
+@@ -1815,12 +1809,6 @@ out_uninit_hw:
+ out_put_clk_mac:
+ clk_disable(priv->mac_clk);
+ clk_put(priv->mac_clk);
+-
+-out_unmap:
+- iounmap(priv->base);
+-
+-out_release_mem:
+- release_mem_region(res_mem->start, iomem_size);
+ out:
+ free_netdev(dev);
+ return ret;
+@@ -1834,7 +1822,6 @@ static int bcm_enet_remove(struct platfo
+ {
+ struct bcm_enet_priv *priv;
+ struct net_device *dev;
+- struct resource *res;
+
+ /* stop netdevice */
+ dev = platform_get_drvdata(pdev);
+@@ -1857,11 +1844,6 @@ static int bcm_enet_remove(struct platfo
+ bcm_enet_mdio_write_mii);
+ }
+
+- /* release device resources */
+- iounmap(priv->base);
+- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+- release_mem_region(res->start, resource_size(res));
+-
+ /* disable hw block clocks */
+ if (priv->phy_clk) {
+ clk_disable(priv->phy_clk);
+@@ -1890,31 +1872,20 @@ struct platform_driver bcm63xx_enet_driv
+ static int bcm_enet_shared_probe(struct platform_device *pdev)
+ {
+ struct resource *res;
+- unsigned int iomem_size;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res)
+ return -ENODEV;
+
+- iomem_size = resource_size(res);
+- if (!request_mem_region(res->start, iomem_size, "bcm63xx_enet_dma"))
+- return -EBUSY;
+-
+- bcm_enet_shared_base = ioremap(res->start, iomem_size);
+- if (!bcm_enet_shared_base) {
+- release_mem_region(res->start, iomem_size);
++ bcm_enet_shared_base = devm_request_and_ioremap(&pdev->dev, res);
++ if (!bcm_enet_shared_base)
+ return -ENOMEM;
+- }
++
+ return 0;
+ }
+
+ static int bcm_enet_shared_remove(struct platform_device *pdev)
+ {
+- struct resource *res;
+-
+- iounmap(bcm_enet_shared_base);
+- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+- release_mem_region(res->start, resource_size(res));
+ return 0;
+ }
+