Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 10352
b: refs/heads/master
c: 59b8182
h: refs/heads/master
v: v3
  • Loading branch information
Ralf Baechle authored and Jeff Garzik committed Oct 20, 2005
1 parent 2adb02b commit 17cd876
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 902f90735b693550eb51a3989895f3148b8229d8
refs/heads/master: 59b81827071a8ae7f399da533d268e1e33bfeeb7
36 changes: 36 additions & 0 deletions trunk/drivers/net/sb1250-mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ static void sbmac_set_rx_mode(struct net_device *dev);
static int sbmac_mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static int sbmac_close(struct net_device *dev);
static int sbmac_mii_poll(struct sbmac_softc *s,int noisy);
static int sbmac_mii_probe(struct net_device *dev);

static void sbmac_mii_sync(struct sbmac_softc *s);
static void sbmac_mii_senddata(struct sbmac_softc *s,unsigned int data, int bitcnt);
Expand Down Expand Up @@ -433,6 +434,9 @@ static uint64_t sbmac_orig_hwaddr[MAX_UNITS];

#define MII_BMCR 0x00 /* Basic mode control register (rw) */
#define MII_BMSR 0x01 /* Basic mode status register (ro) */
#define MII_PHYIDR1 0x02
#define MII_PHYIDR2 0x03

#define MII_K1STSR 0x0A /* 1K Status Register (ro) */
#define MII_ANLPAR 0x05 /* Autonegotiation lnk partner abilities (rw) */

Expand Down Expand Up @@ -2431,6 +2435,15 @@ static int sbmac_open(struct net_device *dev)
if (request_irq(dev->irq, &sbmac_intr, SA_SHIRQ, dev->name, dev))
return -EBUSY;

/*
* Probe phy address
*/

if(sbmac_mii_probe(dev) == -1) {
printk("%s: failed to probe PHY.\n", dev->name);
return -EINVAL;
}

/*
* Configure default speed
*/
Expand Down Expand Up @@ -2464,6 +2477,29 @@ static int sbmac_open(struct net_device *dev)
return 0;
}

static int sbmac_mii_probe(struct net_device *dev)
{
int i;
struct sbmac_softc *s = netdev_priv(dev);
u16 bmsr, id1, id2;
u32 vendor, device;

for (i=1; i<31; i++) {
bmsr = sbmac_mii_read(s, i, MII_BMSR);
if (bmsr != 0) {
s->sbm_phys[0] = i;
id1 = sbmac_mii_read(s, i, MII_PHYIDR1);
id2 = sbmac_mii_read(s, i, MII_PHYIDR2);
vendor = ((u32)id1 << 6) | ((id2 >> 10) & 0x3f);
device = (id2 >> 4) & 0x3f;

printk(KERN_INFO "%s: found phy %d, vendor %06x part %02x\n",
dev->name, i, vendor, device);
return i;
}
}
return -1;
}


static int sbmac_mii_poll(struct sbmac_softc *s,int noisy)
Expand Down

0 comments on commit 17cd876

Please sign in to comment.