CFT: msk(4)/nfe(4) with 88E1116 PHY
Pyun YongHyeon
pyunyh at gmail.com
Wed Oct 3 18:40:04 PDT 2007
Hi,
There had been several complaints that nfe(4) with 88E1116 PHY
doesn't work. The attached patch may fix it by taking the PHY
out of powerdown mode. Because I know that some revisions works
well without any patch I'd like to know whether attached patch
have any effects for those hardwares that had been working
correctly. I think both msk(4) and nfe(4) would be affacted by
the patch so if you're using one of these hardwares please give
it spin and let me know the result.
Thanks.
--
Regards,
Pyun YongHyeon
-------------- next part --------------
Index: e1000phy.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/mii/e1000phy.c,v
retrieving revision 1.18
diff -u -r1.18 e1000phy.c
--- e1000phy.c 11 Dec 2006 11:09:48 -0000 1.18
+++ e1000phy.c 4 Oct 2007 01:35:56 -0000
@@ -235,6 +235,8 @@
/* Disable energy detect mode. */
reg &= ~E1000_SCR_EN_DETECT_MASK;
reg |= E1000_SCR_AUTO_X_MODE;
+ if (esc->mii_model == MII_MODEL_MARVELL_E1116)
+ reg &= ~E1000_SCR_POWER_DOWN;
break;
case MII_MODEL_MARVELL_E3082:
reg |= (E1000_SCR_AUTO_X_MODE >> 1);
@@ -248,6 +250,14 @@
/* Auto correction for reversed cable polarity. */
reg &= ~E1000_SCR_POLARITY_REVERSAL;
PHY_WRITE(sc, E1000_SCR, reg);
+
+ if (esc->mii_model == MII_MODEL_MARVELL_E1116) {
+ PHY_WRITE(sc, E1000_EADR, 2);
+ reg = PHY_READ(sc, E1000_SCR);
+ reg |= E1000_SCR_RGMII_POWER_UP;
+ PHY_WRITE(sc, E1000_SCR, reg);
+ PHY_WRITE(sc, E1000_EADR, 0);
+ }
}
switch (MII_MODEL(esc->mii_model)) {
Index: e1000phyreg.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/mii/e1000phyreg.h,v
retrieving revision 1.4
diff -u -r1.4 e1000phyreg.h
--- e1000phyreg.h 11 Dec 2006 10:43:32 -0000 1.4
+++ e1000phyreg.h 4 Oct 2007 01:35:56 -0000
@@ -244,6 +244,11 @@
#define E1000_SCR_MODE_COPPER 0x0280
#define E1000_SCR_MODE_1000BX 0x0380
+/* 88E1116 page 0 */
+#define E1000_SCR_POWER_DOWN 0x0004
+/* 88E1116 page 2 */
+#define E1000_SCR_RGMII_POWER_UP 0x0008
+
#define E1000_SSR 0x11 /* special status register */
#define E1000_SSR_JABBER 0x0001
#define E1000_SSR_REV_POLARITY 0x0002
More information about the freebsd-current
mailing list