diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2023-01-21 11:10:03 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-01-21 11:10:03 -0800 | 
| commit | e67da28898e9e219176412f2fd2f415dece474ab (patch) | |
| tree | cb00ae9cb835c7b76a17f8d5065a461b3948ae9f /drivers/usb/cdns3/cdns3-gadget.c | |
| parent | 83cd5fd014c0abfd3cf6d8e4189333d099630845 (diff) | |
| parent | 14ff7460bb58662d86aa50298943cc7d25532e28 (diff) | |
Merge tag 'usb-6.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB / Thunderbolt fixes from Greg KH:
 "Here are a number of small USB and Thunderbolt driver fixes and new
  device id changes for 6.2-rc5. Included in here are:
   - thunderbolt bugfixes for reported problems
   - new usb-serial driver ids added
   - onboard_hub usb driver fixes for much-reported problems
   - xhci bugfixes
   - typec bugfixes
   - ehci-fsl driver module alias fix
   - iowarrior header size fix
   - usb gadget driver fixes
  All of these, except for the iowarrior fix, have been in linux-next
  with no reported issues. The iowarrior fix passed the 0-day testing
  and is a one digit change based on a reported problem in the driver
  (which was written to a spec, not the real device that is now
  available)"
* tag 'usb-6.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (40 commits)
  USB: misc: iowarrior: fix up header size for USB_DEVICE_ID_CODEMERCS_IOW100
  usb: host: ehci-fsl: Fix module alias
  usb: dwc3: fix extcon dependency
  usb: core: hub: disable autosuspend for TI TUSB8041
  USB: fix misleading usb_set_intfdata() kernel doc
  usb: gadget: f_ncm: fix potential NULL ptr deref in ncm_bitrate()
  USB: gadget: Add ID numbers to configfs-gadget driver names
  usb: typec: tcpm: Fix altmode re-registration causes sysfs create fail
  usb: gadget: g_webcam: Send color matching descriptor per frame
  usb: typec: altmodes/displayport: Use proper macro for pin assignment check
  usb: typec: altmodes/displayport: Fix pin assignment calculation
  usb: typec: altmodes/displayport: Add pin assignment helper
  usb: gadget: f_fs: Ensure ep0req is dequeued before free_request
  usb: gadget: f_fs: Prevent race during ffs_ep0_queue_wait
  usb: misc: onboard_hub: Move 'attach' work to the driver
  usb: misc: onboard_hub: Invert driver registration order
  usb: ucsi: Ensure connector delayed work items are flushed
  usb: musb: fix error return code in omap2430_probe()
  usb: chipidea: core: fix possible constant 0 if use IS_ERR(ci->role_switch)
  xhci: Detect lpm incapable xHC USB3 roothub ports from ACPI tables
  ...
Diffstat (limited to 'drivers/usb/cdns3/cdns3-gadget.c')
| -rw-r--r-- | drivers/usb/cdns3/cdns3-gadget.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c index 5adcb349718c..ccfaebca6faa 100644 --- a/drivers/usb/cdns3/cdns3-gadget.c +++ b/drivers/usb/cdns3/cdns3-gadget.c @@ -2614,6 +2614,7 @@ int cdns3_gadget_ep_dequeue(struct usb_ep *ep,  	u8 req_on_hw_ring = 0;  	unsigned long flags;  	int ret = 0; +	int val;  	if (!ep || !request || !ep->desc)  		return -EINVAL; @@ -2649,6 +2650,13 @@ found:  	/* Update ring only if removed request is on pending_req_list list */  	if (req_on_hw_ring && link_trb) { +		/* Stop DMA */ +		writel(EP_CMD_DFLUSH, &priv_dev->regs->ep_cmd); + +		/* wait for DFLUSH cleared */ +		readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, +					  !(val & EP_CMD_DFLUSH), 1, 1000); +  		link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma +  			((priv_req->end_trb + 1) * TRB_SIZE)));  		link_trb->control = cpu_to_le32((le32_to_cpu(link_trb->control) & TRB_CYCLE) | @@ -2660,6 +2668,10 @@ found:  	cdns3_gadget_giveback(priv_ep, priv_req, -ECONNRESET); +	req = cdns3_next_request(&priv_ep->pending_req_list); +	if (req) +		cdns3_rearm_transfer(priv_ep, 1); +  not_found:  	spin_unlock_irqrestore(&priv_dev->lock, flags);  	return ret;  | 
