This is required by the USB Specs.
Also dump the fifo for debug purpose.
Signed-off-by: Bin Liu <[email protected]>
---
v2:
- Modification based on Felipe's comments
* Added commit log;
* Wrapped dump fifo function with #ifdef DEBUG;
* Used static buffer for dump;
* Changed dump level to KERN_DEBUG;
- Changed the dump fifo function to inline;
- Set MUSB_CSR0_P_DATAEND bit to avoid confusing log;
drivers/usb/musb/musb_gadget_ep0.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/musb/musb_gadget_ep0.c
b/drivers/usb/musb/musb_gadget_ep0.c
index 2af45a0..af9e7de 100644
--- a/drivers/usb/musb/musb_gadget_ep0.c
+++ b/drivers/usb/musb/musb_gadget_ep0.c
@@ -658,6 +658,23 @@ __acquires(musb->lock)
return retval;
}
+/* dump the EP0 fifo for debug */
+static inline void musb_g_ep0_dump_fifo(struct musb *musb, int len)
+{
+#ifdef DEBUG
+#define BUF_LEN 16
+
+ u8 buf[BUF_LEN];
+
+ if (len <= 0)
+ return;
+
+ musb->ops->read_fifo(&musb->endpoints[0], min(len, BUF_LEN), buf);
+ print_hex_dump(KERN_DEBUG, "packet: ", DUMP_PREFIX_NONE,
+ 16, 1, buf, len, false);
+#endif /* DEBUG */
+}
+
/*
* Handle peripheral ep0 interrupt
*
@@ -802,7 +819,16 @@ setup:
if (len != 8) {
ERR("SETUP packet len %d != 8 ?\n", len);
- break;
+ musb_g_ep0_dump_fifo(musb, len);
+ /*
+ * set the DATAEND bit here to
+ * help avoid SetupEnd interrupt coming
+ * in the idle stage when we're stalling...
+ */
+ musb->ackpend = MUSB_CSR0_P_SVDRXPKTRDY |
+ MUSB_CSR0_P_DATAEND;
+ retval = IRQ_HANDLED;
+ goto stall;
}
musb_read_setup(musb, &setup);
retval = IRQ_HANDLED;
--
1.8.4
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html