]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
musb_hdrc: Stop host session on BABBLE
authorTony Lindgren <tony@atomide.com>
Wed, 2 May 2007 22:27:37 +0000 (22:27 +0000)
committerTony Lindgren <tony@atomide.com>
Fri, 4 May 2007 17:06:38 +0000 (10:06 -0700)
Babble is a non-recoverable error condition and we
need to fix whatever causes it. Stop the session on BABBLE
to make debugging the cause of BABBLE possible.

Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/usb/musb/plat_uds.c

index 14fbeba2b8fc97069ff0510d30f3c3e0cb38a6e6..86dd6b216926fcd43e6acd6338af80ca7d048036 100644 (file)
@@ -534,19 +534,14 @@ static irqreturn_t musb_stage0_irq(struct musb * pThis, u8 bIntrUSB,
         */
        if (bIntrUSB & MGC_M_INTR_RESET) {
                if (devctl & MGC_M_DEVCTL_HM) {
-                       DBG(1, "BABBLE\n");
-
-                       /* REVISIT it's unclear how to handle this.  Mentor's
-                        * code stopped the whole USB host, which is clearly
-                        * very wrong.  Docs say (15.1) that babble ends the
-                        * current sesssion, so shutdown _with restart_ would
-                        * be appropriate ... except that seems to be wrong,
-                        * at least some lowspeed enumerations trigger the
-                        * babbles without aborting the session!
-                        *
-                        * (A "babble" IRQ seems quite pointless...)
+                       /*
+                        * BABBLE is an error condition, so the solution is
+                        * to avoid babble in the first place and fix whatever
+                        * causes BABBLE. When BABBLE happens we can only stop
+                        * the session.
                         */
-
+                       ERR("Stopping host session because of babble\n");
+                       musb_writeb(pBase, MGC_O_HDRC_DEVCTL, 0);
                } else {
                        DBG(1, "BUS RESET\n");