netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* DM9000 patches
@ 2008-04-28 15:13 Ben Dooks
  2008-04-28 15:21 ` Jeff Garzik
  2008-05-06 16:25 ` Jeff Garzik
  0 siblings, 2 replies; 11+ messages in thread
From: Ben Dooks @ 2008-04-28 15:13 UTC (permalink / raw)
  To: Linux Networking; +Cc: jeff, akpm

I would like to find out the state of the DM9000 patches
which where submitted. Is it possible for these to be
queued either into the network driver tree, or into -mm?

The messages are:

http://marc.info/?l=linux-netdev&m=120818415110509&w=2
http://marc.info/?l=linux-netdev&m=120851343125997&w=2
http://marc.info/?l=linux-netdev&m=120851419927097&w=2

-- 
Ben (ben@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

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

* Re: DM9000 patches
  2008-04-28 15:13 DM9000 patches Ben Dooks
@ 2008-04-28 15:21 ` Jeff Garzik
  2008-05-06 16:25 ` Jeff Garzik
  1 sibling, 0 replies; 11+ messages in thread
From: Jeff Garzik @ 2008-04-28 15:21 UTC (permalink / raw)
  To: Ben Dooks; +Cc: Linux Networking, akpm

Ben Dooks wrote:
> I would like to find out the state of the DM9000 patches
> which where submitted. Is it possible for these to be
> queued either into the network driver tree, or into -mm?
> 
> The messages are:
> 
> http://marc.info/?l=linux-netdev&m=120818415110509&w=2

this is in the queue


> http://marc.info/?l=linux-netdev&m=120851343125997&w=2
> http://marc.info/?l=linux-netdev&m=120851419927097&w=2

these two are not.  It sounded like your comments may have impacted your 
ack, and also, when there are multiple patches in the air from multiple 
people, it's generally up to the maintainer to sort them all out and 
send them in a batch.

Lastly, a CC to me would be quite helpful.  I tend to scan subject lines 
on netdev rather than read every message, and sometimes patches can get 
missed.

	Jeff



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

* Re: DM9000 patches
  2008-04-28 15:13 DM9000 patches Ben Dooks
  2008-04-28 15:21 ` Jeff Garzik
@ 2008-05-06 16:25 ` Jeff Garzik
  2008-05-08 10:28   ` Ben Dooks
                     ` (3 more replies)
  1 sibling, 4 replies; 11+ messages in thread
From: Jeff Garzik @ 2008-05-06 16:25 UTC (permalink / raw)
  To: Ben Dooks; +Cc: Linux Networking, akpm

Ben Dooks wrote:
> I would like to find out the state of the DM9000 patches
> which where submitted. Is it possible for these to be
> queued either into the network driver tree, or into -mm?
> 
> The messages are:
> 
> http://marc.info/?l=linux-netdev&m=120818415110509&w=2
> http://marc.info/?l=linux-netdev&m=120851343125997&w=2
> http://marc.info/?l=linux-netdev&m=120851419927097&w=2

if there is anything missing upstream, please resend...



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

* Re: DM9000 patches
  2008-05-06 16:25 ` Jeff Garzik
@ 2008-05-08 10:28   ` Ben Dooks
  2008-05-08 10:33   ` DM9000: Add __devinit and __devexit attributes to probe and remove Ben Dooks
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 11+ messages in thread
From: Ben Dooks @ 2008-05-08 10:28 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Ben Dooks, Linux Networking, akpm

On Tue, May 06, 2008 at 12:25:03PM -0400, Jeff Garzik wrote:
> Ben Dooks wrote:
>> I would like to find out the state of the DM9000 patches
>> which where submitted. Is it possible for these to be
>> queued either into the network driver tree, or into -mm?
>>
>> The messages are:
>>
>> http://marc.info/?l=linux-netdev&m=120818415110509&w=2
>> http://marc.info/?l=linux-netdev&m=120851343125997&w=2
>> http://marc.info/?l=linux-netdev&m=120851419927097&w=2
>
> if there is anything missing upstream, please resend...

As a just in case, as I can't see that any of these have
made it upstream, I'll repost the three patches that I would
like to see applied.

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

* DM9000: Add __devinit and __devexit attributes to probe and remove
  2008-05-06 16:25 ` Jeff Garzik
  2008-05-08 10:28   ` Ben Dooks
@ 2008-05-08 10:33   ` Ben Dooks
  2008-05-13  5:18     ` Jeff Garzik
  2008-05-08 10:35   ` DM9000: Update and fix driver debugging messages Ben Dooks
  2008-05-08 10:36   ` DM9000: Use delayed work to update MII PHY state Ben Dooks
  3 siblings, 1 reply; 11+ messages in thread
From: Ben Dooks @ 2008-05-08 10:33 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Ben Dooks, Linux Networking, akpm

From: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>

There were missing __dev* annotations for the dm9000_probe() 
and dm9000_drv_remove() functions.

Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>

---
 drivers/net/dm9000.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index e668b37..7bc16d2 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -503,7 +503,7 @@ dm9000_release_board(struct platform_device *pdev, struct board_info *db)
 /*
  * Search DM9000 board, allocate space and register it
  */
-static int
+static int __devinit
 dm9000_probe(struct platform_device *pdev)
 {
 	struct dm9000_plat_data *pdata = pdev->dev.platform_data;
@@ -1376,7 +1376,7 @@ dm9000_drv_resume(struct platform_device *dev)
 	return 0;
 }
 
-static int
+static int __devexit
 dm9000_drv_remove(struct platform_device *pdev)
 {
 	struct net_device *ndev = platform_get_drvdata(pdev);
@@ -1397,7 +1397,7 @@ static struct platform_driver dm9000_driver = {
 		.owner	 = THIS_MODULE,
 	},
 	.probe   = dm9000_probe,
-	.remove  = dm9000_drv_remove,
+	.remove  = __devexit_p(dm9000_drv_remove),
 	.suspend = dm9000_drv_suspend,
 	.resume  = dm9000_drv_resume,
 };
-- 
1.5.4.1

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* DM9000: Update and fix driver debugging messages
  2008-05-06 16:25 ` Jeff Garzik
  2008-05-08 10:28   ` Ben Dooks
  2008-05-08 10:33   ` DM9000: Add __devinit and __devexit attributes to probe and remove Ben Dooks
@ 2008-05-08 10:35   ` Ben Dooks
  2008-05-08 10:36   ` DM9000: Use delayed work to update MII PHY state Ben Dooks
  3 siblings, 0 replies; 11+ messages in thread
From: Ben Dooks @ 2008-05-08 10:35 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Ben Dooks, Linux Networking, akpm

From: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>

There was a missing newline in a dev_dbg() message.  Values read
from/written into PHY registers might be for interest too, so I added
new dbg messages there.

Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
---
 drivers/net/dm9000.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index 7bc16d2..e4af7a9 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -525,7 +525,7 @@ dm9000_probe(struct platform_device *pdev)
 
 	SET_NETDEV_DEV(ndev, &pdev->dev);
 
-	dev_dbg(&pdev->dev, "dm9000_probe()");
+	dev_dbg(&pdev->dev, "dm9000_probe()\n");
 
 	/* setup board info structure */
 	db = (struct board_info *) ndev->priv;
@@ -1292,6 +1292,8 @@ dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg)
 	spin_unlock_irqrestore(&db->lock,flags);
 
 	mutex_unlock(&db->addr_lock);
