diff --git a/core/usbh_core.c b/core/usbh_core.c index 03ed3b9..406a5c3 100644 --- a/core/usbh_core.c +++ b/core/usbh_core.c @@ -227,21 +227,13 @@ static int parse_config_descriptor(struct usbh_hubport *hport, struct usb_config cur_alt_setting = intf_desc->bAlternateSetting; cur_ep_num = intf_desc->bNumEndpoints; cur_ep = 0; - if (cur_iface > (CONFIG_USBHOST_MAX_INTERFACES - 1)) { - USB_LOG_ERR("Interface num overflow\r\n"); - while (1) { - } - } - if (cur_alt_setting > (CONFIG_USBHOST_MAX_INTF_ALTSETTINGS - 1)) { - USB_LOG_ERR("Interface altsetting num overflow\r\n"); - while (1) { - } - } - if (cur_ep_num > CONFIG_USBHOST_MAX_ENDPOINTS) { - USB_LOG_ERR("Endpoint num overflow\r\n"); - while (1) { - } - } + + USB_ASSERT_MSG(cur_iface < CONFIG_USBHOST_MAX_INTERFACES, + "Interface num %d overflow", cur_iface); + USB_ASSERT_MSG(cur_alt_setting < CONFIG_USBHOST_MAX_INTF_ALTSETTINGS, + "Interface altsetting num %d overflow", cur_alt_setting); + USB_ASSERT_MSG(cur_ep_num <= CONFIG_USBHOST_MAX_ENDPOINTS, + "Endpoint num %d overflow", cur_ep_num); #if 0 USB_LOG_DBG("Interface Descriptor:\r\n"); USB_LOG_DBG("bLength: 0x%02x \r\n", intf_desc->bLength); diff --git a/port/dwc2/usb_dc_dwc2.c b/port/dwc2/usb_dc_dwc2.c index 229acd3..d3b33a5 100644 --- a/port/dwc2/usb_dc_dwc2.c +++ b/port/dwc2/usb_dc_dwc2.c @@ -538,11 +538,7 @@ int usb_dc_init(uint8_t busid) USB_LOG_INFO("dwc2 has %d endpoints and dfifo depth(32-bit words) is %d, default config: %d endpoints\r\n", endpoints, (USB_OTG_GLB->GHWCFG3 >> 16), CONFIG_USBDEV_EP_NUM); USB_LOG_INFO("=================================\r\n"); - if (endpoints < CONFIG_USBDEV_EP_NUM) { - USB_LOG_ERR("dwc2 has less endpoints than config, please check\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(endpoints >= CONFIG_USBDEV_EP_NUM, "dwc2 has less endpoints than config, please check"); USB_OTG_DEV->DCTL |= USB_OTG_DCTL_SDIS; @@ -591,11 +587,7 @@ int usb_dc_init(uint8_t busid) USB_OTG_GINTMSK_USBSUSPM | USB_OTG_GINTMSK_WUIM; #ifdef CONFIG_USB_DWC2_DMA_ENABLE - if (((USB_OTG_GLB->GHWCFG2 & (0x3U << 3)) >> 3) != 2) { - USB_LOG_ERR("This dwc2 version does not support dma mode, so stop working\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(((USB_OTG_GLB->GHWCFG2 & (0x3U << 3)) >> 3) == 2, "This dwc2 version does not support dma mode, so stop working"); USB_OTG_DEV->DCFG &= ~USB_OTG_DCFG_DESCDMA; USB_OTG_GLB->GAHBCFG &= ~USB_OTG_GAHBCFG_HBSTLEN; @@ -643,18 +635,9 @@ int usb_dc_init(uint8_t busid) fifo_num += CONFIG_USB_DWC2_TX8_FIFO_SIZE; #endif - if (fifo_num > (USB_OTG_GLB->GHWCFG3 >> 16)) { - USB_LOG_ERR("Your fifo config is overflow, please check\r\n"); - while (1) { - } - } - + USB_ASSERT_MSG(fifo_num <= (USB_OTG_GLB->GHWCFG3 >> 16), "Your fifo config is overflow, please check"); /* xxx32 chips do not follow (USB_OTG_GLB->GHWCFG3 >> 16) if hsphy_type is zero, they use 1.25KB(320 DWORD) */ - if ((hsphy_type == 0) && (fifo_num > 320)) { - USB_LOG_ERR("Your fifo config is larger than 320 , please check\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(!((hsphy_type == 0) && (fifo_num > 320)), "Your fifo config is larger than 320 , please check"); ret = dwc2_flush_txfifo(busid, 0x10U); ret = dwc2_flush_rxfifo(busid); @@ -890,20 +873,15 @@ int usbd_ep_start_write(uint8_t busid, const uint8_t ep, const uint8_t *data, ui uint8_t ep_idx = USB_EP_GET_IDX(ep); uint32_t pktcnt = 0; + USB_ASSERT_MSG(!((uint32_t)data % 0x04), "dwc2 data must be 4-byte aligned"); + if (!data && data_len) { return -1; } -#if 0 /* some chips have confused with this, so disable as default */ - if (USB_OTG_INEP(ep_idx)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) { - return -2; - } -#endif + if (ep_idx && !(USB_OTG_INEP(ep_idx)->DIEPCTL & USB_OTG_DIEPCTL_MPSIZ)) { return -3; } - if ((uint32_t)data & 0x03) { - return -4; - } g_dwc2_udc[busid].in_ep[ep_idx].xfer_buf = (uint8_t *)data; g_dwc2_udc[busid].in_ep[ep_idx].xfer_len = data_len; @@ -963,20 +941,15 @@ int usbd_ep_start_read(uint8_t busid, const uint8_t ep, uint8_t *data, uint32_t uint8_t ep_idx = USB_EP_GET_IDX(ep); uint32_t pktcnt = 0; + USB_ASSERT_MSG(!((uint32_t)data % 0x04), "dwc2 data must be 4-byte aligned"); + if (!data && data_len) { return -1; } -#if 0 /* some chips have confused with this, so disable as default */ - if (USB_OTG_OUTEP(ep_idx)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) { - return -2; - } -#endif + if (ep_idx && !(USB_OTG_OUTEP(ep_idx)->DOEPCTL & USB_OTG_DOEPCTL_MPSIZ)) { return -3; } - if (((uint32_t)data) & 0x03) { - return -4; - } g_dwc2_udc[busid].out_ep[ep_idx].xfer_buf = (uint8_t *)data; g_dwc2_udc[busid].out_ep[ep_idx].xfer_len = data_len; diff --git a/port/dwc2/usb_hc_dwc2.c b/port/dwc2/usb_hc_dwc2.c index 8c0600d..3678b40 100644 --- a/port/dwc2/usb_hc_dwc2.c +++ b/port/dwc2/usb_hc_dwc2.c @@ -491,17 +491,9 @@ int usb_hc_init(struct usbh_bus *bus) USB_LOG_INFO("dwc2 has %d channels and dfifo depth(32-bit words) is %d\r\n", ((USB_OTG_GLB->GHWCFG2 & (0x0f << 14)) >> 14) + 1, (USB_OTG_GLB->GHWCFG3 >> 16)); - if (((USB_OTG_GLB->GHWCFG2 & (0x3U << 3)) >> 3) != 2) { - USB_LOG_ERR("This dwc2 version does not support dma mode, so stop working\r\n"); - while (1) { - } - } - - if ((CONFIG_USB_DWC2_RX_FIFO_SIZE + CONFIG_USB_DWC2_NPTX_FIFO_SIZE + CONFIG_USB_DWC2_PTX_FIFO_SIZE) > (USB_OTG_GLB->GHWCFG3 >> 16)) { - USB_LOG_ERR("Your fifo config is overflow, please check\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(((USB_OTG_GLB->GHWCFG2 & (0x3U << 3)) >> 3) == 2, "This dwc2 version does not support dma mode, so stop working"); + USB_ASSERT_MSG((CONFIG_USB_DWC2_RX_FIFO_SIZE + CONFIG_USB_DWC2_NPTX_FIFO_SIZE + CONFIG_USB_DWC2_PTX_FIFO_SIZE) <= (USB_OTG_GLB->GHWCFG3 >> 16), + "Your fifo config is overflow, please check"); USB_OTG_GLB->GAHBCFG &= ~USB_OTG_GAHBCFG_GINT; @@ -763,16 +755,13 @@ int usbh_submit_urb(struct usbh_urb *urb) } /* dma addr must be aligned 4 bytes */ - if ((((uint32_t)urb->setup) & 0x03) || (((uint32_t)urb->transfer_buffer) & 0x03)) { - return -USB_ERR_INVAL; - } + USB_ASSERT_MSG(!((uintptr_t)urb->setup % 4) && !((uintptr_t)urb->transfer_buffer % 4), + "urb->setup or urb->transfer_buffer is not aligned 4 bytes"); #ifdef CONFIG_USB_DCACHE_ENABLE - if (((uintptr_t)urb->setup % CONFIG_USB_ALIGN_SIZE) || ((uintptr_t)urb->transfer_buffer % CONFIG_USB_ALIGN_SIZE)) { - USB_LOG_ERR("urb buffer is not align with %d\r\n", CONFIG_USB_ALIGN_SIZE); - while (1) { - } - } + USB_ASSERT_MSG(!((uintptr_t)urb->setup % CONFIG_USB_ALIGN_SIZE) && + !((uintptr_t)urb->transfer_buffer % CONFIG_USB_ALIGN_SIZE), + "urb->setup or urb->transfer_buffer is not aligned %d", CONFIG_USB_ALIGN_SIZE); #endif bus = urb->hport->bus; @@ -926,7 +915,7 @@ static void dwc2_inchan_irq_handler(struct usbh_bus *bus, uint8_t ch_num) if (chan_intstatus & USB_OTG_HCINT_XFRC) { urb->errorcode = 0; - uint32_t count = chan->xferlen - (USB_OTG_HC(ch_num)->HCTSIZ & USB_OTG_HCTSIZ_XFRSIZ); /* how many size has received */ + uint32_t count = chan->xferlen - (USB_OTG_HC(ch_num)->HCTSIZ & USB_OTG_HCTSIZ_XFRSIZ); /* how many size has received */ //uint32_t has_used_packets = chan->num_packets - ((USB_OTG_HC(ch_num)->HCTSIZ & USB_OTG_HCTSIZ_PKTCNT) >> 19); /* how many packets have used */ urb->actual_length += count; diff --git a/port/ehci/usb_hc_ehci.c b/port/ehci/usb_hc_ehci.c index dd91544..e96a1f7 100644 --- a/port/ehci/usb_hc_ehci.c +++ b/port/ehci/usb_hc_ehci.c @@ -335,11 +335,7 @@ static struct ehci_qh_hw *ehci_control_urb_init(struct usbh_bus *bus, struct usb qtd_data = ehci_qtd_alloc(bus); qtd_status = ehci_qtd_alloc(bus); - if (!qtd_setup || !qtd_data || !qtd_status) { - USB_LOG_ERR("qtd alloc failed\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(qtd_setup && qtd_data && qtd_status, "ctrl qtd alloc failed"); ehci_qh_fill(qh, urb->hport->dev_addr, @@ -424,7 +420,6 @@ static struct ehci_qh_hw *ehci_bulk_urb_init(struct usbh_bus *bus, struct usbh_u struct ehci_qtd_hw *qtd = NULL; struct ehci_qtd_hw *first_qtd = NULL; struct ehci_qtd_hw *prev_qtd = NULL; - uint32_t qtd_num = 0; uint32_t xfer_len = 0; uint32_t token; size_t flags; @@ -447,11 +442,7 @@ static struct ehci_qh_hw *ehci_bulk_urb_init(struct usbh_bus *bus, struct usbh_u while (1) { qtd = ehci_qtd_alloc(bus); - if (qtd == NULL) { - USB_LOG_ERR("qtd alloc failed\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(qtd, "bulk qtd alloc failed"); if (buflen > 0x4000) { xfer_len = 0x4000; @@ -490,11 +481,6 @@ static struct ehci_qh_hw *ehci_bulk_urb_init(struct usbh_bus *bus, struct usbh_u if (buflen == 0) { break; } - qtd_num++; - - if (qtd_num == CONFIG_USB_EHCI_QTD_NUM) { - return NULL; - } } /* update qh first qtd */ @@ -530,7 +516,6 @@ static struct ehci_qh_hw *ehci_intr_urb_init(struct usbh_bus *bus, struct usbh_u struct ehci_qtd_hw *qtd = NULL; struct ehci_qtd_hw *first_qtd = NULL; struct ehci_qtd_hw *prev_qtd = NULL; - uint32_t qtd_num = 0; uint32_t xfer_len = 0; uint32_t token; size_t flags; @@ -553,11 +538,7 @@ static struct ehci_qh_hw *ehci_intr_urb_init(struct usbh_bus *bus, struct usbh_u while (1) { qtd = ehci_qtd_alloc(bus); - if (qtd == NULL) { - USB_LOG_ERR("qtd alloc failed\r\n"); - while (1) { - } - } + USB_ASSERT_MSG(qtd, "intr qtd alloc failed"); if (buflen > 0x4000) { xfer_len = 0x4000; @@ -596,11 +577,6 @@ static struct ehci_qh_hw *ehci_intr_urb_init(struct usbh_bus *bus, struct usbh_u if (buflen == 0) { break; } - qtd_num++; - - if (qtd_num == CONFIG_USB_EHCI_QTD_NUM) { - return NULL; - } } /* update qh first qtd */ @@ -1220,11 +1196,9 @@ int usbh_submit_urb(struct usbh_urb *urb) } #ifdef CONFIG_USB_DCACHE_ENABLE - if (((uintptr_t)urb->setup % CONFIG_USB_ALIGN_SIZE) || ((uintptr_t)urb->transfer_buffer % CONFIG_USB_ALIGN_SIZE)) { - USB_LOG_ERR("urb buffer is not align with %d\r\n", CONFIG_USB_ALIGN_SIZE); - while (1) { - } - } + USB_ASSERT_MSG(!((uintptr_t)urb->setup % CONFIG_USB_ALIGN_SIZE) && + !((uintptr_t)urb->transfer_buffer % CONFIG_USB_ALIGN_SIZE), + "urb->setup or urb->transfer_buffer is not aligned %d", CONFIG_USB_ALIGN_SIZE); #endif bus = urb->hport->bus; diff --git a/port/musb/usb_dc_musb.c b/port/musb/usb_dc_musb.c index 845e583..8b868e3 100644 --- a/port/musb/usb_dc_musb.c +++ b/port/musb/usb_dc_musb.c @@ -266,11 +266,7 @@ int usb_dc_init(uint8_t busid) offset = usbd_musb_fifo_config(&cfg[i], offset); } - if (offset > usb_get_musb_ram_size()) { - USB_LOG_ERR("offset:%d is overflow, please check your table\r\n", offset); - while (1) { - } - } + USB_ASSERT_MSG(offset <= usb_get_musb_ram_size(), "Your fifo config is overflow, please check"); /* Enable USB interrupts */ HWREGB(USB_BASE + MUSB_IE_OFFSET) = USB_IE_RESET | USB_IE_SUSPND | USB_IE_RESUME; diff --git a/port/musb/usb_hc_musb.c b/port/musb/usb_hc_musb.c index c32a3b1..4dc7a4b 100644 --- a/port/musb/usb_hc_musb.c +++ b/port/musb/usb_hc_musb.c @@ -504,11 +504,7 @@ int usb_hc_init(struct usbh_bus *bus) offset = usbh_musb_fifo_config(bus, &cfg[i], offset); } - if (offset > usb_get_musb_ram_size()) { - USB_LOG_ERR("offset:%d is overflow, please check your table\r\n", offset); - while (1) { - } - } + USB_ASSERT_MSG(offset <= usb_get_musb_ram_size(), "Your fifo config is overflow, please check"); /* Enable USB interrupts */ regval = USB_IE_RESET | USB_IE_CONN | USB_IE_DISCON |