- Even after masking the media with IFM_GMASK the result may have bits
besides the duplex ones set so just comparing it with IFM_FDX may lead to false negatives. - Just let the default case handle all unsupported media types. - In pnphy_status() don't unnecessarily read a register twice. - Remove unnused macros. MFC after: 1 week
This commit is contained in:
parent
5e29e07a81
commit
953bb11fc9
@ -222,17 +222,12 @@ dcphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
|
|||||||
/*dcphy_reset(sc);*/
|
/*dcphy_reset(sc);*/
|
||||||
(void) dcphy_auto(sc);
|
(void) dcphy_auto(sc);
|
||||||
break;
|
break;
|
||||||
case IFM_100_T4:
|
|
||||||
/*
|
|
||||||
* XXX Not supported as a manual setting right now.
|
|
||||||
*/
|
|
||||||
return (EINVAL);
|
|
||||||
case IFM_100_TX:
|
case IFM_100_TX:
|
||||||
dcphy_reset(sc);
|
dcphy_reset(sc);
|
||||||
DC_CLRBIT(dc_sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL);
|
DC_CLRBIT(dc_sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL);
|
||||||
mode |= DC_NETCFG_PORTSEL | DC_NETCFG_PCS |
|
mode |= DC_NETCFG_PORTSEL | DC_NETCFG_PCS |
|
||||||
DC_NETCFG_SCRAMBLER;
|
DC_NETCFG_SCRAMBLER;
|
||||||
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
|
if ((ife->ifm_media & IFM_FDX) != 0)
|
||||||
mode |= DC_NETCFG_FULLDUPLEX;
|
mode |= DC_NETCFG_FULLDUPLEX;
|
||||||
else
|
else
|
||||||
mode &= ~DC_NETCFG_FULLDUPLEX;
|
mode &= ~DC_NETCFG_FULLDUPLEX;
|
||||||
@ -241,7 +236,7 @@ dcphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
|
|||||||
case IFM_10_T:
|
case IFM_10_T:
|
||||||
DC_CLRBIT(dc_sc, DC_SIARESET, DC_SIA_RESET);
|
DC_CLRBIT(dc_sc, DC_SIARESET, DC_SIA_RESET);
|
||||||
DC_CLRBIT(dc_sc, DC_10BTCTRL, 0xFFFF);
|
DC_CLRBIT(dc_sc, DC_10BTCTRL, 0xFFFF);
|
||||||
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
|
if ((ife->ifm_media & IFM_FDX) != 0)
|
||||||
DC_SETBIT(dc_sc, DC_10BTCTRL, 0x7F3D);
|
DC_SETBIT(dc_sc, DC_10BTCTRL, 0x7F3D);
|
||||||
else
|
else
|
||||||
DC_SETBIT(dc_sc, DC_10BTCTRL, 0x7F3F);
|
DC_SETBIT(dc_sc, DC_10BTCTRL, 0x7F3F);
|
||||||
@ -249,7 +244,7 @@ dcphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
|
|||||||
DC_CLRBIT(dc_sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL);
|
DC_CLRBIT(dc_sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL);
|
||||||
mode &= ~DC_NETCFG_PORTSEL;
|
mode &= ~DC_NETCFG_PORTSEL;
|
||||||
mode |= DC_NETCFG_SPEEDSEL;
|
mode |= DC_NETCFG_SPEEDSEL;
|
||||||
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
|
if ((ife->ifm_media & IFM_FDX) != 0)
|
||||||
mode |= DC_NETCFG_FULLDUPLEX;
|
mode |= DC_NETCFG_FULLDUPLEX;
|
||||||
else
|
else
|
||||||
mode &= ~DC_NETCFG_FULLDUPLEX;
|
mode &= ~DC_NETCFG_FULLDUPLEX;
|
||||||
|
@ -66,14 +66,6 @@ __FBSDID("$FreeBSD$");
|
|||||||
|
|
||||||
#include "miibus_if.h"
|
#include "miibus_if.h"
|
||||||
|
|
||||||
#define DC_SETBIT(sc, reg, x) \
|
|
||||||
CSR_WRITE_4(sc, reg, \
|
|
||||||
CSR_READ_4(sc, reg) | x)
|
|
||||||
|
|
||||||
#define DC_CLRBIT(sc, reg, x) \
|
|
||||||
CSR_WRITE_4(sc, reg, \
|
|
||||||
CSR_READ_4(sc, reg) & ~x)
|
|
||||||
|
|
||||||
static int pnphy_probe(device_t);
|
static int pnphy_probe(device_t);
|
||||||
static int pnphy_attach(device_t);
|
static int pnphy_attach(device_t);
|
||||||
|
|
||||||
@ -170,23 +162,19 @@ pnphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
|
|||||||
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
|
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that auto-negotiation is broken on this chip.
|
||||||
|
*/
|
||||||
switch (IFM_SUBTYPE(ife->ifm_media)) {
|
switch (IFM_SUBTYPE(ife->ifm_media)) {
|
||||||
case IFM_AUTO:
|
|
||||||
/* NWAY is busted on this chip */
|
|
||||||
case IFM_100_T4:
|
|
||||||
/*
|
|
||||||
* XXX Not supported as a manual setting right now.
|
|
||||||
*/
|
|
||||||
return (EINVAL);
|
|
||||||
case IFM_100_TX:
|
case IFM_100_TX:
|
||||||
mii->mii_media_active = IFM_ETHER | IFM_100_TX;
|
mii->mii_media_active = IFM_ETHER | IFM_100_TX;
|
||||||
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
|
if ((ife->ifm_media & IFM_FDX) != 0)
|
||||||
mii->mii_media_active |= IFM_FDX;
|
mii->mii_media_active |= IFM_FDX;
|
||||||
MIIBUS_STATCHG(sc->mii_dev);
|
MIIBUS_STATCHG(sc->mii_dev);
|
||||||
return (0);
|
return (0);
|
||||||
case IFM_10_T:
|
case IFM_10_T:
|
||||||
mii->mii_media_active = IFM_ETHER | IFM_10_T;
|
mii->mii_media_active = IFM_ETHER | IFM_10_T;
|
||||||
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
|
if ((ife->ifm_media & IFM_FDX) != 0)
|
||||||
mii->mii_media_active |= IFM_FDX;
|
mii->mii_media_active |= IFM_FDX;
|
||||||
MIIBUS_STATCHG(sc->mii_dev);
|
MIIBUS_STATCHG(sc->mii_dev);
|
||||||
return (0);
|
return (0);
|
||||||
@ -226,15 +214,14 @@ pnphy_status(struct mii_softc *sc)
|
|||||||
mii->mii_media_active = IFM_ETHER;
|
mii->mii_media_active = IFM_ETHER;
|
||||||
|
|
||||||
reg = CSR_READ_4(dc_sc, DC_ISR);
|
reg = CSR_READ_4(dc_sc, DC_ISR);
|
||||||
|
|
||||||
if (!(reg & DC_ISR_LINKFAIL))
|
if (!(reg & DC_ISR_LINKFAIL))
|
||||||
mii->mii_media_status |= IFM_ACTIVE;
|
mii->mii_media_status |= IFM_ACTIVE;
|
||||||
|
reg = CSR_READ_4(dc_sc, DC_NETCFG);
|
||||||
if (CSR_READ_4(dc_sc, DC_NETCFG) & DC_NETCFG_SPEEDSEL)
|
if (reg & DC_NETCFG_SPEEDSEL)
|
||||||
mii->mii_media_active |= IFM_10_T;
|
mii->mii_media_active |= IFM_10_T;
|
||||||
else
|
else
|
||||||
mii->mii_media_active |= IFM_100_TX;
|
mii->mii_media_active |= IFM_100_TX;
|
||||||
if (CSR_READ_4(dc_sc, DC_NETCFG) & DC_NETCFG_FULLDUPLEX)
|
if (reg & DC_NETCFG_FULLDUPLEX)
|
||||||
mii->mii_media_active |= IFM_FDX;
|
mii->mii_media_active |= IFM_FDX;
|
||||||
else
|
else
|
||||||
mii->mii_media_active |= IFM_HDX;
|
mii->mii_media_active |= IFM_HDX;
|
||||||
|
Loading…
Reference in New Issue
Block a user