Lines Matching +full:num +full:- +full:irqs
1 // SPDX-License-Identifier: GPL-2.0+
14 * - Andreas Larsson <andreas@gaisler.com>
15 * - Marko Isomaki
35 #include <linux/dma-mapping.h>
65 /* ---------------------------------------------------------------------- */
94 int buflen = ep->is_in ? req->req.length : req->req.actual; in gr_dbgprint_request()
98 dev_dbg(ep->dev->dev, "%s: 0x%p, %d bytes data%s:\n", str, req, buflen, in gr_dbgprint_request()
101 rowlen, 4, req->req.buf, plen, false); in gr_dbgprint_request()
107 dev_vdbg(dev->dev, "REQ: %02x.%02x v%04x i%04x l%04x\n", in gr_dbgprint_devreq()
120 /* ---------------------------------------------------------------------- */
127 u32 epctrl = gr_read32(&ep->regs->epctrl); in gr_seq_ep_show()
128 u32 epstat = gr_read32(&ep->regs->epstat); in gr_seq_ep_show()
132 seq_printf(seq, "%s:\n", ep->ep.name); in gr_seq_ep_show()
137 seq_printf(seq, " dma_start = %d\n", ep->dma_start); in gr_seq_ep_show()
138 seq_printf(seq, " stopped = %d\n", ep->stopped); in gr_seq_ep_show()
139 seq_printf(seq, " wedged = %d\n", ep->wedged); in gr_seq_ep_show()
140 seq_printf(seq, " callback = %d\n", ep->callback); in gr_seq_ep_show()
141 seq_printf(seq, " maxpacket = %d\n", ep->ep.maxpacket); in gr_seq_ep_show()
142 seq_printf(seq, " maxpacket_limit = %d\n", ep->ep.maxpacket_limit); in gr_seq_ep_show()
143 seq_printf(seq, " bytes_per_buffer = %d\n", ep->bytes_per_buffer); in gr_seq_ep_show()
157 if (list_empty(&ep->queue)) { in gr_seq_ep_show()
163 list_for_each_entry(req, &ep->queue, queue) { in gr_seq_ep_show()
168 &req->req.buf, req->req.actual, req->req.length); in gr_seq_ep_show()
170 next = req->first_desc; in gr_seq_ep_show()
173 next = desc->next_desc; in gr_seq_ep_show()
175 desc == req->curr_desc ? 'c' : ' ', in gr_seq_ep_show()
176 desc, desc->paddr, desc->ctrl, desc->data); in gr_seq_ep_show()
177 } while (desc != req->last_desc); in gr_seq_ep_show()
184 struct gr_udc *dev = seq->private; in gr_dfs_show()
185 u32 control = gr_read32(&dev->regs->control); in gr_dfs_show()
186 u32 status = gr_read32(&dev->regs->status); in gr_dfs_show()
190 usb_state_string(dev->gadget.state)); in gr_dfs_show()
194 seq_printf(seq, "ep0state = %s\n", gr_ep0state_string(dev->ep0state)); in gr_dfs_show()
195 seq_printf(seq, "irq_enabled = %d\n", dev->irq_enabled); in gr_dfs_show()
196 seq_printf(seq, "remote_wakeup = %d\n", dev->remote_wakeup); in gr_dfs_show()
197 seq_printf(seq, "test_mode = %d\n", dev->test_mode); in gr_dfs_show()
200 list_for_each_entry(ep, &dev->ep_list, ep_list) in gr_dfs_show()
212 root = debugfs_create_dir(dev_name(dev->dev), usb_debug_root); in gr_dfs_create()
218 debugfs_remove(debugfs_lookup(dev_name(dev->dev), usb_debug_root)); in gr_dfs_delete()
228 /* ---------------------------------------------------------------------- */
237 dma_desc = dma_pool_zalloc(ep->dev->desc_pool, gfp_flags, &paddr); in gr_alloc_dma_desc()
239 dev_err(ep->dev->dev, "Could not allocate from DMA pool\n"); in gr_alloc_dma_desc()
243 dma_desc->paddr = paddr; in gr_alloc_dma_desc()
251 dma_pool_free(dev->desc_pool, desc, (dma_addr_t)desc->paddr); in gr_free_dma_desc()
260 next = req->first_desc; in gr_free_dma_desc_chain()
266 next = desc->next_desc; in gr_free_dma_desc_chain()
268 } while (desc != req->last_desc); in gr_free_dma_desc_chain()
270 req->first_desc = NULL; in gr_free_dma_desc_chain()
271 req->curr_desc = NULL; in gr_free_dma_desc_chain()
272 req->last_desc = NULL; in gr_free_dma_desc_chain()
281 * Must be called with dev->lock held and irqs disabled.
285 __releases(&dev->lock) in gr_finish_request()
286 __acquires(&dev->lock) in gr_finish_request()
290 list_del_init(&req->queue); in gr_finish_request()
292 if (likely(req->req.status == -EINPROGRESS)) in gr_finish_request()
293 req->req.status = status; in gr_finish_request()
295 status = req->req.status; in gr_finish_request()
297 dev = ep->dev; in gr_finish_request()
298 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in); in gr_finish_request()
301 if (ep->is_in) { /* For OUT, req->req.actual gets updated bit by bit */ in gr_finish_request()
302 req->req.actual = req->req.length; in gr_finish_request()
303 } else if (req->oddlen && req->req.actual > req->evenlen) { in gr_finish_request()
306 * divisible by ep->ep.maxpacket and the last descriptor was in gr_finish_request()
309 char *buftail = ((char *)req->req.buf + req->evenlen); in gr_finish_request()
311 memcpy(buftail, ep->tailbuf, req->oddlen); in gr_finish_request()
313 if (req->req.actual > req->req.length) { in gr_finish_request()
315 dev_dbg(ep->dev->dev, "Overflow for ep %s\n", in gr_finish_request()
316 ep->ep.name); in gr_finish_request()
318 req->req.status = -EOVERFLOW; in gr_finish_request()
323 if (ep->is_in) in gr_finish_request()
329 /* Prevent changes to ep->queue during callback */ in gr_finish_request()
330 ep->callback = 1; in gr_finish_request()
331 if (req == dev->ep0reqo && !status) { in gr_finish_request()
332 if (req->setup) in gr_finish_request()
335 dev_err(dev->dev, in gr_finish_request()
337 } else if (req->req.complete) { in gr_finish_request()
338 spin_unlock(&dev->lock); in gr_finish_request()
340 usb_gadget_giveback_request(&ep->ep, &req->req); in gr_finish_request()
342 spin_lock(&dev->lock); in gr_finish_request()
344 ep->callback = 0; in gr_finish_request()
355 INIT_LIST_HEAD(&req->queue); in gr_alloc_request()
357 return &req->req; in gr_alloc_request()
363 * Must be called with dev->lock held and with !ep->stopped.
370 if (list_empty(&ep->queue)) { in gr_start_dma()
371 ep->dma_start = 0; in gr_start_dma()
375 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_start_dma()
378 BUG_ON(!req->curr_desc); in gr_start_dma()
382 * ep->ep.maxpacket. It could lead to buffer overruns if an unexpectedly in gr_start_dma()
386 if (!ep->is_in && req->oddlen) in gr_start_dma()
387 req->last_desc->data = ep->tailbuf_paddr; in gr_start_dma()
392 gr_write32(&ep->regs->dmaaddr, req->curr_desc->paddr); in gr_start_dma()
395 dmactrl = gr_read32(&ep->regs->dmactrl); in gr_start_dma()
396 gr_write32(&ep->regs->dmactrl, dmactrl | GR_DMACTRL_DA); in gr_start_dma()
398 ep->dma_start = 1; in gr_start_dma()
405 * Must be called with dev->lock held, irqs disabled and with !ep->stopped.
411 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_dma_advance()
413 gr_start_dma(ep); /* Regardless of ep->dma_start */ in gr_dma_advance()
420 * Must be called with dev->lock held.
426 dmactrl = gr_read32(&ep->regs->dmactrl); in gr_abort_dma()
427 gr_write32(&ep->regs->dmactrl, dmactrl | GR_DMACTRL_AD); in gr_abort_dma()
444 return -ENOMEM; in gr_add_dma_desc()
446 desc->data = data; in gr_add_dma_desc()
447 if (ep->is_in) in gr_add_dma_desc()
448 desc->ctrl = in gr_add_dma_desc()
451 desc->ctrl = GR_DESC_OUT_CTRL_IE; in gr_add_dma_desc()
453 if (!req->first_desc) { in gr_add_dma_desc()
454 req->first_desc = desc; in gr_add_dma_desc()
455 req->curr_desc = desc; in gr_add_dma_desc()
457 req->last_desc->next_desc = desc; in gr_add_dma_desc()
458 req->last_desc->next = desc->paddr; in gr_add_dma_desc()
459 req->last_desc->ctrl |= GR_DESC_OUT_CTRL_NX; in gr_add_dma_desc()
461 req->last_desc = desc; in gr_add_dma_desc()
468 * together covers req->req.length bytes of the buffer at DMA address
469 * req->req.dma for the OUT direction.
483 req->first_desc = NULL; /* Signals that no allocation is done yet */ in gr_setup_out_desc_list()
484 bytes_left = req->req.length; in gr_setup_out_desc_list()
487 dma_addr_t start = req->req.dma + bytes_used; in gr_setup_out_desc_list()
488 u16 size = min(bytes_left, ep->bytes_per_buffer); in gr_setup_out_desc_list()
490 if (size < ep->bytes_per_buffer) { in gr_setup_out_desc_list()
492 req->evenlen = req->req.length - bytes_left; in gr_setup_out_desc_list()
493 req->oddlen = size; in gr_setup_out_desc_list()
500 bytes_left -= size; in gr_setup_out_desc_list()
504 req->first_desc->ctrl |= GR_DESC_OUT_CTRL_EN; in gr_setup_out_desc_list()
509 gr_free_dma_desc_chain(ep->dev, req); in gr_setup_out_desc_list()
516 * together covers req->req.length bytes of the buffer at DMA address
517 * req->req.dma for the IN direction.
520 * this up into several payloads automatically. Moreover, ep->bytes_per_buffer
536 req->first_desc = NULL; /* Signals that no allocation is done yet */ in gr_setup_in_desc_list()
537 bytes_left = req->req.length; in gr_setup_in_desc_list()
540 dma_addr_t start = req->req.dma + bytes_used; in gr_setup_in_desc_list()
541 u16 size = min(bytes_left, ep->bytes_per_buffer); in gr_setup_in_desc_list()
547 bytes_left -= size; in gr_setup_in_desc_list()
553 * available when req->req.zero is set and the data length is even in gr_setup_in_desc_list()
554 * multiples of ep->ep.maxpacket. in gr_setup_in_desc_list()
556 if (req->req.zero && (req->req.length % ep->ep.maxpacket == 0)) { in gr_setup_in_desc_list()
566 req->last_desc->ctrl |= GR_DESC_IN_CTRL_PI; in gr_setup_in_desc_list()
571 gr_free_dma_desc_chain(ep->dev, req); in gr_setup_in_desc_list()
576 /* Must be called with dev->lock held */
579 struct gr_udc *dev = ep->dev; in gr_queue()
582 if (unlikely(!ep->ep.desc && ep->num != 0)) { in gr_queue()
583 dev_err(dev->dev, "No ep descriptor for %s\n", ep->ep.name); in gr_queue()
584 return -EINVAL; in gr_queue()
587 if (unlikely(!req->req.buf || !list_empty(&req->queue))) { in gr_queue()
588 dev_err(dev->dev, in gr_queue()
590 ep->ep.name, req->req.buf, list_empty(&req->queue)); in gr_queue()
591 return -EINVAL; in gr_queue()
594 if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) { in gr_queue()
595 dev_err(dev->dev, "-ESHUTDOWN"); in gr_queue()
596 return -ESHUTDOWN; in gr_queue()
600 if (dev->ep0state == GR_EP0_SUSPEND) { in gr_queue()
601 dev_err(dev->dev, "-EBUSY"); in gr_queue()
602 return -EBUSY; in gr_queue()
606 ret = usb_gadget_map_request(&dev->gadget, &req->req, ep->is_in); in gr_queue()
608 dev_err(dev->dev, "usb_gadget_map_request"); in gr_queue()
612 if (ep->is_in) in gr_queue()
619 req->req.status = -EINPROGRESS; in gr_queue()
620 req->req.actual = 0; in gr_queue()
621 list_add_tail(&req->queue, &ep->queue); in gr_queue()
624 if (!ep->dma_start && likely(!ep->stopped)) in gr_queue()
633 * Must be called with dev->lock held.
638 if (ep->is_in) in gr_queue_int()
644 /* ---------------------------------------------------------------------- */
650 * Must be called with dev->lock held and irqs disabled.
656 ep->stopped = 1; in gr_ep_nuke()
657 ep->dma_start = 0; in gr_ep_nuke()
660 while (!list_empty(&ep->queue)) { in gr_ep_nuke()
661 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_ep_nuke()
662 gr_finish_request(ep, req, -ESHUTDOWN); in gr_ep_nuke()
669 * Must be called with dev->lock held.
673 gr_write32(&ep->regs->epctrl, 0); in gr_ep_reset()
674 gr_write32(&ep->regs->dmactrl, 0); in gr_ep_reset()
676 ep->ep.maxpacket = MAX_CTRL_PL_SIZE; in gr_ep_reset()
677 ep->ep.desc = NULL; in gr_ep_reset()
678 ep->stopped = 1; in gr_ep_reset()
679 ep->dma_start = 0; in gr_ep_reset()
685 * Must be called with dev->lock held.
691 epctrl = gr_read32(&dev->epo[0].regs->epctrl); in gr_control_stall()
692 gr_write32(&dev->epo[0].regs->epctrl, epctrl | GR_EPCTRL_CS); in gr_control_stall()
693 epctrl = gr_read32(&dev->epi[0].regs->epctrl); in gr_control_stall()
694 gr_write32(&dev->epi[0].regs->epctrl, epctrl | GR_EPCTRL_CS); in gr_control_stall()
696 dev->ep0state = GR_EP0_STALL; in gr_control_stall()
702 * Must be called with dev->lock held.
709 if (ep->num && !ep->ep.desc) in gr_ep_halt_wedge()
710 return -EINVAL; in gr_ep_halt_wedge()
712 if (ep->num && ep->ep.desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) in gr_ep_halt_wedge()
713 return -EOPNOTSUPP; in gr_ep_halt_wedge()
716 if (!ep->num) { in gr_ep_halt_wedge()
718 /* ep0 halt from gadget - generate protocol stall */ in gr_ep_halt_wedge()
719 gr_control_stall(ep->dev); in gr_ep_halt_wedge()
720 dev_dbg(ep->dev->dev, "EP: stall ep0\n"); in gr_ep_halt_wedge()
723 return -EINVAL; in gr_ep_halt_wedge()
726 dev_dbg(ep->dev->dev, "EP: %s halt %s\n", in gr_ep_halt_wedge()
727 (halt ? (wedge ? "wedge" : "set") : "clear"), ep->ep.name); in gr_ep_halt_wedge()
729 epctrl = gr_read32(&ep->regs->epctrl); in gr_ep_halt_wedge()
732 gr_write32(&ep->regs->epctrl, epctrl | GR_EPCTRL_EH); in gr_ep_halt_wedge()
733 ep->stopped = 1; in gr_ep_halt_wedge()
735 ep->wedged = 1; in gr_ep_halt_wedge()
737 gr_write32(&ep->regs->epctrl, epctrl & ~GR_EPCTRL_EH); in gr_ep_halt_wedge()
738 ep->stopped = 0; in gr_ep_halt_wedge()
739 ep->wedged = 0; in gr_ep_halt_wedge()
742 if (!ep->dma_start) in gr_ep_halt_wedge()
749 /* Must be called with dev->lock held */
752 if (dev->ep0state != value) in gr_set_ep0state()
753 dev_vdbg(dev->dev, "STATE: ep0state=%s\n", in gr_set_ep0state()
755 dev->ep0state = value; in gr_set_ep0state()
761 * Must be called with dev->lock held.
765 gr_write32(&dev->regs->control, 0); in gr_disable_interrupts_and_pullup()
767 dev->irq_enabled = 0; in gr_disable_interrupts_and_pullup()
773 * Must be called with dev->lock held and irqs disabled.
779 list_for_each_entry(ep, &dev->ep_list, ep_list) in gr_stop_activity()
785 usb_gadget_set_state(&dev->gadget, USB_STATE_NOTATTACHED); in gr_stop_activity()
788 /* ---------------------------------------------------------------------- */
799 dev = ep->dev; in gr_ep0_testmode_complete()
801 spin_lock(&dev->lock); in gr_ep0_testmode_complete()
803 control = gr_read32(&dev->regs->control); in gr_ep0_testmode_complete()
804 control |= GR_CONTROL_TM | (dev->test_mode << GR_CONTROL_TS_POS); in gr_ep0_testmode_complete()
805 gr_write32(&dev->regs->control, control); in gr_ep0_testmode_complete()
807 spin_unlock(&dev->lock); in gr_ep0_testmode_complete()
818 * Must be called with dev->lock held.
824 u8 *reqbuf = dev->ep0reqi->req.buf; in gr_ep0_respond()
830 dev->ep0reqi->req.length = length; in gr_ep0_respond()
831 dev->ep0reqi->req.complete = complete; in gr_ep0_respond()
833 status = gr_queue_int(&dev->epi[0], dev->ep0reqi, GFP_ATOMIC); in gr_ep0_respond()
835 dev_err(dev->dev, in gr_ep0_respond()
844 * Must be called with dev->lock held.
857 * Must be called with dev->lock held.
869 * Must be called with dev->lock held.
875 control = gr_read32(&dev->regs->control) & ~GR_CONTROL_UA_MASK; in gr_set_address()
878 gr_write32(&dev->regs->control, control); in gr_set_address()
885 * Must be called with dev->lock held.
895 dev_dbg(dev->dev, "STATUS: address %d\n", value & 0xff); in gr_device_request()
898 usb_gadget_set_state(&dev->gadget, USB_STATE_ADDRESS); in gr_device_request()
900 usb_gadget_set_state(&dev->gadget, USB_STATE_DEFAULT); in gr_device_request()
905 response = 0x0001 | (dev->remote_wakeup ? 0x0002 : 0); in gr_device_request()
912 dev->remote_wakeup = 1; in gr_device_request()
919 dev->test_mode = test; in gr_device_request()
930 dev->remote_wakeup = 0; in gr_device_request()
943 * Must be called with dev->lock held.
948 if (dev->gadget.state != USB_STATE_CONFIGURED) in gr_interface_request()
949 return -1; in gr_interface_request()
977 * Must be called with dev->lock held.
988 if ((is_in && epnum >= dev->nepi) || (!is_in && epnum >= dev->nepo)) in gr_endpoint_request()
989 return -1; in gr_endpoint_request()
991 if (dev->gadget.state != USB_STATE_CONFIGURED && epnum != 0) in gr_endpoint_request()
992 return -1; in gr_endpoint_request()
994 ep = (is_in ? &dev->epi[epnum] : &dev->epo[epnum]); in gr_endpoint_request()
998 halted = gr_read32(&ep->regs->epctrl) & GR_EPCTRL_EH; in gr_endpoint_request()
1014 if (ep->wedged) in gr_endpoint_request()
1015 return -1; in gr_endpoint_request()
1027 /* Must be called with dev->lock held */
1030 int ret = gr_queue_int(&dev->epo[0], dev->ep0reqo, GFP_ATOMIC); in gr_ep0out_requeue()
1033 dev_err(dev->dev, "Could not queue ep0out setup request: %d\n", in gr_ep0out_requeue()
1040 * Must be called with dev->lock held and irqs disabled
1043 __releases(&dev->lock) in gr_ep0_setup()
1044 __acquires(&dev->lock) in gr_ep0_setup()
1060 if (dev->ep0state == GR_EP0_STALL) { in gr_ep0_setup()
1062 if (!req->req.actual) in gr_ep0_setup()
1066 if (dev->ep0state == GR_EP0_ISTATUS) { in gr_ep0_setup()
1068 if (req->req.actual > 0) in gr_ep0_setup()
1069 dev_dbg(dev->dev, in gr_ep0_setup()
1074 } else if (dev->ep0state != GR_EP0_SETUP) { in gr_ep0_setup()
1075 dev_info(dev->dev, in gr_ep0_setup()
1076 "Unexpected ep0out request at state %s - stalling\n", in gr_ep0_setup()
1077 gr_ep0state_string(dev->ep0state)); in gr_ep0_setup()
1081 } else if (!req->req.actual) { in gr_ep0_setup()
1082 dev_dbg(dev->dev, "Unexpected ZLP at state %s\n", in gr_ep0_setup()
1083 gr_ep0state_string(dev->ep0state)); in gr_ep0_setup()
1088 for (i = 0; i < req->req.actual; i++) in gr_ep0_setup()
1089 u.raw[i] = ((u8 *)req->req.buf)[i]; in gr_ep0_setup()
1126 spin_unlock(&dev->lock); in gr_ep0_setup()
1128 dev_vdbg(dev->dev, "DELEGATE\n"); in gr_ep0_setup()
1129 status = dev->driver->setup(&dev->gadget, &u.ctrl); in gr_ep0_setup()
1131 spin_lock(&dev->lock); in gr_ep0_setup()
1136 dev_vdbg(dev->dev, "STALL\n"); in gr_ep0_setup()
1143 dev_dbg(dev->dev, "STATUS: deconfigured\n"); in gr_ep0_setup()
1144 usb_gadget_set_state(&dev->gadget, USB_STATE_ADDRESS); in gr_ep0_setup()
1147 dev_dbg(dev->dev, "STATUS: configured: %d\n", value); in gr_ep0_setup()
1148 usb_gadget_set_state(&dev->gadget, in gr_ep0_setup()
1154 if (dev->ep0state == GR_EP0_ODATA) in gr_ep0_setup()
1156 else if (dev->ep0state == GR_EP0_IDATA) in gr_ep0_setup()
1165 /* ---------------------------------------------------------------------- */
1168 /* Must be called with dev->lock held and irqs disabled */
1173 dev->gadget.speed = GR_SPEED(status); in gr_vbus_connected()
1174 usb_gadget_set_state(&dev->gadget, USB_STATE_POWERED); in gr_vbus_connected()
1179 gr_write32(&dev->regs->control, control); in gr_vbus_connected()
1182 /* Must be called with dev->lock held */
1187 dev->irq_enabled = 1; in gr_enable_vbus_detect()
1189 gr_write32(&dev->regs->control, GR_CONTROL_VI); in gr_enable_vbus_detect()
1192 status = gr_read32(&dev->regs->status); in gr_enable_vbus_detect()
1197 /* Must be called with dev->lock held and irqs disabled */
1203 if (dev->driver && dev->driver->disconnect) { in gr_vbus_disconnected()
1204 spin_unlock(&dev->lock); in gr_vbus_disconnected()
1206 dev->driver->disconnect(&dev->gadget); in gr_vbus_disconnected()
1208 spin_lock(&dev->lock); in gr_vbus_disconnected()
1214 /* Must be called with dev->lock held and irqs disabled */
1219 usb_gadget_set_state(&dev->gadget, USB_STATE_DEFAULT); in gr_udc_usbreset()
1220 dev->gadget.speed = GR_SPEED(status); in gr_udc_usbreset()
1222 gr_ep_nuke(&dev->epo[0]); in gr_udc_usbreset()
1223 gr_ep_nuke(&dev->epi[0]); in gr_udc_usbreset()
1224 dev->epo[0].stopped = 0; in gr_udc_usbreset()
1225 dev->epi[0].stopped = 0; in gr_udc_usbreset()
1229 /* ---------------------------------------------------------------------- */
1235 * Must be called with dev->lock held, irqs disabled and with !ep->stopped.
1241 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_handle_in_ep()
1242 if (!req->last_desc) in gr_handle_in_ep()
1245 if (READ_ONCE(req->last_desc->ctrl) & GR_DESC_IN_CTRL_EN) in gr_handle_in_ep()
1248 if (gr_read32(&ep->regs->epstat) & (GR_EPSTAT_B1 | GR_EPSTAT_B0)) in gr_handle_in_ep()
1260 * Must be called with dev->lock held, irqs disabled and with !ep->stopped.
1268 struct gr_udc *dev = ep->dev; in gr_handle_out_ep()
1270 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_handle_out_ep()
1271 if (!req->curr_desc) in gr_handle_out_ep()
1274 ctrl = READ_ONCE(req->curr_desc->ctrl); in gr_handle_out_ep()
1280 req->req.actual += len; in gr_handle_out_ep()
1282 req->setup = 1; in gr_handle_out_ep()
1284 if (len < ep->ep.maxpacket || req->req.actual >= req->req.length) { in gr_handle_out_ep()
1285 /* Short packet or >= expected size - we are done */ in gr_handle_out_ep()
1287 if ((ep == &dev->epo[0]) && (dev->ep0state == GR_EP0_OSTATUS)) { in gr_handle_out_ep()
1292 * ep0_setup that can change dev->ep0state. in gr_handle_out_ep()
1301 req->curr_desc = req->curr_desc->next_desc; in gr_handle_out_ep()
1302 req->curr_desc->ctrl |= GR_DESC_OUT_CTRL_EN; in gr_handle_out_ep()
1304 ep_dmactrl = gr_read32(&ep->regs->dmactrl); in gr_handle_out_ep()
1305 gr_write32(&ep->regs->dmactrl, ep_dmactrl | GR_DMACTRL_DA); in gr_handle_out_ep()
1314 * Must be called with dev->lock held and irqs disabled.
1318 u32 status = gr_read32(&dev->regs->status); in gr_handle_state_changes()
1320 int powstate = !(dev->gadget.state == USB_STATE_NOTATTACHED || in gr_handle_state_changes()
1321 dev->gadget.state == USB_STATE_ATTACHED); in gr_handle_state_changes()
1325 dev_dbg(dev->dev, "STATUS: vbus valid detected\n"); in gr_handle_state_changes()
1332 dev_dbg(dev->dev, "STATUS: vbus invalid detected\n"); in gr_handle_state_changes()
1339 dev_dbg(dev->dev, "STATUS: USB reset - speed is %s\n", in gr_handle_state_changes()
1341 gr_write32(&dev->regs->status, GR_STATUS_UR); in gr_handle_state_changes()
1347 if (dev->gadget.speed != GR_SPEED(status)) { in gr_handle_state_changes()
1348 dev_dbg(dev->dev, "STATUS: USB Speed change to %s\n", in gr_handle_state_changes()
1350 dev->gadget.speed = GR_SPEED(status); in gr_handle_state_changes()
1355 if ((dev->ep0state != GR_EP0_SUSPEND) && !(status & GR_STATUS_SU)) { in gr_handle_state_changes()
1356 dev_dbg(dev->dev, "STATUS: USB suspend\n"); in gr_handle_state_changes()
1358 dev->suspended_from = dev->gadget.state; in gr_handle_state_changes()
1359 usb_gadget_set_state(&dev->gadget, USB_STATE_SUSPENDED); in gr_handle_state_changes()
1361 if ((dev->gadget.speed != USB_SPEED_UNKNOWN) && in gr_handle_state_changes()
1362 dev->driver && dev->driver->suspend) { in gr_handle_state_changes()
1363 spin_unlock(&dev->lock); in gr_handle_state_changes()
1365 dev->driver->suspend(&dev->gadget); in gr_handle_state_changes()
1367 spin_lock(&dev->lock); in gr_handle_state_changes()
1373 if ((dev->ep0state == GR_EP0_SUSPEND) && (status & GR_STATUS_SU)) { in gr_handle_state_changes()
1374 dev_dbg(dev->dev, "STATUS: USB resume\n"); in gr_handle_state_changes()
1375 if (dev->suspended_from == USB_STATE_POWERED) in gr_handle_state_changes()
1379 usb_gadget_set_state(&dev->gadget, dev->suspended_from); in gr_handle_state_changes()
1381 if ((dev->gadget.speed != USB_SPEED_UNKNOWN) && in gr_handle_state_changes()
1382 dev->driver && dev->driver->resume) { in gr_handle_state_changes()
1383 spin_unlock(&dev->lock); in gr_handle_state_changes()
1385 dev->driver->resume(&dev->gadget); in gr_handle_state_changes()
1387 spin_lock(&dev->lock); in gr_handle_state_changes()
1395 /* Non-interrupt context irq handler */
1404 spin_lock_irqsave(&dev->lock, flags); in gr_irq_handler()
1406 if (!dev->irq_enabled) in gr_irq_handler()
1414 for (i = 0; i < dev->nepi; i++) { in gr_irq_handler()
1415 ep = &dev->epi[i]; in gr_irq_handler()
1416 if (!ep->stopped && !ep->callback && !list_empty(&ep->queue)) in gr_irq_handler()
1421 for (i = 0; i < dev->nepo; i++) { in gr_irq_handler()
1422 ep = &dev->epo[i]; in gr_irq_handler()
1423 if (!ep->stopped && !ep->callback && !list_empty(&ep->queue)) in gr_irq_handler()
1435 list_for_each_entry(ep, &dev->ep_list, ep_list) { in gr_irq_handler()
1436 if (gr_read32(&ep->regs->dmactrl) & GR_DMACTRL_AE) { in gr_irq_handler()
1437 dev_err(dev->dev, in gr_irq_handler()
1439 ep->ep.name); in gr_irq_handler()
1446 spin_unlock_irqrestore(&dev->lock, flags); in gr_irq_handler()
1456 if (!dev->irq_enabled) in gr_irq()
1462 /* ---------------------------------------------------------------------- */
1478 if (!_ep || !desc || desc->bDescriptorType != USB_DT_ENDPOINT) in gr_ep_enable()
1479 return -EINVAL; in gr_ep_enable()
1481 dev = ep->dev; in gr_ep_enable()
1484 if (ep == &dev->epo[0] || ep == &dev->epi[0]) in gr_ep_enable()
1485 return -EINVAL; in gr_ep_enable()
1487 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) in gr_ep_enable()
1488 return -ESHUTDOWN; in gr_ep_enable()
1491 epctrl = gr_read32(&ep->regs->epctrl); in gr_ep_enable()
1493 return -EBUSY; in gr_ep_enable()
1496 if (!ep->is_in != !usb_endpoint_dir_in(desc)) in gr_ep_enable()
1497 return -EINVAL; in gr_ep_enable()
1499 /* Check ep num */ in gr_ep_enable()
1500 if ((!ep->is_in && ep->num >= dev->nepo) || in gr_ep_enable()
1501 (ep->is_in && ep->num >= dev->nepi)) in gr_ep_enable()
1502 return -EINVAL; in gr_ep_enable()
1513 dev_err(dev->dev, "Unknown transfer type for %s\n", in gr_ep_enable()
1514 ep->ep.name); in gr_ep_enable()
1515 return -EINVAL; in gr_ep_enable()
1519 * Bits 10-0 set the max payload. 12-11 set the number of in gr_ep_enable()
1523 nt = usb_endpoint_maxp_mult(desc) - 1; in gr_ep_enable()
1526 dev_err(dev->dev, in gr_ep_enable()
1529 return -EINVAL; in gr_ep_enable()
1531 dev_err(dev->dev, in gr_ep_enable()
1533 return -EINVAL; in gr_ep_enable()
1535 dev_err(dev->dev, "Hw buffer size %d < max payload %d * %d\n", in gr_ep_enable()
1537 return -EINVAL; in gr_ep_enable()
1539 dev_err(dev->dev, "Max payload cannot be set to 0\n"); in gr_ep_enable()
1540 return -EINVAL; in gr_ep_enable()
1541 } else if (max > ep->ep.maxpacket_limit) { in gr_ep_enable()
1542 dev_err(dev->dev, "Requested max payload %d > limit %d\n", in gr_ep_enable()
1543 max, ep->ep.maxpacket_limit); in gr_ep_enable()
1544 return -EINVAL; in gr_ep_enable()
1547 spin_lock(&ep->dev->lock); in gr_ep_enable()
1549 if (!ep->stopped) { in gr_ep_enable()
1550 spin_unlock(&ep->dev->lock); in gr_ep_enable()
1551 return -EBUSY; in gr_ep_enable()
1554 ep->stopped = 0; in gr_ep_enable()
1555 ep->wedged = 0; in gr_ep_enable()
1556 ep->ep.desc = desc; in gr_ep_enable()
1557 ep->ep.maxpacket = max; in gr_ep_enable()
1558 ep->dma_start = 0; in gr_ep_enable()
1564 * regardless of direction when using high-bandwidth mode. in gr_ep_enable()
1566 ep->bytes_per_buffer = (nt + 1) * max; in gr_ep_enable()
1567 } else if (ep->is_in) { in gr_ep_enable()
1573 ep->bytes_per_buffer = (buffer_size / max) * max; in gr_ep_enable()
1579 ep->bytes_per_buffer = max; in gr_ep_enable()
1586 if (ep->is_in) in gr_ep_enable()
1588 gr_write32(&ep->regs->epctrl, epctrl); in gr_ep_enable()
1590 gr_write32(&ep->regs->dmactrl, GR_DMACTRL_IE | GR_DMACTRL_AI); in gr_ep_enable()
1592 spin_unlock(&ep->dev->lock); in gr_ep_enable()
1594 dev_dbg(ep->dev->dev, "EP: %s enabled - %s with %d bytes/buffer\n", in gr_ep_enable()
1595 ep->ep.name, gr_modestring[mode], ep->bytes_per_buffer); in gr_ep_enable()
1607 if (!_ep || !ep->ep.desc) in gr_ep_disable()
1608 return -ENODEV; in gr_ep_disable()
1610 dev = ep->dev; in gr_ep_disable()
1613 if (ep == &dev->epo[0] || ep == &dev->epi[0]) in gr_ep_disable()
1614 return -EINVAL; in gr_ep_disable()
1616 if (dev->ep0state == GR_EP0_SUSPEND) in gr_ep_disable()
1617 return -EBUSY; in gr_ep_disable()
1619 dev_dbg(ep->dev->dev, "EP: disable %s\n", ep->ep.name); in gr_ep_disable()
1621 spin_lock_irqsave(&dev->lock, flags); in gr_ep_disable()
1625 ep->ep.desc = NULL; in gr_ep_disable()
1627 spin_unlock_irqrestore(&dev->lock, flags); in gr_ep_disable()
1645 WARN(!list_empty(&req->queue), in gr_free_request()
1661 return -EINVAL; in gr_queue_ext()
1665 dev = ep->dev; in gr_queue_ext()
1667 spin_lock(&ep->dev->lock); in gr_queue_ext()
1675 if ((ep == &dev->epi[0]) && (dev->ep0state == GR_EP0_ODATA)) { in gr_queue_ext()
1676 ep = &dev->epo[0]; in gr_queue_ext()
1677 ep->ep.driver_data = dev->epi[0].ep.driver_data; in gr_queue_ext()
1680 if (ep->is_in) in gr_queue_ext()
1685 spin_unlock(&ep->dev->lock); in gr_queue_ext()
1700 if (!_ep || !_req || (!ep->ep.desc && ep->num != 0)) in gr_dequeue()
1701 return -EINVAL; in gr_dequeue()
1702 dev = ep->dev; in gr_dequeue()
1703 if (!dev->driver) in gr_dequeue()
1704 return -ESHUTDOWN; in gr_dequeue()
1707 if (dev->ep0state == GR_EP0_SUSPEND) in gr_dequeue()
1708 return -EBUSY; in gr_dequeue()
1710 spin_lock_irqsave(&dev->lock, flags); in gr_dequeue()
1713 list_for_each_entry(iter, &ep->queue, queue) { in gr_dequeue()
1714 if (&iter->req != _req) in gr_dequeue()
1720 ret = -EINVAL; in gr_dequeue()
1724 if (list_first_entry(&ep->queue, struct gr_request, queue) == req) { in gr_dequeue()
1727 if (ep->stopped) in gr_dequeue()
1728 gr_finish_request(ep, req, -ECONNRESET); in gr_dequeue()
1730 gr_dma_advance(ep, -ECONNRESET); in gr_dequeue()
1731 } else if (!list_empty(&req->queue)) { in gr_dequeue()
1732 /* Not being processed - gr_finish_request dequeues it */ in gr_dequeue()
1733 gr_finish_request(ep, req, -ECONNRESET); in gr_dequeue()
1735 ret = -EOPNOTSUPP; in gr_dequeue()
1739 spin_unlock_irqrestore(&dev->lock, flags); in gr_dequeue()
1751 return -ENODEV; in gr_set_halt_wedge()
1754 spin_lock(&ep->dev->lock); in gr_set_halt_wedge()
1757 if (halt && ep->is_in && !list_empty(&ep->queue)) { in gr_set_halt_wedge()
1758 ret = -EAGAIN; in gr_set_halt_wedge()
1765 spin_unlock(&ep->dev->lock); in gr_set_halt_wedge()
1793 return -ENODEV; in gr_fifo_status()
1796 epstat = gr_read32(&ep->regs->epstat); in gr_fifo_status()
1816 dev_vdbg(ep->dev->dev, "EP: flush fifo %s\n", ep->ep.name); in gr_fifo_flush()
1818 spin_lock(&ep->dev->lock); in gr_fifo_flush()
1820 epctrl = gr_read32(&ep->regs->epctrl); in gr_fifo_flush()
1822 gr_write32(&ep->regs->epctrl, epctrl); in gr_fifo_flush()
1824 spin_unlock(&ep->dev->lock); in gr_fifo_flush()
1843 /* ---------------------------------------------------------------------- */
1851 return -ENODEV; in gr_get_frame()
1853 return gr_read32(&dev->regs->status) & GR_STATUS_FN_MASK; in gr_get_frame()
1861 return -ENODEV; in gr_wakeup()
1865 if (!dev->remote_wakeup) in gr_wakeup()
1866 return -EINVAL; in gr_wakeup()
1868 spin_lock(&dev->lock); in gr_wakeup()
1870 gr_write32(&dev->regs->control, in gr_wakeup()
1871 gr_read32(&dev->regs->control) | GR_CONTROL_RW); in gr_wakeup()
1873 spin_unlock(&dev->lock); in gr_wakeup()
1884 return -ENODEV; in gr_pullup()
1887 spin_lock(&dev->lock); in gr_pullup()
1889 control = gr_read32(&dev->regs->control); in gr_pullup()
1894 gr_write32(&dev->regs->control, control); in gr_pullup()
1896 spin_unlock(&dev->lock); in gr_pullup()
1906 spin_lock(&dev->lock); in gr_udc_start()
1909 driver->driver.bus = NULL; in gr_udc_start()
1910 dev->driver = driver; in gr_udc_start()
1915 spin_unlock(&dev->lock); in gr_udc_start()
1925 spin_lock_irqsave(&dev->lock, flags); in gr_udc_stop()
1927 dev->driver = NULL; in gr_udc_stop()
1930 spin_unlock_irqrestore(&dev->lock, flags); in gr_udc_stop()
1944 /* ---------------------------------------------------------------------- */
1945 /* Module probe, removal and of-matching */
1959 /* Must be called with dev->lock held */
1960 static int gr_ep_init(struct gr_udc *dev, int num, int is_in, u32 maxplimit) in gr_ep_init() argument
1968 ep = &dev->epi[num]; in gr_ep_init()
1969 ep->ep.name = inames[num]; in gr_ep_init()
1970 ep->regs = &dev->regs->epi[num]; in gr_ep_init()
1972 ep = &dev->epo[num]; in gr_ep_init()
1973 ep->ep.name = onames[num]; in gr_ep_init()
1974 ep->regs = &dev->regs->epo[num]; in gr_ep_init()
1978 ep->num = num; in gr_ep_init()
1979 ep->is_in = is_in; in gr_ep_init()
1980 ep->dev = dev; in gr_ep_init()
1981 ep->ep.ops = &gr_ep_ops; in gr_ep_init()
1982 INIT_LIST_HEAD(&ep->queue); in gr_ep_init()
1984 if (num == 0) { in gr_ep_init()
1985 _req = gr_alloc_request(&ep->ep, GFP_ATOMIC); in gr_ep_init()
1987 return -ENOMEM; in gr_ep_init()
1989 buf = devm_kzalloc(dev->dev, PAGE_SIZE, GFP_DMA | GFP_ATOMIC); in gr_ep_init()
1991 gr_free_request(&ep->ep, _req); in gr_ep_init()
1992 return -ENOMEM; in gr_ep_init()
1996 req->req.buf = buf; in gr_ep_init()
1997 req->req.length = MAX_CTRL_PL_SIZE; in gr_ep_init()
2000 dev->ep0reqi = req; /* Complete gets set as used */ in gr_ep_init()
2002 dev->ep0reqo = req; /* Completion treated separately */ in gr_ep_init()
2004 usb_ep_set_maxpacket_limit(&ep->ep, MAX_CTRL_PL_SIZE); in gr_ep_init()
2005 ep->bytes_per_buffer = MAX_CTRL_PL_SIZE; in gr_ep_init()
2007 ep->ep.caps.type_control = true; in gr_ep_init()
2009 usb_ep_set_maxpacket_limit(&ep->ep, (u16)maxplimit); in gr_ep_init()
2010 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); in gr_ep_init()
2012 ep->ep.caps.type_iso = true; in gr_ep_init()
2013 ep->ep.caps.type_bulk = true; in gr_ep_init()
2014 ep->ep.caps.type_int = true; in gr_ep_init()
2016 list_add_tail(&ep->ep_list, &dev->ep_list); in gr_ep_init()
2019 ep->ep.caps.dir_in = true; in gr_ep_init()
2021 ep->ep.caps.dir_out = true; in gr_ep_init()
2023 ep->tailbuf = dma_alloc_coherent(dev->dev, ep->ep.maxpacket_limit, in gr_ep_init()
2024 &ep->tailbuf_paddr, GFP_ATOMIC); in gr_ep_init()
2025 if (!ep->tailbuf) in gr_ep_init()
2026 return -ENOMEM; in gr_ep_init()
2031 /* Must be called with dev->lock held */
2034 struct device_node *np = dev->dev->of_node; in gr_udc_init()
2043 INIT_LIST_HEAD(&dev->gadget.ep_list); in gr_udc_init()
2044 dev->gadget.speed = USB_SPEED_UNKNOWN; in gr_udc_init()
2045 dev->gadget.ep0 = &dev->epi[0].ep; in gr_udc_init()
2047 INIT_LIST_HEAD(&dev->ep_list); in gr_udc_init()
2050 for (i = 0; i < dev->nepo; i++) { in gr_udc_init()
2058 for (i = 0; i < dev->nepi; i++) { in gr_udc_init()
2067 dev->remote_wakeup = 0; in gr_udc_init()
2072 gr_write32(&dev->epo[0].regs->epctrl, epctrl_val); in gr_udc_init()
2073 gr_write32(&dev->epi[0].regs->epctrl, epctrl_val | GR_EPCTRL_PI); in gr_udc_init()
2074 gr_write32(&dev->epo[0].regs->dmactrl, dmactrl_val); in gr_udc_init()
2075 gr_write32(&dev->epi[0].regs->dmactrl, dmactrl_val); in gr_udc_init()
2080 static void gr_ep_remove(struct gr_udc *dev, int num, int is_in) in gr_ep_remove() argument
2085 ep = &dev->epi[num]; in gr_ep_remove()
2087 ep = &dev->epo[num]; in gr_ep_remove()
2089 if (ep->tailbuf) in gr_ep_remove()
2090 dma_free_coherent(dev->dev, ep->ep.maxpacket_limit, in gr_ep_remove()
2091 ep->tailbuf, ep->tailbuf_paddr); in gr_ep_remove()
2099 if (dev->added) in gr_remove()
2100 usb_del_gadget_udc(&dev->gadget); /* Shuts everything down */ in gr_remove()
2101 if (dev->driver) in gr_remove()
2102 return -EBUSY; in gr_remove()
2105 dma_pool_destroy(dev->desc_pool); in gr_remove()
2108 gr_free_request(&dev->epi[0].ep, &dev->ep0reqi->req); in gr_remove()
2109 gr_free_request(&dev->epo[0].ep, &dev->ep0reqo->req); in gr_remove()
2111 for (i = 0; i < dev->nepo; i++) in gr_remove()
2113 for (i = 0; i < dev->nepi; i++) in gr_remove()
2120 return devm_request_threaded_irq(dev->dev, irq, gr_irq, gr_irq_handler, in gr_request_irq()
2131 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); in gr_probe()
2133 return -ENOMEM; in gr_probe()
2134 dev->dev = &pdev->dev; in gr_probe()
2140 dev->irq = platform_get_irq(pdev, 0); in gr_probe()
2141 if (dev->irq <= 0) in gr_probe()
2142 return -ENODEV; in gr_probe()
2144 /* Some core configurations has separate irqs for IN and OUT events */ in gr_probe()
2145 dev->irqi = platform_get_irq(pdev, 1); in gr_probe()
2146 if (dev->irqi > 0) { in gr_probe()
2147 dev->irqo = platform_get_irq(pdev, 2); in gr_probe()
2148 if (dev->irqo <= 0) in gr_probe()
2149 return -ENODEV; in gr_probe()
2151 dev->irqi = 0; in gr_probe()
2154 dev->gadget.name = driver_name; in gr_probe()
2155 dev->gadget.max_speed = USB_SPEED_HIGH; in gr_probe()
2156 dev->gadget.ops = &gr_ops; in gr_probe()
2158 spin_lock_init(&dev->lock); in gr_probe()
2159 dev->regs = regs; in gr_probe()
2164 status = gr_read32(&dev->regs->status); in gr_probe()
2165 dev->nepi = ((status & GR_STATUS_NEPI_MASK) >> GR_STATUS_NEPI_POS) + 1; in gr_probe()
2166 dev->nepo = ((status & GR_STATUS_NEPO_MASK) >> GR_STATUS_NEPO_POS) + 1; in gr_probe()
2169 dev_err(dev->dev, "Slave mode cores are not supported\n"); in gr_probe()
2170 return -ENODEV; in gr_probe()
2173 /* --- Effects of the following calls might need explicit cleanup --- */ in gr_probe()
2176 dev->desc_pool = dma_pool_create("desc_pool", dev->dev, in gr_probe()
2178 if (!dev->desc_pool) { in gr_probe()
2179 dev_err(dev->dev, "Could not allocate DMA pool"); in gr_probe()
2180 return -ENOMEM; in gr_probe()
2184 retval = usb_add_gadget_udc(dev->dev, &dev->gadget); in gr_probe()
2186 dev_err(dev->dev, "Could not add gadget udc"); in gr_probe()
2189 dev->added = 1; in gr_probe()
2191 spin_lock(&dev->lock); in gr_probe()
2195 spin_unlock(&dev->lock); in gr_probe()
2202 spin_unlock(&dev->lock); in gr_probe()
2206 retval = gr_request_irq(dev, dev->irq); in gr_probe()
2208 dev_err(dev->dev, "Failed to request irq %d\n", dev->irq); in gr_probe()
2212 if (dev->irqi) { in gr_probe()
2213 retval = gr_request_irq(dev, dev->irqi); in gr_probe()
2215 dev_err(dev->dev, "Failed to request irqi %d\n", in gr_probe()
2216 dev->irqi); in gr_probe()
2219 retval = gr_request_irq(dev, dev->irqo); in gr_probe()
2221 dev_err(dev->dev, "Failed to request irqo %d\n", in gr_probe()
2222 dev->irqo); in gr_probe()
2227 if (dev->irqi) in gr_probe()
2228 dev_info(dev->dev, "regs: %p, irqs %d, %d, %d\n", dev->regs, in gr_probe()
2229 dev->irq, dev->irqi, dev->irqo); in gr_probe()
2231 dev_info(dev->dev, "regs: %p, irq %d\n", dev->regs, dev->irq); in gr_probe()