From nobody Fri Apr 3 01:22:51 2026 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 998993B7B94 for ; Wed, 25 Mar 2026 10:33:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774434841; cv=none; b=tmi6URc7/rj8HkEUFgVIe64dA140uj2Nm/qVVVCkG79QiilKDpIFuRR3U+aBG2t1Mj/WKG+O1YZiOBWOph1ykGjTvrQt37jMZ3/A3T5lfRsRt7GvgMRPimGfSVozftUsO7GYsERBV4Wve8YuQYSm9QnB7HsF3pOaJJRNWZBTdgs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774434841; c=relaxed/simple; bh=c3wAjR9U75BJRTzVgmGzpvqlNAq0YjuFyvH0k91DE2E=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FuaQKSU7pAJebl2xfQWRpJICxaguJhI8NgMXsHiF4w1arrfJlQsllL+G6IU3nR2tec7iEmtgjCOzEVd0gilPkYCMgyeAZ3k4Bw+bQev8qA1EA/p/kDEsWVt7rQ0HmRGWWfBRVzEVcuFzEjne8WONr47YDuEro1XYelpYIAp6wlQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IkDRp4Ku; arc=none smtp.client-ip=209.85.208.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IkDRp4Ku" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-666f646f5cfso1227468a12.1 for ; Wed, 25 Mar 2026 03:33:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774434837; x=1775039637; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=xS5go8JPaCUs2K6BgRt95MJ82Od41gTawdoeEYv6y9o=; b=IkDRp4KuqKpyVmkN/hECq9PnY7jp/CPEljUJnClawL3Wy9qeznYVpqkdcwibYf/tZN 1TQ9npwVnt1EGu9p0buciYIdotyPP/LCOZbIoTT2BjwUBgXq29gywLq06VJxGyc2hY+Y YqkOruHy6EqDawgSmHWOtqIoeuMLgE1Bct5e0IH2SizC2O8QO8Bb1A5K3KB8rFT54z65 vQ54x6Tk+xIWPgyZUJFECQweKEcT3WxrXTUuWc/FnCUu+0dNVbNlndHLYI7fBGcV4V0Q 3xIi0mmx+bF/aj8KOCqG1sbx4TQdwCyFFZKVLaKBq3U21JQhCvBcyyxXwGbOXWgDyK1+ YS3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774434837; x=1775039637; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=xS5go8JPaCUs2K6BgRt95MJ82Od41gTawdoeEYv6y9o=; b=mGEiZQzF9XoagLFR6B8hoh6/E92A+sW7W9LGX24rCTRHhe9Mb4FCi+7fvYmkmEMPA6 Hz33Qu3qny74dsXjbXz0texSzWyRmMsTA9hmV7m7lb+VTsWEKJzNe28skj8dQuyT7uYu sHbwWEcM4Th7pI0cNinoBJXerInecOgImwVm5SNQey88EF/cdisdgXddY649qIiK8tt6 WIMZePciK99t8oR9X8FUccQ2uNJR7iJZOLwQNq7SlxcMNjcvnqFrAVuK/tgwr+eQ/5Z4 WZTAHwrMaBAKPwSUJ3vs9+wDLY6dwfSFoUVqZHIUo9RTP7f6FpmJxtU+OOB1sQ4C00py V6Cg== X-Forwarded-Encrypted: i=1; AJvYcCUj8PO52rNK5bAijV3knBOY2OrWxctg1vi1gzLgclfgcKSLQ+34TSFuOjo9ZaG0Uz4AYkyTqiF6DKFCa5A=@vger.kernel.org X-Gm-Message-State: AOJu0Ywy7sX1fXyGm6v4SBlrSZkJGSBj7yQzJDjqnGrhBs+/iRPplzHo 25L74huZqrF0ZK7nNpIcc6gWTUQEW4DA+QoT59gPkryBi/PwR4HJ6IDyoIh/4A== X-Gm-Gg: ATEYQzxxy3YDT24qQG61XjAvU6SF0XvKPBqwSUCzLiJFWOLj50bEnkKSzkmBTcnbBUk h5zvjCPnD9DOSNtrj+hoQcPJchVCbLvdWg2JWMHEHPH2lD/3FOA3m5nv527m++K01EWaH39EwaS 2ILlzv4KkEiHp1/v1rTYGk/h+DfKA+FjgjiqP1LYvCHSAeeC5QkM5yKX/ZfaZ2S7FjgkzNzlkzB JeqdaSs5lKD3dHh9zm7ewUUAQhkN4oIU4Z94r3d+ne+mjG71JaJlWYBfRySxaocd9W880OCHGmb 7kOE+FPUZoWKREQ+2/jUXUXDR42N/UGCd4rC2IPA8CNedTsjiD5QNu4vm55NDtQMFxri/aKHU09 N69YFKY3Vh2hKH7GS3i6zVn6FDPN89J3DxUDc8Vocidlm1A6F9F7Y4//KTXnXtn9HH8NViLxk4K HVJkCQ8rHIDtNK+/kHajV5f3R4ApLmFWWyqeQ= X-Received: by 2002:a17:907:982:b0:b97:5dc:3bd9 with SMTP id a640c23a62f3a-b99ae232b9amr182879166b.8.1774434836599; Wed, 25 Mar 2026 03:33:56 -0700 (PDT) Received: from foxbook (bfk214.neoplus.adsl.tpnet.pl. [83.28.48.214]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9832f43c3bsm771151966b.2.2026.03.25.03.33.55 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 25 Mar 2026 03:33:56 -0700 (PDT) Date: Wed, 25 Mar 2026 11:33:52 +0100 From: Michal Pecio To: Mathias Nyman Cc: Mathias Nyman , Greg Kroah-Hartman , Xu Rao , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] usb: xhci: Fix debugfs bandwidth reporting Message-ID: <20260325113352.62919c91.michal.pecio@gmail.com> In-Reply-To: <20260325113246.07681667.michal.pecio@gmail.com> References: <20260304114928.110be4c4.michal.pecio@gmail.com> <20260325113246.07681667.michal.pecio@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace kernel USB speed numbers with xHCI protocol IDs expected by HW. They are numerically equal up to high speed, but instead of SuperSpeed we were querying SuperSpeed+. Gen1 hardware rejects such commands with TRB Error, which resulted in zero available bandwidth being shown. While at that, report failures properly. No attempt made at "tunneling" all possible comp codes through errno, debugfs users may inspect the result through event-ring/trbs. Signed-off-by: Michal Pecio --- New in v2: - print an error string instead of returning -EIO - document known and sometimes unobvious error cases drivers/usb/host/xhci-debugfs.c | 10 +++++++--- drivers/usb/host/xhci.c | 9 ++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/usb/host/xhci-debugfs.c b/drivers/usb/host/xhci-debugf= s.c index 6cc0f60da771..da528d07b815 100644 --- a/drivers/usb/host/xhci-debugfs.c +++ b/drivers/usb/host/xhci-debugfs.c @@ -703,6 +703,10 @@ static int xhci_port_bw_show(struct xhci_hcd *xhci, u8= dev_speed, seq_printf(s, "port[%d] available bw: %d%%.\n", i, ctx->bytes[i]); err_out: + if (ret =3D=3D -EIO) { + seq_puts(s, "Get Port Bandwidth failed\n"); + ret =3D 0; + } pm_runtime_put_sync(dev); xhci_free_port_bw_ctx(xhci, ctx); return ret; @@ -713,7 +717,7 @@ static int xhci_ss_bw_show(struct seq_file *s, void *un= used) int ret; struct xhci_hcd *xhci =3D (struct xhci_hcd *)s->private; =20 - ret =3D xhci_port_bw_show(xhci, USB_SPEED_SUPER, s); + ret =3D xhci_port_bw_show(xhci, DEV_PORT_SPEED(XDEV_SS), s); return ret; } =20 @@ -722,7 +726,7 @@ static int xhci_hs_bw_show(struct seq_file *s, void *un= used) int ret; struct xhci_hcd *xhci =3D (struct xhci_hcd *)s->private; =20 - ret =3D xhci_port_bw_show(xhci, USB_SPEED_HIGH, s); + ret =3D xhci_port_bw_show(xhci, DEV_PORT_SPEED(XDEV_HS), s); return ret; } =20 @@ -731,7 +735,7 @@ static int xhci_fs_bw_show(struct seq_file *s, void *un= used) int ret; struct xhci_hcd *xhci =3D (struct xhci_hcd *)s->private; =20 - ret =3D xhci_port_bw_show(xhci, USB_SPEED_FULL, s); + ret =3D xhci_port_bw_show(xhci, DEV_PORT_SPEED(XDEV_FS), s); return ret; } =20 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index e6edafdfcdb4..c86819afdede 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -3262,7 +3262,12 @@ void xhci_reset_bandwidth(struct usb_hcd *hcd, struc= t usb_device *udev) } EXPORT_SYMBOL_GPL(xhci_reset_bandwidth); =20 -/* Get the available bandwidth of the ports under the xhci roothub */ +/* + * Get the available bandwidth of the ports under the xhci roothub. + * EIO means the command failed: command not implemented or unsupported + * speed (TRB Error), some ASMedia complete with Parameter Error when + * querying the root hub (slot_id =3D 0), or other error or timeout. + */ int xhci_get_port_bandwidth(struct xhci_hcd *xhci, struct xhci_container_c= tx *ctx, u8 dev_speed) { @@ -3291,6 +3296,8 @@ int xhci_get_port_bandwidth(struct xhci_hcd *xhci, st= ruct xhci_container_ctx *ct spin_unlock_irqrestore(&xhci->lock, flags); =20 wait_for_completion(cmd->completion); + if (cmd->status !=3D COMP_SUCCESS) + ret =3D -EIO; err_out: kfree(cmd->completion); kfree(cmd); --=20 2.48.1