public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: emaclite: Use platform resource table
@ 2013-06-04 10:03 Michal Simek
  2013-06-04 20:10 ` Arnd Bergmann
  0 siblings, 1 reply; 3+ messages in thread
From: Michal Simek @ 2013-06-04 10:03 UTC (permalink / raw)
  To: linux-kernel
  Cc: Michal Simek, Michal Simek, Arnd Bergmann, David S. Miller,
	Bill Pemberton, Greg Kroah-Hartman, netdev

[-- Attachment #1: Type: text/plain, Size: 4271 bytes --]

Read data directly from platform recource table
and do not use of_irq_to_resource().
Also use devm_request_and_ioremap() for probe
functions simplification.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Based on my discussion with Arnd
"[PATCH] net: emaclite: include linux/of_irq.h"

---
 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 67 +++++++++------------------
 1 file changed, 22 insertions(+), 45 deletions(-)

diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
index aa14d8a..f87d11c 100644
--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
+++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
@@ -1074,13 +1074,14 @@ static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)
  * This function un maps the IO region of the Emaclite device and frees the net
  * device.
  */
-static void xemaclite_remove_ndev(struct net_device *ndev)
+static void xemaclite_remove_ndev(struct net_device *ndev,
+				  struct platform_device *pdev)
 {
 	if (ndev) {
 		struct net_local *lp = netdev_priv(ndev);

 		if (lp->base_addr)
-			iounmap((void __iomem __force *) (lp->base_addr));
+			devm_iounmap(&pdev->dev, lp->base_addr);
 		free_netdev(ndev);
 	}
 }
@@ -1126,8 +1127,7 @@ static struct net_device_ops xemaclite_netdev_ops;
  */
 static int xemaclite_of_probe(struct platform_device *ofdev)
 {
-	struct resource r_irq; /* Interrupt resources */
-	struct resource r_mem; /* IO mem resources */
+	struct resource *res;
 	struct net_device *ndev = NULL;
 	struct net_local *lp = NULL;
 	struct device *dev = &ofdev->dev;
@@ -1137,20 +1137,6 @@ static int xemaclite_of_probe(struct platform_device *ofdev)

 	dev_info(dev, "Device Tree Probing\n");

-	/* Get iospace for the device */
-	rc = of_address_to_resource(ofdev->dev.of_node, 0, &r_mem);
-	if (rc) {
-		dev_err(dev, "invalid address\n");
-		return rc;
-	}
-
-	/* Get IRQ for the device */
-	rc = of_irq_to_resource(ofdev->dev.of_node, 0, &r_irq);
-	if (!rc) {
-		dev_err(dev, "no IRQ found\n");
-		return rc;
-	}
-
 	/* Create an ethernet device instance */
 	ndev = alloc_etherdev(sizeof(struct net_local));
 	if (!ndev)
@@ -1159,29 +1145,25 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
 	dev_set_drvdata(dev, ndev);
 	SET_NETDEV_DEV(ndev, &ofdev->dev);

-	ndev->irq = r_irq.start;
-	ndev->mem_start = r_mem.start;
-	ndev->mem_end = r_mem.end;
-
 	lp = netdev_priv(ndev);
 	lp->ndev = ndev;

-	if (!request_mem_region(ndev->mem_start,
-				ndev->mem_end - ndev->mem_start + 1,
-				DRIVER_NAME)) {
-		dev_err(dev, "Couldn't lock memory region at %p\n",
-			(void *)ndev->mem_start);
-		rc = -EBUSY;
-		goto error2;
+	/* Get IRQ for the device */
+	res = platform_get_resource(ofdev, IORESOURCE_IRQ, 0);
+	if (!res) {
+		dev_err(dev, "no IRQ found\n");
+		goto error;
 	}

-	/* Get the virtual base address for the device */
-	lp->base_addr = ioremap(r_mem.start, resource_size(&r_mem));
-	if (NULL == lp->base_addr) {
-		dev_err(dev, "EmacLite: Could not allocate iomem\n");
-		rc = -EIO;
-		goto error1;
-	}
+	ndev->irq = res->start;
+
+	res = platform_get_resource(ofdev, IORESOURCE_MEM, 0);
+	lp->base_addr = devm_request_and_ioremap(&ofdev->dev, res);
+	if (!lp->base_addr)
+		goto error;
+
+	ndev->mem_start = res->start;
+	ndev->mem_end = res->end;

 	spin_lock_init(&lp->reset_lock);
 	lp->next_tx_buf_to_use = 0x0;
@@ -1219,7 +1201,7 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
 	if (rc) {
 		dev_err(dev,
 			"Cannot register network device, aborting\n");
-		goto error1;
+		goto error;
 	}

 	dev_info(dev,
@@ -1228,11 +1210,8 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
 		 (unsigned int __force)lp->base_addr, ndev->irq);
 	return 0;

-error1:
-	release_mem_region(ndev->mem_start, resource_size(&r_mem));
-
-error2:
-	xemaclite_remove_ndev(ndev);
+error:
+	xemaclite_remove_ndev(ndev, ofdev);
 	return rc;
 }

@@ -1267,9 +1246,7 @@ static int xemaclite_of_remove(struct platform_device *of_dev)
 		of_node_put(lp->phy_node);
 	lp->phy_node = NULL;

-	release_mem_region(ndev->mem_start, ndev->mem_end-ndev->mem_start + 1);
-
-	xemaclite_remove_ndev(ndev);
+	xemaclite_remove_ndev(ndev, of_dev);
 	dev_set_drvdata(dev, NULL);

 	return 0;
--
1.8.2.3


[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] net: emaclite: Use platform resource table
  2013-06-04 10:03 [PATCH] net: emaclite: Use platform resource table Michal Simek
@ 2013-06-04 20:10 ` Arnd Bergmann
  2013-06-05  0:39   ` David Miller
  0 siblings, 1 reply; 3+ messages in thread
From: Arnd Bergmann @ 2013-06-04 20:10 UTC (permalink / raw)
  To: Michal Simek
  Cc: linux-kernel, Michal Simek, David S. Miller, Bill Pemberton,
	Greg Kroah-Hartman, netdev

On Tuesday 04 June 2013, Michal Simek wrote:
>   Read data directly from platform recource table
> and do not use of_irq_to_resource().
> Also use devm_request_and_ioremap() for probe
> functions simplification.
> 
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
> Based on my discussion with Arnd
> "[PATCH] net: emaclite: include linux/of_irq.h"
> 

Acked-by: Arnd Bergmann <arnd@arndb.de>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] net: emaclite: Use platform resource table
  2013-06-04 20:10 ` Arnd Bergmann
@ 2013-06-05  0:39   ` David Miller
  0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2013-06-05  0:39 UTC (permalink / raw)
  To: arnd; +Cc: michal.simek, linux-kernel, monstr, wfp5p, gregkh, netdev

From: Arnd Bergmann <arnd@arndb.de>
Date: Tue, 4 Jun 2013 22:10:05 +0200

> On Tuesday 04 June 2013, Michal Simek wrote:
>>   Read data directly from platform recource table
>> and do not use of_irq_to_resource().
>> Also use devm_request_and_ioremap() for probe
>> functions simplification.
>> 
>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>> ---
>> Based on my discussion with Arnd
>> "[PATCH] net: emaclite: include linux/of_irq.h"
>> 
> 
> Acked-by: Arnd Bergmann <arnd@arndb.de>

Applied to net-next, thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-06-05  0:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-04 10:03 [PATCH] net: emaclite: Use platform resource table Michal Simek
2013-06-04 20:10 ` Arnd Bergmann
2013-06-05  0:39   ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox