Lines Matching refs:usb3_ep

353 	struct renesas_usb3_ep *usb3_ep;
386 #define usb3_get_ep(usb3, n) ((usb3)->usb3_ep + (n))
387 #define usb3_for_each_ep(usb3_ep, usb3, i) \
388 for ((i) = 0, usb3_ep = usb3_get_ep(usb3, (i)); \
390 (i)++, usb3_ep = usb3_get_ep(usb3, (i)))
944 *usb3_ep)
946 return list_first_entry_or_null(&usb3_ep->queue,
951 *usb3_ep)
953 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
958 usb3_req = __usb3_get_request(usb3_ep);
964 static void __usb3_request_done(struct renesas_usb3_ep *usb3_ep,
968 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
971 usb3_ep->num, usb3_req->req.length, usb3_req->req.actual,
974 usb3_ep->started = false;
977 usb_gadget_giveback_request(&usb3_ep->ep, &usb3_req->req);
981 static void usb3_request_done(struct renesas_usb3_ep *usb3_ep,
984 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
988 __usb3_request_done(usb3_ep, usb3_req, status);
994 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
995 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
998 usb3_request_done(usb3_ep, usb3_req, 0);
1006 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1013 usb3_ep->dir_in = !!(ctrl->bRequestType & USB_DIR_IN);
1116 static bool usb3_is_transfer_complete(struct renesas_usb3_ep *usb3_ep,
1122 (req->actual % usb3_ep->ep.maxpacket) || (req->length == 0))
1128 static int usb3_wait_pipe_status(struct renesas_usb3_ep *usb3_ep, u32 mask)
1130 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1131 u32 sta_reg = usb3_ep->num ? USB3_PN_STA : USB3_P0_STA;
1136 static void usb3_set_px_con_send(struct renesas_usb3_ep *usb3_ep, int bytes,
1139 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1140 u32 con_reg = usb3_ep->num ? USB3_PN_CON : USB3_P0_CON;
1144 val |= (usb3_ep->num && last) ? PN_CON_LAST : 0;
1148 static int usb3_write_pipe(struct renesas_usb3_ep *usb3_ep,
1152 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1155 usb3_ep->ep.maxpacket);
1160 if (usb3_wait_pipe_status(usb3_ep, PX_STA_BUFSTS) < 0)
1180 is_last = usb3_is_transfer_complete(usb3_ep, usb3_req);
1182 usb3_set_px_con_send(usb3_ep, len, is_last);
1187 static u32 usb3_get_received_length(struct renesas_usb3_ep *usb3_ep)
1189 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1190 u32 lng_reg = usb3_ep->num ? USB3_PN_LNG : USB3_P0_LNG;
1195 static int usb3_read_pipe(struct renesas_usb3_ep *usb3_ep,
1198 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1201 usb3_get_received_length(usb3_ep));
1224 return usb3_is_transfer_complete(usb3_ep, usb3_req) ? 0 : -EAGAIN;
1227 static void usb3_set_status_stage(struct renesas_usb3_ep *usb3_ep,
1230 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1232 if (usb3_ep->dir_in) {
1242 static void usb3_p0_xfer(struct renesas_usb3_ep *usb3_ep,
1247 if (usb3_ep->dir_in)
1248 ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_P0_WRITE);
1250 ret = usb3_read_pipe(usb3_ep, usb3_req, USB3_P0_READ);
1253 usb3_set_status_stage(usb3_ep, usb3_req);
1256 static void usb3_start_pipe0(struct renesas_usb3_ep *usb3_ep,
1259 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1261 if (usb3_ep->started)
1264 usb3_ep->started = true;
1266 if (usb3_ep->dir_in) {
1275 usb3_p0_xfer(usb3_ep, usb3_req);
1298 static u32 usb3_dma_mps_to_prd_word1(struct renesas_usb3_ep *usb3_ep)
1300 switch (usb3_ep->ep.maxpacket) {
1318 static bool usb3_dma_get_setting_area(struct renesas_usb3_ep *usb3_ep,
1321 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1336 if (usb3_dma_mps_to_prd_word1(usb3_ep) == USB3_PRD1_MPS_RESERVED)
1344 usb3_ep->dir_in) < 0)
1348 usb3_ep->dma = dma;
1356 static void usb3_dma_put_setting_area(struct renesas_usb3_ep *usb3_ep,
1359 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1364 if (usb3_ep->dma == dma) {
1366 usb3_ep->dir_in);
1368 usb3_ep->dma = NULL;
1374 static void usb3_dma_fill_prd(struct renesas_usb3_ep *usb3_ep,
1377 struct renesas_usb3_prd *cur_prd = usb3_ep->dma->prd;
1386 cur_prd->word1 = usb3_dma_mps_to_prd_word1(usb3_ep) |
1399 if (usb3_ep->dir_in)
1403 static void usb3_dma_kick_prd(struct renesas_usb3_ep *usb3_ep)
1405 struct renesas_usb3_dma *dma = usb3_ep->dma;
1406 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1407 u32 dma_con = DMA_COM_PIPE_NO(usb3_ep->num) | DMA_CON_PRD_EN;
1409 if (usb3_ep->dir_in)
1414 usb3_write(usb3, 1 << usb3_ep->num, USB3_DMA_INT_STA);
1420 usb3_enable_dma_irq(usb3, usb3_ep->num);
1423 static void usb3_dma_stop_prd(struct renesas_usb3_ep *usb3_ep)
1425 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1426 struct renesas_usb3_dma *dma = usb3_ep->dma;
1428 usb3_disable_dma_irq(usb3, usb3_ep->num);
1432 static int usb3_dma_update_status(struct renesas_usb3_ep *usb3_ep,
1435 struct renesas_usb3_prd *cur_prd = usb3_ep->dma->prd;
1464 static bool usb3_dma_try_start(struct renesas_usb3_ep *usb3_ep,
1467 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1472 if (usb3_dma_get_setting_area(usb3_ep, usb3_req)) {
1475 usb3_dma_fill_prd(usb3_ep, usb3_req);
1476 usb3_dma_kick_prd(usb3_ep);
1484 static int usb3_dma_try_stop(struct renesas_usb3_ep *usb3_ep,
1487 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1492 if (!usb3_ep->dma)
1495 if (!usb3_pn_change(usb3, usb3_ep->num))
1497 usb3_dma_stop_prd(usb3_ep);
1498 status = usb3_dma_update_status(usb3_ep, usb3_req);
1499 usb3_dma_put_setting_area(usb3_ep, usb3_req);
1545 static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep,
1548 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1555 if (usb3_ep->halt || usb3_ep->started)
1557 usb3_req_first = __usb3_get_request(usb3_ep);
1561 if (usb3_pn_change(usb3, usb3_ep->num) < 0)
1564 usb3_ep->started = true;
1566 if (usb3_dma_try_start(usb3_ep, usb3_req))
1571 if (usb3_ep->dir_in) {
1572 ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE);
1581 usb3_enable_pipe_irq(usb3, usb3_ep->num);
1590 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1592 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1595 dev_dbg(usb3_to_dev(usb3), "ep_queue: ep%2d, %u\n", usb3_ep->num,
1601 list_add_tail(&usb3_req->queue, &usb3_ep->queue);
1604 if (!usb3_ep->num)
1605 usb3_start_pipe0(usb3_ep, usb3_req);
1607 usb3_start_pipen(usb3_ep, usb3_req);
1635 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1644 renesas_usb3_ep_queue(&usb3_ep->ep, usb3->ep0_req, GFP_ATOMIC);
1656 struct renesas_usb3_ep *usb3_ep;
1672 usb3_ep = usb3_get_ep(usb3, num);
1673 if (usb3_ep->halt)
1722 static int usb3_set_halt_p0(struct renesas_usb3_ep *usb3_ep, bool halt)
1724 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1726 if (unlikely(usb3_ep->num))
1729 usb3_ep->halt = halt;
1738 static int usb3_set_halt_pn(struct renesas_usb3_ep *usb3_ep, bool halt,
1741 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1745 if (!usb3_pn_change(usb3, usb3_ep->num)) {
1746 usb3_ep->halt = halt;
1749 } else if (!is_clear_feature || !usb3_ep->wedge) {
1760 static int usb3_set_halt(struct renesas_usb3_ep *usb3_ep, bool halt,
1765 if (halt && usb3_ep->started)
1768 if (usb3_ep->num)
1769 ret = usb3_set_halt_pn(usb3_ep, halt, is_clear_feature);
1771 ret = usb3_set_halt_p0(usb3_ep, halt);
1781 struct renesas_usb3_ep *usb3_ep;
1787 usb3_ep = usb3_get_ep(usb3, num);
1788 usb3_set_halt(usb3_ep, set, true);
1792 usb3_ep->started = false;
1793 usb3_req = usb3_get_request(usb3_ep);
1795 usb3_start_pipen(usb3_ep, usb3_req);
1922 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1925 if (usb3_ep->started)
1926 usb3_request_done(usb3_ep, usb3_get_request(usb3_ep),
1938 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1939 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1944 usb3_p0_xfer(usb3_ep, usb3_req);
1962 struct renesas_usb3_ep *usb3_ep,
1969 if (usb3_pn_change(usb3, usb3_ep->num))
1973 usb3_disable_pipe_irq(usb3, usb3_ep->num);
1974 usb3_request_done(usb3_ep, usb3_req, status);
1977 usb3_req = usb3_get_request(usb3_ep);
1979 usb3_start_pipen(usb3_ep, usb3_req);
1984 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1985 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1990 if (usb3_ep->dir_in) {
1993 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1999 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
2000 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
2010 if (usb3_ep->dir_in) {
2012 if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
2015 if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
2024 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
2099 struct renesas_usb3_ep *usb3_ep;
2107 usb3_ep = usb3_get_ep(usb3, i);
2109 AXI_INT_PRDEN_CLR_STA(usb3_ep->dma->num)))
2112 usb3_req = usb3_get_request(usb3_ep);
2113 status = usb3_dma_try_stop(usb3_ep, usb3_req);
2114 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, status);
2157 static void usb3_write_pn_mod(struct renesas_usb3_ep *usb3_ep,
2160 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2163 val |= usb3_ep->dir_in ? PN_MOD_DIR : 0;
2185 static u32 usb3_calc_rammap_val(struct renesas_usb3_ep *usb3_ep,
2197 return usb3_ep->rammap_val | mpkt;
2200 static int usb3_enable_pipe_n(struct renesas_usb3_ep *usb3_ep,
2203 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2206 usb3_ep->dir_in = usb_endpoint_dir_in(desc);
2209 if (!usb3_pn_change(usb3, usb3_ep->num)) {
2210 usb3_write_pn_mod(usb3_ep, desc);
2211 usb3_write(usb3, usb3_calc_rammap_val(usb3_ep, desc),
2221 static int usb3_disable_pipe_n(struct renesas_usb3_ep *usb3_ep)
2223 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2226 usb3_ep->halt = false;
2229 if (!usb3_pn_change(usb3, usb3_ep->num)) {
2243 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2245 return usb3_enable_pipe_n(usb3_ep, desc);
2250 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2254 usb3_req = usb3_get_request(usb3_ep);
2257 usb3_dma_try_stop(usb3_ep, usb3_req);
2258 usb3_request_done(usb3_ep, usb3_req, -ESHUTDOWN);
2261 return usb3_disable_pipe_n(usb3_ep);
2298 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2300 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2302 dev_dbg(usb3_to_dev(usb3), "ep_dequeue: ep%2d, %u\n", usb3_ep->num,
2305 usb3_dma_try_stop(usb3_ep, usb3_req);
2306 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, -ECONNRESET);
2318 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2320 usb3_ep->wedge = true;
2321 return usb3_set_halt(usb3_ep, true, false);
2326 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2327 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2330 if (usb3_ep->num) {
2332 if (!usb3_pn_change(usb3, usb3_ep->num)) {
2677 struct renesas_usb3_ep *usb3_ep;
2687 usb3->usb3_ep = devm_kcalloc(dev,
2688 usb3->num_usb3_eps, sizeof(*usb3_ep),
2690 if (!usb3->usb3_ep)
2699 usb3_for_each_ep(usb3_ep, usb3, i) {
2700 snprintf(usb3_ep->ep_name, sizeof(usb3_ep->ep_name), "ep%d", i);
2701 usb3_ep->usb3 = usb3;
2702 usb3_ep->num = i;
2703 usb3_ep->ep.name = usb3_ep->ep_name;
2704 usb3_ep->ep.ops = &renesas_usb3_ep_ops;
2705 INIT_LIST_HEAD(&usb3_ep->queue);
2706 INIT_LIST_HEAD(&usb3_ep->ep.ep_list);
2709 usb3->gadget.ep0 = &usb3_ep->ep;
2710 usb_ep_set_maxpacket_limit(&usb3_ep->ep,
2712 usb3_ep->ep.caps.type_control = true;
2713 usb3_ep->ep.caps.dir_in = true;
2714 usb3_ep->ep.caps.dir_out = true;
2719 usb_ep_set_maxpacket_limit(&usb3_ep->ep, ~0);
2720 list_add_tail(&usb3_ep->ep.ep_list, &usb3->gadget.ep_list);
2721 usb3_ep->ep.caps.type_bulk = true;
2722 usb3_ep->ep.caps.type_int = true;
2724 usb3_ep->ep.caps.dir_in = true;
2726 usb3_ep->ep.caps.dir_out = true;
2735 struct renesas_usb3_ep *usb3_ep;
2749 usb3_for_each_ep(usb3_ep, usb3, i) {
2752 if (usb3_ep->ep.caps.dir_in) {
2767 usb3_ep->rammap_val = val;