Module Name: src
Committed By: msaitoh
Date: Fri Dec 28 06:20:32 UTC 2018
Modified Files:
src/sys/dev/mii: makphy.c makphyreg.h
Removed Files:
src/sys/dev/mii: e1000phyreg.h
Log Message:
- Backout some changes done in rev. 1.44. OK'd by jdolecek@:
- Remove e1000phyreg.h and use makphyreg.h again.
- Remove Energy detect stuff. Leave it by default.
- Remove MDI crossover configuraton. Leave it by default. I think it's OK to
add new API to change the mode.
- PHY_RESET() is used to commit some changes, so I think it's not good to
always clear BMCR_AUTOEN before reset in makphy_reset().
- It's not required to read MII_100T2SR twice because this register has no
any bit which is latched.
- Use mii_phy_reset() instead of extracted code.
- Don't set PSCR_CRS_ON_TX on newer. Those chips have no this bit.
- Add some "XXX FIXME" comment. Non GMII mode uses different page except
very old chip. Some bits are at the same location but others are not.
- Remove obsolete comment.
- s/MII_MAKPHY_/MAKPHY_/
XXX rev. 1.44 changed the setting of mii_media_active when the interface is
set to other than auto. I suspect the intention of the change is to reflect
the link up/down status. But, it didn't work because non auto setting makes
PSSR_LINK bit alwasy set "without modifing some registers".
This commit won't fix the change and it'll be fixed in the next commit.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r0 src/sys/dev/mii/e1000phyreg.h
cvs rdiff -u -r1.45 -r1.46 src/sys/dev/mii/makphy.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/mii/makphyreg.h
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.45 src/sys/dev/mii/makphy.c:1.46
--- src/sys/dev/mii/makphy.c:1.45 Mon Jun 18 09:12:17 2018
+++ src/sys/dev/mii/makphy.c Fri Dec 28 06:20:32 2018
@@ -1,5 +1,4 @@
-/* $NetBSD: makphy.c,v 1.45 2018/06/18 09:12:17 msaitoh Exp $ */
-/* $OpenBSD: eephy.c,v 1.56 2015/03/14 03:38:48 jsg Exp $ */
+/* $NetBSD: makphy.c,v 1.46 2018/12/28 06:20:32 msaitoh Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -55,48 +54,8 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/*
- * Principal Author: Parag Patel
- * Copyright (c) 2001
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice unmodified, this list of conditions, and the following
- * disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Additonal Copyright (c) 2001 by Traakan Software under same licence.
- * Secondary Author: Matthew Jacob
- */
-/*
- * Driver for the Marvell 88E1000 ``Alaska'' 10/100/1000 PHY.
- */
-
-/*
- * Support added for the Marvell 88E1011 (Alaska) 1000/100/10baseTX and
- * 1000baseSX PHY.
- * Nathan Binkert <[email protected]>
- */
-
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1.45 2018/06/18 09:12:17 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1.46 2018/12/28 06:20:32 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -112,7 +71,7 @@ __KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1
#include <dev/mii/miivar.h>
#include <dev/mii/miidevs.h>
-#include <dev/mii/e1000phyreg.h>
+#include <dev/mii/makphyreg.h>
static int makphymatch(device_t, cfdata_t, void *);
static void makphyattach(device_t, device_t, void *);
@@ -124,11 +83,11 @@ static int makphy_service(struct mii_sof
static void makphy_status(struct mii_softc *);
static void makphy_reset(struct mii_softc *);
-static const struct mii_phy_funcs eephy_funcs = {
+static const struct mii_phy_funcs makphy_funcs = {
makphy_service, makphy_status, makphy_reset,
};
-static const struct mii_phydesc eephys[] = {
+static const struct mii_phydesc makphys[] = {
{ MII_OUI_MARVELL, MII_MODEL_MARVELL_E1000_0,
MII_STR_MARVELL_E1000_0 },
@@ -174,7 +133,6 @@ static const struct mii_phydesc eephys[]
{ MII_OUI_xxMARVELL, MII_MODEL_xxMARVELL_E1145,
MII_STR_xxMARVELL_E1145 },
- /* XXX: reported not to work on eg. HP XW9400 */
{ MII_OUI_xxMARVELL, MII_MODEL_xxMARVELL_E1149,
MII_STR_xxMARVELL_E1149 },
@@ -192,6 +150,7 @@ static const struct mii_phydesc eephys[]
{ MII_OUI_xxMARVELL, MII_MODEL_xxMARVELL_PHYG65G,
MII_STR_xxMARVELL_PHYG65G },
+
{ 0, 0,
NULL },
};
@@ -201,7 +160,7 @@ makphymatch(device_t parent, cfdata_t ma
{
struct mii_attach_args *ma = aux;
- if (mii_phy_match(ma, eephys) != NULL)
+ if (mii_phy_match(ma, makphys) != NULL)
return (10);
return (0);
@@ -215,7 +174,7 @@ makphyattach(device_t parent, device_t s
struct mii_data *mii = ma->mii_data;
const struct mii_phydesc *mpd;
- mpd = mii_phy_match(ma, eephys);
+ mpd = mii_phy_match(ma, makphys);
aprint_naive(": Media interface\n");
aprint_normal(": %s, rev. %d\n", mpd->mpd_name, MII_REV(ma->mii_id2));
@@ -225,45 +184,22 @@ makphyattach(device_t parent, device_t s
sc->mii_mpd_rev = MII_REV(ma->mii_id2);
sc->mii_inst = mii->mii_instance;
sc->mii_phy = ma->mii_phyno;
- sc->mii_funcs = &eephy_funcs;
+ sc->mii_funcs = &makphy_funcs;
sc->mii_pdata = mii;
sc->mii_flags = ma->mii_flags;
sc->mii_anegticks = MII_ANEGTICKS;
- /* XXX No loopback support yet, although the hardware can do it. */
- sc->mii_flags |= MIIF_NOLOOP;
-
/* Make sure page 0 is selected. */
- PHY_WRITE(sc, E1000_EADR, 0);
+ PHY_WRITE(sc, MAKPHY_EADR, 0);
- /* Switch to copper-only mode if necessary. */
- if (sc->mii_mpd_model == MII_MODEL_MARVELL_E1111 &&
- (sc->mii_flags & MIIF_HAVEFIBER) == 0) {
- /*
- * The onboard 88E1111 PHYs on the Sun X4100 M2 come
- * up with fiber/copper auto-selection enabled, even
- * though the machine only has copper ports. This
- * makes the chip autoselect to 1000baseX, and makes
- * it impossible to select any other media. So
- * disable fiber/copper autoselection.
- */
- int reg = PHY_READ(sc, E1000_ESSR);
- if ((reg & E1000_ESSR_HWCFG_MODE) == E1000_ESSR_RGMII_COPPER) {
- reg |= E1000_ESSR_DIS_FC;
- PHY_WRITE(sc, E1000_ESSR, reg);
- }
- }
-
- /* Switch to fiber-only mode if necessary. */
- if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1112 &&
- sc->mii_flags & MIIF_HAVEFIBER) {
- int page = PHY_READ(sc, E1000_EADR);
- PHY_WRITE(sc, E1000_EADR, 2);
- int reg = PHY_READ(sc, E1000_SCR);
- reg &= ~E1000_SCR_MODE_MASK;
- reg |= E1000_SCR_MODE_1000BX;
- PHY_WRITE(sc, E1000_SCR, reg);
- PHY_WRITE(sc, E1000_EADR, page);
+ switch (sc->mii_mpd_model) {
+ case MII_MODEL_xxMARVELL_E1011:
+ case MII_MODEL_xxMARVELL_E1112:
+ if (PHY_READ(sc, MAKPHY_ESSR) & ESSR_FIBER_LINK)
+ sc->mii_flags |= MIIF_HAVEFIBER;
+ break;
+ default:
+ break;
}
PHY_RESET(sc);
@@ -284,72 +220,42 @@ makphyattach(device_t parent, device_t s
static void
makphy_reset(struct mii_softc *sc)
{
- int reg, i;
+ int reg;
- reg = PHY_READ(sc, MII_BMCR);
- reg |= BMCR_RESET;
- PHY_WRITE(sc, MII_BMCR, reg);
-
- for (i = 0; i < 500; i++) {
- DELAY(1);
- reg = PHY_READ(sc, MII_BMCR);
- if (!(reg & BMCR_RESET))
- break;
- }
+ mii_phy_reset(sc);
/*
* Initialize PHY Specific Control Register.
*/
- reg = PHY_READ(sc, E1000_SCR);
+ reg = PHY_READ(sc, MAKPHY_PSCR);
/* Assert CRS on transmit. */
- reg |= E1000_SCR_ASSERT_CRS_ON_TX;
-
- /* Enable auto crossover. */
switch (sc->mii_mpd_model) {
- case MII_MODEL_xxMARVELL_E3016:
- case MII_MODEL_xxMARVELL_E3082:
- /* Bits are in a different position. */
- reg |= (E1000_SCR_AUTO_X_MODE >> 1);
+ 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:
- /* Automatic crossover causes problems for 1000baseX. */
- if (sc->mii_flags & MIIF_IS_1000X)
- reg &= ~E1000_SCR_AUTO_X_MODE;
- else
- reg |= E1000_SCR_AUTO_X_MODE;
- }
-
- /* Disable energy detect; only available on some models. */
- switch(sc->mii_mpd_model) {
- case MII_MODEL_xxMARVELL_E3016:
- reg &= ~E3000_SCR_EN_DETECT_MASK;
- break;
- case MII_MODEL_MARVELL_E1011:
- case MII_MODEL_MARVELL_E1111:
- case MII_MODEL_xxMARVELL_E1112:
- case MII_MODEL_xxMARVELL_PHYG65G:
- reg &= ~E1000_SCR_EN_DETECT_MASK;
+ default: /* No PSCR_CRS_ON_TX bit */
break;
}
/* Enable scrambler if necessary. */
if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E3016)
- reg &= ~E3000_SCR_SCRAMBLER_DISABLE;
+ 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 |= E3000_SCR_REG8_NEXT_PAGE;
-
- PHY_WRITE(sc, E1000_SCR, reg);
+ reg |= E3016_PSCR_REG8NXTPG;
- /* 25 MHz TX_CLK should always work. */
- reg = PHY_READ(sc, E1000_ESCR);
- reg |= E1000_ESCR_TX_CLK_25;
- PHY_WRITE(sc, E1000_ESCR, reg);
+ PHY_WRITE(sc, MAKPHY_PSCR, reg);
/* Configure LEDs if they were left unconfigured. */
if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E3016 &&
@@ -358,14 +264,7 @@ makphy_reset(struct mii_softc *sc)
PHY_WRITE(sc, 0x16, reg);
}
- /*
- * Do a software reset for these settings to take effect.
- * Disable autonegotiation, such that all capabilities get
- * advertised when it is switched back on.
- */
- reg = PHY_READ(sc, MII_BMCR);
- reg &= ~BMCR_AUTOEN;
- PHY_WRITE(sc, MII_BMCR, reg | BMCR_RESET);
+ mii_phy_reset(sc);
}
static int
@@ -443,15 +342,16 @@ static void
makphy_status(struct mii_softc *sc)
{
struct mii_data *mii = sc->mii_pdata;
- int bmcr, gsr, ssr;
+ int bmcr, gsr, pssr;
mii->mii_media_status = IFM_AVALID;
mii->mii_media_active = IFM_ETHER;
bmcr = PHY_READ(sc, MII_BMCR);
- ssr = PHY_READ(sc, E1000_SSR);
+ /* XXX FIXME: Use different page for Fiber on newer chips */
+ pssr = PHY_READ(sc, MAKPHY_PSSR);
- if (ssr & E1000_SSR_LINK)
+ if (pssr & PSSR_LINK)
mii->mii_media_status |= IFM_ACTIVE;
if (bmcr & BMCR_ISO) {
@@ -463,30 +363,44 @@ makphy_status(struct mii_softc *sc)
if (bmcr & BMCR_LOOP)
mii->mii_media_active |= IFM_LOOP;
- if (!(ssr & E1000_SSR_SPD_DPLX_RESOLVED)) {
+ /*
+ * Check Speed and Duplex Resolved bit.
+ * XXX Note that this bit is always 1 when autonego is not enabled.
+ */
+ if (!(pssr & PSSR_RESOLVED)) {
/* Erg, still trying, I guess... */
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 {
- if (ssr & E1000_SSR_1000MBS)
+ switch (PSSR_SPEED_get(pssr)) {
+ case SPEED_1000:
mii->mii_media_active |= IFM_1000_T;
- else if (ssr & E1000_SSR_100MBS)
+ break;
+ case SPEED_100:
mii->mii_media_active |= IFM_100_TX;
- else
+ break;
+ case SPEED_10:
mii->mii_media_active |= IFM_10_T;
+ break;
+ default:
+ mii->mii_media_active |= IFM_NONE;
+ mii->mii_media_status = 0;
+ return;
+ }
}
- if (ssr & E1000_SSR_DUPLEX)
+ if (pssr & PSSR_DUPLEX)
mii->mii_media_active |= mii_phy_flowstatus(sc) | IFM_FDX;
else
mii->mii_media_active |= IFM_HDX;
if (IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T) {
- gsr = PHY_READ(sc, MII_100T2SR) | PHY_READ(sc, MII_100T2SR);
+ 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.8 src/sys/dev/mii/makphyreg.h:1.9
--- src/sys/dev/mii/makphyreg.h:1.8 Tue Dec 25 08:33:52 2018
+++ src/sys/dev/mii/makphyreg.h Fri Dec 28 06:20:32 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: makphyreg.h,v 1.8 2018/12/25 08:33:52 msaitoh Exp $ */
+/* $NetBSD: makphyreg.h,v 1.9 2018/12/28 06:20:32 msaitoh 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