usb: host: ehci-platform: add a quirk to avoid stuck
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Mon, 27 Jan 2020 08:37:42 +0000 (17:37 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Jun 2020 15:50:44 +0000 (17:50 +0200)
commit21a45a1427dd16c7a07da2d53df190688f9f716c
tree28d6e434f20f70d3d7f20f0c984bcc74ab463ea0
parent57a1cd87efb9279ab58aae2e5c41920150e31873
usb: host: ehci-platform: add a quirk to avoid stuck

[ Upstream commit cc7eac1e4afdd151085be4d0341a155760388653 ]

Since EHCI/OHCI controllers on R-Car Gen3 SoCs are possible to
be getting stuck very rarely after a full/low usb device was
disconnected. To detect/recover from such a situation, the controllers
require a special way which poll the EHCI PORTSC register and changes
the OHCI functional state.

So, this patch adds a polling timer into the ehci-platform driver,
and if the ehci driver detects the issue by the EHCI PORTSC register,
the ehci driver removes a companion device (= the OHCI controller)
to change the OHCI functional state to USB Reset once. And then,
the ehci driver adds the companion device again.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/1580114262-25029-1-git-send-email-yoshihiro.shimoda.uh@renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/host/ehci-platform.c
include/linux/usb/ehci_def.h