public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Wesley Cheng <wcheng@codeaurora.org>
To: John Stultz <john.stultz@linaro.org>,
	lkml <linux-kernel@vger.kernel.org>
Cc: Felipe Balbi <balbi@kernel.org>,
	Tejas Joglekar <tejas.joglekar@synopsys.com>,
	Yang Fei <fei.yang@intel.com>,
	YongQin Liu <yongqin.liu@linaro.org>,
	Andrzej Pietrasiewicz <andrzej.p@collabora.com>,
	Thinh Nguyen <thinhn@synopsys.com>,
	Jun Li <lijun.kernel@gmail.com>,
	Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org
Subject: Re: [PATCH v3 2/2] usb: dwc3: Fix DRD mode change sequence following programming guide
Date: Sat, 6 Mar 2021 01:00:02 -0800	[thread overview]
Message-ID: <eb4b8540-a57c-53cc-a371-cf68178bec15@codeaurora.org> (raw)
In-Reply-To: <20210108015115.27920-2-john.stultz@linaro.org>



On 1/7/2021 5:51 PM, John Stultz wrote:
> In reviewing the previous patch, Thinh Nguyen pointed out that
> the DRD mode change sequence should be like the following when
> switching from host -> device according to the programming guide
> (for all DRD IPs):
> 1. Reset controller with GCTL.CoreSoftReset
> 2. Set GCTL.PrtCapDir(device)
> 3. Soft reset with DCTL.CSftRst
> 4. Then follow up with the initializing registers sequence
> 
> The current code does:
> a. Soft reset with DCTL.CSftRst on driver probe
> b. Reset controller with GCTL.CoreSoftReset (added in previous
>    patch)
> c. Set GCTL.PrtCapDir(device)
> d. < missing DCTL.CSftRst >
> e. Then follow up with initializing registers sequence
> 
> So this patch adds the DCTL.CSftRst soft reset that was currently
> missing from the dwc3 mode switching.
> 
> Cc: Felipe Balbi <balbi@kernel.org>
> Cc: Tejas Joglekar <tejas.joglekar@synopsys.com>
> Cc: Yang Fei <fei.yang@intel.com>
> Cc: YongQin Liu <yongqin.liu@linaro.org>
> Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
> Cc: Thinh Nguyen <thinhn@synopsys.com>
> Cc: Jun Li <lijun.kernel@gmail.com>
> Cc: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: linux-usb@vger.kernel.org
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
> Feedback would be appreciated. I'm a little worried I should be
> conditionalizing the DCTL.CSftRst on DRD mode controllers, but
> I'm really not sure what the right thing to do is for non-DRD
> mode controllers.
> ---
>  drivers/usb/dwc3/core.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index b6a6b90eb2d5..71f8b07ecb99 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -40,6 +40,8 @@
>  
>  #define DWC3_DEFAULT_AUTOSUSPEND_DELAY	5000 /* ms */
>  
> +static int dwc3_core_soft_reset(struct dwc3 *dwc);
> +
>  /**
>   * dwc3_get_dr_mode - Validates and sets dr_mode
>   * @dwc: pointer to our context structure
> @@ -177,6 +179,7 @@ static void __dwc3_set_mode(struct work_struct *work)
>  
>  	dwc3_set_prtcap(dwc, dwc->desired_dr_role);
>  
> +	dwc3_core_soft_reset(dwc);

Hi John/Thinh/Felipe,

I actually added this change into my local branch, because we were
seeing an issue when switching from host mode --> peripheral mode.  What
was happening was that the RXFIFO register did not update back to the
expected value for peripheral mode by the time
dwc3_gadget_init_out_endpoint() was executed.  With the logic to
calculate the EP max packet limit based on RXFIFO reg, this caused all
EPs to be set with an EP max limit of 0.

With this change, it seemed to help with the above issue.  However, can
we consider moving the core soft reset outside the spinlock?  At least
with our PHY init routines, we have some msleep() calls for waiting for
the PHYs to be ready, which will end up as a sleeping while atomic bug.
(not sure if PHY init is required to be called in atomic context)

Thanks
Wesley Cheng

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2021-03-06  9:01 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-08  1:51 [PATCH v3 1/2] usb: dwc3: Trigger a GCTL soft reset when switching modes in DRD John Stultz
2021-01-08  1:51 ` [PATCH v3 2/2] usb: dwc3: Fix DRD mode change sequence following programming guide John Stultz
2021-03-06  9:00   ` Wesley Cheng [this message]
2021-03-06 23:39     ` Thinh Nguyen
2021-03-29 22:17       ` Wesley Cheng
2021-03-30  1:19         ` Thinh Nguyen
2021-03-30 20:17           ` Wesley Cheng
2021-01-08 12:25 ` [PATCH v3 1/2] usb: dwc3: Trigger a GCTL soft reset when switching modes in DRD Felipe Balbi
2021-01-08 19:18   ` John Stultz
2021-01-09  0:44     ` Thinh Nguyen
2021-03-06  9:04       ` Wesley Cheng
2021-03-06 23:41         ` Thinh Nguyen
2021-03-07 20:04           ` Wesley Cheng
2021-03-09  3:05             ` Thinh Nguyen
2021-03-09  6:33               ` Wesley Cheng
2021-03-19 22:40                 ` Wesley Cheng
2021-03-19 23:09                   ` Thinh Nguyen
2021-03-29 22:14                     ` Wesley Cheng
2021-03-29 22:20                       ` John Stultz
2021-03-30  2:11                         ` Wesley Cheng
  -- strict thread matches above, loose matches on Subject: below --
2020-10-22  3:25 John Stultz
2020-10-22  3:25 ` [PATCH v3 2/2] usb: dwc3: Fix DRD mode change sequence following programming guide John Stultz

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=eb4b8540-a57c-53cc-a371-cf68178bec15@codeaurora.org \
    --to=wcheng@codeaurora.org \
    --cc=andrzej.p@collabora.com \
    --cc=balbi@kernel.org \
    --cc=fei.yang@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=john.stultz@linaro.org \
    --cc=lijun.kernel@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mchehab+huawei@kernel.org \
    --cc=tejas.joglekar@synopsys.com \
    --cc=thinhn@synopsys.com \
    --cc=yongqin.liu@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox