Commit 7181aba1 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'usb-5.5-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
 "Here are some small USB fixes for some reported issues.

  Included in here are:

   - xhci build warning fix

   - ehci disconnect warning fix

   - usbip lockup fix and error cleanup fix

   - typec build fix

  All of these have been in linux-next with no reported issues"

* tag 'usb-5.5-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  usb: xhci: Fix build warning seen with CONFIG_PM=n
  usbip: Fix error path of vhci_recv_ret_submit()
  usbip: Fix receive error in vhci-hcd when using scatter-gather
  USB: EHCI: Do not return -EPIPE when hub is disconnected
  usb: typec: fusb302: Fix an undefined reference to 'extcon_get_state'
parents 7190a23a 6056a0f8
...@@ -27,6 +27,10 @@ ...@@ -27,6 +27,10 @@
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
/* PID Codes that are used here, from EHCI specification, Table 3-16. */
#define PID_CODE_IN 1
#define PID_CODE_SETUP 2
/* fill a qtd, returning how much of the buffer we were able to queue up */ /* fill a qtd, returning how much of the buffer we were able to queue up */
static int static int
...@@ -190,7 +194,7 @@ static int qtd_copy_status ( ...@@ -190,7 +194,7 @@ static int qtd_copy_status (
int status = -EINPROGRESS; int status = -EINPROGRESS;
/* count IN/OUT bytes, not SETUP (even short packets) */ /* count IN/OUT bytes, not SETUP (even short packets) */
if (likely (QTD_PID (token) != 2)) if (likely(QTD_PID(token) != PID_CODE_SETUP))
urb->actual_length += length - QTD_LENGTH (token); urb->actual_length += length - QTD_LENGTH (token);
/* don't modify error codes */ /* don't modify error codes */
...@@ -206,6 +210,13 @@ static int qtd_copy_status ( ...@@ -206,6 +210,13 @@ static int qtd_copy_status (
if (token & QTD_STS_BABBLE) { if (token & QTD_STS_BABBLE) {
/* FIXME "must" disable babbling device's port too */ /* FIXME "must" disable babbling device's port too */
status = -EOVERFLOW; status = -EOVERFLOW;
/*
* When MMF is active and PID Code is IN, queue is halted.
* EHCI Specification, Table 4-13.
*/
} else if ((token & QTD_STS_MMF) &&
(QTD_PID(token) == PID_CODE_IN)) {
status = -EPROTO;
/* CERR nonzero + halt --> stall */ /* CERR nonzero + halt --> stall */
} else if (QTD_CERR(token)) { } else if (QTD_CERR(token)) {
status = -EPIPE; status = -EPIPE;
......
...@@ -519,7 +519,6 @@ static int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated) ...@@ -519,7 +519,6 @@ static int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
retval = xhci_resume(xhci, hibernated); retval = xhci_resume(xhci, hibernated);
return retval; return retval;
} }
#endif /* CONFIG_PM */
static void xhci_pci_shutdown(struct usb_hcd *hcd) static void xhci_pci_shutdown(struct usb_hcd *hcd)
{ {
...@@ -532,6 +531,7 @@ static void xhci_pci_shutdown(struct usb_hcd *hcd) ...@@ -532,6 +531,7 @@ static void xhci_pci_shutdown(struct usb_hcd *hcd)
if (xhci->quirks & XHCI_SPURIOUS_WAKEUP) if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
pci_set_power_state(pdev, PCI_D3hot); pci_set_power_state(pdev, PCI_D3hot);
} }
#endif /* CONFIG_PM */
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
......
...@@ -32,6 +32,7 @@ endif # TYPEC_TCPCI ...@@ -32,6 +32,7 @@ endif # TYPEC_TCPCI
config TYPEC_FUSB302 config TYPEC_FUSB302
tristate "Fairchild FUSB302 Type-C chip driver" tristate "Fairchild FUSB302 Type-C chip driver"
depends on I2C depends on I2C
depends on EXTCON || !EXTCON
help help
The Fairchild FUSB302 Type-C chip driver that works with The Fairchild FUSB302 Type-C chip driver that works with
Type-C Port Controller Manager to provide USB PD and USB Type-C Port Controller Manager to provide USB PD and USB
......
...@@ -727,6 +727,9 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb) ...@@ -727,6 +727,9 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb)
copy -= recv; copy -= recv;
ret += recv; ret += recv;
if (!copy)
break;
} }
if (ret != size) if (ret != size)
......
...@@ -77,16 +77,21 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev, ...@@ -77,16 +77,21 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,
usbip_pack_pdu(pdu, urb, USBIP_RET_SUBMIT, 0); usbip_pack_pdu(pdu, urb, USBIP_RET_SUBMIT, 0);
/* recv transfer buffer */ /* recv transfer buffer */
if (usbip_recv_xbuff(ud, urb) < 0) if (usbip_recv_xbuff(ud, urb) < 0) {
return; urb->status = -EPROTO;
goto error;
}
/* recv iso_packet_descriptor */ /* recv iso_packet_descriptor */
if (usbip_recv_iso(ud, urb) < 0) if (usbip_recv_iso(ud, urb) < 0) {
return; urb->status = -EPROTO;
goto error;
}
/* restore the padding in iso packets */ /* restore the padding in iso packets */
usbip_pad_iso(ud, urb); usbip_pad_iso(ud, urb);
error:
if (usbip_dbg_flag_vhci_rx) if (usbip_dbg_flag_vhci_rx)
usbip_dump_urb(urb); usbip_dump_urb(urb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment