A Davicom application note for the DM9000 network device recommends
performing software reset twice to correctly initialise the device.
Without this reset some devices fail to initialise correctly on
system startup.
Signed-off-by: Michael Abbott <[email protected]>
---
drivers/net/ethernet/davicom/dm9000.c | 32 +++++++++++++++++++++-----------
1 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c
index 2a22f52..57d074c 100644
--- a/drivers/net/ethernet/davicom/dm9000.c
+++ b/drivers/net/ethernet/davicom/dm9000.c
@@ -156,17 +156,6 @@ static inline board_info_t *to_dm9000_board(struct net_device *dev)
/* DM9000 network board routine ---------------------------- */
-static void
-dm9000_reset(board_info_t * db)
-{
- dev_dbg(db->dev, "resetting device\n");
-
- /* RESET device */
- writeb(DM9000_NCR, db->io_addr);
- udelay(200);
- writeb(NCR_RST, db->io_data);
- udelay(200);
-}
/*
* Read a byte from I/O port
@@ -189,6 +178,27 @@ iow(board_info_t * db, int reg, int value)
writeb(value, db->io_data);
}
+
+static void
+dm9000_reset(board_info_t *db)
+{
+ dev_dbg(db->dev, "resetting device\n");
+
+ /* Reset DM9000, see DM9000 Application Notes V1.22 Jun 11, 2004 page 29
+ * The essential point is that we have to do a double reset, and the
+ * instruction is to set LBK into MAC internal loopback mode. */
+ iow(db, DM9000_NCR, 0x03);
+ udelay(100); /* Application note says at least 20 us */
+ if (ior(db, DM9000_NCR) & 1)
+ dev_err(db->dev, "dm9000 did not respond to first reset\n");
+
+ iow(db, DM9000_NCR, 0);
+ iow(db, DM9000_NCR, 0x03);
+ udelay(100);
+ if (ior(db, DM9000_NCR) & 1)
+ dev_err(db->dev, "dm9000 did not respond to second reset\n");
+}
+
/* routines for sending block to chip */
static void dm9000_outblk_8bit(void __iomem *reg, void *data, int count)
--
1.6.6.1
From: Michael Abbott <[email protected]>
Date: Mon, 21 May 2012 13:47:53 +0100 (BST)
> A Davicom application note for the DM9000 network device recommends
> performing software reset twice to correctly initialise the device.
> Without this reset some devices fail to initialise correctly on
> system startup.
>
> Signed-off-by: Michael Abbott <[email protected]>
Please post networking patches to [email protected], the networking
developers are not all listening on linux-kernel.
Plus, by properly submitting networking patches to netdev, it will
automatically be queued up and tracked in patchwork:
http://patchwork.ozlabs.org/project/netdev/list/
On Mon, 21 May 2012, David Miller wrote:
> From: Michael Abbott <[email protected]>
> Date: Mon, 21 May 2012 13:47:53 +0100 (BST)
>
> > A Davicom application note for the DM9000 network device recommends
> > performing software reset twice to correctly initialise the device.
> > Without this reset some devices fail to initialise correctly on system
> > startup.
> >
> > Signed-off-by: Michael Abbott <[email protected]>
>
> Please post networking patches to [email protected], the networking
> developers are not all listening on linux-kernel.
>
> Plus, by properly submitting networking patches to netdev, it will
> automatically be queued up and tracked in patchwork:
Ok, thanks. I'll resubmit when I'm ready -- it seems the patch isn't
enough to solve the issue I'm investigating...