Patchwork axnet_cs: fix phy_id detection for bogus Asix chip.

login
register
mail settings
Submitter Ken Kawasaki
Date April 5, 2009, 12:49 a.m.
Message ID <20090405094907.5f6a5fea.ken_kawasaki@spring.nifty.jp>
Download mbox | patch
Permalink /patch/25604/
State Accepted
Delegated to: David Miller
Headers show

Comments

Ken Kawasaki - April 5, 2009, 12:49 a.m.
axnet_cs:

(1) Some Asix phy return bogus value except 0 or 0xffff.
    Skip this phy_id.

(2) Some Asix chip need to set "select Internal PHY" bit
    at AX88190_init.

Signed-off-by: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>

---



--
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
David Miller - April 7, 2009, 12:42 a.m.
From: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>
Date: Sun, 5 Apr 2009 09:49:07 +0900

> axnet_cs:
> 
> (1) Some Asix phy return bogus value except 0 or 0xffff.
>     Skip this phy_id.
> 
> (2) Some Asix chip need to set "select Internal PHY" bit
>     at AX88190_init.
> 
> Signed-off-by: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>

Applied.
--
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

Patch

--- linux-2.6.29-git1/drivers/net/pcmcia/axnet_cs.c.orig	2009-03-29 11:55:26.000000000 +0900
+++ linux-2.6.29-git1/drivers/net/pcmcia/axnet_cs.c	2009-03-29 12:01:40.000000000 +0900
@@ -339,7 +339,7 @@  static int axnet_config(struct pcmcia_de
 {
     struct net_device *dev = link->priv;
     axnet_dev_t *info = PRIV(dev);
-    int i, j, last_ret, last_fn;
+    int i, j, j2, last_ret, last_fn;
 
     DEBUG(0, "axnet_config(0x%p)\n", link);
 
@@ -388,6 +388,8 @@  static int axnet_config(struct pcmcia_de
 
     for (i = 0; i < 32; i++) {
 	j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
+	j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
+	if (j == j2) continue;
 	if ((j != 0) && (j != 0xffff)) break;
     }
 
@@ -398,6 +400,8 @@  static int axnet_config(struct pcmcia_de
  	pcmcia_access_configuration_register(link, &reg);
 	for (i = 0; i < 32; i++) {
 	    j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
+	    j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
+	    if (j == j2) continue;
 	    if ((j != 0) && (j != 0xffff)) break;
 	}
     }
@@ -1767,6 +1771,9 @@  static void AX88190_init(struct net_devi
 	ei_local->tx1 = ei_local->tx2 = 0;
 	ei_local->txing = 0;
 
+	if (info->flags & IS_AX88790)	/* select Internal PHY */
+		outb(0x10, e8390_base + AXNET_GPIO);
+
 	if (startp) 
 	{
 		outb_p(0xff,  e8390_base + EN0_ISR);