The branch main has been updated by mhorne:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=6501fcdc0a97faa3c59f6ece314bf7754303db6f

commit 6501fcdc0a97faa3c59f6ece314bf7754303db6f
Author:     Jiahao LI <[email protected]>
AuthorDate: 2022-09-08 15:50:37 +0000
Commit:     Mitchell Horne <[email protected]>
CommitDate: 2022-09-09 15:31:26 +0000

    if_dwc: fix reinitialization with changed MAC
    
    It was observed that on RockPro64 hardware, the dwc interface is unable
    to receive packets after being assigned a new MAC address. The fix is
    simply to call mii_mediachg() before touching any device registers in
    dwc_init_locked(). This is consistent with what the OpenBSD driver does.
    
    PR:             263820
    MFC after:      1 week
---
 sys/dev/dwc/if_dwc.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index 5ec115f7081b..5fc735fdd5f1 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -1166,6 +1166,12 @@ dwc_init_locked(struct dwc_softc *sc)
        if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
                return;
 
+       /*
+        * Call mii_mediachg() which will call back into dwc_miibus_statchg()
+        * to set up the remaining config registers based on current media.
+        */
+       mii_mediachg(sc->mii_softc);
+
        dwc_setup_rxfilter(sc);
        dwc_setup_core(sc);
        dwc_enable_mac(sc, true);
@@ -1174,11 +1180,6 @@ dwc_init_locked(struct dwc_softc *sc)
 
        if_setdrvflagbits(ifp, IFF_DRV_RUNNING, IFF_DRV_OACTIVE);
 
-       /*
-        * Call mii_mediachg() which will call back into dwc_miibus_statchg()
-        * to set up the remaining config registers based on current media.
-        */
-       mii_mediachg(sc->mii_softc);
        callout_reset(&sc->dwc_callout, hz, dwc_tick, sc);
 }
 

Reply via email to