diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2012-02-15 04:06:28 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2012-02-15 04:06:28 +0000 |
commit | 9db6da3ecdf09727884dc8eb4e22146c7707b98b (patch) | |
tree | 6a102ceddef29327e3c97442985b53c8d64c8dc4 /sys/dev/pci/if_em.c | |
parent | c5bb0471ddd681fb1db2c1c497e4c8c41c6a6c87 (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.c | 9 |
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) */ |