update(port/dwc2): add check for fifo value with power on value
Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
@@ -520,6 +520,19 @@ int usb_dc_init(uint8_t busid)
|
|||||||
/* Force Device Mode*/
|
/* Force Device Mode*/
|
||||||
dwc2_set_mode(busid, USB_OTG_MODE_DEVICE);
|
dwc2_set_mode(busid, USB_OTG_MODE_DEVICE);
|
||||||
|
|
||||||
|
USB_ASSERT_MSG((USB_OTG_GLB->GRXFSIZ & 0xffff) >= g_dwc2_udc[busid].user_params.device_rx_fifo_size,
|
||||||
|
"device_rx_fifo_size cannot be larger than power_on_value %u", (unsigned int)(USB_OTG_GLB->GRXFSIZ & 0xffff));
|
||||||
|
for (uint8_t i = 0; i < (g_dwc2_udc[busid].hw_params.num_dev_ep + 1); i++) {
|
||||||
|
uint16_t reset_txfifo_size;
|
||||||
|
if (i == 0) {
|
||||||
|
reset_txfifo_size = USB_OTG_GLB->DIEPTXF0_HNPTXFSIZ >> 16 & 0xffff;
|
||||||
|
} else {
|
||||||
|
reset_txfifo_size = USB_OTG_GLB->DIEPTXF[i - 1] >> 16 & 0xffff;
|
||||||
|
}
|
||||||
|
USB_ASSERT_MSG(reset_txfifo_size >= g_dwc2_udc[busid].user_params.device_tx_fifo_size[i],
|
||||||
|
"device_tx_fifo_size[%u] cannot be larger than power_on_value %u", i, reset_txfifo_size);
|
||||||
|
}
|
||||||
|
|
||||||
if (g_dwc2_udc[busid].user_params.b_session_valid_override) {
|
if (g_dwc2_udc[busid].user_params.b_session_valid_override) {
|
||||||
/* B-peripheral session valid override enable */
|
/* B-peripheral session valid override enable */
|
||||||
USB_OTG_GLB->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
|
USB_OTG_GLB->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
|
||||||
|
|||||||
@@ -715,6 +715,13 @@ int usb_hc_init(struct usbh_bus *bus)
|
|||||||
/* Force Host Mode*/
|
/* Force Host Mode*/
|
||||||
dwc2_set_mode(bus, USB_OTG_MODE_HOST);
|
dwc2_set_mode(bus, USB_OTG_MODE_HOST);
|
||||||
|
|
||||||
|
USB_ASSERT_MSG((USB_OTG_GLB->GRXFSIZ & 0xffff) >= g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_rx_fifo_size,
|
||||||
|
"host_rx_fifo_size cannot be larger than power_on_value %u", (unsigned int)(USB_OTG_GLB->GRXFSIZ & 0xffff));
|
||||||
|
USB_ASSERT_MSG((USB_OTG_GLB->DIEPTXF0_HNPTXFSIZ & 0xffff) >= g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_nperio_tx_fifo_size,
|
||||||
|
"host_nperio_tx_fifo_size cannot be larger than power_on_value %u", (unsigned int)(USB_OTG_GLB->DIEPTXF0_HNPTXFSIZ & 0xffff));
|
||||||
|
USB_ASSERT_MSG((USB_OTG_GLB->HPTXFSIZ & 0xffff) >= g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_perio_tx_fifo_size,
|
||||||
|
"host_perio_tx_fifo_size cannot be larger than power_on_value %u", (unsigned int)(USB_OTG_GLB->HPTXFSIZ & 0xffff));
|
||||||
|
|
||||||
/* B-peripheral session valid override enable */
|
/* B-peripheral session valid override enable */
|
||||||
USB_OTG_GLB->GOTGCTL &= ~USB_OTG_GOTGCTL_BVALOEN;
|
USB_OTG_GLB->GOTGCTL &= ~USB_OTG_GOTGCTL_BVALOEN;
|
||||||
USB_OTG_GLB->GOTGCTL &= ~USB_OTG_GOTGCTL_BVALOVAL;
|
USB_OTG_GLB->GOTGCTL &= ~USB_OTG_GOTGCTL_BVALOVAL;
|
||||||
@@ -752,7 +759,7 @@ int usb_hc_init(struct usbh_bus *bus)
|
|||||||
/* Clear any pending interrupts */
|
/* Clear any pending interrupts */
|
||||||
USB_OTG_GLB->GINTSTS = 0xFFFFFFFFU;
|
USB_OTG_GLB->GINTSTS = 0xFFFFFFFFU;
|
||||||
|
|
||||||
/* set Rx FIFO size */
|
/* set FIFO size */
|
||||||
USB_OTG_GLB->GRXFSIZ = g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_rx_fifo_size;
|
USB_OTG_GLB->GRXFSIZ = g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_rx_fifo_size;
|
||||||
USB_OTG_GLB->DIEPTXF0_HNPTXFSIZ = (uint32_t)(((g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_nperio_tx_fifo_size << 16) & USB_OTG_NPTXFD) |
|
USB_OTG_GLB->DIEPTXF0_HNPTXFSIZ = (uint32_t)(((g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_nperio_tx_fifo_size << 16) & USB_OTG_NPTXFD) |
|
||||||
g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_rx_fifo_size);
|
g_dwc2_hcd[bus->hcd.hcd_id].user_params.host_rx_fifo_size);
|
||||||
|
|||||||
Reference in New Issue
Block a user