+
+	dm9000_dbg(db, 5, "phy_read[%02x] -> %04x\n", reg, ret);
 	return ret;
 }
 
@@ -1305,6 +1307,7 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value)
 	unsigned long flags;
 	unsigned long reg_save;
 
+	dm9000_dbg(db, 5, "phy_write[%02x] = %04x\n", reg, value);
 	mutex_lock(&db->addr_lock);
 
 	spin_lock_irqsave(&db->lock,flags);


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

* DM9000: Use delayed work to update MII PHY state
  2008-05-06 16:25 ` Jeff Garzik
                     ` (2 preceding siblings ...)
  2008-05-08 10:35   ` DM9000: Update and fix driver debugging messages Ben Dooks
@ 2008-05-08 10:36   ` Ben Dooks
  2008-05-08 20:11     ` Andrew Morton
  2008-05-08 20:18     ` Andrew Morton
  3 siblings, 2 replies; 11+ messages in thread
From: Ben Dooks @ 2008-05-08 10:36 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Ben Dooks, Linux Networking, akpm

Periodically check the MII PHY status to ensure that the
network layer's link status is updated and the user informed
of any changes.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>

Index: linux-2.6.25-rc9-quilt2/drivers/net/dm9000.c
===================================================================
--- linux-2.6.25-rc9-quilt2.orig/drivers/net/dm9000.c	2008-04-14 16:41:12.000000000 +0100
+++ linux-2.6.25-rc9-quilt2/drivers/net/dm9000.c	2008-04-15 00:33:08.000000000 +0100
@@ -117,6 +117,9 @@ typedef struct board_info {
 
 	struct mutex	 addr_lock;	/* phy and eeprom access lock */
 
+	struct delayed_work phy_poll;
+	struct net_device  *ndev;
+
 	spinlock_t lock;
 
 	struct mii_if_info mii;
@@ -297,6 +300,10 @@ static void dm9000_set_io(struct board_i
 	}
 }
 
