Module Name:    src
Committed By:   martin
Date:           Thu Jan 17 17:23:03 UTC 2019

Modified Files:
        src/sys/dev/mii [netbsd-8]: makphy.c makphyreg.h miidevs

Log Message:
Pull up the following (requested by msaitoh in ticket #1164):

        sys/dev/mii/miidevs                     1.128, 1.132 (patch)
        sys/dev/mii/makphy.c                    1.43-1.51
        sys/dev/mii/makphyreg.h                 1.7-1.9

- miidevs: Add E1000 with model id 0x0006, it exists according to
  OpenBSD rename E1000 model 0x0000 to E1000_0 for consistency.
- Match 88E1112, 88E1118, 88E1512, 88E3082 and G65G.
- Match 88E3016 and add some 88E3016 specific code. Fixes part of
  PR kern/49270 and PR kern/53301.
- Make sure page 0 is selected when we initialize the PHY. Fixes
  problems with the eephy(4) that attaches to nfe(4) on machines like
  the Sun Ultra 40. (we had condition for this, now the page 0 is
  selected for any PHY type)
- If autonegotiation is not enabled, we need a software reset for the
  settings to take effect in makphy_service().
- Don't set PSCR_CRS_ON_TX on newer. Those chips have no this bit.
- Control BMCR_PDOWN for IFM_NONE. Some chips still don't work as
  expected. It would be required to modify PSCR and/or other register.
- Set mii_media_active correctly on non-autonego mode.
- Remove obsolete comment.
- Whitespace fix.


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.42.8.1 src/sys/dev/mii/makphy.c
cvs rdiff -u -r1.6 -r1.6.20.1 src/sys/dev/mii/makphyreg.h
cvs rdiff -u -r1.125.6.3 -r1.125.6.4 src/sys/dev/mii/miidevs

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/makphy.c
diff -u src/sys/dev/mii/makphy.c:1.42 src/sys/dev/mii/makphy.c:1.42.8.1
--- src/sys/dev/mii/makphy.c:1.42	Tue Nov  8 08:48:35 2016
+++ src/sys/dev/mii/makphy.c	Thu Jan 17 17:23:02 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: makphy.c,v 1.42 2016/11/08 08:48:35 msaitoh Exp $	*/
+/*	$NetBSD: makphy.c,v 1.42.8.1 2019/01/17 17:23:02 martin Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1.42 2016/11/08 08:48:35 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1.42.8.1 2019/01/17 17:23:02 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -92,44 +92,79 @@ static const struct mii_phy_funcs makphy
 };
 
 static const struct mii_phydesc makphys[] = {
+	{ MII_OUI_MARVELL,		MII_MODEL_MARVELL_E1000_0,
+	  MII_STR_MARVELL_E1000_0 },
+
+	{ MII_OUI_MARVELL,		MII_MODEL_MARVELL_E1000_3,
+	  MII_STR_MARVELL_E1000_3 },
+
+	{ MII_OUI_MARVELL,		MII_MODEL_MARVELL_E1000_5,
+	  MII_STR_MARVELL_E1000_5 },
+
+	{ MII_OUI_MARVELL,		MII_MODEL_MARVELL_E1000_6,
+	  MII_STR_MARVELL_E1000_6 },
+
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1000_3,
 	  MII_STR_xxMARVELL_E1000_3 },
 
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1000_5,
 	  MII_STR_xxMARVELL_E1000_5 },
 
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1000S,
+	  MII_STR_xxMARVELL_E1000S },
+
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1011,
 	  MII_STR_xxMARVELL_E1011 },
 
-	/* XXX: reported not to work on eg. HP XW9400 */
-	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1149,
-	  MII_STR_xxMARVELL_E1149 },
-
-	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1149R,
-	  MII_STR_xxMARVELL_E1149R },
-
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1111,
 	  MII_STR_xxMARVELL_E1111 },
 
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1112,
+	  MII_STR_xxMARVELL_E1112 },
+
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1116,
 	  MII_STR_xxMARVELL_E1116 },
 
