| From da7e0c3c2909a3d9bf8acfe1db3cb213bd7febfb Mon Sep 17 00:00:00 2001 |
| From: JC Kuo <jckuo@nvidia.com> |
| Date: Fri, 15 Jan 2021 18:19:07 +0200 |
| Subject: xhci: tegra: Delay for disabling LFPS detector |
| |
| From: JC Kuo <jckuo@nvidia.com> |
| |
| commit da7e0c3c2909a3d9bf8acfe1db3cb213bd7febfb upstream. |
| |
| Occasionally, we are seeing some SuperSpeed devices resumes right after |
| being directed to U3. This commits add 500us delay to ensure LFPS |
| detector is disabled before sending ACK to firmware. |
| |
| [ 16.099363] tegra-xusb 70090000.usb: entering ELPG |
| [ 16.104343] tegra-xusb 70090000.usb: 2-1 isn't suspended: 0x0c001203 |
| [ 16.114576] tegra-xusb 70090000.usb: not all ports suspended: -16 |
| [ 16.120789] tegra-xusb 70090000.usb: entering ELPG failed |
| |
| The register write passes through a few flop stages of 32KHz clock domain. |
| NVIDIA ASIC designer reviewed RTL and suggests 500us delay. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: JC Kuo <jckuo@nvidia.com> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Link: https://lore.kernel.org/r/20210115161907.2875631-3-mathias.nyman@linux.intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/xhci-tegra.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/drivers/usb/host/xhci-tegra.c |
| +++ b/drivers/usb/host/xhci-tegra.c |
| @@ -579,6 +579,13 @@ static void tegra_xusb_mbox_handle(struc |
| enable); |
| if (err < 0) |
| break; |
| + |
| + /* |
| + * wait 500us for LFPS detector to be disabled before |
| + * sending ACK |
| + */ |
| + if (!enable) |
| + usleep_range(500, 1000); |
| } |
| |
| if (err < 0) { |