Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5130853rdb; Tue, 12 Dec 2023 22:36:19 -0800 (PST) X-Google-Smtp-Source: AGHT+IFVHfVcXVaEOQ2MZEYe4yJnjUG1CZ7moTRij4x3KMSesnxbSXBWcL0KI+oiumne42Bfh+O9 X-Received: by 2002:a17:902:650e:b0:1d0:6ffe:a26 with SMTP id b14-20020a170902650e00b001d06ffe0a26mr7787759plk.132.1702449378840; Tue, 12 Dec 2023 22:36:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702449378; cv=none; d=google.com; s=arc-20160816; b=urNCFwHDepNWomSwAHhnTQCLaXhj3SAOoSd9YFGoQEi/42PdzGe6UrQGkBnczV0Tse djxpXzi+PTkMnaKA2VpvSvO9oaEhbjxiTuazGUp8oR0ECaJn8CYFNeLYpfioS7XgR/tp c3zQc/DUe0P+Hkmb0Q3Fo0gVWQ3GdnQsofnfSpcHlWgVBfWiUYIaC5PJGX1rVot3P1v5 bpoLU7EfRTj5tVce56yzd3eymWsB+GriKrjvRFG8ehxly2IbrMBjwz3Q5YC8bMPW+8yo IQuDLm3OJnpMczScfPKpyRTfnmloz2cSU4dtozsDWtTws6soyYCM81+bXyNZHCLm4c1+ j2ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=pH+KmYBBMxX8TYTKLHrDBrlZ4+6mHA01DkZGc0as06w=; fh=zJ58vR6WIuqzBSB/MoKt+zcJ7gAdABFIvdu+b7de8Ho=; b=jPB37TDbqgEJVUtrgZVnQhg9Cs8OuQU/ka8ZmgzQzKEjxno/1PRVHmD/vjhUGjvq4f yv8ATNlpTGkw/fvsdQdahI27cDd9NSciWqeBei1cnB1zj+JX8lloyLqbOI1Y120tZNHd iGfMyak7XoZfaF2GdkxrB937s175xk8MCucp1rbOg3W/a3A67BJFDgLqW2eQ6s4YLI7c 8f5YTM7sPLYjx6DmxRk0339HT8t5xnnjRcliFC6nVF6k/dZgjFP5uqMCmFkWVBSUDfzt 8AaSutipAK0jS+EDotT5/fGwlBlfNyxIcpcfKmDsQPRllmhydDpwsLJ3lTY84y5c4bgN 07aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=JfgP7AU8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id u12-20020a17090341cc00b001d09e26a715si8975060ple.89.2023.12.12.22.36.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 22:36:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=JfgP7AU8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 3BB3C80784EE; Tue, 12 Dec 2023 22:36:16 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378621AbjLMGf5 (ORCPT + 99 others); Wed, 13 Dec 2023 01:35:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378609AbjLMGfy (ORCPT ); Wed, 13 Dec 2023 01:35:54 -0500 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 56744CF; Tue, 12 Dec 2023 22:35:55 -0800 (PST) X-UUID: d9af0070998111eeba30773df0976c77-20231213 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=pH+KmYBBMxX8TYTKLHrDBrlZ4+6mHA01DkZGc0as06w=; b=JfgP7AU8Ouav2FDp6WZjPkja7t2rFQc/m+ew4CjGdBOJb4qHRHlF2fzVTErl+wERVvjsna2ZTxokFTNAhgvPzizJghRJyaycwreh9ljT03p8K9OWO4ykmRDkL13UJ2GAsZzQHx/yEM33iymx1MtlR+UEfPOX+j5yn91ysMGelBA=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.35,REQID:c5eb17d4-acb7-4b96-a1ce-9e1a323d8269,IP:0,U RL:0,TC:0,Content:-25,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTIO N:release,TS:-25 X-CID-META: VersionHash:5d391d7,CLOUDID:efe99cfd-4a48-46e2-b946-12f04f20af8c,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR: NO,DKR:0,DKP:0,BRR:0,BRE:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULN X-UUID: d9af0070998111eeba30773df0976c77-20231213 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 122479028; Wed, 13 Dec 2023 14:35:47 +0800 Received: from mtkmbs11n1.mediatek.inc (172.21.101.185) by mtkmbs13n2.mediatek.inc (172.21.101.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Wed, 13 Dec 2023 14:35:46 +0800 Received: from mhfsdcap04.gcn.mediatek.inc (10.17.3.154) by mtkmbs11n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Wed, 13 Dec 2023 14:35:45 +0800 From: Chunfeng Yun To: Greg Kroah-Hartman , Rob Herring CC: Chunfeng Yun , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Mathias Nyman , , , , , , Macpaul Lin , Eddie Hung Subject: [PATCH 2/3] usb: xhci-mtk: fix a short packet issue of gen1 isoc-in transfer Date: Wed, 13 Dec 2023 14:35:42 +0800 Message-ID: <20231213063543.12435-2-chunfeng.yun@mediatek.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231213063543.12435-1-chunfeng.yun@mediatek.com> References: <20231213063543.12435-1-chunfeng.yun@mediatek.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-MTK: N X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 22:36:16 -0800 (PST) For Gen1 isoc-in transfer, host still send out unexpected ACK after device finish the burst with a short packet, this will cause an exception on the connected device, such as, a usb 4k camera. It can be fixed by setting rxfifo depth less than 3, prefer to use 2 here, the side-effect is that may cause performance drop about 10%, including bulk transfer. Fixes: 926d60ae64a6 ("usb: xhci-mtk: modify the SOF/ITP interval for mt8195") Signed-off-by: Chunfeng Yun --- drivers/usb/host/xhci-mtk.c | 35 +++++++++++++++++++++++++++++++++-- drivers/usb/host/xhci-mtk.h | 1 + 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c index bbdf1b0b7be1..a54535877e90 100644 --- a/drivers/usb/host/xhci-mtk.c +++ b/drivers/usb/host/xhci-mtk.c @@ -73,6 +73,9 @@ #define FRMCNT_LEV1_RANG (0x12b << 8) #define FRMCNT_LEV1_RANG_MASK GENMASK(19, 8) +#define HSCH_CFG1 0x960 +#define SCH3_RXFIFO_DEPTH_MASK GENMASK(21, 20) + #define SS_GEN2_EOF_CFG 0x990 #define SSG2EOF_OFFSET 0x3c @@ -165,6 +168,33 @@ static void xhci_mtk_set_frame_interval(struct xhci_hcd_mtk *mtk) writel(value, hcd->regs + SS_GEN2_EOF_CFG); } +/* + * workaround: usb3.2 gen1 isoc rx hw issue + * host send out unexpected ACK afer device fininsh a burst transfer with + * a short packet. + */ +static void xhci_mtk_rxfifo_depth_set(struct xhci_hcd_mtk *mtk) +{ + struct usb_hcd *hcd = mtk->hcd; + u32 value; + + if (mtk->rxfifo_depth_quirk) { + value = readl(hcd->regs + HSCH_CFG1); + value &= ~SCH3_RXFIFO_DEPTH_MASK; + value |= FIELD_PREP(SCH3_RXFIFO_DEPTH_MASK, 2); + writel(value, hcd->regs + HSCH_CFG1); + } +} + +static void xhci_mtk_init_quirk(struct xhci_hcd_mtk *mtk) +{ + /* workaround only for mt8195 */ + xhci_mtk_set_frame_interval(mtk); + + /* workaround for SoCs using SSUSB about before IPM v1.6.0 */ + xhci_mtk_rxfifo_depth_set(mtk); +} + static int xhci_mtk_host_enable(struct xhci_hcd_mtk *mtk) { struct mu3c_ippc_regs __iomem *ippc = mtk->ippc_regs; @@ -448,8 +478,7 @@ static int xhci_mtk_setup(struct usb_hcd *hcd) if (ret) return ret; - /* workaround only for mt8195 */ - xhci_mtk_set_frame_interval(mtk); + xhci_mtk_init_quirk(mtk); } ret = xhci_gen_setup(hcd, xhci_mtk_quirks); @@ -527,6 +556,8 @@ static int xhci_mtk_probe(struct platform_device *pdev) of_property_read_u32(node, "mediatek,u2p-dis-msk", &mtk->u2p_dis_msk); + mtk->rxfifo_depth_quirk = of_property_read_bool(node, "mediatek,rxfifo-depth"); + ret = usb_wakeup_of_property_parse(mtk, node); if (ret) { dev_err(dev, "failed to parse uwk property\n"); diff --git a/drivers/usb/host/xhci-mtk.h b/drivers/usb/host/xhci-mtk.h index 39f7ae7d3087..2443075530e3 100644 --- a/drivers/usb/host/xhci-mtk.h +++ b/drivers/usb/host/xhci-mtk.h @@ -166,6 +166,7 @@ struct xhci_hcd_mtk { unsigned int has_ippc:1; unsigned int lpm_support:1; unsigned int u2_lpm_disable:1; + unsigned int rxfifo_depth_quirk:1; /* usb remote wakeup */ unsigned int uwk_en:1; struct regmap *uwk; -- 2.25.1