From patchwork Sun Dec 24 15:38:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 183068 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp8510dyb; Sun, 24 Dec 2023 07:39:19 -0800 (PST) X-Google-Smtp-Source: AGHT+IGIBzOACbtLCIrhtr9MfJneoIMqEbYvTkyCQTNnhW2M0i0cFtUKhz384bnrQVjZP7/ijs2+ X-Received: by 2002:ac8:5782:0:b0:425:85b7:a784 with SMTP id v2-20020ac85782000000b0042585b7a784mr7415738qta.53.1703432359439; Sun, 24 Dec 2023 07:39:19 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1703432359; cv=pass; d=google.com; s=arc-20160816; b=pg3CGOBWh1aIUVUTGF6GkCUaFcwA0aUufH3ibEMh4L8/pITG7WNTfqkwLfMONm4Uqo Qjs5OJJkxhHMWr69f+MlVX0oboKpXbDhS2X6meADVN+3urwiU95JJW/fqrb9lbq3nO+k iWiXooueo7Qutug0et/SmHE1WOSSCDY5eAc1Pa+yuQjRdRGTJGXLzJyVNj9YccTDluyG WND70IbErILWhd3JwnsspbkJ7K2Hro3W/W7Z71ZQTRWrsgq/RRU7PsXMH4ZdqjINXDCy yESts4OYYcfGbpv727XtShvdKKzACg3vhliKZy/HTDYlZyTHUJtv7JLXtKCCQmxRvAeU /PQg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :content-transfer-encoding:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=I5XvdZuJjs6eWiKoyhTfHugb0F0xahU1WBlLSCZVgyA=; fh=K3H65qk/rvbT+8X03yi288eW/JaOO1Vv11n/dIWnYFs=; b=ksKTASmnUMU7Hdw6+zA9nhKF+jyBh/yJrEQjZsiSte3pvJbK7u2dyYQNmuPhJUVzrV ASTvPoaHWyeWcoZYfF9kC62gGgVW87Y2RMAGLVLKMZ5JzboRDZdMf+oInXX9YaQL4IrC biTbl9uInu/k6Ufv3ayLC3aCSNW8ySHtKlfRk2eU5k/s7VOnLXWQqZt3vsG0fFzJvlIb 5fHMyWFB5o4wB19Sx3Mnmbvbfoo8DstaNBhqP84nnjYpBhyWjatf15IestVInwPPF0jE 4bXhOGWn/zwcFPogDdhXJHnLnYqZC2jyrek5DYFxLYMvKP7ogA6j6OJBARvD0ADBkgBL 1qgg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="LdgLnE/J"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10734-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10734-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id z8-20020ac87f88000000b0042788bda188si8898029qtj.435.2023.12.24.07.39.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Dec 2023 07:39:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-10734-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="LdgLnE/J"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10734-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10734-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 151101C20EBB for ; Sun, 24 Dec 2023 15:39:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 23D39748A; Sun, 24 Dec 2023 15:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="LdgLnE/J" X-Original-To: linux-kernel@vger.kernel.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2084.outbound.protection.outlook.com [40.107.20.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73CB263D0; Sun, 24 Dec 2023 15:38:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eMiSLqDUnr356SxDGYHZpYbp4w/aXPD0BZayEgDWZAK+Lgox1fGqYdILhNTWW1uieonthtq607UPBGF0VuGZzKVUzZUZGs4yUOmre1mQq5KI8qgCd9hMWEUodBsHImtQCd43+wuCIs/TKbDGv69Kii9dXF2AUG8my/Uo8+yjOTLZjVBQn/1ZxU3bgEnA6IAJrO0LCcY+HEKWwlJPHV3RXQQL3z1llCiUV8g1raE4OEA7idNxhuU2lgZwbYSes4OJ1ToS1QegJwTNLEV2eKXj7tA1aCIha6uvcZGW3T4I8ZxPhpnnG5W3T1rJJFYjuPBj1uzUwI2Bbn/bW3FR3FaMYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=I5XvdZuJjs6eWiKoyhTfHugb0F0xahU1WBlLSCZVgyA=; b=RPxtIbBNkZOctGzYQfr1tjXdvhL5RTHtowBYmNVBLG93IPb2a0x3egJnzFb0sgYIdXGWMKQ/61MpfW/OPp4Wt/7HdcPdl9lGL6TrtdLSHmgs62hePQMuKzrfaGNu05H7PPnbvxl7n7t3vV6M+JStKld90gCgIrfL9DVwQJE3Hz7RlhzlBAgAc6Hi7o0mMVaAoThDqGom2W77nWahKsyiVH+nEoq79/MZZ73RxKZT+oLS8YQwTRXlB9TJ3bCwxJPRyE1zUjpG7yMLyzp2u9ZxMxZBa4mlpNLZZQ70Vpiz12H6iDG71gQa87C8jxwu58IOOYw4ZSR3deZ0A7MaI1O/aQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=I5XvdZuJjs6eWiKoyhTfHugb0F0xahU1WBlLSCZVgyA=; b=LdgLnE/JCG36Dv10V7cywmgnTSmBDrmfNA+d4jHxr4IMDL2luBX8yIrWSlByxHoAz8lQ7mKuOk6KkK8C+VrIbWzi6tbPzW01SO0lxDfHjm4/4Xvb32eL6sqs8vfVa7GsC1tbOQO4/m6CsFHMuPByOOr4PzeP+j9c5Ph1b/dEJ4s= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DBAPR04MB7285.eurprd04.prod.outlook.com (2603:10a6:10:1ac::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.24; Sun, 24 Dec 2023 15:38:37 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40%7]) with mapi id 15.20.7113.026; Sun, 24 Dec 2023 15:38:37 +0000 From: Frank Li To: cugyly@163.com Cc: Frank.Li@nxp.com, a-govindraju@ti.com, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, pawell@cadence.com, peter.chen@kernel.org, rogerq@kernel.org Subject: [PATCH v2 1/4] usb: cdns3: fix uvc failure work since sg support enabled Date: Sun, 24 Dec 2023 10:38:13 -0500 Message-Id: <20231224153816.1664687-2-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231224153816.1664687-1-Frank.Li@nxp.com> References: <20231224153816.1664687-1-Frank.Li@nxp.com> X-ClientProxiedBy: BYAPR11CA0058.namprd11.prod.outlook.com (2603:10b6:a03:80::35) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DBAPR04MB7285:EE_ X-MS-Office365-Filtering-Correlation-Id: 204a6b3a-c507-4b00-d545-08dc04966540 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NvkX2JeeyEHiMy3w/YhPX7tYR5j+1OB4I88QhaL+BrZ+G6qzOscaFRsxcUz0JKVdBKL7QVzi9kgl2rt9i9VTIM9PcU1HORuNc57Hmo1loNNYqYO1sqsqi5An9royOKuXf3PIqVWaksZhUuiC0IYf/d8Iy46cm2MndTZbLhva3VCyVLew3iHDFM6Jyccwf2XlTbEDjkR8x9nnCEEH9cO1HqCFmfgAurkA0IOyQVVCiDBbkVzCaqEOsSvKSOSXw0zPfGk6yY1UV1GEms/TPZfjLtWYcIdKbevPvE/Ehe6OQ9mg3mbtaFv757UwZw/CHmVLun5GMlghbmyzYdr3Quwsu4kqVIVgdmoM8hs9tBhGpez9XTgvXkmigSPNjr8ypCK9vgoEmid6hrdktnS/8jD58OWAgI/VdWA5VuLU/EeOR10TRk1ALQg30JFV96J0JllVq4YRWo9YN+4Ykz2x7Zmf81xR3UbOsJnENFd5N57MSWSE7n9qbSqZDPi7iow+ZPsCmqEZpCIb8BzwmIMBJuGCV5OM677fRk7r71tNLfTShgX9ZtelEp6MVXAk/Ir1MjpMaDlodkBNaTcaCx8cvwICD5S2+DmSggGXwAYFYvMB7E8nsBtUnQ+Gr+m0L5dQzUVKubBH2WiS7IS8/aolCiW6TQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(396003)(136003)(376002)(366004)(39850400004)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(66556008)(66476007)(66946007)(38100700002)(6916009)(316002)(2616005)(1076003)(26005)(4326008)(8936002)(8676002)(478600001)(6486002)(83380400001)(41300700001)(52116002)(2906002)(6506007)(6666004)(6512007)(36756003)(86362001)(38350700005)(5660300002)(1491003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6ibtM0XLtYsrG7jglzlavxTlrdlKmZC5aDUKWyaOW5/LOuMQ0kA1rumKq9W4WVH6ofTUE+FctIOh5QiTpSLJSVeLaiTmEfYBoXcC2LKhUisiONEBmbwNMF8+Wg3e8sx8GdXgWRSb642vlrkbLFTOHuj8nbUAiW0W8AgJ+df5uNLDIjRktNPuYbVHA1V5/luhFS8o9piWogwpizkbevRZvpQsb0hkniUIvBbZomVr5dfOk6lrOAUw96X3SYowzMaNPzDzBiMN7z6l2P+TSFd/gnowJuS7NLLhJf3zzh0EGPTDYijjPHERtYRgNLD4zgpaXV1VX7n1PDr/3QkF9DqMB6Hv5c5nRybW9yyV/F4pSblgZKRaPWWRaEo3RSIYK4lz55m71YxjHszAR2nyF7c2gKjaSwN9DnzRs3wX1BnNGIAJ2J612k9gceaCef6KPJdQdMsmV5SUw7Q9AErx6ArwfJJ3sFxByF2xzTJOuaqG0bf+Iil5NbLRurJ4V6Wwc9e8ipxVuL/5XBMvobkwszn0E6415a5khwBh5vrUibegT/Axzoc6917hvqgIAKgQrX61CEzQdmQQHcuNoIUZ6kqI6f10Fi5kqgqX2SS1pHjmAZu3CF+9YNcJs3w+9qbexVMIDnk1d23b9KOLx5s2JhrW7hIOV9xtB/l1EEL2bkQ5P/C1yCdtDqb+bYj0aXAoT68Ojm0g8KTctFuZbfHPIbiFFPVmwz1pDHuF3mC3ufW+Th+CnpoM+nPg7DXPlX300wJ6PfwWm0Lds/qjT0/wQeRZOoWnwnXlQpaDuS/3NSSvGOmxkAyzhKWqjpCCRVEYZbvvHKxnzSkgNGvxGUdS+5K9fGh9p1u6GiEbBeYAn54s6CoIO8tHOZyjkvItqTCnSIGgcWIK8E7gyqnwREJqnT6NhNdjLgK7BSe74z+SIp6bMA/tRlBjqAdjcM6pREWXEPJvFQ4dWCPEVCsZCuYKI+V2mKSAjXOqPdkbaymuRI07RDKlhARgmfSOhq36aWhgJKJE3c0j7T7Dk1KmccB3pPnkczIXOGcj5QWl/zNYODNgCggpBxUz6mRq5tGCl9SgjXlfKJZh74EGTI94FHO/+Ve2LjcoP7486Sw1o55jsdzu1GxoLGRffm8F72ispGRgBm9W42tG8XsDvUNJs4gSjy1KqrV5c+go0wNOFm6b36sW145MYAL6dZbrwsdVOyCjbQKCgRaUiS/LmiL5j6gaD/An/VGbEHOWdErds4NibfQ5lKwy67Pp4ggfjk+pg1512aPD7QxudoQGRGgCCxfygueftB13xO5fVG3wlbwE+qh3TJIApCKsAyvV7b+oF6tjfF+ohJYm5d+M1WNm4+29wwwY18h/8lT0pqgt9SymulomzpHtGN76/bqMANer70md5wH3awjTihfzHVwZhYTRX/erhxjcr9iHdkEMY9hcXGZzSC48vRSi/0hKU5qvONLxiuPpiuuPCMghB9WTyMlMvLTIvXINFSAff8t9Zc/LNrRTQlPrl4YWJ5Q7Jp24z3G7/0eGIHy2VtppIknkPfLAKu7oAO2mKQ905QNee93L0EkYgrI= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 204a6b3a-c507-4b00-d545-08dc04966540 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2023 15:38:37.1625 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ZgVo7AgWWBmS6XzeBPOhULL35mFWVDF3QykZMEslXrWWBafziPExquFhm6Ru0yvFfMO4eMh/+V1yIp40JsEVAw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7285 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1786178289967515709 X-GMAIL-MSGID: 1786178289967515709 When IP version >= DEV_VER_V2, gadget:sg_supported is true. So uvc gadget function driver will use sg to equeue data, first is 8bytes header, the second is 1016bytes data. cdns3_prepare_trb: ep2in: trb 0000000000ac755f, dma buf: 0xbf455000, size: 8, burst: 128 ctrl: 0x00000415 (C=1, T=0, ISP, CHAIN, Normal) cdns3_prepare_trb: ep2in: trb 00000000a574e693, dma buf: 0xc0200fe0, size: 1016, burst: 128 ctrl: 0x00000405 (C=1, T=0, ISP, Normal) But cdns3_ep_run_transfer() can't correctly handle this case, which only support one TRB for ISO transfer. The controller requires duplicate the TD for each SOF if priv_ep->interval is not 1. DMA will read data from DDR to internal FIFO when get SOF. Send data to bus when receive IN token. DMA always refill FIFO when get SOF regardless host send IN token or not. If host send IN token later, some frames data will be lost. Fixed it by below major steps: 1. Calculate numembers of TRB base on sg_nums and priv_ep->interval. 2. Remove CHAIN flags for each end TRB of TD when duplicate TD. 3. The controller requires LINK TRB must be first TRB of TD. When check there are not enough TRBs lefts, just fill LINK TRB for left TRBs. .... CHAIN_TRB DATA_TRB, CHAIN_TRB DATA_TRB, LINK_TRB ... LINK_TRB ^End of TRB List Cc: stable@vger.kernel.org Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver") Signed-off-by: Frank Li --- drivers/usb/cdns3/cdns3-gadget.c | 51 +++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c index 15463b7cddd23..22a31ffa69423 100644 --- a/drivers/usb/cdns3/cdns3-gadget.c +++ b/drivers/usb/cdns3/cdns3-gadget.c @@ -1119,6 +1119,7 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, dma_addr_t trb_dma; u32 togle_pcs = 1; int sg_iter = 0; + int num_trb_req; int num_trb; int address; u32 control; @@ -1128,15 +1129,13 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, bool sg_supported = !!(request->num_mapped_sgs); u32 ioc = request->no_interrupt ? 0 : TRB_IOC; + num_trb_req = sg_supported ? request->num_mapped_sgs : 1; + + /* ISO transfer require each SOF have a TD, each TD include some TRBs */ if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) - num_trb = priv_ep->interval; + num_trb = priv_ep->interval * num_trb_req; else - num_trb = sg_supported ? request->num_mapped_sgs : 1; - - if (num_trb > priv_ep->free_trbs) { - priv_ep->flags |= EP_RING_FULL; - return -ENOBUFS; - } + num_trb = num_trb_req; priv_req = to_cdns3_request(request); address = priv_ep->endpoint.desc->bEndpointAddress; @@ -1185,14 +1184,31 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, link_trb->control = cpu_to_le32(((priv_ep->pcs) ? TRB_CYCLE : 0) | TRB_TYPE(TRB_LINK) | TRB_TOGGLE | ch_bit); + + if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) { + /* + * ISO require LINK TRB must be first one of TD. + * Fill LINK TRBs for left trb space to simply software process logic. + */ + while (priv_ep->enqueue) { + *trb = *link_trb; + trace_cdns3_prepare_trb(priv_ep, trb); + + cdns3_ep_inc_enq(priv_ep); + trb = priv_ep->trb_pool + priv_ep->enqueue; + priv_req->trb = trb; + } + } + } + + if (num_trb > priv_ep->free_trbs) { + priv_ep->flags |= EP_RING_FULL; + return -ENOBUFS; } if (priv_dev->dev_ver <= DEV_VER_V2) togle_pcs = cdns3_wa1_update_guard(priv_ep, trb); - if (sg_supported) - s = request->sg; - /* set incorrect Cycle Bit for first trb*/ control = priv_ep->pcs ? 0 : TRB_CYCLE; trb->length = 0; @@ -1210,6 +1226,9 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, do { u32 length; + if (!(sg_iter % num_trb_req) && sg_supported) + s = request->sg; + /* fill TRB */ control |= TRB_TYPE(TRB_NORMAL); if (sg_supported) { @@ -1251,7 +1270,7 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, if (sg_supported) { trb->control |= cpu_to_le32(TRB_ISP); /* Don't set chain bit for last TRB */ - if (sg_iter < num_trb - 1) + if ((sg_iter % num_trb_req) < num_trb_req - 1) trb->control |= cpu_to_le32(TRB_CHAIN); s = sg_next(s); @@ -1509,6 +1528,12 @@ static void cdns3_transfer_completed(struct cdns3_device *priv_dev, /* The TRB was changed as link TRB, and the request was handled at ep_dequeue */ while (TRB_FIELD_TO_TYPE(le32_to_cpu(trb->control)) == TRB_LINK) { + + /* ISO ep_traddr may stop at LINK TRB */ + if (priv_ep->dequeue == cdns3_get_dma_pos(priv_dev, priv_ep) && + priv_ep->type == USB_ENDPOINT_XFER_ISOC) + break; + trace_cdns3_complete_trb(priv_ep, trb); cdns3_ep_inc_deq(priv_ep); trb = priv_ep->trb_pool + priv_ep->dequeue; @@ -1541,6 +1566,10 @@ static void cdns3_transfer_completed(struct cdns3_device *priv_dev, } if (request_handled) { + /* TRBs are duplicated by priv_ep->interval time for ISO IN */ + if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && priv_ep->dir) + request->actual /= priv_ep->interval; + cdns3_gadget_giveback(priv_ep, priv_req, 0); request_handled = false; transfer_end = false; From patchwork Sun Dec 24 15:38:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 183069 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp8914dyb; Sun, 24 Dec 2023 07:40:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IFf2rZmmv0/4kp1g0J84UM8eLzyO6mpuq/UTfrf9fEb+TMXBdqvNZ5Nw4ojeJM6X0VA9Z6k X-Received: by 2002:a05:6a00:124e:b0:6d9:844a:b69c with SMTP id u14-20020a056a00124e00b006d9844ab69cmr5771861pfi.10.1703432437274; Sun, 24 Dec 2023 07:40:37 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1703432437; cv=pass; d=google.com; s=arc-20160816; b=yUR8JtVofYtHqWH8Y7lpTlTlGj5RuRwtxNnMFxDMHga/TGw1sCSaFTr9pIayOAw5b4 gkpRrw6RPiZbtRM50qvoXKphUey4IbQGLeqFHm3JujrzvOCPk+43+qo/uq4/w9KD2lre N6xK+ODp9N5I8VPSb6H1rcfyRAQRD1ZWSFEZ8oVhiUIhIRfI/YyiQRh+gq05pavP2RkI y4MsMPvKVBCNSifTAAxO8t99Em1Ub/S+vU3B6S1omYAuXDfcWbiQCp3pwjj79lndXeWR 5dGvdPJu3N/4D1B8YvEs1SSntmCorCzsmeFAP/o0Fgfqkb1qE3D4IcPCcZiK5Bpu7o0p HKwA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :content-transfer-encoding:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=WQIXbgiy/6tTNdJJgqqx1tpTwJQce304/cfwQ36fGEA=; fh=K3H65qk/rvbT+8X03yi288eW/JaOO1Vv11n/dIWnYFs=; b=0FL3N8gZBC64ZxxMVp6xrSVpIgj3cFtq87ugdNkemr4Ct6OlOGOMA1kS8riloUbKV8 SKKJtQpvNmnS8LGjeHd3Q1Dj3W1dkPbTtoqGa9uiRIFd6FpfrZUev0US0COuEtbf5FGS p40caPhH3QvxEDlOaEdwifl+gycEHuARnbS8s/LFdbNp9Yr7EvTN4Kq9r0A+CiD5qTsQ 3Ux8xmiB6VL/4Y2oV6gxmRMCKXIh0JdNxZ2ZtHwiSR9Ffd15O+OxUua3A5+O7zq7dRZX vFaq7AypCqgavAr6HloXHtP8rdUwQGeHf+nPkllLNBjBgqYJSd2FLt0IIKIkYK8DXsmA VuMg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=abfHNBab; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10735-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10735-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id c11-20020a6566cb000000b00578d3f8d4d4si2406636pgw.448.2023.12.24.07.40.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Dec 2023 07:40:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-10735-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=abfHNBab; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10735-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10735-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 37F65B21709 for ; Sun, 24 Dec 2023 15:39:43 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7AF61DF57; Sun, 24 Dec 2023 15:38:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="abfHNBab" X-Original-To: linux-kernel@vger.kernel.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2084.outbound.protection.outlook.com [40.107.20.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCC4CCA69; Sun, 24 Dec 2023 15:38:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dM/NpGY9RScxv+geHcnKzQG1dBNByoXG/wxicfCzCiDCghZ8E/7t8eFKfluG0kQAKwvdHnUXaRikUXfHPBwB9cBK9RTRtFbv4Fi72WXulyyeW97JyvgADjBKRJDKxmqMpJkppoekH4FfQhk+CyvUE68MxF4Z5Nwk8pccOBs8l09vaGkkRf+qAUYIQN+3kB+IHOaMsWFSBmEQAzU6z6kCL5JN2s4OJEaL2hDJHVaC+mEWtJwhVMA+9mSKBaXYGS77ZezyXWWZoiW4B+UdhCs4S1YQBcGEaRU89dsJ9DyJ4byAGnneFbR2mlbEiJMKQ9lk9nfjA6KwDWUol/WloaxpiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WQIXbgiy/6tTNdJJgqqx1tpTwJQce304/cfwQ36fGEA=; b=G0OWUDpYQtqX2+hQnCWXRZmjAtel1K37de6PZ5OyoZC/E6rtGffDIWMdeGsTh6OyE9CeccKIT3oSwJk9IvKH3/TZuyS+9AW85iamAHYIj35qb0q+AqcSjU74HPwhlmNUitwsi98H02QsA0KoXYXhItXOd1HLe8+6WzbrR3lKKypmd4+bIqISM0Hse6dw471hoaVZjCYlKu3qf9hXcasAF7GctL+L66AbB7NTD3F23SkXWLLvvsQMOkjfWDQszmo3MvU7xltkNrHvI+XvQKALG74CcPoor0iNkxHqu8368gIbxdQkGw3zQZ12zYNsxxGvspehvbxkPSx97VSEzCQt6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WQIXbgiy/6tTNdJJgqqx1tpTwJQce304/cfwQ36fGEA=; b=abfHNBabnJdp7EXiMboQ5jpRQcjudVsUPV+syM2X56wsqCCFZ+uyDHNNx0l59Azs67sTPX4AHZGvdbt5hu1HHhWL2wnr+5eOSxI4KTrSI3ss6HbfCfv3+D8K8712tQyXqb8J3U2t/W2nKoiuxbd8z6f1huG2es9HBf3YQFqag5k= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DBAPR04MB7285.eurprd04.prod.outlook.com (2603:10a6:10:1ac::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.24; Sun, 24 Dec 2023 15:38:39 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40%7]) with mapi id 15.20.7113.026; Sun, 24 Dec 2023 15:38:39 +0000 From: Frank Li To: cugyly@163.com Cc: Frank.Li@nxp.com, a-govindraju@ti.com, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, pawell@cadence.com, peter.chen@kernel.org, rogerq@kernel.org Subject: [PATCH v2 2/4] usb: cdns3: fix iso transfer error when mult is not zero Date: Sun, 24 Dec 2023 10:38:14 -0500 Message-Id: <20231224153816.1664687-3-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231224153816.1664687-1-Frank.Li@nxp.com> References: <20231224153816.1664687-1-Frank.Li@nxp.com> X-ClientProxiedBy: BYAPR11CA0058.namprd11.prod.outlook.com (2603:10b6:a03:80::35) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DBAPR04MB7285:EE_ X-MS-Office365-Filtering-Correlation-Id: c60a1348-5b37-471c-e90b-08dc049666da X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: D7hQa5/2rSgoq+2L9Nt18sfAuUVqAqhsm+cdZ3u4wMyo3fX8dIGR1PrSrLUs7aLCVjKQpkdbsKRwc70l+L6hNDf9HwhChAeLVOqBbgr0E+JdX/aIzPr83b7mjVpOsemF0n3AHgaDRfATA3hnUWdxfUilfqj2JC3sc/Z/ZAaMNgiVACufMdme+s4esmhZ++Z6wyfIe+MsvO4QFvT993EF6usGLT4g7pM1VmzivkRX2EuZfnZnN6/RQhH4D9YEo7OjSEYp2UnzacVWC3VqdRIdoU5OF+yEXtEc7Kvr7WxLcvedumjIHHJIEN8rDMW21lBsJ696j4iwvf4jP+tQ+ok6yBBbO1w546aDyJLmtjUYs8hIRaDyxRl+leyRdlIEKCCIR1fwBkutWlBCoqNqj0QXUqMIOeGn6U//rjezqfadEycGrc6lOjeyoFIbUEOHh3NkseVkqMql3i80AeYVU9VTYmkEOpI209GXo9QfTWRgFGUDN4t2wP48zcqgAsivyoGPCwWxC4CwoHc7yPC/72fA5TqV0TYEUHNrNJX+p9qzO+wl2lSVpVsOszoT8cgL/JIQNTZuvN8JTvPrbLOpWPfi2Jdvr3DmAstFwu9eHcN0hfRlfQ23BRZbLSm0zgTVnxK4FRDuUM/cUn+DIdDUH9eKTg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(396003)(136003)(376002)(366004)(39850400004)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(66556008)(66476007)(66946007)(38100700002)(6916009)(316002)(2616005)(1076003)(26005)(4326008)(8936002)(8676002)(478600001)(6486002)(83380400001)(41300700001)(52116002)(2906002)(6506007)(6666004)(6512007)(36756003)(86362001)(38350700005)(5660300002)(1491003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pVpA7a1KAZllbA454AlofAV8eE38ejjuUjCl1iUOpmEfTTq+VZiYKGGJemOJpxdCtYyQgY1fgJE3DZ4CMfJt6aQ4siP5APuP79/Bqr46er9aXXtYRBMy/w7Tu5E++Y7s6PeNW9ngXQ9t1nOGbrkiiJl8s4ZIRjVEe7C2Hgs4L89l1jx01OVQLDOVjpuRaTl82rN6eCVSVc6l7rKcXeXeReqMnX4XfH1RbR1veuqRUPCSKLowagdWoEuJiCJmqkvvLy5hsf8qS4lQinL7TGvPbqN9KWyoxfHgqMnFKpRZFVJDWVJCUq3BpeXXAedXjo1WxXAyHx8cPZWqfmuajKH86mSYTUmnUIMDwSuPwRtU+4GWhbnmKzmtau0gMQuxrOyeYyjY7ARRrZq1rj4rGonWM7KdhWOAVl96ZpqhdZM1FN/bTxbawWbzDpNUcVLjImvq2hfxqhu2U46cPL2tRqz+4Y4USApp2Vn83Cdovmioxf6vc0/W4dh9TZ2W5Yegt1ZPWyHBSB9rZCfIgmqatHuub2vD4ODeUMiwJsBh507F8oVb90A8HzHpkODtF8j98eG2cuTO5fyj2TajGLot4gDbdpG5HAF0t/wj1ffwCHc/NFNU25uwv6lxSDwCI0kh2V5oYBgF+Zeo6iU51RULRsa4DnN4nNmMSEZHQ1J0v1AZ8VxkQNWPLT1jLcc7dG9yOjmxNhYiUDtxuIriSlBbYB7KKSXtLADNE2z9epwbkdG5muCv3E8XweJR/NEmFwAEEq1E50jqP0zLPkBp8dueDEIhwGsD74eg/8A2ka9frL/jD+Er7XsYJXj5qWPKgyceVNkGO4TqqM3lSABa7kD4APBv+jyKv29pacvKdTCupV8JCu7HPCuVLKk2o0uJ8G4RlnvRGz3yIsAjV3zQPPNpUct9uURaefoBtzI8Q74s/EDXkLN94/pRoxLiSp9vI0f7uS23xOuKWQpIVlWoFnfz84CBPqaRvuyXfdKHIYmcB7G70RSknB7jmoxZAharVDIUZxhbXW0x/xGuva6TXgIztAqh4CWv+gTWH0uEdu2pLEv6d0Fnbb7S0LNQRkZu1M0KjJ0VJYkMPVVkCHP1q8NxWN7fKC3eZ4gUzg9PAETIz6OQEgx9uj+J/KYJibxaTetC3tGLXiAfw3lsoVhWjJwzIbmznvh/ssgRKiGXKsNBWYkgy0ieoD3cYBnkEpsdKzPivcEqxXr2YkI7oWNYk4H/rThc9ScRj/ASb0/UdDHCTWlG4roQTEL7v/5oHMVLqIqL2FJlHjYOoE7YEQ9qtvBy9GxfL1/qHnKUKl26Yr0wX04+9Z2ahTzLk9bYP3326xftBsUZHeYJe39wqA3Y0VCs+Mw9fY0WjzSIVLDoWY4UsJpdZpNltumNbB/Nx00h1zd8CzRLKbtBzMkQOkc6rAGyTbdVmmuH/s+pOYAzNPCwhycIX1VTSW47SZkUFLrGtH+/PSZ4Va7ebmj8co0pLgotQ/CRxqBL4aJ2KyJBlqogiOSUrwwssu3HvAEI5FwHXKCFsdkb8GPBmWZiH0eXk3P9Zv6PZzggCy5JFmJ/r0GR4KdklVA= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c60a1348-5b37-471c-e90b-08dc049666da X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2023 15:38:39.8519 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8zmVdO653DnZRafSIm1FWBJCEKSFyWBaO1gTOWYJ2R0Sko9YzZP2+C3doD1FM6/9nWxrx+yumzEKWcBpAgBZdQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7285 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1786178371688262960 X-GMAIL-MSGID: 1786178371688262960 ISO basic transfer is ITP(SOF) Package_0 Package_1 ... Package_n CDNS3 DMA start dma transfer from memmory to internal FIFO when get SOF, controller will transfer data to usb bus from internal FIFO when get IN token. According USB spec defination: Maximum number of packets = (bMaxBurst + 1) * (Mult + 1) Internal memory should be the same as (bMaxBurst + 1) * (Mult + 1). DMA don't fetch data advance when ISO transfer, so only reserve (bMaxBurst + 1) * (Mult + 1) internal memory for ISO transfer. Need save Mult and bMaxBurst information and set it into EP_CFG register, otherwise only 1 package is sent by controller, other package will be lost. Cc: stable@vger.kernel.org Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver") Signed-off-by: Frank Li --- drivers/usb/cdns3/cdns3-gadget.c | 59 +++++++++++++++++++------------- drivers/usb/cdns3/cdns3-gadget.h | 3 ++ 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c index 22a31ffa69423..4c6893af22dde 100644 --- a/drivers/usb/cdns3/cdns3-gadget.c +++ b/drivers/usb/cdns3/cdns3-gadget.c @@ -2065,11 +2065,10 @@ int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) bool is_iso_ep = (priv_ep->type == USB_ENDPOINT_XFER_ISOC); struct cdns3_device *priv_dev = priv_ep->cdns3_dev; u32 bEndpointAddress = priv_ep->num | priv_ep->dir; - u32 max_packet_size = 0; - u8 maxburst = 0; + u32 max_packet_size = priv_ep->wMaxPacketSize; + u8 maxburst = priv_ep->bMaxBurst; u32 ep_cfg = 0; u8 buffering; - u8 mult = 0; int ret; buffering = priv_dev->ep_buf_size - 1; @@ -2091,8 +2090,7 @@ int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) break; default: ep_cfg = EP_CFG_EPTYPE(USB_ENDPOINT_XFER_ISOC); - mult = priv_dev->ep_iso_burst - 1; - buffering = mult + 1; + buffering = (priv_ep->bMaxBurst + 1) * (priv_ep->mult + 1) - 1; } switch (priv_dev->gadget.speed) { @@ -2103,17 +2101,8 @@ int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) max_packet_size = is_iso_ep ? 1024 : 512; break; case USB_SPEED_SUPER: - /* It's limitation that driver assumes in driver. */ - mult = 0; - max_packet_size = 1024; - if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) { - maxburst = priv_dev->ep_iso_burst - 1; - buffering = (mult + 1) * - (maxburst + 1); - - if (priv_ep->interval > 1) - buffering++; - } else { + if (priv_ep->type != USB_ENDPOINT_XFER_ISOC) { + max_packet_size = 1024; maxburst = priv_dev->ep_buf_size - 1; } break; @@ -2142,7 +2131,6 @@ int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) if (priv_dev->dev_ver < DEV_VER_V2) priv_ep->trb_burst_size = 16; - mult = min_t(u8, mult, EP_CFG_MULT_MAX); buffering = min_t(u8, buffering, EP_CFG_BUFFERING_MAX); maxburst = min_t(u8, maxburst, EP_CFG_MAXBURST_MAX); @@ -2176,7 +2164,7 @@ int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) } ep_cfg |= EP_CFG_MAXPKTSIZE(max_packet_size) | - EP_CFG_MULT(mult) | + EP_CFG_MULT(priv_ep->mult) | /* must match EP setting */ EP_CFG_BUFFERING(buffering) | EP_CFG_MAXBURST(maxburst); @@ -2266,6 +2254,13 @@ usb_ep *cdns3_gadget_match_ep(struct usb_gadget *gadget, priv_ep->type = usb_endpoint_type(desc); priv_ep->flags |= EP_CLAIMED; priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; + priv_ep->wMaxPacketSize = usb_endpoint_maxp(desc); + priv_ep->mult = USB_EP_MAXP_MULT(priv_ep->wMaxPacketSize); + priv_ep->wMaxPacketSize &= USB_ENDPOINT_MAXP_MASK; + if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && comp_desc) { + priv_ep->mult = USB_SS_MULT(comp_desc->bmAttributes) - 1; + priv_ep->bMaxBurst = comp_desc->bMaxBurst; + } spin_unlock_irqrestore(&priv_dev->lock, flags); return &priv_ep->endpoint; @@ -3049,22 +3044,40 @@ static int cdns3_gadget_check_config(struct usb_gadget *gadget) struct cdns3_endpoint *priv_ep; struct usb_ep *ep; int n_in = 0; + int iso = 0; + int out = 1; int total; + int n; list_for_each_entry(ep, &gadget->ep_list, ep_list) { priv_ep = ep_to_cdns3_ep(ep); - if ((priv_ep->flags & EP_CLAIMED) && (ep->address & USB_DIR_IN)) - n_in++; + if (!(priv_ep->flags & EP_CLAIMED)) + continue; + + n = (priv_ep->mult + 1) * (priv_ep->bMaxBurst + 1); + if (ep->address & USB_DIR_IN) { + /* + * ISO transfer: DMA start move data when get ISO, only transfer + * data as min(TD size, iso). No benefit for allocate bigger + * internal memory than 'iso'. + */ + if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) + iso += n; + else + n_in++; + } else { + if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) + out = max_t(int, out, n); + } } /* 2KB are reserved for EP0, 1KB for out*/ - total = 2 + n_in + 1; + total = 2 + n_in + out + iso; if (total > priv_dev->onchip_buffers) return -ENOMEM; - priv_dev->ep_buf_size = priv_dev->ep_iso_burst = - (priv_dev->onchip_buffers - 2) / (n_in + 1); + priv_dev->ep_buf_size = (priv_dev->onchip_buffers - 2 - iso) / (n_in + out); return 0; } diff --git a/drivers/usb/cdns3/cdns3-gadget.h b/drivers/usb/cdns3/cdns3-gadget.h index fbe4a8e3aa897..086a7bb838975 100644 --- a/drivers/usb/cdns3/cdns3-gadget.h +++ b/drivers/usb/cdns3/cdns3-gadget.h @@ -1168,6 +1168,9 @@ struct cdns3_endpoint { u8 dir; u8 num; u8 type; + u8 mult; + u8 bMaxBurst; + u16 wMaxPacketSize; int interval; int free_trbs; From patchwork Sun Dec 24 15:38:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 183070 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp9042dyb; Sun, 24 Dec 2023 07:40:58 -0800 (PST) X-Google-Smtp-Source: AGHT+IEsupxj/ot42LUcnyzLqMpcKqcFShH72hJF5WZkKWX/Uw8TfSYG9m6HVwgLuiuUl7KUsnYn X-Received: by 2002:a17:902:ecc4:b0:1d4:1b96:4232 with SMTP id a4-20020a170902ecc400b001d41b964232mr5346676plh.64.1703432458305; Sun, 24 Dec 2023 07:40:58 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1703432458; cv=pass; d=google.com; s=arc-20160816; b=U0rRIas276qxQFBdewnQ/uP7tbbZ6XeemKu1jLtLb2keDBwHnSNjFGQbjPvHluhFjG w5BbhUlWPq5QQBbuPifUXfksxkGaAMyUK5ybFyqc79FDE3UKCDF2brbuZPvrawBff3cK mtb0Z2yCfFUaIg7BH5nMOSj3KDZDvXfeBmGV8SlKRT5PT4y4to0Kpqm1HbWEC4CZP59+ lyf3NUAOnFeLxdd6v4JvLlbjljS9eZ41k13AhoUuUtv68lLZqO3howSYhO9AG5F5Ejum GC07RBw+tnOEDgTsOvj/1h+JN6F6jFHFDVujTqvnExVg3iDBowerWIIaVsEIlTFKvFX1 jwFw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :content-transfer-encoding:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=dglNFq8lvpkTt0OA4Bv5qSnsAVsCr5FNUDys0gH1F7s=; fh=K3H65qk/rvbT+8X03yi288eW/JaOO1Vv11n/dIWnYFs=; b=hC7CRDxmvPEEfYMjWstmLFab2LvSB0WC8+khwrauBv3mzghh4sbz4C/LF1VzWb8hD7 8pZOPONdy3tX6YFlm+AZns1rrYQKJ9Mlk2j+g3V4Iz+7eJtcdI3A56rZ1f5KcOGsQTl6 OFPfkL7/S7eKOxsg6BtEOy3aRW+EJnL0QX9pyz2VTjnaqq2z/sBUWNaTUB2wgxD8BCYg Z3SbqgWZNACH0M1ip4L2tPK8e18sPxGftl0oouZrl/a8ZP1Utzrlpf31kM18OOkiCWl/ Hu9+mdeLCQpAc1u7MkH5JhbaznCmrPZ0LpPAyYaYBIwSBwuP7IYqHgqGYEptNLOZ/mIA tP9A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=QxhmIPlP; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10736-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10736-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id n12-20020a170903110c00b001d34854e929si6562944plh.362.2023.12.24.07.40.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Dec 2023 07:40:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-10736-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=QxhmIPlP; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10736-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10736-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 539FDB21A2B for ; Sun, 24 Dec 2023 15:39:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 838DDF4E9; Sun, 24 Dec 2023 15:38:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="QxhmIPlP" X-Original-To: linux-kernel@vger.kernel.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2084.outbound.protection.outlook.com [40.107.20.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 244987492; Sun, 24 Dec 2023 15:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dxYmQ8GyXsE8fDLLH8VqiIviMjtNxJvrCiCx4Sk11Q2Hr9ZcT+bbCxeEMq/2XgibvYl7WhJbJO1b1aLl3I6bRCsF7N401l5mmwiNaXYk01PM1nfWPt+i2sjXo//qbetP840yR0uiGRjyQDmjyFFx1UfWhKEef4leU8vYAoRlPukTPejdApNvdbbvM3PUcmoZHajiighIr8t2avcneI9Qjg5F9XzcjDhjK2ExL12Tp+ZfediNEhCU+/ebB4Vy1o2vq6Dl8JJPqZqXDLgPI8ewr7ZHLUrWDeAaZhLm05Qs+Ba1dpjHNMuiqJDyGPuD5k6vX29xJ5MfMHir73fORDSNUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dglNFq8lvpkTt0OA4Bv5qSnsAVsCr5FNUDys0gH1F7s=; b=mwpMWYxH6C0uArhC0hWG/2DDkjAB/LXPfHwqmdTgDJXHoaYtTeZI2+dGBrya30t25++rw7/c4kqWXDPg3lazuuDWTgchu4cHErVBVIRvYN/j9u89RHvUAO69SnP4PKbk9sEEY/BkKJx3DZHDA+3nXVxD9M8bdRgUBxGGdi8L6rmHaIuoSAfybR5psJTuKdP2QJADmQFlf4fpsh1VWSJbkyJmRIwgAJwlIiv2k5p7iXOZhIBITOu0utcTdcgvYADLFMHy8IqseU4nkW94plhUpSt5qnGh2i4L0xzzhhR1n0Yu46LRt4DNjFEDiWdNKtvJpFIDbSExs9a8R13pyGADeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dglNFq8lvpkTt0OA4Bv5qSnsAVsCr5FNUDys0gH1F7s=; b=QxhmIPlP4cCXgWUm4nh5BEN/RZVjEcn3cTRc0CG4KRrezVuCW+XrQXEFT4ObjrrhulhWvu++Nq4iqkBGkQTrFS/pQGZb0Lrpn+8yAx0ethI8y/2tvbVqEL3MteZbboC+Rg+PySLazzILZqJPXTRh76WqvDuRkJabnSLWCZmSN0w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DBAPR04MB7285.eurprd04.prod.outlook.com (2603:10a6:10:1ac::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.24; Sun, 24 Dec 2023 15:38:42 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40%7]) with mapi id 15.20.7113.026; Sun, 24 Dec 2023 15:38:42 +0000 From: Frank Li To: cugyly@163.com Cc: Frank.Li@nxp.com, a-govindraju@ti.com, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, pawell@cadence.com, peter.chen@kernel.org, rogerq@kernel.org Subject: [PATCH v2 3/4] usb: cdns3: Fix uvc fail when DMA cross 4k boundery since sg enabled Date: Sun, 24 Dec 2023 10:38:15 -0500 Message-Id: <20231224153816.1664687-4-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231224153816.1664687-1-Frank.Li@nxp.com> References: <20231224153816.1664687-1-Frank.Li@nxp.com> X-ClientProxiedBy: BYAPR11CA0058.namprd11.prod.outlook.com (2603:10b6:a03:80::35) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DBAPR04MB7285:EE_ X-MS-Office365-Filtering-Correlation-Id: 68274ff2-a7ee-431a-fd21-08dc04966874 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IPO8AZSGZnYm0yg+11aSlWEI6gkXATKmsB3qvfZMgDYOts4JSaTZDQ5BbcKLO5fEd5Kayd7HP3leu3NLtHVUZ92T+HlPJYBIQjOqRiBr1iJpyPJX/lTIUwQmxdVTfJWvwT6l9bqUwVdufc+loZeAm2AjxFkCn0Gk6jYKI9YLrNaehWHy05etRDC0z+/7uzBhXNAEfE+VswVFAh9KDF9YGha9TiJeQx/AHZ0yEzfgHHS5T0vd3OLpVMiIbFvjVVtJEgfl433ARTrRjRnMGqIL2kvfoPBixK6fyABkyteDi+VEIEecDx8KEvCOlgY8jiI+95+pjvqLIpaZaFmMpWCYu1UApZgbTMjyfu/gZKtZy1AaDcPLiOG2OugGYovfdBBtYiUl0lq8Pm34fiEtvs//dqtxmei9gchQZnRq+yTUlDLSsa5vkIlZsqVchS3j9bGdcBODs44xppTDRggcPFnwLGfFAqTTN6E9iQBJuyNBIDmC6Frv11gqS1C3NjCnZO/L7wPmlLlS2TW7YHUNhPuC2n17nmWYUPYmoOf/y2y7GHSsbttdw+opA3HvxGeaY44m3Rpgb2pj3toMQb6ZUMImgXYtxX/5z0ADjOnz7/Q8gBaBhM33aPC2d+g2VfPYELR+STq2cJ1bY8KEr/0PfLDyRg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(396003)(136003)(376002)(366004)(39850400004)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(66556008)(66476007)(66946007)(38100700002)(6916009)(316002)(2616005)(1076003)(26005)(4326008)(8936002)(8676002)(478600001)(6486002)(83380400001)(41300700001)(52116002)(2906002)(6506007)(6666004)(6512007)(36756003)(86362001)(38350700005)(5660300002)(1491003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OHyyfAEE+E1M3FSn6fZgApROQrkioAzenxkiHKSxP/bf5fjlRsN5MOx6pX79KkU2zAGkCllfxrGnWKW3C4tuRnin63XDLZduDFEnMS+Tn7ekTNOrdEPvCHVmFBMZvzjUHojE1eEPWR4BFb8I10125H7wPajq54G9R4NHJZNHk4xPlV1rkdYHBDNZpoDnUaUJuJNgesMMBQ94wVegqRAFJC8XMP6DMH2U+bNmaorXeVH4alemHvCwfXCbSa5mero0XDjNE7aZM31fNl8HdACkWdBpdj1UdXCQ8IrRIG/GjQheMmv1Y0Pj00cBYRdfYk/iW6IHmlqGDwPcITLFfOWYT14nsouhyZJeQJsKe1g/qE67kTzojfPkTKb5mwjpj60LD9wBy4GhdvzprMDPYaRKirZc5e2vbrbZYsL3QkDi7G19mhYCePDS4D+Guuxp71/rWDw0egpc1bN8EX9CkdZrL7fClN3aHPSS9Fu6SmlIzq8xcEvtb6A0P0JHT1j+PDaSYlat7B/PUN+UuSXCsuzC2ScYonL7sJ+NC51KoysnDg3r9RJSrxtaYS1pEcXCVhi6E37cvOset/oMgUuEPUPryxKzHh9wuw2Is/x6ejMAivXEN4BoIY8OzI8yrfY/PiKrvhclqFgixXZjn/dsR6+cZNI+ShcyAcm5bt12TJiQqCMrK1cK4MFKSXBQEJI22KkpElI+0cAMW7usz97njHBjI2rOn3jrHr2FUmXfp+wCLMbDHGheTdbqzDrFKVZt8Mntd2HSa3Vw6YxrGComDHaWfBRkLi2gbAAtlgXQYrPUTuJHOJrwhGvFyg6+mapfpl9dqof067KIVxgxWpkko/FQKnXSqCGx3sJR64uWrUMZ3xY/IRd/EHsvKNYxeyqwXK5zgZzuAU+KxWWvY29jzKHHmzQdDg1/W3GyfyI40eOwF7TKkN+v/tczX6SPqV3jx9dnXY/c3fEdlCCfY8TeO2Yuj1Siyufedgo9DNOeo12zhV5p8FZPWsd1ehJRig2rdNwL+GZFi4P+/KjlacDwJHs91N1j6TXsPg7dr3cEy1h9PuoyVDG9VXY0fXZaVtBnqaTcVT+FuAzK2QID2+6/NeUdAdR3GQbemIz4cZdAzX0kuiK3xwJxLDzRa2Uyk9rcTpuoQ8rTA4ukiDpINoIN3VZjtC46INodEsiT71DHl5jyL/gBgFif/imalaQFrp768rnEbLEh/CfsbFUPa2PfE2rzZpuLmFQyRZWNB1rPs+w/JP1dNJMHf0KJ3q5fpeGhzKKlIXYpJcF9aNtn4mJABpCJZWtRcUgNgOdOwK/w6si1cz4yudZrKDxbnQ3rTdoWuDw7ezezrMEIIF0aTyTOGcdJkgQJsZaVMIc/TZVEW7GoPc6DSzQRT6A7J96PO0T10rO3pKSeMWAxVboMSo1h857DmMQnQEKy78M0TjHBTNr0qjp7MGjTAEwv68cTR5tDMUweirrtbBHoAbqDUMSklYTHfZYkc5PzqeqXBAKFZLu/Gj8GW08AXm9cTrXIcrGnn2G9cp47UCuyDvHXmgRGvsW7oeOdLxPhYynm64Cj+N1J1Zo= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68274ff2-a7ee-431a-fd21-08dc04966874 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2023 15:38:42.6361 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: p+B0Jtx3inF1IkIbVdvgNpCJlG3Uj8+o+CoVGLTUsxSOjM0G8V8V2IeirLxOPOR2kN6yzmfUVoJHOujtF4Mm+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7285 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1786178393489185139 X-GMAIL-MSGID: 1786178393489185139 Supposed DMA cross 4k bounder problem should be fixed at DEV_VER_V2, but still met problem when do ISO transfer if sg enabled. Data pattern likes below when sg enabled, package size is 1k and mult is 2 [UVC Header(8B) ] [data(3k - 8)] ... The received data at offset 0xd000 will get 0xc000 data, len 0x70. Error happen position as below pattern: 0xd000: wrong 0xe000: wrong 0xf000: correct 0x10000: wrong 0x11000: wrong 0x12000: correct ... To avoid DMA cross 4k bounder at ISO transfer, reduce burst len according to start DMA address's alignment. Cc: stable@vger.kernel.org Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver") Signed-off-by: Frank Li --- drivers/usb/cdns3/cdns3-gadget.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c index 4c6893af22dde..aeca902ab6cc4 100644 --- a/drivers/usb/cdns3/cdns3-gadget.c +++ b/drivers/usb/cdns3/cdns3-gadget.c @@ -1120,6 +1120,7 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, u32 togle_pcs = 1; int sg_iter = 0; int num_trb_req; + int trb_burst; int num_trb; int address; u32 control; @@ -1243,7 +1244,36 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, total_tdl += DIV_ROUND_UP(length, priv_ep->endpoint.maxpacket); - trb->length |= cpu_to_le32(TRB_BURST_LEN(priv_ep->trb_burst_size) | + trb_burst = priv_ep->trb_burst_size; + + /* + * Supposed DMA cross 4k bounder problem should be fixed at DEV_VER_V2, but still + * met problem when do ISO transfer if sg enabled. + * + * Data pattern likes below when sg enabled, package size is 1k and mult is 2 + * [UVC Header(8B) ] [data(3k - 8)] ... + * + * The received data at offset 0xd000 will get 0xc000 data, len 0x70. Error happen + * as below pattern: + * 0xd000: wrong + * 0xe000: wrong + * 0xf000: correct + * 0x10000: wrong + * 0x11000: wrong + * 0x12000: correct + * ... + * + * But it is still unclear about why error have not happen below 0xd000, it should + * cross 4k bounder. But anyway, the below code can fix this problem. + * + * To avoid DMA cross 4k bounder at ISO transfer, reduce burst len according to 16. + */ + if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && priv_dev->dev_ver <= DEV_VER_V2) + if (ALIGN_DOWN(trb->buffer, SZ_4K) != + ALIGN_DOWN(trb->buffer + length, SZ_4K)) + trb_burst = 16; + + trb->length |= cpu_to_le32(TRB_BURST_LEN(trb_burst) | TRB_LEN(length)); pcs = priv_ep->pcs ? TRB_CYCLE : 0; From patchwork Sun Dec 24 15:38:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 183071 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp9195dyb; Sun, 24 Dec 2023 07:41:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IHklczQ08pyFApkMz00CmR7yiuqnSLH+zuex+s9DvrXAdYJV1DHx6eM6xx7DnW/9LU0RfEB X-Received: by 2002:a05:6e02:214c:b0:35f:b16d:cd75 with SMTP id d12-20020a056e02214c00b0035fb16dcd75mr7657719ilv.14.1703432488162; Sun, 24 Dec 2023 07:41:28 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1703432488; cv=pass; d=google.com; s=arc-20160816; b=aEj0J94ZjXL109quBMKzG1GEGFd6UY8pHrj5HYBld3Ua69OpMUtpkGsncxeyXUPLBL EWk+cS/Law77E0Zp8JUozcU3XtHBQKU1j1aeWesj5a+31iqdt7tkVz+fVzzwYPvzyo4F yCB8gs1ax7bZpVaSw1efYEyza5Y6hKKQqxqYQFd0aEcWtE0PUzuwEAL2HoJNG9SYiEz/ nMU69UubH+uq6aknTlGMxmcdafCNBzofS9PyQutILoJ66zRrZmLUtN7kI48jOs617Hp1 uXDNIWqAjZUvqZX4r4EVMuZ1XPbxyEU8kSAJDPmBvntTwC6f2kVuS9lwPwC4IvZQGWgC 4B3w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :content-transfer-encoding:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=XXpaAagGWQhxWjrKD7Fn5u0Z2e0L3PSMrRONa1XQftI=; fh=K3H65qk/rvbT+8X03yi288eW/JaOO1Vv11n/dIWnYFs=; b=RFPaAESww0cWNrPHFdPBhWInbJo9Swb7tgiHuAIHrmk1QRdmcR4mHb9cHI3LqsK0/f f/PPjPa+JchyKLcZsOj0PtQxYiEVkDzZPqmGahyc7WrocDAXoNVjJFjGD6JRjio+JBQM yKBqFeWFza/kefKELYHSu6M0kK7K368dHlKXfh7bIHsXh3qwAKNdi+6pwy2lJWiLlz4k j1SwxhpvVRlMxgjmlOPMTXLwHee+zUeXpsrYWqi4+lFpeiLIS1yN8WUzGbYFiEkCWSh6 396U+9i3rHWJBmoaMt5du9QqnUgsVtulZRdUmGX42K+F1C4wqWEnPMRV1qCESRNntYJI qggA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="OiOc/23p"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10737-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10737-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id c11-20020a6566cb000000b00578d3f8d4d4si2406636pgw.448.2023.12.24.07.41.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Dec 2023 07:41:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-10737-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="OiOc/23p"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel+bounces-10737-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10737-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 6AA7EB213BD for ; Sun, 24 Dec 2023 15:40:17 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3867FFC11; Sun, 24 Dec 2023 15:38:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="OiOc/23p" X-Original-To: linux-kernel@vger.kernel.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2040.outbound.protection.outlook.com [40.107.22.40]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 072D1EED4; Sun, 24 Dec 2023 15:38:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QoPflTfSURGHyFTUdjlpToZ4nVhCSleAxa9LyICZDot4vN5X5abSIWTfndc6c71Ip3SEoSsOisXHTwzxA+EIp0HPI1nr9aLxqDifsqNzKnYUAVXKcE+3zj5ZaZav6qGKraELOM3sz3p2zHesw0ov7zJ3vVJ0eFvf4kfHCxuWHcfeoK2xGV4/2n0EnaPboRmSxmz3DsSzo7aUOgjWzn2URVzWNP4xX6TrNuF/CR8fCtVeDpQ9n0Dqjw5ajrPoevSxQ1Nok7hUj5q3KoJeJJsAZHARSqJsTAQotfbQypP6YbvKJxmqCqrivmP0FII+TwsqkGn1p2rdkTLwIAw4V5uGvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XXpaAagGWQhxWjrKD7Fn5u0Z2e0L3PSMrRONa1XQftI=; b=FIvkjoGTec5XA4n3ME2mzhV2qMBAx8ks3lZF1MOSicBTdpfyWM58SFwCF/EUPYY2qn9TweAHwACLSu3KhrvDSPlPnZpc3cvbXUP99TWtLRyL4yAcjdddwLuPzJ4gxwF//6FVQ6jB1GjgJq/G4BWWF+GR/N/mLCJqxKK187G9LSfqOI3xdxZUuuP2J8VGMrAQuu4ekzI+I3S6t0XofurtMEreh0fL4H3qGEjXb50WBj9+YYPGYqYjtOeYYyzqaWiPXaUJbVaf/rDmj3bjOhJ4DQffActf8j6aLzGODT/uxkRxQFSNcsdUIY0uNtGMMFlrnDEGY9IkDiDwLDuHmVbfKw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XXpaAagGWQhxWjrKD7Fn5u0Z2e0L3PSMrRONa1XQftI=; b=OiOc/23p1335SugnglauWSc08httD8TURRuYCjPqatkUwCAhpMgq+TFz2lflNCAtBhG+YF064u+8ZYUR+KlZgXriSkg+hCOoZ496t4N2Fp9El2LEf29RZQDNgMr7R/p9RsipDKEythSSZdYD7cy4yls+Fub+WsqtY9MCzKDNagk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DBAPR04MB7285.eurprd04.prod.outlook.com (2603:10a6:10:1ac::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.24; Sun, 24 Dec 2023 15:38:45 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::95f5:5118:258f:ee40%7]) with mapi id 15.20.7113.026; Sun, 24 Dec 2023 15:38:45 +0000 From: Frank Li To: cugyly@163.com Cc: Frank.Li@nxp.com, a-govindraju@ti.com, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, pawell@cadence.com, peter.chen@kernel.org, rogerq@kernel.org Subject: [PATCH v2 4/4] Revert "usb: gadget: f_uvc: change endpoint allocation in uvc_function_bind()" Date: Sun, 24 Dec 2023 10:38:16 -0500 Message-Id: <20231224153816.1664687-5-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231224153816.1664687-1-Frank.Li@nxp.com> References: <20231224153816.1664687-1-Frank.Li@nxp.com> X-ClientProxiedBy: BYAPR11CA0058.namprd11.prod.outlook.com (2603:10b6:a03:80::35) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DBAPR04MB7285:EE_ X-MS-Office365-Filtering-Correlation-Id: f29f1699-46d7-4a6c-5f5e-08dc04966a1d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LlwfngmD7DMyOLGaZng41dNWX8he15EEXZX/N3YULuQD3janEH+PMrjCdDXzlZJt8FQlkj+n3Q0MLIP2UYT9h1//rOUpV6+hOUnrUR38r/574NYmNQ3ih+DdTwoqWjcJefGTzw1L0TYHSUXaHQcIldUgh8mO3LYyp9kT+y51rcrW08jxYVjySwDM/qeeGbplt08tOGEJsdYtOhCz07g7Em0soyIjipyBafHDOB3aHWAs20iRS1bByidGMj2Ro6DtSnwMgJ536G/3D0MYa27iQFEbiaMYikZu6j10aCM8SXbrdHmMlNbr2TAf4D29mWaCHewB5HZ2b6ddE+u+OtxkbLVIO/7+KimsuJwi4c3ZHWJqhb+GsnoLT6+zqtrYVMgIeatA+JRxL234+jzyvV24+hc7qssDqjm6JRyrROA2v21DirnAQ8dwnQNW2GjLJfG1aDPFz1ZPtS9S7GUpzepcE3yaqiYSg0k9vba0Lr7B1aAvSC/dfL3qtJLsMAoEn1yWZgXenclm2BNGl9bnuGGpUwnz5UEfy9hg8E7p2l3izpdWA+zNknu7DBHfWzl4RLhX4DbhEZF9R9a3jjE9rxfF5KNeMCcj8yWkCgkltPRp3E1heeXqZlVNLpcYBlldxVmoyptlz10xAu+hZnCq2Mvokg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(396003)(136003)(376002)(366004)(39850400004)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(66556008)(66476007)(66946007)(38100700002)(6916009)(316002)(2616005)(1076003)(26005)(4326008)(8936002)(8676002)(478600001)(6486002)(83380400001)(41300700001)(52116002)(2906002)(6506007)(6666004)(6512007)(36756003)(86362001)(38350700005)(5660300002)(1491003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2bZHOFYsc5VXbvKiyPUaXlV2CeGfgGU+iU4abCTlqYyehKg9yDdJy0v7s92AHvhjIuzeutAfKz4m5MtzgMIbjSogBB0HkG5KBQXdnMjEjZqp7IJMchxiSqVBdnH4vZQ1/uwZoFN6bZ4DwWS5U9C2VuVb4bzX2vcFEe8NVoYfTVB0D040hqkixYx5+U0XTmiSitwJH22Ru7lhW0IITWJuNPAfHnDbitK1nUp2h2d4OMtdhNSv7UQQr0LNq38oaT1OsL8aGu1XbYZLIkC0KInBu7ZU9mcwYgnwZ+QTtWUVL503slFlIi307QmE2Ie8KfvwRrUJuXgSuQ4sgasS6IUhsNaWDSZ0zZxyGy3HUlZIzGWx6VXsNITDq9R4wrXHUrBq/QeS2fb2Lk+Ppj0ecoYGEPnxEIT+aD+AGzurrPiaUKOh3x1ksxlgmavHpWghcFoZiy+Xb+n7TDZWGcRznPHKQbuxq6/8z6thGjf4yQ5VeTaNElra4mKSepv0BaJk0YUww9ovM1gIaRaGH5O0PjuQJirtHtKKkMNOPh6G0vZKoV4OGcNGuVOPx/o5DaadBQdhwr4LuEkfKLvrmPenLdpHvhTSOKyTOr45jkyqRE7yyXgI0UzvdMY2wDoNBzP0ne2BuDYoieyJ/Z3M30yi7icxDHatVave8ZhwuOLCZ7PJPWSmytbx5zbu5SVUGJ/CgZcvc+LiU/q3LZni5bd0XZP/SfL/d9ukdVb2c4Y1NXLxBj+UiNo9Q6V+jrnM/HCzvMBn/hAk7q9MKjXHesb7lRTKzp2FPmz55hy98maRZLZSle3rgqhz0LXYz+3PqzULg8VBZUmngJyUu8FW1AY1LBglJ4wA0q/5qku8IQ5mh6TzZ2z249jkUBly89DFNIWcEf4ITrG4aRT/r7A7Zst8P6m3mO+hsy4euWozQNh2pwDcB4LbS9fK5gbcFabXSH/xiew5PeUrY3VIbNTm29uB7iEK9dOrlg+G9YkBjDLJbXWNzoASHdDFAWQhSYE1CfWzwZeNtqvrHrXVFaBpSuVKd502JV2t+Dof22OrziDPbNdyQh4EBfsEp3Mlb5Kg8ufvvvQVUYe1n0DfUgMSEq2GJSmzWn8BccxisOG2Lf+oLhJOme4w/lsF3oT5dMo8PiCgu2F9ecU45yZKwaCpaXMrDtW2242eLNjxMzXzZrBXXwrXimOQpPDxcz+9WuhGRodn36Zby94umLCCWNbQ1stQ4RRVVq3zLuUhWZXe+9U9u9E2wqIee4p1zm+WR9B4qTYNsDxFvwfPomx02xppn+5LjyAsdEB/3wpRLfjMGuJtptrpqy7MBVTLZaSur7vCJ/d8EP9hbjzeQQ2tla6SlzGBzIFD7Nhvg4va/oQVBeXaIaV+qq5lJ/W9FAcZNX+fd+y2SU3o3S+cnjsZPvLX2880SNdRh48c6WiyUe/rgm3KnxwHmR96MOXio1B6wYL6z7iIwixNU+odpTAwOjZXYNwffr7kLjlYGIalsZ98Pyq8xz6Dx/mZE6w4by1hTnvUHDIppGRfs9TJLTTaZ826iMfPqn21v6WUW1OqsK4bugMTXk5VQZc= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f29f1699-46d7-4a6c-5f5e-08dc04966a1d X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2023 15:38:45.3239 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WeZZzOsWEhLg27En6EUwRFvH3Z1iByx4hetxlfEMpllhXWu1sDLiy1eEJWBAmUPrxBU/6YOQ6eXvlqeOAwXbJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7285 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1786178424820974630 X-GMAIL-MSGID: 1786178424820974630 This reverts commit 3c5b006f3ee800b4bd9ed37b3a8f271b8560126e. gadget_is_{super|dual}speed() API check UDC controller capitblity. It should pass down highest speed endpoint descriptor to UDC controller. So UDC controller driver can reserve enough resource at check_config(), especially mult and maxburst. So UDC driver (such as cdns3) can know need at least (mult + 1) * (maxburst + 1) * wMaxPacketSize internal memory for this uvc functions. Cc: stable@vger.kernel.org Signed-off-by: Frank Li --- drivers/usb/gadget/function/f_uvc.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c index faa398109431f..3d5c03e1361e4 100644 --- a/drivers/usb/gadget/function/f_uvc.c +++ b/drivers/usb/gadget/function/f_uvc.c @@ -719,13 +719,29 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f) } uvc->enable_interrupt_ep = opts->enable_interrupt_ep; - ep = usb_ep_autoconfig(cdev->gadget, &uvc_fs_streaming_ep); + /* + * gadget_is_{super|dual}speed() API check UDC controller capitblity. It should pass down + * highest speed endpoint descriptor to UDC controller. So UDC controller driver can reserve + * enough resource at check_config(), especially mult and maxburst. So UDC driver (such as + * cdns3) can know need at least (mult + 1) * (maxburst + 1) * wMaxPacketSize internal + * memory for this uvc functions. This is the only straightforward method to resolve the UDC + * resource allocation issue in the current gadget framework. + */ + if (gadget_is_superspeed(c->cdev->gadget)) + ep = usb_ep_autoconfig_ss(cdev->gadget, &uvc_ss_streaming_ep, + &uvc_ss_streaming_comp); + else if (gadget_is_dualspeed(cdev->gadget)) + ep = usb_ep_autoconfig(cdev->gadget, &uvc_hs_streaming_ep); + else + ep = usb_ep_autoconfig(cdev->gadget, &uvc_fs_streaming_ep); + if (!ep) { uvcg_info(f, "Unable to allocate streaming EP\n"); goto error; } uvc->video.ep = ep; + uvc_fs_streaming_ep.bEndpointAddress = uvc->video.ep->address; uvc_hs_streaming_ep.bEndpointAddress = uvc->video.ep->address; uvc_ss_streaming_ep.bEndpointAddress = uvc->video.ep->address;