mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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;
 | |
|  }
 | |
|  
 |