| From 6f978a30c9bb12dab1302d0f06951ee290f5e600 Mon Sep 17 00:00:00 2001 |
| From: Chunfeng Yun <chunfeng.yun@mediatek.com> |
| Date: Tue, 23 Mar 2021 15:02:46 +0800 |
| Subject: usb: xhci-mtk: fix broken streams issue on 0.96 xHCI |
| |
| From: Chunfeng Yun <chunfeng.yun@mediatek.com> |
| |
| commit 6f978a30c9bb12dab1302d0f06951ee290f5e600 upstream. |
| |
| The MediaTek 0.96 xHCI controller on some platforms does not |
| support bulk stream even HCCPARAMS says supporting, due to MaxPSASize |
| is set a default value 1 by mistake, here use XHCI_BROKEN_STREAMS |
| quirk to fix it. |
| |
| Fixes: 94a631d91ad3 ("usb: xhci-mtk: check hcc_params after adding primary hcd") |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> |
| Link: https://lore.kernel.org/r/1616482975-17841-4-git-send-email-chunfeng.yun@mediatek.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/host/xhci-mtk.c | 10 +++++++++- |
| 1 file changed, 9 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/host/xhci-mtk.c |
| +++ b/drivers/usb/host/xhci-mtk.c |
| @@ -395,6 +395,13 @@ static void xhci_mtk_quirks(struct devic |
| xhci->quirks |= XHCI_SPURIOUS_SUCCESS; |
| if (mtk->lpm_support) |
| xhci->quirks |= XHCI_LPM_SUPPORT; |
| + |
| + /* |
| + * MTK xHCI 0.96: PSA is 1 by default even if doesn't support stream, |
| + * and it's 3 when support it. |
| + */ |
| + if (xhci->hci_version < 0x100 && HCC_MAX_PSA(xhci->hcc_params) == 4) |
| + xhci->quirks |= XHCI_BROKEN_STREAMS; |
| } |
| |
| /* called during probe() after chip reset completes */ |
| @@ -551,7 +558,8 @@ static int xhci_mtk_probe(struct platfor |
| if (ret) |
| goto put_usb3_hcd; |
| |
| - if (HCC_MAX_PSA(xhci->hcc_params) >= 4) |
| + if (HCC_MAX_PSA(xhci->hcc_params) >= 4 && |
| + !(xhci->quirks & XHCI_BROKEN_STREAMS)) |
| xhci->shared_hcd->can_do_streams = 1; |
| |
| ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); |