From e207116fe64e7ef7588d66b321dd1b3a44a04443 Mon Sep 17 00:00:00 2001 From: Tony Lindgren Date: Wed, 2 May 2007 22:27:37 +0000 Subject: [PATCH] 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 --- drivers/usb/musb/plat_uds.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) 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"); -- 2.41.1