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

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

 



Hello Peter,

On 16-01-14 11:12:32, Peter Chen wrote:
> On Wed, Jan 13, 2016 at 6:12 PM,  <maitysanchayan@xxxxxxxxx> wrote:
> > Hello Peter,
> >
> > On 16-01-13 10:33:06, Peter Chen wrote:
> >> On Tue, Jan 12, 2016 at 06:34:47PM +0530, maitysanchayan@xxxxxxxxx wrote:
> >> > Hello Peter,
> >> >
> >> > I had reported the suspend resume issues on Vybrid and recently there
> >> > have been some developments after one of our customers reported the
> >> > below sequence of operations which worked for them.
> >> >
> >> > By doing the following sequence of operations after resume
> >> >
> >> > echo ci_hdrc.1 > /sys/bus/platform/drivers/ci_hdrc/unbind
> >> > echo ci_hdrc.1 > /sys/bus/platform/drivers/ci_hdrc/bind
> >> >
> >> > the USB ports start working. This is observed in presence of external
> >> > hub connected to the root hub or in the presence of root hub alone.
> >> >
> >> > After trying to trace through the sequence of operations which happen
> >> > on bind, roughly are as below,
> >> >
> >> > probe() call in chipidea/core.c
> >> > -> probe() call in hub.c
> >> > ----> hub_configure()
> >> > -------> hub_activate(hub, HUB_INIT)
> >> > ---------> hub_power_on(hub, false)
> >>
> >> Clear PORT_PP (bit 12 at portsc)
> >> > -------------> set_port_feature(hub->hdev, USB_PORT_FEAT_POWER)
> >>
> >> Set PORT_PP (bit 12 at portsc)
> >
> > Sorry it's not clear to me what you are implying below.
> >
> > As in I should implement this in suspend resume path or are you just
> > implying that this is what happens in the above case?
> >
> >> >
> >> > set_port_feature() now sends a control urb. Exactly after this the ports
> >> > start working.
> >> >
> >> > This hub_configure() is not called during the regular resume() sequence.
> >> > I am not well versed with USB specifications or stack to draw an inference
> >> > from this concretely.
> >> >
> >> > Can you throw some light on this if possible? Is it possible, to accomodate
> >> > this somehow in the regular sequence of operations which happen on resume?
> >> > The set_port_feature is in the core usb code and am not sure how to generically
> >> > access it.
> >> >
> >>
> >> Just try to toggle port power to see if it can work for you.
> >
> > Can you clarify how and at what point?
> >
> > At first I assumed you are referring to the fact this could be done from user space
> > as well. So I used a test code to send a usb control msg with request as
> > USB_REQ_(SET/CLEAR)_FEATURE and feature as USB_PORT_FEAT_POWER using libusb and I can
> > control the USB power on/off for any of the ports. This does not work however after
> > resume from suspend.
> >
> 
> Hi Sanchayan
> 
> I just tried below commands, it will remove the chipidea core device,
> and re-initialize it.
> It means it will reset controller as well as reset PHY. (the
> connection will be lost).
> But we do not reset them during the suspend/resume routine.
> 
> >> > echo ci_hdrc.1 > /sys/bus/platform/drivers/ci_hdrc/unbind
> >> > echo ci_hdrc.1 > /sys/bus/platform/drivers/ci_hdrc/bind
> 
> If you would like to try if toggle port power can work or not during
> the resume routine,
> try below code please:
> 
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 7404064..00d73c9 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -1195,6 +1195,10 @@ static int ci_resume(struct device *dev)
>         if (ret)
>                 return ret;
> 
> +       hw_write(ci, OP_PORTSC, BIT(12), ~BIT(12));
> +       udelay(10);
> +       hw_write(ci, OP_PORTSC, BIT(12), BIT(12));
> +
>         if (ci->supports_runtime_pm) {
>                 pm_runtime_disable(dev);
>                 pm_runtime_set_active(dev);
> 

I had tried this already but in the ci_controller_resume path and since I was
not sure I had also first tried clearing and setting separately in the suspend
resume path. But none of the above three trials worked.

- Sanchayan.
--
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