Here is the promised diff that makes fec(4) call mii_tick() like all
our other ethernet drivers that use mii do.
Does this fix your problem Philip?
Index: sys/arch/armv7/imx/if_fec.c
===================================================================
RCS file: /cvs/src/sys/arch/armv7/imx/if_fec.c,v
retrieving revision 1.17
diff -u -p -r1.17 if_fec.c
--- sys/arch/armv7/imx/if_fec.c 21 Sep 2016 10:28:47 -0000 1.17
+++ sys/arch/armv7/imx/if_fec.c 21 Sep 2016 11:19:21 -0000
@@ -231,6 +231,7 @@ struct fec_softc {
struct fec_buffer *rx_buffer_base;
int cur_tx;
int cur_rx;
+ struct timeout sc_tick;
};
struct fec_softc *fec_sc;
@@ -249,6 +250,7 @@ void fec_iff(struct fec_softc *);
struct mbuf * fec_newbuf(void);
int fec_intr(void *);
void fec_recv(struct fec_softc *);
+void fec_tick(void *);
int fec_miibus_readreg(struct device *, int, int);
void fec_miibus_writereg(struct device *, int, int, int);
void fec_miibus_statchg(struct device *);
@@ -430,6 +432,8 @@ fec_attach(struct device *parent, struct
ether_ifattach(ifp);
splx(s);
+ timeout_set(&sc->sc_tick, fec_tick, sc);
+
fec_sc = sc;
return;
@@ -966,6 +970,19 @@ done:
HWRITE4(sc, ENET_RDAR, ENET_RDAR_RDAR);
if_input(ifp, &ml);
+}
+
+void
+fec_tick(void *arg)
+{
+ struct fec_softc *sc = arg;
+ int s;
+
+ s = splnet();
+ mii_tick(&sc->sc_mii);
+ splx(s);
+
+ timeout_add_sec(&sc->sc_tick, 1);
}
/*