Hi,
> >>> +{
> >>> + unsigned long timeout = jiffies + msecs_to_jiffies(100);
> >>> + u32 devconf2;
> >>> +
> >>> + /*
> >>> + * Start the on-chip PHY and its PLL.
> >>> + */
> >>> + devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
> >>> +
> >>> + devconf2 &= ~(CONF2_RESET | CONF2_PHYPWRDN | CONF2_OTGPWRDN |
> >>> + CONF2_PHY_GPIOMODE);
>
> >> BWT, what's thet GPIOMODE bit for?
>
> > If GPIO Mode is set to '1' then UART3 Tx/Rx would come on DP and
> > DM pins of USBPHY.
>
> Hm, why GPIOMODE then I wonder... :-)
>
> >>> + devconf2 |= CONF2_PHY_PLLON | CONF2_DATPOL;
>
> >> So, AM35x always uses the reversed data polarity?
>
> > It's getting set to '1' so its always normal polarity.
>
> Ah, I got it reversed: 1 means normal polarity indeed...
I think, this would again be dependent on boards and therefore
should be moved to board file.
>
> >>> +static void otg_timer(unsigned long _musb)
> >>> +{
> >>> + struct musb *musb = (void *)_musb;
> >>> + void __iomem *mregs = musb->mregs;
> >>> + u8 devctl;
> >>> + unsigned long flags;
> >>> +
> >>> + /*
> >>> + * We poll because AM35x's won't expose several OTG-critical
> >>> + * status change events (from the transceiver) otherwise.
> >>> + */
> >>> + devctl = musb_readb(mregs, MUSB_DEVCTL);
> >>> + DBG(7, "Poll devctl %02x (%s)\n", devctl, otg_state_string(musb));
> >>> +
> >>> + spin_lock_irqsave(&musb->lock, flags);
> >>> + switch (musb->xceiv->state) {
>
> >> [...]
>
> >>> + case OTG_STATE_A_WAIT_VFALL:
>
> >> So, are you sure there's no need to call mod_timer() here for RTL
> 1.8?
>
> > What issue did you see on earlier RTLs ?
>
> I didn't test DaVinci much; I didn't even test DA8xx much in OTG mode.
> :-/
> And in the DA8xx host mode VBUS error would never occur anyway (as the
> VBUS
> comparator is overridden on the EVM board).
>
> > As such I didn't see issue
> > In my normal testing.
>
> OK.
>
> >>> + musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
> >>> + musb_writel(musb->ctrl_base, CORE_INTR_SRC_SET_REG,
> >>> + MUSB_INTR_VBUSERROR << USB_INTR_USB_SHIFT);
> >>> + break;
> >>> + case OTG_STATE_B_IDLE:
> >>> + if (!is_peripheral_enabled(musb))
> >>> + break;
>
> >> Hm, davinci.c sets DevCtl.Session here and I'm also doing it in
> >> da8xx.c --
> >> can you comment why you don't do that too?
>
> > I remember this was causing some issue in OTG testing.
>
> Do you remember which issue?
> Although I suspect that this code might be related to the comment
> below:
> "DEVCTL.BDEVICE is invalid without DEVCTL.SESSION set".
I will test again and then provide the details. I too feel it has something
to do with the comment you pointed out.
>
> >>> + devctl = musb_readb(mregs, MUSB_DEVCTL);
> >>> + if (devctl & MUSB_DEVCTL_BDEVICE)
> >>> + mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
> >>> + else
> >>> + musb->xceiv->state = OTG_STATE_A_IDLE;
> >>> + break;
>
> >> [...]
>
> >>> + musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT;
>
> >> This field is set by musb_core.c, so I dropped this line from
> >> da8xx.c...
>
> This has also been dropped from omap2430.c by this commit:
>
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-
> 2.6.git;a=commit;h=f7f9d63eac12b345d6243d1d608b7944a05be921
>
> > Need to test again but I was facing a issue where OTG build image
> > Was either working in host only mode or device only. Role were
> > Not changing based on ID pin status.
>
> Hm, is this related?
Not really but let me test again and get the details.
>
> >>> +int musb_platform_exit(struct musb *musb)
> >>> +{
> >>> + struct clk *otg_fck = clk_get(musb->controller, "fck");
> >>> +
> >>> + if (is_host_enabled(musb))
> >>> + del_timer_sync(&otg_workaround);
> >>> +
> >>> + /* Delay to avoid problems with module reload... */
>
[..]
>
> >> musb_platfrom_init() suggests that otg_fck can't be NULL. Also,
> >> clk_get
> >> returns error code, not NULL, so should use IS_ERR() here.
>
> > Correct, would clean it.
>
> Also, you call clk_get() on this clock twice, in musb_platfrom_init()
> and
> here, but clk_put() only once.
Ok fine.
Thanks,
Ajay
>
> > Thanks,
> > Ajay
>
> WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html