From nobody Sun Apr 30 06:57:51 2023 X-Original-To: dev-commits-src-branches@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 4Q8HGl5S2Yz48s72; Sun, 30 Apr 2023 06:57:51 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Q8HGl2S5nz3MfN; Sun, 30 Apr 2023 06:57:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682837871; 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=UJCrCsVyy0Zr4wovKx5GH++Rhwabb+M3ounq2m0FqgM=; b=qNEhoW0fLw3V41oWyASDIC8ywModj5fQwamNNDET8/BbaeR7ozwb4N8+KtLEVUFXWX3nGd P3UdXHv939F5LjsCoTF2Z2tliDiukoXnDiTbeLMv/6ffa4I37yXFZwEqkqgnl6mwEEl9eY 5kAFuA1mleQQDDIKhGFgKB5zXOyPOnv87W8BqIkFuWsjN/8gXnwi6nvpagxAMCVVQDhWNM OcOx7ZkE32CYVEHYQQ86QyIvkMkAelIuae5nFXpsDTAMv/Km5hzUzOzK1UjzSzx78chskx b/KDyYhOKnPopOga9kb8sd4VCVaQFjpQOeLmEh/CaLXlX+R0FbGvrpn3aP4klQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682837871; 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=UJCrCsVyy0Zr4wovKx5GH++Rhwabb+M3ounq2m0FqgM=; b=TC30t//BK4R2AGxcqZi0isyURp6/klSDRzNEHDcqf87Rdsdl86lGJQB5El5BH618nnh9Bw IcqDpi8SOY1AFqSjxJKkJlGF47mMD4yv0MBIRRILeTDnUDaM33bZo3NBtV7kgASrm9zXMV ukq9XeMy9KgjeV6e3MDps1+Mt+lzIjjicYQljuhKxVx0Zpn86lJZPo2s3gUq2Au1vjQLt0 r2RUZV28/j/NC/buTBu2/bqEs8Y+k/PibD73O29ybVr3833SS3U/mor052E9y0udAzPuuR msNAIvUn1GwO5DgAF23LsWndicWdYXZ2LcaqAiox+JHXl+5pGL/HTYTGl8XQSg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1682837871; a=rsa-sha256; cv=none; b=oGZlxmrEFQ4qP9ziv02+K+aaaHiKN93xIcTwufqxaOmhH28t0sO6edLJfa200daqBLP3nb tjxY3aUjl4Z0BvFAA4+1EYT4/IAcykN806LcleXVTtPq50AgpFe05sOn5yL/oys2rveVdV WOVrIG4nko5Zsz2sbAZLh5o1VaJcsZx85RkkADxQLQD4qocF05wfpBD80zkXMQloyThMaW dom29iAX2shQF3jgC0d2OhIqyk39PX3j8MwOaJBxPe9YyQK8oSjWEsm/OWSdb9JiNN5i3B wRld53txDCKYoC5xwfYomvrF3VC56JppZol0Shw+6VdfO1mwqQYm35XYrC/o+A== 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 4Q8HGl1KdKz1Crf; Sun, 30 Apr 2023 06:57:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 33U6vpW6071493; Sun, 30 Apr 2023 06:57:51 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 33U6vpiO071491; Sun, 30 Apr 2023 06:57:51 GMT (envelope-from git) Date: Sun, 30 Apr 2023 06:57:51 GMT Message-Id: <202304300657.33U6vpiO071491@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Hans Petter Selasky Subject: git: 3b7149c7c32a - stable/13 - xhci(4): Make sure allocated bandwidth is freed in hardware by unconfiguring endpoint. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: hselasky X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 3b7149c7c32aa5f7c2a6c6b539fe40c2b4d95cf0 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by hselasky: URL: https://cgit.FreeBSD.org/src/commit/?id=3b7149c7c32aa5f7c2a6c6b539fe40c2b4d95cf0 commit 3b7149c7c32aa5f7c2a6c6b539fe40c2b4d95cf0 Author: Cheng, Huiming AuthorDate: 2022-12-15 22:30:11 +0000 Commit: Hans Petter Selasky CommitDate: 2023-04-30 06:56:16 +0000 xhci(4): Make sure allocated bandwidth is freed in hardware by unconfiguring endpoint. Sponsored by: NVIDIA Networking (cherry picked from commit 8685d7b5cb759b4f688dea93dbe1c38f9e833e4e) --- sys/dev/usb/controller/xhci.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c index 17458e7d47dc..02a9a37fbd2d 100644 --- a/sys/dev/usb/controller/xhci.c +++ b/sys/dev/usb/controller/xhci.c @@ -4080,7 +4080,47 @@ xhci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc, static void xhci_ep_uninit(struct usb_device *udev, struct usb_endpoint *ep) { + struct xhci_softc *sc = XHCI_BUS2SC(udev->bus); + const struct usb_endpoint_descriptor *edesc = ep->edesc; + struct usb_page_search buf_inp; + struct usb_page_cache *pcinp; + uint32_t mask; + uint8_t index; + uint8_t epno; + usb_error_t err; + + if (udev->parent_hub == NULL) { + /* root HUB has special endpoint handling */ + return; + } + + if ((edesc->bEndpointAddress & UE_ADDR) == 0) { + /* control endpoint is never unconfigured */ + return; + } + XHCI_CMD_LOCK(sc); + index = udev->controller_slot_id; + epno = XHCI_EPNO2EPID(edesc->bEndpointAddress); + mask = 1U << epno; + + if (sc->sc_hw.devs[index].ep_configured & mask) { + USB_BUS_LOCK(udev->bus); + xhci_configure_mask(udev, mask, 1); + USB_BUS_UNLOCK(udev->bus); + + pcinp = &sc->sc_hw.devs[index].input_pc; + usbd_get_page(pcinp, 0, &buf_inp); + err = xhci_cmd_configure_ep(sc, buf_inp.physaddr, 0, index); + if (err) { + DPRINTF("Unconfiguring endpoint failed: %d\n", err); + } else { + USB_BUS_LOCK(udev->bus); + sc->sc_hw.devs[index].ep_configured &= ~mask; + USB_BUS_UNLOCK(udev->bus); + } + } + XHCI_CMD_UNLOCK(sc); } static void