Skip to content

Commit 5c97d8f

Browse files
committed
update(port/dwc2): add limit for transfer size
Signed-off-by: sakumisu <1203593632@qq.com>
1 parent b3e822b commit 5c97d8f

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

port/dwc2/usb_dc_dwc2.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -918,6 +918,11 @@ int usbd_ep_start_write(uint8_t busid, const uint8_t ep, const uint8_t *data, ui
918918
} else {
919919
pktcnt = (uint16_t)((data_len + g_dwc2_udc[busid].in_ep[ep_idx].ep_mps - 1U) / g_dwc2_udc[busid].in_ep[ep_idx].ep_mps);
920920

921+
if (pktcnt > g_dwc2_udc[busid].hw_params.max_packet_count) {
922+
pktcnt = g_dwc2_udc[busid].hw_params.max_packet_count; // pktcnt 10bits
923+
}
924+
925+
data_len = MIN(g_dwc2_udc[busid].hw_params.max_packet_count * g_dwc2_udc[busid].in_ep[ep_idx].ep_mps, data_len);
921926
USB_OTG_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (pktcnt << 19));
922927
USB_OTG_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_XFRSIZ & data_len);
923928
}
@@ -995,6 +1000,12 @@ int usbd_ep_start_read(uint8_t busid, const uint8_t ep, uint8_t *data, uint32_t
9951000
} else {
9961001
pktcnt = (uint16_t)((data_len + g_dwc2_udc[busid].out_ep[ep_idx].ep_mps - 1U) / g_dwc2_udc[busid].out_ep[ep_idx].ep_mps);
9971002

1003+
if (pktcnt > g_dwc2_udc[busid].hw_params.max_packet_count) {
1004+
pktcnt = g_dwc2_udc[busid].hw_params.max_packet_count; // pktcnt 10bits
1005+
}
1006+
1007+
data_len = pktcnt * g_dwc2_udc[busid].out_ep[ep_idx].ep_mps;
1008+
9981009
USB_OTG_OUTEP(ep_idx)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (pktcnt << 19));
9991010
USB_OTG_OUTEP(ep_idx)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_XFRSIZ & data_len);
10001011
}

port/dwc2/usb_hc_dwc2.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,8 +509,8 @@ static uint16_t dwc2_calculate_packet_num(uint32_t input_size, uint8_t ep_addr,
509509

510510
num_packets = (uint16_t)((input_size + ep_mps - 1U) / ep_mps);
511511

512-
if (num_packets > 0x3FF) {
513-
num_packets = 0x3FF; // pktcnt 10bits
512+
if (num_packets > g_dwc2_hcd[busid].hw_params.max_packet_count) {
513+
num_packets = g_dwc2_hcd[busid].hw_params.max_packet_count; // pktcnt 10bits
514514
}
515515

516516
if (input_size == 0) {
@@ -520,6 +520,7 @@ static uint16_t dwc2_calculate_packet_num(uint32_t input_size, uint8_t ep_addr,
520520
if (ep_addr & 0x80) {
521521
input_size = num_packets * ep_mps;
522522
} else {
523+
input_size = MIN(g_dwc2_hcd[busid].hw_params.max_packet_count * ep_mps, input_size);
523524
}
524525

525526
*output_size = input_size;

0 commit comments

Comments
 (0)