All of lore.kernel.org
 help / color / mirror / Atom feed
* 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 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-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-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.