msk(4): Do not blindly clear entire GPHY control register.
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 14 Aug 2011 12:39:58 +0000 (20:39 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 14 Aug 2011 14:11:52 +0000 (22:11 +0800)
It seems some bits of the register is used for other purposes such
that clearing these bits resulted in unexpected results such as
corrupted RX frames or missing LE status updates.

Obtained-from: FreeBSD 222219

sys/dev/netif/msk/if_msk.c

index 9857285..6894a6d 100644 (file)
@@ -1185,8 +1185,8 @@ mskc_reset(struct msk_softc *sc)
        /* Reset GPHY/GMAC Control */
        for (i = 0; i < sc->msk_num_port; i++) {
                /* GPHY Control reset. */
-               CSR_WRITE_4(sc, MR_ADDR(i, GPHY_CTRL), GPC_RST_SET);
-               CSR_WRITE_4(sc, MR_ADDR(i, GPHY_CTRL), GPC_RST_CLR);
+               CSR_WRITE_1(sc, MR_ADDR(i, GPHY_CTRL), GPC_RST_SET);
+               CSR_WRITE_1(sc, MR_ADDR(i, GPHY_CTRL), GPC_RST_CLR);
                /* GMAC Control reset. */
                CSR_WRITE_4(sc, MR_ADDR(i, GMAC_CTRL), GMC_RST_SET);
                CSR_WRITE_4(sc, MR_ADDR(i, GMAC_CTRL), GMC_RST_CLR);