summaryrefslogtreecommitdiff
path: root/sys/dev/pci/if_em.c
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2012-02-15 04:06:28 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2012-02-15 04:06:28 +0000
commit9db6da3ecdf09727884dc8eb4e22146c7707b98b (patch)
tree6a102ceddef29327e3c97442985b53c8d64c8dc4 /sys/dev/pci/if_em.c
parentc5bb0471ddd681fb1db2c1c497e4c8c41c6a6c87 (diff)
82571/82572 do not properly set byte enables 2 and 3 on MSI
writes. Some (but not all) chipsets will fail to generate interrupts in this case, so do not attempt to enable MSI on 82571/82572. Problem reported by David Imhoff with interrupts working on PE1950 but not working on a R610. ok kettenis@ claudio@ deraadt@
Diffstat (limited to 'sys/dev/pci/if_em.c')
-rw-r--r--sys/dev/pci/if_em.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/dev/pci/if_em.c b/sys/dev/pci/if_em.c
index 0f3619321ca..35f9d414280 100644
--- a/sys/dev/pci/if_em.c
+++ b/sys/dev/pci/if_em.c
@@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE.
***************************************************************************/
-/* $OpenBSD: if_em.c,v 1.261 2011/10/05 02:52:09 jsg Exp $ */
+/* $OpenBSD: if_em.c,v 1.262 2012/02/15 04:06:27 jsg Exp $ */
/* $FreeBSD: if_em.c,v 1.46 2004/09/29 18:28:28 mlaier Exp $ */
#include <dev/pci/if_em.h>
@@ -329,8 +329,11 @@ em_attach(struct device *parent, struct device *self, void *aux)
/* 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) */