Linux-Renesas-SoC Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v2] usb: gadget: udc: renesas_usb3: add suspend event support
@ 2019-09-05  8:37 Veeraiyan Chidambaram
  0 siblings, 0 replies; 5+ messages in thread
From: Veeraiyan Chidambaram @ 2019-09-05  8:37 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Geert Uytterhoeven,
	Yoshihiro Shimoda, Linux-Renesas
  Cc: linux-usb, Andrew Gabbasov, Eugeniu Rosca, Veeraiyan Chidambaram

From: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com>

In RCAR3 USB 3.0 Function, if host is detached an interrupt
will be generated and Suspended state bit is set in interrupt status
register. Interrupt handler will call driver->suspend(composite_suspend)
if suspended state bit is set. composite_suspend will call
ffs_func_suspend which will post FUNCTIONFS_SUSPEND and will be consumed
by user space application via /dev/ep0.

To be able to detect the host detach, USB_INT_1_B2_SPND to cover the
Suspended bit of the B2_SPND_OUT[9] from the USB Status Register
(USB_STA) register and perform appropriate action in the
usb3_irq_epc_int_1 function.

Without this commit, disconnection of the phone from R-Car-H3 ES2.0
Salvator-X CN11 port is not recognized and reverse role switch does
not happen. If phone is connected again it does not enumerate.

With this commit, disconnection will be recognized and reverse role
switch will happen. If phone is connected again it will enumerate
properly and will become visible in the output of 'lsusb'.

Signed-off-by: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com>
---
 drivers/usb/gadget/udc/renesas_usb3.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
index eaa3339b30a2..39dbd644c770 100644
--- a/drivers/usb/gadget/udc/renesas_usb3.c
+++ b/drivers/usb/gadget/udc/renesas_usb3.c
@@ -767,6 +767,18 @@ static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
 	usb3_transition_to_default_state(usb3, false);
 }
 
+static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3)
+{
+	usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND);
+
+	if (usb3->gadget.speed != USB_SPEED_UNKNOWN &&
+	    usb3->gadget.state != USB_STATE_NOTATTACHED) {
+		if (usb3->driver && usb3->driver->suspend)
+			usb3->driver->suspend(&usb3->gadget);
+		usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED);
+	}
+}
+
 static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
 {
 	usb3_stop_usb3_connection(usb3);
@@ -852,6 +864,9 @@ static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
 	if (int_sta_1 & USB_INT_1_B2_RSUM)
 		usb3_irq_epc_int_1_resume(usb3);
 
+	if (int_sta_1 & USB_INT_1_B2_SPND)
+		usb3_irq_epc_int_1_suspend(usb3);
+
 	if (int_sta_1 & USB_INT_1_SPEED)
 		usb3_irq_epc_int_1_speed(usb3);
 
-- 
2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] usb: gadget: udc: renesas_usb3: add suspend event support
  2019-09-05  2:09   ` Yoshihiro Shimoda
  2019-09-05  8:52     ` veeraiyan chidambaram
@ 2019-09-05 10:26     ` veeraiyan chidambaram
  1 sibling, 0 replies; 5+ messages in thread
From: veeraiyan chidambaram @ 2019-09-05 10:26 UTC (permalink / raw)
  To: Yoshihiro Shimoda
  Cc: Felipe Balbi, Greg Kroah-Hartman, Geert Uytterhoeven,
	Linux-Renesas, linux-usb, Andrew Gabbasov, REE erosca,
	Veeraiyan Chidambaram

Hello Shimoda-san,

Please ignore my previous V2 patch [1] and take V3 patch[2].
sorry for the inconvenience.
[1] https://patchwork.kernel.org/patch/11132433/
[2] https://patchwork.kernel.org/patch/11132489/
Best regards,
Veeraiyan Chidambaram

On Thu, Sep 05, 2019 at 02:09:42AM +0000, Yoshihiro Shimoda wrote:
> Hi Veeraiyan,
> 
> Thank you for the patch!
> 
> > From: Veeraiyan Chidambaram, Sent: Wednesday, September 4, 2019 11:48 PM
> <snip>
> > --- a/drivers/usb/gadget/udc/renesas_usb3.c
> > +++ b/drivers/usb/gadget/udc/renesas_usb3.c
> > @@ -767,6 +767,20 @@ static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
> >  	usb3_transition_to_default_state(usb3, false);
> >  }
> > 
> > +static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3)
> > +{
> > +	usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND);
> > +
> > +	if (usb3->driver &&
> > +	    usb3->driver->suspend &&
> 
> As I mentioned on v1 patch [1], I'd like to remove these conditions.
> After fixed it,
> 
> Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> 
> [1] https://patchwork.kernel.org/patch/11129797/#22862513
> 
> Best regards,
> Yoshihiro Shimoda
> 
> > +	    usb3->gadget.speed != USB_SPEED_UNKNOWN &&
> > +	    usb3->gadget.state != USB_STATE_NOTATTACHED) {
> > +		if (usb3->driver && usb3->driver->suspend)
> > +			usb3->driver->suspend(&usb3->gadget);
> > +		usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED);
> > +	}
> > +}
> > +
> >  static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
> >  {
> >  	usb3_stop_usb3_connection(usb3);
> > @@ -852,6 +866,9 @@ static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
> >  	if (int_sta_1 & USB_INT_1_B2_RSUM)
> >  		usb3_irq_epc_int_1_resume(usb3);
> > 
> > +	if (int_sta_1 & USB_INT_1_B2_SPND)
> > +		usb3_irq_epc_int_1_suspend(usb3);
> > +
> >  	if (int_sta_1 & USB_INT_1_SPEED)
> >  		usb3_irq_epc_int_1_speed(usb3);
> > 
> > --
> > 2.7.4
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] usb: gadget: udc: renesas_usb3: add suspend event support
  2019-09-05  2:09   ` Yoshihiro Shimoda
