Module Name:    src
Committed By:   msaitoh
Date:           Thu Nov 14 09:00:23 UTC 2019

Modified Files:
        src/sys/dev/mii: ipgphy.c

Log Message:
 STGE_PhyCtrl is not PHY register but MAC register, so use ukphy_status()
for IP1000A device.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/mii/ipgphy.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/mii/ipgphy.c
diff -u src/sys/dev/mii/ipgphy.c:1.2 src/sys/dev/mii/ipgphy.c:1.3
--- src/sys/dev/mii/ipgphy.c:1.2	Thu Nov 14 08:52:34 2019
+++ src/sys/dev/mii/ipgphy.c	Thu Nov 14 09:00:23 2019
@@ -32,7 +32,7 @@
  * Driver for the IC Plus IP1000A/IP1001 10/100/1000 PHY.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipgphy.c,v 1.2 2019/11/14 08:52:34 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipgphy.c,v 1.3 2019/11/14 09:00:23 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -261,6 +261,12 @@ ipgphy_status(struct mii_softc *sc)
 	struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
 	uint16_t bmsr, bmcr, stat, gtsr;
 
+	/* For IP1000A, use generic way */
+	if (sc->mii_mpd_model == MII_MODEL_xxICPLUS_IP1000A) {
+		ukphy_status(sc);
+		return;
+	}
+
 	mii->mii_media_status = IFM_AVALID;
 	mii->mii_media_active = IFM_ETHER;
 
@@ -280,53 +286,27 @@ ipgphy_status(struct mii_softc *sc)
 			return;
 		}
 
-		if (sc->mii_mpd_model == MII_MODEL_xxICPLUS_IP1001) {
-			PHY_READ(sc, IPGPHY_LSR, &stat);
-			switch (stat & IPGPHY_LSR_SPEED_MASK) {
-			case IPGPHY_LSR_SPEED_10:
-				mii->mii_media_active |= IFM_10_T;
-				break;
-			case IPGPHY_LSR_SPEED_100:
-				mii->mii_media_active |= IFM_100_TX;
-				break;
-			case IPGPHY_LSR_SPEED_1000:
-				mii->mii_media_active |= IFM_1000_T;
-				break;
-			default:
-				mii->mii_media_active |= IFM_NONE;
-				return;
-			}
-
-			if (stat & IPGPHY_LSR_FULL_DUPLEX)
-				mii->mii_media_active |= IFM_FDX;
-			else
-				mii->mii_media_active |= IFM_HDX;
-		} else {
-			PHY_READ(sc, STGE_PhyCtrl, &stat);
-			switch (PC_LinkSpeed(stat)) {
-			case PC_LinkSpeed_Down:
-				mii->mii_media_active |= IFM_NONE;
-				return;
-			case PC_LinkSpeed_10:
-				mii->mii_media_active |= IFM_10_T;
-				break;
-			case PC_LinkSpeed_100:
-				mii->mii_media_active |= IFM_100_TX;
-				break;
-			case PC_LinkSpeed_1000:
-				mii->mii_media_active |= IFM_1000_T;
-				break;
-			default:
-				mii->mii_media_active |= IFM_NONE;
-				return;
-			}
-
-			if (stat & PC_PhyDuplexStatus)
-				mii->mii_media_active |= IFM_FDX;
-			else
-				mii->mii_media_active |= IFM_HDX;
+		PHY_READ(sc, IPGPHY_LSR, &stat);
+		switch (stat & IPGPHY_LSR_SPEED_MASK) {
+		case IPGPHY_LSR_SPEED_10:
+			mii->mii_media_active |= IFM_10_T;
+			break;
+		case IPGPHY_LSR_SPEED_100:
+			mii->mii_media_active |= IFM_100_TX;
+			break;
+		case IPGPHY_LSR_SPEED_1000:
+			mii->mii_media_active |= IFM_1000_T;
+			break;
+		default:
+			mii->mii_media_active |= IFM_NONE;
+			return;
 		}
 
+		if (stat & IPGPHY_LSR_FULL_DUPLEX)
+			mii->mii_media_active |= IFM_FDX;
+		else
+			mii->mii_media_active |= IFM_HDX;
+
 		if (mii->mii_media_active & IFM_FDX)
 			mii->mii_media_active |= mii_phy_flowstatus(sc);
 

Reply via email to