* usb, davinci: usb 2.0 problem on an am1808 based board [not found] ` <4EC0F87B.4010104@denx.de> @ 2012-05-04 10:10 ` Heiko Schocher 2012-05-17 6:37 ` Heiko Schocher 0 siblings, 1 reply; 10+ messages in thread From: Heiko Schocher @ 2012-05-04 10:10 UTC (permalink / raw) To: linux-arm-kernel Hello, a while ago (see discussion here: http://comments.gmane.org/gmane.linux.usb.general/54505), I found this "USB timing Bug" on an am1808 based board: Heiko Schocher wrote: > Hello Sergei, [...] > Sergei Shtylyov wrote: >> Hello. >> >> On 11.11.2011 11:19, Felipe Balbi wrote: >> >>>> I try to bring up usb 2.0 support on an am1808 based >>>> board and Linux version 3.1.0-rc10 and I am facing >>>> some issues: [...] >>>> But if I add in drivers/usb/musb/da8xx.c >>>> da8xx_musb_interrupt() a 10ms delay befor the >>>> "if (status& (DA8XX_INTR_DRVVBUS<< DA8XX_INTR_USB_SHIFT)) {" >>>> line usb works fine! >>>> It also works without this timeout if I change the >>>> "dev_dbg(musb->controller, "USB IRQ %08x\n", status);" >>>> to >>>> "printk(musb->controller, "USB IRQ %08x\n", status);" >>>> >>>> -> some timing issue, but I have no idea why! >>>> (Maybe you have an idea?) >>> unfortunately I don't know any details about DaVinci. >> AM1808 is not exactly DaVinci, to be precise... >> >>> Sergei, are you able to help on this question ? >> Maybe. :-) > > I hope it ;-) now I digged deeper and found this patch, which solves the problem (without adding a 10 ms delay): ----------------------------- diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index d32aa4d..6a6b17b 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -297,6 +297,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) unsigned long flags; irqreturn_t ret = IRQ_NONE; u32 status; + int flag = 1; spin_lock_irqsave(&musb->lock, flags); @@ -368,6 +363,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) musb->xceiv->default_a = 0; musb->xceiv->state = OTG_STATE_B_IDLE; portstate(musb->port1_status &= ~USB_PORT_STAT_POWER); + flag = 0; } dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", @@ -378,7 +374,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) ret = IRQ_HANDLED; } - if (musb->int_tx || musb->int_rx || musb->int_usb) + if (flag && ((musb->int_tx || musb->int_rx || musb->int_usb))) ret |= musb_interrupt(musb); eoi: ----------------------------- If we get an DA8XX_INTR_DRVVBUS IRQ, in the else case musb->xceiv->state = OTG_STATE_B_IDLE; is set, but overwritten in the musb_interrupt() call, which results in not starting the "Poll for ID change" timer ... as I am not an USB expert, posting this intermediate result here, maybe someone have an idea/explanation if this patch is the way to go, or what would be a better solution? bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de ^ permalink raw reply related [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-04 10:10 ` usb, davinci: usb 2.0 problem on an am1808 based board Heiko Schocher @ 2012-05-17 6:37 ` Heiko Schocher 2012-05-18 10:07 ` Manjunathappa, Prakash 0 siblings, 1 reply; 10+ messages in thread From: Heiko Schocher @ 2012-05-17 6:37 UTC (permalink / raw) To: linux-arm-kernel Hello, Heiko Schocher wrote: > Hello, > > a while ago (see discussion here: > http://comments.gmane.org/gmane.linux.usb.general/54505), I found this > "USB timing Bug" on an am1808 based board: > > Heiko Schocher wrote: >> Hello Sergei, > [...] >> Sergei Shtylyov wrote: >>> Hello. >>> >>> On 11.11.2011 11:19, Felipe Balbi wrote: >>> >>>>> I try to bring up usb 2.0 support on an am1808 based >>>>> board and Linux version 3.1.0-rc10 and I am facing >>>>> some issues: > [...] >>>>> But if I add in drivers/usb/musb/da8xx.c >>>>> da8xx_musb_interrupt() a 10ms delay befor the >>>>> "if (status& (DA8XX_INTR_DRVVBUS<< DA8XX_INTR_USB_SHIFT)) {" >>>>> line usb works fine! >>>>> It also works without this timeout if I change the >>>>> "dev_dbg(musb->controller, "USB IRQ %08x\n", status);" >>>>> to >>>>> "printk(musb->controller, "USB IRQ %08x\n", status);" >>>>> >>>>> -> some timing issue, but I have no idea why! >>>>> (Maybe you have an idea?) >>>> unfortunately I don't know any details about DaVinci. >>> AM1808 is not exactly DaVinci, to be precise... >>> >>>> Sergei, are you able to help on this question ? >>> Maybe. :-) >> I hope it ;-) > > now I digged deeper and found this patch, which solves the > problem (without adding a 10 ms delay): > > ----------------------------- > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index d32aa4d..6a6b17b 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -297,6 +297,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > unsigned long flags; > irqreturn_t ret = IRQ_NONE; > u32 status; > + int flag = 1; > > spin_lock_irqsave(&musb->lock, flags); > > @@ -368,6 +363,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > musb->xceiv->default_a = 0; > musb->xceiv->state = OTG_STATE_B_IDLE; > portstate(musb->port1_status &= ~USB_PORT_STAT_POWER); > + flag = 0; > } > > dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", > @@ -378,7 +374,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > ret = IRQ_HANDLED; > } > > - if (musb->int_tx || musb->int_rx || musb->int_usb) > + if (flag && ((musb->int_tx || musb->int_rx || musb->int_usb))) > ret |= musb_interrupt(musb); > > eoi: > ----------------------------- > > If we get an DA8XX_INTR_DRVVBUS IRQ, in the else case > > musb->xceiv->state = OTG_STATE_B_IDLE; > > is set, but overwritten in the musb_interrupt() call, which results > in not starting the "Poll for ID change" timer ... as I am not an USB > expert, posting this intermediate result here, maybe someone have an > idea/explanation if this patch is the way to go, or what would be a > better solution? ping? Some comments/ideas? bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-17 6:37 ` Heiko Schocher @ 2012-05-18 10:07 ` Manjunathappa, Prakash 2012-05-18 11:27 ` Sergei Shtylyov 2012-05-21 6:10 ` Heiko Schocher 0 siblings, 2 replies; 10+ messages in thread From: Manjunathappa, Prakash @ 2012-05-18 10:07 UTC (permalink / raw) To: linux-arm-kernel Hi Heiko, I do not know how putting delay helped MSC device detection. Can you please check if MUSB is coming up in "b_idle" state(by $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? State should move to b_peripheral on connecting gadget cable. If you connect MSC device via mini-A connector, state should change to "a_host". OTG timer is responsible for above state changes, can you please check if below changes are present? diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -76,6 +76,7 @@ #define DA8XX_INTR_TX_SHIFT 0 #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK << DA8XX_INTR_TX_SHIFT) +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ #define DA8XX_MENTOR_CORE_OFFSET 0x400 #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) rev, __raw_readl(CFGCHIP2), musb_readb(reg_base, DA8XX_USB_CTRL_REG)); + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; musb->isr = da8xx_musb_interrupt; return 0; fail: Thanks, Prakash On Thu, May 17, 2012 at 12:07:23, Heiko Schocher wrote: > Hello, > > Heiko Schocher wrote: > > Hello, > > > > a while ago (see discussion here: > > http://comments.gmane.org/gmane.linux.usb.general/54505), I found this > > "USB timing Bug" on an am1808 based board: > > > > Heiko Schocher wrote: > >> Hello Sergei, > > [...] > >> Sergei Shtylyov wrote: > >>> Hello. > >>> > >>> On 11.11.2011 11:19, Felipe Balbi wrote: > >>> > >>>>> I try to bring up usb 2.0 support on an am1808 based > >>>>> board and Linux version 3.1.0-rc10 and I am facing > >>>>> some issues: > > [...] > >>>>> But if I add in drivers/usb/musb/da8xx.c > >>>>> da8xx_musb_interrupt() a 10ms delay befor the > >>>>> "if (status& (DA8XX_INTR_DRVVBUS<< DA8XX_INTR_USB_SHIFT)) {" > >>>>> line usb works fine! > >>>>> It also works without this timeout if I change the > >>>>> "dev_dbg(musb->controller, "USB IRQ %08x\n", status);" > >>>>> to > >>>>> "printk(musb->controller, "USB IRQ %08x\n", status);" > >>>>> > >>>>> -> some timing issue, but I have no idea why! > >>>>> (Maybe you have an idea?) > >>>> unfortunately I don't know any details about DaVinci. > >>> AM1808 is not exactly DaVinci, to be precise... > >>> > >>>> Sergei, are you able to help on this question ? > >>> Maybe. :-) > >> I hope it ;-) > > > > now I digged deeper and found this patch, which solves the > > problem (without adding a 10 ms delay): > > > > ----------------------------- > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > > index d32aa4d..6a6b17b 100644 > > --- a/drivers/usb/musb/da8xx.c > > +++ b/drivers/usb/musb/da8xx.c > > @@ -297,6 +297,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > > unsigned long flags; > > irqreturn_t ret = IRQ_NONE; > > u32 status; > > + int flag = 1; > > > > spin_lock_irqsave(&musb->lock, flags); > > > > @@ -368,6 +363,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > > musb->xceiv->default_a = 0; > > musb->xceiv->state = OTG_STATE_B_IDLE; > > portstate(musb->port1_status &= ~USB_PORT_STAT_POWER); > > + flag = 0; > > } > > > > dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", > > @@ -378,7 +374,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > > ret = IRQ_HANDLED; > > } > > > > - if (musb->int_tx || musb->int_rx || musb->int_usb) > > + if (flag && ((musb->int_tx || musb->int_rx || musb->int_usb))) > > ret |= musb_interrupt(musb); > > > > eoi: > > ----------------------------- > > > > If we get an DA8XX_INTR_DRVVBUS IRQ, in the else case > > > > musb->xceiv->state = OTG_STATE_B_IDLE; > > > > is set, but overwritten in the musb_interrupt() call, which results > > in not starting the "Poll for ID change" timer ... as I am not an USB > > expert, posting this intermediate result here, maybe someone have an > > idea/explanation if this patch is the way to go, or what would be a > > better solution? ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-18 10:07 ` Manjunathappa, Prakash @ 2012-05-18 11:27 ` Sergei Shtylyov 2012-05-21 10:12 ` Manjunathappa, Prakash 2012-05-21 6:10 ` Heiko Schocher 1 sibling, 1 reply; 10+ messages in thread From: Sergei Shtylyov @ 2012-05-18 11:27 UTC (permalink / raw) To: linux-arm-kernel Hello. On 18-05-2012 14:07, Manjunathappa, Prakash wrote: > I do not know how putting delay helped MSC device detection. > Can you please check if MUSB is coming up in "b_idle" state(by > $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? > State should move to b_peripheral on connecting gadget cable. > If you connect MSC device via mini-A connector, state should change to "a_host". > OTG timer is responsible for above state changes, can you please check if below > changes are present? > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -76,6 +76,7 @@ > #define DA8XX_INTR_TX_SHIFT 0 > #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK<< DA8XX_INTR_TX_SHIFT) > > +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ > #define DA8XX_MENTOR_CORE_OFFSET 0x400 > > #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) > @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) > rev, __raw_readl(CFGCHIP2), > musb_readb(reg_base, DA8XX_USB_CTRL_REG)); > > + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; > musb->isr = da8xx_musb_interrupt; > return 0; > fail: This change shouldn't be needed as musb->a_wait_bcon is set in musb_core.c::allocate_instance(). > Thanks, > Prakash WBR, Sergei ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-18 11:27 ` Sergei Shtylyov @ 2012-05-21 10:12 ` Manjunathappa, Prakash 0 siblings, 0 replies; 10+ messages in thread From: Manjunathappa, Prakash @ 2012-05-21 10:12 UTC (permalink / raw) To: linux-arm-kernel Hi Sergei, On Fri, May 18, 2012 at 16:57:41, Sergei Shtylyov wrote: > Hello. > > On 18-05-2012 14:07, Manjunathappa, Prakash wrote: > > > I do not know how putting delay helped MSC device detection. > > Can you please check if MUSB is coming up in "b_idle" state(by > > $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? > > State should move to b_peripheral on connecting gadget cable. > > If you connect MSC device via mini-A connector, state should change to "a_host". > > OTG timer is responsible for above state changes, can you please check if below > > changes are present? > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 > > --- a/drivers/usb/musb/da8xx.c > > +++ b/drivers/usb/musb/da8xx.c > > @@ -76,6 +76,7 @@ > > #define DA8XX_INTR_TX_SHIFT 0 > > #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK<< DA8XX_INTR_TX_SHIFT) > > > > +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ > > #define DA8XX_MENTOR_CORE_OFFSET 0x400 > > > > #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) > > @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) > > rev, __raw_readl(CFGCHIP2), > > musb_readb(reg_base, DA8XX_USB_CTRL_REG)); > > > > + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; > > musb->isr = da8xx_musb_interrupt; > > return 0; > > fail: > > This change shouldn't be needed as musb->a_wait_bcon is set in > musb_core.c::allocate_instance(). > Yes, It worked even without above change. Thanks, Prakash ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-18 10:07 ` Manjunathappa, Prakash 2012-05-18 11:27 ` Sergei Shtylyov @ 2012-05-21 6:10 ` Heiko Schocher 2012-05-21 10:18 ` Manjunathappa, Prakash 1 sibling, 1 reply; 10+ messages in thread From: Heiko Schocher @ 2012-05-21 6:10 UTC (permalink / raw) To: linux-arm-kernel Hello Manjunathappa, Manjunathappa, Prakash wrote: > Hi Heiko, > > I do not know how putting delay helped MSC device detection. > Can you please check if MUSB is coming up in "b_idle" state(by > $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? > State should move to b_peripheral on connecting gadget cable. We have connected the USB0_ID pin to ground -> host only mode, so I could not try this. > If you connect MSC device via mini-A connector, state should change to "a_host". > OTG timer is responsible for above state changes, can you please check if below > changes are present? > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -76,6 +76,7 @@ > #define DA8XX_INTR_TX_SHIFT 0 > #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK << DA8XX_INTR_TX_SHIFT) > > +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ > #define DA8XX_MENTOR_CORE_OFFSET 0x400 > > #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) > @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) > rev, __raw_readl(CFGCHIP2), > musb_readb(reg_base, DA8XX_USB_CTRL_REG)); > > + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; > musb->isr = da8xx_musb_interrupt; > return 0; > fail: No, this change is not in current mainline ... Added this patch, and I get: $ make -s uImage drivers/usb/musb/da8xx.c: In function 'da8xx_musb_init': drivers/usb/musb/da8xx.c:448:22: error: 'A_WAIT_BCON_TIMEOUT' undeclared (first use in this function) drivers/usb/musb/da8xx.c:448:22: note: each undeclared identifier is reported only once for each function it appears in make[3]: *** [drivers/usb/musb/da8xx.o] Error 1 make[2]: *** [drivers/usb/musb] Error 2 make[1]: *** [drivers/usb] Error 2 make: *** [drivers] Error 2 $ Do you mean musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; ? This is setup in musb_core.c::allocate_instance() as Sergei Shtylyov already commented ... nevertheless tried with this define your patch, and my USB stick gets detected too... bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-21 6:10 ` Heiko Schocher @ 2012-05-21 10:18 ` Manjunathappa, Prakash 2012-05-22 7:22 ` Heiko Schocher 0 siblings, 1 reply; 10+ messages in thread From: Manjunathappa, Prakash @ 2012-05-21 10:18 UTC (permalink / raw) To: linux-arm-kernel Hi Heiko, On Mon, May 21, 2012 at 11:40:33, Heiko Schocher wrote: > Hello Manjunathappa, > > Manjunathappa, Prakash wrote: > > Hi Heiko, > > > > I do not know how putting delay helped MSC device detection. > > Can you please check if MUSB is coming up in "b_idle" state(by > > $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? > > State should move to b_peripheral on connecting gadget cable. > > We have connected the USB0_ID pin to ground -> host only mode, so > I could not try this. > Ok, So it is coming up in which state, "$cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode"? > > If you connect MSC device via mini-A connector, state should change to "a_host". > > OTG timer is responsible for above state changes, can you please check if below > > changes are present? > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 > > --- a/drivers/usb/musb/da8xx.c > > +++ b/drivers/usb/musb/da8xx.c > > @@ -76,6 +76,7 @@ > > #define DA8XX_INTR_TX_SHIFT 0 > > #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK << DA8XX_INTR_TX_SHIFT) > > > > +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ > > #define DA8XX_MENTOR_CORE_OFFSET 0x400 > > > > #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) > > @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) > > rev, __raw_readl(CFGCHIP2), > > musb_readb(reg_base, DA8XX_USB_CTRL_REG)); > > > > + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; > > musb->isr = da8xx_musb_interrupt; > > return 0; > > fail: > > No, this change is not in current mainline ... > > Added this patch, and I get: > > $ make -s uImage > drivers/usb/musb/da8xx.c: In function 'da8xx_musb_init': > drivers/usb/musb/da8xx.c:448:22: error: 'A_WAIT_BCON_TIMEOUT' undeclared (first use in this function) > drivers/usb/musb/da8xx.c:448:22: note: each undeclared identifier is reported only once for each function it appears in > make[3]: *** [drivers/usb/musb/da8xx.o] Error 1 > make[2]: *** [drivers/usb/musb] Error 2 > make[1]: *** [drivers/usb] Error 2 > make: *** [drivers] Error 2 > $ > > Do you mean > > musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; > > ? This is setup in musb_core.c::allocate_instance() as Sergei Shtylyov > already commented ... nevertheless tried with this define your patch, > and my USB stick gets detected too... > Does that mean issue got fixed or Do you still have delay in da8xx_musb_interrupt handler? Thanks, Prakash ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-21 10:18 ` Manjunathappa, Prakash @ 2012-05-22 7:22 ` Heiko Schocher 2012-05-29 14:22 ` Heiko Schocher 0 siblings, 1 reply; 10+ messages in thread From: Heiko Schocher @ 2012-05-22 7:22 UTC (permalink / raw) To: linux-arm-kernel Hello Manjunathappa, Manjunathappa, Prakash wrote: > Hi Heiko, > > On Mon, May 21, 2012 at 11:40:33, Heiko Schocher wrote: >> Hello Manjunathappa, >> >> Manjunathappa, Prakash wrote: >>> Hi Heiko, >>> >>> I do not know how putting delay helped MSC device detection. >>> Can you please check if MUSB is coming up in "b_idle" state(by >>> $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? >>> State should move to b_peripheral on connecting gadget cable. >> We have connected the USB0_ID pin to ground -> host only mode, so >> I could not try this. >> > > Ok, So it is coming up in which state, "$cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode"? without the delay in da8xx_musb_interrupt() and the + musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; change: booting Linux with USB stick attached shows: root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode a_host root at armv5te:~# booting Linux without USB stick attached: root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode a_wait_vrise root at armv5te:~# and connecting an usb stick: root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode a_host root at armv5te:~# >>> If you connect MSC device via mini-A connector, state should change to "a_host". >>> OTG timer is responsible for above state changes, can you please check if below >>> changes are present? >>> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 >>> --- a/drivers/usb/musb/da8xx.c >>> +++ b/drivers/usb/musb/da8xx.c >>> @@ -76,6 +76,7 @@ >>> #define DA8XX_INTR_TX_SHIFT 0 >>> #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK << DA8XX_INTR_TX_SHIFT) >>> >>> +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ >>> #define DA8XX_MENTOR_CORE_OFFSET 0x400 >>> >>> #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) >>> @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) >>> rev, __raw_readl(CFGCHIP2), >>> musb_readb(reg_base, DA8XX_USB_CTRL_REG)); >>> >>> + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; >>> musb->isr = da8xx_musb_interrupt; >>> return 0; >>> fail: >> No, this change is not in current mainline ... >> >> Added this patch, and I get: >> >> $ make -s uImage >> drivers/usb/musb/da8xx.c: In function 'da8xx_musb_init': >> drivers/usb/musb/da8xx.c:448:22: error: 'A_WAIT_BCON_TIMEOUT' undeclared (first use in this function) >> drivers/usb/musb/da8xx.c:448:22: note: each undeclared identifier is reported only once for each function it appears in >> make[3]: *** [drivers/usb/musb/da8xx.o] Error 1 >> make[2]: *** [drivers/usb/musb] Error 2 >> make[1]: *** [drivers/usb] Error 2 >> make: *** [drivers] Error 2 >> $ >> >> Do you mean >> >> musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; >> >> ? This is setup in musb_core.c::allocate_instance() as Sergei Shtylyov >> already commented ... nevertheless tried with this define your patch, >> and my USB stick gets detected too... >> > > Does that mean issue got fixed or Do you still have delay in da8xx_musb_interrupt handler? Without the delay in the da8xx_musb_interrupt() ... bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-22 7:22 ` Heiko Schocher @ 2012-05-29 14:22 ` Heiko Schocher 2012-06-27 4:36 ` Heiko Schocher 0 siblings, 1 reply; 10+ messages in thread From: Heiko Schocher @ 2012-05-29 14:22 UTC (permalink / raw) To: linux-arm-kernel Hello Manjunathappa, On 22.05.2012 09:22, Heiko Schocher wrote: > Hello Manjunathappa, > > Manjunathappa, Prakash wrote: >> Hi Heiko, >> >> On Mon, May 21, 2012 at 11:40:33, Heiko Schocher wrote: >>> Hello Manjunathappa, >>> >>> Manjunathappa, Prakash wrote: >>>> Hi Heiko, >>>> >>>> I do not know how putting delay helped MSC device detection. >>>> Can you please check if MUSB is coming up in "b_idle" state(by >>>> $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? >>>> State should move to b_peripheral on connecting gadget cable. >>> We have connected the USB0_ID pin to ground -> host only mode, so >>> I could not try this. >>> >> >> Ok, So it is coming up in which state, "$cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode"? > > without the delay in da8xx_musb_interrupt() and the > + musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; > change: > > booting Linux with USB stick attached shows: > root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode > a_host > root at armv5te:~# > > booting Linux without USB stick attached: > > root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode > a_wait_vrise > root at armv5te:~# > > and connecting an usb stick: > > root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode > a_host > root at armv5te:~# > >>>> If you connect MSC device via mini-A connector, state should change to "a_host". >>>> OTG timer is responsible for above state changes, can you please check if below >>>> changes are present? >>>> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 >>>> --- a/drivers/usb/musb/da8xx.c >>>> +++ b/drivers/usb/musb/da8xx.c >>>> @@ -76,6 +76,7 @@ >>>> #define DA8XX_INTR_TX_SHIFT 0 >>>> #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK<< DA8XX_INTR_TX_SHIFT) >>>> >>>> +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ >>>> #define DA8XX_MENTOR_CORE_OFFSET 0x400 >>>> >>>> #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) >>>> @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) >>>> rev, __raw_readl(CFGCHIP2), >>>> musb_readb(reg_base, DA8XX_USB_CTRL_REG)); >>>> >>>> + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; >>>> musb->isr = da8xx_musb_interrupt; >>>> return 0; >>>> fail: >>> No, this change is not in current mainline ... >>> >>> Added this patch, and I get: >>> >>> $ make -s uImage >>> drivers/usb/musb/da8xx.c: In function 'da8xx_musb_init': >>> drivers/usb/musb/da8xx.c:448:22: error: 'A_WAIT_BCON_TIMEOUT' undeclared (first use in this function) >>> drivers/usb/musb/da8xx.c:448:22: note: each undeclared identifier is reported only once for each function it appears in >>> make[3]: *** [drivers/usb/musb/da8xx.o] Error 1 >>> make[2]: *** [drivers/usb/musb] Error 2 >>> make[1]: *** [drivers/usb] Error 2 >>> make: *** [drivers] Error 2 >>> $ >>> >>> Do you mean >>> >>> musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; >>> >>> ? This is setup in musb_core.c::allocate_instance() as Sergei Shtylyov >>> already commented ... nevertheless tried with this define your patch, >>> and my USB stick gets detected too... >>> >> >> Does that mean issue got fixed or Do you still have delay in da8xx_musb_interrupt handler? > > Without the delay in the da8xx_musb_interrupt() ... ping! How do we proceed here? bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ^ permalink raw reply [flat|nested] 10+ messages in thread
* usb, davinci: usb 2.0 problem on an am1808 based board 2012-05-29 14:22 ` Heiko Schocher @ 2012-06-27 4:36 ` Heiko Schocher 0 siblings, 0 replies; 10+ messages in thread From: Heiko Schocher @ 2012-06-27 4:36 UTC (permalink / raw) To: linux-arm-kernel Hello Manjunathappa, On 29.05.2012 16:22, Heiko Schocher wrote: > Hello Manjunathappa, > > On 22.05.2012 09:22, Heiko Schocher wrote: >> Hello Manjunathappa, >> >> Manjunathappa, Prakash wrote: >>> Hi Heiko, >>> >>> On Mon, May 21, 2012 at 11:40:33, Heiko Schocher wrote: >>>> Hello Manjunathappa, >>>> >>>> Manjunathappa, Prakash wrote: >>>>> Hi Heiko, >>>>> >>>>> I do not know how putting delay helped MSC device detection. >>>>> Can you please check if MUSB is coming up in "b_idle" state(by >>>>> $cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode)? >>>>> State should move to b_peripheral on connecting gadget cable. >>>> We have connected the USB0_ID pin to ground -> host only mode, so >>>> I could not try this. >>>> >>> >>> Ok, So it is coming up in which state, "$cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode"? >> >> without the delay in da8xx_musb_interrupt() and the >> + musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; >> change: >> >> booting Linux with USB stick attached shows: >> root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode >> a_host >> root at armv5te:~# >> >> booting Linux without USB stick attached: >> >> root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode >> a_wait_vrise >> root at armv5te:~# >> >> and connecting an usb stick: >> >> root at armv5te:~# cat /sys/devices/platform/musb-da8xx/musb-hdrc/mode >> a_host >> root at armv5te:~# >> >>>>> If you connect MSC device via mini-A connector, state should change to "a_host". >>>>> OTG timer is responsible for above state changes, can you please check if below >>>>> changes are present? >>>>> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 4da7492..a1a692e 100644 >>>>> --- a/drivers/usb/musb/da8xx.c >>>>> +++ b/drivers/usb/musb/da8xx.c >>>>> @@ -76,6 +76,7 @@ >>>>> #define DA8XX_INTR_TX_SHIFT 0 >>>>> #define DA8XX_INTR_TX_MASK (DA8XX_USB_TX_EP_MASK<< DA8XX_INTR_TX_SHIFT) >>>>> >>>>> +#define A_WAIT_BCON_TIMEOUT 1100 /* in ms */ >>>>> #define DA8XX_MENTOR_CORE_OFFSET 0x400 >>>>> >>>>> #define CFGCHIP2 IO_ADDRESS(DA8XX_SYSCFG0_BASE + DA8XX_CFGCHIP2_REG) >>>>> @@ -443,6 +444,7 @@ static int da8xx_musb_init(struct musb *musb) >>>>> rev, __raw_readl(CFGCHIP2), >>>>> musb_readb(reg_base, DA8XX_USB_CTRL_REG)); >>>>> >>>>> + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT; >>>>> musb->isr = da8xx_musb_interrupt; >>>>> return 0; >>>>> fail: >>>> No, this change is not in current mainline ... >>>> >>>> Added this patch, and I get: >>>> >>>> $ make -s uImage >>>> drivers/usb/musb/da8xx.c: In function 'da8xx_musb_init': >>>> drivers/usb/musb/da8xx.c:448:22: error: 'A_WAIT_BCON_TIMEOUT' undeclared (first use in this function) >>>> drivers/usb/musb/da8xx.c:448:22: note: each undeclared identifier is reported only once for each function it appears in >>>> make[3]: *** [drivers/usb/musb/da8xx.o] Error 1 >>>> make[2]: *** [drivers/usb/musb] Error 2 >>>> make[1]: *** [drivers/usb] Error 2 >>>> make: *** [drivers] Error 2 >>>> $ >>>> >>>> Do you mean >>>> >>>> musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON; >>>> >>>> ? This is setup in musb_core.c::allocate_instance() as Sergei Shtylyov >>>> already commented ... nevertheless tried with this define your patch, >>>> and my USB stick gets detected too... >>>> >>> >>> Does that mean issue got fixed or Do you still have delay in da8xx_musb_interrupt handler? >> >> Without the delay in the da8xx_musb_interrupt() ... > > ping! > > How do we proceed here? ping. bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2012-06-27 4:36 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <4EBC9DF1.90604@denx.de> [not found] ` <20111111091912.GB19090@legolas.emea.dhcp.ti.com> [not found] ` <4EBEB29E.50705@mvista.com> [not found] ` <4EC0F87B.4010104@denx.de> 2012-05-04 10:10 ` usb, davinci: usb 2.0 problem on an am1808 based board Heiko Schocher 2012-05-17 6:37 ` Heiko Schocher 2012-05-18 10:07 ` Manjunathappa, Prakash 2012-05-18 11:27 ` Sergei Shtylyov 2012-05-21 10:12 ` Manjunathappa, Prakash 2012-05-21 6:10 ` Heiko Schocher 2012-05-21 10:18 ` Manjunathappa, Prakash 2012-05-22 7:22 ` Heiko Schocher 2012-05-29 14:22 ` Heiko Schocher 2012-06-27 4:36 ` Heiko Schocher
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).