mirror_ubuntu-kernels/drivers/usb
Erkka Talvitie 64cc3f12d1 USB: EHCI: Do not return -EPIPE when hub is disconnected
When disconnecting a USB hub that has some child device(s) connected to it
(such as a USB mouse), then the stack tries to clear halt and
reset device(s) which are _already_ physically disconnected.

The issue has been reproduced with:

CPU: IMX6D5EYM10AD or MCIMX6D5EYM10AE.
SW: U-Boot 2019.07 and kernel 4.19.40.

CPU: HP Proliant Microserver Gen8.
SW: Linux version 4.2.3-300.fc23.x86_64

In this situation there will be error bit for MMF active yet the
CERR equals EHCI_TUNE_CERR + halt. Existing implementation
interprets this as a stall [1] (chapter 8.4.5).

The possible conditions when the MMF will be active + halt
can be found from [2] (Table 4-13).

Fix for the issue is to check whether MMF is active and PID Code is
IN before checking for the stall. If these conditions are true then
it is not a stall.

What happens after the fix is that when disconnecting a hub with
attached device(s) the situation is not interpret as a stall.

[1] [https://www.usb.org/document-library/usb-20-specification, usb_20.pdf]
[2] [https://www.intel.com/content/dam/www/public/us/en/documents/
     technical-specifications/ehci-specification-for-usb.pdf]

Signed-off-by: Erkka Talvitie <erkka.talvitie@vincit.fi>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/ef70941d5f349767f19c0ed26b0dd9eed8ad81bb.1576050523.git.erkka.talvitie@vincit.fi
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-17 16:02:49 +01:00
..
atm USB driver fixes for 5.5-rc2 2019-12-14 12:40:39 -08:00
c67x00 USB: add SPDX identifiers to all remaining Makefiles 2017-11-07 15:53:48 +01:00
cdns3 USB: changes for v5.5 2019-11-18 08:24:12 +01:00
chipidea usb: chipidea: imx: pinctrl for HSIC is optional 2019-11-18 17:40:27 +08:00
class compat_ioctl: remove most of fs/compat_ioctl.c 2019-12-01 13:46:15 -08:00
common usb: common: usb-conn-gpio: Don't log an error on probe deferral 2019-12-10 11:41:20 +01:00
core USB: Fix incorrect DMA allocations for local memory pool drivers 2019-12-11 09:06:41 +01:00
dwc2 USB: changes for v5.5 2019-11-18 08:24:12 +01:00
dwc3 usb: dwc3: pci: add ID for the Intel Comet Lake -H variant 2019-12-12 14:02:37 +01:00
early drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
gadget USB driver fixes for 5.5-rc2 2019-12-14 12:40:39 -08:00
host USB: EHCI: Do not return -EPIPE when hub is disconnected 2019-12-17 16:02:49 +01:00
image Merge 5.4-rc3 into usb-next 2019-10-14 07:09:59 +02:00
isp1760 usb: isp1760: isp1760-hcd.c: Drop condition with no effect 2019-10-07 13:01:47 +02:00
misc USB: adutux: fix interface sanity check 2019-12-10 13:11:22 +01:00
mon usb: mon: Fix a deadlock in usbmon between mmap and read 2019-12-10 11:41:20 +01:00
mtu3 Merge 5.4-rc6 into usb-next 2019-11-04 06:41:09 +01:00
musb usb: musb: create debugfs directory under usb root 2019-11-21 18:20:29 +01:00
phy usb: phy: mxs: use devm_platform_ioremap_resource() to simplify code 2019-10-22 10:29:10 +03:00
renesas_usbhs usb: renesas_usbhs: Use dma_request_chan() directly for channel request 2019-11-14 11:12:31 +08:00
roles usb: roles: fix a potential use after free 2019-12-10 11:41:18 +01:00
serial USB: serial: io_edgeport: fix epic endpoint lookup 2019-12-10 13:11:21 +01:00
storage USB: Fix incorrect DMA allocations for local memory pool drivers 2019-12-11 09:06:41 +01:00
typec usb: typec: fusb302: Fix an undefined reference to 'extcon_get_state' 2019-12-17 16:02:49 +01:00
usbip usbip: Fix uninitialized symbol 'nents' in stub_recv_cmd_submit() 2019-11-13 18:53:11 +08:00
Kconfig usb: common: create Kconfig file 2019-09-03 19:00:39 +02:00
Makefile USB: Changes for v5.4 merge window 2019-09-02 19:20:57 +02:00
usb-skeleton.c USB: usb-skeleton: drop redundant in-urb check 2019-10-10 12:41:19 +02:00