> Date: Tue, 14 Feb 2012 21:34:50 +1100 > From: Jonathan Gray <j...@jsg.id.au> > > This appears to be a silicon level flaw: > > >From "Intel 82571EB/82572EI Ethernet Controller Specification Update": > > 63. Byte Enables 2 and 3 Are Not Set on MSI Writes Problem: MSI > (format code definition Message Signal Interrupts) writes on the 82571EB > will not have the upper two Byte Enables (BE) set. > > Implication: The PCI specification requires Byte Enables 2 and 3 to be > set even though that data will always be zero. Because the > 82571/82572 does not set these Byte Enables, MSI writes fail to > generate interrupts on systems with chipsets that have been designed > to require these Bytes Enables to be set. This errata only applies > when MSI is supported and enabled by the system and OS. > > Workaround: None, As long as MSI is being used, Byte Enables 2 and 3 > will not be set. > > Status: No Fix. > > -- > > So it seems to be safe we should not try to enable MSI on 82571/82572 > at all.
ok kettenis@ > Index: if_em.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/if_em.c,v > retrieving revision 1.261 > diff -u -p -r1.261 if_em.c > --- if_em.c 5 Oct 2011 02:52:09 -0000 1.261 > +++ if_em.c 14 Feb 2012 10:27:03 -0000 > @@ -329,8 +329,11 @@ em_attach(struct device *parent, struct > /* Determine hardware revision */ > em_identify_hardware(sc); > > - /* Only use MSI on the newer PCIe parts */ > - if (sc->hw.mac_type < em_82571) > + /* > + * Only use MSI on the newer PCIe parts, with the exception > + * of 82571/82572 due to "Byte Enables 2 and 3 Are Not Set" errata > + */ > + if (sc->hw.mac_type <= em_82572) > sc->osdep.em_pa.pa_flags &= ~PCI_FLAGS_MSI_ENABLED; > > /* Parameters (to be read from user) */