Re: USB suspend resume issue on Vybrid (Chipidea IP/MXS PHY)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 24, 2015 at 09:40:04PM +0530, Sanchayan Maity wrote:
> Hello,
> 
> I am working on Freescale Vybrid which is a Cortex A5 based SoC,
> with a Chipidea based USB controller and a Sigmatel Phy or some-
> thing if my memory serves me right. We are currently in the process
> of implementing suspend resume and fixing related issues. After
> resume the USB PHY does not come up and the USB subsytem prints
> 
> [129.570097] usb 1-1: USB disconnect, device number 2
> 
> which comes from the core code in hub.c.
> 
> I am using the 4.1.5 kernel with some of our own patches especially
> with regards to suspend resume being present only in our own tree.
> 
> From what I can see, the USB USBPHYx_PWDn register which has bits
> related to power down, all stay in their default "1" state which
> denotes power down, after resume. Now this in spite of the fact that
> the code seems [2] to write 0 to the register on resume. However,
> doing a quick check with devmem2 shows the register to have the
> default values of "1" denoting power down. So write seems to have
> no effect at all.
> 

The PHY's clock may not be resumed correct, without normal PHY's clock,
the writing to PHY's register has no effect.

Check related PLL is on/enable, and output to USB PHY correct.

> Instead of the code at lines 392[1] and 394[2] if I do
> 
> return mxs_phy_hw_init(mxs_phy);
> 
> on resume, the USBPHYx_PWDn seems to have the correct value of all
> bits as zero. However of course, the USB PHY does not come up. The
> stmp block reset in mxs_phy_hw_init seems to make the write work.
> 

It seems the reset can work, and resume can not reset for PHY.

> There is an errata for Vybrid at [3] in VYBRID_2N02G going as
> e4535: USB: USB suspend and resume flow clarifications. Not sure
> if I understand the explanation, however the following workaround
> which the errata mentions:
> 
> To place the USB PHY in low power suspend mode, the following sequence
> should be performed in an atomic operation. (interrupts should be disabled
> during these three steps)
> 
> 1. Set the PORTSC1.PHCD bit
> 2. Set all bits in USBPHY_PWD register
> 3. Set the USBPHY_CTRL.CLKGATE bit
> 
> These sequence of steps seem to be correctly followed in the suspend
> code [4] of Chipidea IP AFAICT.
> 
> I am not that well versed with USB subsystem code having only worked
> on it once before for fixing non working USB client on Vybrid [5].
> Have tried messing with different register bits in the USB PHY and
> USB miscellaneous register but with no results.
> 
> Peter, Felipe do you have any ideas perhaps? From what I can see this
> seems to be USB PHY issue.
> 

Yes, it is PHY's suspend/resume issue. The current code follows the
errata you refer.

> Also Peter I wanted to ask you, the following bits
> 
> MXS_PHY_ABNORMAL_IN_SUSPEND and MXS_PHY_SENDING_SOF_TOO_FAST where
> are they being used? I can see the MXS_PHY_NEED_IP_FIX being used
> but not the others. Perhaps I am missing something?

There are un-upstream patch which add .notify_suspend/.nofify_resume
after bus suspend/resume, in these two PHY's APIs, it will use
these two flags. You can find these two APIs at freescale's
released bsp.
 
-- 

Best Regards,
Peter Chen
--
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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux