From nobody Tue Aug 30 14:04:20 2022 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 4MH8F127bWz4bJfS; Tue, 30 Aug 2022 14:04:21 +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 4MH8F10nQbz3nMg; Tue, 30 Aug 2022 14:04:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1661868261; 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=Igp7H+txAA2tdTpaYan8iT7StWvoX06s+SrrwtJZvuU=; b=RohR69bA3L0mtqDvu3l1/HeNNKnwFAjCLTb2Tt0Fjfc7tV77wx4s8emF5lkZFn+sNazK3H Mims6fQeIiOPkeLKhC4JQn27AIWAqdW65chhUCDjpx1w6hA5R7N8cPebESqmZ4r26tMMeQ JwV+R5Q9IF0WpE5OdCu5JswKEl7g6YraWiF0eKIV9c7wAq+NDMJYbwB1SKgIMRtJXCjzAj hqs8CBE1Cqf2qjTxzrSYsqWmw5EGbuMYWcXL/x3bETGyr7NuHS7LLPZNLsq1HF6wyXklZY NLs5KdOgjAWXHSSsUh8x5aFr9NjEkIU/7wADknG7o11Nq41fQlGwfrIyj11ubQ== 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 4MH8F06d0CznsD; Tue, 30 Aug 2022 14:04:20 +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 27UE4Kjt076760; Tue, 30 Aug 2022 14:04:20 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 27UE4K2P076759; Tue, 30 Aug 2022 14:04:20 GMT (envelope-from git) Date: Tue, 30 Aug 2022 14:04:20 GMT Message-Id: <202208301404.27UE4K2P076759@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Hans Petter Selasky Subject: git: 40e43b056df9 - main - umodem(4): Clear stall at every open. 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 40e43b056df9aa2392f673fcacc72725c2201658 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1661868261; 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=Igp7H+txAA2tdTpaYan8iT7StWvoX06s+SrrwtJZvuU=; b=WMjAr+MpYTw3Xm7wg/gFO27EZt7scWJYFE72P39yn8DgTSm/WEWTco+3Q0e+rrjcs/uBH4 pMd5PSR7LfdqUMw2AgMZqHuq9GIIQZwDit5LB1LrvV2NWLPTjhkOfdFVsyEnjKNuJkLoE2 9EcbvGWgZ0Jb/AJ2qjCM/cIm9ns0ARbJenPppTJPvKbMA9OU7WrSsu4rhVnx6I0Df6jZlc srUJzYg3tBbUkj4+Daob7RmhWT677LU9HKUIhLmLIrfUM1fKmHRVhELLavlvzAr+4AS48W +mBkIya1IeuRYdfaIIsqdORPu4k+QaIBYimwn7DZdlVXV1qGec402jJZxYaNvA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1661868261; a=rsa-sha256; cv=none; b=AO8yHoG8L0L9ZNHgQrJnqQPPLrXuQ5npaIzGBAkBrQZlGa93sOswNdsDt/WqTS8mc/ALHl vA6OdYVsUmXEFYRCPq8AhrrZCwlQYZfL6OXFVlXZVhuH9G0xpY0eYgCrepqUBQIZhM0Tgr GJkSwpB7BnnSufw51+vaKCsYePEGZFPwB8g/5j0E9VKDEp//mSBV5MY3jGQvQQdRQ4zoYg qL/9A11e70YLXlRpbIF7bk29BXc3bLO9WP3WtBByKwG1eQ8VEAOCIbVWxOXKfr+8IySh0Y Wp436Jo9mmRMVE6KirJEOYt88G1rPDR6nQTK7QZu5geas0Iebf+RSu6o4TwnWw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by hselasky: URL: https://cgit.FreeBSD.org/src/commit/?id=40e43b056df9aa2392f673fcacc72725c2201658 commit 40e43b056df9aa2392f673fcacc72725c2201658 Author: Hans Petter Selasky AuthorDate: 2022-08-30 14:01:43 +0000 Commit: Hans Petter Selasky CommitDate: 2022-08-30 14:02:47 +0000 umodem(4): Clear stall at every open. Some controllers like the XHCI(4) loose track of the data toggle value when USB receive transfers are cancelled at close. This in turn can lead to to data loss after the next open. To avoid data loss, make sure both the receive and transmit data toggles get reset, before trying to read or write any data. Differential Revision: https://reviews.freebsd.org/D36391 Submitted by: Dave Baukus MFC after: 1 week Sponsored by: NVIDIA Networking --- sys/dev/usb/serial/umodem.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/sys/dev/usb/serial/umodem.c b/sys/dev/usb/serial/umodem.c index 06f8dff74319..e9de2950fb9d 100644 --- a/sys/dev/usb/serial/umodem.c +++ b/sys/dev/usb/serial/umodem.c @@ -218,6 +218,7 @@ static void umodem_cfg_get_status(struct ucom_softc *, uint8_t *, uint8_t *); static int umodem_pre_param(struct ucom_softc *, struct termios *); static void umodem_cfg_param(struct ucom_softc *, struct termios *); +static void umodem_cfg_open(struct ucom_softc *); static int umodem_ioctl(struct ucom_softc *, uint32_t, caddr_t, int, struct thread *); static void umodem_cfg_set_dtr(struct ucom_softc *, uint8_t); @@ -283,6 +284,7 @@ static const struct ucom_callback umodem_callback = { .ucom_cfg_set_break = &umodem_cfg_set_break, .ucom_cfg_param = &umodem_cfg_param, .ucom_pre_param = &umodem_pre_param, + .ucom_cfg_open = &umodem_cfg_open, .ucom_ioctl = &umodem_ioctl, .ucom_start_read = &umodem_start_read, .ucom_stop_read = &umodem_stop_read, @@ -447,14 +449,6 @@ umodem_attach(device_t dev) goto detach; } - /* clear stall at first run, if USB host mode */ - if (uaa->usb_mode == USB_MODE_HOST) { - mtx_lock(&sc->sc_mtx); - usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_WR]); - usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_RD]); - mtx_unlock(&sc->sc_mtx); - } - ucom_set_usb_mode(&sc->sc_super_ucom, uaa->usb_mode); error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, @@ -633,6 +627,18 @@ umodem_cfg_param(struct ucom_softc *ucom, struct termios *t) &req, &ls, 0, 1000); } +static void +umodem_cfg_open(struct ucom_softc *ucom) +{ + struct umodem_softc *sc = ucom->sc_parent; + + /* clear stall, if in USB host mode */ + if ((sc->sc_super_ucom.sc_flag & UCOM_FLAG_DEVICE_MODE) == 0) { + usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_WR]); + usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_RD]); + } +} + static int umodem_ioctl(struct ucom_softc *ucom, uint32_t cmd, caddr_t data, int flag, struct thread *td)