summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2025-01-25 17:03:50 +0800
committersakumisu <[email protected]>2025-01-25 19:08:15 +0800
commit5573472397d446e6864287345cc98fc49a0d4b2b (patch)
tree2bc6befada31568f28cf316762c1594d2de34112
parentfd033f25c5fee6a70fdb70e0f01eaec48cf7d0e2 (diff)
fix(port/musb/usb_hc_musb): fix musb_write_packet size with urb->transfer_buffer_length
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--port/musb/usb_hc_musb.c16
1 files 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);