diff mbox series

[v2,2/3] usb: chipidea: imx: support disabling runtime-pm

Message ID 20200714151822.250783-2-philippe.schenker@toradex.com (mailing list archive)
State New, archived
Headers show
Series None | expand

Commit Message

Philippe Schenker July 14, 2020, 3:18 p.m. UTC
The Toradex Colibri iMX6ULL board has a special USB hardware design.
With runtime-pm enabled USB reset itself continuously. Furthermore the
OTG port is also not enumerating devices if the Chipidea IP is in
runtime sleep mode and a device or host gets plugged in.

This patch adds the opportunity to disable Runtime Power Management
from devicetree

Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>

---

Changes in v2:
- Change commit message to tell the use case for Colibri iMX6ULL

 drivers/usb/chipidea/ci_hdrc_imx.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Peter Chen July 15, 2020, 12:51 a.m. UTC | #1
> The Toradex Colibri iMX6ULL board has a special USB hardware design.
> With runtime-pm enabled USB reset itself continuously. Furthermore the OTG port
> is also not enumerating devices if the Chipidea IP is in runtime sleep mode and a
> device or host gets plugged in.
> 

Hi Philippe,

You may describe the detail what's the special USB hardware design for your board,
and why it causes the problem, and why disable runtime pm could fix this issue, then,
the other users could know if it could apply to their platforms or not in future.

Peter

> This patch adds the opportunity to disable Runtime Power Management from
> devicetree
> 
> Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
> 
> ---
> 
> Changes in v2:
> - Change commit message to tell the use case for Colibri iMX6ULL
> 
>  drivers/usb/chipidea/ci_hdrc_imx.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
> index 5ae16368a0c7..5078d0695eb7 100644
> --- a/drivers/usb/chipidea/ci_hdrc_imx.c
> +++ b/drivers/usb/chipidea/ci_hdrc_imx.c
> @@ -434,6 +434,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
>  		usb_phy_init(pdata.usb_phy);
>  	}
> 
> +	if (of_property_read_bool(np, "disable-runtime-pm"))
> +		pdata.flags &= ~CI_HDRC_SUPPORTS_RUNTIME_PM;
> +
>  	if (pdata.flags & CI_HDRC_SUPPORTS_RUNTIME_PM)
>  		data->supports_runtime_pm = true;
> 
> --
> 2.27.0
Philippe Schenker July 15, 2020, 10:23 a.m. UTC | #2
On Wed, 2020-07-15 at 00:51 +0000, Peter Chen wrote:
>  
> > The Toradex Colibri iMX6ULL board has a special USB hardware design.
> > With runtime-pm enabled USB reset itself continuously. Furthermore
> > the OTG port
> > is also not enumerating devices if the Chipidea IP is in runtime
> > sleep mode and a
> > device or host gets plugged in.
> > 
> 
> Hi Philippe,
> 
> You may describe the detail what's the special USB hardware design for
> your board,

If I only knew the root-cause of that problem - unfortunately I don't.
That's also why I have such a hard time to describe it.

> and why it causes the problem, and why disable runtime pm could fix
> this issue, then,

I cannot provide the 'why' part yet. I'll try something more and hope I
can provide you guys with the exact description.

> the other users could know if it could apply to their platforms or not
> in future.

I only found out about it because you were pointing me in that
direction. I debugged for hours now and didn't came to the root-cause of
the issue. I think to really understand it I would need to know much
more about the Chipidea IP.

I'll get back to you guys with a proposal for a new description.

Philippe

> 
> Peter
> 
> > This patch adds the opportunity to disable Runtime Power Management
> > from
> > devicetree
> > 
> > Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
> > 
> > ---
> > 
> > Changes in v2:
> > - Change commit message to tell the use case for Colibri iMX6ULL
> > 
> >  drivers/usb/chipidea/ci_hdrc_imx.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c
> > b/drivers/usb/chipidea/ci_hdrc_imx.c
> > index 5ae16368a0c7..5078d0695eb7 100644
> > --- a/drivers/usb/chipidea/ci_hdrc_imx.c
> > +++ b/drivers/usb/chipidea/ci_hdrc_imx.c
> > @@ -434,6 +434,9 @@ static int ci_hdrc_imx_probe(struct
> > platform_device *pdev)
> >  		usb_phy_init(pdata.usb_phy);
> >  	}
> > 
> > +	if (of_property_read_bool(np, "disable-runtime-pm"))
> > +		pdata.flags &= ~CI_HDRC_SUPPORTS_RUNTIME_PM;
> > +
> >  	if (pdata.flags & CI_HDRC_SUPPORTS_RUNTIME_PM)
> >  		data->supports_runtime_pm = true;
> > 
> > --
> > 2.27.0
Peter Chen July 20, 2020, 3:44 a.m. UTC | #3
> On Wed, 2020-07-15 at 00:51 +0000, Peter Chen wrote:
> >
> > > The Toradex Colibri iMX6ULL board has a special USB hardware design.
> > > With runtime-pm enabled USB reset itself continuously. Furthermore
> > > the OTG port is also not enumerating devices if the Chipidea IP is
> > > in runtime sleep mode and a device or host gets plugged in.
> > >
> >
> > Hi Philippe,
> >
> > You may describe the detail what's the special USB hardware design for
> > your board,
> 
> If I only knew the root-cause of that problem - unfortunately I don't.
> That's also why I have such a hard time to describe it.
> 
> > and why it causes the problem, and why disable runtime pm could fix
> > this issue, then,
> 
> I cannot provide the 'why' part yet. I'll try something more and hope I can provide
> you guys with the exact description.
> 
> > the other users could know if it could apply to their platforms or not
> > in future.
> 
> I only found out about it because you were pointing me in that direction. I debugged
> for hours now and didn't came to the root-cause of the issue. I think to really
> understand it I would need to know much more about the Chipidea IP.
> 
> I'll get back to you guys with a proposal for a new description.
> 

