The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
To: Krishna Kurapati PSSNV <quic_kriskura@quicinc.com>
Cc: Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"quic_ppratap@quicinc.com" <quic_ppratap@quicinc.com>,
	"quic_wcheng@quicinc.com" <quic_wcheng@quicinc.com>,
	"quic_jackp@quicinc.com" <quic_jackp@quicinc.com>,
	"quic_ugoswami@quicinc.com" <quic_ugoswami@quicinc.com>
Subject: Re: [RFC] usb: dwc3: core: Fix RAM interface getting stuck during enumeration
Date: Thu, 12 Oct 2023 22:17:52 +0000	[thread overview]
Message-ID: <20231012221744.ww2w6febhurvlqi6@synopsys.com> (raw)
In-Reply-To: <bac414a7-aa2a-4b93-82e0-998002c455e0@quicinc.com>

On Fri, Oct 13, 2023, Krishna Kurapati PSSNV wrote:
> 
> 
> On 10/12/2023 11:29 PM, Thinh Nguyen wrote:
> 
> > > -static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc)
> > > +int dwc3_gadget_soft_disconnect(struct dwc3 *dwc)
> > >   {
> > >   	unsigned long flags;
> > >   	int ret;
> > > @@ -2701,7 +2701,7 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc)
> > >   	return ret;
> > >   }
> > > -static int dwc3_gadget_soft_connect(struct dwc3 *dwc)
> > > +int dwc3_gadget_soft_connect(struct dwc3 *dwc)
> > >   {
> > >   	int ret;
> > > @@ -3963,6 +3963,7 @@ static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc)
> > >   	dwc3_gadget_dctl_write_safe(dwc, reg);
> > >   	dwc->connected = false;
> > > +	dwc->cable_disconnected = true;
> > >   	dwc3_disconnect_gadget(dwc);
> > > @@ -4038,6 +4039,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
> > >   	 */
> > >   	dwc3_stop_active_transfers(dwc);
> > >   	dwc->connected = true;
> > > +	dwc->cable_disconnected = false;
> > >   	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
> > >   	reg &= ~DWC3_DCTL_TSTCTRL_MASK;
> > > -- 
> > > 2.42.0
> > > 
> > 
> > We can just reset the controller when there's End Transfer command
> > timeout as a failure recovery. No need to do what you're doing here.
> > 
> Hi Thinh,
> 
>  That was what I initially wanted to do, but there were couple of reasons I
> wanted to take this approach:
> 
> 1. We can't just reset the controller in midst of gadget_interrupt. We need
> to process it completely and then take action.

You can flag the driver so you can do the teardown/soft-reset at the
appropriate time.

> 
> 2. The above log was seen on QRD variant of SM8550/SM8650 easily. But on
> other platforms of same targets, the issue comes up at some other instances
> of code, at a point where no IRQ is running. In such cases its not possible
> to accurately find out code portions and reset the controller. The way I
> confirmed that both platforms are having the same issue is:
> 
> a. During cable disconnect, I am not receiving disconnect interrupt
> b. The reg dump is exactly same in both cases (BMU as well)
> 
> So I felt it was better to fix it during cable disconnect because even if we
> remove cable, we are still in device mode only and in this case we can
> unblock suspend and also bring back controller to a known state.
> 
> Let me know your thoughts on the above.
> 

This issue happens outside of disconnect right? Did you account for port
reset?

The symptom should be the same. At some point, a command will be issued.
If a command timed out, then something is really wrong (especially End
Transfer command). We can attempt to recover base on this symptom then.

And you don't need to poll for timeout for this specific type of error.
Just read some known register like GSNPSID to see if it's invalid.

BR,
Thinh

  reply	other threads:[~2023-10-12 22:18 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-11 10:02 [RFC] usb: dwc3: core: Fix RAM interface getting stuck during enumeration Krishna Kurapati
2023-10-12 17:59 ` Thinh Nguyen
2023-10-12 18:39   ` Krishna Kurapati PSSNV
2023-10-12 22:17     ` Thinh Nguyen [this message]
2023-10-13  3:58       ` Krishna Kurapati PSSNV
2023-10-15 16:48         ` Krishna Kurapati PSSNV
2023-10-20 22:54           ` Thinh Nguyen
2023-10-12 19:25 ` Wesley Cheng
2023-10-13  3:56   ` Krishna Kurapati PSSNV

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=20231012221744.ww2w6febhurvlqi6@synopsys.com \
    --to=thinh.nguyen@synopsys.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=quic_jackp@quicinc.com \
    --cc=quic_kriskura@quicinc.com \
    --cc=quic_ppratap@quicinc.com \
    --cc=quic_ugoswami@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox