brcm63xx: switch to 3.9 kernel
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.8 / 019-bcm63xx_enet-use-managed-io-memory-allocations.patch
1 From 80b0356aea30e9fc9e075d31c2bf37e7cbfea8c9 Mon Sep 17 00:00:00 2001
2 From: Jonas Gorski <jogo@openwrt.org>
3 Date: Sun, 10 Mar 2013 13:59:55 +0100
4 Subject: [PATCH 1/3] bcm63xx_enet: use managed io memory allocations
5
6 Signed-off-by: Jonas Gorski <jogo@openwrt.org>
7 ---
8 drivers/net/ethernet/broadcom/bcm63xx_enet.c | 43 +++++---------------------
9 1 file changed, 7 insertions(+), 36 deletions(-)
10
11 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
12 +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
13 @@ -1620,7 +1620,6 @@ static int bcm_enet_probe(struct platfor
14 struct resource *res_mem, *res_irq, *res_irq_rx, *res_irq_tx;
15 struct mii_bus *bus;
16 const char *clk_name;
17 - unsigned int iomem_size;
18 int i, ret;
19
20 /* stop if shared driver failed, assume driver->probe will be
21 @@ -1645,17 +1644,12 @@ static int bcm_enet_probe(struct platfor
22 if (ret)
23 goto out;
24
25 - iomem_size = resource_size(res_mem);
26 - if (!request_mem_region(res_mem->start, iomem_size, "bcm63xx_enet")) {
27 - ret = -EBUSY;
28 - goto out;
29 - }
30 -
31 - priv->base = ioremap(res_mem->start, iomem_size);
32 + priv->base = devm_request_and_ioremap(&pdev->dev, res_mem);
33 if (priv->base == NULL) {
34 ret = -ENOMEM;
35 - goto out_release_mem;
36 + goto out;
37 }
38 +
39 dev->irq = priv->irq = res_irq->start;
40 priv->irq_rx = res_irq_rx->start;
41 priv->irq_tx = res_irq_tx->start;
42 @@ -1675,7 +1669,7 @@ static int bcm_enet_probe(struct platfor
43 priv->mac_clk = clk_get(&pdev->dev, clk_name);
44 if (IS_ERR(priv->mac_clk)) {
45 ret = PTR_ERR(priv->mac_clk);
46 - goto out_unmap;
47 + goto out;
48 }
49 clk_enable(priv->mac_clk);
50
51 @@ -1815,12 +1809,6 @@ out_uninit_hw:
52 out_put_clk_mac:
53 clk_disable(priv->mac_clk);
54 clk_put(priv->mac_clk);
55 -
56 -out_unmap:
57 - iounmap(priv->base);
58 -
59 -out_release_mem:
60 - release_mem_region(res_mem->start, iomem_size);
61 out:
62 free_netdev(dev);
63 return ret;
64 @@ -1834,7 +1822,6 @@ static int bcm_enet_remove(struct platfo
65 {
66 struct bcm_enet_priv *priv;
67 struct net_device *dev;
68 - struct resource *res;
69
70 /* stop netdevice */
71 dev = platform_get_drvdata(pdev);
72 @@ -1857,11 +1844,6 @@ static int bcm_enet_remove(struct platfo
73 bcm_enet_mdio_write_mii);
74 }
75
76 - /* release device resources */
77 - iounmap(priv->base);
78 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
79 - release_mem_region(res->start, resource_size(res));
80 -
81 /* disable hw block clocks */
82 if (priv->phy_clk) {
83 clk_disable(priv->phy_clk);
84 @@ -1890,31 +1872,20 @@ struct platform_driver bcm63xx_enet_driv
85 static int bcm_enet_shared_probe(struct platform_device *pdev)
86 {
87 struct resource *res;
88 - unsigned int iomem_size;
89
90 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
91 if (!res)
92 return -ENODEV;
93
94 - iomem_size = resource_size(res);
95 - if (!request_mem_region(res->start, iomem_size, "bcm63xx_enet_dma"))
96 - return -EBUSY;
97 -
98 - bcm_enet_shared_base = ioremap(res->start, iomem_size);
99 - if (!bcm_enet_shared_base) {
100 - release_mem_region(res->start, iomem_size);
101 + bcm_enet_shared_base = devm_request_and_ioremap(&pdev->dev, res);
102 + if (!bcm_enet_shared_base)
103 return -ENOMEM;
104 - }
105 +
106 return 0;
107 }
108
109 static int bcm_enet_shared_remove(struct platform_device *pdev)
110 {
111 - struct resource *res;
112 -
113 - iounmap(bcm_enet_shared_base);
114 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
115 - release_mem_region(res->start, resource_size(res));
116 return 0;
117 }
118