Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: USB problems after memory upgrade



> > According to this thread
> > 
> > http://mail-index.netbsd.org/netbsd-users/2009/04/15/msg003491.html
> > http://mail-index.netbsd.org/netbsd-users/2009/04/15/msg003492.html
> > 
> > the problem is the USB controller. I don't know if it is an nVidia one
> > as mentioned in kern/37884:
> 
> According to "src/sys/dev/pcidevs" this is an ATI SB700 USB controller.

IIRC NVIDIA EHCI has a bug, but not sure about ATI ones.


Index: ehci_pci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/ehci_pci.c,v
retrieving revision 1.53
diff -u -p -r1.53 ehci_pci.c
--- ehci_pci.c  30 Jul 2011 13:19:21 -0000      1.53
+++ ehci_pci.c  11 Sep 2011 16:22:29 -0000
@@ -155,6 +155,20 @@ ehci_pci_attach(device_t parent, device_
        sc->sc_pc = pc;
        sc->sc_tag = tag;
        sc->sc.sc_bus.dmatag = pa->pa_dmat;
+       if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_NVIDIA ||
+           PCI_VENDOR(pa->pa_id) == PCI_VENDOR_ATI) {
+               bus_dma_tag_t dmat;
+
+               /* NVIDIA EHCI can't xfer DMA >2GB RAM */
+               if (bus_dmatag_subregion(pa->pa_dmat, 0, (1 << 31),
+                   &dmat, BUS_DMA_NOWAIT) != 0) {
+                       aprint_error_dev(self, "failed to restrict DMA range "
+                           "for NVIDIA EHCI hardware bug; "
+                           "falling back to parent bus dma range\n");
+                       dmat = pa->pa_dmat;
+               }
+               sc->sc.sc_bus.dmatag = dmat;
+       }
 
        /* Handle quirks */
        switch (quirk) {


---
Izumi Tsutsui


Home | Main Index | Thread Index | Old Index