Module Name: src
Committed By: snj
Date: Sat Mar 21 16:58:31 UTC 2015
Modified Files:
src/sys/dev/mii [netbsd-7]: rgephy.c rgephyreg.h
Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #624):
sys/dev/mii/rgephy.c: revision 1.38
sys/dev/mii/rgephyreg.h: revision 1.7
add RTL8211F support
To generate a diff of this commit:
cvs rdiff -u -r1.35.4.1 -r1.35.4.2 src/sys/dev/mii/rgephy.c
cvs rdiff -u -r1.6 -r1.6.34.1 src/sys/dev/mii/rgephyreg.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/rgephy.c
diff -u src/sys/dev/mii/rgephy.c:1.35.4.1 src/sys/dev/mii/rgephy.c:1.35.4.2
--- src/sys/dev/mii/rgephy.c:1.35.4.1 Sat Jan 17 13:50:57 2015
+++ src/sys/dev/mii/rgephy.c Sat Mar 21 16:58:31 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rgephy.c,v 1.35.4.1 2015/01/17 13:50:57 martin Exp $ */
+/* $NetBSD: rgephy.c,v 1.35.4.2 2015/03/21 16:58:31 snj Exp $ */
/*
* Copyright (c) 2003
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rgephy.c,v 1.35.4.1 2015/01/17 13:50:57 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rgephy.c,v 1.35.4.2 2015/03/21 16:58:31 snj Exp $");
/*
@@ -303,7 +303,14 @@ rgephy_service(struct mii_softc *sc, str
* need to restart the autonegotiation process. Read
* the BMSR twice in case it's latched.
*/
- if (sc->mii_mpd_rev >= 2) {
+ if (sc->mii_mpd_rev >= 6) {
+ /* RTL8211F */
+ reg = PHY_READ(sc, RGEPHY_MII_PHYSR);
+ if (reg & RGEPHY_PHYSR_LINK) {
+ sc->mii_ticks = 0;
+ break;
+ }
+ } else if (sc->mii_mpd_rev >= 2) {
/* RTL8211B(L) */
reg = PHY_READ(sc, RGEPHY_MII_SSR);
if (reg & RGEPHY_SSR_LINK) {
@@ -351,13 +358,17 @@ static void
rgephy_status(struct mii_softc *sc)
{
struct mii_data *mii = sc->mii_pdata;
- int gstat, bmsr, bmcr;
+ int gstat, bmsr, bmcr, physr;
uint16_t ssr;
mii->mii_media_status = IFM_AVALID;
mii->mii_media_active = IFM_ETHER;
- if (sc->mii_mpd_rev >= 2) {
+ if (sc->mii_mpd_rev >= 6) {
+ physr = PHY_READ(sc, RGEPHY_MII_PHYSR);
+ if (physr & RGEPHY_PHYSR_LINK)
+ mii->mii_media_status |= IFM_ACTIVE;
+ } else if (sc->mii_mpd_rev >= 2) {
ssr = PHY_READ(sc, RGEPHY_MII_SSR);
if (ssr & RGEPHY_SSR_LINK)
mii->mii_media_status |= IFM_ACTIVE;
@@ -387,7 +398,28 @@ rgephy_status(struct mii_softc *sc)
}
}
- if (sc->mii_mpd_rev >= 2) {
+ if (sc->mii_mpd_rev >= 6) {
+ physr = PHY_READ(sc, RGEPHY_MII_PHYSR);
+ switch (__SHIFTOUT(physr, RGEPHY_PHYSR_SPEED)) {
+ case RGEPHY_PHYSR_SPEED_1000:
+ mii->mii_media_active |= IFM_1000_T;
+ break;
+ case RGEPHY_PHYSR_SPEED_100:
+ mii->mii_media_active |= IFM_100_TX;
+ break;
+ case RGEPHY_PHYSR_SPEED_10:
+ mii->mii_media_active |= IFM_10_T;
+ break;
+ default:
+ mii->mii_media_active |= IFM_NONE;
+ break;
+ }
+ if (physr & RGEPHY_PHYSR_DUPLEX)
+ mii->mii_media_active |= mii_phy_flowstatus(sc) |
+ IFM_FDX;
+ else
+ mii->mii_media_active |= IFM_HDX;
+ } else if (sc->mii_mpd_rev >= 2) {
ssr = PHY_READ(sc, RGEPHY_MII_SSR);
switch (ssr & RGEPHY_SSR_SPD_MASK) {
case RGEPHY_SSR_S1000:
Index: src/sys/dev/mii/rgephyreg.h
diff -u src/sys/dev/mii/rgephyreg.h:1.6 src/sys/dev/mii/rgephyreg.h:1.6.34.1
--- src/sys/dev/mii/rgephyreg.h:1.6 Sun Jul 18 03:00:39 2010
+++ src/sys/dev/mii/rgephyreg.h Sat Mar 21 16:58:31 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rgephyreg.h,v 1.6 2010/07/18 03:00:39 jakllsch Exp $ */
+/* $NetBSD: rgephyreg.h,v 1.6.34.1 2015/03/21 16:58:31 snj Exp $ */
/*
* Copyright (c) 2003
@@ -55,4 +55,22 @@
#define RGEPHY_SSR_ALDPS 0x0008 /* RTL8211C(L) only */
#define RGEPHY_SSR_JABBER 0x0001 /* Jabber */
+/* RTL8211F */
+#define RGEPHY_MII_PHYSR 0x1a /* PHY Specific status register */
+#define RGEPHY_PHYSR_ALDPS __BIT(14)
+#define RGEPHY_PHYSR_MDI_PLUG __BIT(13)
+#define RGEPHY_PHYSR_NWAY_EN __BIT(12)
+#define RGEPHY_PHYSR_MASTER __BIT(11)
+#define RGEPHY_PHYSR_EEE __BIT(8)
+#define RGEPHY_PHYSR_RXFLOW_EN __BIT(7)
+#define RGEPHY_PHYSR_TXFLOW_EN __BIT(6)
+#define RGEPHY_PHYSR_SPEED __BITS(5,4)
+#define RGEPHY_PHYSR_SPEED_10 0
+#define RGEPHY_PHYSR_SPEED_100 1
+#define RGEPHY_PHYSR_SPEED_1000 2
+#define RGEPHY_PHYSR_DUPLEX __BIT(3)
+#define RGEPHY_PHYSR_LINK __BIT(2)
+#define RGEPHY_PHYSR_MDI_XOVER __BIT(1)
+#define RGEPHY_PHYSR_JABBER __BIT(0)
+
#endif /* _DEV_MII_RGEPHYREG_H_ */