Hi, > On 03/14/2012 07:49 AM, Gupta, Ajay Kumar wrote: > >> I *think* that the DMA engine is performing some access on its own to > >> those registers behind the bridge which leads to the same read& > clear > >> interrupt race. > > > > DMA driver (CPPI4.1) is not yet available for AM35x but DMA might read > > Mentor core registers. The solution is to disable non-PDR interrupt in > > CONTROL register (bit D3) at offset 0x0004. > > "D3 | uint | USB non-PDR interrupt enable" > > I see. Care to send a patch to replace my "force DMA off"? We need to enable non-PDR (Mentor core only) interrupts using below patch. ------------------------------------------------------------------------ diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c index e233d2b..cbd17e5 100644 --- a/drivers/usb/musb/am35x.c +++ b/drivers/usb/musb/am35x.c @@ -68,6 +68,7 @@ /* Control register bits */ #define AM35X_SOFT_RESET_MASK 1 +#define AM35X_ENABLE_NON_PDR (1 << 3) /* USB interrupt register bits */ #define AM35X_INTR_USB_SHIFT 16 @@ -353,7 +354,7 @@ static int am35x_musb_init(struct musb *musb) struct musb_hdrc_platform_data *plat = dev->platform_data; struct omap_musb_board_data *data = plat->board_data; void __iomem *reg_base = musb->ctrl_base; - u32 rev; + u32 rev, ctrl; musb->mregs += USB_MENTOR_CORE_OFFSET; @@ -383,6 +384,11 @@ static int am35x_musb_init(struct musb *musb) msleep(5); + /* Enable the non-PDR interrupts */ + ctrl = musb_readl(reg_base, USB_CTRL_REG); + ctrl |= AM35X_ENABLE_NON_PDR; + musb_writel(reg_base, USB_CTRL_REG, ctrl); + musb->isr = am35x_musb_interrupt; /* clear level interrupt */ ------------------------------------------------------------------------ Ajay > > > Ajay > > Sebastian -- 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