Lines Matching refs:priv_ep

74 static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
77 static int cdns3_ep_run_stream_transfer(struct cdns3_endpoint *priv_ep,
114 struct cdns3_endpoint *priv_ep) in cdns3_get_dma_pos() argument
118 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma; in cdns3_get_dma_pos()
185 dma_addr_t cdns3_trb_virt_to_dma(struct cdns3_endpoint *priv_ep, in cdns3_trb_virt_to_dma() argument
188 u32 offset = (char *)trb - (char *)priv_ep->trb_pool; in cdns3_trb_virt_to_dma()
190 return priv_ep->trb_pool_dma + offset; in cdns3_trb_virt_to_dma()
193 static int cdns3_ring_size(struct cdns3_endpoint *priv_ep) in cdns3_ring_size() argument
195 switch (priv_ep->type) { in cdns3_ring_size()
201 if (priv_ep->use_streams) in cdns3_ring_size()
208 static void cdns3_free_trb_pool(struct cdns3_endpoint *priv_ep) in cdns3_free_trb_pool() argument
210 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_free_trb_pool()
212 if (priv_ep->trb_pool) { in cdns3_free_trb_pool()
214 cdns3_ring_size(priv_ep), in cdns3_free_trb_pool()
215 priv_ep->trb_pool, priv_ep->trb_pool_dma); in cdns3_free_trb_pool()
216 priv_ep->trb_pool = NULL; in cdns3_free_trb_pool()
226 int cdns3_allocate_trb_pool(struct cdns3_endpoint *priv_ep) in cdns3_allocate_trb_pool() argument
228 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_allocate_trb_pool()
229 int ring_size = cdns3_ring_size(priv_ep); in cdns3_allocate_trb_pool()
233 if (priv_ep->trb_pool && priv_ep->alloc_ring_size < ring_size) in cdns3_allocate_trb_pool()
234 cdns3_free_trb_pool(priv_ep); in cdns3_allocate_trb_pool()
236 if (!priv_ep->trb_pool) { in cdns3_allocate_trb_pool()
237 priv_ep->trb_pool = dma_alloc_coherent(priv_dev->sysdev, in cdns3_allocate_trb_pool()
239 &priv_ep->trb_pool_dma, in cdns3_allocate_trb_pool()
241 if (!priv_ep->trb_pool) in cdns3_allocate_trb_pool()
244 priv_ep->alloc_ring_size = ring_size; in cdns3_allocate_trb_pool()
247 memset(priv_ep->trb_pool, 0, ring_size); in cdns3_allocate_trb_pool()
249 priv_ep->num_trbs = num_trbs; in cdns3_allocate_trb_pool()
251 if (!priv_ep->num) in cdns3_allocate_trb_pool()
255 link_trb = (priv_ep->trb_pool + (priv_ep->num_trbs - 1)); in cdns3_allocate_trb_pool()
257 if (priv_ep->use_streams) { in cdns3_allocate_trb_pool()
264 link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma)); in cdns3_allocate_trb_pool()
276 static void cdns3_ep_stall_flush(struct cdns3_endpoint *priv_ep) in cdns3_ep_stall_flush() argument
278 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_stall_flush()
281 trace_cdns3_halt(priv_ep, 1, 1); in cdns3_ep_stall_flush()
289 priv_ep->flags |= EP_STALLED; in cdns3_ep_stall_flush()
290 priv_ep->flags &= ~EP_STALL_PENDING; in cdns3_ep_stall_flush()
339 static void cdns3_ep_inc_enq(struct cdns3_endpoint *priv_ep) in cdns3_ep_inc_enq() argument
341 priv_ep->free_trbs--; in cdns3_ep_inc_enq()
342 cdns3_ep_inc_trb(&priv_ep->enqueue, &priv_ep->pcs, priv_ep->num_trbs); in cdns3_ep_inc_enq()
349 static void cdns3_ep_inc_deq(struct cdns3_endpoint *priv_ep) in cdns3_ep_inc_deq() argument
351 priv_ep->free_trbs++; in cdns3_ep_inc_deq()
352 cdns3_ep_inc_trb(&priv_ep->dequeue, &priv_ep->ccs, priv_ep->num_trbs); in cdns3_ep_inc_deq()
399 struct cdns3_endpoint *priv_ep) in cdns3_start_all_request() argument
403 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_start_all_request()
413 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_start_all_request()
416 (priv_ep->flags & EP_TDLCHK_EN) || in cdns3_start_all_request()
417 priv_ep->use_streams) { in cdns3_start_all_request()
423 while (!list_empty(&priv_ep->deferred_req_list)) { in cdns3_start_all_request()
424 request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_start_all_request()
426 if (!priv_ep->use_streams) { in cdns3_start_all_request()
427 ret = cdns3_ep_run_transfer(priv_ep, request); in cdns3_start_all_request()
429 priv_ep->stream_sg_idx = 0; in cdns3_start_all_request()
430 ret = cdns3_ep_run_stream_transfer(priv_ep, request); in cdns3_start_all_request()
437 &priv_ep->pending_req_list); in cdns3_start_all_request()
438 if (request->stream_id != 0 || (priv_ep->flags & EP_TDLCHK_EN)) in cdns3_start_all_request()
442 priv_ep->flags &= ~EP_RING_FULL; in cdns3_start_all_request()
452 #define cdns3_wa2_enable_detection(priv_dev, priv_ep, reg) do { \ argument
453 if (!priv_ep->dir && priv_ep->type != USB_ENDPOINT_XFER_ISOC) { \
454 priv_ep->flags |= EP_QUIRK_EXTRA_BUF_DET; \
494 static void cdns3_wa2_descmiss_copy_data(struct cdns3_endpoint *priv_ep, in cdns3_wa2_descmiss_copy_data() argument
500 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_wa2_descmiss_copy_data()
504 cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_descmiss_copy_data()
516 cdns3_gadget_ep_free_request(&priv_ep->endpoint, descmiss_req); in cdns3_wa2_descmiss_copy_data()
517 --priv_ep->wa2_counter; in cdns3_wa2_descmiss_copy_data()
525 struct cdns3_endpoint *priv_ep, in cdns3_wa2_gadget_giveback() argument
528 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN && in cdns3_wa2_gadget_giveback()
532 req = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_wa2_gadget_giveback()
534 priv_ep->descmis_req = NULL; in cdns3_wa2_gadget_giveback()
541 priv_ep->dir); in cdns3_wa2_gadget_giveback()
543 cdns3_wa2_descmiss_copy_data(priv_ep, req); in cdns3_wa2_gadget_giveback()
544 if (!(priv_ep->flags & EP_QUIRK_END_TRANSFER) && in cdns3_wa2_gadget_giveback()
549 usb_endpoint_dir_in(priv_ep->endpoint.desc)); in cdns3_wa2_gadget_giveback()
557 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_wa2_gadget_giveback()
565 struct cdns3_endpoint *priv_ep, in cdns3_wa2_gadget_ep_queue() argument
575 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_DET) { in cdns3_wa2_gadget_ep_queue()
578 cdns3_select_ep(priv_dev, priv_ep->num | priv_ep->dir); in cdns3_wa2_gadget_ep_queue()
579 priv_ep->flags &= ~EP_QUIRK_EXTRA_BUF_DET; in cdns3_wa2_gadget_ep_queue()
582 trace_cdns3_wa2(priv_ep, "workaround disabled\n"); in cdns3_wa2_gadget_ep_queue()
586 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN) { in cdns3_wa2_gadget_ep_queue()
587 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_wa2_gadget_ep_queue()
588 u8 descmiss_empty = list_empty(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_gadget_ep_queue()
597 cdns3_wa2_descmiss_copy_data(priv_ep, in cdns3_wa2_gadget_ep_queue()
600 trace_cdns3_wa2(priv_ep, "get internal stored data"); in cdns3_wa2_gadget_ep_queue()
603 &priv_ep->pending_req_list); in cdns3_wa2_gadget_ep_queue()
604 cdns3_gadget_giveback(priv_ep, priv_req, in cdns3_wa2_gadget_ep_queue()
620 trace_cdns3_wa2(priv_ep, "wait for pending transfer\n"); in cdns3_wa2_gadget_ep_queue()
626 &priv_ep->wa2_descmiss_req_list); in cdns3_wa2_gadget_ep_queue()
632 static void cdns3_wa2_remove_old_request(struct cdns3_endpoint *priv_ep) in cdns3_wa2_remove_old_request() argument
636 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_wa2_remove_old_request()
639 priv_req = cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_remove_old_request()
642 trace_cdns3_wa2(priv_ep, "removes eldest request"); in cdns3_wa2_remove_old_request()
646 cdns3_gadget_ep_free_request(&priv_ep->endpoint, in cdns3_wa2_remove_old_request()
648 --priv_ep->wa2_counter; in cdns3_wa2_remove_old_request()
662 static void cdns3_wa2_descmissing_packet(struct cdns3_endpoint *priv_ep) in cdns3_wa2_descmissing_packet() argument
666 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_wa2_descmissing_packet()
670 trace_cdns3_wa2(priv_ep, "Ignoring Descriptor missing IRQ\n"); in cdns3_wa2_descmissing_packet()
674 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_DET) { in cdns3_wa2_descmissing_packet()
675 priv_ep->flags &= ~EP_QUIRK_EXTRA_BUF_DET; in cdns3_wa2_descmissing_packet()
676 priv_ep->flags |= EP_QUIRK_EXTRA_BUF_EN; in cdns3_wa2_descmissing_packet()
679 trace_cdns3_wa2(priv_ep, "Description Missing detected\n"); in cdns3_wa2_descmissing_packet()
681 if (priv_ep->wa2_counter >= CDNS3_WA2_NUM_BUFFERS) { in cdns3_wa2_descmissing_packet()
682 trace_cdns3_wa2(priv_ep, "WA2 overflow\n"); in cdns3_wa2_descmissing_packet()
683 cdns3_wa2_remove_old_request(priv_ep); in cdns3_wa2_descmissing_packet()
686 request = cdns3_gadget_ep_alloc_request(&priv_ep->endpoint, in cdns3_wa2_descmissing_packet()
700 if (priv_ep->descmis_req) in cdns3_wa2_descmissing_packet()
701 priv_ep->descmis_req->flags |= REQUEST_INTERNAL_CH; in cdns3_wa2_descmissing_packet()
705 priv_ep->wa2_counter++; in cdns3_wa2_descmissing_packet()
708 cdns3_gadget_ep_free_request(&priv_ep->endpoint, request); in cdns3_wa2_descmissing_packet()
713 priv_ep->descmis_req = priv_req; in cdns3_wa2_descmissing_packet()
715 __cdns3_gadget_ep_queue(&priv_ep->endpoint, in cdns3_wa2_descmissing_packet()
716 &priv_ep->descmis_req->request, in cdns3_wa2_descmissing_packet()
722 dev_err(priv_ep->cdns3_dev->dev, in cdns3_wa2_descmissing_packet()
808 void cdns3_gadget_giveback(struct cdns3_endpoint *priv_ep, in cdns3_gadget_giveback() argument
812 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_giveback()
821 priv_ep->dir); in cdns3_gadget_giveback()
824 priv_ep->dir == USB_DIR_OUT && !request->status) in cdns3_gadget_giveback()
834 request = cdns3_wa2_gadget_giveback(priv_dev, priv_ep, in cdns3_gadget_giveback()
842 usb_gadget_giveback_request(&priv_ep->endpoint, in cdns3_gadget_giveback()
848 cdns3_gadget_ep_free_request(&priv_ep->endpoint, request); in cdns3_gadget_giveback()
851 static void cdns3_wa1_restore_cycle_bit(struct cdns3_endpoint *priv_ep) in cdns3_wa1_restore_cycle_bit() argument
854 if (priv_ep->wa1_set) { in cdns3_wa1_restore_cycle_bit()
855 trace_cdns3_wa1(priv_ep, "restore cycle bit"); in cdns3_wa1_restore_cycle_bit()
857 priv_ep->wa1_set = 0; in cdns3_wa1_restore_cycle_bit()
858 priv_ep->wa1_trb_index = 0xFFFF; in cdns3_wa1_restore_cycle_bit()
859 if (priv_ep->wa1_cycle_bit) { in cdns3_wa1_restore_cycle_bit()
860 priv_ep->wa1_trb->control = in cdns3_wa1_restore_cycle_bit()
861 priv_ep->wa1_trb->control | cpu_to_le32(0x1); in cdns3_wa1_restore_cycle_bit()
863 priv_ep->wa1_trb->control = in cdns3_wa1_restore_cycle_bit()
864 priv_ep->wa1_trb->control & cpu_to_le32(~0x1); in cdns3_wa1_restore_cycle_bit()
900 struct cdns3_endpoint *priv_ep = priv_req->priv_ep; in cdns3_prepare_aligned_request_buf() local
901 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_prepare_aligned_request_buf()
940 if (priv_ep->dir == USB_DIR_IN) { in cdns3_prepare_aligned_request_buf()
951 static int cdns3_wa1_update_guard(struct cdns3_endpoint *priv_ep, in cdns3_wa1_update_guard() argument
954 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_wa1_update_guard()
956 if (!priv_ep->wa1_set) { in cdns3_wa1_update_guard()
962 priv_ep->wa1_cycle_bit = priv_ep->pcs ? TRB_CYCLE : 0; in cdns3_wa1_update_guard()
963 priv_ep->wa1_set = 1; in cdns3_wa1_update_guard()
964 priv_ep->wa1_trb = trb; in cdns3_wa1_update_guard()
965 priv_ep->wa1_trb_index = priv_ep->enqueue; in cdns3_wa1_update_guard()
966 trace_cdns3_wa1(priv_ep, "set guard"); in cdns3_wa1_update_guard()
974 struct cdns3_endpoint *priv_ep) in cdns3_wa1_tray_restore_cycle_bit() argument
980 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
982 if (!doorbell || dma_index != priv_ep->wa1_trb_index) in cdns3_wa1_tray_restore_cycle_bit()
983 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
986 static int cdns3_ep_run_stream_transfer(struct cdns3_endpoint *priv_ep, in cdns3_ep_run_stream_transfer() argument
989 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_stream_transfer()
997 unsigned int sg_idx = priv_ep->stream_sg_idx; in cdns3_ep_run_stream_transfer()
1000 address = priv_ep->endpoint.desc->bEndpointAddress; in cdns3_ep_run_stream_transfer()
1002 priv_ep->flags |= EP_PENDING_REQUEST; in cdns3_ep_run_stream_transfer()
1011 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_stream_transfer()
1012 priv_req->start_trb = priv_ep->enqueue; in cdns3_ep_run_stream_transfer()
1016 cdns3_select_ep(priv_ep->cdns3_dev, address); in cdns3_ep_run_stream_transfer()
1029 tdl = DIV_ROUND_UP(length, priv_ep->endpoint.maxpacket); in cdns3_ep_run_stream_transfer()
1046 trace_cdns3_prepare_trb(priv_ep, priv_req->trb); in cdns3_ep_run_stream_transfer()
1055 writel(EP_TRADDR_TRADDR(priv_ep->trb_pool_dma), in cdns3_ep_run_stream_transfer()
1058 if (!(priv_ep->flags & EP_STALLED)) { in cdns3_ep_run_stream_transfer()
1059 trace_cdns3_ring(priv_ep); in cdns3_ep_run_stream_transfer()
1063 priv_ep->prime_flag = false; in cdns3_ep_run_stream_transfer()
1076 priv_ep->last_stream_id = priv_req->request.stream_id; in cdns3_ep_run_stream_transfer()
1081 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_ep_run_stream_transfer()
1091 static void cdns3_rearm_drdy_if_needed(struct cdns3_endpoint *priv_ep) in cdns3_rearm_drdy_if_needed() argument
1093 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_drdy_if_needed()
1111 static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, in cdns3_ep_run_transfer() argument
1114 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_transfer()
1129 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) in cdns3_ep_run_transfer()
1130 num_trb = priv_ep->interval; in cdns3_ep_run_transfer()
1134 if (num_trb > priv_ep->free_trbs) { in cdns3_ep_run_transfer()
1135 priv_ep->flags |= EP_RING_FULL; in cdns3_ep_run_transfer()
1140 address = priv_ep->endpoint.desc->bEndpointAddress; in cdns3_ep_run_transfer()
1142 priv_ep->flags |= EP_PENDING_REQUEST; in cdns3_ep_run_transfer()
1150 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1151 priv_req->start_trb = priv_ep->enqueue; in cdns3_ep_run_transfer()
1154 cdns3_select_ep(priv_ep->cdns3_dev, address); in cdns3_ep_run_transfer()
1157 if ((priv_ep->enqueue + num_trb) >= (priv_ep->num_trbs - 1)) { in cdns3_ep_run_transfer()
1162 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_ep_run_transfer()
1165 if (doorbell && dma_index == priv_ep->num_trbs - 1) { in cdns3_ep_run_transfer()
1166 priv_ep->flags |= EP_DEFERRED_DRDY; in cdns3_ep_run_transfer()
1171 link_trb = priv_ep->trb_pool + (priv_ep->num_trbs - 1); in cdns3_ep_run_transfer()
1180 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC || in cdns3_ep_run_transfer()
1184 link_trb->control = cpu_to_le32(((priv_ep->pcs) ? TRB_CYCLE : 0) | in cdns3_ep_run_transfer()
1189 togle_pcs = cdns3_wa1_update_guard(priv_ep, trb); in cdns3_ep_run_transfer()
1195 control = priv_ep->pcs ? 0 : TRB_CYCLE; in cdns3_ep_run_transfer()
1201 priv_ep->endpoint.maxpacket); in cdns3_ep_run_transfer()
1221 if (priv_ep->flags & EP_TDLCHK_EN) in cdns3_ep_run_transfer()
1223 priv_ep->endpoint.maxpacket); in cdns3_ep_run_transfer()
1225 trb->length |= cpu_to_le32(TRB_BURST_LEN(priv_ep->trb_burst_size) | in cdns3_ep_run_transfer()
1227 pcs = priv_ep->pcs ? TRB_CYCLE : 0; in cdns3_ep_run_transfer()
1236 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) { in cdns3_ep_run_transfer()
1260 priv_req->end_trb = priv_ep->enqueue; in cdns3_ep_run_transfer()
1261 cdns3_ep_inc_enq(priv_ep); in cdns3_ep_run_transfer()
1262 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1275 (priv_ep->flags & EP_TDLCHK_EN)) { in cdns3_ep_run_transfer()
1281 priv_ep->pending_tdl = total_tdl - EP_CMD_TDL_MAX; in cdns3_ep_run_transfer()
1301 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep); in cdns3_ep_run_transfer()
1307 trace_cdns3_prepare_trb(priv_ep, trb + i); in cdns3_ep_run_transfer()
1309 trb = priv_ep->trb_pool; in cdns3_ep_run_transfer()
1317 trace_cdns3_prepare_trb(priv_ep, priv_req->trb); in cdns3_ep_run_transfer()
1330 if (priv_ep->flags & EP_UPDATE_EP_TRBADDR) { in cdns3_ep_run_transfer()
1336 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir && in cdns3_ep_run_transfer()
1337 !(priv_ep->flags & EP_QUIRK_ISO_OUT_EN)) { in cdns3_ep_run_transfer()
1338 priv_ep->flags |= EP_QUIRK_ISO_OUT_EN; in cdns3_ep_run_transfer()
1343 writel(EP_TRADDR_TRADDR(priv_ep->trb_pool_dma + in cdns3_ep_run_transfer()
1347 priv_ep->flags &= ~EP_UPDATE_EP_TRBADDR; in cdns3_ep_run_transfer()
1350 if (!priv_ep->wa1_set && !(priv_ep->flags & EP_STALLED)) { in cdns3_ep_run_transfer()
1351 trace_cdns3_ring(priv_ep); in cdns3_ep_run_transfer()
1355 cdns3_rearm_drdy_if_needed(priv_ep); in cdns3_ep_run_transfer()
1356 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_ep_run_transfer()
1368 struct cdns3_endpoint *priv_ep; in cdns3_set_hw_configuration() local
1383 priv_ep = ep_to_cdns3_ep(ep); in cdns3_set_hw_configuration()
1384 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_set_hw_configuration()
1430 static bool cdns3_trb_handled(struct cdns3_endpoint *priv_ep, in cdns3_trb_handled() argument
1433 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_trb_handled()
1439 current_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_trb_handled()
1444 if (priv_ep->dequeue > priv_req->end_trb) in cdns3_trb_handled()
1447 if (priv_ep->dequeue < priv_req->start_trb) in cdns3_trb_handled()
1452 (priv_ep->dequeue > priv_req->end_trb) && in cdns3_trb_handled()
1453 (priv_ep->dequeue < priv_req->start_trb)) in cdns3_trb_handled()
1457 (priv_ep->dequeue != priv_req->end_trb)) in cdns3_trb_handled()
1460 trb = &priv_ep->trb_pool[priv_ep->dequeue]; in cdns3_trb_handled()
1462 if ((le32_to_cpu(trb->control) & TRB_CYCLE) != priv_ep->ccs) in cdns3_trb_handled()
1465 if (doorbell == 1 && current_index == priv_ep->dequeue) in cdns3_trb_handled()
1469 if (TRBS_PER_SEGMENT == 2 && priv_ep->type != USB_ENDPOINT_XFER_ISOC) { in cdns3_trb_handled()
1474 if (priv_ep->enqueue == priv_ep->dequeue && in cdns3_trb_handled()
1475 priv_ep->free_trbs == 0) { in cdns3_trb_handled()
1477 } else if (priv_ep->dequeue < current_index) { in cdns3_trb_handled()
1478 if ((current_index == (priv_ep->num_trbs - 1)) && in cdns3_trb_handled()
1479 !priv_ep->dequeue) in cdns3_trb_handled()
1483 } else if (priv_ep->dequeue > current_index) { in cdns3_trb_handled()
1494 struct cdns3_endpoint *priv_ep) in cdns3_transfer_completed() argument
1502 while (!list_empty(&priv_ep->pending_req_list)) { in cdns3_transfer_completed()
1503 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_transfer_completed()
1506 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1510 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1511 cdns3_ep_inc_deq(priv_ep); in cdns3_transfer_completed()
1512 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1519 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1521 while (cdns3_trb_handled(priv_ep, priv_req)) { in cdns3_transfer_completed()
1526 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1527 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1538 cdns3_ep_inc_deq(priv_ep); in cdns3_transfer_completed()
1542 cdns3_gadget_giveback(priv_ep, priv_req, 0); in cdns3_transfer_completed()
1549 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC && in cdns3_transfer_completed()
1556 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1558 trb = priv_ep->trb_pool; in cdns3_transfer_completed()
1559 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1569 (request->num_sgs == (priv_ep->stream_sg_idx + 1))) { in cdns3_transfer_completed()
1570 priv_ep->stream_sg_idx = 0; in cdns3_transfer_completed()
1571 cdns3_gadget_giveback(priv_ep, priv_req, 0); in cdns3_transfer_completed()
1573 priv_ep->stream_sg_idx++; in cdns3_transfer_completed()
1574 cdns3_ep_run_stream_transfer(priv_ep, request); in cdns3_transfer_completed()
1579 priv_ep->flags &= ~EP_PENDING_REQUEST; in cdns3_transfer_completed()
1582 if (!(priv_ep->flags & EP_STALLED) && in cdns3_transfer_completed()
1583 !(priv_ep->flags & EP_STALL_PENDING)) in cdns3_transfer_completed()
1584 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_transfer_completed()
1587 void cdns3_rearm_transfer(struct cdns3_endpoint *priv_ep, u8 rearm) in cdns3_rearm_transfer() argument
1589 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_transfer()
1591 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_rearm_transfer()
1594 trace_cdns3_ring(priv_ep); in cdns3_rearm_transfer()
1602 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_rearm_transfer()
1607 static void cdns3_reprogram_tdl(struct cdns3_endpoint *priv_ep) in cdns3_reprogram_tdl() argument
1609 u16 tdl = priv_ep->pending_tdl; in cdns3_reprogram_tdl()
1610 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_reprogram_tdl()
1614 priv_ep->pending_tdl -= EP_CMD_TDL_MAX; in cdns3_reprogram_tdl()
1616 priv_ep->pending_tdl = 0; in cdns3_reprogram_tdl()
1628 static int cdns3_check_ep_interrupt_proceed(struct cdns3_endpoint *priv_ep) in cdns3_check_ep_interrupt_proceed() argument
1630 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_check_ep_interrupt_proceed()
1636 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_check_ep_interrupt_proceed()
1638 trace_cdns3_epx_irq(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1643 if ((ep_sts_reg & EP_STS_PRIME) && priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1658 EP_CMD_ERDY_SID(priv_ep->last_stream_id), in cdns3_check_ep_interrupt_proceed()
1662 priv_ep->prime_flag = true; in cdns3_check_ep_interrupt_proceed()
1664 pending_request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_check_ep_interrupt_proceed()
1665 deferred_request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_check_ep_interrupt_proceed()
1668 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1674 if (priv_ep->flags & EP_STALL_PENDING && in cdns3_check_ep_interrupt_proceed()
1677 cdns3_ep_stall_flush(priv_ep); in cdns3_check_ep_interrupt_proceed()
1687 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && in cdns3_check_ep_interrupt_proceed()
1688 !priv_ep->wa1_set) { in cdns3_check_ep_interrupt_proceed()
1689 if (!priv_ep->dir) { in cdns3_check_ep_interrupt_proceed()
1694 priv_ep->flags &= ~EP_QUIRK_ISO_OUT_EN; in cdns3_check_ep_interrupt_proceed()
1695 priv_ep->flags |= EP_UPDATE_EP_TRBADDR; in cdns3_check_ep_interrupt_proceed()
1697 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1698 } else if (!(priv_ep->flags & EP_STALLED) && in cdns3_check_ep_interrupt_proceed()
1699 !(priv_ep->flags & EP_STALL_PENDING)) { in cdns3_check_ep_interrupt_proceed()
1700 if (priv_ep->flags & EP_DEFERRED_DRDY) { in cdns3_check_ep_interrupt_proceed()
1701 priv_ep->flags &= ~EP_DEFERRED_DRDY; in cdns3_check_ep_interrupt_proceed()
1702 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1704 cdns3_rearm_transfer(priv_ep, in cdns3_check_ep_interrupt_proceed()
1705 priv_ep->wa1_set); in cdns3_check_ep_interrupt_proceed()
1712 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN) { in cdns3_check_ep_interrupt_proceed()
1714 priv_ep->flags |= EP_QUIRK_END_TRANSFER; in cdns3_check_ep_interrupt_proceed()
1716 priv_ep->flags &= ~EP_QUIRK_END_TRANSFER; in cdns3_check_ep_interrupt_proceed()
1719 if (!priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1722 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1723 } else if ((priv_ep->flags & EP_TDLCHK_EN) & in cdns3_check_ep_interrupt_proceed()
1724 priv_ep->pending_tdl) { in cdns3_check_ep_interrupt_proceed()
1726 cdns3_reprogram_tdl(priv_ep); in cdns3_check_ep_interrupt_proceed()
1728 } else if (priv_ep->dir == USB_DIR_OUT) { in cdns3_check_ep_interrupt_proceed()
1729 priv_ep->ep_sts_pending |= ep_sts_reg; in cdns3_check_ep_interrupt_proceed()
1731 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1739 if (priv_ep->dir == USB_DIR_OUT && (ep_sts_reg & EP_STS_MD_EXIT) && in cdns3_check_ep_interrupt_proceed()
1740 (priv_ep->ep_sts_pending & EP_STS_IOT) && priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1741 priv_ep->ep_sts_pending = 0; in cdns3_check_ep_interrupt_proceed()
1742 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1752 !(priv_ep->flags & EP_STALLED)) in cdns3_check_ep_interrupt_proceed()
1753 cdns3_wa2_descmissing_packet(priv_ep); in cdns3_check_ep_interrupt_proceed()
1994 struct cdns3_endpoint *priv_ep) in cdns3_configure_dmult() argument
2005 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) { in cdns3_configure_dmult()
2008 if (priv_ep->dir) in cdns3_configure_dmult()
2009 mask = BIT(priv_ep->num + 16); in cdns3_configure_dmult()
2011 mask = BIT(priv_ep->num); in cdns3_configure_dmult()
2013 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) { in cdns3_configure_dmult()
2020 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) in cdns3_configure_dmult()
2032 int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) in cdns3_ep_config() argument
2034 bool is_iso_ep = (priv_ep->type == USB_ENDPOINT_XFER_ISOC); in cdns3_ep_config()
2035 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_config()
2036 u32 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_ep_config()
2046 cdns3_configure_dmult(priv_dev, priv_ep); in cdns3_ep_config()
2048 switch (priv_ep->type) { in cdns3_ep_config()
2052 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir) in cdns3_ep_config()
2058 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir) in cdns3_ep_config()
2078 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) { in cdns3_ep_config()
2083 if (priv_ep->interval > 1) in cdns3_ep_config()
2095 priv_ep->trb_burst_size = 128; in cdns3_ep_config()
2097 priv_ep->trb_burst_size = 64; in cdns3_ep_config()
2099 priv_ep->trb_burst_size = 16; in cdns3_ep_config()
2104 !!priv_ep->dir); in cdns3_ep_config()
2114 if (priv_ep->use_streams && priv_dev->gadget.speed >= USB_SPEED_SUPER) { in cdns3_ep_config()
2116 u32 mask = BIT(priv_ep->num + (priv_ep->dir ? 16 : 0)); in cdns3_ep_config()
2137 priv_ep->flags |= EP_CONFIGURED; in cdns3_ep_config()
2140 priv_ep->name, ep_cfg); in cdns3_ep_config()
2147 struct cdns3_endpoint *priv_ep) in cdns3_ep_dir_is_correct() argument
2149 return (priv_ep->endpoint.caps.dir_in && usb_endpoint_dir_in(desc)) || in cdns3_ep_dir_is_correct()
2150 (priv_ep->endpoint.caps.dir_out && usb_endpoint_dir_out(desc)); in cdns3_ep_dir_is_correct()
2158 struct cdns3_endpoint *priv_ep; in cdns3_find_available_ep() local
2170 priv_ep = ep_to_cdns3_ep(ep); in cdns3_find_available_ep()
2171 if (cdns3_ep_dir_is_correct(desc, priv_ep)) { in cdns3_find_available_ep()
2172 if (!(priv_ep->flags & EP_CLAIMED)) { in cdns3_find_available_ep()
2173 priv_ep->num = num; in cdns3_find_available_ep()
2174 return priv_ep; in cdns3_find_available_ep()
2204 struct cdns3_endpoint *priv_ep; in cdns3_gadget_match_ep() local
2207 priv_ep = cdns3_find_available_ep(priv_dev, desc); in cdns3_gadget_match_ep()
2208 if (IS_ERR(priv_ep)) { in cdns3_gadget_match_ep()
2213 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name); in cdns3_gadget_match_ep()
2216 priv_ep->endpoint.desc = desc; in cdns3_gadget_match_ep()
2217 priv_ep->dir = usb_endpoint_dir_in(desc) ? USB_DIR_IN : USB_DIR_OUT; in cdns3_gadget_match_ep()
2218 priv_ep->type = usb_endpoint_type(desc); in cdns3_gadget_match_ep()
2219 priv_ep->flags |= EP_CLAIMED; in cdns3_gadget_match_ep()
2220 priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; in cdns3_gadget_match_ep()
2223 return &priv_ep->endpoint; in cdns3_gadget_match_ep()
2236 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_alloc_request() local
2243 priv_req->priv_ep = priv_ep; in cdns3_gadget_ep_alloc_request()
2276 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_enable() local
2291 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_enable()
2292 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_enable()
2293 comp_desc = priv_ep->endpoint.comp_desc; in cdns3_gadget_ep_enable()
2305 if (dev_WARN_ONCE(priv_dev->dev, priv_ep->flags & EP_ENABLED, in cdns3_gadget_ep_enable()
2306 "%s is already enabled\n", priv_ep->name)) in cdns3_gadget_ep_enable()
2311 priv_ep->endpoint.desc = desc; in cdns3_gadget_ep_enable()
2312 priv_ep->type = usb_endpoint_type(desc); in cdns3_gadget_ep_enable()
2313 priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; in cdns3_gadget_ep_enable()
2315 if (priv_ep->interval > ISO_MAX_INTERVAL && in cdns3_gadget_ep_enable()
2316 priv_ep->type == USB_ENDPOINT_XFER_ISOC) { in cdns3_gadget_ep_enable()
2324 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_ep_enable()
2335 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) in cdns3_gadget_ep_enable()
2347 priv_ep->use_streams = true; in cdns3_gadget_ep_enable()
2348 ret = cdns3_ep_config(priv_ep, enable); in cdns3_gadget_ep_enable()
2352 ret = cdns3_ep_config(priv_ep, enable); in cdns3_gadget_ep_enable()
2358 ret = cdns3_allocate_trb_pool(priv_ep); in cdns3_gadget_ep_enable()
2362 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_ep_enable()
2365 trace_cdns3_gadget_ep_enable(priv_ep); in cdns3_gadget_ep_enable()
2374 cdns3_free_trb_pool(priv_ep); in cdns3_gadget_ep_enable()
2384 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg); in cdns3_gadget_ep_enable()
2389 priv_ep->flags &= ~(EP_PENDING_REQUEST | EP_STALLED | EP_STALL_PENDING | in cdns3_gadget_ep_enable()
2391 priv_ep->flags |= EP_ENABLED | EP_UPDATE_EP_TRBADDR; in cdns3_gadget_ep_enable()
2392 priv_ep->wa1_set = 0; in cdns3_gadget_ep_enable()
2393 priv_ep->enqueue = 0; in cdns3_gadget_ep_enable()
2394 priv_ep->dequeue = 0; in cdns3_gadget_ep_enable()
2396 priv_ep->pcs = !!EP_STS_CCS(reg); in cdns3_gadget_ep_enable()
2397 priv_ep->ccs = !!EP_STS_CCS(reg); in cdns3_gadget_ep_enable()
2399 priv_ep->free_trbs = priv_ep->num_trbs - 1; in cdns3_gadget_ep_enable()
2414 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_disable() local
2428 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_disable()
2429 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_disable()
2431 if (dev_WARN_ONCE(priv_dev->dev, !(priv_ep->flags & EP_ENABLED), in cdns3_gadget_ep_disable()
2432 "%s is already disabled\n", priv_ep->name)) in cdns3_gadget_ep_disable()
2437 trace_cdns3_gadget_ep_disable(priv_ep); in cdns3_gadget_ep_disable()
2459 priv_ep->name); in cdns3_gadget_ep_disable()
2461 while (!list_empty(&priv_ep->pending_req_list)) { in cdns3_gadget_ep_disable()
2462 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_gadget_ep_disable()
2464 cdns3_gadget_giveback(priv_ep, to_cdns3_request(request), in cdns3_gadget_ep_disable()
2468 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_gadget_ep_disable()
2469 priv_req = cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_gadget_ep_disable()
2472 cdns3_gadget_ep_free_request(&priv_ep->endpoint, in cdns3_gadget_ep_disable()
2475 --priv_ep->wa2_counter; in cdns3_gadget_ep_disable()
2478 while (!list_empty(&priv_ep->deferred_req_list)) { in cdns3_gadget_ep_disable()
2479 request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_gadget_ep_disable()
2481 cdns3_gadget_giveback(priv_ep, to_cdns3_request(request), in cdns3_gadget_ep_disable()
2485 priv_ep->descmis_req = NULL; in cdns3_gadget_ep_disable()
2488 priv_ep->flags &= ~EP_ENABLED; in cdns3_gadget_ep_disable()
2489 priv_ep->use_streams = false; in cdns3_gadget_ep_disable()
2508 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in __cdns3_gadget_ep_queue() local
2509 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_queue()
2519 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep, in __cdns3_gadget_ep_queue()
2535 list_add_tail(&request->list, &priv_ep->deferred_req_list); in __cdns3_gadget_ep_queue()
2546 !(priv_ep->flags & EP_STALLED) && in __cdns3_gadget_ep_queue()
2547 !(priv_ep->flags & EP_STALL_PENDING)) in __cdns3_gadget_ep_queue()
2548 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2550 if (priv_dev->hw_configured_flag && priv_ep->prime_flag) in __cdns3_gadget_ep_queue()
2551 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2561 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_queue() local
2569 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_queue()
2570 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_queue()
2588 priv_ep->name); in cdns3_gadget_ep_queue()
2606 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_dequeue() local
2618 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_dequeue()
2628 list_for_each_entry_safe(req, req_temp, &priv_ep->pending_req_list, in cdns3_gadget_ep_dequeue()
2636 list_for_each_entry_safe(req, req_temp, &priv_ep->deferred_req_list, in cdns3_gadget_ep_dequeue()
2649 link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma + in cdns3_gadget_ep_dequeue()
2654 if (priv_ep->wa1_trb == priv_req->trb) in cdns3_gadget_ep_dequeue()
2655 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_gadget_ep_dequeue()
2658 cdns3_gadget_giveback(priv_ep, priv_req, -ECONNRESET); in cdns3_gadget_ep_dequeue()
2670 void __cdns3_gadget_ep_set_halt(struct cdns3_endpoint *priv_ep) in __cdns3_gadget_ep_set_halt() argument
2672 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_set_halt()
2674 trace_cdns3_halt(priv_ep, 1, 0); in __cdns3_gadget_ep_set_halt()
2676 if (!(priv_ep->flags & EP_STALLED)) { in __cdns3_gadget_ep_set_halt()
2680 cdns3_ep_stall_flush(priv_ep); in __cdns3_gadget_ep_set_halt()
2682 priv_ep->flags |= EP_STALL_PENDING; in __cdns3_gadget_ep_set_halt()
2691 int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep) in __cdns3_gadget_ep_clear_halt() argument
2693 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_clear_halt()
2701 trace_cdns3_halt(priv_ep, 0, 0); in __cdns3_gadget_ep_clear_halt()
2703 request = cdns3_next_request(&priv_ep->pending_req_list); in __cdns3_gadget_ep_clear_halt()
2721 priv_ep->flags &= ~(EP_STALLED | EP_STALL_PENDING); in __cdns3_gadget_ep_clear_halt()
2727 cdns3_rearm_transfer(priv_ep, 1); in __cdns3_gadget_ep_clear_halt()
2730 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_clear_halt()
2743 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_set_halt() local
2744 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_set_halt()
2748 if (!(priv_ep->flags & EP_ENABLED)) in cdns3_gadget_ep_set_halt()
2756 priv_ep->flags &= ~EP_WEDGE; in cdns3_gadget_ep_set_halt()
2757 ret = __cdns3_gadget_ep_clear_halt(priv_ep); in cdns3_gadget_ep_set_halt()
2759 __cdns3_gadget_ep_set_halt(priv_ep); in cdns3_gadget_ep_set_halt()
2944 struct cdns3_endpoint *priv_ep; in cdns3_gadget_udc_stop() local
2956 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_udc_stop()
2957 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_udc_stop()
2963 priv_ep->flags &= ~EP_CLAIMED; in cdns3_gadget_udc_stop()
3007 struct cdns3_endpoint *priv_ep; in cdns3_init_eps() local
3032 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep), in cdns3_init_eps()
3034 if (!priv_ep) in cdns3_init_eps()
3038 priv_ep->cdns3_dev = priv_dev; in cdns3_init_eps()
3039 priv_dev->eps[i] = priv_ep; in cdns3_init_eps()
3040 priv_ep->num = ep_number; in cdns3_init_eps()
3041 priv_ep->dir = ep_dir ? USB_DIR_IN : USB_DIR_OUT; in cdns3_init_eps()
3044 ret = cdns3_init_ep0(priv_dev, priv_ep); in cdns3_init_eps()
3050 snprintf(priv_ep->name, sizeof(priv_ep->name), "ep%d%s", in cdns3_init_eps()
3052 priv_ep->endpoint.name = priv_ep->name; in cdns3_init_eps()
3054 usb_ep_set_maxpacket_limit(&priv_ep->endpoint, in cdns3_init_eps()
3056 priv_ep->endpoint.max_streams = CDNS3_EP_MAX_STREAMS; in cdns3_init_eps()
3057 priv_ep->endpoint.ops = &cdns3_gadget_ep_ops; in cdns3_init_eps()
3059 priv_ep->endpoint.caps.dir_in = 1; in cdns3_init_eps()
3061 priv_ep->endpoint.caps.dir_out = 1; in cdns3_init_eps()
3064 priv_ep->endpoint.caps.type_iso = 1; in cdns3_init_eps()
3066 priv_ep->endpoint.caps.type_bulk = 1; in cdns3_init_eps()
3067 priv_ep->endpoint.caps.type_int = 1; in cdns3_init_eps()
3069 list_add_tail(&priv_ep->endpoint.ep_list, in cdns3_init_eps()
3073 priv_ep->flags = 0; in cdns3_init_eps()
3076 priv_ep->name, in cdns3_init_eps()
3077 priv_ep->endpoint.caps.type_bulk ? "BULK, INT" : "", in cdns3_init_eps()
3078 priv_ep->endpoint.caps.type_iso ? "ISO" : ""); in cdns3_init_eps()
3080 INIT_LIST_HEAD(&priv_ep->pending_req_list); in cdns3_init_eps()
3081 INIT_LIST_HEAD(&priv_ep->deferred_req_list); in cdns3_init_eps()
3082 INIT_LIST_HEAD(&priv_ep->wa2_descmiss_req_list); in cdns3_init_eps()