diff options
author | Jeff Garzik <jeff@garzik.org> | 2007-09-29 01:10:14 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:53:46 -0400 |
commit | ac1d49f8431bef861c7dd63e78be25e4c262eb52 (patch) | |
tree | 3b55785636d7bbc1845fd5b53be2b88a044c5b7d /drivers | |
parent | 7b5dfe1aa9faf9fab10960e027a7b1c932580f76 (diff) |
[netdrvr] sundance: fix phy scanning on IP100A
Based on a based from Jesse Huang <jesse@icplus.com.tw>.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/sundance.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c index a37637ec9b77..ff98f5d597f1 100644 --- a/drivers/net/sundance.c +++ b/drivers/net/sundance.c | |||
@@ -466,7 +466,7 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev, | |||
466 | #else | 466 | #else |
467 | int bar = 1; | 467 | int bar = 1; |
468 | #endif | 468 | #endif |
469 | int phy, phy_idx = 0; | 469 | int phy, phy_end, phy_idx = 0; |
470 | DECLARE_MAC_BUF(mac); | 470 | DECLARE_MAC_BUF(mac); |
471 | 471 | ||
472 | /* when built into the kernel, we only print version if device is found */ | 472 | /* when built into the kernel, we only print version if device is found */ |
@@ -552,11 +552,19 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev, | |||
552 | 552 | ||
553 | np->phys[0] = 1; /* Default setting */ | 553 | np->phys[0] = 1; /* Default setting */ |
554 | np->mii_preamble_required++; | 554 | np->mii_preamble_required++; |
555 | |||
555 | /* | 556 | /* |
556 | * It seems some phys doesn't deal well with address 0 being accessed | 557 | * It seems some phys doesn't deal well with address 0 being accessed |
557 | * first, so leave address zero to the end of the loop (32 & 31). | 558 | * first |
558 | */ | 559 | */ |
559 | for (phy = 1; phy <= 32 && phy_idx < MII_CNT; phy++) { | 560 | if (sundance_pci_tbl[np->chip_id].device == 0x0200) { |
561 | phy = 0; | ||
562 | phy_end = 31; | ||
563 | } else { | ||
564 | phy = 1; | ||
565 | phy_end = 32; /* wraps to zero, due to 'phy & 0x1f' */ | ||
566 | } | ||
567 | for (; phy <= phy_end && phy_idx < MII_CNT; phy++) { | ||
560 | int phyx = phy & 0x1f; | 568 | int phyx = phy & 0x1f; |
561 | int mii_status = mdio_read(dev, phyx, MII_BMSR); | 569 | int mii_status = mdio_read(dev, phyx, MII_BMSR); |
562 | if (mii_status != 0xffff && mii_status != 0x0000) { | 570 | if (mii_status != 0xffff && mii_status != 0x0000) { |