+static void dm9000_schedule_poll(board_info_t *db)
+{
+	schedule_delayed_work(&db->phy_poll, HZ * 2);
+}
 
 /* Our watchdog timed out. Called by the networking layer */
 static void dm9000_timeout(struct net_device *dev)
@@ -465,6 +472,17 @@ static const struct ethtool_ops dm9000_e
  	.set_eeprom		= dm9000_set_eeprom,
 };
 
+static void
+dm9000_poll_work(struct work_struct *w)
+{
+	struct delayed_work *dw = container_of(w, struct delayed_work, work);
+	board_info_t *db = container_of(dw, board_info_t, phy_poll);
+
+	mii_check_media(&db->mii, netif_msg_link(db), 0);
+	
+	if (netif_running(db->ndev))
+		dm9000_schedule_poll(db);
+}
 
 /* dm9000_release_board
  *
@@ -532,10 +550,14 @@ dm9000_probe(struct platform_device *pde
 	memset(db, 0, sizeof (*db));
 
 	db->dev = &pdev->dev;
+	db->ndev = ndev;
 
 	spin_lock_init(&db->lock);
 	mutex_init(&db->addr_lock);
 
+	INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work);
+
+
 	if (pdev->num_resources < 2) {
 		ret = -ENODEV;
 		goto out;
@@ -761,6 +783,8 @@ dm9000_open(struct net_device *dev)
 
 	mii_check_media(&db->mii, netif_msg_link(db), 1);
 	netif_start_queue(dev);
+	
+	dm9000_schedule_poll(db);
 
 	return 0;
 }
@@ -879,6 +903,8 @@ dm9000_stop(struct net_device *ndev)
 	if (netif_msg_ifdown(db))
 		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
 
+	cancel_delayed_work(&db->phy_poll);
+
 	netif_stop_queue(ndev);
 	netif_carrier_off(ndev);
 

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

* Re: DM9000: Use delayed work to update MII PHY state
  2008-05-08 10:36   ` DM9000: Use delayed work to update MII PHY state Ben Dooks
@ 2008-05-08 20:11     ` Andrew Morton
  2008-05-08 20:18     ` Andrew Morton
  1 sibling, 0 replies; 11+ messages in thread
From: Andrew Morton @ 2008-05-08 20:11 UTC (permalink / raw)
  To: Ben Dooks; +Cc: jeff, ben-linux, netdev

On Thu, 8 May 2008 11:36:42 +0100
Ben Dooks <ben-linux@fluff.org> wrote:

> @@ -879,6 +903,8 @@ dm9000_stop(struct net_device *ndev)
>  	if (netif_msg_ifdown(db))
>  		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
>  
> +	cancel_delayed_work(&db->phy_poll);

I think this should be cancel_delayed_work_sync().

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

* Re: DM9000: Use delayed work to update MII PHY state
  2008-05-08 10:36   ` DM9000: Use delayed work to update MII PHY state Ben Dooks
  2008-05-08 20:11     ` Andrew Morton
@ 2008-05-08 20:18     ` Andrew Morton
  2008-05-12 20:27       ` Ben Dooks
  1 sibling, 1 reply; 11+ messages in thread
From: Andrew Morton @ 2008-05-08 20:18 UTC (permalink / raw)
  To: Ben Dooks; +Cc: jeff, ben-linux, netdev, Michael Abbott, Daniel Mack

On Thu, 8 May 2008 11:36:42 +0100
Ben Dooks <ben-linux@fluff.org> wrote:

> Periodically check the MII PHY status to ensure that the
> network layer's link status is updated and the user informed
> of any changes.
> 
> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
> 
> Index: linux-2.6.25-rc9-quilt2/drivers/net/dm9000.c
> ===================================================================
> --- linux-2.6.25-rc9-quilt2.orig/drivers/net/dm9000.c	2008-04-14 16:41:12.000000000 +0100
> +++ linux-2.6.25-rc9-quilt2/drivers/net/dm9000.c	2008-04-15 00:33:08.000000000 +0100
> @@ -117,6 +117,9 @@ typedef struct board_info {
>  
>  	struct mutex	 addr_lock;	/* phy and eeprom access lock */
>  
> +	struct delayed_work phy_poll;
> +	struct net_device  *ndev;
> +
>  	spinlock_t lock;
>  
>  	struct mii_if_info mii;
> @@ -297,6 +300,10 @@ static void dm9000_set_io(struct board_i
>  	}
>  }
>  
> +static void dm9000_schedule_poll(board_info_t *db)
> +{
> +	schedule_delayed_work(&db->phy_poll, HZ * 2);
> +}
>  
>  /* Our watchdog timed out. Called by the networking layer */
>  static void dm9000_timeout(struct net_device *dev)
> @@ -465,6 +472,17 @@ static const struct ethtool_ops dm9000_e
>   	.set_eeprom		= dm9000_set_eeprom,
>  };
>  
> +static void
> +dm9000_poll_work(struct work_struct *w)
> +{
> +	struct delayed_work *dw = container_of(w, struct delayed_work, work);
> +	board_info_t *db = container_of(dw, board_info_t, phy_poll);
> +
> +	mii_check_media(&db->mii, netif_msg_link(db), 0);
> +	
> +	if (netif_running(db->ndev))
> +		dm9000_schedule_poll(db);
> +}
>  
>  /* dm9000_release_board
>   *
> @@ -532,10 +550,14 @@ dm9000_probe(struct platform_device *pde
>  	memset(db, 0, sizeof (*db));
>  
>  	db->dev = &pdev->dev;
> +	db->ndev = ndev;
>  
>  	spin_lock_init(&db->lock);
>  	mutex_init(&db->addr_lock);
>  
> +	INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work);
> +
> +
>  	if (pdev->num_resources < 2) {
>  		ret = -ENODEV;
>  		goto out;
> @@ -761,6 +783,8 @@ dm9000_open(struct net_device *dev)
>  
>  	mii_check_media(&db->mii, netif_msg_link(db), 1);
>  	netif_start_queue(dev);
> +	
> +	dm9000_schedule_poll(db);
>  
>  	return 0;
>  }
> @@ -879,6 +903,8 @@ dm9000_stop(struct net_device *ndev)
>  	if (netif_msg_ifdown(db))
>  		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
>  
> +	cancel_delayed_work(&db->phy_poll);
> +
>  	netif_stop_queue(ndev);
>  	netif_carrier_off(ndev);
>  

The above patch breaks dm9000-restore-mii-physical-polling-timer.patch,
below.

Perhaps they both fix the same thing?

From: Michael Abbott <michael.abbott@diamond.ac.uk>

In commit fcfa81aa3e8d885356139122fcb281487b983468 the timer for polling the
MII physical layer was removed because of conflicts with newly added mutexes. 
Unfortunately a side effect of this change is that the corresponding ethernet
layer is permanently reported as down: there is no other way to read the link
status.

This commit restores the timer, but uses the default work queue for polling.

Signed-off-by: Michael Abbott <michael.abbott@diamond.ac.uk>
Cc: Daniel Mack <daniel@caiaq.org>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 drivers/net/dm9000.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff -puN drivers/net/dm9000.c~dm9000-restore-mii-physical-polling-timer drivers/net/dm9000.c
--- a/drivers/net/dm9000.c~dm9000-restore-mii-physical-polling-timer
+++ a/drivers/net/dm9000.c
@@ -43,6 +43,7 @@
 /* Board/System/Debug information/definition ---------------- */
 
 #define DM9000_PHY		0x40	/* PHY address 0x01 */