-	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1145,
-	  MII_STR_xxMARVELL_E1145 },
-
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1116R,
 	  MII_STR_xxMARVELL_E1116R },
 
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1116R_29,
 	  MII_STR_xxMARVELL_E1116R_29 },
 
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1118,
+	  MII_STR_xxMARVELL_E1118 },
+
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1145,
+	  MII_STR_xxMARVELL_E1145 },
+
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1149,
+	  MII_STR_xxMARVELL_E1149 },
+
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1149R,
+	  MII_STR_xxMARVELL_E1149R },
+
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1512,
+	  MII_STR_xxMARVELL_E1512 },
+
 	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E1543,
 	  MII_STR_xxMARVELL_E1543 },
 
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E3016,
+	  MII_STR_xxMARVELL_E3016 },
+
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_E3082,
+	  MII_STR_xxMARVELL_E3082 },
+
+	{ MII_OUI_xxMARVELL,		MII_MODEL_xxMARVELL_PHYG65G,
+	  MII_STR_xxMARVELL_PHYG65G },
+
 	{ 0,				0,
 	  NULL },
 };
 
+#define MAKARG_PDOWN	true	/* Power DOWN */
+#define MAKARG_PUP	false	/* Power UP */
+
 static int
 makphymatch(device_t parent, cfdata_t match, void *aux)
 {
@@ -164,26 +199,14 @@ makphyattach(device_t parent, device_t s
 	sc->mii_flags = ma->mii_flags;
 	sc->mii_anegticks = MII_ANEGTICKS;
 
+	/* Make sure page 0 is selected. */
+	PHY_WRITE(sc, MAKPHY_EADR, 0);
+
 	switch (sc->mii_mpd_model) {
 	case MII_MODEL_xxMARVELL_E1011:
 	case MII_MODEL_xxMARVELL_E1112:
-		if (PHY_READ(sc, MII_MAKPHY_ESSR) & ESSR_FIBER_LINK)
+		if (PHY_READ(sc, MAKPHY_ESSR) & ESSR_FIBER_LINK)
 			sc->mii_flags |= MIIF_HAVEFIBER;
-                break;
-	case MII_MODEL_xxMARVELL_E1149:
-	case MII_MODEL_xxMARVELL_E1149R:
-		/*
-		 * Some 88E1149 PHY's page select is initialized to
-		 * point to other bank instead of copper/fiber bank
-		 * which in turn resulted in wrong registers were
-		 * accessed during PHY operation. It is believed that
-		 * page 0 should be used for copper PHY so reinitialize
-		 * MII_MAKPHY_EADR to select default copper PHY. If parent
-		 * device know the type of PHY(either copper or fiber),
-		 * that information should be used to select default
-		 * type of PHY.
-		 */
-		PHY_WRITE(sc, MII_MAKPHY_EADR, 0);
 		break;
 	default:
 		break;
@@ -207,20 +230,85 @@ makphyattach(device_t parent, device_t s
 static void
 makphy_reset(struct mii_softc *sc)
 {
-	uint16_t pscr;
+	uint16_t reg;
+
+	mii_phy_reset(sc);
+
+	/*
+	 * Initialize PHY Specific Control Register.
+	 */
+	reg = PHY_READ(sc, MAKPHY_PSCR);
+
+	/* Assert CRS on transmit. */
+	switch (sc->mii_mpd_model) {
+	case MII_MODEL_MARVELL_E1000_0:
+	case MII_MODEL_MARVELL_E1000_3:
+	case MII_MODEL_MARVELL_E1000_5:
+	case MII_MODEL_MARVELL_E1000_6:
+	case MII_MODEL_xxMARVELL_E1000S:
+	case MII_MODEL_xxMARVELL_E1011:
+	case MII_MODEL_xxMARVELL_E1111:
+		reg |= PSCR_CRS_ON_TX;
+		break;
+	default: /* No PSCR_CRS_ON_TX bit */
+		break;
+	}
 
-	/* Assert CRS on transmit */
-	pscr = PHY_READ(sc, MII_MAKPHY_PSCR);
-	PHY_WRITE(sc, MII_MAKPHY_PSCR, pscr | PSCR_CRS_ON_TX);
+	/* Enable scrambler if necessary. */
+	if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E3016)
+		reg &= ~E3016_PSCR_SCRAMBLE_DIS;
+
+	/*
+	 * Store next page in the Link Partner Next Page register for
+	 * compatibility with 802.3ab.
+	 */
+	if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E3016)
+		reg |= E3016_PSCR_REG8NXTPG;
+
+	PHY_WRITE(sc, MAKPHY_PSCR, reg);
+
+	/* Configure LEDs if they were left unconfigured. */
+	if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E3016 &&
+	    PHY_READ(sc, 0x16) == 0) {
+		reg = (0x0b << 8) | (0x05 << 4) | 0x04;	/* XXX */
+		PHY_WRITE(sc, 0x16, reg);
+	}
 
 	mii_phy_reset(sc);
 }
 
+static void
+makphy_pdown(struct mii_softc *sc, bool pdown)
+{
+	int bmcr, new;
+	bool need_reset = false;
+
+	/*
+	 * XXX
+	 * PSCR (register 16) should be modified on some chips.
+	 */
+
+	bmcr = PHY_READ(sc, MII_BMCR);
+	if (pdown)
+		new = bmcr | BMCR_PDOWN;
+	else
+		new = bmcr & ~BMCR_PDOWN;
+	if (bmcr != new)
+		need_reset = true;
+
+	if (need_reset)
+		new |= BMCR_RESET;
+	PHY_WRITE(sc, MII_BMCR, new);
+}
+
 static int
 makphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
 {
 	struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
-	int reg;
+	int bmcr;
+
+	if (!device_is_active(sc->mii_dev))
+		return (ENXIO);
 
 	switch (cmd) {
 	case MII_POLLSTAT:
@@ -237,8 +325,8 @@ makphy_service(struct mii_softc *sc, str
 		 * isolate ourselves.
 		 */
 		if (IFM_INST(ife->ifm_media) != sc->mii_inst) {
-			reg = PHY_READ(sc, MII_BMCR);
-			PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO);
+			bmcr = PHY_READ(sc, MII_BMCR);
+			PHY_WRITE(sc, MII_BMCR, bmcr | BMCR_ISO);
 			return (0);
 		}
 
@@ -248,15 +336,21 @@ makphy_service(struct mii_softc *sc, str
 		if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
 			break;
 
+		/* Try to power up the PHY in case it's down */
+		if (IFM_SUBTYPE(ife->ifm_media) != IFM_NONE)
+			makphy_pdown(sc, MAKARG_PUP);
+
 		mii_phy_setmedia(sc);
-		if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) {
-			/*
-			 * when not in auto mode, we need to restart nego
-			 * anyway, or a switch from a fixed mode to another
-			 * fixed mode may not be seen by the switch.
-			 */
-			PHY_WRITE(sc, MII_BMCR,
-			    PHY_READ(sc, MII_BMCR) | BMCR_STARTNEG);
+
+		/*
+		 * If autonegitation is not enabled, we need a
+		 * software reset for the settings to take effect.
+		 */
+		if (IFM_SUBTYPE(ife->ifm_media) == IFM_NONE)
+			makphy_pdown(sc, MAKARG_PDOWN);
+		else if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) {
+			bmcr = PHY_READ(sc, MII_BMCR);
+			PHY_WRITE(sc, MII_BMCR, bmcr | BMCR_RESET);
 		}
 		break;
 
@@ -288,65 +382,73 @@ static void
 makphy_status(struct mii_softc *sc)
 {
 	struct mii_data *mii = sc->mii_pdata;
-	struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
-	int bmcr, pssr, gtsr;
+	int bmcr, gsr, pssr;
 
 	mii->mii_media_status = IFM_AVALID;
 	mii->mii_media_active = IFM_ETHER;
 
-	pssr = PHY_READ(sc, MII_MAKPHY_PSSR);
+	bmcr = PHY_READ(sc, MII_BMCR);
+	/* XXX FIXME: Use different page for Fiber on newer chips */
+	pssr = PHY_READ(sc, MAKPHY_PSSR);
 
 	if (pssr & PSSR_LINK)
 		mii->mii_media_status |= IFM_ACTIVE;
 
-	bmcr = PHY_READ(sc, MII_BMCR);
+	if (bmcr & BMCR_LOOP)
+		mii->mii_media_active |= IFM_LOOP;
+
 	if (bmcr & BMCR_ISO) {
 		mii->mii_media_active |= IFM_NONE;
 		mii->mii_media_status = 0;
 		return;
 	}
 
-	if (bmcr & BMCR_LOOP)
-		mii->mii_media_active |= IFM_LOOP;
-
-	if (bmcr & BMCR_AUTOEN) {
+	if ((bmcr & BMCR_AUTOEN) != 0) {
 		/*
-		 * The media status bits are only valid of autonegotiation
-		 * has completed (or it's disabled).
+		 * Check Speed and Duplex Resolved bit.
+		 * Note that this bit is always 1 when autonego is not enabled.
 		 */
-		if ((pssr & PSSR_RESOLVED) == 0) {
+		if (!(pssr & PSSR_RESOLVED)) {
 			/* Erg, still trying, I guess... */
 			mii->mii_media_active |= IFM_NONE;
 			return;
 		}
+	} else {
+		if ((pssr & PSSR_LINK) == 0) {
+			mii->mii_media_active |= IFM_NONE;
+			return;
+		}
+	}
 
+	/* XXX FIXME: Use different page for Fiber on newer chips */
+	if (sc->mii_flags & MIIF_IS_1000X) {
+		mii->mii_media_active |= IFM_1000_SX;
+	} else {
 		switch (PSSR_SPEED_get(pssr)) {
 		case SPEED_1000:
 			mii->mii_media_active |= IFM_1000_T;
-			gtsr = PHY_READ(sc, MII_100T2SR);
-			if (gtsr & GTSR_MS_RES)
-				mii->mii_media_active |= IFM_ETH_MASTER;
 			break;
-
 		case SPEED_100:
 			mii->mii_media_active |= IFM_100_TX;
 			break;
-
 		case SPEED_10:
 			mii->mii_media_active |= IFM_10_T;
 			break;
-
-		default:
+		default: /* Undefined (reserved) value */
 			mii->mii_media_active |= IFM_NONE;
 			mii->mii_media_status = 0;
 			return;
 		}
+	}
+
+	if (pssr & PSSR_DUPLEX)
+		mii->mii_media_active |= mii_phy_flowstatus(sc) | IFM_FDX;
+	else
+		mii->mii_media_active |= IFM_HDX;
 
-		if (pssr & PSSR_DUPLEX)
-			mii->mii_media_active |=
-			    IFM_FDX | mii_phy_flowstatus(sc);
-		else
-			mii->mii_media_active |= IFM_HDX;
-	} else
-		mii->mii_media_active = ife->ifm_media;
+	if (IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T) {
+		gsr = PHY_READ(sc, MII_100T2SR);
+		if (gsr & GTSR_MS_RES)
+			mii->mii_media_active |= IFM_ETH_MASTER;
+	}
 }

Index: src/sys/dev/mii/makphyreg.h
diff -u src/sys/dev/mii/makphyreg.h:1.6 src/sys/dev/mii/makphyreg.h:1.6.20.1
--- src/sys/dev/mii/makphyreg.h:1.6	Tue May 13 02:53:54 2014
+++ src/sys/dev/mii/makphyreg.h	Thu Jan 17 17:23:02 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: makphyreg.h,v 1.6 2014/05/13 02:53:54 christos Exp $	*/
+/*	$NetBSD: makphyreg.h,v 1.6.20.1 2019/01/17 17:23:02 martin Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  * Marvell 88E1000 ``Alaska'' 10/100/1000 PHY registers.
  */
 
-#define	MII_MAKPHY_PSCR		0x10	/* PHY specific control register */
+#define	MAKPHY_PSCR		0x10	/* PHY specific control register */
 #define	PSCR_DIS_JABBER		(1U << 0)   /* disable jabber */
 #define	PSCR_POL_REV		(1U << 1)   /* polarity reversal */
 #define	PSCR_SQE_TEST		(1U << 2)   /* SQE test */
@@ -44,6 +44,7 @@
 #define	PSCR_DIS_125CLK		(1U << 4)   /* 125CLK low */
 #define	PSCR_MDI_XOVER_MODE(x)	((x) << 5)  /* crossover mode */
 #define	PSCR_LOW_10T_THRESH	(1U << 7)   /* lower 10BASE-T Rx threshold */
+#define	PSCR_EN_DETECT(x)	((x) << 8)  /* Energy Detect */
 #define	PSCR_FORCE_LINK_GOOD	(1U << 10)  /* force link good */
 #define	PSCR_CRS_ON_TX		(1U << 11)  /* assert CRS on transmit */
 #define	PSCR_RX_FIFO(x)		((x) << 12) /* Rx FIFO depth */
@@ -53,7 +54,44 @@
 #define	XOVER_MODE_MDIX		1
 #define	XOVER_MODE_AUTO		2
 
-#define	MII_MAKPHY_PSSR		0x11	/* PHY specific status register */
+/* 88E3016 */
+/* bit 2 and 3 are reserved */
+#define	E3016_PSCR_MDI_XOVER_MODE(x) ((x) << 4)  /* crossover mode */
+#define	E3016_PSCR_SIGDET_POLARITY (1U << 6)  /* 0: Active H, 1: Active L */
+#define	E3016_PSCR_EXTDIST	(1U << 7)  /* Enable Extended Distance */
+#define	E3016_PSCR_FEFI_DIS	(1U << 8)  /* Disable FEFI */
+#define	E3016_PSCR_SCRAMBLE_DIS	(1U << 9)  /* Disable Scrambler */
+/* bit 10 is reserved */
+#define	E3016_PSCR_NLPGEN_DIS	(1U << 11)  /* Disable Linkpulse Generation */
+#define	E3016_PSCR_REG8NXTPG	(1U << 12)  /* En. Link Partner Next Page R */
+#define	E3016_PSCR_NLPCHK_DIS	(1U << 13)  /* Disable NLP check */
+#define	E3016_PSCR_EN_DETECT	(1U << 14)  /* Energy Detect */
+/* bit 15 is reserved */
+
+/* 88E1112 page 1 */
+#define	MAKPHY_FSCR		0x10	/* Fiber specific control register */
+#define	FSCR_XMITTER_DIS	0x0008	/* Transmitter Disable */
+
+/* 88E1112 page 2 */
+#define	MAKPHY_MSCR		0x10	/* MAC specific control register */
+#define	MSCR_TX_FIFODEPTH	0xc000	/* Transmi FIFO Depth */
+#define	MSCR_RX_FIFODEPTH	0x3000	/* Receive FIFO Depth */
+#define	MSCR_AUTOPREF_MASK	0x0c00	/* Autoselect preferred media mask */
+#define	MSCR_AUTOPREF_NO	0x0000	/*  No preference */
+#define	MSCR_AUTOPREF_FIBER	0x0400	/*  Preferred Fiber */
+#define	MSCR_AUTOPREF_COPPER	0x0800	/*  Preferred Copper */
+#define	MSCR_MODE_MASK		0x0380	/* Mode select mask */
+#define	MSCR_M_100FX		0x0000	/*  100BASE-FX */
+#define	MSCR_M_COOPER_GBIC	0x0080	/*  Copper GBIC */
+#define	MSCR_M_AUTO_COPPER_SGMII 0x0100	/*  Auto Copper/SGMII */
+#define	MSCR_M_AUTO_COPPER_1000X 0x0180	/*  Auto Copper/1000BASE-X */
+#define	MSCR_M_COPPER		0x0280	/*  Copper only */
+#define	MSCR_M_SGMII		0x0300	/*  SGMII only */
+#define	MSCR_M_1000X		0x0380	/*  1000BASE-X only */
+#define	MSCR_SGMII_PDOWN	0x0008	/* SGMII MAC Interface Power Down */
+#define	MSCR_ENHANCED_SGMII	0x0004	/* Enhanced SGMII */
+
+#define	MAKPHY_PSSR		0x11	/* PHY specific status register */
 #define	PSSR_JABBER		(1U << 0)   /* jabber indication */
 #define	PSSR_POLARITY		(1U << 1)   /* polarity indiciation */
 #define	PSSR_MDIX		(1U << 6)   /* 1 = MIDX, 0 = MDI */
@@ -69,7 +107,7 @@
 #define	SPEED_1000		2
 #define	SPEED_reserved		3
 
-#define	MII_MAKPHY_IE		0x12	/* Interrupt enable */
+#define	MAKPHY_IE		0x12	/* Interrupt enable */
 #define	IE_JABBER		(1U << 0)   /* jabber indication */
 #define	IE_POL_CHANGED		(1U << 1)   /* polarity changed */
 #define	IE_MDI_XOVER_CHANGED	(1U << 6)   /* MDI/MDIX changed */
@@ -83,20 +121,20 @@
 #define	IE_SPEED_CHANGED	(1U << 14)  /* speed changed */
 #define	IE_ANEG_ERROR		(1U << 15)  /* autonegotiation error occurred */
 
-#define	MII_MAKPHY_IS		0x13	/* Interrupt status */
+#define	MAKPHY_IS		0x13	/* Interrupt status */
 	/* See Interrupt enable bits */
 
-#define	MII_MAKPHY_EPSC		0x14	/* extended PHY specific control */
+#define	MAKPHY_EPSC		0x14	/* extended PHY specific control */
 #define	EPSC_TX_CLK(x)		((x) << 4)  /* transmit clock */
 #define	EPSC_TBI_RCLK_DIS	(1U << 12)  /* TBI RCLK disable */
 #define	EPSC_TBI_RX_CLK125_EN	(1U << 13)  /* TBI RX_CLK125 enable */
 #define	EPSC_LINK_DOWN_NO_IDLES	(1U << 15)  /* 1 = lost lock detect */
 
-#define	MII_MAKPHY_REC		0x15	/* receive error counter */
+#define	MAKPHY_REC		0x15	/* receive error counter */
 
-#define	MII_MAKPHY_EADR		0x16	/* extended address register */
+#define	MAKPHY_EADR		0x16	/* extended address register */
 
-#define	MII_MAKPHY_LEDCTRL	0x18	/* LED control */
+#define	MAKPHY_LEDCTRL	0x18	/* LED control */
 #define	LEDCTRL_LED_TX		(1U << 0)   /* 1 = activ/link, 0 = xmit */
 #define	LEDCTRL_LED_RX		(1U << 1)   /* 1 = activ/link, 1 = recv */
 #define	LEDCTRL_LED_DUPLEX	(1U << 2)   /* 1 = duplex, 0 = dup/coll */
@@ -105,10 +143,21 @@
 #define	LEDCTRL_PULSE_STRCH(x)	((x) << 12)
 #define	LEDCTRL_DISABLE		(1U << 15)  /* disable LED */
 
-#define MII_MAKPHY_ESSR		0x1b    /* Extended PHY specific status */
-#define ESSR_FIBER_LINK		0x2000
+#define MAKPHY_ESSR		0x1b    /* Extended PHY specific status */
+#define ESSR_AUTOSEL_DISABLE	0x8000	/* Fiber/Copper autoselect disable */
+#define ESSR_FIBER_LINK		0x2000	/* Fiber/Copper resolution */
+#define ESSR_SER_ANEG_BYPASS	0x1000	/* Serial Iface Aneg bypass enable */
+#define ESSR_SER_ANEG_BYPASS_ST	0x0800	/* Serial Iface Aneg bypass status */
+#define ESSR_INTR_POLARITY	0x0400	/* Interrupt Polarity */
+#define ESSR_AUTO_MEDIAREG_SEL	0x0200	/* Auto Medium Register Selection */
+#define ESSR_DTE_DROP_HYST	0x01e0	/* DTE detect status drop hysteresis */
+#define ESSR_DTE_POWER		0x0010
+#define ESSR_HWCFG_MODE		0x000f
 #define ESSR_GMII_COPPER	0x000f
 #define ESSR_GMII_FIBER		0x0007
+#define ESSR_RGMII_COPPER	0x000b
+#define ESSR_RGMII_FIBER	0x0003
+#define ESSR_RGMII_SGMII	0x0006
 #define ESSR_TBI_COPPER		0x000d
 #define ESSR_TBI_FIBER		0x0005
 

Index: src/sys/dev/mii/miidevs
diff -u src/sys/dev/mii/miidevs:1.125.6.3 src/sys/dev/mii/miidevs:1.125.6.4
--- src/sys/dev/mii/miidevs:1.125.6.3	Tue Dec  4 11:15:20 2018
+++ src/sys/dev/mii/miidevs	Thu Jan 17 17:23:02 2019
@@ -1,4 +1,4 @@
-$NetBSD: miidevs,v 1.125.6.3 2018/12/04 11:15:20 martin Exp $
+$NetBSD: miidevs,v 1.125.6.4 2019/01/17 17:23:02 martin Exp $
 
 /*-
  * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
@@ -282,11 +282,12 @@ model xxMARVELL E1149R		0x0025 Marvell 8
 model xxMARVELL E3016		0x0026 Marvell 88E3016 10/100 Fast Ethernet PHY
 model xxMARVELL PHYG65G		0x0027 Marvell PHYG65G Gigabit PHY
 model xxMARVELL E1116R_29	0x0029 Marvell 88E1116R Gigabit PHY
-model xxMARVELL E1543		0x002a Marvell 88E1543 Alaska Quad Port Gb PHY
-model MARVELL E1000		0x0000 Marvell 88E1000 Gigabit PHY
+model xxMARVELL E1543		0x002a Marvell 88E154[358] Alaska Quad Port Gb PHY
+model MARVELL E1000_0		0x0000 Marvell 88E1000 Gigabit PHY
 model MARVELL E1011		0x0002 Marvell 88E1011 Gigabit PHY
 model MARVELL E1000_3		0x0003 Marvell 88E1000 Gigabit PHY
 model MARVELL E1000_5		0x0005 Marvell 88E1000 Gigabit PHY
+model MARVELL E1000_6		0x0006 Marvell 88E1000 Gigabit PHY
 model MARVELL E1111		0x000c Marvell 88E1111 Gigabit PHY
 
 /* Micrel PHYs */

Reply via email to