From nobody Sun Apr 30 06:57:54 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 4Q8HGp5FKgz48sLl; Sun, 30 Apr 2023 06:57:54 +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 4Q8HGp4SWkz3MqM; Sun, 30 Apr 2023 06:57:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682837874; 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=6QoMzT1rQuAR6PrLFqMqMiizP9XnbfxPXfKhDvaHqGA=; b=htkvv+86AUKjwkmLeqeFv8QWgrSuMhYXGmJgzjdYX931mys4SDU6PBFNkb4PzOJ0fXKNO1 wzMA9neyFlFEtS/38kGMXy4KMbpfbnvje+Lf59n/TZFR3H+/Rok6CiE65YwyLoGeAtFSDd Ddbwi1u5O8EtMZ4Jl1i4w98dgAhdJ8HRUe+MD4+gvW2WCBdhFmlnIRT9LtrXGqzJ77gVEK VS15wbV36u7G2ruYsiy/8oXRqN9jevmYXAdQSJN4A4wB1U6taZAmaFRSljlINrTQai8K+S vqx6qMzmFWq7ov8biGVCfM8yTXrnYPA2XgCJNKjITJKtvwooVT55v5eLGJ1xvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682837874; 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=6QoMzT1rQuAR6PrLFqMqMiizP9XnbfxPXfKhDvaHqGA=; b=tl5ryp195kpJaGVDS/KhNR0HAImpY+84zo7kL6UagUMQyqvDCEKzwPGIyTGb8PAxNdR9yb iJstNdmMImGuLuS4AkEddjs3rZIeA0oizfiPM9H3ctg3PeEA+BpJQX3MGXTOYPOlBLMKx5 hAob8Z2eQbxplgegqbjPVhmh+rzAs8MpHLEA+h/QayFKMJ4KYjsmHLPS2bS3qb9Xb9y6c1 o89SrH5AqtPAZgRYPBPEDdoqbsNzZfN4DvPOe/9CpQJbdfdvlUSOjNZAJrrLfoPt4W+9ys 7CAygWJUqG3gGRltVKiVqLWxWrnPCxircoYI/OgXZ6iFRJJBwWl2Nw5wJs4RIQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1682837874; a=rsa-sha256; cv=none; b=OH0ms/+DxQv9FmAQdubl2z2WE1bagvf2wGaU5kz63vZ2qhbcBuNvXSPBo9OMNBkyIoT/48 r9hCNdzrpLjpInkGwYfXudVDyYS0XaJmo329pxbN6PXo7gylP+a+sprKMSJ7/7i/0GU2m4 4CayVA4cTV/kJS9HTgqNuILNgYVy3ahiL3OTH24a6gB/doUdBFcIZ+Ug1gut2kCsrI9i9I h46Cy+rz41B+AkeB+Zgjs4cXN6RTzchIqyvXzmPMb/3y0/Kyf4BmsXlMKx3KlRSJkfD8sQ lyJjUu7JaJW0uijrf7+RL42EQ/isafwkkkEJWqGNtsSXPwo/M2qUcc3haNvxtw== 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 4Q8HGp3P4pzDg1; Sun, 30 Apr 2023 06:57:54 +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 33U6vspC071561; Sun, 30 Apr 2023 06:57:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 33U6vsKU071560; Sun, 30 Apr 2023 06:57:54 GMT (envelope-from git) Date: Sun, 30 Apr 2023 06:57:54 GMT Message-Id: <202304300657.33U6vsKU071560@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: 4c57e83e7b6b - stable/13 - usb: dwc3: implement hw.usb.xhci.use_polling 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: 4c57e83e7b6b4027546844daa3d81484f2b603a6 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by hselasky: URL: https://cgit.FreeBSD.org/src/commit/?id=4c57e83e7b6b4027546844daa3d81484f2b603a6 commit 4c57e83e7b6b4027546844daa3d81484f2b603a6 Author: Kyle Evans AuthorDate: 2023-02-28 01:59:43 +0000 Commit: Hans Petter Selasky CommitDate: 2023-04-30 06:56:17 +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 (cherry picked from commit 5e54bb1ea9e904075225dc96641c2ede3fc3273c) --- 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 d5e3b3f50a9d..b99d74625022 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);