This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 581d667f723 risc-v/mpfs: usb: don't try nonexistent ep int flags 581d667f723 is described below commit 581d667f723070e0a6bf847a808b28222799f953 Author: Eero Nurkkala <eero.nurkk...@offcode.fi> AuthorDate: Thu Nov 30 09:38:33 2023 +0200 risc-v/mpfs: usb: don't try nonexistent ep int flags Currently the irq handler checks many reserved bits, which is a waste of resources: 1. pending_rx_ep bit 0 is reserved (always 0) 2. pending_rx_ep and pending_tx_ep have only bits 1, 2, 3 and 4 defined, no need to scan MPFS_USB_NENDPOINTS (9) bits as the rest are reserved Fix this by checking only the relevant bits. Signed-off-by: Eero Nurkkala <eero.nurkk...@offcode.fi> Signed-off-by: Jukka Laitinen <jukka.laiti...@tii.ae> --- arch/risc-v/src/mpfs/mpfs_usb.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/arch/risc-v/src/mpfs/mpfs_usb.c b/arch/risc-v/src/mpfs/mpfs_usb.c index 0bb816bbee7..c8b21b8b4b3 100644 --- a/arch/risc-v/src/mpfs/mpfs_usb.c +++ b/arch/risc-v/src/mpfs/mpfs_usb.c @@ -3467,7 +3467,7 @@ static int mpfs_usb_interrupt(int irq, void *context, void *arg) if (pending_tx_ep != 0) { - for (i = 1; i < MPFS_USB_NENDPOINTS; i++) + for (i = 1; i < (MPFS_USB_NENDPOINTS / 2 + 1); i++) { if ((pending_tx_ep & (1 << i)) != 0) { @@ -3478,20 +3478,27 @@ static int mpfs_usb_interrupt(int irq, void *context, void *arg) if (pending_rx_ep != 0) { - for (i = 0; i < MPFS_USB_NENDPOINTS; i++) + for (i = 1; i < (MPFS_USB_NENDPOINTS / 2 + 1); i++) { /* Check if dead connections are back in business */ if (g_linkdead) { - /* This releases all, which is a problem if only some - * endpoints are closed on the remote; whereas some - * are functioning; for example ACM and mass storage; - * now the functioning one likely marks the closed ones - * as no longer dead. + /* This releases all tx counterparts with linkdead flag + * set, which is a problem if only some endpoints are + * closed on the remote; whereas some are functioning; + * for example ACM and mass storage; now the functioning + * one likely marks the closed ones as no longer dead. + * Please note that tx counterparts have MPFS_EPIN_START + * offset on top of the rx eps. + * + * For clarity, the eplist[] is as follows: + * eplist: 0: ep0, + * 1-4: ep1rx, ep2rx, ep3rx, ep4rx, + * 5-8: ep1tx, ep2tx, ep3tx, ep4tx */ - struct mpfs_ep_s *privep = &priv->eplist[i]; + struct mpfs_ep_s *privep = &priv->eplist[i + MPFS_EPIN_START]; privep->linkdead = 0; }