@ 2019-09-05  8:52     ` veeraiyan chidambaram
  2019-09-05 10:26     ` veeraiyan chidambaram
  1 sibling, 0 replies; 5+ messages in thread
From: veeraiyan chidambaram @ 2019-09-05  8:52 UTC (permalink / raw)
  To: Yoshihiro Shimoda
  Cc: Felipe Balbi, Greg Kroah-Hartman, Geert Uytterhoeven,
	Linux-Renesas, linux-usb, Andrew Gabbasov, REE erosca,
	Veeraiyan Chidambaram

Hello Shimoda-san,

Thanks a lot . 

On Thu, Sep 05, 2019 at 02:09:42AM +0000, Yoshihiro Shimoda wrote:
> Hi Veeraiyan,
> 
> Thank you for the patch!
> 
> > From: Veeraiyan Chidambaram, Sent: Wednesday, September 4, 2019 11:48 PM
> <snip>
> > --- a/drivers/usb/gadget/udc/renesas_usb3.c
> > +++ b/drivers/usb/gadget/udc/renesas_usb3.c
> > @@ -767,6 +767,20 @@ static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
> >  	usb3_transition_to_default_state(usb3, false);
> >  }
> > 
> > +static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3)
> > +{
> > +	usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND);
> > +
> > +	if (usb3->driver &&
> > +	    usb3->driver->suspend &&
> 
> As I mentioned on v1 patch [1], I'd like to remove these conditions.
> After fixed it,
> 
> Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> 
> [1] https://patchwork.kernel.org/patch/11129797/#22862513

I have create V2 patch [1], please review.

[1] https://patchwork.kernel.org/patch/11132433/

Best regards,
Veeraiyan chidambaram

> Yoshihiro Shimoda
> 
> > +	    usb3->gadget.speed != USB_SPEED_UNKNOWN &&
> > +	    usb3->gadget.state != USB_STATE_NOTATTACHED) {
> > +		if (usb3->driver && usb3->driver->suspend)
> > +			usb3->driver->suspend(&usb3->gadget);
> > +		usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED);
> > +	}
> > +}
> > +
> >  static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
> >  {
> >  	usb3_stop_usb3_connection(usb3);
> > @@ -852,6 +866,9 @@ static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
> >  	if (int_sta_1 & USB_INT_1_B2_RSUM)
> >  		usb3_irq_epc_int_1_resume(usb3);
> > 
> > +	if (int_sta_1 & USB_INT_1_B2_SPND)
> > +		usb3_irq_epc_int_1_suspend(usb3);
> > +
> >  	if (int_sta_1 & USB_INT_1_SPEED)
> >  		usb3_irq_epc_int_1_speed(usb3);
> > 
> > --
> > 2.7.4
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v2] usb: gadget: udc: renesas_usb3: add suspend event support
  2019-09-04 14:48 ` [PATCH v2] " Veeraiyan Chidambaram
@ 2019-09-05  2:09   ` Yoshihiro Shimoda
  2019-09-05  8:52     ` veeraiyan chidambaram
  2019-09-05 10:26     ` veeraiyan chidambaram
  0 siblings, 2 replies; 5+ messages in thread
From: Yoshihiro Shimoda @ 2019-09-05  2:09 UTC (permalink / raw)
  To: Veeraiyan Chidambaram, Felipe Balbi, Greg Kroah-Hartman,
	Geert Uytterhoeven, Linux-Renesas
  Cc: linux-usb, Andrew Gabbasov, REE erosca, Veeraiyan Chidambaram

Hi Veeraiyan,

Thank you for the patch!

