On Mon, Jan 10, 2011 at 08:13:20PM +0100, Sebastian Andrzej Siewior wrote: > * Russell King - ARM Linux | 2011-01-09 12:54:21 [+0000]: > > > > >If you have a patch, I'll test it - it's very easy to reproduce here. > >Last night, it was at the point of having to restart minicom almost every > >time I rebooted the OMAP4 board because at some point during the uboot > >blurb the USB serial port went awol. > > I have here like 10 usb-to-serial adapters but all of them have pl2303 > which does not even show the "reloaded" symptom. > The patch here changes from ATL triggered interrupt into an SOF > interrupt which could fix your problem if it is what the errata > describes. So far soo good - this plus the removal of the printk statement seems to have done the trick. I've run several 'dmesg' invocations and rebooted the OMAP4 board a few times, and I've not had to restart minicom once. For reference the patch below represents what I actually tested - that being your patch plus removal of the too verbose printk. Tested-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxxx> diff --git a/drivers/usb/host/isp1760-hcd.c b/drivers/usb/host/isp1760-hcd.c index bdba8c5..9cb8722 100644 --- a/drivers/usb/host/isp1760-hcd.c +++ b/drivers/usb/host/isp1760-hcd.c @@ -1049,17 +1049,6 @@ static void do_atl_int(struct usb_hcd *usb_hcd) if (!nakcount && (dw3 & DW3_QTD_ACTIVE)) { u32 buffstatus; - /* - * NAKs are handled in HW by the chip. Usually if the - * device is not able to send data fast enough. - * This happens mostly on slower hardware. - */ - printk(KERN_NOTICE "Reloading ptd %p/%p... qh %p read: " - "%d of %zu done: %08x cur: %08x\n", qtd, - urb, qh, PTD_XFERRED_LENGTH(dw3), - qtd->length, done_map, - (1 << queue_entry)); - /* RL counter = ERR counter */ dw3 &= ~(0xf << 19); dw3 |= rl << 19; @@ -1770,7 +1759,7 @@ static irqreturn_t isp1760_irq(struct usb_hcd *usb_hcd) goto leave; isp1760_writel(imask, usb_hcd->regs + HC_INTERRUPT_REG); - if (imask & HC_ATL_INT) + if (imask & (HC_ATL_INT | HC_SOT_INT)) do_atl_int(usb_hcd); if (imask & HC_INTL_INT) diff --git a/drivers/usb/host/isp1760-hcd.h b/drivers/usb/host/isp1760-hcd.h index 6931ef5..0d6023b 100644 --- a/drivers/usb/host/isp1760-hcd.h +++ b/drivers/usb/host/isp1760-hcd.h @@ -68,7 +68,7 @@ void deinit_kmem_cache(void); #define HC_INTERRUPT_REG 0x310 #define HC_INTERRUPT_ENABLE 0x314 -#define INTERRUPT_ENABLE_MASK (HC_INTL_INT | HC_ATL_INT | HC_EOT_INT) +#define INTERRUPT_ENABLE_MASK (HC_INTL_INT | HC_SOT_INT | HC_EOT_INT) #define HC_ISO_INT (1 << 9) #define HC_ATL_INT (1 << 8) -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html