peterj created this revision.
peterj added a reviewer: network.
peterj requested review of this revision.

REVISION SUMMARY
  The RTL8211F-VD is a replacement/upgrade for the RTL8211F.  Based on 
https://github.com/torvalds/linux/commit/bb726b753f75a4eeda291438f89dfd9b94783569,
 the only difference is the lack of the PCR2 register, which FreeBSD doesn't 
use.
  
  At least on my Radxa ROCK 4C Plus, the fallback ukphy(4) is unable to manage 
autonegotiation, whereas the attached patch allows rgephy(4) to attach and 
autonegotiation then works.

TEST PLAN
  Tested on my Radxa ROCK 4C Plus

REVISION DETAIL
  https://reviews.freebsd.org/D45109

AFFECTED FILES
  sys/dev/mii/miidevs
  sys/dev/mii/rgephy.c
  sys/dev/mii/rgephyreg.h

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: peterj, #network
Cc: freebsd-net-list
diff --git a/sys/dev/mii/rgephyreg.h b/sys/dev/mii/rgephyreg.h
--- a/sys/dev/mii/rgephyreg.h
+++ b/sys/dev/mii/rgephyreg.h
@@ -38,6 +38,7 @@
 #define	RGEPHY_8211B		2
 #define	RGEPHY_8211C		3
 #define	RGEPHY_8211F		6
+#define	RGEPHY_8211FVD		8
 
 /*
  * RealTek 8169S/8110S gigE PHY registers
diff --git a/sys/dev/mii/rgephy.c b/sys/dev/mii/rgephy.c
--- a/sys/dev/mii/rgephy.c
+++ b/sys/dev/mii/rgephy.c
@@ -93,6 +93,7 @@
 static const struct mii_phydesc rgephys[] = {
 	MII_PHY_DESC(REALTEK, RTL8169S),
 	MII_PHY_DESC(REALTEK, RTL8251),
+	MII_PHY_DESC(REALTEK, RTL8211FVD),
 	MII_PHY_END
 };
 
@@ -283,7 +284,7 @@
 	linkup = 0;
 	if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 &&
 	    sc->mii_mpd_rev >= RGEPHY_8211B) {
-		if (sc->mii_mpd_rev == RGEPHY_8211F) {
+		if (sc->mii_mpd_rev >= RGEPHY_8211F) {
 			reg = PHY_READ(sc, RGEPHY_F_MII_SSR);
 			if (reg & RGEPHY_F_SSR_LINK)
 				linkup++;
@@ -338,7 +339,7 @@
 
 	if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 &&
 	    sc->mii_mpd_rev >= RGEPHY_8211B) {
-		if (sc->mii_mpd_rev == RGEPHY_8211F) {
+		if (sc->mii_mpd_rev >= RGEPHY_8211F) {
 			ssr = PHY_READ(sc, RGEPHY_F_MII_SSR);
 			switch (ssr & RGEPHY_F_SSR_SPD_MASK) {
 			case RGEPHY_F_SSR_S1000:
@@ -523,6 +524,7 @@
 
 	switch (sc->mii_mpd_rev) {
 	case RGEPHY_8211F:
+	case RGEPHY_8211FVD:
 		pcr = PHY_READ(sc, RGEPHY_F_MII_PCR1);
 		pcr &= ~(RGEPHY_F_PCR1_MDI_MM | RGEPHY_F_PCR1_ALDPS_EN);
 		PHY_WRITE(sc, RGEPHY_F_MII_PCR1, pcr);
diff --git a/sys/dev/mii/miidevs b/sys/dev/mii/miidevs
--- a/sys/dev/mii/miidevs
+++ b/sys/dev/mii/miidevs
@@ -330,6 +330,7 @@
 model REALTEK RTL8201E		0x0008 RTL8201E 10/100 media interface
 model REALTEK RTL8251		0x0000 RTL8251/8153 1000BASE-T media interface
 model REALTEK RTL8169S		0x0011 RTL8169S/8110S/8211 1000BASE-T media interface
+model REALTEK RTL8211FVD	0x0007 RTL8211F-VD 1000BASE-T media interface
 
 /* Seeq Seeq PHYs */
 model SEEQ 80220		0x0003 Seeq 80220 10/100 media interface

Reply via email to