From nobody Tue Sep 2 09:38:05 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4cGLJY3dvKz66MgW; Tue, 02 Sep 2025 09:38:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cGLJY2zQ5z46sr; Tue, 02 Sep 2025 09:38:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1756805885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=0OZip8yfT2kdA8D5BIeSnBL9D9UQ/cQd1uXoWQswLQ0=; b=BTdgjwzt3Iug6FEIHElzlt8XW9pwMU5XHbEdRwvYWCzjlmmg6i64GI57ybH+ekaQnSxPWU FUbVOW3QyGEZBh4OwkFKUGfRB1URdMJXdlPU6QVhC1aQEHAATI1YXzcm7rbTaC33uuVriM 9NEoLUytAU2hWS9XHo25hxgODwJ4aa1H9cVxUW1i5k3d5Lj/xWARaVIIArSPxATR8Kd11K TlYkRgWq2WC/S69YcgJR3Vt+thteIdrG9VDufTYrbyl5fO+62WJ+kTl5xLCB9+X5zq4K0G qB8HdXWZGtSGTr1AJG2aFJMHwal7m8nYJgYWrjnzUJ+AXlpzKi8r8CPy3wjtJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1756805885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=0OZip8yfT2kdA8D5BIeSnBL9D9UQ/cQd1uXoWQswLQ0=; b=YpLTdfuIWH/Rxee01QDVaO+18IArWDGBruiYc2H/sXCSOM2j+s8WGLnnUDIfOPepHiGNCm dCydS0ueaba2Yro4jeERZ2BtS58UGyTNKera6SEIpZfeau3C+NCav9QE2g7hdy1lAOoMgj D0xsolFxLVPdrjUJY2FTR6M7brX6qQC7gW6ojI/hch/GYPNhaL7ONs9VNPa7AEmm+iQkhz 5UVJrXkRYa3UiWbUlgu7JERey2A3w3605amp7xM25j5Elyyvf0oqtPhmADrfViXPVsjFxK vc6KdpeJ40yapiRtiBbPpgaIdQxLQQME+uf1qVOEdPJrovT/QrYj8AHR7Qi/TQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1756805885; a=rsa-sha256; cv=none; b=nlIU6n6FhblSo7gelTMxzyqNoehDEGKjjrQGSXdNALbNwNUzWzJGrNYSx07CpLdF5Lk6OE 6KJItBSXv3C/Z16f6piEHyhwTVRY6BUrm7QGPT0mayQsSu0NUZNUKrDF4JToi8bMnP3n40 066wDX2c7nVFGTEFP3W5ByIZT3vQh+nxfy8bX4/4G7DdSGMzSLgTBJv8nwwNf6n7DxHJ0U q1sKfuSXPZcYzWQEtUelwJdffpXzzi/I/kU5WbUHETHAdNMIRTEKtVxKMVaIGtp3/ruB24 xUz/iYjrF9UJFrTh0aM6ofvNtifDRm7TtMIhvtb4Ev3nFVs/8Rn5vTeO7E43gg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4cGLJY2YVzzhFb; Tue, 02 Sep 2025 09:38:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 5829c5hK015415; Tue, 2 Sep 2025 09:38:05 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5829c5Sl015412; Tue, 2 Sep 2025 09:38:05 GMT (envelope-from git) Date: Tue, 2 Sep 2025 09:38:05 GMT Message-Id: <202509020938.5829c5Sl015412@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Tom Jones Subject: git: 405cfeef615f - main - xhci: Parse and print extended capabilities List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: thj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 405cfeef615f5493b49b6ab4619fa29dfe37fd7d Auto-Submitted: auto-generated The branch main has been updated by thj: URL: https://cgit.FreeBSD.org/src/commit/?id=405cfeef615f5493b49b6ab4619fa29dfe37fd7d commit 405cfeef615f5493b49b6ab4619fa29dfe37fd7d Author: Tom Jones AuthorDate: 2025-07-14 08:07:20 +0000 Commit: Tom Jones CommitDate: 2025-09-02 09:37:08 +0000 xhci: Parse and print extended capabilities Parse out and display xhci controller extended capabilities. This gives us a mechanism to pick these up when the controller attaches. The print helps users and developer know the availability of features in the wild. This change will let developers know from dmesg that a controller supports USB debugging. Reviewed by: aokblast Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D51255 --- sys/dev/usb/controller/xhci.c | 85 ++++++++++++++++++++++++++++++++++++++++ sys/dev/usb/controller/xhcireg.h | 5 +++ 2 files changed, 90 insertions(+) diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c index 5be592512196..788b2b718062 100644 --- a/sys/dev/usb/controller/xhci.c +++ b/sys/dev/usb/controller/xhci.c @@ -156,6 +156,7 @@ struct xhci_std_temp { static void xhci_do_poll(struct usb_bus *); static void xhci_device_done(struct usb_xfer *, usb_error_t); +static void xhci_get_xecp(struct xhci_softc *); static void xhci_root_intr(struct xhci_softc *); static void xhci_free_device_ext(struct usb_device *); static struct xhci_endpoint_ext *xhci_get_endpoint_ext(struct usb_device *, @@ -566,6 +567,8 @@ xhci_init(struct xhci_softc *sc, device_t self, uint8_t dma32) device_printf(self, "%d bytes context size, %d-bit DMA\n", sc->sc_ctx_is_64_byte ? 64 : 32, (int)sc->sc_bus.dma_bits); + xhci_get_xecp(sc); + /* enable 64Kbyte control endpoint quirk */ sc->sc_bus.control_ep_quirk = (xhcictlquirk ? 1 : 0); @@ -653,6 +656,88 @@ xhci_uninit(struct xhci_softc *sc) sx_destroy(&sc->sc_cmd_sx); } +static void +xhci_get_xecp(struct xhci_softc *sc) +{ + + uint32_t hccp1; + uint32_t eec; + uint32_t eecp; + bool first = true; + + hccp1 = XREAD4(sc, capa, XHCI_HCSPARAMS0); + + if (XHCI_HCS0_XECP(hccp1) == 0) { + device_printf(sc->sc_bus.parent, + "xECP: no capabilities found\n"); + return; + } + + /* + * Parse the xECP Capabilities table and print known caps. + * Implemented, vendor and reserved xECP Capabilities values are + * documented in Table 7.2 of eXtensible Host Controller Interface for + * Universal Serial Bus (xHCI) Rev 1.2b 2023. + */ + device_printf(sc->sc_bus.parent, "xECP capabilities <"); + + eec = -1; + for (eecp = XHCI_HCS0_XECP(hccp1) << 2; + eecp != 0 && XHCI_XECP_NEXT(eec) != 0; + eecp += XHCI_XECP_NEXT(eec) << 2) { + eec = XREAD4(sc, capa, eecp); + + uint8_t xecpid = XHCI_XECP_ID(eec); + + if ((xecpid >= 11 && xecpid <= 16) || + (xecpid >= 19 && xecpid <= 191)) { + if (!first) + printf(","); + printf("RES(%x)", xecpid); + } else if (xecpid > 191) { + if (!first) + printf(","); + printf("VEND(%x)", xecpid); + } else { + if (!first) + printf(","); + switch (xecpid) + { + case XHCI_ID_USB_LEGACY: + printf("LEGACY"); + break; + case XHCI_ID_PROTOCOLS: + printf("PROTO"); + break; + case XHCI_ID_POWER_MGMT: + printf("POWER"); + break; + case XHCI_ID_VIRTUALIZATION: + printf("VIRT"); + break; + case XHCI_ID_MSG_IRQ: + printf("MSG IRQ"); + break; + case XHCI_ID_USB_LOCAL_MEM: + printf("LOCAL MEM"); + break; + case XHCI_ID_USB_DEBUG: + printf("DEBUG"); + break; + case XHCI_ID_EXT_MSI: + printf("EXT MSI"); + break; + case XHCI_ID_USB3_TUN: + printf("TUN"); + break; + + } + } + first = false; + } + printf(">\n"); +} + static void xhci_set_hw_power_sleep(struct usb_bus *bus, uint32_t state) { diff --git a/sys/dev/usb/controller/xhcireg.h b/sys/dev/usb/controller/xhcireg.h index 9d0b6e2f4b4b..821897155544 100644 --- a/sys/dev/usb/controller/xhcireg.h +++ b/sys/dev/usb/controller/xhcireg.h @@ -205,6 +205,11 @@ #define XHCI_ID_VIRTUALIZATION 0x0004 #define XHCI_ID_MSG_IRQ 0x0005 #define XHCI_ID_USB_LOCAL_MEM 0x0006 +/* values 7-9 are reserved */ +#define XHCI_ID_USB_DEBUG 0x000a +/* values 11-16 are reserved */ +#define XHCI_ID_EXT_MSI 0x0011 +#define XHCI_ID_USB3_TUN 0x0012 /* XHCI register R/W wrappers */ #define XREAD1(sc, what, a) \