Module Name:    src
Committed By:   msaitoh
Date:           Fri Feb 28 05:13:19 UTC 2020

Modified Files:
        src/sys/dev/mii: etphy.c
        src/sys/dev/pci: if_et.c

Log Message:
 Move PHY_RESET() in the media change path from if_et.c to etphy.c.

 I don't know if the reset is required or not. I tested some media
transitions without the reset and it worked. It might be OK to remove
but Linux does it only in et1011c_config_aneg(). So move the reset to
etphy_service(,,MII_MEDIACHG)'s autonego case. This change is also
required for future locking changes.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/mii/etphy.c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/pci/if_et.c

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/etphy.c
diff -u src/sys/dev/mii/etphy.c:1.7 src/sys/dev/mii/etphy.c:1.8
--- src/sys/dev/mii/etphy.c:1.7	Wed Nov 27 10:19:20 2019
+++ src/sys/dev/mii/etphy.c	Fri Feb 28 05:13:19 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: etphy.c,v 1.7 2019/11/27 10:19:20 msaitoh Exp $	*/
+/*	$NetBSD: etphy.c,v 1.8 2020/02/28 05:13:19 msaitoh Exp $	*/
 /*	$OpenBSD: etphy.c,v 1.4 2008/04/02 20:12:58 brad Exp $	*/
 
 /*
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: etphy.c,v 1.7 2019/11/27 10:19:20 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: etphy.c,v 1.8 2020/02/28 05:13:19 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -212,6 +212,12 @@ etphy_service(struct mii_softc *sc, stru
 			bmcr &= ~BMCR_AUTOEN;
 			PHY_WRITE(sc, MII_BMCR, bmcr);
 			PHY_WRITE(sc, MII_BMCR, bmcr | BMCR_PDOWN);
+		} else {
+			/*
+			 * Issue reset before configuring autonego.
+			 * XXX Is this required?
+			 */
+			PHY_RESET(sc);
 		}
 
 		mii_phy_setmedia(sc);

Index: src/sys/dev/pci/if_et.c
diff -u src/sys/dev/pci/if_et.c:1.30 src/sys/dev/pci/if_et.c:1.31
--- src/sys/dev/pci/if_et.c:1.30	Tue Feb  4 05:44:14 2020
+++ src/sys/dev/pci/if_et.c	Fri Feb 28 05:13:19 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_et.c,v 1.30 2020/02/04 05:44:14 thorpej Exp $	*/
+/*	$NetBSD: if_et.c,v 1.31 2020/02/28 05:13:19 msaitoh Exp $	*/
 /*	$OpenBSD: if_et.c,v 1.12 2008/07/11 09:29:02 kevlo $	*/
 /*
  * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_et.c,v 1.30 2020/02/04 05:44:14 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_et.c,v 1.31 2020/02/28 05:13:19 msaitoh Exp $");
 
 #include "opt_inet.h"
 #include "vlan.h"
@@ -93,7 +93,6 @@ static int	et_init(struct ifnet *);
 static int	et_ioctl(struct ifnet *, u_long, void *);
 static void	et_start(struct ifnet *);
 static void	et_watchdog(struct ifnet *);
-static int	et_ifmedia_upd(struct ifnet *);
 static void	et_ifmedia_sts(struct ifnet *, struct ifmediareq *);
 
 static int	et_intr(void *);
@@ -280,7 +279,8 @@ et_attach(device_t parent, device_t self
 	mii->mii_statchg = et_miibus_statchg;
 
 	sc->sc_ethercom.ec_mii = mii;
-	ifmedia_init(&mii->mii_media, 0, et_ifmedia_upd, et_ifmedia_sts);
+	ifmedia_init(&mii->mii_media, 0, ether_mediachange,
+	    et_ifmedia_sts);
 	mii_attach(self, mii, 0xffffffff, MII_PHY_ANY, MII_OFFSET_ANY, 0);
 	if (LIST_FIRST(&mii->mii_phys) == NULL) {
 		aprint_error_dev(self, "no PHY found!\n");
@@ -544,20 +544,6 @@ et_miibus_statchg(struct ifnet *ifp)
 #undef NRETRY
 }
 
-static int
-et_ifmedia_upd(struct ifnet *ifp)
-{
-	struct et_softc *sc;
-	struct mii_data *mii;
-	struct mii_softc *miisc;
-
-	sc = ifp->if_softc;
-	mii = &sc->sc_miibus;
-	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-		PHY_RESET(miisc);
-	return (mii_mediachg(mii));
-}
-
 static void
 et_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
 {
@@ -1115,7 +1101,7 @@ et_init(struct ifnet *ifp)
 	ifp->if_flags &= ~IFF_OACTIVE;
 
 	sc->sc_flags &= ~ET_FLAG_LINK;
-	et_ifmedia_upd(ifp);
+	ether_mediachange(ifp);
 back:
 	if (error)
 		et_stop(sc);

Reply via email to