From nobody Tue Feb 28 22:17:07 2023 X-Original-To: dev-commits-src-all@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 4PRBYb3fYMz3v0v3; Tue, 28 Feb 2023 22:17:07 +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 4PRBYb392mz47q7; Tue, 28 Feb 2023 22:17:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1677622627; 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=JCVsCBvri0Com9IdLxEqblo5QGWE1nHKnVjkP3UHCvc=; b=p5wHnrAM3IXNiSyy+vPyqEpKnqwmyB3DRbnNmYrHAr0o6aYIiajEVSkT8pkSaXEnosckeW r+Dul4FURINxcVd/4vdFKA/kmnpjKF+5HrPYTy8xYhv3rVEH7DuOZbeFMXMWlWVzMA+9zO CdyGTAxjtY/2NVhpJApRU0B1LPICK0mKamaPSEzAz1bZHL4y7E/dgx2lRq5WgLhGYstBKt u6KECh+EIIRzm6pX5mdgecXVefdpC3oDHlm+mjtdV8ZJH/eA2rrgCCpbgFeF7D4DjeWltC 4KdHNP4uEyVtoUc1A7f6MEfC76TqSox+yXG1lErpFJEpaWkV31c7Wy6XRQ5QVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1677622627; 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=JCVsCBvri0Com9IdLxEqblo5QGWE1nHKnVjkP3UHCvc=; b=egcCj7eSg3YXlTCfqnUnwPsx1PAR0Yd8JhK16zMrmL6y0+6libIfih1aIk/FzNfMv3VT/Q fNgbZW1oYgNloH7/V6SywZAiflfDL65ceW+hxbFCh+I1mjtD3EOx2Jh13y30zEYzyskFyF tDRAT/pP/vIJuBprpAyoD+DFt6ZvKi2kAQ1yAIoaN/1CPu1INnaWuzTQD3qbNsxrTaLTnj bvbk2bBlAlzPBeiPwNUIlsFDyy7/mgneCySIluCYBq5ocFoiK0/eIxVB4XEeE1c6yqr8i4 L43SBrl5eAv1HITdOK/TaxlZH8Il5hvjSZfgM42liQZ0N2LctC1JdNMqpM2Efg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1677622627; a=rsa-sha256; cv=none; b=JlsdP4xM/+/skoYRtdlDJln+GZ+aTxrX6l9iHC4mKBuNwxWl9cqq5My1NS0zxcfnf3fVv2 Y8Z4zJBbQnJM2/s0edPLVxHnTkdAaL2ul3Rt+6oss5eQTxyvpLP+LoTHnDAWBTJBYQ13v/ tJueJ3ci9GDGcYrNlFZOygmeP2J4LXBiB6UeWBBf1lLakX22IZkNM3VRZ+/LjIsflHDD5P 6Z+O25t0EarMbDWqozAflJTZ1UtBLm9gwrHkAmixR6rb00GqWHl/PLIHvnyjaRbigNm2ui vcRTsHHZfVCLBapIVB96lv4aVUAOnBRJmv4iPpLRLjo7/twIms7o/qrvlOLOHg== 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 4PRBYb2GKtz1PFH; Tue, 28 Feb 2023 22:17:07 +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 31SMH7ii095817; Tue, 28 Feb 2023 22:17:07 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 31SMH7SC095816; Tue, 28 Feb 2023 22:17:07 GMT (envelope-from git) Date: Tue, 28 Feb 2023 22:17:07 GMT Message-Id: <202302282217.31SMH7SC095816@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 5e54bb1ea9e9 - main - usb: dwc3: implement hw.usb.xhci.use_polling List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5e54bb1ea9e904075225dc96641c2ede3fc3273c Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=5e54bb1ea9e904075225dc96641c2ede3fc3273c commit 5e54bb1ea9e904075225dc96641c2ede3fc3273c Author: Kyle Evans AuthorDate: 2023-02-28 01:59:43 +0000 Commit: Kyle Evans CommitDate: 2023-02-28 22:16:14 +0000 usb: dwc3: implement hw.usb.xhci.use_polling Polling is currently only implemented in the xhci pci attachment. Adding it to dwc3 doesn't make it much uglier, and supporting it can be useful for confirming that hardware's otherwise functional when interrupts are apparently not firing. Reviewed by: manu Differential Revision: https://reviews.freebsd.org/D38816 --- sys/dev/usb/controller/dwc3.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/sys/dev/usb/controller/dwc3.c b/sys/dev/usb/controller/dwc3.c index 361db0f5e835..dc5c90df0d72 100644 --- a/sys/dev/usb/controller/dwc3.c +++ b/sys/dev/usb/controller/dwc3.c @@ -103,6 +103,17 @@ struct snps_dwc3_softc { #define IS_DMA_32B 1 +static void +xhci_interrupt_poll(void *_sc) +{ + struct xhci_softc *sc = _sc; + + USB_BUS_UNLOCK(&sc->sc_bus); + xhci_interrupt(sc); + USB_BUS_LOCK(&sc->sc_bus); + usb_callout_reset(&sc->sc_callout, 1, (void *)&xhci_interrupt_poll, sc); +} + static int snps_dwc3_attach_xhci(device_t dev) { @@ -133,12 +144,14 @@ snps_dwc3_attach_xhci(device_t dev) sprintf(sc->sc_vendor, "Synopsys"); device_set_desc(sc->sc_bus.bdev, "Synopsys"); - err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, - NULL, (driver_intr_t *)xhci_interrupt, sc, &sc->sc_intr_hdl); - if (err != 0) { - device_printf(dev, "Failed to setup IRQ, %d\n", err); - sc->sc_intr_hdl = NULL; - return (err); + if (xhci_use_polling() == 0) { + err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)xhci_interrupt, sc, &sc->sc_intr_hdl); + if (err != 0) { + device_printf(dev, "Failed to setup IRQ, %d\n", err); + sc->sc_intr_hdl = NULL; + return (err); + } } err = xhci_init(sc, dev, IS_DMA_32B); @@ -147,6 +160,15 @@ snps_dwc3_attach_xhci(device_t dev) return (ENXIO); } + usb_callout_init_mtx(&sc->sc_callout, &sc->sc_bus.bus_mtx, 0); + + if (xhci_use_polling() != 0) { + device_printf(dev, "Interrupt polling at %dHz\n", hz); + USB_BUS_LOCK(&sc->sc_bus); + xhci_interrupt_poll(sc); + USB_BUS_UNLOCK(&sc->sc_bus); + } + err = xhci_start_controller(sc); if (err != 0) { device_printf(dev, "Failed to start XHCI controller, with error %d\n", err);