On Fri, 5 Feb 2021 20:12:03 +0100 Pali Rohár <p...@kernel.org> wrote:
> If udc_endpoint_write() was called with bigger payload which does not > fit into one USB packet it needs to be transmitted 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 transmit checks when > endpoints are ready and continue transmitting of waiting queue. > > This patch fixes sending e.g. output of printenv command over usbtty > serial console. Reviewed-by: Lukasz Majewski <lu...@denx.de> > > Signed-off-by: Pali Rohár <p...@kernel.org> > --- > drivers/usb/musb/musb_udc.c | 17 ++++++----------- > 1 file 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) Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lu...@denx.de
pgpz1LTH9UfUj.pgp
Description: OpenPGP digital signature