Lines Matching refs:mtu

18 #define	next_ep0_request(mtu)	next_request((mtu)->ep0)
39 static char *decode_ep0_state(struct mtu3 *mtu)
41 switch (mtu->ep0_state) {
57 static void ep0_req_giveback(struct mtu3 *mtu, struct usb_request *req)
59 mtu3_req_complete(mtu->ep0, req, 0);
63 forward_to_driver(struct mtu3 *mtu, const struct usb_ctrlrequest *setup)
64 __releases(mtu->lock)
65 __acquires(mtu->lock)
69 if (!mtu->gadget_driver || !mtu->async_callbacks)
72 spin_unlock(&mtu->lock);
73 ret = mtu->gadget_driver->setup(&mtu->g, setup);
74 spin_lock(&mtu->lock);
76 dev_dbg(mtu->dev, "%s ret %d\n", __func__, ret);
82 void __iomem *fifo = mep->mtu->mac_base + U3D_FIFO0;
85 dev_dbg(mep->mtu->dev, "%s: ep%din, len=%d, buf=%p\n",
102 void __iomem *fifo = mep->mtu->mac_base + U3D_FIFO0;
106 dev_dbg(mep->mtu->dev, "%s: ep%dout len=%d buf=%p\n",
120 static void ep0_load_test_packet(struct mtu3 *mtu)
126 ep0_write_fifo(mtu->ep0, mtu3_test_packet, sizeof(mtu3_test_packet));
137 struct mtu3 *mtu = mep0->mtu;
138 void __iomem *mbase = mtu->mac_base;
147 mtu3_writel(mtu->mac_base, U3D_EP0CSR, csr);
149 mtu->delayed_status = false;
150 mtu->ep0_state = MU3D_EP0_STATE_SETUP;
152 dev_dbg(mtu->dev, "ep0: %s STALL, ep0_state: %s\n",
153 set ? "SEND" : "CLEAR", decode_ep0_state(mtu));
156 static void ep0_do_status_stage(struct mtu3 *mtu)
158 void __iomem *mbase = mtu->mac_base;
173 struct mtu3 *mtu;
179 mtu = mreq->mtu;
180 dev_dbg(mtu->dev, "u1sel:%d, u1pel:%d, u2sel:%d, u2pel:%d\n",
185 static int ep0_set_sel(struct mtu3 *mtu, struct usb_ctrlrequest *setup)
191 dev_err(mtu->dev, "%s wrong wLength:%d\n",
196 mtu->ep0_req.mep = mtu->ep0;
197 mtu->ep0_req.request.length = 6;
198 mtu->ep0_req.request.buf = mtu->setup_buf;
199 mtu->ep0_req.request.complete = ep0_set_sel_complete;
200 ret = ep0_queue(mtu->ep0, &mtu->ep0_req);
206 ep0_get_status(struct mtu3 *mtu, const struct usb_ctrlrequest *setup)
216 result[0] = mtu->is_self_powered << USB_DEVICE_SELF_POWERED;
217 result[0] |= mtu->may_wakeup << USB_DEVICE_REMOTE_WAKEUP;
219 if (mtu->g.speed >= USB_SPEED_SUPER) {
220 result[0] |= mtu->u1_enable << USB_DEV_STAT_U1_ENABLED;
221 result[0] |= mtu->u2_enable << USB_DEV_STAT_U2_ENABLED;
224 dev_dbg(mtu->dev, "%s result=%x, U1=%x, U2=%x\n", __func__,
225 result[0], mtu->u1_enable, mtu->u2_enable);
237 if (epnum >= mtu->num_eps) {
244 mep = (is_in ? mtu->in_eps : mtu->out_eps) + epnum;
263 dev_dbg(mtu->dev, "get_status=%x\n", *(u16 *)result);
264 memcpy(mtu->setup_buf, result, sizeof(result));
265 mtu->ep0_req.mep = mtu->ep0;
266 mtu->ep0_req.request.length = 2;
267 mtu->ep0_req.request.buf = &mtu->setup_buf;
268 mtu->ep0_req.request.complete = ep0_dummy_complete;
269 ret = ep0_queue(mtu->ep0, &mtu->ep0_req);
276 static int handle_test_mode(struct mtu3 *mtu, struct usb_ctrlrequest *setup)
278 void __iomem *mbase = mtu->mac_base;
284 dev_dbg(mtu->dev, "USB_TEST_J\n");
285 mtu->test_mode_nr = TEST_J_MODE;
288 dev_dbg(mtu->dev, "USB_TEST_K\n");
289 mtu->test_mode_nr = TEST_K_MODE;
292 dev_dbg(mtu->dev, "USB_TEST_SE0_NAK\n");
293 mtu->test_mode_nr = TEST_SE0_NAK_MODE;
296 dev_dbg(mtu->dev, "USB_TEST_PACKET\n");
297 mtu->test_mode_nr = TEST_PACKET_MODE;
304 mtu->test_mode = true;
307 if (mtu->test_mode_nr == TEST_PACKET_MODE)
308 ep0_load_test_packet(mtu);
311 ep0_do_status_stage(mtu);
317 mtu3_writel(mbase, U3D_USB2_TEST_MODE, mtu->test_mode_nr);
319 mtu->ep0_state = MU3D_EP0_STATE_SETUP;
325 static int ep0_handle_feature_dev(struct mtu3 *mtu,
328 void __iomem *mbase = mtu->mac_base;
334 mtu->may_wakeup = !!set;
338 if (!set || (mtu->g.speed != USB_SPEED_HIGH) ||
342 handled = handle_test_mode(mtu, setup);
345 if (mtu->g.speed < USB_SPEED_SUPER ||
346 mtu->g.state != USB_STATE_CONFIGURED)
356 mtu->u1_enable = !!set;
360 if (mtu->g.speed < USB_SPEED_SUPER ||
361 mtu->g.state != USB_STATE_CONFIGURED)
371 mtu->u2_enable = !!set;
381 static int ep0_handle_feature(struct mtu3 *mtu,
396 handled = ep0_handle_feature_dev(mtu, setup, set);
401 mtu->g.speed >= USB_SPEED_SUPER) {
403 mtu->may_wakeup = !!(index & USB_INTRF_FUNC_SUSPEND_RW);
409 if (epnum == 0 || epnum >= mtu->num_eps ||
414 mep = (is_in ? mtu->in_eps : mtu->out_eps) + epnum;
440 static int handle_standard_request(struct mtu3 *mtu,
443 void __iomem *mbase = mtu->mac_base;
444 enum usb_device_state state = mtu->g.state;
455 mtu->address = (u8) (value & 0x7f);
456 dev_dbg(mtu->dev, "set address to 0x%x\n", mtu->address);
460 dev_conf |= DEV_ADDR(mtu->address);
463 if (mtu->address)
464 usb_gadget_set_state(&mtu->g, USB_STATE_ADDRESS);
466 usb_gadget_set_state(&mtu->g, USB_STATE_DEFAULT);
472 usb_gadget_set_state(&mtu->g,
480 usb_gadget_set_state(&mtu->g,
486 handled = ep0_handle_feature(mtu, setup, 0);
489 handled = ep0_handle_feature(mtu, setup, 1);
492 handled = ep0_get_status(mtu, setup);
495 handled = ep0_set_sel(mtu, setup);
509 static void ep0_rx_state(struct mtu3 *mtu)
513 void __iomem *mbase = mtu->mac_base;
518 dev_dbg(mtu->dev, "%s\n", __func__);
521 mreq = next_ep0_request(mtu);
535 ep0_read_fifo(mtu->ep0, buf, count);
539 maxp = mtu->g.ep0->maxpacket;
541 mtu->ep0_state = MU3D_EP0_STATE_SETUP;
542 dev_dbg(mtu->dev, "ep0 state: %s\n",
543 decode_ep0_state(mtu));
551 dev_dbg(mtu->dev, "%s: SENDSTALL\n", __func__);
558 ep0_req_giveback(mtu, req);
563 static void ep0_tx_state(struct mtu3 *mtu)
565 struct mtu3_request *mreq = next_ep0_request(mtu);
572 dev_dbg(mtu->dev, "%s\n", __func__);
577 maxp = mtu->g.ep0->maxpacket;
584 ep0_write_fifo(mtu->ep0, src, count);
586 dev_dbg(mtu->dev, "%s act=%d, len=%d, cnt=%d, maxp=%d zero=%d\n",
593 mtu->ep0_state = MU3D_EP0_STATE_TX_END;
596 csr = mtu3_readl(mtu->mac_base, U3D_EP0CSR) & EP0_W1C_BITS;
597 mtu3_writel(mtu->mac_base, U3D_EP0CSR, csr | EP0_TXPKTRDY);
599 dev_dbg(mtu->dev, "%s ep0csr=0x%x\n", __func__,
600 mtu3_readl(mtu->mac_base, U3D_EP0CSR));
603 static void ep0_read_setup(struct mtu3 *mtu, struct usb_ctrlrequest *setup)
609 csr = mtu3_readl(mtu->mac_base, U3D_EP0CSR) & EP0_W1C_BITS;
610 count = mtu3_readl(mtu->mac_base, U3D_RXCOUNT0);
612 ep0_read_fifo(mtu->ep0, (u8 *)setup, count);
614 dev_dbg(mtu->dev, "SETUP req%02x.%02x v%04x i%04x l%04x\n",
620 mreq = next_ep0_request(mtu);
622 ep0_req_giveback(mtu, &mreq->request);
627 mtu3_writel(mtu->mac_base, U3D_EP0CSR,
629 mtu->ep0_state = MU3D_EP0_STATE_TX;
631 mtu3_writel(mtu->mac_base, U3D_EP0CSR,
633 mtu->ep0_state = MU3D_EP0_STATE_RX;
637 static int ep0_handle_setup(struct mtu3 *mtu)
638 __releases(mtu->lock)
639 __acquires(mtu->lock)
645 ep0_read_setup(mtu, &setup);
649 handled = handle_standard_request(mtu, &setup);
651 dev_dbg(mtu->dev, "handled %d, ep0_state: %s\n",
652 handled, decode_ep0_state(mtu));
659 handled = forward_to_driver(mtu, &setup);
662 dev_dbg(mtu->dev, "%s stall (%d)\n", __func__, handled);
664 ep0_stall_set(mtu->ep0, true,
671 if (mtu->test_mode) {
675 mreq = next_ep0_request(mtu);
678 ep0_do_status_stage(mtu);
679 ep0_req_giveback(mtu, &mreq->request);
682 mtu->delayed_status = true;
686 ep0_do_status_stage(mtu);
688 mreq = next_ep0_request(mtu);
690 ep0_req_giveback(mtu, &mreq->request);
696 irqreturn_t mtu3_ep0_isr(struct mtu3 *mtu)
698 void __iomem *mbase = mtu->mac_base;
715 mtu->ep0_state = MU3D_EP0_STATE_SETUP;
719 dev_dbg(mtu->dev, "%s csr=0x%x\n", __func__, csr);
723 ep0_stall_set(mtu->ep0, false, 0);
727 dev_dbg(mtu->dev, "ep0_state: %s\n", decode_ep0_state(mtu));
728 mtu3_dbg_trace(mtu->dev, "ep0_state %s", decode_ep0_state(mtu));
730 switch (mtu->ep0_state) {
734 ep0_tx_state(mtu);
741 ep0_rx_state(mtu);
749 mreq = next_ep0_request(mtu);
751 ep0_req_giveback(mtu, &mreq->request);
753 mtu->ep0_state = MU3D_EP0_STATE_SETUP;
755 dev_dbg(mtu->dev, "ep0_state: %s\n", decode_ep0_state(mtu));
763 dev_err(mtu->dev, "SETUP packet len %d != 8 ?\n", len);
767 ep0_handle_setup(mtu);
772 ep0_stall_set(mtu->ep0, true, 0);
796 struct mtu3 *mtu = mep->mtu;
798 mreq->mtu = mtu;
802 dev_dbg(mtu->dev, "%s %s (ep0_state: %s), len#%d\n", __func__,
803 mep->name, decode_ep0_state(mtu), mreq->request.length);
805 switch (mtu->ep0_state) {
811 dev_err(mtu->dev, "%s, error in ep0 state %s\n", __func__,
812 decode_ep0_state(mtu));
816 if (mtu->delayed_status) {
818 mtu->delayed_status = false;
819 ep0_do_status_stage(mtu);
830 if (mtu->ep0_state == MU3D_EP0_STATE_TX)
831 ep0_tx_state(mtu);
841 struct mtu3 *mtu;
849 mtu = mep->mtu;
852 spin_lock_irqsave(&mtu->lock, flags);
854 spin_unlock_irqrestore(&mtu->lock, flags);
867 struct mtu3 *mtu;
875 mtu = mep->mtu;
877 dev_dbg(mtu->dev, "%s\n", __func__);
879 spin_lock_irqsave(&mtu->lock, flags);
886 switch (mtu->ep0_state) {
895 ep0_stall_set(mtu->ep0, true, 0);
898 dev_dbg(mtu->dev, "ep0 can't halt in state %s\n",
899 decode_ep0_state(mtu));
904 spin_unlock_irqrestore(&mtu->lock, flags);