summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2015-01-19 07:18:59 +0000
committerhselasky <hselasky@FreeBSD.org>2015-01-19 07:18:59 +0000
commit544eb7ca086177ee94d5fd95014daa503f678669 (patch)
tree1d8ba09cedecf95825ed0ab522cc065bfca1c955 /sys/dev
parent5f3d7c27fb5899fbf2e40a5a0cc6eee2d1e84c30 (diff)
downloadFreeBSD-src-544eb7ca086177ee94d5fd95014daa503f678669.zip
FreeBSD-src-544eb7ca086177ee94d5fd95014daa503f678669.tar.gz
MFC r276798:
Fix handling of an error case when the MUSB driver is operating in USB device side mode.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/usb/controller/musb_otg.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/dev/usb/controller/musb_otg.c b/sys/dev/usb/controller/musb_otg.c
index 091e471..98dc622 100644
--- a/sys/dev/usb/controller/musb_otg.c
+++ b/sys/dev/usb/controller/musb_otg.c
@@ -401,7 +401,7 @@ musbotg_dev_ctrl_setup_rx(struct musbotg_td *td)
/* do not stall at this point */
td->did_stall = 1;
/* wait for interrupt */
- DPRINTFN(0, "CSR0 DATAEND\n");
+ DPRINTFN(1, "CSR0 DATAEND\n");
goto not_complete;
}
@@ -423,32 +423,37 @@ musbotg_dev_ctrl_setup_rx(struct musbotg_td *td)
sc->sc_ep0_busy = 0;
}
if (sc->sc_ep0_busy) {
- DPRINTFN(0, "EP0 BUSY\n");
+ DPRINTFN(1, "EP0 BUSY\n");
goto not_complete;
}
if (!(csr & MUSB2_MASK_CSR0L_RXPKTRDY)) {
goto not_complete;
}
- /* clear did stall flag */
- td->did_stall = 0;
/* get the packet byte count */
count = MUSB2_READ_2(sc, MUSB2_REG_RXCOUNT);
/* verify data length */
if (count != td->remainder) {
- DPRINTFN(0, "Invalid SETUP packet "
+ DPRINTFN(1, "Invalid SETUP packet "
"length, %d bytes\n", count);
MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL,
MUSB2_MASK_CSR0L_RXPKTRDY_CLR);
+ /* don't clear stall */
+ td->did_stall = 1;
goto not_complete;
}
if (count != sizeof(req)) {
- DPRINTFN(0, "Unsupported SETUP packet "
+ DPRINTFN(1, "Unsupported SETUP packet "
"length, %d bytes\n", count);
MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL,
MUSB2_MASK_CSR0L_RXPKTRDY_CLR);
+ /* don't clear stall */
+ td->did_stall = 1;
goto not_complete;
}
+ /* clear did stall flag */
+ td->did_stall = 0;
+
/* receive data */
bus_space_read_multi_1(sc->sc_io_tag, sc->sc_io_hdl,
MUSB2_REG_EPFIFO(0), (void *)&req, sizeof(req));
OpenPOWER on IntegriCloud