NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/52818: The wm driver stops working after large traffic



The following reply was made to PR kern/52818; it has been noted by GNATS.

From: clare%csel.org@localhost
To: Masanobu SAITOH <msaitoh%execsw.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: kern/52818: The wm driver stops working after large traffic
Date: Sat, 30 Dec 2017 00:23:31 +0900

 On Thu, 28 Dec 2017 21:07:36 +0900
 Masanobu SAITOH <msaitoh%execsw.org@localhost> wrote:
 
 > Could you test the following patch?
 > 
 > ---------
 >   Add ASPM workaround for 8257[1234] and 82583.
 > 
 > Index: if_wm.c
 > ===================================================================
 > RCS file: /cvsroot/src/sys/dev/pci/if_wm.c,v
 > retrieving revision 1.550
 > diff -u -p -r1.550 if_wm.c
 > --- if_wm.c	28 Dec 2017 06:13:50 -0000	1.550
 > +++ if_wm.c	28 Dec 2017 12:03:45 -0000
 > @@ -921,6 +921,7 @@ static void	wm_ulp_disable(struct wm_sof
 >   static void	wm_enable_phy_wakeup(struct wm_softc *);
 >   static void	wm_igp3_phy_powerdown_workaround_ich8lan(struct wm_softc *);
 >   static void	wm_enable_wakeup(struct wm_softc *);
 > +static void	wm_disable_aspm(struct wm_softc *);
 >   /* LPLU (Low Power Link Up) */
 >   static void	wm_lplu_d0_disable(struct wm_softc *);
 >   /* EEE */
 > @@ -2048,6 +2049,9 @@ alloc_retry:
 >   		    (sc->sc_flags & WM_F_PCIX) ? "PCIX" : "PCI");
 >   	}
 >   
 > +	/* Disable ASPM L0s and/or L1 for workaround */
 > +	wm_disable_aspm(sc);
 > +
 >   	/* clear interesting stat counters */
 >   	CSR_READ(sc, WMREG_COLC);
 >   	CSR_READ(sc, WMREG_RXERRC);
 > @@ -2911,6 +2915,8 @@ wm_resume(device_t self, const pmf_qual_
 >   {
 >   	struct wm_softc *sc = device_private(self);
 >   
 > +	/* Disable ASPM L0s and/or L1 for workaround */
 > +	wm_disable_aspm(sc);
 >   	wm_init_manageability(sc);
 >   
 >   	return true;
 > @@ -13806,6 +13812,66 @@ wm_enable_wakeup(struct wm_softc *sc)
 >   	pci_conf_write(sc->sc_pc, sc->sc_pcitag, pmreg + PCI_PMCSR, pmode);
 >   }
 >   
 > +/* Disable ASPM L0s and/or L1 for workaround */
 > +static void
 > +wm_disable_aspm(struct wm_softc *sc)
 > +{
 > +	pcireg_t reg, mask = 0;
 > +	unsigned const char *str = "";
 > +
 > +	/*
 > +	 *  Only for PCIe device which has PCIe capability in the PCI config
 > +	 * space.
 > +	 */
 > +	if (((sc->sc_flags & WM_F_PCIE) == 0) || (sc->sc_pcixe_capoff == 0))
 > +		return;
 > +
 > +	switch (sc->sc_type) {
 > +	case WM_T_82571:
 > +	case WM_T_82572:
 > +		/*
 > +		 * 8257[12] Errata 13: Device Does Not Support PCIe Active
 > +		 * State Power management L1 State (ASPM L1).
 > +		 */
 > +		mask = PCIE_LCSR_ASPM_L1;
 > +		str = "L1 is";
 > +		break;
 > +	case WM_T_82573:
 > +	case WM_T_82574:
 > +	case WM_T_82583:
 > +		/*
 > +		 * The 82573 disappears when PCIe ASPM L0s is enabled.
 > +		 *
 > +		 * The 82574 and 82583 does not support PCIe ASPM L0s with
 > +		 * some chipset.  The document of 82574 and 82583 says that
 > +		 * disabling L0s with some specific chipset is sufficient,
 > +		 * but we follow as of the Intel em driver does.
 > +		 *
 > +		 * References:
 > +		 * Errata 8 of the Specification Update of i82573.
 > +		 * Errata 20 of the Specification Update of i82574.
 > +		 * Errata 9 of the Specification Update of i82583.
 > +		 */
 > +		mask = PCIE_LCSR_ASPM_L1 | PCIE_LCSR_ASPM_L0S;
 > +		str = "L0s and L1 are";
 > +		break;
 > +	default:
 > +		return;
 > +	}
 > +
 > +	reg = pci_conf_read(sc->sc_pc, sc->sc_pcitag,
 > +	    sc->sc_pcixe_capoff + PCIE_LCSR);
 > +	reg &= ~mask;
 > +	pci_conf_write(sc->sc_pc, sc->sc_pcitag,
 > +	    sc->sc_pcixe_capoff + PCIE_LCSR, reg);
 > +
 > +	/* Print only in wm_attach() */
 > +	if ((sc->sc_flags & WM_F_ATTACHED) == 0)
 > +		aprint_verbose_dev(sc->sc_dev,
 > +		    "ASPM %s disabled to workaround the errata.\n",
 > +			str);
 > +}
 > +
 >   /* LPLU */
 >   
 >   static void
 > ---------
 > 
 > The same diff is at:
 > 
 > 	http://www.netbsd.org/~msaitoh/wm-aspm-20171228-0.dif
 
 I tested the patch on my machines that use Intel i82583V.
 The patch seems to be worked fine.  Thank you.
 
 
 -- 
 Shinichi Doyashiki <clare%csel.org@localhost>
 


Home | Main Index | Thread Index | Old Index