summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/bce/if_bce.c56
1 files changed, 13 insertions, 43 deletions
diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c
index 7ada8d0..fc3c947 100644
--- a/sys/dev/bce/if_bce.c
+++ b/sys/dev/bce/if_bce.c
@@ -531,13 +531,6 @@ bce_attach(device_t dev)
goto bce_attach_fail;
}
- if (BCE_CHIP_BOND_ID(sc) & BCE_CHIP_BOND_ID_SERDES_BIT) {
- BCE_PRINTF(sc, "%s(%d): SerDes controllers are not supported!\n",
- __FILE__, __LINE__);
- rc = ENODEV;
- goto bce_attach_fail;
- }
-
/*
* The embedded PCIe to PCI-X bridge (EPB)
* in the 5708 cannot address memory above
@@ -742,20 +735,13 @@ bce_attach(device_t dev)
IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen);
IFQ_SET_READY(&ifp->if_snd);
- if (sc->bce_phy_flags & BCE_PHY_SERDES_FLAG) {
- BCE_PRINTF(sc, "%s(%d): SerDes is not supported by this driver!\n",
+ /* Look for our PHY. */
+ if (mii_phy_probe(dev, &sc->bce_miibus, bce_ifmedia_upd,
+ bce_ifmedia_sts)) {
+ BCE_PRINTF(sc, "%s(%d): PHY probe failed!\n",
__FILE__, __LINE__);
- rc = ENODEV;
+ rc = ENXIO;
goto bce_attach_fail;
- } else {
- /* Look for our PHY. */
- if (mii_phy_probe(dev, &sc->bce_miibus, bce_ifmedia_upd,
- bce_ifmedia_sts)) {
- BCE_PRINTF(sc, "%s(%d): PHY probe failed!\n",
- __FILE__, __LINE__);
- rc = ENXIO;
- goto bce_attach_fail;
- }
}
/* Attach to the Ethernet interface list. */
@@ -836,12 +822,8 @@ bce_detach(device_t dev)
ether_ifdetach(ifp);
/* If we have a child device on the MII bus remove it too. */
- if (sc->bce_phy_flags & BCE_PHY_SERDES_FLAG) {
- ifmedia_removeall(&sc->bce_ifmedia);
- } else {
- bus_generic_detach(dev);
- device_delete_child(dev, sc->bce_miibus);
- }
+ bus_generic_detach(dev);
+ device_delete_child(dev, sc->bce_miibus);
/* Release all remaining resources. */
bce_release_resources(sc);
@@ -1118,7 +1100,8 @@ bce_miibus_statchg(device_t dev)
BCE_CLRBIT(sc, BCE_EMAC_MODE, BCE_EMAC_MODE_PORT);
/* Set MII or GMII inerface based on the speed negotiated by the PHY. */
- if (IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T) {
+ if (IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T ||
+ IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_SX) {
DBPRINT(sc, BCE_INFO, "Setting GMII interface.\n");
BCE_SETBIT(sc, BCE_EMAC_MODE, BCE_EMAC_MODE_PORT_GMII);
} else {
@@ -3832,8 +3815,6 @@ bce_ifmedia_upd_locked(struct ifnet *ifp)
ifm = &sc->bce_ifmedia;
BCE_LOCK_ASSERT(sc);
- /* DRC - ToDo: Add SerDes support. */
-
mii = device_get_softc(sc->bce_miibus);
sc->bce_link = 0;
if (mii->mii_instance) {
@@ -3864,8 +3845,6 @@ bce_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
mii = device_get_softc(sc->bce_miibus);
- /* DRC - ToDo: Add SerDes support. */
-
mii_pollstat(mii);
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
@@ -4879,17 +4858,10 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
DBPRINT(sc, BCE_VERBOSE, "bce_phy_flags = 0x%08X\n",
sc->bce_phy_flags);
- if (sc->bce_phy_flags & BCE_PHY_SERDES_FLAG) {
- DBPRINT(sc, BCE_VERBOSE, "SerDes media set/get\n");
-
- error = ifmedia_ioctl(ifp, ifr,
- &sc->bce_ifmedia, command);
- } else {
- DBPRINT(sc, BCE_VERBOSE, "Copper media set/get\n");
- mii = device_get_softc(sc->bce_miibus);
- error = ifmedia_ioctl(ifp, ifr,
- &mii->mii_media, command);
- }
+ DBPRINT(sc, BCE_VERBOSE, "Copper media set/get\n");
+ mii = device_get_softc(sc->bce_miibus);
+ error = ifmedia_ioctl(ifp, ifr,
+ &mii->mii_media, command);
break;
/* Set interface capability */
@@ -5567,8 +5539,6 @@ bce_tick(void *xsc)
if (sc->bce_link)
goto bce_tick_locked_exit;
- /* DRC - ToDo: Add SerDes support and check SerDes link here. */
-
mii = device_get_softc(sc->bce_miibus);
mii_tick(mii);
OpenPOWER on IntegriCloud