Philippe, is it possible to share your USB hardware design at 6ULL?
And how ci_hdrc_gadget_connect is called when the runtime pm is disabled?

Thanks,
Peter
Philippe Schenker July 20, 2020, 7:51 a.m. UTC | #4
On Mon, 2020-07-20 at 03:44 +0000, Peter Chen wrote:
>  
> > On Wed, 2020-07-15 at 00:51 +0000, Peter Chen wrote:
> > > > The Toradex Colibri iMX6ULL board has a special USB hardware
> > > > design.
> > > > With runtime-pm enabled USB reset itself continuously.
> > > > Furthermore
> > > > the OTG port is also not enumerating devices if the Chipidea IP
> > > > is
> > > > in runtime sleep mode and a device or host gets plugged in.
> > > > 
> > > 
> > > Hi Philippe,
> > > 
> > > You may describe the detail what's the special USB hardware design
> > > for
> > > your board,
> > 
> > If I only knew the root-cause of that problem - unfortunately I
> > don't.
> > That's also why I have such a hard time to describe it.
> > 
> > > and why it causes the problem, and why disable runtime pm could
> > > fix
> > > this issue, then,
> > 
> > I cannot provide the 'why' part yet. I'll try something more and
> > hope I can provide
> > you guys with the exact description.
> > 
> > > the other users could know if it could apply to their platforms or
> > > not
> > > in future.
> > 
> > I only found out about it because you were pointing me in that
> > direction. I debugged
> > for hours now and didn't came to the root-cause of the issue. I
> > think to really
> > understand it I would need to know much more about the Chipidea IP.
> > 
> > I'll get back to you guys with a proposal for a new description.
> > 
> 
> Philippe, is it possible to share your USB hardware design at 6ULL?

It's actually pretty simple: We have on USB_OTG1_VBUS a 1uF capacitor
and +3.0V on VDD_USB_CAP together with 100n and 10u bypass caps. Now the
big problem is that the driver can not detect the 5V on VBUS signal.

I tried to 'inject' 5V to that pin last week and things got really
better with runtime-pm. But I still thinks disabling it for our board
would make sense.

I'll send a new description today where I try to point to VBUS signal
not connected.

Philippe

> And how ci_hdrc_gadget_connect is called when the runtime pm is
> disabled?
> 
> Thanks,
> Peter
>
Peter Chen July 20, 2020, 8:06 a.m. UTC | #5
> On Mon, 2020-07-20 at 03:44 +0000, Peter Chen wrote:
> >
> > > On Wed, 2020-07-15 at 00:51 +0000, Peter Chen wrote:
> > > > > The Toradex Colibri iMX6ULL board has a special USB hardware
> > > > > design.
> > > > > With runtime-pm enabled USB reset itself continuously.
> > > > > Furthermore
> > > > > the OTG port is also not enumerating devices if the Chipidea IP
> > > > > is in runtime sleep mode and a device or host gets plugged in.
> > > > >
> > > >
> > > > Hi Philippe,
> > > >
> > > > You may describe the detail what's the special USB hardware design
> > > > for your board,
> > >
> > > If I only knew the root-cause of that problem - unfortunately I
> > > don't.
> > > That's also why I have such a hard time to describe it.
> > >
> > > > and why it causes the problem, and why disable runtime pm could
> > > > fix this issue, then,
> > >
> > > I cannot provide the 'why' part yet. I'll try something more and
> > > hope I can provide you guys with the exact description.
> > >
> > > > the other users could know if it could apply to their platforms or
> > > > not in future.
> > >
> > > I only found out about it because you were pointing me in that
> > > direction. I debugged for hours now and didn't came to the
> > > root-cause of the issue. I think to really understand it I would
> > > need to know much more about the Chipidea IP.
> > >
> > > I'll get back to you guys with a proposal for a new description.
> > >
> >
> > Philippe, is it possible to share your USB hardware design at 6ULL?
> 
> It's actually pretty simple: We have on USB_OTG1_VBUS a 1uF capacitor and
> +3.0V on VDD_USB_CAP together with 100n and 10u bypass caps. Now the big
> problem is that the driver can not detect the 5V on VBUS signal.
> 

