Lines Matching refs:priv_ep

76 static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
79 static int cdns3_ep_run_stream_transfer(struct cdns3_endpoint *priv_ep,
116 struct cdns3_endpoint *priv_ep) in cdns3_get_dma_pos() argument
120 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma; in cdns3_get_dma_pos()
187 dma_addr_t cdns3_trb_virt_to_dma(struct cdns3_endpoint *priv_ep, in cdns3_trb_virt_to_dma() argument
190 u32 offset = (char *)trb - (char *)priv_ep->trb_pool; in cdns3_trb_virt_to_dma()
192 return priv_ep->trb_pool_dma + offset; in cdns3_trb_virt_to_dma()
195 static void cdns3_free_trb_pool(struct cdns3_endpoint *priv_ep) in cdns3_free_trb_pool() argument
197 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_free_trb_pool()
199 if (priv_ep->trb_pool) { in cdns3_free_trb_pool()
201 priv_ep->trb_pool, priv_ep->trb_pool_dma); in cdns3_free_trb_pool()
202 priv_ep->trb_pool = NULL; in cdns3_free_trb_pool()
212 int cdns3_allocate_trb_pool(struct cdns3_endpoint *priv_ep) in cdns3_allocate_trb_pool() argument
214 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_allocate_trb_pool()
219 if (priv_ep->trb_pool && priv_ep->alloc_ring_size < ring_size) in cdns3_allocate_trb_pool()
220 cdns3_free_trb_pool(priv_ep); in cdns3_allocate_trb_pool()
222 if (!priv_ep->trb_pool) { in cdns3_allocate_trb_pool()
223 priv_ep->trb_pool = dma_pool_alloc(priv_dev->eps_dma_pool, in cdns3_allocate_trb_pool()
225 &priv_ep->trb_pool_dma); in cdns3_allocate_trb_pool()
227 if (!priv_ep->trb_pool) in cdns3_allocate_trb_pool()
230 priv_ep->alloc_ring_size = ring_size; in cdns3_allocate_trb_pool()
233 memset(priv_ep->trb_pool, 0, ring_size); in cdns3_allocate_trb_pool()
235 priv_ep->num_trbs = num_trbs; in cdns3_allocate_trb_pool()
237 if (!priv_ep->num) in cdns3_allocate_trb_pool()
241 link_trb = (priv_ep->trb_pool + (priv_ep->num_trbs - 1)); in cdns3_allocate_trb_pool()
243 if (priv_ep->use_streams) { in cdns3_allocate_trb_pool()
250 link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma)); in cdns3_allocate_trb_pool()
262 static void cdns3_ep_stall_flush(struct cdns3_endpoint *priv_ep) in cdns3_ep_stall_flush() argument
264 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_stall_flush()
267 trace_cdns3_halt(priv_ep, 1, 1); in cdns3_ep_stall_flush()
275 priv_ep->flags |= EP_STALLED; in cdns3_ep_stall_flush()
276 priv_ep->flags &= ~EP_STALL_PENDING; in cdns3_ep_stall_flush()
325 static void cdns3_ep_inc_enq(struct cdns3_endpoint *priv_ep) in cdns3_ep_inc_enq() argument
327 priv_ep->free_trbs--; in cdns3_ep_inc_enq()
328 cdns3_ep_inc_trb(&priv_ep->enqueue, &priv_ep->pcs, priv_ep->num_trbs); in cdns3_ep_inc_enq()
335 static void cdns3_ep_inc_deq(struct cdns3_endpoint *priv_ep) in cdns3_ep_inc_deq() argument
337 priv_ep->free_trbs++; in cdns3_ep_inc_deq()
338 cdns3_ep_inc_trb(&priv_ep->dequeue, &priv_ep->ccs, priv_ep->num_trbs); in cdns3_ep_inc_deq()
385 struct cdns3_endpoint *priv_ep) in cdns3_start_all_request() argument
389 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_start_all_request()
399 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_start_all_request()
402 (priv_ep->flags & EP_TDLCHK_EN) || in cdns3_start_all_request()
403 priv_ep->use_streams) { in cdns3_start_all_request()
409 while (!list_empty(&priv_ep->deferred_req_list)) { in cdns3_start_all_request()
410 request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_start_all_request()
412 if (!priv_ep->use_streams) { in cdns3_start_all_request()
413 ret = cdns3_ep_run_transfer(priv_ep, request); in cdns3_start_all_request()
415 priv_ep->stream_sg_idx = 0; in cdns3_start_all_request()
416 ret = cdns3_ep_run_stream_transfer(priv_ep, request); in cdns3_start_all_request()
421 list_move_tail(&request->list, &priv_ep->pending_req_list); in cdns3_start_all_request()
422 if (request->stream_id != 0 || (priv_ep->flags & EP_TDLCHK_EN)) in cdns3_start_all_request()
426 priv_ep->flags &= ~EP_RING_FULL; in cdns3_start_all_request()
436 #define cdns3_wa2_enable_detection(priv_dev, priv_ep, reg) do { \ argument
437 if (!priv_ep->dir && priv_ep->type != USB_ENDPOINT_XFER_ISOC) { \
438 priv_ep->flags |= EP_QUIRK_EXTRA_BUF_DET; \
478 static void cdns3_wa2_descmiss_copy_data(struct cdns3_endpoint *priv_ep, in cdns3_wa2_descmiss_copy_data() argument
484 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_wa2_descmiss_copy_data()
488 cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_descmiss_copy_data()
500 cdns3_gadget_ep_free_request(&priv_ep->endpoint, descmiss_req); in cdns3_wa2_descmiss_copy_data()
501 --priv_ep->wa2_counter; in cdns3_wa2_descmiss_copy_data()
509 struct cdns3_endpoint *priv_ep, in cdns3_wa2_gadget_giveback() argument
512 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN && in cdns3_wa2_gadget_giveback()
516 req = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_wa2_gadget_giveback()
518 priv_ep->descmis_req = NULL; in cdns3_wa2_gadget_giveback()
525 priv_ep->dir); in cdns3_wa2_gadget_giveback()
527 cdns3_wa2_descmiss_copy_data(priv_ep, req); in cdns3_wa2_gadget_giveback()
528 if (!(priv_ep->flags & EP_QUIRK_END_TRANSFER) && in cdns3_wa2_gadget_giveback()
533 usb_endpoint_dir_in(priv_ep->endpoint.desc)); in cdns3_wa2_gadget_giveback()
541 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_wa2_gadget_giveback()
549 struct cdns3_endpoint *priv_ep, in cdns3_wa2_gadget_ep_queue() argument
559 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_DET) { in cdns3_wa2_gadget_ep_queue()
562 cdns3_select_ep(priv_dev, priv_ep->num | priv_ep->dir); in cdns3_wa2_gadget_ep_queue()
563 priv_ep->flags &= ~EP_QUIRK_EXTRA_BUF_DET; in cdns3_wa2_gadget_ep_queue()
566 trace_cdns3_wa2(priv_ep, "workaround disabled\n"); in cdns3_wa2_gadget_ep_queue()
570 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN) { in cdns3_wa2_gadget_ep_queue()
571 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_wa2_gadget_ep_queue()
572 u8 descmiss_empty = list_empty(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_gadget_ep_queue()
581 cdns3_wa2_descmiss_copy_data(priv_ep, in cdns3_wa2_gadget_ep_queue()
584 trace_cdns3_wa2(priv_ep, "get internal stored data"); in cdns3_wa2_gadget_ep_queue()
587 &priv_ep->pending_req_list); in cdns3_wa2_gadget_ep_queue()
588 cdns3_gadget_giveback(priv_ep, priv_req, in cdns3_wa2_gadget_ep_queue()
604 trace_cdns3_wa2(priv_ep, "wait for pending transfer\n"); in cdns3_wa2_gadget_ep_queue()
610 &priv_ep->wa2_descmiss_req_list); in cdns3_wa2_gadget_ep_queue()
616 static void cdns3_wa2_remove_old_request(struct cdns3_endpoint *priv_ep) in cdns3_wa2_remove_old_request() argument
620 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_wa2_remove_old_request()
623 priv_req = cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_remove_old_request()
626 trace_cdns3_wa2(priv_ep, "removes eldest request"); in cdns3_wa2_remove_old_request()
630 cdns3_gadget_ep_free_request(&priv_ep->endpoint, in cdns3_wa2_remove_old_request()
632 --priv_ep->wa2_counter; in cdns3_wa2_remove_old_request()
646 static void cdns3_wa2_descmissing_packet(struct cdns3_endpoint *priv_ep) in cdns3_wa2_descmissing_packet() argument
650 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_wa2_descmissing_packet()
654 trace_cdns3_wa2(priv_ep, "Ignoring Descriptor missing IRQ\n"); in cdns3_wa2_descmissing_packet()
658 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_DET) { in cdns3_wa2_descmissing_packet()
659 priv_ep->flags &= ~EP_QUIRK_EXTRA_BUF_DET; in cdns3_wa2_descmissing_packet()
660 priv_ep->flags |= EP_QUIRK_EXTRA_BUF_EN; in cdns3_wa2_descmissing_packet()
663 trace_cdns3_wa2(priv_ep, "Description Missing detected\n"); in cdns3_wa2_descmissing_packet()
665 if (priv_ep->wa2_counter >= CDNS3_WA2_NUM_BUFFERS) { in cdns3_wa2_descmissing_packet()
666 trace_cdns3_wa2(priv_ep, "WA2 overflow\n"); in cdns3_wa2_descmissing_packet()
667 cdns3_wa2_remove_old_request(priv_ep); in cdns3_wa2_descmissing_packet()
670 request = cdns3_gadget_ep_alloc_request(&priv_ep->endpoint, in cdns3_wa2_descmissing_packet()
684 if (priv_ep->descmis_req) in cdns3_wa2_descmissing_packet()
685 priv_ep->descmis_req->flags |= REQUEST_INTERNAL_CH; in cdns3_wa2_descmissing_packet()
689 priv_ep->wa2_counter++; in cdns3_wa2_descmissing_packet()
692 cdns3_gadget_ep_free_request(&priv_ep->endpoint, request); in cdns3_wa2_descmissing_packet()
697 priv_ep->descmis_req = priv_req; in cdns3_wa2_descmissing_packet()
699 __cdns3_gadget_ep_queue(&priv_ep->endpoint, in cdns3_wa2_descmissing_packet()
700 &priv_ep->descmis_req->request, in cdns3_wa2_descmissing_packet()
706 dev_err(priv_ep->cdns3_dev->dev, in cdns3_wa2_descmissing_packet()
792 void cdns3_gadget_giveback(struct cdns3_endpoint *priv_ep, in cdns3_gadget_giveback() argument
796 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_giveback()
806 priv_ep->dir); in cdns3_gadget_giveback()
809 priv_ep->dir == USB_DIR_OUT && !request->status) { in cdns3_gadget_giveback()
825 request = cdns3_wa2_gadget_giveback(priv_dev, priv_ep, in cdns3_gadget_giveback()
833 usb_gadget_giveback_request(&priv_ep->endpoint, in cdns3_gadget_giveback()
839 cdns3_gadget_ep_free_request(&priv_ep->endpoint, request); in cdns3_gadget_giveback()
842 static void cdns3_wa1_restore_cycle_bit(struct cdns3_endpoint *priv_ep) in cdns3_wa1_restore_cycle_bit() argument
845 if (priv_ep->wa1_set) { in cdns3_wa1_restore_cycle_bit()
846 trace_cdns3_wa1(priv_ep, "restore cycle bit"); in cdns3_wa1_restore_cycle_bit()
848 priv_ep->wa1_set = 0; in cdns3_wa1_restore_cycle_bit()
849 priv_ep->wa1_trb_index = 0xFFFF; in cdns3_wa1_restore_cycle_bit()
850 if (priv_ep->wa1_cycle_bit) { in cdns3_wa1_restore_cycle_bit()
851 priv_ep->wa1_trb->control = in cdns3_wa1_restore_cycle_bit()
852 priv_ep->wa1_trb->control | cpu_to_le32(0x1); in cdns3_wa1_restore_cycle_bit()
854 priv_ep->wa1_trb->control = in cdns3_wa1_restore_cycle_bit()
855 priv_ep->wa1_trb->control & cpu_to_le32(~0x1); in cdns3_wa1_restore_cycle_bit()
891 struct cdns3_endpoint *priv_ep = priv_req->priv_ep; in cdns3_prepare_aligned_request_buf() local
892 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_prepare_aligned_request_buf()
907 buf->dir = usb_endpoint_dir_in(priv_ep->endpoint.desc) ? in cdns3_prepare_aligned_request_buf()
934 if (priv_ep->dir == USB_DIR_IN) { in cdns3_prepare_aligned_request_buf()
952 static int cdns3_wa1_update_guard(struct cdns3_endpoint *priv_ep, in cdns3_wa1_update_guard() argument
955 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_wa1_update_guard()
957 if (!priv_ep->wa1_set) { in cdns3_wa1_update_guard()
963 priv_ep->wa1_cycle_bit = priv_ep->pcs ? TRB_CYCLE : 0; in cdns3_wa1_update_guard()
964 priv_ep->wa1_set = 1; in cdns3_wa1_update_guard()
965 priv_ep->wa1_trb = trb; in cdns3_wa1_update_guard()
966 priv_ep->wa1_trb_index = priv_ep->enqueue; in cdns3_wa1_update_guard()
967 trace_cdns3_wa1(priv_ep, "set guard"); in cdns3_wa1_update_guard()
975 struct cdns3_endpoint *priv_ep) in cdns3_wa1_tray_restore_cycle_bit() argument
981 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
983 if (!doorbell || dma_index != priv_ep->wa1_trb_index) in cdns3_wa1_tray_restore_cycle_bit()
984 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
987 static int cdns3_ep_run_stream_transfer(struct cdns3_endpoint *priv_ep, in cdns3_ep_run_stream_transfer() argument
990 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_stream_transfer()
998 unsigned int sg_idx = priv_ep->stream_sg_idx; in cdns3_ep_run_stream_transfer()
1001 address = priv_ep->endpoint.desc->bEndpointAddress; in cdns3_ep_run_stream_transfer()
1003 priv_ep->flags |= EP_PENDING_REQUEST; in cdns3_ep_run_stream_transfer()
1012 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_stream_transfer()
1013 priv_req->start_trb = priv_ep->enqueue; in cdns3_ep_run_stream_transfer()
1017 cdns3_select_ep(priv_ep->cdns3_dev, address); in cdns3_ep_run_stream_transfer()
1030 tdl = DIV_ROUND_UP(length, priv_ep->endpoint.maxpacket); in cdns3_ep_run_stream_transfer()
1047 trace_cdns3_prepare_trb(priv_ep, priv_req->trb); in cdns3_ep_run_stream_transfer()
1056 writel(EP_TRADDR_TRADDR(priv_ep->trb_pool_dma), in cdns3_ep_run_stream_transfer()
1059 if (!(priv_ep->flags & EP_STALLED)) { in cdns3_ep_run_stream_transfer()
1060 trace_cdns3_ring(priv_ep); in cdns3_ep_run_stream_transfer()
1064 priv_ep->prime_flag = false; in cdns3_ep_run_stream_transfer()
1077 priv_ep->last_stream_id = priv_req->request.stream_id; in cdns3_ep_run_stream_transfer()
1082 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_ep_run_stream_transfer()
1092 static void cdns3_rearm_drdy_if_needed(struct cdns3_endpoint *priv_ep) in cdns3_rearm_drdy_if_needed() argument
1094 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_drdy_if_needed()
1112 static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, in cdns3_ep_run_transfer() argument
1115 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_transfer()
1130 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) in cdns3_ep_run_transfer()
1131 num_trb = priv_ep->interval; in cdns3_ep_run_transfer()
1135 if (num_trb > priv_ep->free_trbs) { in cdns3_ep_run_transfer()
1136 priv_ep->flags |= EP_RING_FULL; in cdns3_ep_run_transfer()
1141 address = priv_ep->endpoint.desc->bEndpointAddress; in cdns3_ep_run_transfer()
1143 priv_ep->flags |= EP_PENDING_REQUEST; in cdns3_ep_run_transfer()
1151 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1152 priv_req->start_trb = priv_ep->enqueue; in cdns3_ep_run_transfer()
1155 cdns3_select_ep(priv_ep->cdns3_dev, address); in cdns3_ep_run_transfer()
1158 if ((priv_ep->enqueue + num_trb) >= (priv_ep->num_trbs - 1)) { in cdns3_ep_run_transfer()
1163 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_ep_run_transfer()
1166 if (doorbell && dma_index == priv_ep->num_trbs - 1) { in cdns3_ep_run_transfer()
1167 priv_ep->flags |= EP_DEFERRED_DRDY; in cdns3_ep_run_transfer()
1172 link_trb = priv_ep->trb_pool + (priv_ep->num_trbs - 1); in cdns3_ep_run_transfer()
1181 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC || in cdns3_ep_run_transfer()
1185 link_trb->control = cpu_to_le32(((priv_ep->pcs) ? TRB_CYCLE : 0) | in cdns3_ep_run_transfer()
1190 togle_pcs = cdns3_wa1_update_guard(priv_ep, trb); in cdns3_ep_run_transfer()
1196 control = priv_ep->pcs ? 0 : TRB_CYCLE; in cdns3_ep_run_transfer()
1202 priv_ep->endpoint.maxpacket); in cdns3_ep_run_transfer()
1222 if (priv_ep->flags & EP_TDLCHK_EN) in cdns3_ep_run_transfer()
1224 priv_ep->endpoint.maxpacket); in cdns3_ep_run_transfer()
1226 trb->length |= cpu_to_le32(TRB_BURST_LEN(priv_ep->trb_burst_size) | in cdns3_ep_run_transfer()
1228 pcs = priv_ep->pcs ? TRB_CYCLE : 0; in cdns3_ep_run_transfer()
1237 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) { in cdns3_ep_run_transfer()
1261 priv_req->end_trb = priv_ep->enqueue; in cdns3_ep_run_transfer()
1262 cdns3_ep_inc_enq(priv_ep); in cdns3_ep_run_transfer()
1263 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1276 (priv_ep->flags & EP_TDLCHK_EN)) { in cdns3_ep_run_transfer()
1282 priv_ep->pending_tdl = total_tdl - EP_CMD_TDL_MAX; in cdns3_ep_run_transfer()
1302 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep); in cdns3_ep_run_transfer()
1308 trace_cdns3_prepare_trb(priv_ep, trb + i); in cdns3_ep_run_transfer()
1310 trb = priv_ep->trb_pool; in cdns3_ep_run_transfer()
1318 trace_cdns3_prepare_trb(priv_ep, priv_req->trb); in cdns3_ep_run_transfer()
1331 if (priv_ep->flags & EP_UPDATE_EP_TRBADDR) { in cdns3_ep_run_transfer()
1337 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir && in cdns3_ep_run_transfer()
1338 !(priv_ep->flags & EP_QUIRK_ISO_OUT_EN)) { in cdns3_ep_run_transfer()
1339 priv_ep->flags |= EP_QUIRK_ISO_OUT_EN; in cdns3_ep_run_transfer()
1344 writel(EP_TRADDR_TRADDR(priv_ep->trb_pool_dma + in cdns3_ep_run_transfer()
1348 priv_ep->flags &= ~EP_UPDATE_EP_TRBADDR; in cdns3_ep_run_transfer()
1351 if (!priv_ep->wa1_set && !(priv_ep->flags & EP_STALLED)) { in cdns3_ep_run_transfer()
1352 trace_cdns3_ring(priv_ep); in cdns3_ep_run_transfer()
1356 cdns3_rearm_drdy_if_needed(priv_ep); in cdns3_ep_run_transfer()
1357 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_ep_run_transfer()
1369 struct cdns3_endpoint *priv_ep; in cdns3_set_hw_configuration() local
1384 priv_ep = ep_to_cdns3_ep(ep); in cdns3_set_hw_configuration()
1385 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_set_hw_configuration()
1431 static bool cdns3_trb_handled(struct cdns3_endpoint *priv_ep, in cdns3_trb_handled() argument
1434 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_trb_handled()
1440 current_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_trb_handled()
1445 if (priv_ep->dequeue > priv_req->end_trb) in cdns3_trb_handled()
1448 if (priv_ep->dequeue < priv_req->start_trb) in cdns3_trb_handled()
1453 (priv_ep->dequeue > priv_req->end_trb) && in cdns3_trb_handled()
1454 (priv_ep->dequeue < priv_req->start_trb)) in cdns3_trb_handled()
1458 (priv_ep->dequeue != priv_req->end_trb)) in cdns3_trb_handled()
1461 trb = &priv_ep->trb_pool[priv_ep->dequeue]; in cdns3_trb_handled()
1463 if ((le32_to_cpu(trb->control) & TRB_CYCLE) != priv_ep->ccs) in cdns3_trb_handled()
1466 if (doorbell == 1 && current_index == priv_ep->dequeue) in cdns3_trb_handled()
1470 if (TRBS_PER_SEGMENT == 2 && priv_ep->type != USB_ENDPOINT_XFER_ISOC) { in cdns3_trb_handled()
1475 if (priv_ep->enqueue == priv_ep->dequeue && in cdns3_trb_handled()
1476 priv_ep->free_trbs == 0) { in cdns3_trb_handled()
1478 } else if (priv_ep->dequeue < current_index) { in cdns3_trb_handled()
1479 if ((current_index == (priv_ep->num_trbs - 1)) && in cdns3_trb_handled()
1480 !priv_ep->dequeue) in cdns3_trb_handled()
1484 } else if (priv_ep->dequeue > current_index) { in cdns3_trb_handled()
1495 struct cdns3_endpoint *priv_ep) in cdns3_transfer_completed() argument
1503 while (!list_empty(&priv_ep->pending_req_list)) { in cdns3_transfer_completed()
1504 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_transfer_completed()
1507 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1511 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1512 cdns3_ep_inc_deq(priv_ep); in cdns3_transfer_completed()
1513 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1520 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1522 while (cdns3_trb_handled(priv_ep, priv_req)) { in cdns3_transfer_completed()
1527 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1528 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1539 cdns3_ep_inc_deq(priv_ep); in cdns3_transfer_completed()
1543 cdns3_gadget_giveback(priv_ep, priv_req, 0); in cdns3_transfer_completed()
1550 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC && in cdns3_transfer_completed()
1557 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1559 trb = priv_ep->trb_pool; in cdns3_transfer_completed()
1560 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1570 (request->num_sgs == (priv_ep->stream_sg_idx + 1))) { in cdns3_transfer_completed()
1571 priv_ep->stream_sg_idx = 0; in cdns3_transfer_completed()
1572 cdns3_gadget_giveback(priv_ep, priv_req, 0); in cdns3_transfer_completed()
1574 priv_ep->stream_sg_idx++; in cdns3_transfer_completed()
1575 cdns3_ep_run_stream_transfer(priv_ep, request); in cdns3_transfer_completed()
1580 priv_ep->flags &= ~EP_PENDING_REQUEST; in cdns3_transfer_completed()
1583 if (!(priv_ep->flags & EP_STALLED) && in cdns3_transfer_completed()
1584 !(priv_ep->flags & EP_STALL_PENDING)) in cdns3_transfer_completed()
1585 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_transfer_completed()
1588 void cdns3_rearm_transfer(struct cdns3_endpoint *priv_ep, u8 rearm) in cdns3_rearm_transfer() argument
1590 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_transfer()
1592 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_rearm_transfer()
1595 trace_cdns3_ring(priv_ep); in cdns3_rearm_transfer()
1603 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_rearm_transfer()
1608 static void cdns3_reprogram_tdl(struct cdns3_endpoint *priv_ep) in cdns3_reprogram_tdl() argument
1610 u16 tdl = priv_ep->pending_tdl; in cdns3_reprogram_tdl()
1611 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_reprogram_tdl()
1615 priv_ep->pending_tdl -= EP_CMD_TDL_MAX; in cdns3_reprogram_tdl()
1617 priv_ep->pending_tdl = 0; in cdns3_reprogram_tdl()
1629 static int cdns3_check_ep_interrupt_proceed(struct cdns3_endpoint *priv_ep) in cdns3_check_ep_interrupt_proceed() argument
1631 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_check_ep_interrupt_proceed()
1637 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_check_ep_interrupt_proceed()
1639 trace_cdns3_epx_irq(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1644 if ((ep_sts_reg & EP_STS_PRIME) && priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1659 EP_CMD_ERDY_SID(priv_ep->last_stream_id), in cdns3_check_ep_interrupt_proceed()
1663 priv_ep->prime_flag = true; in cdns3_check_ep_interrupt_proceed()
1665 pending_request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_check_ep_interrupt_proceed()
1666 deferred_request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_check_ep_interrupt_proceed()
1669 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1675 if (priv_ep->flags & EP_STALL_PENDING && in cdns3_check_ep_interrupt_proceed()
1678 cdns3_ep_stall_flush(priv_ep); in cdns3_check_ep_interrupt_proceed()
1688 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && in cdns3_check_ep_interrupt_proceed()
1689 !priv_ep->wa1_set) { in cdns3_check_ep_interrupt_proceed()
1690 if (!priv_ep->dir) { in cdns3_check_ep_interrupt_proceed()
1695 priv_ep->flags &= ~EP_QUIRK_ISO_OUT_EN; in cdns3_check_ep_interrupt_proceed()
1696 priv_ep->flags |= EP_UPDATE_EP_TRBADDR; in cdns3_check_ep_interrupt_proceed()
1698 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1699 } else if (!(priv_ep->flags & EP_STALLED) && in cdns3_check_ep_interrupt_proceed()
1700 !(priv_ep->flags & EP_STALL_PENDING)) { in cdns3_check_ep_interrupt_proceed()
1701 if (priv_ep->flags & EP_DEFERRED_DRDY) { in cdns3_check_ep_interrupt_proceed()
1702 priv_ep->flags &= ~EP_DEFERRED_DRDY; in cdns3_check_ep_interrupt_proceed()
1703 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1705 cdns3_rearm_transfer(priv_ep, in cdns3_check_ep_interrupt_proceed()
1706 priv_ep->wa1_set); in cdns3_check_ep_interrupt_proceed()
1713 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN) { in cdns3_check_ep_interrupt_proceed()
1715 priv_ep->flags |= EP_QUIRK_END_TRANSFER; in cdns3_check_ep_interrupt_proceed()
1717 priv_ep->flags &= ~EP_QUIRK_END_TRANSFER; in cdns3_check_ep_interrupt_proceed()
1720 if (!priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1723 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1724 } else if ((priv_ep->flags & EP_TDLCHK_EN) & in cdns3_check_ep_interrupt_proceed()
1725 priv_ep->pending_tdl) { in cdns3_check_ep_interrupt_proceed()
1727 cdns3_reprogram_tdl(priv_ep); in cdns3_check_ep_interrupt_proceed()
1729 } else if (priv_ep->dir == USB_DIR_OUT) { in cdns3_check_ep_interrupt_proceed()
1730 priv_ep->ep_sts_pending |= ep_sts_reg; in cdns3_check_ep_interrupt_proceed()
1732 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1740 if (priv_ep->dir == USB_DIR_OUT && (ep_sts_reg & EP_STS_MD_EXIT) && in cdns3_check_ep_interrupt_proceed()
1741 (priv_ep->ep_sts_pending & EP_STS_IOT) && priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1742 priv_ep->ep_sts_pending = 0; in cdns3_check_ep_interrupt_proceed()
1743 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1753 !(priv_ep->flags & EP_STALLED)) in cdns3_check_ep_interrupt_proceed()
1754 cdns3_wa2_descmissing_packet(priv_ep); in cdns3_check_ep_interrupt_proceed()
1995 struct cdns3_endpoint *priv_ep) in cdns3_configure_dmult() argument
2006 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) { in cdns3_configure_dmult()
2009 if (priv_ep->dir) in cdns3_configure_dmult()
2010 mask = BIT(priv_ep->num + 16); in cdns3_configure_dmult()
2012 mask = BIT(priv_ep->num); in cdns3_configure_dmult()
2014 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) { in cdns3_configure_dmult()
2021 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) in cdns3_configure_dmult()
2033 int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) in cdns3_ep_config() argument
2035 bool is_iso_ep = (priv_ep->type == USB_ENDPOINT_XFER_ISOC); in cdns3_ep_config()
2036 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_config()
2037 u32 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_ep_config()
2047 cdns3_configure_dmult(priv_dev, priv_ep); in cdns3_ep_config()
2049 switch (priv_ep->type) { in cdns3_ep_config()
2053 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir) in cdns3_ep_config()
2059 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir) in cdns3_ep_config()
2079 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) { in cdns3_ep_config()
2084 if (priv_ep->interval > 1) in cdns3_ep_config()
2096 priv_ep->trb_burst_size = 128; in cdns3_ep_config()
2098 priv_ep->trb_burst_size = 64; in cdns3_ep_config()
2100 priv_ep->trb_burst_size = 16; in cdns3_ep_config()
2113 priv_ep->trb_burst_size = 16; in cdns3_ep_config()
2122 !!priv_ep->dir); in cdns3_ep_config()
2132 if (priv_ep->use_streams && priv_dev->gadget.speed >= USB_SPEED_SUPER) { in cdns3_ep_config()
2134 u32 mask = BIT(priv_ep->num + (priv_ep->dir ? 16 : 0)); in cdns3_ep_config()
2155 priv_ep->flags |= EP_CONFIGURED; in cdns3_ep_config()
2158 priv_ep->name, ep_cfg); in cdns3_ep_config()
2165 struct cdns3_endpoint *priv_ep) in cdns3_ep_dir_is_correct() argument
2167 return (priv_ep->endpoint.caps.dir_in && usb_endpoint_dir_in(desc)) || in cdns3_ep_dir_is_correct()
2168 (priv_ep->endpoint.caps.dir_out && usb_endpoint_dir_out(desc)); in cdns3_ep_dir_is_correct()
2176 struct cdns3_endpoint *priv_ep; in cdns3_find_available_ep() local
2188 priv_ep = ep_to_cdns3_ep(ep); in cdns3_find_available_ep()
2189 if (cdns3_ep_dir_is_correct(desc, priv_ep)) { in cdns3_find_available_ep()
2190 if (!(priv_ep->flags & EP_CLAIMED)) { in cdns3_find_available_ep()
2191 priv_ep->num = num; in cdns3_find_available_ep()
2192 return priv_ep; in cdns3_find_available_ep()
2222 struct cdns3_endpoint *priv_ep; in cdns3_gadget_match_ep() local
2225 priv_ep = cdns3_find_available_ep(priv_dev, desc); in cdns3_gadget_match_ep()
2226 if (IS_ERR(priv_ep)) { in cdns3_gadget_match_ep()
2231 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name); in cdns3_gadget_match_ep()
2234 priv_ep->endpoint.desc = desc; in cdns3_gadget_match_ep()
2235 priv_ep->dir = usb_endpoint_dir_in(desc) ? USB_DIR_IN : USB_DIR_OUT; in cdns3_gadget_match_ep()
2236 priv_ep->type = usb_endpoint_type(desc); in cdns3_gadget_match_ep()
2237 priv_ep->flags |= EP_CLAIMED; in cdns3_gadget_match_ep()
2238 priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; in cdns3_gadget_match_ep()
2241 return &priv_ep->endpoint; in cdns3_gadget_match_ep()
2254 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_alloc_request() local
2261 priv_req->priv_ep = priv_ep; in cdns3_gadget_ep_alloc_request()
2294 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_enable() local
2309 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_enable()
2310 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_enable()
2311 comp_desc = priv_ep->endpoint.comp_desc; in cdns3_gadget_ep_enable()
2323 if (dev_WARN_ONCE(priv_dev->dev, priv_ep->flags & EP_ENABLED, in cdns3_gadget_ep_enable()
2324 "%s is already enabled\n", priv_ep->name)) in cdns3_gadget_ep_enable()
2329 priv_ep->endpoint.desc = desc; in cdns3_gadget_ep_enable()
2330 priv_ep->type = usb_endpoint_type(desc); in cdns3_gadget_ep_enable()
2331 priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; in cdns3_gadget_ep_enable()
2333 if (priv_ep->interval > ISO_MAX_INTERVAL && in cdns3_gadget_ep_enable()
2334 priv_ep->type == USB_ENDPOINT_XFER_ISOC) { in cdns3_gadget_ep_enable()
2342 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_ep_enable()
2353 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) in cdns3_gadget_ep_enable()
2365 priv_ep->use_streams = true; in cdns3_gadget_ep_enable()
2366 ret = cdns3_ep_config(priv_ep, enable); in cdns3_gadget_ep_enable()
2370 ret = cdns3_ep_config(priv_ep, enable); in cdns3_gadget_ep_enable()
2376 ret = cdns3_allocate_trb_pool(priv_ep); in cdns3_gadget_ep_enable()
2380 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_ep_enable()
2383 trace_cdns3_gadget_ep_enable(priv_ep); in cdns3_gadget_ep_enable()
2392 cdns3_free_trb_pool(priv_ep); in cdns3_gadget_ep_enable()
2402 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg); in cdns3_gadget_ep_enable()
2407 priv_ep->flags &= ~(EP_PENDING_REQUEST | EP_STALLED | EP_STALL_PENDING | in cdns3_gadget_ep_enable()
2409 priv_ep->flags |= EP_ENABLED | EP_UPDATE_EP_TRBADDR; in cdns3_gadget_ep_enable()
2410 priv_ep->wa1_set = 0; in cdns3_gadget_ep_enable()
2411 priv_ep->enqueue = 0; in cdns3_gadget_ep_enable()
2412 priv_ep->dequeue = 0; in cdns3_gadget_ep_enable()
2414 priv_ep->pcs = !!EP_STS_CCS(reg); in cdns3_gadget_ep_enable()
2415 priv_ep->ccs = !!EP_STS_CCS(reg); in cdns3_gadget_ep_enable()
2417 priv_ep->free_trbs = priv_ep->num_trbs - 1; in cdns3_gadget_ep_enable()
2432 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_disable() local
2446 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_disable()
2447 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_disable()
2449 if (dev_WARN_ONCE(priv_dev->dev, !(priv_ep->flags & EP_ENABLED), in cdns3_gadget_ep_disable()
2450 "%s is already disabled\n", priv_ep->name)) in cdns3_gadget_ep_disable()
2455 trace_cdns3_gadget_ep_disable(priv_ep); in cdns3_gadget_ep_disable()
2477 priv_ep->name); in cdns3_gadget_ep_disable()
2479 while (!list_empty(&priv_ep->pending_req_list)) { in cdns3_gadget_ep_disable()
2480 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_gadget_ep_disable()
2482 cdns3_gadget_giveback(priv_ep, to_cdns3_request(request), in cdns3_gadget_ep_disable()
2486 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_gadget_ep_disable()
2487 priv_req = cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_gadget_ep_disable()
2490 cdns3_gadget_ep_free_request(&priv_ep->endpoint, in cdns3_gadget_ep_disable()
2493 --priv_ep->wa2_counter; in cdns3_gadget_ep_disable()
2496 while (!list_empty(&priv_ep->deferred_req_list)) { in cdns3_gadget_ep_disable()
2497 request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_gadget_ep_disable()
2499 cdns3_gadget_giveback(priv_ep, to_cdns3_request(request), in cdns3_gadget_ep_disable()
2503 priv_ep->descmis_req = NULL; in cdns3_gadget_ep_disable()
2506 priv_ep->flags &= ~EP_ENABLED; in cdns3_gadget_ep_disable()
2507 priv_ep->use_streams = false; in cdns3_gadget_ep_disable()
2526 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in __cdns3_gadget_ep_queue() local
2527 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_queue()
2537 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep, in __cdns3_gadget_ep_queue()
2555 list_add_tail(&request->list, &priv_ep->deferred_req_list); in __cdns3_gadget_ep_queue()
2566 !(priv_ep->flags & EP_STALLED) && in __cdns3_gadget_ep_queue()
2567 !(priv_ep->flags & EP_STALL_PENDING)) in __cdns3_gadget_ep_queue()
2568 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2570 if (priv_dev->hw_configured_flag && priv_ep->prime_flag) in __cdns3_gadget_ep_queue()
2571 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2581 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_queue() local
2589 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_queue()
2590 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_queue()
2608 priv_ep->name); in cdns3_gadget_ep_queue()
2626 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_dequeue() local
2639 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_dequeue()
2649 list_for_each_entry_safe(req, req_temp, &priv_ep->pending_req_list, in cdns3_gadget_ep_dequeue()
2657 list_for_each_entry_safe(req, req_temp, &priv_ep->deferred_req_list, in cdns3_gadget_ep_dequeue()
2677 link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma + in cdns3_gadget_ep_dequeue()
2682 if (priv_ep->wa1_trb == priv_req->trb) in cdns3_gadget_ep_dequeue()
2683 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_gadget_ep_dequeue()
2686 cdns3_gadget_giveback(priv_ep, priv_req, -ECONNRESET); in cdns3_gadget_ep_dequeue()
2688 req = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_gadget_ep_dequeue()
2690 cdns3_rearm_transfer(priv_ep, 1); in cdns3_gadget_ep_dequeue()
2702 void __cdns3_gadget_ep_set_halt(struct cdns3_endpoint *priv_ep) in __cdns3_gadget_ep_set_halt() argument
2704 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_set_halt()
2706 trace_cdns3_halt(priv_ep, 1, 0); in __cdns3_gadget_ep_set_halt()
2708 if (!(priv_ep->flags & EP_STALLED)) { in __cdns3_gadget_ep_set_halt()
2712 cdns3_ep_stall_flush(priv_ep); in __cdns3_gadget_ep_set_halt()
2714 priv_ep->flags |= EP_STALL_PENDING; in __cdns3_gadget_ep_set_halt()
2723 int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep) in __cdns3_gadget_ep_clear_halt() argument
2725 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_clear_halt()
2733 trace_cdns3_halt(priv_ep, 0, 0); in __cdns3_gadget_ep_clear_halt()
2735 request = cdns3_next_request(&priv_ep->pending_req_list); in __cdns3_gadget_ep_clear_halt()
2753 priv_ep->flags &= ~(EP_STALLED | EP_STALL_PENDING); in __cdns3_gadget_ep_clear_halt()
2759 cdns3_rearm_transfer(priv_ep, 1); in __cdns3_gadget_ep_clear_halt()
2762 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_clear_halt()
2775 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_set_halt() local
2776 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_set_halt()
2780 if (!(priv_ep->flags & EP_ENABLED)) in cdns3_gadget_ep_set_halt()
2788 priv_ep->flags &= ~EP_WEDGE; in cdns3_gadget_ep_set_halt()
2789 ret = __cdns3_gadget_ep_clear_halt(priv_ep); in cdns3_gadget_ep_set_halt()
2791 __cdns3_gadget_ep_set_halt(priv_ep); in cdns3_gadget_ep_set_halt()
2976 struct cdns3_endpoint *priv_ep; in cdns3_gadget_udc_stop() local
2988 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_udc_stop()
2989 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_udc_stop()
2995 priv_ep->flags &= ~EP_CLAIMED; in cdns3_gadget_udc_stop()
3019 struct cdns3_endpoint *priv_ep; in cdns3_gadget_check_config() local
3025 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_check_config()
3026 if ((priv_ep->flags & EP_CLAIMED) && (ep->address & USB_DIR_IN)) in cdns3_gadget_check_config()
3076 struct cdns3_endpoint *priv_ep; in cdns3_init_eps() local
3101 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep), in cdns3_init_eps()
3103 if (!priv_ep) in cdns3_init_eps()
3107 priv_ep->cdns3_dev = priv_dev; in cdns3_init_eps()
3108 priv_dev->eps[i] = priv_ep; in cdns3_init_eps()
3109 priv_ep->num = ep_number; in cdns3_init_eps()
3110 priv_ep->dir = ep_dir ? USB_DIR_IN : USB_DIR_OUT; in cdns3_init_eps()
3113 ret = cdns3_init_ep0(priv_dev, priv_ep); in cdns3_init_eps()
3119 snprintf(priv_ep->name, sizeof(priv_ep->name), "ep%d%s", in cdns3_init_eps()
3121 priv_ep->endpoint.name = priv_ep->name; in cdns3_init_eps()
3123 usb_ep_set_maxpacket_limit(&priv_ep->endpoint, in cdns3_init_eps()
3125 priv_ep->endpoint.max_streams = CDNS3_EP_MAX_STREAMS; in cdns3_init_eps()
3126 priv_ep->endpoint.ops = &cdns3_gadget_ep_ops; in cdns3_init_eps()
3128 priv_ep->endpoint.caps.dir_in = 1; in cdns3_init_eps()
3130 priv_ep->endpoint.caps.dir_out = 1; in cdns3_init_eps()
3133 priv_ep->endpoint.caps.type_iso = 1; in cdns3_init_eps()
3135 priv_ep->endpoint.caps.type_bulk = 1; in cdns3_init_eps()
3136 priv_ep->endpoint.caps.type_int = 1; in cdns3_init_eps()
3138 list_add_tail(&priv_ep->endpoint.ep_list, in cdns3_init_eps()
3142 priv_ep->flags = 0; in cdns3_init_eps()
3145 priv_ep->name, in cdns3_init_eps()
3146 priv_ep->endpoint.caps.type_bulk ? "BULK, INT" : "", in cdns3_init_eps()
3147 priv_ep->endpoint.caps.type_iso ? "ISO" : ""); in cdns3_init_eps()
3149 INIT_LIST_HEAD(&priv_ep->pending_req_list); in cdns3_init_eps()
3150 INIT_LIST_HEAD(&priv_ep->deferred_req_list); in cdns3_init_eps()
3151 INIT_LIST_HEAD(&priv_ep->wa2_descmiss_req_list); in cdns3_init_eps()