Hi,

Here's a patch against 2.5.3-pre1 that provides the following changes to
the ehci driver:
        - fixes the root hub handoff of slow devices to companion
          controllers.
        - cleaned up control/bulk queuing
        
The patch was written by David Brownell.

thanks,

greg k-h

                                                    

diff -Nru a/drivers/usb/hcd/ehci-hcd.c b/drivers/usb/hcd/ehci-hcd.c
--- a/drivers/usb/hcd/ehci-hcd.c        Wed Jan 16 09:57:45 2002
+++ b/drivers/usb/hcd/ehci-hcd.c        Wed Jan 16 09:57:45 2002
@@ -70,9 +70,15 @@
  *     Brad Hards
  *     Rory Bolt
  *     ...
+ *
+ * HISTORY:
+ * 2002-01-14  Minor cleanup; version synch.
+ * 2002-01-08  Fix roothub handoff of FS/LS to companion controllers.
+ * 2002-01-04  Control/Bulk queuing behaves.
+ * 2001-12-12  Initial patch version for Linux 2.5.1 kernel.
  */
 
-#define DRIVER_VERSION "$Revision: 0.25 $"
+#define DRIVER_VERSION "$Revision: 0.26 $"
 #define DRIVER_AUTHOR "David Brownell"
 #define DRIVER_DESC "USB 2.0 'Enhanced' Host Controller (EHCI) Driver"
 
@@ -97,9 +103,6 @@
 static int log2_irq_thresh = 0;                // 0 to 6
 MODULE_PARM (log2_irq_thresh, "i");
 MODULE_PARM_DESC (log2_irq_thresh, "log2 IRQ latency, 1-64 microframes");
-
-/* Some A steppings of the NEC controller need soft retries */
-//#define      EHCI_SOFT_RETRIES       5       /* after CERR-induced fault */
 
 #define        INTR_MASK (STS_IAA | STS_FATAL | STS_ERR | STS_INT)
 
diff -Nru a/drivers/usb/hcd/ehci-hub.c b/drivers/usb/hcd/ehci-hub.c
--- a/drivers/usb/hcd/ehci-hub.c        Wed Jan 16 09:57:45 2002
+++ b/drivers/usb/hcd/ehci-hub.c        Wed Jan 16 09:57:45 2002
@@ -82,11 +82,12 @@
        for (i = 0; i < ports; i++) {
                temp = readl (&ehci->regs->port_status [i]);
                if (temp & PORT_OWNER) {
-                       // get disconnected ports back if no companion driver
-                       if (temp & PORT_CONNECT)
-                               continue;
-                       temp &= ~(PORT_OWNER|PORT_CSC);
-                       writel (temp, &ehci->regs->port_status [i]);
+                       /* don't report this in GetPortStatus */
+                       if (temp & PORT_CSC) {
+                               temp &= ~PORT_CSC;
+                               writel (temp, &ehci->regs->port_status [i]);
+                       }
+                       continue;
                }
                if (!(temp & PORT_CONNECT))
                        ehci->reset_done [i] = 0;
diff -Nru a/drivers/usb/hcd/ehci-q.c b/drivers/usb/hcd/ehci-q.c
--- a/drivers/usb/hcd/ehci-q.c  Wed Jan 16 09:57:46 2002
+++ b/drivers/usb/hcd/ehci-q.c  Wed Jan 16 09:57:46 2002
@@ -883,11 +883,10 @@
                /* can't get here without STS_ASS set */
                if (ehci->hcd.state != USB_STATE_HALT) {
                        if (cmd & CMD_PSE)
-                               writel (cmd & __constant_cpu_to_le32 (~CMD_ASE),
-                                       &ehci->regs->command);
+                               writel (cmd & ~CMD_ASE, &ehci->regs->command);
                        else {
                                ehci_ready (ehci);
-                               while (!(readl (&ehci->regs->status) & STS_ASS))
+                               while (readl (&ehci->regs->status) & STS_ASS)
                                        udelay (100);
                        }
                }
diff -Nru a/drivers/usb/hcd/ehci-sched.c b/drivers/usb/hcd/ehci-sched.c
--- a/drivers/usb/hcd/ehci-sched.c      Wed Jan 16 09:57:47 2002
+++ b/drivers/usb/hcd/ehci-sched.c      Wed Jan 16 09:57:47 2002
@@ -381,7 +381,7 @@
                        vdbg ("qh %p usecs %d period %d starting frame %d.%d",
                                qh, qh->usecs, period, frame, uframe);
                        do {
-                               if (unlikely ((long)ehci->pshadow [frame].ptr)) {
+                               if (unlikely (ehci->pshadow [frame].ptr != 0)) {
 // FIXME -- just link to the end, before any qh with a shorter period,
 // AND handle it already being (implicitly) linked into this frame
                                        BUG ();


_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to