uslcom(4): Clear stall at every open.

To avoid data loss, make sure both the receive and transmit data toggles
get reset, before trying to read or write any data.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
This commit is contained in:
Hans Petter Selasky 2022-10-05 16:45:21 +02:00
parent 84e8678870
commit 9e0edafe92

View File

@ -439,12 +439,6 @@ uslcom_attach(device_t dev)
"error=%s\n", usbd_errstr(error));
goto detach;
}
/* clear stall at first run */
mtx_lock(&sc->sc_mtx);
usbd_xfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_WR]);
usbd_xfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_RD]);
mtx_unlock(&sc->sc_mtx);
sc->sc_partnum = uslcom_get_partnum(sc);
error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc,
@ -514,6 +508,10 @@ uslcom_cfg_open(struct ucom_softc *ucom)
DPRINTF("UART enable failed (ignored)\n");
}
/* clear stall */
usbd_xfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_WR]);
usbd_xfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_RD]);
/* start polling status */
uslcom_watchdog(sc);
}