> From: Veeraiyan Chidambaram, Sent: Wednesday, September 4, 2019 11:48 PM
<snip>
> --- a/drivers/usb/gadget/udc/renesas_usb3.c
> +++ b/drivers/usb/gadget/udc/renesas_usb3.c
> @@ -767,6 +767,20 @@ static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
>  	usb3_transition_to_default_state(usb3, false);
>  }
> 
> +static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3)
> +{
> +	usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND);
> +
> +	if (usb3->driver &&
> +	    usb3->driver->suspend &&

As I mentioned on v1 patch [1], I'd like to remove these conditions.
After fixed it,

Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

[1] https://patchwork.kernel.org/patch/11129797/#22862513

Best regards,
Yoshihiro Shimoda

> +	    usb3->gadget.speed != USB_SPEED_UNKNOWN &&
> +	    usb3->gadget.state != USB_STATE_NOTATTACHED) {
> +		if (usb3->driver && usb3->driver->suspend)
> +			usb3->driver->suspend(&usb3->gadget);
> +		usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED);
> +	}
> +}
> +
>  static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
>  {
>  	usb3_stop_usb3_connection(usb3);
> @@ -852,6 +866,9 @@ static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
>  	if (int_sta_1 & USB_INT_1_B2_RSUM)
>  		usb3_irq_epc_int_1_resume(usb3);
> 
> +	if (int_sta_1 & USB_INT_1_B2_SPND)
> +		usb3_irq_epc_int_1_suspend(usb3);
> +
>  	if (int_sta_1 & USB_INT_1_SPEED)
>  		usb3_irq_epc_int_1_speed(usb3);
> 
> --
> 2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2] usb: gadget: udc: renesas_usb3: add suspend event support
  2019-09-04 12:08 [PATCH] " Yoshihiro Shimoda
@ 2019-09-04 14:48 ` " Veeraiyan Chidambaram
  2019-09-05  2:09   ` Yoshihiro Shimoda
  0 siblings, 1 reply; 5+ messages in thread
From: Veeraiyan Chidambaram @ 2019-09-04 14:48 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Geert Uytterhoeven,
	Yoshihiro Shimoda, Linux-Renesas
  Cc: linux-usb, Andrew Gabbasov, Eugeniu Rosca, Veeraiyan Chidambaram

From: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com>

In R-Car Gen3 USB 3.0 Function, if host is detached an interrupt
will be generated and Suspended state bit is set in interrupt status
register. Interrupt handler will call driver->suspend(composite_suspend)
if suspended state bit is set. composite_suspend will call
ffs_func_suspend which will post FUNCTIONFS_SUSPEND and will be consumed
by user space application via /dev/ep0.

To be able to detect the host detach, USB_INT_1_B2_SPND to cover the
Suspended bit of the B2_SPND_OUT[9] from the USB Status Register
(USB_STA) register and perform appropriate action in the
usb3_irq_epc_int_1 function.

Without this commit, disconnection of the phone from R-Car H3 ES2.0
Salvator-X CN11 port is not recognized and reverse role switch does
not happen. If phone is connected again it does not enumerate.

With this commit, disconnection will be recognized and reverse role
switch will happen by a user space application. If phone is connected
again it will enumerate properly and will become visible in the
output of 'lsusb'.

Signed-off-by: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com>
---
 drivers/usb/gadget/udc/renesas_usb3.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
index eaa3339b30a2..8d5207afdad9 100644
--- a/drivers/usb/gadget/udc/renesas_usb3.c
+++ b/drivers/usb/gadget/udc/renesas_usb3.c
@@ -767,6 +767,20 @@ static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
 	usb3_transition_to_default_state(usb3, false);
 }
 
+static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3)
+{
+	usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND);
+
+	if (usb3->driver &&
+	    usb3->driver->suspend &&
+	    usb3->gadget.speed != USB_SPEED_UNKNOWN &&
+	    usb3->gadget.state != USB_STATE_NOTATTACHED) {
+		if (usb3->driver && usb3->driver->suspend)
+			usb3->driver->suspend(&usb3->gadget);
+		usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED);
+	}
+}
+
 static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
 {
 	usb3_stop_usb3_connection(usb3);
@@ -852,6 +866,9 @@ static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
 	if (int_sta_1 & USB_INT_1_B2_RSUM)
 		usb3_irq_epc_int_1_resume(usb3);
 
+	if (int_sta_1 & USB_INT_1_B2_SPND)
+		usb3_irq_epc_int_1_suspend(usb3);
+
 	if (int_sta_1 & USB_INT_1_SPEED)
 		usb3_irq_epc_int_1_speed(usb3);
 
-- 
2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-05  8:37 [PATCH v2] usb: gadget: udc: renesas_usb3: add suspend event support Veeraiyan Chidambaram
  -- strict thread matches above, loose matches on Subject: below --
2019-09-04 12:08 [PATCH] " Yoshihiro Shimoda
2019-09-04 14:48 ` [PATCH v2] " Veeraiyan Chidambaram
2019-09-05  2:09   ` Yoshihiro Shimoda
2019-09-05  8:52     ` veeraiyan chidambaram
2019-09-05 10:26     ` veeraiyan chidambaram

Linux-Renesas-SoC Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-renesas-soc/0 linux-renesas-soc/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-renesas-soc linux-renesas-soc/ https://lore.kernel.org/linux-renesas-soc \
		linux-renesas-soc@vger.kernel.org linux-renesas-soc@archiver.kernel.org
	public-inbox-index linux-renesas-soc


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-renesas-soc


AGPL code for this site: git clone https://public-inbox.org/ public-inbox