From 5573472397d446e6864287345cc98fc49a0d4b2b Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Sat, 25 Jan 2025 17:03:50 +0800 Subject: [PATCH] fix(port/musb/usb_hc_musb): fix musb_write_packet size with urb->transfer_buffer_length Signed-off-by: sakumisu <1203593632@qq.com> --- port/musb/usb_hc_musb.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/port/musb/usb_hc_musb.c b/port/musb/usb_hc_musb.c index 39c787f8..c32a3b17 100644 --- a/port/musb/usb_hc_musb.c +++ b/port/musb/usb_hc_musb.c @@ -869,12 +869,7 @@ void handle_ep0(struct usbh_bus *bus) break; case USB_EP0_STATE_IN_DATA: if (ep0_status & USB_CSRL0_RXRDY) { - size = urb->transfer_buffer_length; - if (size > USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) { - size = USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize); - } - - size = MIN(size, HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET)); + size = HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET); musb_read_packet(bus, 0, urb->transfer_buffer, size); HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_CSRL0_RXRDY; urb->transfer_buffer += size; @@ -933,6 +928,7 @@ void USBH_IRQHandler(uint8_t busid) uint8_t ep_idx; uint8_t old_ep_idx; struct usbh_bus *bus; + uint32_t size; bus = &g_usbhost_bus[busid]; @@ -1024,7 +1020,7 @@ void USBH_IRQHandler(uint8_t busid) urb->errorcode = 0; musb_urb_waitup(urb); } else { - musb_write_packet(bus, ep_idx, urb->transfer_buffer, size); + musb_write_packet(bus, ep_idx, urb->transfer_buffer, MIN(urb->transfer_buffer_length, USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize))); HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_TXCSRL1_TXRDY; } } @@ -1056,11 +1052,7 @@ void USBH_IRQHandler(uint8_t busid) urb->errorcode = -USB_ERR_STALL; musb_urb_waitup(urb); } else if (ep_csrl_status & USB_RXCSRL1_RXRDY) { - uint32_t size = urb->transfer_buffer_length; - if (size > USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize)) { - size = USB_GET_MAXPACKETSIZE(urb->ep->wMaxPacketSize); - } - size = MIN(size, HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET)); + size = HWREGH(USB_BASE + MUSB_IND_RXCOUNT_OFFSET); musb_read_packet(bus, ep_idx, urb->transfer_buffer, size);