Lost a few hairs over this one.  Turns out you have to write these
registers in the right order to program the address filter correctly.

With this diff the Gigabit Ethernet interface on the Rock64 works.

ok?


Index: dev/ic/dwc_gmac.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/dwc_gmac.c,v
retrieving revision 1.9
diff -u -p -r1.9 dwc_gmac.c
--- dev/ic/dwc_gmac.c   7 Apr 2018 22:43:12 -0000       1.9
+++ dev/ic/dwc_gmac.c   5 May 2018 21:43:54 -0000
@@ -304,13 +304,13 @@ dwc_gmac_reset(struct dwc_gmac_softc *sc
 void
 dwc_gmac_write_hwaddr(struct dwc_gmac_softc *sc, uint8_t *enaddr)
 {
-       uint32_t lo, hi;
+       uint32_t hi, lo;
 
+       hi = enaddr[4] | (enaddr[5] << 8);
        lo = enaddr[0] | (enaddr[1] << 8) | (enaddr[2] << 16)
            | (enaddr[3] << 24);
-       hi = enaddr[4] | (enaddr[5] << 8);
-       bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_ADDR0LO, lo);
        bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_ADDR0HI, hi);
+       bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_ADDR0LO, lo);
 }
 
 int

Reply via email to