Subject: Re: linux-next: manual merge of the usb tree with the usb.current tree

From: Greg KH <[email-masked]>
Date: Sun, 28 May 2023 17:07:03 +0100

On Sun, May 28, 2023 at 06:48:12PM +0300, Roger Quadros wrote:
> Hi Greg,
> 
> On 28/05/2023 17:28, Greg KH wrote:
> > On Mon, May 15, 2023 at 02:01:08PM +0300, Roger Quadros wrote:
> >> Hi Stephen,
> >>
> >> On 15/05/2023 05:35, Stephen Rothwell wrote:
> >>> Hi all,
> >>>
> >>> Today's linux-next merge of the usb tree got a conflict in:
> >>>
> >>>   drivers/usb/dwc3/gadget.c
> >>>
> >>> between commit:
> >>>
> >>>   c8540870af4c ("usb: dwc3: gadget: Improve dwc3_gadget_suspend() and dwc3_gadget_resume()")
> >>>
> >>> from the usb.current tree and commit:
> >>>
> >>>   813f44d57e19 ("usb: dwc3: gadget: Bail out in pullup if soft reset timeout happens")
> >>>
> >>> from the usb tree.
> >>>
> >>> I fixed it up (I think - see below) and can carry the fix as
> >>> necessary. This is now fixed as far as linux-next is concerned, but any
> >>> non trivial conflicts should be mentioned to your upstream maintainer
> >>> when your tree is submitted for merging.  You may also want to consider
> >>> cooperating with the maintainer of the conflicting tree to minimise any
> >>> particularly complex conflicts.
> >>>
> >>
> >>> diff --cc drivers/usb/dwc3/gadget.c
> >>> index d831f5acf7b5,5965796bc5d5..000000000000
> >>> --- a/drivers/usb/dwc3/gadget.c
> >>> +++ b/drivers/usb/dwc3/gadget.c
> >>> @@@ -2700,21 -2699,6 +2700,26 @@@ static int dwc3_gadget_soft_disconnect(
> >>>   	return ret;
> >>>   }
> >>>   
> >>>  +static int dwc3_gadget_soft_connect(struct dwc3 *dwc)
> >>>  +{
> >>> ++	int	ret;
> >>> ++
> >>>  +	/*
> >>>  +	 * In the Synopsys DWC_usb31 1.90a programming guide 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.
> >>>  +	 */
> >>>  +	dwc3_core_soft_reset(dwc);
> >>
> >> Please drop above call to dwc3_core_soft_reset().
> >>
> >>> ++	ret = dwc3_core_soft_reset(dwc);
> >>> ++	if (ret)
> >>> ++		return ret;
> >>>  +
> >>>  +	dwc3_event_buffers_setup(dwc);
> >>>  +	__dwc3_gadget_start(dwc);
> >>>  +	return dwc3_gadget_run_stop(dwc, true);
> >>>  +}
> >>>  +
> >>>   static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
> >>>   {
> >>>   	struct dwc3		*dwc = gadget_to_dwc(g);
> >>
> > 
> > Can you verify I got this right in my usb-next branch now?
> 
> No, the end result is not correct.
> 
> Please apply the below patch to fix it. Thanks.

Many thanks, I got that totally wrong :(

Now fixed up with your commit.

greg k-h