Date: Thu, 26 Mar 2015 04:58:48 +0000 (UTC) From: Pyun YongHyeon <yongari@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r280658 - stable/9/sys/dev/sis Message-ID: <201503260458.t2Q4wmBp031544@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: yongari Date: Thu Mar 26 04:58:47 2015 New Revision: 280658 URL: https://svnweb.freebsd.org/changeset/base/280658 Log: MFC r275816: Fix a bug introdiced in r217548. According to NS DP83815 data sheet, RX filter should be disabled before programming. Previously it was clearing wrong bits so RX filter was not disabled in RX filter configuration. MFC r277048: Enable receive filter in sis_rxfilter(). While I'm here add a check for driver running state for multicast filter handling. Modified: stable/9/sys/dev/sis/if_sis.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/sis/if_sis.c ============================================================================== --- stable/9/sys/dev/sis/if_sis.c Thu Mar 26 04:55:22 2015 (r280657) +++ stable/9/sys/dev/sis/if_sis.c Thu Mar 26 04:58:47 2015 (r280658) @@ -757,7 +757,8 @@ sis_rxfilter_ns(struct sis_softc *sc) if_maddr_runlock(ifp); } - CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter); + /* Turn the receive filter on */ + CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter | SIS_RXFILTCTL_ENABLE); CSR_READ_4(sc, SIS_RXFILT_CTL); } @@ -779,7 +780,7 @@ sis_rxfilter_sis(struct sis_softc *sc) filter = CSR_READ_4(sc, SIS_RXFILT_CTL); if (filter & SIS_RXFILTCTL_ENABLE) { - CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter & ~SIS_RXFILT_CTL); + CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter & ~SIS_RXFILTCTL_ENABLE); CSR_READ_4(sc, SIS_RXFILT_CTL); } filter &= ~(SIS_RXFILTCTL_ALLPHYS | SIS_RXFILTCTL_BROAD | @@ -819,7 +820,8 @@ sis_rxfilter_sis(struct sis_softc *sc) CSR_WRITE_4(sc, SIS_RXFILT_DATA, hashes[i]); } - CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter); + /* Turn the receive filter on */ + CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter | SIS_RXFILTCTL_ENABLE); CSR_READ_4(sc, SIS_RXFILT_CTL); } @@ -2015,8 +2017,6 @@ sis_initl(struct sis_softc *sc) } sis_rxfilter(sc); - /* Turn the receive filter on */ - SIS_SETBIT(sc, SIS_RXFILT_CTL, SIS_RXFILTCTL_ENABLE); /* * Load the address of the RX and TX lists. @@ -2138,7 +2138,8 @@ sis_ioctl(struct ifnet *ifp, u_long comm case SIOCADDMULTI: case SIOCDELMULTI: SIS_LOCK(sc); - sis_rxfilter(sc); + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + sis_rxfilter(sc); SIS_UNLOCK(sc); break; case SIOCGIFMEDIA:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503260458.t2Q4wmBp031544>