diff options
author | wpaul <wpaul@FreeBSD.org> | 2000-09-22 03:49:12 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 2000-09-22 03:49:12 +0000 |
commit | 9d6e371055262bb0fc5bc944c8c181497fe46bae (patch) | |
tree | 49b72d0508479aeb93622f1301ce0f7909bfd8a3 /sys/pci | |
parent | b2e6e23935fb9861be50729e5ca7dd953565f3b1 (diff) | |
download | FreeBSD-src-9d6e371055262bb0fc5bc944c8c181497fe46bae.zip FreeBSD-src-9d6e371055262bb0fc5bc944c8c181497fe46bae.tar.gz |
Make pcn_miibus_readreg() latch onto the first PHY that it finds (as
a result of mii_phy_probe()) and use that rather than hardcoding a
constant. The hardcoded way was too specific to the particular card
I had and caused PHY probing to fail on at least one laptop with a
built-in AMD chip.
Reported by: rjk@grauel.com (Richard J Kuhns)
Diffstat (limited to 'sys/pci')
-rw-r--r-- | sys/pci/if_pcn.c | 5 | ||||
-rw-r--r-- | sys/pci/if_pcnreg.h | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/pci/if_pcn.c b/sys/pci/if_pcn.c index 5f6625b..0767dff 100644 --- a/sys/pci/if_pcn.c +++ b/sys/pci/if_pcn.c @@ -238,13 +238,16 @@ static int pcn_miibus_readreg(dev, phy, reg) sc = device_get_softc(dev); - if (phy >= 30) + if (sc->pcn_phyaddr && phy > sc->pcn_phyaddr) return(0); pcn_bcr_write(sc, PCN_BCR_MIIADDR, reg | (phy << 5)); val = pcn_bcr_read(sc, PCN_BCR_MIIDATA) & 0xFFFF; if (val == 0xFFFF) return(0); + + sc->pcn_phyaddr = phy; + return(val); } diff --git a/sys/pci/if_pcnreg.h b/sys/pci/if_pcnreg.h index 7074035..dc234b6 100644 --- a/sys/pci/if_pcnreg.h +++ b/sys/pci/if_pcnreg.h @@ -453,6 +453,7 @@ struct pcn_softc { device_t pcn_miibus; u_int8_t pcn_unit; u_int8_t pcn_link; + u_int8_t pcn_phyaddr; int pcn_if_flags; int pcn_type; struct pcn_list_data *pcn_ldata; |