diff options
author | Christopher Pascoe <pascoe@cvs.openbsd.org> | 2005-03-07 11:12:05 +0000 |
---|---|---|
committer | Christopher Pascoe <pascoe@cvs.openbsd.org> | 2005-03-07 11:12:05 +0000 |
commit | e53a0cb5d419926b8555ed36af032df7aa3a6d6a (patch) | |
tree | 768a7b4a876baee437e105f82fd21a79e3a666eb /sys/dev/pci/ehci_pci.c | |
parent | fd9399343260e05d83411f4cc5afd7a8fc405a8c (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.c | 7 |
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. |