From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [RESEND PATCH 08/16] usb: musb: Fix receiving of bigger buffers
Date: Sat, 6 Feb 2021 15:15:16 +0100 [thread overview]
Message-ID: <20210206151516.5bcb2349@jawa> (raw)
In-Reply-To: <20210205191212.7644-9-pali@kernel.org>
On Fri, 5 Feb 2021 20:12:04 +0100
Pali Roh?r <pali@kernel.org> wrote:
> If musb_peri_rx_ep() was called to processed received HW buffer but
> U-Boot cannot read it yet (e.g. because U-Boot SW buffer is full)
> then interrupt was marked as processed but HW buffer stayed
> unprocessed.
>
> U-Boot tried to process this buffer again when it receive interrupt
> again, but it can receive it only when sender (host) send a new data.
> As sender (host) is not going to send a new data until U-Boot process
> current data this issue caused a deadlock in case sender (host) is
> emitting data faster than U-Boot can process it.
>
> Reading musb intrrx register automatically clears this register and
> mark interrupt as processed. So to prevent marking interrupt in
> U-Boot as processed and a new variable pending_intrrx which would
> contain unprocessed bits of intrrx register.
>
> And as a second step, every time when musb_peri_rx_ep() is called and
> there are waiting data to be processed (signaled by
> MUSB_RXCSR_RXPKTRDY) either acknowledge sender (via
> musb_peri_rx_ack()) that whole HW buffer was processed or set
> corresponding bit in pending_intrrx that HW buffer was not fully
> processed yet and next iteration is required after U-Boot allocate
> space for reading HW buffer.
>
> This patch fixes receiving large usb buffers, e.g. file transfer via
> Kermit protocol implemented by 'loadb' U-Boot command over usbtty
> serial console.
Reviewed-by: Lukasz Majewski <lukma@denx.de>
>
> Signed-off-by: Pali Roh?r <pali@kernel.org>
> ---
> drivers/usb/musb/musb_udc.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/musb/musb_udc.c b/drivers/usb/musb/musb_udc.c
> index 28719cc3f6..7c74422623 100644
> --- a/drivers/usb/musb/musb_udc.c
> +++ b/drivers/usb/musb/musb_udc.c
> @@ -104,6 +104,8 @@ struct usb_endpoint_instance *ep0_endpoint;
> static struct usb_device_instance *udc_device;
> static int enabled;
>
> +u16 pending_intrrx;
> +
> #ifdef MUSB_DEBUG
> static void musb_db_regs(void)
> {
> @@ -664,7 +666,10 @@ static void musb_peri_rx_ep(unsigned int ep)
> /* The common musb fifo reader */
> read_fifo(ep, length, data);
>
> - musb_peri_rx_ack(ep);
> + if (length == peri_rxcount)
> + musb_peri_rx_ack(ep);
> + else
> + pending_intrrx |= (1 << ep);
>
> /*
> * urb's actual_length is updated in
> @@ -677,18 +682,24 @@ static void musb_peri_rx_ep(unsigned int ep)
> serial_printf("ERROR : %s %d
> no space " "in rcv buffer\n",
> __PRETTY_FUNCTION__,
> ep); +
> + pending_intrrx |= (1 << ep);
> }
> } else {
> if (debug_level > 0)
> serial_printf("ERROR : %s %d problem
> with " "endpoint\n",
> __PRETTY_FUNCTION__,
> ep); +
> + pending_intrrx |= (1 << ep);
> }
>
> } else {
> if (debug_level > 0)
> serial_printf("ERROR : %s %d with nothing to
> do\n", __PRETTY_FUNCTION__, ep);
> +
> + musb_peri_rx_ack(ep);
> }
> }
>
> @@ -770,6 +781,9 @@ void udc_irq(void)
> intrrx = readw(&musbr->intrrx);
> intrtx = readw(&musbr->intrtx);
>
> + intrrx |= pending_intrrx;
> + pending_intrrx = 0;
> +
> if (intrrx)
> musb_peri_rx(intrrx);
>
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: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210206/21a623c9/attachment.sig>
next prev parent reply other threads:[~2021-02-06 14:15 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-05 19:11 [RESEND PATCH 00/16] Nokia RX-51: Fix USB TTY console and enable it Pali Rohár
2021-02-05 19:11 ` [RESEND PATCH 01/16] serial: usbtty: Fix puts function Pali Rohár
2021-02-06 13:49 ` Lukasz Majewski
2021-02-05 19:11 ` [RESEND PATCH 02/16] serial: usbtty: Send urb data in correct order Pali Rohár
2021-02-06 13:56 ` Lukasz Majewski
2021-02-05 19:11 ` [RESEND PATCH 03/16] usb: musb: Fix compilation of gadget code Pali Rohár
2021-02-06 13:57 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 04/16] usb: musb: Always clear the data toggle bit when configuring ep Pali Rohár
2021-02-06 13:58 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 05/16] usb: musb: Fix configuring FIFO for endpoints Pali Rohár
2021-02-06 8:58 ` Pavel Machek
2021-02-06 14:01 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 06/16] usb: musb: Read value of PERI_RXCSR to 16bit variable Pali Rohár
2021-02-06 14:01 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 07/16] usb: musb: Fix transmission of bigger buffers Pali Rohár
2021-02-06 14:07 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 08/16] usb: musb: Fix receiving " Pali Rohár
2021-02-06 14:15 ` Lukasz Majewski [this message]
2021-02-05 19:12 ` [RESEND PATCH 09/16] usb: musb: Fix handling interrupts for EP0 and SET ADDRESS commmand Pali Rohár
2021-02-06 14:17 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 10/16] usb: musb: Ensure that we set musb dynamic FIFO buffer for every endpoint Pali Rohár
2021-02-06 9:04 ` Pavel Machek
2021-02-06 15:18 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 11/16] usb: gadget: Use dbg_ep0() macro instead of serial_printf() Pali Rohár
2021-02-06 15:19 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 12/16] arm: omap3: Compile lowlevel_init() function only when it is used Pali Rohár
2021-02-06 15:21 ` Lukasz Majewski
2021-02-06 15:40 ` Marek Vasut
2021-02-06 15:45 ` Pali Rohár
2021-02-06 16:50 ` Marek Vasut
2021-02-07 13:50 ` Pali Rohár
2021-02-07 14:33 ` Marek Vasut
2021-02-05 19:12 ` [RESEND PATCH 13/16] arm: omap3: Compile s_init() " Pali Rohár
2021-02-06 15:21 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 14/16] Nokia RX-51: Remove function set_muxconf_regs() Pali Rohár
2021-02-06 15:22 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 15/16] Nokia RX-51: Move content of rx51.h to rx51.c Pali Rohár
2021-02-06 15:23 ` Lukasz Majewski
2021-02-05 19:12 ` [RESEND PATCH 16/16] Nokia RX-51: Enable usbtty serial console by default Pali Rohár
2021-02-06 9:10 ` Pavel Machek
2021-02-06 15:24 ` Lukasz Majewski
2021-02-07 13:50 ` [RESEND v2 PATCH 00/16] Nokia RX-51: Fix USB TTY console and enable it Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 01/16] serial: usbtty: Fix puts function Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 02/16] serial: usbtty: Send urb data in correct order Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 03/16] usb: musb: Fix compilation of gadget code Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 04/16] usb: musb: Always clear the data toggle bit when configuring ep Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 05/16] usb: musb: Fix configuring FIFO for endpoints Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 06/16] usb: musb: Read value of PERI_RXCSR to 16bit variable Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 07/16] usb: musb: Fix transmission of bigger buffers Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 08/16] usb: musb: Fix receiving " Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 09/16] usb: musb: Fix handling interrupts for EP0 and SET ADDRESS commmand Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 10/16] usb: musb: Ensure that we set musb dynamic FIFO buffer for every endpoint Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 11/16] usb: gadget: Use dbg_ep0() macro instead of serial_printf() Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 12/16] arm: omap3: Compile lowlevel_init() function only when it is used Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 13/16] arm: omap3: Compile s_init() " Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 14/16] Nokia RX-51: Remove function set_muxconf_regs() Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 15/16] Nokia RX-51: Move content of rx51.h to rx51.c Pali Rohár
2021-02-07 13:50 ` [RESEND v2 PATCH 16/16] Nokia RX-51: Enable usbtty serial console by default Pali Rohár
2021-02-20 10:50 ` [AZURE FIX RESEND " Pali Rohár
2021-02-08 22:15 ` [RESEND v2 PATCH 00/16] Nokia RX-51: Fix USB TTY console and enable it Lukasz Majewski
2021-02-08 22:21 ` Pali Rohár
2021-02-08 22:34 ` Pali Rohár
2021-02-08 22:45 ` Marek Vasut
2021-02-08 22:54 ` Pali Rohár
2021-02-13 10:20 ` Pali Rohár
2021-02-16 8:28 ` Lukasz Majewski
2021-02-19 0:38 ` Pali Rohár
2021-02-20 8:20 ` Lukasz Majewski
2021-02-20 10:54 ` Pali Rohár
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210206151516.5bcb2349@jawa \
--to=lukma@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.