Lines Matching refs:epn

719 static void usbf_epn_send_null(struct usbf_ep *epn)  in usbf_epn_send_null()  argument
721 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, USBF_EPN_DEND); in usbf_epn_send_null()
724 static void usbf_epn_send_residue(struct usbf_ep *epn, const void *buf, in usbf_epn_send_residue() argument
730 usbf_ep_reg_writel(epn, USBF_REG_EPN_WRITE, tmp); in usbf_epn_send_residue()
732 usbf_ep_reg_clrset(epn, USBF_REG_EPN_CONTROL, in usbf_epn_send_residue()
737 static int usbf_epn_pio_in(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_pio_in() argument
748 dev_dbg(epn->udc->dev, "ep%u send_null\n", epn->id); in usbf_epn_pio_in()
749 usbf_epn_send_null(epn); in usbf_epn_pio_in()
753 if ((req->req.actual % epn->ep.maxpacket) == 0) { in usbf_epn_pio_in()
755 dev_dbg(epn->udc->dev, "ep%u send_null\n", in usbf_epn_pio_in()
756 epn->id); in usbf_epn_pio_in()
757 usbf_epn_send_null(epn); in usbf_epn_pio_in()
766 if (left > epn->ep.maxpacket) in usbf_epn_pio_in()
767 left = epn->ep.maxpacket; in usbf_epn_pio_in()
774 usbf_ep_reg_write_rep(epn, USBF_REG_EPN_WRITE, buf, nb); in usbf_epn_pio_in()
781 usbf_epn_send_residue(epn, buf, left); in usbf_epn_pio_in()
784 usbf_ep_reg_clrset(epn, USBF_REG_EPN_CONTROL, in usbf_epn_pio_in()
789 dev_dbg(epn->udc->dev, "ep%u send %u/%u\n", epn->id, req->req.actual, in usbf_epn_pio_in()
795 static void usbf_epn_enable_in_end_int(struct usbf_ep *epn) in usbf_epn_enable_in_end_int() argument
797 usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_IN_END_EN); in usbf_epn_enable_in_end_int()
800 static int usbf_epn_dma_in(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_dma_in() argument
808 dev_dbg(epn->udc->dev, "ep%u buf unaligned -> fallback pio\n", in usbf_epn_dma_in()
809 epn->id); in usbf_epn_dma_in()
810 return usbf_epn_pio_in(epn, req); in usbf_epn_dma_in()
819 dev_dbg(epn->udc->dev, "ep%u send null\n", epn->id); in usbf_epn_dma_in()
820 usbf_epn_send_null(epn); in usbf_epn_dma_in()
825 dev_dbg(epn->udc->dev, "ep%u send residue %u\n", epn->id, in usbf_epn_dma_in()
827 usbf_epn_send_residue(epn, in usbf_epn_dma_in()
834 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 1); in usbf_epn_dma_in()
836 dev_err(epn->udc->dev, "usb_gadget_map_request failed (%d)\n", in usbf_epn_dma_in()
842 npkt = DIV_ROUND_UP(left, epn->ep.maxpacket); in usbf_epn_dma_in()
843 lastpkt = (left % epn->ep.maxpacket); in usbf_epn_dma_in()
845 lastpkt = epn->ep.maxpacket; in usbf_epn_dma_in()
848 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR2, in usbf_epn_dma_in()
849 USBF_SYS_EPN_MPKT(epn->ep.maxpacket) | USBF_SYS_EPN_LMPKT(lastpkt)); in usbf_epn_dma_in()
850 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_TADR, in usbf_epn_dma_in()
852 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_in()
854 usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_in()
857 usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, USBF_EPN_SET_DMACNT(npkt)); in usbf_epn_dma_in()
859 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO); in usbf_epn_dma_in()
868 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_in()
870 epn->bridge_on_dma_end = usbf_epn_enable_in_end_int; in usbf_epn_dma_in()
873 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(u32)USBF_EPN_IN_END_INT); in usbf_epn_dma_in()
875 usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL, in usbf_epn_dma_in()
877 usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL, in usbf_epn_dma_in()
880 req->dma_size = (npkt - 1) * epn->ep.maxpacket + lastpkt; in usbf_epn_dma_in()
882 dev_dbg(epn->udc->dev, "ep%u dma xfer %zu\n", epn->id, in usbf_epn_dma_in()
889 if (!(epn->status & USBF_EPN_IN_END_INT)) { in usbf_epn_dma_in()
890 dev_dbg(epn->udc->dev, "ep%u dma not done\n", epn->id); in usbf_epn_dma_in()
893 dev_dbg(epn->udc->dev, "ep%u dma done\n", epn->id); in usbf_epn_dma_in()
895 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 1); in usbf_epn_dma_in()
898 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO); in usbf_epn_dma_in()
900 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_in()
908 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(u32)USBF_EPN_IN_INT); in usbf_epn_dma_in()
910 dev_dbg(epn->udc->dev, "ep%u send residue %u\n", epn->id, in usbf_epn_dma_in()
912 usbf_epn_send_residue(epn, in usbf_epn_dma_in()
919 if (req->req.actual % epn->ep.maxpacket) { in usbf_epn_dma_in()
923 dev_dbg(epn->udc->dev, "ep%u send short\n", epn->id); in usbf_epn_dma_in()
924 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, in usbf_epn_dma_in()
926 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, in usbf_epn_dma_in()
946 dev_dbg(epn->udc->dev, "ep%u send null\n", epn->id); in usbf_epn_dma_in()
947 usbf_epn_send_null(epn); in usbf_epn_dma_in()
952 if (!(epn->status & USBF_EPN_IN_INT)) { in usbf_epn_dma_in()
953 dev_dbg(epn->udc->dev, "ep%u end not done\n", epn->id); in usbf_epn_dma_in()
956 dev_dbg(epn->udc->dev, "ep%u send done %u/%u\n", epn->id, in usbf_epn_dma_in()
965 static void usbf_epn_recv_residue(struct usbf_ep *epn, void *buf, in usbf_epn_recv_residue() argument
970 last = usbf_ep_reg_readl(epn, USBF_REG_EPN_READ); in usbf_epn_recv_residue()
974 static int usbf_epn_pio_out(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_pio_out() argument
983 if (epn->status & USBF_EPN_OUT_INT) { in usbf_epn_pio_out()
985 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); in usbf_epn_pio_out()
993 dev_dbg(epn->udc->dev, "ep%u recv %u, left %u, mpkt %u\n", epn->id, in usbf_epn_pio_out()
994 recv, left, epn->ep.maxpacket); in usbf_epn_pio_out()
996 if (left > epn->ep.maxpacket) in usbf_epn_pio_out()
997 left = epn->ep.maxpacket; in usbf_epn_pio_out()
1007 usbf_ep_reg_read_rep(epn, USBF_REG_EPN_READ, in usbf_epn_pio_out()
1014 usbf_epn_recv_residue(epn, buf, count); in usbf_epn_pio_out()
1018 dev_dbg(epn->udc->dev, "ep%u recv %u/%u\n", epn->id, in usbf_epn_pio_out()
1022 dev_dbg(epn->udc->dev, "ep%u req.status=%d\n", epn->id, in usbf_epn_pio_out()
1028 if (recv < epn->ep.maxpacket) { in usbf_epn_pio_out()
1029 dev_dbg(epn->udc->dev, "ep%u short packet\n", epn->id); in usbf_epn_pio_out()
1042 if (epn->status & USBF_EPN_OUT_NULL_INT) { in usbf_epn_pio_out()
1044 dev_dbg(epn->udc->dev, "ep%u null packet\n", epn->id); in usbf_epn_pio_out()
1057 static void usbf_epn_enable_out_end_int(struct usbf_ep *epn) in usbf_epn_enable_out_end_int() argument
1059 usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_OUT_END_EN); in usbf_epn_enable_out_end_int()
1062 static void usbf_epn_process_queue(struct usbf_ep *epn);
1064 static void usbf_epn_dma_out_send_dma(struct usbf_ep *epn, dma_addr_t addr, u32 npkt, bool is_short) in usbf_epn_dma_out_send_dma() argument
1066 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR2, USBF_SYS_EPN_MPKT(epn->ep.maxpacket)); in usbf_epn_dma_out_send_dma()
1067 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_TADR, addr); in usbf_epn_dma_out_send_dma()
1070 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_out_send_dma()
1072 usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_out_send_dma()
1075 usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, in usbf_epn_dma_out_send_dma()
1085 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_out_send_dma()
1087 epn->bridge_on_dma_end = usbf_epn_enable_out_end_int; in usbf_epn_dma_out_send_dma()
1090 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, in usbf_epn_dma_out_send_dma()
1093 usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL, in usbf_epn_dma_out_send_dma()
1095 usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL, in usbf_epn_dma_out_send_dma()
1100 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_out_send_dma()
1102 usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_out_send_dma()
1105 usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, in usbf_epn_dma_out_send_dma()
1113 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_out_send_dma()
1118 usbf_reg_bitclr(epn->udc, USBF_REG_AHBBINTEN, in usbf_epn_dma_out_send_dma()
1119 USBF_SYS_DMA_ENDINTEN_EPN(epn->id)); in usbf_epn_dma_out_send_dma()
1122 usbf_reg_writel(epn->udc, USBF_REG_AHBBINT, in usbf_epn_dma_out_send_dma()
1123 USBF_SYS_DMA_ENDINT_EPN(epn->id)); in usbf_epn_dma_out_send_dma()
1126 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, in usbf_epn_dma_out_send_dma()
1129 usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL, in usbf_epn_dma_out_send_dma()
1131 usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL, in usbf_epn_dma_out_send_dma()
1135 static size_t usbf_epn_dma_out_complete_dma(struct usbf_ep *epn, bool is_short) in usbf_epn_dma_out_complete_dma() argument
1142 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_out_complete_dma()
1152 usbf_reg_bitset(epn->udc, USBF_REG_AHBBINTEN, in usbf_epn_dma_out_complete_dma()
1153 USBF_SYS_DMA_ENDINTEN_EPN(epn->id)); in usbf_epn_dma_out_complete_dma()
1155 tmp = usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT); in usbf_epn_dma_out_complete_dma()
1165 epn->dma_regs + USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_out_complete_dma()
1169 dev_err(epn->udc->dev, "ep%u wait bridge timed out\n", in usbf_epn_dma_out_complete_dma()
1170 epn->id); in usbf_epn_dma_out_complete_dma()
1173 usbf_ep_dma_reg_bitclr(epn, USBF_REG_DMA_EPN_DCR1, in usbf_epn_dma_out_complete_dma()
1180 return dmacnt * epn->ep.maxpacket; in usbf_epn_dma_out_complete_dma()
1186 static int usbf_epn_dma_out(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_dma_out() argument
1196 dev_dbg(epn->udc->dev, "ep%u buf unaligned -> fallback pio\n", in usbf_epn_dma_out()
1197 epn->id); in usbf_epn_dma_out()
1198 return usbf_epn_pio_out(epn, req); in usbf_epn_dma_out()
1204 if (epn->status & USBF_EPN_OUT_NULL_INT) { in usbf_epn_dma_out()
1205 dev_dbg(epn->udc->dev, "ep%u null packet\n", epn->id); in usbf_epn_dma_out()
1215 if (!(epn->status & USBF_EPN_OUT_INT)) { in usbf_epn_dma_out()
1216 dev_dbg(epn->udc->dev, "ep%u OUT_INT not set -> spurious\n", in usbf_epn_dma_out()
1217 epn->id); in usbf_epn_dma_out()
1222 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); in usbf_epn_dma_out()
1224 dev_dbg(epn->udc->dev, "ep%u recv = 0 -> spurious\n", in usbf_epn_dma_out()
1225 epn->id); in usbf_epn_dma_out()
1231 dev_dbg(epn->udc->dev, "ep%u recv %u, left %u, mpkt %u\n", epn->id, in usbf_epn_dma_out()
1232 recv, left, epn->ep.maxpacket); in usbf_epn_dma_out()
1235 dev_err(epn->udc->dev, "ep%u overflow (%u/%u)\n", in usbf_epn_dma_out()
1236 epn->id, recv, left); in usbf_epn_dma_out()
1241 if (recv < epn->ep.maxpacket) { in usbf_epn_dma_out()
1243 dev_dbg(epn->udc->dev, "ep%u short packet\n", epn->id); in usbf_epn_dma_out()
1245 usbf_epn_recv_residue(epn, in usbf_epn_dma_out()
1249 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", in usbf_epn_dma_out()
1250 epn->id, req->req.actual, req->req.length); in usbf_epn_dma_out()
1256 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1258 dev_err(epn->udc->dev, "map request failed (%d)\n", in usbf_epn_dma_out()
1264 usbf_epn_dma_out_send_dma(epn, in usbf_epn_dma_out()
1269 dev_dbg(epn->udc->dev, "ep%u dma short xfer %zu\n", epn->id, in usbf_epn_dma_out()
1276 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1278 dev_err(epn->udc->dev, "map request failed (%d)\n", in usbf_epn_dma_out()
1289 npkt = left / epn->ep.maxpacket; in usbf_epn_dma_out()
1290 usbf_epn_dma_out_send_dma(epn, in usbf_epn_dma_out()
1293 req->dma_size = npkt * epn->ep.maxpacket; in usbf_epn_dma_out()
1295 dev_dbg(epn->udc->dev, "ep%u dma xfer %zu (%u)\n", epn->id, in usbf_epn_dma_out()
1302 if (!(epn->status & USBF_EPN_OUT_END_INT)) { in usbf_epn_dma_out()
1303 dev_dbg(epn->udc->dev, "ep%u dma short not done\n", epn->id); in usbf_epn_dma_out()
1306 dev_dbg(epn->udc->dev, "ep%u dma short done\n", epn->id); in usbf_epn_dma_out()
1308 usbf_epn_dma_out_complete_dma(epn, true); in usbf_epn_dma_out()
1310 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1316 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); in usbf_epn_dma_out()
1320 dev_dbg(epn->udc->dev, "ep%u recv residue %u\n", epn->id, in usbf_epn_dma_out()
1322 usbf_epn_recv_residue(epn, in usbf_epn_dma_out()
1327 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id, in usbf_epn_dma_out()
1334 if (!(epn->status & USBF_EPN_OUT_END_INT)) { in usbf_epn_dma_out()
1335 dev_dbg(epn->udc->dev, "ep%u dma not done\n", epn->id); in usbf_epn_dma_out()
1338 dev_dbg(epn->udc->dev, "ep%u dma done\n", epn->id); in usbf_epn_dma_out()
1340 dma_left = usbf_epn_dma_out_complete_dma(epn, false); in usbf_epn_dma_out()
1345 dev_dbg(epn->udc->dev, "ep%u dma xfer done %u\n", epn->id, in usbf_epn_dma_out()
1350 if (epn->status & USBF_EPN_OUT_NULL_INT) { in usbf_epn_dma_out()
1352 dev_dbg(epn->udc->dev, "ep%u dma stopped by null pckt\n", in usbf_epn_dma_out()
1353 epn->id); in usbf_epn_dma_out()
1354 usb_gadget_unmap_request(&epn->udc->gadget, in usbf_epn_dma_out()
1358 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, in usbf_epn_dma_out()
1367 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", in usbf_epn_dma_out()
1368 epn->id, req->req.actual, req->req.length); in usbf_epn_dma_out()
1374 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); in usbf_epn_dma_out()
1377 dev_err(epn->udc->dev, in usbf_epn_dma_out()
1378 "ep%u overflow (%u/%u)\n", epn->id, in usbf_epn_dma_out()
1381 usb_gadget_unmap_request(&epn->udc->gadget, in usbf_epn_dma_out()
1390 usbf_epn_dma_out_send_dma(epn, in usbf_epn_dma_out()
1395 dev_dbg(epn->udc->dev, "ep%u dma short xfer %zu\n", in usbf_epn_dma_out()
1396 epn->id, req->dma_size); in usbf_epn_dma_out()
1402 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1407 dev_dbg(epn->udc->dev, "ep%u recv residue %u\n", in usbf_epn_dma_out()
1408 epn->id, count); in usbf_epn_dma_out()
1409 usbf_epn_recv_residue(epn, in usbf_epn_dma_out()
1414 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id, in usbf_epn_dma_out()
1422 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_out()
1424 epn->status = 0; in usbf_epn_dma_out()
1425 epn->bridge_on_dma_end = usbf_epn_process_queue; in usbf_epn_dma_out()
1431 dev_dbg(epn->udc->dev, "ep%u bridge transfers done\n", epn->id); in usbf_epn_dma_out()
1434 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_out()
1438 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1447 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id, in usbf_epn_dma_out()
1451 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u, wait more data\n", in usbf_epn_dma_out()
1452 epn->id, req->req.actual, req->req.length); in usbf_epn_dma_out()
1459 static void usbf_epn_dma_stop(struct usbf_ep *epn) in usbf_epn_dma_stop() argument
1461 usbf_ep_dma_reg_bitclr(epn, USBF_REG_DMA_EPN_DCR1, USBF_SYS_EPN_REQEN); in usbf_epn_dma_stop()
1473 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_DMA_CTRL, USBF_EPN_DMA_EN); in usbf_epn_dma_stop()
1476 static void usbf_epn_dma_abort(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_dma_abort() argument
1478 dev_dbg(epn->udc->dev, "ep%u %s dma abort\n", epn->id, in usbf_epn_dma_abort()
1479 epn->is_in ? "in" : "out"); in usbf_epn_dma_abort()
1481 epn->bridge_on_dma_end = NULL; in usbf_epn_dma_abort()
1483 usbf_epn_dma_stop(epn); in usbf_epn_dma_abort()
1485 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, in usbf_epn_dma_abort()
1486 epn->is_in ? 1 : 0); in usbf_epn_dma_abort()
1489 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO); in usbf_epn_dma_abort()
1491 if (epn->is_in) { in usbf_epn_dma_abort()
1492 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_abort()
1496 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_dma_abort()
1502 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, in usbf_epn_dma_abort()
1505 usbf_reg_writel(epn->udc, USBF_REG_AHBBINT, USBF_SYS_DMA_ENDINT_EPN(epn->id)); in usbf_epn_dma_abort()
1508 usbf_reg_bitset(epn->udc, USBF_REG_AHBBINTEN, in usbf_epn_dma_abort()
1509 USBF_SYS_DMA_ENDINTEN_EPN(epn->id)); in usbf_epn_dma_abort()
1515 static void usbf_epn_fifo_flush(struct usbf_ep *epn) in usbf_epn_fifo_flush() argument
1521 dev_dbg(epn->udc->dev, "ep%u %s fifo flush\n", epn->id, in usbf_epn_fifo_flush()
1522 epn->is_in ? "in" : "out"); in usbf_epn_fifo_flush()
1524 ctrl = usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL); in usbf_epn_fifo_flush()
1525 usbf_ep_reg_writel(epn, USBF_REG_EPN_CONTROL, ctrl | USBF_EPN_BCLR); in usbf_epn_fifo_flush()
1530 ret = readl_poll_timeout_atomic(epn->regs + USBF_REG_EPN_STATUS, sts, in usbf_epn_fifo_flush()
1534 dev_err(epn->udc->dev, "ep%u flush fifo timed out\n", epn->id); in usbf_epn_fifo_flush()
1596 static int usbf_epn_start_queue(struct usbf_ep *epn) in usbf_epn_start_queue() argument
1601 if (usbf_ep_is_stalled(epn)) in usbf_epn_start_queue()
1604 req = list_first_entry_or_null(&epn->queue, struct usbf_req, queue); in usbf_epn_start_queue()
1606 if (epn->is_in) { in usbf_epn_start_queue()
1607 if (req && !epn->is_processing) { in usbf_epn_start_queue()
1608 ret = epn->dma_regs ? in usbf_epn_start_queue()
1609 usbf_epn_dma_in(epn, req) : in usbf_epn_start_queue()
1610 usbf_epn_pio_in(epn, req); in usbf_epn_start_queue()
1612 dev_err(epn->udc->dev, in usbf_epn_start_queue()
1624 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, in usbf_epn_start_queue()
1628 usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_start_queue()
1634 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, in usbf_epn_start_queue()
1636 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, in usbf_epn_start_queue()
1800 static int usbf_epn_enable(struct usbf_ep *epn) in usbf_epn_enable() argument
1805 base_addr = usbf_ep_info[epn->id].base_addr; in usbf_epn_enable()
1806 usbf_ep_reg_writel(epn, USBF_REG_EPN_PCKT_ADRS, in usbf_epn_enable()
1807 USBF_EPN_BASEAD(base_addr) | USBF_EPN_MPKT(epn->ep.maxpacket)); in usbf_epn_enable()
1810 if (epn->is_in) { in usbf_epn_enable()
1812 usbf_ep_reg_writel(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_IN_EN); in usbf_epn_enable()
1819 if (epn->is_in) in usbf_epn_enable()
1823 usbf_ep_reg_writel(epn, USBF_REG_EPN_CONTROL, ctrl); in usbf_epn_enable()
1872 static int usbf_epn_disable(struct usbf_ep *epn) in usbf_epn_disable() argument
1875 usbf_ep_reg_writel(epn, USBF_REG_EPN_INT_ENA, 0); in usbf_epn_disable()
1878 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_EN); in usbf_epn_disable()
1881 usbf_ep_nuke(epn, -ESHUTDOWN); in usbf_epn_disable()
2761 static void usbf_epn_process_queue(struct usbf_ep *epn) in usbf_epn_process_queue() argument
2765 ret = usbf_ep_process_queue(epn); in usbf_epn_process_queue()
2768 dev_warn(epn->udc->dev, "ep%u %s, no request available\n", in usbf_epn_process_queue()
2769 epn->id, epn->is_in ? "in" : "out"); in usbf_epn_process_queue()
2779 dev_err(epn->udc->dev, "ep%u %s, process queue failed (%d)\n", in usbf_epn_process_queue()
2780 epn->id, epn->is_in ? "in" : "out", ret); in usbf_epn_process_queue()
2785 dev_dbg(epn->udc->dev, "ep%u %s failed (%d)\n", epn->id, in usbf_epn_process_queue()
2786 epn->is_in ? "in" : "out", ret); in usbf_epn_process_queue()
2787 usbf_ep_stall(epn, true); in usbf_epn_process_queue()
2788 usbf_ep_nuke(epn, ret); in usbf_epn_process_queue()
2792 static void usbf_epn_interrupt(struct usbf_ep *epn) in usbf_epn_interrupt() argument
2797 epn->status = usbf_ep_reg_readl(epn, USBF_REG_EPN_STATUS); in usbf_epn_interrupt()
2798 ena = usbf_ep_reg_readl(epn, USBF_REG_EPN_INT_ENA); in usbf_epn_interrupt()
2799 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(epn->status & ena)); in usbf_epn_interrupt()
2801 dev_dbg(epn->udc->dev, "ep%u %s status=0x%08x, enable=%08x\n, ctrl=0x%08x\n", in usbf_epn_interrupt()
2802 epn->id, epn->is_in ? "in" : "out", epn->status, ena, in usbf_epn_interrupt()
2803 usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL)); in usbf_epn_interrupt()
2805 if (epn->disabled) { in usbf_epn_interrupt()
2806 dev_warn(epn->udc->dev, "ep%u %s, interrupt while disabled\n", in usbf_epn_interrupt()
2807 epn->id, epn->is_in ? "in" : "out"); in usbf_epn_interrupt()
2811 sts = epn->status & ena; in usbf_epn_interrupt()
2815 dev_dbg(epn->udc->dev, "ep%u %s process queue (in interrupts)\n", in usbf_epn_interrupt()
2816 epn->id, epn->is_in ? "in" : "out"); in usbf_epn_interrupt()
2817 usbf_epn_process_queue(epn); in usbf_epn_interrupt()
2822 dev_dbg(epn->udc->dev, "ep%u %s process queue (out interrupts)\n", in usbf_epn_interrupt()
2823 epn->id, epn->is_in ? "in" : "out"); in usbf_epn_interrupt()
2824 usbf_epn_process_queue(epn); in usbf_epn_interrupt()
2827 dev_dbg(epn->udc->dev, "ep%u %s done status=0x%08x. next=0x%08x\n", in usbf_epn_interrupt()
2828 epn->id, epn->is_in ? "in" : "out", in usbf_epn_interrupt()
2829 sts, usbf_ep_reg_readl(epn, USBF_REG_EPN_STATUS)); in usbf_epn_interrupt()
2974 struct usbf_ep *epn; in usbf_ahb_epc_irq() local
2976 void (*ep_action)(struct usbf_ep *epn); in usbf_ahb_epc_irq()
3005 epn = &udc->ep[i]; in usbf_ahb_epc_irq()
3006 dev_dbg(epn->udc->dev, in usbf_ahb_epc_irq()
3008 epn->id, epn->bridge_on_dma_end); in usbf_ahb_epc_irq()
3009 ep_action = epn->bridge_on_dma_end; in usbf_ahb_epc_irq()
3011 epn->bridge_on_dma_end = NULL; in usbf_ahb_epc_irq()
3012 ep_action(epn); in usbf_ahb_epc_irq()
3175 static int usbf_epn_check(struct usbf_ep *epn) in usbf_epn_check() argument
3182 ctrl = usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL); in usbf_epn_check()
3187 if (epn->ep.caps.type_control || epn->ep.caps.type_iso || in usbf_epn_check()
3188 !epn->ep.caps.type_bulk || epn->ep.caps.type_int) { in usbf_epn_check()
3189 dev_err(epn->udc->dev, in usbf_epn_check()
3190 "ep%u caps mismatch, bulk expected\n", epn->id); in usbf_epn_check()
3196 if (epn->ep.caps.type_control || epn->ep.caps.type_iso || in usbf_epn_check()
3197 epn->ep.caps.type_bulk || !epn->ep.caps.type_int) { in usbf_epn_check()
3198 dev_err(epn->udc->dev, in usbf_epn_check()
3199 "ep%u caps mismatch, int expected\n", epn->id); in usbf_epn_check()
3205 if (epn->ep.caps.type_control || !epn->ep.caps.type_iso || in usbf_epn_check()
3206 epn->ep.caps.type_bulk || epn->ep.caps.type_int) { in usbf_epn_check()
3207 dev_err(epn->udc->dev, in usbf_epn_check()
3208 "ep%u caps mismatch, iso expected\n", epn->id); in usbf_epn_check()
3214 dev_err(epn->udc->dev, "ep%u unknown type\n", epn->id); in usbf_epn_check()
3221 if (!usbf_ep_info[epn->id].is_double) { in usbf_epn_check()
3222 dev_err(epn->udc->dev, in usbf_epn_check()
3224 epn->id); in usbf_epn_check()
3229 if (usbf_ep_info[epn->id].is_double) { in usbf_epn_check()
3230 dev_err(epn->udc->dev, in usbf_epn_check()
3232 epn->id); in usbf_epn_check()
3237 dev_dbg(epn->udc->dev, "ep%u (%s) %s, %s buffer %u, checked %s\n", in usbf_epn_check()
3238 epn->id, epn->ep.name, type_txt, buf_txt, in usbf_epn_check()
3239 epn->ep.maxpacket_limit, ret ? "failed" : "ok"); in usbf_epn_check()