All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jung Daehwan <dh10.jung@samsung.com>
To: Wesley Cheng <quic_wcheng@quicinc.com>
Cc: balbi@kernel.org, gregkh@linuxfoundation.org,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	quic_jackp@quicinc.com, Thinh.Nguyen@synopsys.com
Subject: Re: [RFC PATCH v2 3/3] usb: dwc3: Issue core soft reset before enabling run/stop
Date: Thu, 17 Feb 2022 14:52:14 +0900	[thread overview]
Message-ID: <20220217055214.GA152781@ubuntu> (raw)
In-Reply-To: <20220216000835.25400-4-quic_wcheng@quicinc.com>

[-- Attachment #1: Type: text/plain, Size: 2801 bytes --]

Hi wesley,

On Tue, Feb 15, 2022 at 04:08:35PM -0800, Wesley Cheng wrote:
> It is recommended by the Synopsis databook to issue a DCTL.CSftReset
> when reconnecting from a device-initiated disconnect routine.  This
> resolves issues with enumeration during fast composition switching
> cases, which result in an unknown device on the host.
> 
> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
> ---
>  drivers/usb/dwc3/core.c   |  4 +---
>  drivers/usb/dwc3/core.h   |  2 ++
>  drivers/usb/dwc3/gadget.c | 11 +++++++++++
>  3 files changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 18adddfba3da..02d10e1cb774 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -115,8 +115,6 @@ void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode)
>  	dwc->current_dr_role = mode;
>  }
>  
> -static int dwc3_core_soft_reset(struct dwc3 *dwc);
> -
>  static void __dwc3_set_mode(struct work_struct *work)
>  {
>  	struct dwc3 *dwc = work_to_dwc(work);
> @@ -261,7 +259,7 @@ u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type)
>   * dwc3_core_soft_reset - Issues core soft reset and PHY reset
>   * @dwc: pointer to our context structure
>   */
> -static int dwc3_core_soft_reset(struct dwc3 *dwc)
> +int dwc3_core_soft_reset(struct dwc3 *dwc)
>  {
>  	u32		reg;
>  	int		retries = 1000;
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 00348d6d479b..b27ad8dad317 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -1532,6 +1532,8 @@ bool dwc3_has_imod(struct dwc3 *dwc);
>  int dwc3_event_buffers_setup(struct dwc3 *dwc);
>  void dwc3_event_buffers_cleanup(struct dwc3 *dwc);
>  
> +int dwc3_core_soft_reset(struct dwc3 *dwc);
> +
>  #if IS_ENABLED(CONFIG_USB_DWC3_HOST) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
>  int dwc3_host_init(struct dwc3 *dwc);
>  void dwc3_host_exit(struct dwc3 *dwc);
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 0c89baedf220..788889f924f9 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -2585,6 +2585,17 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
>  						dwc->ev_buf->length;
>  		}
>  	} else {
> +		/*
> +		 * In the Synopsis DesignWare Cores USB3 Databook Rev. 1.90a
> +		 * Section 4.1.9, it specifies that for a reconnect after a
> +		 * device-initiated disconnect requires a core soft reset
> +		 * (DCTL.CSftRst) before enabling the run/stop bit.
> +		 */
> +		spin_unlock_irqrestore(&dwc->lock, flags);
> +		dwc3_core_soft_reset(dwc);
> +		spin_lock_irqsave(&dwc->lock, flags);
> +
> +		dwc3_event_buffers_setup(dwc);

Could you tell me why you add dwc3_event_buffer_setup?

Best Regards,
Jung Daehwan

>  		__dwc3_gadget_start(dwc);
>  	}
>  
> 

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



  reply	other threads:[~2022-02-17  5:54 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-16  0:08 [RFC PATCH v2 0/3] Fix enumeration issues during composition switching Wesley Cheng
2022-02-16  0:08 ` [RFC PATCH v2 1/3] usb: dwc3: Flush pending SETUP data during stop active xfers Wesley Cheng
2022-03-22 18:21   ` Wesley Cheng
2022-03-23  1:31     ` Thinh Nguyen
2022-03-23  5:47       ` Wesley Cheng
2022-03-24  0:39         ` Thinh Nguyen
2022-03-24  2:19           ` Thinh Nguyen
2022-03-24 18:53           ` Wesley Cheng
2022-03-25  1:51             ` Thinh Nguyen
2022-03-25 18:35               ` Wesley Cheng
2022-04-01 19:31               ` Wesley Cheng
2022-04-04 23:32                 ` Thinh Nguyen
2022-02-16  0:08 ` [RFC PATCH v2 2/3] usb: dwc3: gadget: Wait for ep0 xfers to complete during dequeue Wesley Cheng
2022-02-16  0:08 ` [RFC PATCH v2 3/3] usb: dwc3: Issue core soft reset before enabling run/stop Wesley Cheng
2022-02-17  5:52   ` Jung Daehwan [this message]
2022-02-17  9:43     ` Jung Daehwan
2022-02-17 19:01     ` Wesley Cheng

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=20220217055214.GA152781@ubuntu \
    --to=dh10.jung@samsung.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=quic_jackp@quicinc.com \
    --cc=quic_wcheng@quicinc.com \
    /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.