brcm63xx: switch to 3.9 kernel
[openwrt.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