From patchwork Sun Jun 18 09:44:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?0KDQvtC80LDQvSDQmtGD0LfQvdC10YbQvtCy?= X-Patchwork-Id: 1796226 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=qIqz3uUj; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QkSgG6BCwz20Wk for ; Sun, 18 Jun 2023 19:45:12 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1795586264; Sun, 18 Jun 2023 11:45:03 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="qIqz3uUj"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 641198628C; Sun, 18 Jun 2023 11:45:00 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: 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,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id CFCD2861D5 for ; Sun, 18 Jun 2023 11:44:57 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=zubastikiko@gmail.com Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-5187aa18410so2615296a12.0 for ; Sun, 18 Jun 2023 02:44:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687081497; x=1689673497; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=AuZ0zbXt2bzdqauwgeiEZ0CKTTQo+V7dfLv7gWR+HWs=; b=qIqz3uUjyRaKQXzDoUZvrpO3jXqhrQttaR/oufLFaTBYLQviUpCfW6OvpV1yYdPpyz SNjXE3I1N6ufuPe2dIDRkvDvU6xsxjcuPu69L/9pTIxy2OF7OOGf1cNwFCeFRu5Qr47K C4NnnbeDtgNaUDBnsJAnaN9ezp1IK4yEJYMsAqNkIJ3ugNFe/977penJN18ywLBAjrXv gO9ybLBGPDeTONFvYc4AlXJ6P7n5/EqMybsM60HG3kd7zsy5VXPPkWefYQvDtdikTDGo 5AnjAkFgz6XVX0m/kl2pgbe4ozxq7hlzddlb2EFR9U8b2QHCxW34CxHTrl0gKIhucOIN 9Cwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687081497; x=1689673497; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=AuZ0zbXt2bzdqauwgeiEZ0CKTTQo+V7dfLv7gWR+HWs=; b=iwubgwWFanTRbaioAvFuptJ+t5vHF5Sq/h40zv0OSkbfvggmgVyJVU6mbheaGaw7yO obTjJKc6q3n4tBHwTwGT2rELRD0xfAxcz768Ty3AtzRmnUAfkjOQFgP8hY5g4n41nVaj DszBJXaH2cE3P9+FOeH2b7Ad00fjwWNvoXDQzDumUu4W2cXKjl53TnjO8RiRsKzP9GPY 6dz0DM/em5hgo0iAlGMn7nooNznlahtrNksFVNIrNfTv1ZCiNvD68FeeM8rIcxG/6JAE K/a18zQ9q1vO4i/jHwmqmRiGlJMZBiEogJIWBus+EfeKZLZXGK3WVjwzpRu5csHjHfD+ 6dPg== X-Gm-Message-State: AC+VfDzCyQb7SJGmCXSx4RuaAonEOaSutWGNa7wTG9YETM3filitf3SS j2BFd9uOFgbmFys+4yI3avrSJJJq8XLTb0r5XNyYMvXSrFA= X-Google-Smtp-Source: ACHHUZ6zfgwshUwztxkdQTq1eI5kfnCqocMBmWOSU1LGOiwXT8Kju3qRxtwBI9maZgNIuLZmAuash6Tf/rbi4I0uQYI= X-Received: by 2002:a50:e613:0:b0:51a:532d:2fd7 with SMTP id y19-20020a50e613000000b0051a532d2fd7mr464982edm.42.1687081496476; Sun, 18 Jun 2023 02:44:56 -0700 (PDT) MIME-Version: 1.0 From: =?utf-8?b?0KDQvtC80LDQvSDQmtGD0LfQvdC10YbQvtCy?= Date: Sun, 18 Jun 2023 12:44:06 +0300 Message-ID: Subject: [PATCH] xhci: Add soft retry mechanism for control transaction To: u-boot@lists.denx.de Cc: gautam.vivek@samsung.com, vikas.sajjan@samsung.com, trini@konsulko.com, kettenis@openbsd.org X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Hello! I have a problem with using the USB stick Transcend Jetflash 350. After entering the command "usb reset" were getting three different results: 1. [OK] USB stick was found. 2. [ERROR] Message: USB XHCI 1.10 scanning bus dwc3@10000000 for devices... usb_new_device: Cannot read configuration, skipping device 8564:1000 3. [ERROR] Message: USB XHCI 1.10 scanning bus dwc3@10000000 for devices... WARN halted endpoint, queueing URB anyway. Unexpected XHCI event TRB, skipping... (9fb69170 00000008 13000000 01008401) BUG at drivers/usb/host/xhci-ring.c:530/abort_td()! BUG! I tried to dump a USB transaction via Wireshark + USBPcap and noticed that several transactions were errors. After reading the docs "eXtensible Host Controller Interface for Universal Serial Bus" was realized the retry mechanism. It solved my problem. Best regards, Mark Smith --- From b887f8bb547b56f6a0c0c7102a9d232df6f174c6 Mon Sep 17 00:00:00 2001 From: Mark Smith Date: Thu, 1 Jun 2023 23:20:03 +0300 Subject: [PATCH] xhci: Add soft retry mechanism for control transaction A Soft Retry may effectively be used to recover from a USB Transaction Error that was due to a temporary error condition. Software shall limit the number of unsuccessful Soft Retry attempts to prevent an infinite loop. For more details on Soft retry see xhci specs 4.6.8.1 Signed-off-by: Mark Smith --- drivers/usb/host/xhci-ring.c | 7 +++++++ drivers/usb/host/xhci.c | 12 +++++++++++- include/usb/xhci.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index c8260cbdf9..10f5fe4d06 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -580,6 +580,9 @@ static void record_transfer_result(struct usb_device *udev, case COMP_SHORT_TX: udev->status = 0; break; + case COMP_TX_ERR: + udev->status = USB_ST_CRC_ERR; + break; case COMP_STALL: udev->status = USB_ST_STALLED; break; @@ -979,6 +982,10 @@ int xhci_ctrl_tx(struct usb_device *udev, unsigned long pipe, reset_ep(udev, ep_index); return -EPIPE; } + if (udev->status == USB_ST_CRC_ERR ) { + reset_ep(udev, ep_index); + return -EAGAIN; + } /* Invalidate buffer to make it available to usb-core */ if (length > 0) { diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 9e33c5d855..efb9fc2950 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -1156,6 +1156,7 @@ static int _xhci_submit_control_msg(struct usb_device *udev, unsigned long pipe, { struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); int ret = 0; + int soft_reset_attempt = SOFT_RESET_ATTEMPTS; if (usb_pipetype(pipe) != PIPE_CONTROL) { printf("non-control pipe (type=%lu)", usb_pipetype(pipe)); @@ -1178,7 +1179,16 @@ static int _xhci_submit_control_msg(struct usb_device *udev, unsigned long pipe, } } - return xhci_ctrl_tx(udev, pipe, setup, length, buffer); + while(soft_reset_attempt > 0) + { + ret = xhci_ctrl_tx(udev, pipe, setup, length, buffer); + if (ret == -EAGAIN) + soft_reset_attempt--; + else + return ret; + } + printf("control transfer is unsuccessful after %d attempts\n", SOFT_RESET_ATTEMPTS); + return ret; } static int xhci_lowlevel_init(struct xhci_ctrl *ctrl) diff --git a/include/usb/xhci.h b/include/usb/xhci.h index 4a4ac10229..9cc3bfaf3c 100644 --- a/include/usb/xhci.h +++ b/include/usb/xhci.h @@ -33,6 +33,8 @@ /* Section 5.3.3 - MaxPorts */ #define MAX_HC_PORTS 255 +#define SOFT_RESET_ATTEMPTS 3 + /* Up to 16 ms to halt an HC */ #define XHCI_MAX_HALT_USEC (16*1000)