diff options
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 151 |
1 files changed, 107 insertions, 44 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 5255fe975ea1..3df1a1973b05 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -178,8 +178,8 @@ int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc) | |||
178 | if (!(dep->flags & DWC3_EP_ENABLED)) | 178 | if (!(dep->flags & DWC3_EP_ENABLED)) |
179 | continue; | 179 | continue; |
180 | 180 | ||
181 | if (usb_endpoint_xfer_bulk(dep->desc) | 181 | if (usb_endpoint_xfer_bulk(dep->endpoint.desc) |
182 | || usb_endpoint_xfer_isoc(dep->desc)) | 182 | || usb_endpoint_xfer_isoc(dep->endpoint.desc)) |
183 | mult = 3; | 183 | mult = 3; |
184 | 184 | ||
185 | /* | 185 | /* |
@@ -229,7 +229,7 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, | |||
229 | * completed (not the LINK TRB). | 229 | * completed (not the LINK TRB). |
230 | */ | 230 | */ |
231 | if (((dep->busy_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && | 231 | if (((dep->busy_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && |
232 | usb_endpoint_xfer_isoc(dep->desc)) | 232 | usb_endpoint_xfer_isoc(dep->endpoint.desc)) |
233 | dep->busy_slot++; | 233 | dep->busy_slot++; |
234 | } | 234 | } |
235 | list_del(&req->list); | 235 | list_del(&req->list); |
@@ -276,6 +276,33 @@ static const char *dwc3_gadget_ep_cmd_string(u8 cmd) | |||
276 | } | 276 | } |
277 | } | 277 | } |
278 | 278 | ||
279 | int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param) | ||
280 | { | ||
281 | u32 timeout = 500; | ||
282 | u32 reg; | ||
283 | |||
284 | dwc3_writel(dwc->regs, DWC3_DGCMDPAR, param); | ||
285 | dwc3_writel(dwc->regs, DWC3_DGCMD, cmd | DWC3_DGCMD_CMDACT); | ||
286 | |||
287 | do { | ||
288 | reg = dwc3_readl(dwc->regs, DWC3_DGCMD); | ||
289 | if (!(reg & DWC3_DGCMD_CMDACT)) { | ||
290 | dev_vdbg(dwc->dev, "Command Complete --> %d\n", | ||
291 | DWC3_DGCMD_STATUS(reg)); | ||
292 | return 0; | ||
293 | } | ||
294 | |||
295 | /* | ||
296 | * We can't sleep here, because it's also called from | ||
297 | * interrupt context. | ||
298 | */ | ||
299 | timeout--; | ||
300 | if (!timeout) | ||
301 | return -ETIMEDOUT; | ||
302 | udelay(1); | ||
303 | } while (1); | ||
304 | } | ||
305 | |||
279 | int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep, | 306 | int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep, |
280 | unsigned cmd, struct dwc3_gadget_ep_cmd_params *params) | 307 | unsigned cmd, struct dwc3_gadget_ep_cmd_params *params) |
281 | { | 308 | { |
@@ -470,7 +497,7 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, | |||
470 | if (ret) | 497 | if (ret) |
471 | return ret; | 498 | return ret; |
472 | 499 | ||
473 | dep->desc = desc; | 500 | dep->endpoint.desc = desc; |
474 | dep->comp_desc = comp_desc; | 501 | dep->comp_desc = comp_desc; |
475 | dep->type = usb_endpoint_type(desc); | 502 | dep->type = usb_endpoint_type(desc); |
476 | dep->flags |= DWC3_EP_ENABLED; | 503 | dep->flags |= DWC3_EP_ENABLED; |
@@ -533,7 +560,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) | |||
533 | dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); | 560 | dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); |
534 | 561 | ||
535 | dep->stream_capable = false; | 562 | dep->stream_capable = false; |
536 | dep->desc = NULL; | ||
537 | dep->endpoint.desc = NULL; | 563 | dep->endpoint.desc = NULL; |
538 | dep->comp_desc = NULL; | 564 | dep->comp_desc = NULL; |
539 | dep->type = 0; | 565 | dep->type = 0; |
@@ -694,7 +720,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, | |||
694 | 720 | ||
695 | /* Skip the LINK-TRB on ISOC */ | 721 | /* Skip the LINK-TRB on ISOC */ |
696 | if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && | 722 | if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && |
697 | usb_endpoint_xfer_isoc(dep->desc)) | 723 | usb_endpoint_xfer_isoc(dep->endpoint.desc)) |
698 | return; | 724 | return; |
699 | 725 | ||
700 | if (!req->trb) { | 726 | if (!req->trb) { |
@@ -707,7 +733,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, | |||
707 | trb->bpl = lower_32_bits(dma); | 733 | trb->bpl = lower_32_bits(dma); |
708 | trb->bph = upper_32_bits(dma); | 734 | trb->bph = upper_32_bits(dma); |
709 | 735 | ||
710 | switch (usb_endpoint_type(dep->desc)) { | 736 | switch (usb_endpoint_type(dep->endpoint.desc)) { |
711 | case USB_ENDPOINT_XFER_CONTROL: | 737 | case USB_ENDPOINT_XFER_CONTROL: |
712 | trb->ctrl = DWC3_TRBCTL_CONTROL_SETUP; | 738 | trb->ctrl = DWC3_TRBCTL_CONTROL_SETUP; |
713 | break; | 739 | break; |
@@ -732,7 +758,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, | |||
732 | BUG(); | 758 | BUG(); |
733 | } | 759 | } |
734 | 760 | ||
735 | if (usb_endpoint_xfer_isoc(dep->desc)) { | 761 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
736 | trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; | 762 | trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; |
737 | trb->ctrl |= DWC3_TRB_CTRL_CSP; | 763 | trb->ctrl |= DWC3_TRB_CTRL_CSP; |
738 | } else { | 764 | } else { |
@@ -743,7 +769,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, | |||
743 | trb->ctrl |= DWC3_TRB_CTRL_LST; | 769 | trb->ctrl |= DWC3_TRB_CTRL_LST; |
744 | } | 770 | } |
745 | 771 | ||
746 | if (usb_endpoint_xfer_bulk(dep->desc) && dep->stream_capable) | 772 | if (usb_endpoint_xfer_bulk(dep->endpoint.desc) && dep->stream_capable) |
747 | trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(req->request.stream_id); | 773 | trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(req->request.stream_id); |
748 | 774 | ||
749 | trb->ctrl |= DWC3_TRB_CTRL_HWO; | 775 | trb->ctrl |= DWC3_TRB_CTRL_HWO; |
@@ -771,7 +797,7 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting) | |||
771 | trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK; | 797 | trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK; |
772 | 798 | ||
773 | /* Can't wrap around on a non-isoc EP since there's no link TRB */ | 799 | /* Can't wrap around on a non-isoc EP since there's no link TRB */ |
774 | if (!usb_endpoint_xfer_isoc(dep->desc)) { | 800 | if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
775 | max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK); | 801 | max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK); |
776 | if (trbs_left > max) | 802 | if (trbs_left > max) |
777 | trbs_left = max; | 803 | trbs_left = max; |
@@ -797,7 +823,7 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting) | |||
797 | * processed from the first TRB until the last one. Since we | 823 | * processed from the first TRB until the last one. Since we |
798 | * don't wrap around we have to start at the beginning. | 824 | * don't wrap around we have to start at the beginning. |
799 | */ | 825 | */ |
800 | if (usb_endpoint_xfer_isoc(dep->desc)) { | 826 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
801 | dep->busy_slot = 1; | 827 | dep->busy_slot = 1; |
802 | dep->free_slot = 1; | 828 | dep->free_slot = 1; |
803 | } else { | 829 | } else { |
@@ -807,7 +833,7 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting) | |||
807 | } | 833 | } |
808 | 834 | ||
809 | /* The last TRB is a link TRB, not used for xfer */ | 835 | /* The last TRB is a link TRB, not used for xfer */ |
810 | if ((trbs_left <= 1) && usb_endpoint_xfer_isoc(dep->desc)) | 836 | if ((trbs_left <= 1) && usb_endpoint_xfer_isoc(dep->endpoint.desc)) |
811 | return; | 837 | return; |
812 | 838 | ||
813 | list_for_each_entry_safe(req, n, &dep->request_list, list) { | 839 | list_for_each_entry_safe(req, n, &dep->request_list, list) { |
@@ -930,10 +956,12 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param, | |||
930 | } | 956 | } |
931 | 957 | ||
932 | dep->flags |= DWC3_EP_BUSY; | 958 | dep->flags |= DWC3_EP_BUSY; |
933 | dep->res_trans_idx = dwc3_gadget_ep_get_transfer_index(dwc, | ||
934 | dep->number); | ||
935 | 959 | ||
936 | WARN_ON_ONCE(!dep->res_trans_idx); | 960 | if (start_new) { |
961 | dep->res_trans_idx = dwc3_gadget_ep_get_transfer_index(dwc, | ||
962 | dep->number); | ||
963 | WARN_ON_ONCE(!dep->res_trans_idx); | ||
964 | } | ||
937 | 965 | ||
938 | return 0; | 966 | return 0; |
939 | } | 967 | } |
@@ -967,28 +995,37 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) | |||
967 | 995 | ||
968 | list_add_tail(&req->list, &dep->request_list); | 996 | list_add_tail(&req->list, &dep->request_list); |
969 | 997 | ||
998 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && (dep->flags & DWC3_EP_BUSY)) | ||
999 | dep->flags |= DWC3_EP_PENDING_REQUEST; | ||
1000 | |||
970 | /* | 1001 | /* |
971 | * There is one special case: XferNotReady with | 1002 | * There are two special cases: |
972 | * empty list of requests. We need to kick the | 1003 | * |
973 | * transfer here in that situation, otherwise | 1004 | * 1. XferNotReady with empty list of requests. We need to kick the |
974 | * we will be NAKing forever. | 1005 | * transfer here in that situation, otherwise we will be NAKing |
1006 | * forever. If we get XferNotReady before gadget driver has a | ||
1007 | * chance to queue a request, we will ACK the IRQ but won't be | ||
1008 | * able to receive the data until the next request is queued. | ||
1009 | * The following code is handling exactly that. | ||
975 | * | 1010 | * |
976 | * If we get XferNotReady before gadget driver | 1011 | * 2. XferInProgress on Isoc EP with an active transfer. We need to |
977 | * has a chance to queue a request, we will ACK | 1012 | * kick the transfer here after queuing a request, otherwise the |
978 | * the IRQ but won't be able to receive the data | 1013 | * core may not see the modified TRB(s). |
979 | * until the next request is queued. The following | ||
980 | * code is handling exactly that. | ||
981 | */ | 1014 | */ |
982 | if (dep->flags & DWC3_EP_PENDING_REQUEST) { | 1015 | if (dep->flags & DWC3_EP_PENDING_REQUEST) { |
983 | int ret; | 1016 | int ret; |
984 | int start_trans; | 1017 | int start_trans = 1; |
1018 | u8 trans_idx = dep->res_trans_idx; | ||
985 | 1019 | ||
986 | start_trans = 1; | 1020 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && |
987 | if (usb_endpoint_xfer_isoc(dep->desc) && | 1021 | (dep->flags & DWC3_EP_BUSY)) { |
988 | (dep->flags & DWC3_EP_BUSY)) | ||
989 | start_trans = 0; | 1022 | start_trans = 0; |
1023 | WARN_ON_ONCE(!trans_idx); | ||
1024 | } else { | ||
1025 | trans_idx = 0; | ||
1026 | } | ||
990 | 1027 | ||
991 | ret = __dwc3_gadget_kick_transfer(dep, 0, start_trans); | 1028 | ret = __dwc3_gadget_kick_transfer(dep, trans_idx, start_trans); |
992 | if (ret && ret != -EBUSY) { | 1029 | if (ret && ret != -EBUSY) { |
993 | struct dwc3 *dwc = dep->dwc; | 1030 | struct dwc3 *dwc = dep->dwc; |
994 | 1031 | ||
@@ -1011,7 +1048,7 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, | |||
1011 | 1048 | ||
1012 | int ret; | 1049 | int ret; |
1013 | 1050 | ||
1014 | if (!dep->desc) { | 1051 | if (!dep->endpoint.desc) { |
1015 | dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n", | 1052 | dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n", |
1016 | request, ep->name); | 1053 | request, ep->name); |
1017 | return -ESHUTDOWN; | 1054 | return -ESHUTDOWN; |
@@ -1125,7 +1162,7 @@ static int dwc3_gadget_ep_set_halt(struct usb_ep *ep, int value) | |||
1125 | 1162 | ||
1126 | spin_lock_irqsave(&dwc->lock, flags); | 1163 | spin_lock_irqsave(&dwc->lock, flags); |
1127 | 1164 | ||
1128 | if (usb_endpoint_xfer_isoc(dep->desc)) { | 1165 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
1129 | dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name); | 1166 | dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name); |
1130 | ret = -EINVAL; | 1167 | ret = -EINVAL; |
1131 | goto out; | 1168 | goto out; |
@@ -1356,7 +1393,24 @@ static int dwc3_gadget_start(struct usb_gadget *g, | |||
1356 | 1393 | ||
1357 | reg = dwc3_readl(dwc->regs, DWC3_DCFG); | 1394 | reg = dwc3_readl(dwc->regs, DWC3_DCFG); |
1358 | reg &= ~(DWC3_DCFG_SPEED_MASK); | 1395 | reg &= ~(DWC3_DCFG_SPEED_MASK); |
1359 | reg |= dwc->maximum_speed; | 1396 | |
1397 | /** | ||
1398 | * WORKAROUND: DWC3 revision < 2.20a have an issue | ||
1399 | * which would cause metastability state on Run/Stop | ||
1400 | * bit if we try to force the IP to USB2-only mode. | ||
1401 | * | ||
1402 | * Because of that, we cannot configure the IP to any | ||
1403 | * speed other than the SuperSpeed | ||
1404 | * | ||
1405 | * Refers to: | ||
1406 | * | ||
1407 | * STAR#9000525659: Clock Domain Crossing on DCTL in | ||
1408 | * USB 2.0 Mode | ||
1409 | */ | ||
1410 | if (dwc->revision < DWC3_REVISION_220A) | ||
1411 | reg |= DWC3_DCFG_SUPERSPEED; | ||
1412 | else | ||
1413 | reg |= dwc->maximum_speed; | ||
1360 | dwc3_writel(dwc->regs, DWC3_DCFG, reg); | 1414 | dwc3_writel(dwc->regs, DWC3_DCFG, reg); |
1361 | 1415 | ||
1362 | dwc->start_config_issued = false; | 1416 | dwc->start_config_issued = false; |
@@ -1681,7 +1735,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, | |||
1681 | case DWC3_DEPEVT_XFERCOMPLETE: | 1735 | case DWC3_DEPEVT_XFERCOMPLETE: |
1682 | dep->res_trans_idx = 0; | 1736 | dep->res_trans_idx = 0; |
1683 | 1737 | ||
1684 | if (usb_endpoint_xfer_isoc(dep->desc)) { | 1738 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
1685 | dev_dbg(dwc->dev, "%s is an Isochronous endpoint\n", | 1739 | dev_dbg(dwc->dev, "%s is an Isochronous endpoint\n", |
1686 | dep->name); | 1740 | dep->name); |
1687 | return; | 1741 | return; |
@@ -1690,7 +1744,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, | |||
1690 | dwc3_endpoint_transfer_complete(dwc, dep, event, 1); | 1744 | dwc3_endpoint_transfer_complete(dwc, dep, event, 1); |
1691 | break; | 1745 | break; |
1692 | case DWC3_DEPEVT_XFERINPROGRESS: | 1746 | case DWC3_DEPEVT_XFERINPROGRESS: |
1693 | if (!usb_endpoint_xfer_isoc(dep->desc)) { | 1747 | if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
1694 | dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n", | 1748 | dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n", |
1695 | dep->name); | 1749 | dep->name); |
1696 | return; | 1750 | return; |
@@ -1699,7 +1753,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, | |||
1699 | dwc3_endpoint_transfer_complete(dwc, dep, event, 0); | 1753 | dwc3_endpoint_transfer_complete(dwc, dep, event, 0); |
1700 | break; | 1754 | break; |
1701 | case DWC3_DEPEVT_XFERNOTREADY: | 1755 | case DWC3_DEPEVT_XFERNOTREADY: |
1702 | if (usb_endpoint_xfer_isoc(dep->desc)) { | 1756 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { |
1703 | dwc3_gadget_start_isoc(dwc, dep, event); | 1757 | dwc3_gadget_start_isoc(dwc, dep, event); |
1704 | } else { | 1758 | } else { |
1705 | int ret; | 1759 | int ret; |
@@ -1720,7 +1774,7 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, | |||
1720 | 1774 | ||
1721 | break; | 1775 | break; |
1722 | case DWC3_DEPEVT_STREAMEVT: | 1776 | case DWC3_DEPEVT_STREAMEVT: |
1723 | if (!usb_endpoint_xfer_bulk(dep->desc)) { | 1777 | if (!usb_endpoint_xfer_bulk(dep->endpoint.desc)) { |
1724 | dev_err(dwc->dev, "Stream event for non-Bulk %s\n", | 1778 | dev_err(dwc->dev, "Stream event for non-Bulk %s\n", |
1725 | dep->name); | 1779 | dep->name); |
1726 | return; | 1780 | return; |
@@ -1916,6 +1970,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) | |||
1916 | 1970 | ||
1917 | reg = dwc3_readl(dwc->regs, DWC3_DCTL); | 1971 | reg = dwc3_readl(dwc->regs, DWC3_DCTL); |
1918 | reg &= ~DWC3_DCTL_TSTCTRL_MASK; | 1972 | reg &= ~DWC3_DCTL_TSTCTRL_MASK; |
1973 | reg &= ~(DWC3_DCTL_INITU1ENA | DWC3_DCTL_INITU2ENA); | ||
1919 | dwc3_writel(dwc->regs, DWC3_DCTL, reg); | 1974 | dwc3_writel(dwc->regs, DWC3_DCTL, reg); |
1920 | dwc->test_mode = false; | 1975 | dwc->test_mode = false; |
1921 | 1976 | ||
@@ -2263,8 +2318,7 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc) | |||
2263 | goto err1; | 2318 | goto err1; |
2264 | } | 2319 | } |
2265 | 2320 | ||
2266 | dwc->setup_buf = kzalloc(sizeof(*dwc->setup_buf) * 2, | 2321 | dwc->setup_buf = kzalloc(DWC3_EP0_BOUNCE_SIZE, GFP_KERNEL); |
2267 | GFP_KERNEL); | ||
2268 | if (!dwc->setup_buf) { | 2322 | if (!dwc->setup_buf) { |
2269 | dev_err(dwc->dev, "failed to allocate setup buffer\n"); | 2323 | dev_err(dwc->dev, "failed to allocate setup buffer\n"); |
2270 | ret = -ENOMEM; | 2324 | ret = -ENOMEM; |
@@ -2272,7 +2326,8 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc) | |||
2272 | } | 2326 | } |
2273 | 2327 | ||
2274 | dwc->ep0_bounce = dma_alloc_coherent(dwc->dev, | 2328 | dwc->ep0_bounce = dma_alloc_coherent(dwc->dev, |
2275 | 512, &dwc->ep0_bounce_addr, GFP_KERNEL); | 2329 | DWC3_EP0_BOUNCE_SIZE, &dwc->ep0_bounce_addr, |
2330 | GFP_KERNEL); | ||
2276 | if (!dwc->ep0_bounce) { | 2331 | if (!dwc->ep0_bounce) { |
2277 | dev_err(dwc->dev, "failed to allocate ep0 bounce buffer\n"); | 2332 | dev_err(dwc->dev, "failed to allocate ep0 bounce buffer\n"); |
2278 | ret = -ENOMEM; | 2333 | ret = -ENOMEM; |
@@ -2313,6 +2368,14 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc) | |||
2313 | goto err5; | 2368 | goto err5; |
2314 | } | 2369 | } |
2315 | 2370 | ||
2371 | reg = dwc3_readl(dwc->regs, DWC3_DCFG); | ||
2372 | reg |= DWC3_DCFG_LPM_CAP; | ||
2373 | dwc3_writel(dwc->regs, DWC3_DCFG, reg); | ||
2374 | |||
2375 | reg = dwc3_readl(dwc->regs, DWC3_DCTL); | ||
2376 | reg |= DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA; | ||
2377 | dwc3_writel(dwc->regs, DWC3_DCTL, reg); | ||
2378 | |||
2316 | /* Enable all but Start and End of Frame IRQs */ | 2379 | /* Enable all but Start and End of Frame IRQs */ |
2317 | reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN | | 2380 | reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN | |
2318 | DWC3_DEVTEN_EVNTOVERFLOWEN | | 2381 | DWC3_DEVTEN_EVNTOVERFLOWEN | |
@@ -2351,8 +2414,8 @@ err5: | |||
2351 | dwc3_gadget_free_endpoints(dwc); | 2414 | dwc3_gadget_free_endpoints(dwc); |
2352 | 2415 | ||
2353 | err4: | 2416 | err4: |
2354 | dma_free_coherent(dwc->dev, 512, dwc->ep0_bounce, | 2417 | dma_free_coherent(dwc->dev, DWC3_EP0_BOUNCE_SIZE, |
2355 | dwc->ep0_bounce_addr); | 2418 | dwc->ep0_bounce, dwc->ep0_bounce_addr); |
2356 | 2419 | ||
2357 | err3: | 2420 | err3: |
2358 | kfree(dwc->setup_buf); | 2421 | kfree(dwc->setup_buf); |
@@ -2381,8 +2444,8 @@ void dwc3_gadget_exit(struct dwc3 *dwc) | |||
2381 | 2444 | ||
2382 | dwc3_gadget_free_endpoints(dwc); | 2445 | dwc3_gadget_free_endpoints(dwc); |
2383 | 2446 | ||
2384 | dma_free_coherent(dwc->dev, 512, dwc->ep0_bounce, | 2447 | dma_free_coherent(dwc->dev, DWC3_EP0_BOUNCE_SIZE, |
2385 | dwc->ep0_bounce_addr); | 2448 | dwc->ep0_bounce, dwc->ep0_bounce_addr); |
2386 | 2449 | ||
2387 | kfree(dwc->setup_buf); | 2450 | kfree(dwc->setup_buf); |
2388 | 2451 | ||