Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp1627146rwb; Wed, 16 Nov 2022 22:33:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf7jekXqIkNliQBBPNARH0d4RSRDIEV1gnjvPJXZs3EI07aeX6+PPUr2vcLbqARxQ3OEKHXU X-Received: by 2002:a63:134a:0:b0:476:bfca:112d with SMTP id 10-20020a63134a000000b00476bfca112dmr805114pgt.574.1668666821421; Wed, 16 Nov 2022 22:33:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668666821; cv=none; d=google.com; s=arc-20160816; b=HFCofPESDGr4/tkumh99InPSUeRYOSGwjl1LQqvbu4ziY5u+UzVX1oAcFSkV5r0okL 9oQiETpmqFoqJ+9Bcwcq+rM7G5Je/+BG9jtXxEOakloZk5kqL3NuBxoEoZSGmkbud/yG Ur4uZwXyLRxsBSLLwiujigzrjGAozLZMRPxi7S8XD79lRcoF75WaDixAfgYhV1IBl4is F+YyeoWoH6te+UyJMAxb9O5AF2qlE55ZMOJ7enETMlI9wm49t6txjeSzIYYiwbRC9RB/ dZXmxISOCEAR6vZ0MR/WWdOPjEA0KEt4OvA/kIgHYbCwh1iuWHp+wARbUMmIGi7isF47 RY5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=G28Rt+EetBjrxyZcHJjZdVZZs1sU8FxpkLuTAymdxMM=; b=g4xaC+PLsaQfAAlY62WCkrQ0egUy5+8fc2TqQjgXDIXrOYruRQXvS+/TR3D2CJeacP FQO7tKqQWVfvUyND8dsw7CV2PQM7WQsMnW7f9yGxu0Jis4G7atewMqYiT/95CbTZx+kZ dvqJvkwEIb3tZtq9KHH5B5dBHrfwBUaN59D1OeGzT8QtbK/gzqb72gp5r+s0Jx7vFq8X u+eob5OaImqt1fA1UeCy4bAAbZiO31yZrMUWCoPqIPxOYQMcKa/vsJUcfIPMRaN89bTU 9D0OHNYHrYTAeS6oLs03tjByL5Lz7Ark3JtCcu2kQYd8LZri1yyLh06SCT7ZBDrLmROe pCZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=c6LKeOUO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o1-20020a17090a5b0100b0020fadac08a2si85340pji.108.2022.11.16.22.33.28; Wed, 16 Nov 2022 22:33:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=c6LKeOUO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239287AbiKQGEC (ORCPT + 91 others); Thu, 17 Nov 2022 01:04:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234250AbiKQGD7 (ORCPT ); Thu, 17 Nov 2022 01:03:59 -0500 Received: from mail-ua1-x936.google.com (mail-ua1-x936.google.com [IPv6:2607:f8b0:4864:20::936]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E586D12A8F; Wed, 16 Nov 2022 22:03:58 -0800 (PST) Received: by mail-ua1-x936.google.com with SMTP id 97so247358uam.0; Wed, 16 Nov 2022 22:03:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=G28Rt+EetBjrxyZcHJjZdVZZs1sU8FxpkLuTAymdxMM=; b=c6LKeOUObpXFOqrhlmriDmjn9jRw13wAbM/2VlwIs2mg2wVLYAm69iHn0qGTIjSQ/s x+Uk0hMjgeV7R3Lox9LwEKqb+5zBFbD1etKP1gkXCd4aFRW0tV6Vz5bIlChpx3EGxgUf B9NCVyfhTEKLKji4DmKIgpbhqiT4gvhdvxX/y/WXiPr7mow+ZSSmHLh+AxcJSYV3IOkt aPXoaDzzh+Lg2M6V60ipKwIoR5Am8v9dVlAVJmgIeUoW12W1MRR/EZH6Mrj4NFpNEURk Naz7Br8eCjYPPocWZoQ3/AaVpiQBkcqIVZeG+7dCHHwT8+8W/y4WSJtnPzJjWbv6BlnS P3fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=G28Rt+EetBjrxyZcHJjZdVZZs1sU8FxpkLuTAymdxMM=; b=lOJa6slGjS/30u+m7u0zQmeIJmphdEfv8TSvdWUtKqRcpPWF3FHOk+T5/6zxu7/+Yw 2SCgv2hDAySiRchRVigcKf9hmBemDcyer8H2oEO5P5yXdDyYNIqv4e/5RQ8hWgOmmF4N /ilsgxI0BsySKtNyd4C1onQiottM81CBt+SwxKDahitVJ93l8ZIgZq4djsnTbrYytdEu NdzFS8fj5JOy9yzFuCCLYuzOVuW4vXy86xxBwmfggsP2WpBgIXYJG55vBjMa2m48os2x OR7xk/wVyLtkDeOoyroIgJRmzge9wwRgiJ2BfS3WXt5Q4BOLSTRvVm6CtlA0qwwHM9nS BuPQ== X-Gm-Message-State: ANoB5pla7j5AkrcbluH0aLVAe2JXKHsUkM36B5FeSrjmWG1izsfFdbkl vu+35m6AAfrS+vqHa4ec0XTa9gtqNxCiW08Zqc0= X-Received: by 2002:ab0:b06:0:b0:3b8:4a1a:5a63 with SMTP id b6-20020ab00b06000000b003b84a1a5a63mr336281uak.110.1668665038029; Wed, 16 Nov 2022 22:03:58 -0800 (PST) MIME-Version: 1.0 References: <20221115092218.421267-1-pawell@cadence.com> In-Reply-To: From: Peter Chen Date: Thu, 17 Nov 2022 14:02:48 +0800 Message-ID: Subject: Re: [PATCH v3] usb: cdnsp: fix issue with ZLP - added TD_SIZE = 1 To: Pawel Laszczak Cc: peter.chen@kernel.org, gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > Pawel, with your change, the TD_SIZE is 1 or 0, but not like the > kernel doc defined like below: > Please omit my comments, I did not check the code carefully. > /* > * TD size is the number of max packet sized packets remaining in the TD > * (*not* including this TRB). > * With your current change, it may work. But your change conflicts with the xHCI spec that described above. With ZLP, the last useful trb's TD size should be 0, but if it is 0, the controller will be confused. With your change, it makes the code more different with xhci's. Do you consider handling ZLP packet at another TD instead of current at the same TD=EF=BC=9F Peter > * Total TD packet count =3D total_packet_count =3D > * DIV_ROUND_UP(TD size in bytes / wMaxPacketSize) > * > * Packets transferred up to and including this TRB =3D packets_transferr= ed =3D > * rounddown(total bytes transferred including this TRB / wMaxPacketS= ize) > * > * TD size =3D total_packet_count - packets_transferred > * > * It must fit in bits 21:17, so it can't be bigger than 31. > * This is taken care of in the TRB_TD_SIZE() macro > * > * The last TRB in a TD must have the TD size set to zero. > */ > > Peter > > > /* One TRB with a zero-length data packet. */ > > if (!more_trbs_coming || (transferred =3D=3D 0 && trb_buff_len = =3D=3D 0) || > > trb_buff_len =3D=3D td_total_len) > > @@ -1960,7 +1965,8 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev= , struct cdnsp_request *preq) > > /* Set the TRB length, TD size, and interrupter fields.= */ > > remainder =3D cdnsp_td_remainder(pdev, enqd_len, trb_bu= ff_len, > > full_len, preq, > > - more_trbs_coming); > > + more_trbs_coming, > > + zero_len_trb); > > > > length_field =3D TRB_LEN(trb_buff_len) | TRB_TD_SIZE(re= mainder) | > > TRB_INTR_TARGET(0); > > @@ -2025,7 +2031,7 @@ int cdnsp_queue_ctrl_tx(struct cdnsp_device *pdev= , struct cdnsp_request *preq) > > > > if (preq->request.length > 0) { > > remainder =3D cdnsp_td_remainder(pdev, 0, preq->request= .length, > > - preq->request.length, pr= eq, 1); > > + preq->request.length, pr= eq, 1, 0); > > > > length_field =3D TRB_LEN(preq->request.length) | > > TRB_TD_SIZE(remainder) | TRB_INTR_TARGE= T(0); > > @@ -2225,7 +2231,7 @@ static int cdnsp_queue_isoc_tx(struct cdnsp_devic= e *pdev, > > /* Set the TRB length, TD size, & interrupter fields. *= / > > remainder =3D cdnsp_td_remainder(pdev, running_total, > > trb_buff_len, td_len, pr= eq, > > - more_trbs_coming); > > + more_trbs_coming, 0); > > > > length_field =3D TRB_LEN(trb_buff_len) | TRB_INTR_TARGE= T(0); > > > > -- > > 2.25.1 > >