Could you confirm it does not see VBUS at register OTGSC? If it is, how can it work with runtime
disabled, the USBCMD.RS setting (ci_hdrc_gadget_connect is called) depends on VBUS.

Peter

> I tried to 'inject' 5V to that pin last week and things got really better with runtime-pm.
> But I still thinks disabling it for our board would make sense.
> 
> I'll send a new description today where I try to point to VBUS signal not connected.
> 
> Philippe
> 
> > And how ci_hdrc_gadget_connect is called when the runtime pm is
> > disabled?
> >
> > Thanks,
> > Peter
> >
Philippe Schenker July 20, 2020, 10:10 a.m. UTC | #6
On Mon, 2020-07-20 at 08:06 +0000, Peter Chen wrote:
>  
> > On Mon, 2020-07-20 at 03:44 +0000, Peter Chen wrote:
> > > > On Wed, 2020-07-15 at 00:51 +0000, Peter Chen wrote:
> > > > > > The Toradex Colibri iMX6ULL board has a special USB hardware
> > > > > > design.
> > > > > > With runtime-pm enabled USB reset itself continuously.
> > > > > > Furthermore
> > > > > > the OTG port is also not enumerating devices if the Chipidea
> > > > > > IP
> > > > > > is in runtime sleep mode and a device or host gets plugged
> > > > > > in.
> > > > > > 
> > > > > 
> > > > > Hi Philippe,
> > > > > 
> > > > > You may describe the detail what's the special USB hardware
> > > > > design
> > > > > for your board,
> > > > 
> > > > If I only knew the root-cause of that problem - unfortunately I
> > > > don't.
> > > > That's also why I have such a hard time to describe it.
> > > > 
> > > > > and why it causes the problem, and why disable runtime pm
> > > > > could
> > > > > fix this issue, then,
> > > > 
> > > > I cannot provide the 'why' part yet. I'll try something more and
> > > > hope I can provide you guys with the exact description.
> > > > 
> > > > > the other users could know if it could apply to their
> > > > > platforms or
> > > > > not in future.
> > > > 
> > > > I only found out about it because you were pointing me in that
> > > > direction. I debugged for hours now and didn't came to the
> > > > root-cause of the issue. I think to really understand it I would
> > > > need to know much more about the Chipidea IP.
> > > > 
> > > > I'll get back to you guys with a proposal for a new description.
> > > > 
> > > 
> > > Philippe, is it possible to share your USB hardware design at
> > > 6ULL?
> > 
> > It's actually pretty simple: We have on USB_OTG1_VBUS a 1uF
> > capacitor and
> > +3.0V on VDD_USB_CAP together with 100n and 10u bypass caps. Now the
> > big
> > problem is that the driver can not detect the 5V on VBUS signal.
> > 
> 
> Could you confirm it does not see VBUS at register OTGSC? If it is,
> how can it work with runtime
> disabled, the USBCMD.RS setting (ci_hdrc_gadget_connect is called)
> depends on VBUS.
> 
> Peter

For this reason I'm using a workaround in extcon like this:

extcon = <&extcon_usbc_det>, <&extcon_usbc_det>;

I know that this is undocumented and wrong, but it works for our
hardware. With this and enabled runtime-pm devices do not get
enumerated.

But with runtime-pm disabled, devices get enumerated.

Further with this workaround the VBUS signal gets 'simulated'
in hw_read_otgsc.

Another problem with runtime-pm enabled is that with no devices plugged
into USB it resets itself every ~1 second.

Philippe.
> 
> > I tried to 'inject' 5V to that pin last week and things got really
> > better with runtime-pm.
> > But I still thinks disabling it for our board would make sense.
> > 
> > I'll send a new description today where I try to point to VBUS
> > signal not connected.
> > 
> > Philippe
> > 
> > > And how ci_hdrc_gadget_connect is called when the runtime pm is
> > > disabled?
> > > 
> > > Thanks,
> > > Peter
> > >
diff mbox series

Patch

diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
index 5ae16368a0c7..5078d0695eb7 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -434,6 +434,9 @@  static int ci_hdrc_imx_probe(struct platform_device *pdev)
 		usb_phy_init(pdata.usb_phy);
 	}
 
+	if (of_property_read_bool(np, "disable-runtime-pm"))
+		pdata.flags &= ~CI_HDRC_SUPPORTS_RUNTIME_PM;
+
 	if (pdata.flags & CI_HDRC_SUPPORTS_RUNTIME_PM)
 		data->supports_runtime_pm = true;