summaryrefslogtreecommitdiff
path: root/sys/dev/pci/ehci_pci.c
diff options
context:
space:
mode:
authorChristopher Pascoe <pascoe@cvs.openbsd.org>2005-03-07 11:12:05 +0000
committerChristopher Pascoe <pascoe@cvs.openbsd.org>2005-03-07 11:12:05 +0000
commite53a0cb5d419926b8555ed36af032df7aa3a6d6a (patch)
tree768a7b4a876baee437e105f82fd21a79e3a666eb /sys/dev/pci/ehci_pci.c
parentfd9399343260e05d83411f4cc5afd7a8fc405a8c (diff)
Add a workaround for VIA EHCI controllers which, under load, signal qTD
completion before they have performed writeback from the overlay qTD. This condition would exhibit itself as a umass stall that never recovers. ok dlg@
Diffstat (limited to 'sys/dev/pci/ehci_pci.c')
-rw-r--r--sys/dev/pci/ehci_pci.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/pci/ehci_pci.c b/sys/dev/pci/ehci_pci.c
index 398f6f0b27d..eaf5df4ea19 100644
--- a/sys/dev/pci/ehci_pci.c
+++ b/sys/dev/pci/ehci_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ehci_pci.c,v 1.4 2004/12/29 01:52:27 dlg Exp $ */
+/* $OpenBSD: ehci_pci.c,v 1.5 2005/03/07 11:12:04 pascoe Exp $ */
/* $NetBSD: ehci_pci.c,v 1.15 2004/04/23 21:13:06 itojun Exp $ */
/*
@@ -51,6 +51,7 @@ __KERNEL_RCSID(0, "$NetBSD: ehci_pci.c,v 1.15 2004/04/23 21:13:06 itojun Exp $")
#include <machine/bus.h>
+#include <dev/pci/pcidevs.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/usb_pci.h>
@@ -190,6 +191,10 @@ ehci_pci_attach(struct device *parent, struct device *self, void *aux)
snprintf(sc->sc.sc_vendor, sizeof(sc->sc.sc_vendor),
"vendor 0x%04x", PCI_VENDOR(pa->pa_id));
+ /* Enable workaround for dropped interrupts as required */
+ if (sc->sc.sc_id_vendor == PCI_VENDOR_VIATECH)
+ sc->sc.sc_flags |= EHCIF_DROPPED_INTR_WORKAROUND;
+
/*
* Find companion controllers. According to the spec they always
* have lower function numbers so they should be enumerated already.