From: Tony Lindgren Date: Wed, 2 May 2007 22:27:37 +0000 (+0000) Subject: musb_hdrc: Stop host session on BABBLE X-Git-Tag: v2.6.21-omap1~8 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=e207116fe64e7ef7588d66b321dd1b3a44a04443;p=linux-2.6-omap-h63xx.git musb_hdrc: Stop host session on BABBLE 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 --- diff --git a/drivers/usb/musb/plat_uds.c b/drivers/usb/musb/plat_uds.c index 14fbeba2b8f..86dd6b21692 100644 --- a/drivers/usb/musb/plat_uds.c +++ b/drivers/usb/musb/plat_uds.c @@ -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");