+#define DM9000_TIMER_WUT	(HZ*2)	/* timer wakeup time : 2 second */
 
 #define CARDNAME "dm9000"
 #define PFX CARDNAME ": "
@@ -117,6 +118,8 @@ typedef struct board_info {
 
 	struct mutex	 addr_lock;	/* phy and eeprom access lock */
 
+	struct delayed_work timer;	/* Interface status timer. */
+
 	spinlock_t lock;
 
 	struct mii_if_info mii;
@@ -144,6 +147,7 @@ static int dm9000_start_xmit(struct sk_b
 static int dm9000_stop(struct net_device *);
 static int dm9000_ioctl(struct net_device *dev, struct ifreq *req, int cmd);
 
+static void dm9000_timer(struct work_struct * work);
 static void dm9000_init_dm9000(struct net_device *);
 
 static irqreturn_t dm9000_interrupt(int, void *);
@@ -762,6 +766,10 @@ dm9000_open(struct net_device *dev)
 	mii_check_media(&db->mii, netif_msg_link(db), 1);
 	netif_start_queue(dev);
 
+	/* Start the media status timer running. */
+	INIT_DELAYED_WORK(&db->timer, dm9000_timer);
+	schedule_delayed_work(&db->timer, DM9000_TIMER_WUT);
+
 	return 0;
 }
 
@@ -876,6 +884,9 @@ dm9000_stop(struct net_device *ndev)
 {
 	board_info_t *db = (board_info_t *) ndev->priv;
 
+	/* Delete the timer and make sure it's not running right now! */
+	cancel_delayed_work_sync(&db->timer);
+
 	if (netif_msg_ifdown(db))
 		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
 
@@ -965,6 +976,16 @@ dm9000_interrupt(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
+
+/* Two second timer to poll the media status -- the DM9000 doesn't provide a
+ * status interrupt, so this has to be polled. */
+static void dm9000_timer(struct work_struct * work)
+{
+	board_info_t *db = container_of(work, board_info_t, timer);
+	mii_check_media(&db->mii, netif_msg_link(db), 0);
+	schedule_delayed_work(&db->timer, DM9000_TIMER_WUT);
+}
+
 struct dm9000_rxhdr {
 	u8	RxPktReady;
 	u8	RxStatus;
_


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

* Re: DM9000: Use delayed work to update MII PHY state
  2008-05-08 20:18     ` Andrew Morton
@ 2008-05-12 20:27       ` Ben Dooks
  0 siblings, 0 replies; 11+ messages in thread
From: Ben Dooks @ 2008-05-12 20:27 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Ben Dooks, jeff, netdev, Michael Abbott, Daniel Mack

On Thu, May 08, 2008 at 01:18:29PM -0700, Andrew Morton wrote:
> On Thu, 8 May 2008 11:36:42 +0100
> Ben Dooks <ben-linux@fluff.org> wrote:
> 
> > Periodically check the MII PHY status to ensure that the
> > network layer's link status is updated and the user informed
> > of any changes.
> > 
> > Signed-off-by: Ben Dooks <ben-linux@fluff.org>
> > 
> > Index: linux-2.6.25-rc9-quilt2/drivers/net/dm9000.c
> > ===================================================================
> > --- linux-2.6.25-rc9-quilt2.orig/drivers/net/dm9000.c	2008-04-14 16:41:12.000000000 +0100
> > +++ linux-2.6.25-rc9-quilt2/drivers/net/dm9000.c	2008-04-15 00:33:08.000000000 +0100
> > @@ -117,6 +117,9 @@ typedef struct board_info {
> >  
> >  	struct mutex	 addr_lock;	/* phy and eeprom access lock */
> >  
> > +	struct delayed_work phy_poll;
> > +	struct net_device  *ndev;
> > +
> >  	spinlock_t lock;
> >  
> >  	struct mii_if_info mii;
> > @@ -297,6 +300,10 @@ static void dm9000_set_io(struct board_i
> >  	}
> >  }
> >  
> > +static void dm9000_schedule_poll(board_info_t *db)
> > +{
> > +	schedule_delayed_work(&db->phy_poll, HZ * 2);
> > +}
> >  
> >  /* Our watchdog timed out. Called by the networking layer */
> >  static void dm9000_timeout(struct net_device *dev)
> > @@ -465,6 +472,17 @@ static const struct ethtool_ops dm9000_e
> >   	.set_eeprom		= dm9000_set_eeprom,
> >  };
> >  
> > +static void
> > +dm9000_poll_work(struct work_struct *w)
> > +{
> > +	struct delayed_work *dw = container_of(w, struct delayed_work, work);
> > +	board_info_t *db = container_of(dw, board_info_t, phy_poll);
> > +
> > +	mii_check_media(&db->mii, netif_msg_link(db), 0);
> > +	
> > +	if (netif_running(db->ndev))
> > +		dm9000_schedule_poll(db);
> > +}
> >  
> >  /* dm9000_release_board
> >   *
> > @@ -532,10 +550,14 @@ dm9000_probe(struct platform_device *pde
> >  	memset(db, 0, sizeof (*db));
> >  
> >  	db->dev = &pdev->dev;
> > +	db->ndev = ndev;
> >  
> >  	spin_lock_init(&db->lock);
> >  	mutex_init(&db->addr_lock);
> >  
> > +	INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work);
> > +
> > +
> >  	if (pdev->num_resources < 2) {
> >  		ret = -ENODEV;
> >  		goto out;
> > @@ -761,6 +783,8 @@ dm9000_open(struct net_device *dev)
> >  
> >  	mii_check_media(&db->mii, netif_msg_link(db), 1);
> >  	netif_start_queue(dev);
> > +	
> > +	dm9000_schedule_poll(db);
> >  
> >  	return 0;
> >  }
> > @@ -879,6 +903,8 @@ dm9000_stop(struct net_device *ndev)
> >  	if (netif_msg_ifdown(db))
> >  		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
> >  
> > +	cancel_delayed_work(&db->phy_poll);
> > +
> >  	netif_stop_queue(ndev);
> >  	netif_carrier_off(ndev);
> >  
> 
> The above patch breaks dm9000-restore-mii-physical-polling-timer.patch,
> below.

Yes, I belive I submitted this first to the netdev list.
 
> Perhaps they both fix the same thing?
> 
> From: Michael Abbott <michael.abbott@diamond.ac.uk>
> 
> In commit fcfa81aa3e8d885356139122fcb281487b983468 the timer for polling the
> MII physical layer was removed because of conflicts with newly added mutexes. 
> Unfortunately a side effect of this change is that the corresponding ethernet
> layer is permanently reported as down: there is no other way to read the link
> status.
> 
> This commit restores the timer, but uses the default work queue for polling.
> 
> Signed-off-by: Michael Abbott <michael.abbott@diamond.ac.uk>
> Cc: Daniel Mack <daniel@caiaq.org>
> Cc: Russell King <rmk@arm.linux.org.uk>
> Cc: Jeff Garzik <jeff@garzik.org>
> Cc: Ben Dooks <ben-linux@fluff.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> ---
> 
>  drivers/net/dm9000.c |   21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff -puN drivers/net/dm9000.c~dm9000-restore-mii-physical-polling-timer drivers/net/dm9000.c
> --- a/drivers/net/dm9000.c~dm9000-restore-mii-physical-polling-timer
> +++ a/drivers/net/dm9000.c
> @@ -43,6 +43,7 @@
>  /* Board/System/Debug information/definition ---------------- */
>  
>  #define DM9000_PHY		0x40	/* PHY address 0x01 */
> +#define DM9000_TIMER_WUT	(HZ*2)	/* timer wakeup time : 2 second */
>  
>  #define CARDNAME "dm9000"
>  #define PFX CARDNAME ": "
> @@ -117,6 +118,8 @@ typedef struct board_info {
>  
>  	struct mutex	 addr_lock;	/* phy and eeprom access lock */
>  
> +	struct delayed_work timer;	/* Interface status timer. */
> +
>  	spinlock_t lock;
>  
>  	struct mii_if_info mii;
> @@ -144,6 +147,7 @@ static int dm9000_start_xmit(struct sk_b
>  static int dm9000_stop(struct net_device *);
>  static int dm9000_ioctl(struct net_device *dev, struct ifreq *req, int cmd);
>  
> +static void dm9000_timer(struct work_struct * work);
>  static void dm9000_init_dm9000(struct net_device *);
>  
>  static irqreturn_t dm9000_interrupt(int, void *);
> @@ -762,6 +766,10 @@ dm9000_open(struct net_device *dev)
>  	mii_check_media(&db->mii, netif_msg_link(db), 1);
>  	netif_start_queue(dev);
>  
> +	/* Start the media status timer running. */
> +	INIT_DELAYED_WORK(&db->timer, dm9000_timer);
> +	schedule_delayed_work(&db->timer, DM9000_TIMER_WUT);
> +
>  	return 0;
>  }
>  
> @@ -876,6 +884,9 @@ dm9000_stop(struct net_device *ndev)
>  {
>  	board_info_t *db = (board_info_t *) ndev->priv;
>  
> +	/* Delete the timer and make sure it's not running right now! */
> +	cancel_delayed_work_sync(&db->timer);
> +
>  	if (netif_msg_ifdown(db))
>  		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
>  
> @@ -965,6 +976,16 @@ dm9000_interrupt(int irq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +
> +/* Two second timer to poll the media status -- the DM9000 doesn't provide a
> + * status interrupt, so this has to be polled. */
> +static void dm9000_timer(struct work_struct * work)
> +{
> +	board_info_t *db = container_of(work, board_info_t, timer);
> +	mii_check_media(&db->mii, netif_msg_link(db), 0);
> +	schedule_delayed_work(&db->timer, DM9000_TIMER_WUT);
> +}
> +
>  struct dm9000_rxhdr {
>  	u8	RxPktReady;
>  	u8	RxStatus;
> _
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Ben (ben@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

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

* Re: DM9000: Add __devinit and __devexit attributes to probe and remove
  2008-05-08 10:33   ` DM9000: Add __devinit and __devexit attributes to probe and remove Ben Dooks
@ 2008-05-13  5:18     ` Jeff Garzik
  0 siblings, 0 replies; 11+ messages in thread
From: Jeff Garzik @ 2008-05-13  5:18 UTC (permalink / raw)
  To: Ben Dooks; +Cc: Linux Networking, akpm

Ben Dooks wrote:
> From: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
> 
> There were missing __dev* annotations for the dm9000_probe() 
> and dm9000_drv_remove() functions.
> 
> Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
> Signed-off-by: Ben Dooks <ben-linux@fluff.org>

applied three dm9000 patches

please number your patches, when submitting multiple ones



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

end of thread, other threads:[~2008-05-13  5:18 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-28 15:13 DM9000 patches Ben Dooks
2008-04-28 15:21 ` Jeff Garzik
2008-05-06 16:25 ` Jeff Garzik
2008-05-08 10:28   ` Ben Dooks
2008-05-08 10:33   ` DM9000: Add __devinit and __devexit attributes to probe and remove Ben Dooks
2008-05-13  5:18     ` Jeff Garzik
2008-05-08 10:35   ` DM9000: Update and fix driver debugging messages Ben Dooks
2008-05-08 10:36   ` DM9000: Use delayed work to update MII PHY state Ben Dooks
2008-05-08 20:11     ` Andrew Morton
2008-05-08 20:18     ` Andrew Morton
2008-05-12 20:27       ` Ben Dooks

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).