From: Bin Liu <b-liu@ti.com>
To: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Chen-Yu Tsai <wens@csie.org>,
Paul Kocialkowski <contact@paulk.fr>
Subject: usb: musb: Support gadget mode when the port is set to dual role
Date: Fri, 20 Apr 2018 09:25:24 -0500 [thread overview]
Message-ID: <20180420142524.GB29011@uda0271908> (raw)
On Thu, Mar 29, 2018 at 01:57:24PM +0200, Paul Kocialkowski wrote:
> Hi,
>
> On Thu, 2018-03-29 at 11:23 +0200, Maxime Ripard wrote:
> > On Wed, Mar 28, 2018 at 11:52:13PM +0200, Paul Kocialkowski wrote:
> > > This allows dual-role ports to be reported as having gadget mode by
> > > the
> > > musb_has_gadget helper. This is required to enable MUSB at all with
> > > MUSB
> > > glue layers that set the port mode to MUSB_PORT_MODE_DUAL_ROLE at
> > > init.
> > >
> > > Most notably, this allows calling musb_start when needed in the
> > > virtual
> > > MUSB root HUB, regardless of whether the current mode should be
> > > gadget
> > > or host.
> > >
> > > This fixes USB OTG on Allwinner devices that I could test it with,
> > > mainly A20 devices.
> > >
> > > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> >
> > Surely there's more to it than that. The gadget mode of A20 boards
> > have been working in the past, including when compiling with mUSB
> > setup as dual role.
> >
> > Is this a regression since a particular commit? Or is there another,
> > deeper issue overlooked in the commit log?
>
> The root of the issue here is that musb_start is not called at any point
> without this patch. My understanding of the flow is the following: when
> the PHY detects that there was a VBUS/ID change, it will notify its
> listeners (mainly the musb sunxi glue layer). This will then schedule
> the driver's work (sunxi_musb_work), which does nothing since the
> SUNXI_MUSB_FL_ENABLED bit was never set. This bit is only set after
> calling sunxi_musb_enable, which is called from musb_platform_enable,
> that originates from musb_start.
>
> Currently I see two places where musb_start is called:
> * musb_virthub
> * musb_gadget
>
> In the latter case, it is in turn called from udc_start, which should
> probably (correct me if I'm wrong) happen later in the call chain than
> ID/VBUS change notification time.
I don't think it is correct that udc_start() is triggered by ID/VBUS
events, but I don't have an Allwinner platform to verify the callflow.
Have you tried to load with a gadget driver? When a gadget function is
bound to UDC, udc_start() is triggered, which in turn calls
musb_start().
>
> In the former case, musb_start is called in the root controller hub
> control, when setting the USB_PORT_FEAT_POWER feature. This looks
> perfectly legit and IMO this is where it should be initially calling
> musb_start in the dual role case. The kernel is indeed setting the
No actually. A dual-role port should be in b_idle state by default, so
logically all actions should go to the gadget path until the port
switches to host mode.
> feature, only that it fails to enable musb without this patch.
>
> First, I'd like to make sure that this understanding of the flow is
> correct as I may have missed something here. Does it make sense?
I am guessing you didn't load a gadget driver when testing?
> Then, it seems that the offending commit is: be9d39881fc4f
> ("usb: musb: host: rely on port_mode to call musb_start()")
>
> That itself fixed: ae44df2e21b5
> ("usb: musb: call musb_start() only once in OTG mode")
>
> Still, this commit was authored in June 2015, so almost 3 years ago.
> In the meantime, the sunxi driver has received feature improvements, so
> it seems hard to believe that it was broken all this time...
>
> Cheers,
Regards,
-Bin.
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Bin Liu <b-liu@ti.com>
To: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
<linux-kernel@vger.kernel.org>, <linux-usb@vger.kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Chen-Yu Tsai <wens@csie.org>,
Paul Kocialkowski <contact@paulk.fr>
Subject: Re: [PATCH] usb: musb: Support gadget mode when the port is set to dual role
Date: Fri, 20 Apr 2018 09:25:24 -0500 [thread overview]
Message-ID: <20180420142524.GB29011@uda0271908> (raw)
In-Reply-To: <1522324644.1746.19.camel@bootlin.com>
On Thu, Mar 29, 2018 at 01:57:24PM +0200, Paul Kocialkowski wrote:
> Hi,
>
> On Thu, 2018-03-29 at 11:23 +0200, Maxime Ripard wrote:
> > On Wed, Mar 28, 2018 at 11:52:13PM +0200, Paul Kocialkowski wrote:
> > > This allows dual-role ports to be reported as having gadget mode by
> > > the
> > > musb_has_gadget helper. This is required to enable MUSB at all with
> > > MUSB
> > > glue layers that set the port mode to MUSB_PORT_MODE_DUAL_ROLE at
> > > init.
> > >
> > > Most notably, this allows calling musb_start when needed in the
> > > virtual
> > > MUSB root HUB, regardless of whether the current mode should be
> > > gadget
> > > or host.
> > >
> > > This fixes USB OTG on Allwinner devices that I could test it with,
> > > mainly A20 devices.
> > >
> > > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> >
> > Surely there's more to it than that. The gadget mode of A20 boards
> > have been working in the past, including when compiling with mUSB
> > setup as dual role.
> >
> > Is this a regression since a particular commit? Or is there another,
> > deeper issue overlooked in the commit log?
>
> The root of the issue here is that musb_start is not called at any point
> without this patch. My understanding of the flow is the following: when
> the PHY detects that there was a VBUS/ID change, it will notify its
> listeners (mainly the musb sunxi glue layer). This will then schedule
> the driver's work (sunxi_musb_work), which does nothing since the
> SUNXI_MUSB_FL_ENABLED bit was never set. This bit is only set after
> calling sunxi_musb_enable, which is called from musb_platform_enable,
> that originates from musb_start.
>
> Currently I see two places where musb_start is called:
> * musb_virthub
> * musb_gadget
>
> In the latter case, it is in turn called from udc_start, which should
> probably (correct me if I'm wrong) happen later in the call chain than
> ID/VBUS change notification time.
I don't think it is correct that udc_start() is triggered by ID/VBUS
events, but I don't have an Allwinner platform to verify the callflow.
Have you tried to load with a gadget driver? When a gadget function is
bound to UDC, udc_start() is triggered, which in turn calls
musb_start().
>
> In the former case, musb_start is called in the root controller hub
> control, when setting the USB_PORT_FEAT_POWER feature. This looks
> perfectly legit and IMO this is where it should be initially calling
> musb_start in the dual role case. The kernel is indeed setting the
No actually. A dual-role port should be in b_idle state by default, so
logically all actions should go to the gadget path until the port
switches to host mode.
> feature, only that it fails to enable musb without this patch.
>
> First, I'd like to make sure that this understanding of the flow is
> correct as I may have missed something here. Does it make sense?
I am guessing you didn't load a gadget driver when testing?
> Then, it seems that the offending commit is: be9d39881fc4f
> ("usb: musb: host: rely on port_mode to call musb_start()")
>
> That itself fixed: ae44df2e21b5
> ("usb: musb: call musb_start() only once in OTG mode")
>
> Still, this commit was authored in June 2015, so almost 3 years ago.
> In the meantime, the sunxi driver has received feature improvements, so
> it seems hard to believe that it was broken all this time...
>
> Cheers,
Regards,
-Bin.
next reply other threads:[~2018-04-20 14:25 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-20 14:25 Bin Liu [this message]
2018-04-20 14:25 ` [PATCH] usb: musb: Support gadget mode when the port is set to dual role Bin Liu
-- strict thread matches above, loose matches on Subject: below --
2019-03-22 14:04 Bin Liu
2019-03-22 14:04 ` [PATCH] " Bin Liu
2019-03-22 13:46 Maxime Ripard
2019-03-22 13:46 ` [PATCH] " Maxime Ripard
2019-03-22 13:46 Bin Liu
2019-03-22 13:46 ` [PATCH] " Bin Liu
2019-03-22 13:44 Bin Liu
2019-03-22 13:44 ` [PATCH] " Bin Liu
2019-03-22 13:37 Paul Kocialkowski
2019-03-22 13:37 ` [PATCH] " Paul Kocialkowski
2019-03-22 13:36 Bin Liu
2019-03-22 13:36 ` [PATCH] " Bin Liu
2019-03-22 13:34 Paul Kocialkowski
2019-03-22 13:34 ` [PATCH] " Paul Kocialkowski
2019-03-22 13:28 Bin Liu
2019-03-22 13:28 ` [PATCH] " Bin Liu
2019-03-22 13:10 Paul Kocialkowski
2019-03-22 13:10 ` [PATCH] " Paul Kocialkowski
2019-03-22 13:09 Maxime Ripard
2019-03-22 13:09 ` [PATCH] " Maxime Ripard
2019-03-22 12:46 Bin Liu
2019-03-22 12:46 ` [PATCH] " Bin Liu
2019-03-21 16:41 Greg Kroah-Hartman
2019-03-21 16:41 ` [PATCH] " Greg Kroah-Hartman
2019-03-21 13:01 Maxime Ripard
2019-03-21 13:01 ` [PATCH] " Maxime Ripard
2018-05-01 16:22 Bin Liu
2018-05-01 16:22 ` [PATCH] " Bin Liu
2018-05-01 13:26 Paul Kocialkowski
2018-05-01 13:26 ` [PATCH] " Paul Kocialkowski
2018-05-01 12:25 Bin Liu
2018-05-01 12:25 ` [PATCH] " Bin Liu
2018-04-30 21:08 Paul Kocialkowski
2018-04-30 21:08 ` [PATCH] " Paul Kocialkowski
2018-04-21 14:34 Bin Liu
2019-03-21 10:02 ` [PATCH] " Bin Liu
2018-04-21 14:34 ` Bin Liu
2018-04-21 10:59 Paul Kocialkowski
2018-04-21 10:59 ` [PATCH] " Paul Kocialkowski
2018-04-21 10:51 Paul Kocialkowski
2018-04-21 10:51 ` [PATCH] " Paul Kocialkowski
2018-04-03 9:29 Maxime Ripard
2018-04-03 9:29 ` [PATCH] " Maxime Ripard
2018-03-29 11:57 Paul Kocialkowski
2018-03-29 11:57 ` [PATCH] " Paul Kocialkowski
2018-03-29 9:23 Maxime Ripard
2018-03-29 9:23 ` [PATCH] " Maxime Ripard
2018-03-28 21:52 Paul Kocialkowski
2018-03-28 21:52 ` [PATCH] " Paul Kocialkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180420142524.GB29011@uda0271908 \
--to=b-liu@ti.com \
--cc=contact@paulk.fr \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=maxime.ripard@bootlin.com \
--cc=paul.kocialkowski@bootlin.com \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.