Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev Move PHY_RESET() in the media change path from if_et...



details:   https://anonhg.NetBSD.org/src/rev/b9bb6d9854b8
branches:  trunk
changeset: 745311:b9bb6d9854b8
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Fri Feb 28 05:13:19 2020 +0000

description:
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.

diffstat:

 sys/dev/mii/etphy.c |  10 ++++++++--
 sys/dev/pci/if_et.c |  24 +++++-------------------
 2 files changed, 13 insertions(+), 21 deletions(-)

diffs (97 lines):

diff -r 21a480f7e72d -r b9bb6d9854b8 sys/dev/mii/etphy.c
--- a/sys/dev/mii/etphy.c       Fri Feb 28 03:52:26 2020 +0000
+++ b/sys/dev/mii/etphy.c       Fri Feb 28 05:13:19 2020 +0000
@@ -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 @@
                        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);
diff -r 21a480f7e72d -r b9bb6d9854b8 sys/dev/pci/if_et.c
--- a/sys/dev/pci/if_et.c       Fri Feb 28 03:52:26 2020 +0000
+++ b/sys/dev/pci/if_et.c       Fri Feb 28 05:13:19 2020 +0000
@@ -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_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 @@
        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 @@
 #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 @@
        ifp->if_flags &= ~IFF_OACTIVE;
 
        sc->sc_flags &= ~ET_FLAG_LINK;
-       et_ifmedia_upd(ifp);
+       ether_mediachange(ifp);
 back:
        if (error)
                et_stop(sc);



Home | Main Index | Thread Index | Old Index