diff options
author | Pali Rohár <pali@kernel.org> | 2021-02-07 14:50:07 +0100 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2021-03-03 04:12:46 +0100 |
commit | ea7125c4c6d25bbaf7927efc753357e64612bffb (patch) | |
tree | 01c5e66ea4afa119a43fbfd61e86fe6c956b8dbf | |
parent | 7d7ae28c8b568ff1db38f7520b8ae892b4d93eee (diff) | |
download | u-boot-ea7125c4c6d25bbaf7927efc753357e64612bffb.tar.gz |
usb: musb: Fix transmission of bigger buffers
If udc_endpoint_write() was called with bigger payload which does not fit
into one USB packet it is needed to transmit payload in more USB packets.
First packet is transmitted by udc_endpoint_write() call itself and other
packets are put into waiting queue.
Implement function musb_peri_tx() which checks if endpoints are ready for
transmit and continue transmission of waiting queue.
This patch fixes sending big output from printenv command over usbtty
serial console.
Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Acked-by: Pavel Machek <pavel@ucw.cz>>
-rw-r--r-- | drivers/usb/musb/musb_udc.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/usb/musb/musb_udc.c b/drivers/usb/musb/musb_udc.c index 67d1c56f9a..28719cc3f6 100644 --- a/drivers/usb/musb/musb_udc.c +++ b/drivers/usb/musb/musb_udc.c @@ -708,21 +708,16 @@ static void musb_peri_rx(u16 intr) static void musb_peri_tx(u16 intr) { + unsigned int ep; + /* Check for EP0 */ if (0x01 & intr) musb_peri_ep0_tx(); - /* - * Use this in the future when handling epN tx - * - * u8 ep; - * - * for (ep = 1; ep < 16; ep++) { - * if ((1 << ep) & intr) { - * / * handle tx for this endpoint * / - * } - * } - */ + for (ep = 1; ep < 16; ep++) { + if ((1 << ep) & intr) + udc_endpoint_write(GET_ENDPOINT(udc_device, ep)); + } } void udc_irq(void) |