1 // SPDX-License-Identifier: GPL-2.0
3 * udc.c - ChipIdea UDC driver
5 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
10 #include <linux/delay.h>
11 #include <linux/device.h>
12 #include <linux/dmapool.h>
13 #include <linux/err.h>
14 #include <linux/irqreturn.h>
15 #include <linux/kernel.h>
16 #include <linux/slab.h>
17 #include <linux/pm_runtime.h>
18 #include <linux/pinctrl/consumer.h>
19 #include <linux/usb/ch9.h>
20 #include <linux/usb/gadget.h>
21 #include <linux/usb/otg-fsm.h>
22 #include <linux/usb/chipidea.h>
31 /* control endpoint description */
32 static const struct usb_endpoint_descriptor
33 ctrl_endpt_out_desc
= {
34 .bLength
= USB_DT_ENDPOINT_SIZE
,
35 .bDescriptorType
= USB_DT_ENDPOINT
,
37 .bEndpointAddress
= USB_DIR_OUT
,
38 .bmAttributes
= USB_ENDPOINT_XFER_CONTROL
,
39 .wMaxPacketSize
= cpu_to_le16(CTRL_PAYLOAD_MAX
),
42 static const struct usb_endpoint_descriptor
43 ctrl_endpt_in_desc
= {
44 .bLength
= USB_DT_ENDPOINT_SIZE
,
45 .bDescriptorType
= USB_DT_ENDPOINT
,
47 .bEndpointAddress
= USB_DIR_IN
,
48 .bmAttributes
= USB_ENDPOINT_XFER_CONTROL
,
49 .wMaxPacketSize
= cpu_to_le16(CTRL_PAYLOAD_MAX
),
52 static int reprime_dtd(struct ci_hdrc
*ci
, struct ci_hw_ep
*hwep
,
53 struct td_node
*node
);
55 * hw_ep_bit: calculates the bit number
56 * @num: endpoint number
57 * @dir: endpoint direction
59 * This function returns bit number
61 static inline int hw_ep_bit(int num
, int dir
)
63 return num
+ ((dir
== TX
) ? 16 : 0);
66 static inline int ep_to_bit(struct ci_hdrc
*ci
, int n
)
68 int fill
= 16 - ci
->hw_ep_max
/ 2;
70 if (n
>= ci
->hw_ep_max
/ 2)
77 * hw_device_state: enables/disables interrupts (execute without interruption)
79 * @dma: 0 => disable, !0 => enable and set dma engine
81 * This function returns an error code
83 static int hw_device_state(struct ci_hdrc
*ci
, u32 dma
)
86 hw_write(ci
, OP_ENDPTLISTADDR
, ~0, dma
);
87 /* interrupt, error, port change, reset, sleep/suspend */
88 hw_write(ci
, OP_USBINTR
, ~0,
89 USBi_UI
|USBi_UEI
|USBi_PCI
|USBi_URI
);
91 hw_write(ci
, OP_USBINTR
, ~0, 0);
97 * hw_ep_flush: flush endpoint fifo (execute without interruption)
99 * @num: endpoint number
100 * @dir: endpoint direction
102 * This function returns an error code
104 static int hw_ep_flush(struct ci_hdrc
*ci
, int num
, int dir
)
106 int n
= hw_ep_bit(num
, dir
);
109 /* flush any pending transfer */
110 hw_write(ci
, OP_ENDPTFLUSH
, ~0, BIT(n
));
111 while (hw_read(ci
, OP_ENDPTFLUSH
, BIT(n
)))
113 } while (hw_read(ci
, OP_ENDPTSTAT
, BIT(n
)));
119 * hw_ep_disable: disables endpoint (execute without interruption)
120 * @ci: the controller
121 * @num: endpoint number
122 * @dir: endpoint direction
124 * This function returns an error code
126 static int hw_ep_disable(struct ci_hdrc
*ci
, int num
, int dir
)
128 hw_write(ci
, OP_ENDPTCTRL
+ num
,
129 (dir
== TX
) ? ENDPTCTRL_TXE
: ENDPTCTRL_RXE
, 0);
134 * hw_ep_enable: enables endpoint (execute without interruption)
135 * @ci: the controller
136 * @num: endpoint number
137 * @dir: endpoint direction
138 * @type: endpoint type
140 * This function returns an error code
142 static int hw_ep_enable(struct ci_hdrc
*ci
, int num
, int dir
, int type
)
147 mask
= ENDPTCTRL_TXT
; /* type */
148 data
= type
<< __ffs(mask
);
150 mask
|= ENDPTCTRL_TXS
; /* unstall */
151 mask
|= ENDPTCTRL_TXR
; /* reset data toggle */
152 data
|= ENDPTCTRL_TXR
;
153 mask
|= ENDPTCTRL_TXE
; /* enable */
154 data
|= ENDPTCTRL_TXE
;
156 mask
= ENDPTCTRL_RXT
; /* type */
157 data
= type
<< __ffs(mask
);
159 mask
|= ENDPTCTRL_RXS
; /* unstall */
160 mask
|= ENDPTCTRL_RXR
; /* reset data toggle */
161 data
|= ENDPTCTRL_RXR
;
162 mask
|= ENDPTCTRL_RXE
; /* enable */
163 data
|= ENDPTCTRL_RXE
;
165 hw_write(ci
, OP_ENDPTCTRL
+ num
, mask
, data
);
170 * hw_ep_get_halt: return endpoint halt status
171 * @ci: the controller
172 * @num: endpoint number
173 * @dir: endpoint direction
175 * This function returns 1 if endpoint halted
177 static int hw_ep_get_halt(struct ci_hdrc
*ci
, int num
, int dir
)
179 u32 mask
= (dir
== TX
) ? ENDPTCTRL_TXS
: ENDPTCTRL_RXS
;
181 return hw_read(ci
, OP_ENDPTCTRL
+ num
, mask
) ? 1 : 0;
185 * hw_ep_prime: primes endpoint (execute without interruption)
186 * @ci: the controller
187 * @num: endpoint number
188 * @dir: endpoint direction
189 * @is_ctrl: true if control endpoint
191 * This function returns an error code
193 static int hw_ep_prime(struct ci_hdrc
*ci
, int num
, int dir
, int is_ctrl
)
195 int n
= hw_ep_bit(num
, dir
);
197 /* Synchronize before ep prime */
200 if (is_ctrl
&& dir
== RX
&& hw_read(ci
, OP_ENDPTSETUPSTAT
, BIT(num
)))
203 hw_write(ci
, OP_ENDPTPRIME
, ~0, BIT(n
));
205 while (hw_read(ci
, OP_ENDPTPRIME
, BIT(n
)))
207 if (is_ctrl
&& dir
== RX
&& hw_read(ci
, OP_ENDPTSETUPSTAT
, BIT(num
)))
210 /* status shoult be tested according with manual but it doesn't work */
215 * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute
216 * without interruption)
217 * @ci: the controller
218 * @num: endpoint number
219 * @dir: endpoint direction
220 * @value: true => stall, false => unstall
222 * This function returns an error code
224 static int hw_ep_set_halt(struct ci_hdrc
*ci
, int num
, int dir
, int value
)
226 if (value
!= 0 && value
!= 1)
230 enum ci_hw_regs reg
= OP_ENDPTCTRL
+ num
;
231 u32 mask_xs
= (dir
== TX
) ? ENDPTCTRL_TXS
: ENDPTCTRL_RXS
;
232 u32 mask_xr
= (dir
== TX
) ? ENDPTCTRL_TXR
: ENDPTCTRL_RXR
;
234 /* data toggle - reserved for EP0 but it's in ESS */
235 hw_write(ci
, reg
, mask_xs
|mask_xr
,
236 value
? mask_xs
: mask_xr
);
237 } while (value
!= hw_ep_get_halt(ci
, num
, dir
));
243 * hw_port_is_high_speed: test if port is high speed
244 * @ci: the controller
246 * This function returns true if high speed port
248 static int hw_port_is_high_speed(struct ci_hdrc
*ci
)
250 return ci
->hw_bank
.lpm
? hw_read(ci
, OP_DEVLC
, DEVLC_PSPD
) :
251 hw_read(ci
, OP_PORTSC
, PORTSC_HSP
);
255 * hw_test_and_clear_complete: test & clear complete status (execute without
257 * @ci: the controller
258 * @n: endpoint number
260 * This function returns complete status
262 static int hw_test_and_clear_complete(struct ci_hdrc
*ci
, int n
)
264 n
= ep_to_bit(ci
, n
);
265 return hw_test_and_clear(ci
, OP_ENDPTCOMPLETE
, BIT(n
));
269 * hw_test_and_clear_intr_active: test & clear active interrupts (execute
270 * without interruption)
271 * @ci: the controller
273 * This function returns active interrutps
275 static u32
hw_test_and_clear_intr_active(struct ci_hdrc
*ci
)
277 u32 reg
= hw_read_intr_status(ci
) & hw_read_intr_enable(ci
);
279 hw_write(ci
, OP_USBSTS
, ~0, reg
);
284 * hw_test_and_clear_setup_guard: test & clear setup guard (execute without
286 * @ci: the controller
288 * This function returns guard value
290 static int hw_test_and_clear_setup_guard(struct ci_hdrc
*ci
)
292 return hw_test_and_write(ci
, OP_USBCMD
, USBCMD_SUTW
, 0);
296 * hw_test_and_set_setup_guard: test & set setup guard (execute without
298 * @ci: the controller
300 * This function returns guard value
302 static int hw_test_and_set_setup_guard(struct ci_hdrc
*ci
)
304 return hw_test_and_write(ci
, OP_USBCMD
, USBCMD_SUTW
, USBCMD_SUTW
);
308 * hw_usb_set_address: configures USB address (execute without interruption)
309 * @ci: the controller
310 * @value: new USB address
312 * This function explicitly sets the address, without the "USBADRA" (advance)
313 * feature, which is not supported by older versions of the controller.
315 static void hw_usb_set_address(struct ci_hdrc
*ci
, u8 value
)
317 hw_write(ci
, OP_DEVICEADDR
, DEVICEADDR_USBADR
,
318 value
<< __ffs(DEVICEADDR_USBADR
));
322 * hw_usb_reset: restart device after a bus reset (execute without
324 * @ci: the controller
326 * This function returns an error code
328 static int hw_usb_reset(struct ci_hdrc
*ci
)
330 hw_usb_set_address(ci
, 0);
332 /* ESS flushes only at end?!? */
333 hw_write(ci
, OP_ENDPTFLUSH
, ~0, ~0);
335 /* clear setup token semaphores */
336 hw_write(ci
, OP_ENDPTSETUPSTAT
, 0, 0);
338 /* clear complete status */
339 hw_write(ci
, OP_ENDPTCOMPLETE
, 0, 0);
341 /* wait until all bits cleared */
342 while (hw_read(ci
, OP_ENDPTPRIME
, ~0))
343 udelay(10); /* not RTOS friendly */
345 /* reset all endpoints ? */
347 /* reset internal status and wait for further instructions
348 no need to verify the port reset status (ESS does it) */
353 /******************************************************************************
355 *****************************************************************************/
357 static int add_td_to_list(struct ci_hw_ep
*hwep
, struct ci_hw_req
*hwreq
,
358 unsigned int length
, struct scatterlist
*s
)
362 struct td_node
*lastnode
, *node
= kzalloc(sizeof(struct td_node
),
368 node
->ptr
= dma_pool_zalloc(hwep
->td_pool
, GFP_ATOMIC
, &node
->dma
);
369 if (node
->ptr
== NULL
) {
374 node
->ptr
->token
= cpu_to_le32(length
<< __ffs(TD_TOTAL_BYTES
));
375 node
->ptr
->token
&= cpu_to_le32(TD_TOTAL_BYTES
);
376 node
->ptr
->token
|= cpu_to_le32(TD_STATUS_ACTIVE
);
377 if (hwep
->type
== USB_ENDPOINT_XFER_ISOC
&& hwep
->dir
== TX
) {
378 u32 mul
= hwreq
->req
.length
/ hwep
->ep
.maxpacket
;
380 if (hwreq
->req
.length
== 0
381 || hwreq
->req
.length
% hwep
->ep
.maxpacket
)
383 node
->ptr
->token
|= cpu_to_le32(mul
<< __ffs(TD_MULTO
));
387 temp
= (u32
) (sg_dma_address(s
) + hwreq
->req
.actual
);
388 node
->td_remaining_size
= CI_MAX_BUF_SIZE
- length
;
390 temp
= (u32
) (hwreq
->req
.dma
+ hwreq
->req
.actual
);
394 node
->ptr
->page
[0] = cpu_to_le32(temp
);
395 for (i
= 1; i
< TD_PAGE_COUNT
; i
++) {
396 u32 page
= temp
+ i
* CI_HDRC_PAGE_SIZE
;
397 page
&= ~TD_RESERVED_MASK
;
398 node
->ptr
->page
[i
] = cpu_to_le32(page
);
402 hwreq
->req
.actual
+= length
;
404 if (!list_empty(&hwreq
->tds
)) {
405 /* get the last entry */
406 lastnode
= list_entry(hwreq
->tds
.prev
,
408 lastnode
->ptr
->next
= cpu_to_le32(node
->dma
);
411 INIT_LIST_HEAD(&node
->td
);
412 list_add_tail(&node
->td
, &hwreq
->tds
);
418 * _usb_addr: calculates endpoint address from direction & number
421 static inline u8
_usb_addr(struct ci_hw_ep
*ep
)
423 return ((ep
->dir
== TX
) ? USB_ENDPOINT_DIR_MASK
: 0) | ep
->num
;
426 static int prepare_td_for_non_sg(struct ci_hw_ep
*hwep
,
427 struct ci_hw_req
*hwreq
)
429 unsigned int rest
= hwreq
->req
.length
;
430 int pages
= TD_PAGE_COUNT
;
434 ret
= add_td_to_list(hwep
, hwreq
, 0, NULL
);
440 * The first buffer could be not page aligned.
441 * In that case we have to span into one extra td.
443 if (hwreq
->req
.dma
% PAGE_SIZE
)
447 unsigned int count
= min(hwreq
->req
.length
- hwreq
->req
.actual
,
448 (unsigned int)(pages
* CI_HDRC_PAGE_SIZE
));
450 ret
= add_td_to_list(hwep
, hwreq
, count
, NULL
);
457 if (hwreq
->req
.zero
&& hwreq
->req
.length
&& hwep
->dir
== TX
458 && (hwreq
->req
.length
% hwep
->ep
.maxpacket
== 0)) {
459 ret
= add_td_to_list(hwep
, hwreq
, 0, NULL
);
467 static int prepare_td_per_sg(struct ci_hw_ep
*hwep
, struct ci_hw_req
*hwreq
,
468 struct scatterlist
*s
)
470 unsigned int rest
= sg_dma_len(s
);
473 hwreq
->req
.actual
= 0;
475 unsigned int count
= min_t(unsigned int, rest
,
478 ret
= add_td_to_list(hwep
, hwreq
, count
, s
);
488 static void ci_add_buffer_entry(struct td_node
*node
, struct scatterlist
*s
)
490 int empty_td_slot_index
= (CI_MAX_BUF_SIZE
- node
->td_remaining_size
)
495 token
= le32_to_cpu(node
->ptr
->token
) + (sg_dma_len(s
) << __ffs(TD_TOTAL_BYTES
));
496 node
->ptr
->token
= cpu_to_le32(token
);
498 for (i
= empty_td_slot_index
; i
< TD_PAGE_COUNT
; i
++) {
499 u32 page
= (u32
) sg_dma_address(s
) +
500 (i
- empty_td_slot_index
) * CI_HDRC_PAGE_SIZE
;
502 page
&= ~TD_RESERVED_MASK
;
503 node
->ptr
->page
[i
] = cpu_to_le32(page
);
507 static int prepare_td_for_sg(struct ci_hw_ep
*hwep
, struct ci_hw_req
*hwreq
)
509 struct usb_request
*req
= &hwreq
->req
;
510 struct scatterlist
*s
= req
->sg
;
512 struct td_node
*node
= NULL
;
514 if (!s
|| req
->zero
|| req
->length
== 0) {
515 dev_err(hwep
->ci
->dev
, "not supported operation for sg\n");
519 while (i
++ < req
->num_mapped_sgs
) {
520 if (sg_dma_address(s
) % PAGE_SIZE
) {
521 dev_err(hwep
->ci
->dev
, "not page aligned sg buffer\n");
525 if (node
&& (node
->td_remaining_size
>= sg_dma_len(s
))) {
526 ci_add_buffer_entry(node
, s
);
527 node
->td_remaining_size
-= sg_dma_len(s
);
529 ret
= prepare_td_per_sg(hwep
, hwreq
, s
);
533 node
= list_entry(hwreq
->tds
.prev
,
544 * _hardware_enqueue: configures a request at hardware level
548 * This function returns an error code
550 static int _hardware_enqueue(struct ci_hw_ep
*hwep
, struct ci_hw_req
*hwreq
)
552 struct ci_hdrc
*ci
= hwep
->ci
;
554 struct td_node
*firstnode
, *lastnode
;
556 /* don't queue twice */
557 if (hwreq
->req
.status
== -EALREADY
)
560 hwreq
->req
.status
= -EALREADY
;
562 ret
= usb_gadget_map_request_by_dev(ci
->dev
->parent
,
563 &hwreq
->req
, hwep
->dir
);
567 if (hwreq
->req
.num_mapped_sgs
)
568 ret
= prepare_td_for_sg(hwep
, hwreq
);
570 ret
= prepare_td_for_non_sg(hwep
, hwreq
);
575 lastnode
= list_entry(hwreq
->tds
.prev
,
578 lastnode
->ptr
->next
= cpu_to_le32(TD_TERMINATE
);
579 if (!hwreq
->req
.no_interrupt
)
580 lastnode
->ptr
->token
|= cpu_to_le32(TD_IOC
);
582 list_for_each_entry_safe(firstnode
, lastnode
, &hwreq
->tds
, td
)
583 trace_ci_prepare_td(hwep
, hwreq
, firstnode
);
585 firstnode
= list_first_entry(&hwreq
->tds
, struct td_node
, td
);
589 hwreq
->req
.actual
= 0;
590 if (!list_empty(&hwep
->qh
.queue
)) {
591 struct ci_hw_req
*hwreqprev
;
592 int n
= hw_ep_bit(hwep
->num
, hwep
->dir
);
594 struct td_node
*prevlastnode
;
595 u32 next
= firstnode
->dma
& TD_ADDR_MASK
;
597 hwreqprev
= list_entry(hwep
->qh
.queue
.prev
,
598 struct ci_hw_req
, queue
);
599 prevlastnode
= list_entry(hwreqprev
->tds
.prev
,
602 prevlastnode
->ptr
->next
= cpu_to_le32(next
);
605 if (ci
->rev
== CI_REVISION_22
) {
606 if (!hw_read(ci
, OP_ENDPTSTAT
, BIT(n
)))
607 reprime_dtd(ci
, hwep
, prevlastnode
);
610 if (hw_read(ci
, OP_ENDPTPRIME
, BIT(n
)))
613 hw_write(ci
, OP_USBCMD
, USBCMD_ATDTW
, USBCMD_ATDTW
);
614 tmp_stat
= hw_read(ci
, OP_ENDPTSTAT
, BIT(n
));
615 } while (!hw_read(ci
, OP_USBCMD
, USBCMD_ATDTW
));
616 hw_write(ci
, OP_USBCMD
, USBCMD_ATDTW
, 0);
621 /* QH configuration */
622 hwep
->qh
.ptr
->td
.next
= cpu_to_le32(firstnode
->dma
);
623 hwep
->qh
.ptr
->td
.token
&=
624 cpu_to_le32(~(TD_STATUS_HALTED
|TD_STATUS_ACTIVE
));
626 if (hwep
->type
== USB_ENDPOINT_XFER_ISOC
&& hwep
->dir
== RX
) {
627 u32 mul
= hwreq
->req
.length
/ hwep
->ep
.maxpacket
;
629 if (hwreq
->req
.length
== 0
630 || hwreq
->req
.length
% hwep
->ep
.maxpacket
)
632 hwep
->qh
.ptr
->cap
|= cpu_to_le32(mul
<< __ffs(QH_MULT
));
635 ret
= hw_ep_prime(ci
, hwep
->num
, hwep
->dir
,
636 hwep
->type
== USB_ENDPOINT_XFER_CONTROL
);
642 * free_pending_td: remove a pending request for the endpoint
645 static void free_pending_td(struct ci_hw_ep
*hwep
)
647 struct td_node
*pending
= hwep
->pending_td
;
649 dma_pool_free(hwep
->td_pool
, pending
->ptr
, pending
->dma
);
650 hwep
->pending_td
= NULL
;
654 static int reprime_dtd(struct ci_hdrc
*ci
, struct ci_hw_ep
*hwep
,
655 struct td_node
*node
)
657 hwep
->qh
.ptr
->td
.next
= cpu_to_le32(node
->dma
);
658 hwep
->qh
.ptr
->td
.token
&=
659 cpu_to_le32(~(TD_STATUS_HALTED
| TD_STATUS_ACTIVE
));
661 return hw_ep_prime(ci
, hwep
->num
, hwep
->dir
,
662 hwep
->type
== USB_ENDPOINT_XFER_CONTROL
);
666 * _hardware_dequeue: handles a request at hardware level
670 * This function returns an error code
672 static int _hardware_dequeue(struct ci_hw_ep
*hwep
, struct ci_hw_req
*hwreq
)
675 struct td_node
*node
, *tmpnode
;
676 unsigned remaining_length
;
677 unsigned actual
= hwreq
->req
.length
;
678 struct ci_hdrc
*ci
= hwep
->ci
;
680 if (hwreq
->req
.status
!= -EALREADY
)
683 hwreq
->req
.status
= 0;
685 list_for_each_entry_safe(node
, tmpnode
, &hwreq
->tds
, td
) {
686 tmptoken
= le32_to_cpu(node
->ptr
->token
);
687 trace_ci_complete_td(hwep
, hwreq
, node
);
688 if ((TD_STATUS_ACTIVE
& tmptoken
) != 0) {
689 int n
= hw_ep_bit(hwep
->num
, hwep
->dir
);
691 if (ci
->rev
== CI_REVISION_24
||
692 ci
->rev
== CI_REVISION_22
)
693 if (!hw_read(ci
, OP_ENDPTSTAT
, BIT(n
)))
694 reprime_dtd(ci
, hwep
, node
);
695 hwreq
->req
.status
= -EALREADY
;
699 remaining_length
= (tmptoken
& TD_TOTAL_BYTES
);
700 remaining_length
>>= __ffs(TD_TOTAL_BYTES
);
701 actual
-= remaining_length
;
703 hwreq
->req
.status
= tmptoken
& TD_STATUS
;
704 if ((TD_STATUS_HALTED
& hwreq
->req
.status
)) {
705 hwreq
->req
.status
= -EPIPE
;
707 } else if ((TD_STATUS_DT_ERR
& hwreq
->req
.status
)) {
708 hwreq
->req
.status
= -EPROTO
;
710 } else if ((TD_STATUS_TR_ERR
& hwreq
->req
.status
)) {
711 hwreq
->req
.status
= -EILSEQ
;
715 if (remaining_length
) {
716 if (hwep
->dir
== TX
) {
717 hwreq
->req
.status
= -EPROTO
;
722 * As the hardware could still address the freed td
723 * which will run the udc unusable, the cleanup of the
724 * td has to be delayed by one.
726 if (hwep
->pending_td
)
727 free_pending_td(hwep
);
729 hwep
->pending_td
= node
;
730 list_del_init(&node
->td
);
733 usb_gadget_unmap_request_by_dev(hwep
->ci
->dev
->parent
,
734 &hwreq
->req
, hwep
->dir
);
736 hwreq
->req
.actual
+= actual
;
738 if (hwreq
->req
.status
)
739 return hwreq
->req
.status
;
741 return hwreq
->req
.actual
;
745 * _ep_nuke: dequeues all endpoint requests
748 * This function returns an error code
749 * Caller must hold lock
751 static int _ep_nuke(struct ci_hw_ep
*hwep
)
752 __releases(hwep
->lock
)
753 __acquires(hwep
->lock
)
755 struct td_node
*node
, *tmpnode
;
759 hw_ep_flush(hwep
->ci
, hwep
->num
, hwep
->dir
);
761 while (!list_empty(&hwep
->qh
.queue
)) {
763 /* pop oldest request */
764 struct ci_hw_req
*hwreq
= list_entry(hwep
->qh
.queue
.next
,
765 struct ci_hw_req
, queue
);
767 list_for_each_entry_safe(node
, tmpnode
, &hwreq
->tds
, td
) {
768 dma_pool_free(hwep
->td_pool
, node
->ptr
, node
->dma
);
769 list_del_init(&node
->td
);
774 list_del_init(&hwreq
->queue
);
775 hwreq
->req
.status
= -ESHUTDOWN
;
777 if (hwreq
->req
.complete
!= NULL
) {
778 spin_unlock(hwep
->lock
);
779 usb_gadget_giveback_request(&hwep
->ep
, &hwreq
->req
);
780 spin_lock(hwep
->lock
);
784 if (hwep
->pending_td
)
785 free_pending_td(hwep
);
790 static int _ep_set_halt(struct usb_ep
*ep
, int value
, bool check_transfer
)
792 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
793 int direction
, retval
= 0;
796 if (ep
== NULL
|| hwep
->ep
.desc
== NULL
)
799 if (usb_endpoint_xfer_isoc(hwep
->ep
.desc
))
802 spin_lock_irqsave(hwep
->lock
, flags
);
804 if (value
&& hwep
->dir
== TX
&& check_transfer
&&
805 !list_empty(&hwep
->qh
.queue
) &&
806 !usb_endpoint_xfer_control(hwep
->ep
.desc
)) {
807 spin_unlock_irqrestore(hwep
->lock
, flags
);
811 direction
= hwep
->dir
;
813 retval
|= hw_ep_set_halt(hwep
->ci
, hwep
->num
, hwep
->dir
, value
);
818 if (hwep
->type
== USB_ENDPOINT_XFER_CONTROL
)
819 hwep
->dir
= (hwep
->dir
== TX
) ? RX
: TX
;
821 } while (hwep
->dir
!= direction
);
823 spin_unlock_irqrestore(hwep
->lock
, flags
);
829 * _gadget_stop_activity: stops all USB activity, flushes & disables all endpts
832 * This function returns an error code
834 static int _gadget_stop_activity(struct usb_gadget
*gadget
)
837 struct ci_hdrc
*ci
= container_of(gadget
, struct ci_hdrc
, gadget
);
840 /* flush all endpoints */
841 gadget_for_each_ep(ep
, gadget
) {
842 usb_ep_fifo_flush(ep
);
844 usb_ep_fifo_flush(&ci
->ep0out
->ep
);
845 usb_ep_fifo_flush(&ci
->ep0in
->ep
);
847 /* make sure to disable all endpoints */
848 gadget_for_each_ep(ep
, gadget
) {
852 if (ci
->status
!= NULL
) {
853 usb_ep_free_request(&ci
->ep0in
->ep
, ci
->status
);
857 spin_lock_irqsave(&ci
->lock
, flags
);
858 ci
->gadget
.speed
= USB_SPEED_UNKNOWN
;
859 ci
->remote_wakeup
= 0;
861 spin_unlock_irqrestore(&ci
->lock
, flags
);
866 /******************************************************************************
868 *****************************************************************************/
870 * isr_reset_handler: USB reset interrupt handler
873 * This function resets USB engine after a bus reset occurred
875 static void isr_reset_handler(struct ci_hdrc
*ci
)
882 spin_unlock(&ci
->lock
);
883 if (ci
->gadget
.speed
!= USB_SPEED_UNKNOWN
)
884 usb_gadget_udc_reset(&ci
->gadget
, ci
->driver
);
886 retval
= _gadget_stop_activity(&ci
->gadget
);
890 retval
= hw_usb_reset(ci
);
895 hw_write(ci
, OP_USBSTS
, USBi_SLI
, USBi_SLI
);
896 intr
= hw_read(ci
, OP_USBINTR
, ~0);
897 hw_write(ci
, OP_USBINTR
, ~0, intr
| USBi_SLI
);
899 ci
->status
= usb_ep_alloc_request(&ci
->ep0in
->ep
, GFP_ATOMIC
);
900 if (ci
->status
== NULL
)
904 spin_lock(&ci
->lock
);
907 dev_err(ci
->dev
, "error: %i\n", retval
);
911 * isr_get_status_complete: get_status request complete function
913 * @req: request handled
915 * Caller must release lock
917 static void isr_get_status_complete(struct usb_ep
*ep
, struct usb_request
*req
)
919 if (ep
== NULL
|| req
== NULL
)
923 usb_ep_free_request(ep
, req
);
927 * _ep_queue: queues (submits) an I/O request to an endpoint
930 * @gfp_flags: GFP flags (not used)
932 * Caller must hold lock
933 * This function returns an error code
935 static int _ep_queue(struct usb_ep
*ep
, struct usb_request
*req
,
936 gfp_t __maybe_unused gfp_flags
)
938 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
939 struct ci_hw_req
*hwreq
= container_of(req
, struct ci_hw_req
, req
);
940 struct ci_hdrc
*ci
= hwep
->ci
;
943 if (ep
== NULL
|| req
== NULL
|| hwep
->ep
.desc
== NULL
)
946 if (hwep
->type
== USB_ENDPOINT_XFER_CONTROL
) {
948 hwep
= (ci
->ep0_dir
== RX
) ?
949 ci
->ep0out
: ci
->ep0in
;
950 if (!list_empty(&hwep
->qh
.queue
)) {
952 dev_warn(hwep
->ci
->dev
, "endpoint ctrl %X nuked\n",
957 if (usb_endpoint_xfer_isoc(hwep
->ep
.desc
) &&
958 hwreq
->req
.length
> hwep
->ep
.mult
* hwep
->ep
.maxpacket
) {
959 dev_err(hwep
->ci
->dev
, "request length too big for isochronous\n");
963 /* first nuke then test link, e.g. previous status has not sent */
964 if (!list_empty(&hwreq
->queue
)) {
965 dev_err(hwep
->ci
->dev
, "request already in queue\n");
970 hwreq
->req
.status
= -EINPROGRESS
;
971 hwreq
->req
.actual
= 0;
973 retval
= _hardware_enqueue(hwep
, hwreq
);
975 if (retval
== -EALREADY
)
978 list_add_tail(&hwreq
->queue
, &hwep
->qh
.queue
);
984 * isr_get_status_response: get_status request response
986 * @setup: setup request packet
988 * This function returns an error code
990 static int isr_get_status_response(struct ci_hdrc
*ci
,
991 struct usb_ctrlrequest
*setup
)
992 __releases(hwep
->lock
)
993 __acquires(hwep
->lock
)
995 struct ci_hw_ep
*hwep
= ci
->ep0in
;
996 struct usb_request
*req
= NULL
;
997 gfp_t gfp_flags
= GFP_ATOMIC
;
998 int dir
, num
, retval
;
1000 if (hwep
== NULL
|| setup
== NULL
)
1003 spin_unlock(hwep
->lock
);
1004 req
= usb_ep_alloc_request(&hwep
->ep
, gfp_flags
);
1005 spin_lock(hwep
->lock
);
1009 req
->complete
= isr_get_status_complete
;
1011 req
->buf
= kzalloc(req
->length
, gfp_flags
);
1012 if (req
->buf
== NULL
) {
1017 if ((setup
->bRequestType
& USB_RECIP_MASK
) == USB_RECIP_DEVICE
) {
1018 *(u16
*)req
->buf
= (ci
->remote_wakeup
<< 1) |
1019 ci
->gadget
.is_selfpowered
;
1020 } else if ((setup
->bRequestType
& USB_RECIP_MASK
) \
1021 == USB_RECIP_ENDPOINT
) {
1022 dir
= (le16_to_cpu(setup
->wIndex
) & USB_ENDPOINT_DIR_MASK
) ?
1024 num
= le16_to_cpu(setup
->wIndex
) & USB_ENDPOINT_NUMBER_MASK
;
1025 *(u16
*)req
->buf
= hw_ep_get_halt(ci
, num
, dir
);
1027 /* else do nothing; reserved for future use */
1029 retval
= _ep_queue(&hwep
->ep
, req
, gfp_flags
);
1038 spin_unlock(hwep
->lock
);
1039 usb_ep_free_request(&hwep
->ep
, req
);
1040 spin_lock(hwep
->lock
);
1045 * isr_setup_status_complete: setup_status request complete function
1047 * @req: request handled
1049 * Caller must release lock. Put the port in test mode if test mode
1050 * feature is selected.
1053 isr_setup_status_complete(struct usb_ep
*ep
, struct usb_request
*req
)
1055 struct ci_hdrc
*ci
= req
->context
;
1056 unsigned long flags
;
1058 if (req
->status
< 0)
1062 hw_usb_set_address(ci
, ci
->address
);
1063 ci
->setaddr
= false;
1065 usb_gadget_set_state(&ci
->gadget
, USB_STATE_ADDRESS
);
1068 spin_lock_irqsave(&ci
->lock
, flags
);
1070 hw_port_test_set(ci
, ci
->test_mode
);
1071 spin_unlock_irqrestore(&ci
->lock
, flags
);
1075 * isr_setup_status_phase: queues the status phase of a setup transation
1078 * This function returns an error code
1080 static int isr_setup_status_phase(struct ci_hdrc
*ci
)
1082 struct ci_hw_ep
*hwep
;
1085 * Unexpected USB controller behavior, caused by bad signal integrity
1086 * or ground reference problems, can lead to isr_setup_status_phase
1087 * being called with ci->status equal to NULL.
1088 * If this situation occurs, you should review your USB hardware design.
1090 if (WARN_ON_ONCE(!ci
->status
))
1093 hwep
= (ci
->ep0_dir
== TX
) ? ci
->ep0out
: ci
->ep0in
;
1094 ci
->status
->context
= ci
;
1095 ci
->status
->complete
= isr_setup_status_complete
;
1097 return _ep_queue(&hwep
->ep
, ci
->status
, GFP_ATOMIC
);
1101 * isr_tr_complete_low: transaction complete low level handler
1104 * This function returns an error code
1105 * Caller must hold lock
1107 static int isr_tr_complete_low(struct ci_hw_ep
*hwep
)
1108 __releases(hwep
->lock
)
1109 __acquires(hwep
->lock
)
1111 struct ci_hw_req
*hwreq
, *hwreqtemp
;
1112 struct ci_hw_ep
*hweptemp
= hwep
;
1115 list_for_each_entry_safe(hwreq
, hwreqtemp
, &hwep
->qh
.queue
,
1117 retval
= _hardware_dequeue(hwep
, hwreq
);
1120 list_del_init(&hwreq
->queue
);
1121 if (hwreq
->req
.complete
!= NULL
) {
1122 spin_unlock(hwep
->lock
);
1123 if ((hwep
->type
== USB_ENDPOINT_XFER_CONTROL
) &&
1125 hweptemp
= hwep
->ci
->ep0in
;
1126 usb_gadget_giveback_request(&hweptemp
->ep
, &hwreq
->req
);
1127 spin_lock(hwep
->lock
);
1131 if (retval
== -EBUSY
)
1137 static int otg_a_alt_hnp_support(struct ci_hdrc
*ci
)
1139 dev_warn(&ci
->gadget
.dev
,
1140 "connect the device to an alternate port if you want HNP\n");
1141 return isr_setup_status_phase(ci
);
1145 * isr_setup_packet_handler: setup packet handler
1146 * @ci: UDC descriptor
1148 * This function handles setup packet
1150 static void isr_setup_packet_handler(struct ci_hdrc
*ci
)
1151 __releases(ci
->lock
)
1152 __acquires(ci
->lock
)
1154 struct ci_hw_ep
*hwep
= &ci
->ci_hw_ep
[0];
1155 struct usb_ctrlrequest req
;
1156 int type
, num
, dir
, err
= -EINVAL
;
1160 * Flush data and handshake transactions of previous
1163 _ep_nuke(ci
->ep0out
);
1164 _ep_nuke(ci
->ep0in
);
1166 /* read_setup_packet */
1168 hw_test_and_set_setup_guard(ci
);
1169 memcpy(&req
, &hwep
->qh
.ptr
->setup
, sizeof(req
));
1170 } while (!hw_test_and_clear_setup_guard(ci
));
1172 type
= req
.bRequestType
;
1174 ci
->ep0_dir
= (type
& USB_DIR_IN
) ? TX
: RX
;
1176 switch (req
.bRequest
) {
1177 case USB_REQ_CLEAR_FEATURE
:
1178 if (type
== (USB_DIR_OUT
|USB_RECIP_ENDPOINT
) &&
1179 le16_to_cpu(req
.wValue
) ==
1180 USB_ENDPOINT_HALT
) {
1181 if (req
.wLength
!= 0)
1183 num
= le16_to_cpu(req
.wIndex
);
1184 dir
= (num
& USB_ENDPOINT_DIR_MASK
) ? TX
: RX
;
1185 num
&= USB_ENDPOINT_NUMBER_MASK
;
1187 num
+= ci
->hw_ep_max
/ 2;
1188 if (!ci
->ci_hw_ep
[num
].wedge
) {
1189 spin_unlock(&ci
->lock
);
1190 err
= usb_ep_clear_halt(
1191 &ci
->ci_hw_ep
[num
].ep
);
1192 spin_lock(&ci
->lock
);
1196 err
= isr_setup_status_phase(ci
);
1197 } else if (type
== (USB_DIR_OUT
|USB_RECIP_DEVICE
) &&
1198 le16_to_cpu(req
.wValue
) ==
1199 USB_DEVICE_REMOTE_WAKEUP
) {
1200 if (req
.wLength
!= 0)
1202 ci
->remote_wakeup
= 0;
1203 err
= isr_setup_status_phase(ci
);
1208 case USB_REQ_GET_STATUS
:
1209 if ((type
!= (USB_DIR_IN
|USB_RECIP_DEVICE
) ||
1210 le16_to_cpu(req
.wIndex
) == OTG_STS_SELECTOR
) &&
1211 type
!= (USB_DIR_IN
|USB_RECIP_ENDPOINT
) &&
1212 type
!= (USB_DIR_IN
|USB_RECIP_INTERFACE
))
1214 if (le16_to_cpu(req
.wLength
) != 2 ||
1215 le16_to_cpu(req
.wValue
) != 0)
1217 err
= isr_get_status_response(ci
, &req
);
1219 case USB_REQ_SET_ADDRESS
:
1220 if (type
!= (USB_DIR_OUT
|USB_RECIP_DEVICE
))
1222 if (le16_to_cpu(req
.wLength
) != 0 ||
1223 le16_to_cpu(req
.wIndex
) != 0)
1225 ci
->address
= (u8
)le16_to_cpu(req
.wValue
);
1227 err
= isr_setup_status_phase(ci
);
1229 case USB_REQ_SET_FEATURE
:
1230 if (type
== (USB_DIR_OUT
|USB_RECIP_ENDPOINT
) &&
1231 le16_to_cpu(req
.wValue
) ==
1232 USB_ENDPOINT_HALT
) {
1233 if (req
.wLength
!= 0)
1235 num
= le16_to_cpu(req
.wIndex
);
1236 dir
= (num
& USB_ENDPOINT_DIR_MASK
) ? TX
: RX
;
1237 num
&= USB_ENDPOINT_NUMBER_MASK
;
1239 num
+= ci
->hw_ep_max
/ 2;
1241 spin_unlock(&ci
->lock
);
1242 err
= _ep_set_halt(&ci
->ci_hw_ep
[num
].ep
, 1, false);
1243 spin_lock(&ci
->lock
);
1245 isr_setup_status_phase(ci
);
1246 } else if (type
== (USB_DIR_OUT
|USB_RECIP_DEVICE
)) {
1247 if (req
.wLength
!= 0)
1249 switch (le16_to_cpu(req
.wValue
)) {
1250 case USB_DEVICE_REMOTE_WAKEUP
:
1251 ci
->remote_wakeup
= 1;
1252 err
= isr_setup_status_phase(ci
);
1254 case USB_DEVICE_TEST_MODE
:
1255 tmode
= le16_to_cpu(req
.wIndex
) >> 8;
1259 case USB_TEST_SE0_NAK
:
1260 case USB_TEST_PACKET
:
1261 case USB_TEST_FORCE_ENABLE
:
1262 ci
->test_mode
= tmode
;
1263 err
= isr_setup_status_phase(
1270 case USB_DEVICE_B_HNP_ENABLE
:
1271 if (ci_otg_is_fsm_mode(ci
)) {
1272 ci
->gadget
.b_hnp_enable
= 1;
1273 err
= isr_setup_status_phase(
1277 case USB_DEVICE_A_ALT_HNP_SUPPORT
:
1278 if (ci_otg_is_fsm_mode(ci
))
1279 err
= otg_a_alt_hnp_support(ci
);
1281 case USB_DEVICE_A_HNP_SUPPORT
:
1282 if (ci_otg_is_fsm_mode(ci
)) {
1283 ci
->gadget
.a_hnp_support
= 1;
1284 err
= isr_setup_status_phase(
1297 if (req
.wLength
== 0) /* no data phase */
1300 spin_unlock(&ci
->lock
);
1301 err
= ci
->driver
->setup(&ci
->gadget
, &req
);
1302 spin_lock(&ci
->lock
);
1307 spin_unlock(&ci
->lock
);
1308 if (_ep_set_halt(&hwep
->ep
, 1, false))
1309 dev_err(ci
->dev
, "error: _ep_set_halt\n");
1310 spin_lock(&ci
->lock
);
1315 * isr_tr_complete_handler: transaction complete interrupt handler
1316 * @ci: UDC descriptor
1318 * This function handles traffic events
1320 static void isr_tr_complete_handler(struct ci_hdrc
*ci
)
1321 __releases(ci
->lock
)
1322 __acquires(ci
->lock
)
1327 for (i
= 0; i
< ci
->hw_ep_max
; i
++) {
1328 struct ci_hw_ep
*hwep
= &ci
->ci_hw_ep
[i
];
1330 if (hwep
->ep
.desc
== NULL
)
1331 continue; /* not configured */
1333 if (hw_test_and_clear_complete(ci
, i
)) {
1334 err
= isr_tr_complete_low(hwep
);
1335 if (hwep
->type
== USB_ENDPOINT_XFER_CONTROL
) {
1336 if (err
> 0) /* needs status phase */
1337 err
= isr_setup_status_phase(ci
);
1339 spin_unlock(&ci
->lock
);
1340 if (_ep_set_halt(&hwep
->ep
, 1, false))
1342 "error: _ep_set_halt\n");
1343 spin_lock(&ci
->lock
);
1348 /* Only handle setup packet below */
1350 hw_test_and_clear(ci
, OP_ENDPTSETUPSTAT
, BIT(0)))
1351 isr_setup_packet_handler(ci
);
1355 /******************************************************************************
1357 *****************************************************************************/
1359 * ep_enable: configure endpoint, making it usable
1361 * Check usb_ep_enable() at "usb_gadget.h" for details
1363 static int ep_enable(struct usb_ep
*ep
,
1364 const struct usb_endpoint_descriptor
*desc
)
1366 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1368 unsigned long flags
;
1371 if (ep
== NULL
|| desc
== NULL
)
1374 spin_lock_irqsave(hwep
->lock
, flags
);
1376 /* only internal SW should enable ctrl endpts */
1378 if (!list_empty(&hwep
->qh
.queue
)) {
1379 dev_warn(hwep
->ci
->dev
, "enabling a non-empty endpoint!\n");
1380 spin_unlock_irqrestore(hwep
->lock
, flags
);
1384 hwep
->ep
.desc
= desc
;
1386 hwep
->dir
= usb_endpoint_dir_in(desc
) ? TX
: RX
;
1387 hwep
->num
= usb_endpoint_num(desc
);
1388 hwep
->type
= usb_endpoint_type(desc
);
1390 hwep
->ep
.maxpacket
= usb_endpoint_maxp(desc
);
1391 hwep
->ep
.mult
= usb_endpoint_maxp_mult(desc
);
1393 if (hwep
->type
== USB_ENDPOINT_XFER_CONTROL
)
1397 cap
|= (hwep
->ep
.maxpacket
<< __ffs(QH_MAX_PKT
)) & QH_MAX_PKT
;
1399 * For ISO-TX, we set mult at QH as the largest value, and use
1400 * MultO at TD as real mult value.
1402 if (hwep
->type
== USB_ENDPOINT_XFER_ISOC
&& hwep
->dir
== TX
)
1403 cap
|= 3 << __ffs(QH_MULT
);
1405 hwep
->qh
.ptr
->cap
= cpu_to_le32(cap
);
1407 hwep
->qh
.ptr
->td
.next
|= cpu_to_le32(TD_TERMINATE
); /* needed? */
1409 if (hwep
->num
!= 0 && hwep
->type
== USB_ENDPOINT_XFER_CONTROL
) {
1410 dev_err(hwep
->ci
->dev
, "Set control xfer at non-ep0\n");
1415 * Enable endpoints in the HW other than ep0 as ep0
1419 retval
|= hw_ep_enable(hwep
->ci
, hwep
->num
, hwep
->dir
,
1422 spin_unlock_irqrestore(hwep
->lock
, flags
);
1427 * ep_disable: endpoint is no longer usable
1429 * Check usb_ep_disable() at "usb_gadget.h" for details
1431 static int ep_disable(struct usb_ep
*ep
)
1433 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1434 int direction
, retval
= 0;
1435 unsigned long flags
;
1439 else if (hwep
->ep
.desc
== NULL
)
1442 spin_lock_irqsave(hwep
->lock
, flags
);
1443 if (hwep
->ci
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
1444 spin_unlock_irqrestore(hwep
->lock
, flags
);
1448 /* only internal SW should disable ctrl endpts */
1450 direction
= hwep
->dir
;
1452 retval
|= _ep_nuke(hwep
);
1453 retval
|= hw_ep_disable(hwep
->ci
, hwep
->num
, hwep
->dir
);
1455 if (hwep
->type
== USB_ENDPOINT_XFER_CONTROL
)
1456 hwep
->dir
= (hwep
->dir
== TX
) ? RX
: TX
;
1458 } while (hwep
->dir
!= direction
);
1460 hwep
->ep
.desc
= NULL
;
1462 spin_unlock_irqrestore(hwep
->lock
, flags
);
1467 * ep_alloc_request: allocate a request object to use with this endpoint
1469 * Check usb_ep_alloc_request() at "usb_gadget.h" for details
1471 static struct usb_request
*ep_alloc_request(struct usb_ep
*ep
, gfp_t gfp_flags
)
1473 struct ci_hw_req
*hwreq
;
1478 hwreq
= kzalloc(sizeof(struct ci_hw_req
), gfp_flags
);
1479 if (hwreq
!= NULL
) {
1480 INIT_LIST_HEAD(&hwreq
->queue
);
1481 INIT_LIST_HEAD(&hwreq
->tds
);
1484 return (hwreq
== NULL
) ? NULL
: &hwreq
->req
;
1488 * ep_free_request: frees a request object
1490 * Check usb_ep_free_request() at "usb_gadget.h" for details
1492 static void ep_free_request(struct usb_ep
*ep
, struct usb_request
*req
)
1494 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1495 struct ci_hw_req
*hwreq
= container_of(req
, struct ci_hw_req
, req
);
1496 struct td_node
*node
, *tmpnode
;
1497 unsigned long flags
;
1499 if (ep
== NULL
|| req
== NULL
) {
1501 } else if (!list_empty(&hwreq
->queue
)) {
1502 dev_err(hwep
->ci
->dev
, "freeing queued request\n");
1506 spin_lock_irqsave(hwep
->lock
, flags
);
1508 list_for_each_entry_safe(node
, tmpnode
, &hwreq
->tds
, td
) {
1509 dma_pool_free(hwep
->td_pool
, node
->ptr
, node
->dma
);
1510 list_del_init(&node
->td
);
1517 spin_unlock_irqrestore(hwep
->lock
, flags
);
1521 * ep_queue: queues (submits) an I/O request to an endpoint
1523 * Check usb_ep_queue()* at usb_gadget.h" for details
1525 static int ep_queue(struct usb_ep
*ep
, struct usb_request
*req
,
1526 gfp_t __maybe_unused gfp_flags
)
1528 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1530 unsigned long flags
;
1532 if (ep
== NULL
|| req
== NULL
|| hwep
->ep
.desc
== NULL
)
1535 spin_lock_irqsave(hwep
->lock
, flags
);
1536 if (hwep
->ci
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
1537 spin_unlock_irqrestore(hwep
->lock
, flags
);
1540 retval
= _ep_queue(ep
, req
, gfp_flags
);
1541 spin_unlock_irqrestore(hwep
->lock
, flags
);
1546 * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint
1548 * Check usb_ep_dequeue() at "usb_gadget.h" for details
1550 static int ep_dequeue(struct usb_ep
*ep
, struct usb_request
*req
)
1552 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1553 struct ci_hw_req
*hwreq
= container_of(req
, struct ci_hw_req
, req
);
1554 unsigned long flags
;
1555 struct td_node
*node
, *tmpnode
;
1557 if (ep
== NULL
|| req
== NULL
|| hwreq
->req
.status
!= -EALREADY
||
1558 hwep
->ep
.desc
== NULL
|| list_empty(&hwreq
->queue
) ||
1559 list_empty(&hwep
->qh
.queue
))
1562 spin_lock_irqsave(hwep
->lock
, flags
);
1563 if (hwep
->ci
->gadget
.speed
!= USB_SPEED_UNKNOWN
)
1564 hw_ep_flush(hwep
->ci
, hwep
->num
, hwep
->dir
);
1566 list_for_each_entry_safe(node
, tmpnode
, &hwreq
->tds
, td
) {
1567 dma_pool_free(hwep
->td_pool
, node
->ptr
, node
->dma
);
1568 list_del(&node
->td
);
1573 list_del_init(&hwreq
->queue
);
1575 usb_gadget_unmap_request(&hwep
->ci
->gadget
, req
, hwep
->dir
);
1577 req
->status
= -ECONNRESET
;
1579 if (hwreq
->req
.complete
!= NULL
) {
1580 spin_unlock(hwep
->lock
);
1581 usb_gadget_giveback_request(&hwep
->ep
, &hwreq
->req
);
1582 spin_lock(hwep
->lock
);
1585 spin_unlock_irqrestore(hwep
->lock
, flags
);
1590 * ep_set_halt: sets the endpoint halt feature
1592 * Check usb_ep_set_halt() at "usb_gadget.h" for details
1594 static int ep_set_halt(struct usb_ep
*ep
, int value
)
1596 return _ep_set_halt(ep
, value
, true);
1600 * ep_set_wedge: sets the halt feature and ignores clear requests
1602 * Check usb_ep_set_wedge() at "usb_gadget.h" for details
1604 static int ep_set_wedge(struct usb_ep
*ep
)
1606 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1607 unsigned long flags
;
1609 if (ep
== NULL
|| hwep
->ep
.desc
== NULL
)
1612 spin_lock_irqsave(hwep
->lock
, flags
);
1614 spin_unlock_irqrestore(hwep
->lock
, flags
);
1616 return usb_ep_set_halt(ep
);
1620 * ep_fifo_flush: flushes contents of a fifo
1622 * Check usb_ep_fifo_flush() at "usb_gadget.h" for details
1624 static void ep_fifo_flush(struct usb_ep
*ep
)
1626 struct ci_hw_ep
*hwep
= container_of(ep
, struct ci_hw_ep
, ep
);
1627 unsigned long flags
;
1630 dev_err(hwep
->ci
->dev
, "%02X: -EINVAL\n", _usb_addr(hwep
));
1634 spin_lock_irqsave(hwep
->lock
, flags
);
1635 if (hwep
->ci
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
1636 spin_unlock_irqrestore(hwep
->lock
, flags
);
1640 hw_ep_flush(hwep
->ci
, hwep
->num
, hwep
->dir
);
1642 spin_unlock_irqrestore(hwep
->lock
, flags
);
1646 * Endpoint-specific part of the API to the USB controller hardware
1647 * Check "usb_gadget.h" for details
1649 static const struct usb_ep_ops usb_ep_ops
= {
1650 .enable
= ep_enable
,
1651 .disable
= ep_disable
,
1652 .alloc_request
= ep_alloc_request
,
1653 .free_request
= ep_free_request
,
1655 .dequeue
= ep_dequeue
,
1656 .set_halt
= ep_set_halt
,
1657 .set_wedge
= ep_set_wedge
,
1658 .fifo_flush
= ep_fifo_flush
,
1661 /******************************************************************************
1663 *****************************************************************************/
1665 static int ci_udc_get_frame(struct usb_gadget
*_gadget
)
1667 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1668 unsigned long flags
;
1671 spin_lock_irqsave(&ci
->lock
, flags
);
1672 ret
= hw_read(ci
, OP_FRINDEX
, 0x3fff);
1673 spin_unlock_irqrestore(&ci
->lock
, flags
);
1678 * ci_hdrc_gadget_connect: caller makes sure gadget driver is binded
1680 static void ci_hdrc_gadget_connect(struct usb_gadget
*_gadget
, int is_active
)
1682 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1685 pm_runtime_get_sync(ci
->dev
);
1686 hw_device_reset(ci
);
1687 spin_lock_irq(&ci
->lock
);
1689 hw_device_state(ci
, ci
->ep0out
->qh
.dma
);
1690 usb_gadget_set_state(_gadget
, USB_STATE_POWERED
);
1691 spin_unlock_irq(&ci
->lock
);
1692 usb_udc_vbus_handler(_gadget
, true);
1694 spin_unlock_irq(&ci
->lock
);
1697 usb_udc_vbus_handler(_gadget
, false);
1699 ci
->driver
->disconnect(&ci
->gadget
);
1700 hw_device_state(ci
, 0);
1701 if (ci
->platdata
->notify_event
)
1702 ci
->platdata
->notify_event(ci
,
1703 CI_HDRC_CONTROLLER_STOPPED_EVENT
);
1704 _gadget_stop_activity(&ci
->gadget
);
1705 pm_runtime_put_sync(ci
->dev
);
1706 usb_gadget_set_state(_gadget
, USB_STATE_NOTATTACHED
);
1710 static int ci_udc_vbus_session(struct usb_gadget
*_gadget
, int is_active
)
1712 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1713 unsigned long flags
;
1716 spin_lock_irqsave(&ci
->lock
, flags
);
1717 ci
->vbus_active
= is_active
;
1718 spin_unlock_irqrestore(&ci
->lock
, flags
);
1721 usb_phy_set_charger_state(ci
->usb_phy
, is_active
?
1722 USB_CHARGER_PRESENT
: USB_CHARGER_ABSENT
);
1724 if (ci
->platdata
->notify_event
)
1725 ret
= ci
->platdata
->notify_event(ci
,
1726 CI_HDRC_CONTROLLER_VBUS_EVENT
);
1730 usb_phy_set_event(ci
->usb_phy
, USB_EVENT_VBUS
);
1732 usb_phy_set_event(ci
->usb_phy
, USB_EVENT_NONE
);
1736 ci_hdrc_gadget_connect(_gadget
, is_active
);
1741 static int ci_udc_wakeup(struct usb_gadget
*_gadget
)
1743 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1744 unsigned long flags
;
1747 spin_lock_irqsave(&ci
->lock
, flags
);
1748 if (ci
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
1749 spin_unlock_irqrestore(&ci
->lock
, flags
);
1752 if (!ci
->remote_wakeup
) {
1756 if (!hw_read(ci
, OP_PORTSC
, PORTSC_SUSP
)) {
1760 hw_write(ci
, OP_PORTSC
, PORTSC_FPR
, PORTSC_FPR
);
1762 spin_unlock_irqrestore(&ci
->lock
, flags
);
1766 static int ci_udc_vbus_draw(struct usb_gadget
*_gadget
, unsigned ma
)
1768 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1771 return usb_phy_set_power(ci
->usb_phy
, ma
);
1775 static int ci_udc_selfpowered(struct usb_gadget
*_gadget
, int is_on
)
1777 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1778 struct ci_hw_ep
*hwep
= ci
->ep0in
;
1779 unsigned long flags
;
1781 spin_lock_irqsave(hwep
->lock
, flags
);
1782 _gadget
->is_selfpowered
= (is_on
!= 0);
1783 spin_unlock_irqrestore(hwep
->lock
, flags
);
1788 /* Change Data+ pullup status
1789 * this func is used by usb_gadget_connect/disconnect
1791 static int ci_udc_pullup(struct usb_gadget
*_gadget
, int is_on
)
1793 struct ci_hdrc
*ci
= container_of(_gadget
, struct ci_hdrc
, gadget
);
1796 * Data+ pullup controlled by OTG state machine in OTG fsm mode;
1797 * and don't touch Data+ in host mode for dual role config.
1799 if (ci_otg_is_fsm_mode(ci
) || ci
->role
== CI_ROLE_HOST
)
1802 pm_runtime_get_sync(ci
->dev
);
1804 hw_write(ci
, OP_USBCMD
, USBCMD_RS
, USBCMD_RS
);
1806 hw_write(ci
, OP_USBCMD
, USBCMD_RS
, 0);
1807 pm_runtime_put_sync(ci
->dev
);
1812 static int ci_udc_start(struct usb_gadget
*gadget
,
1813 struct usb_gadget_driver
*driver
);
1814 static int ci_udc_stop(struct usb_gadget
*gadget
);
1816 /* Match ISOC IN from the highest endpoint */
1817 static struct usb_ep
*ci_udc_match_ep(struct usb_gadget
*gadget
,
1818 struct usb_endpoint_descriptor
*desc
,
1819 struct usb_ss_ep_comp_descriptor
*comp_desc
)
1821 struct ci_hdrc
*ci
= container_of(gadget
, struct ci_hdrc
, gadget
);
1824 if (usb_endpoint_xfer_isoc(desc
) && usb_endpoint_dir_in(desc
)) {
1825 list_for_each_entry_reverse(ep
, &ci
->gadget
.ep_list
, ep_list
) {
1826 if (ep
->caps
.dir_in
&& !ep
->claimed
)
1835 * Device operations part of the API to the USB controller hardware,
1836 * which don't involve endpoints (or i/o)
1837 * Check "usb_gadget.h" for details
1839 static const struct usb_gadget_ops usb_gadget_ops
= {
1840 .get_frame
= ci_udc_get_frame
,
1841 .vbus_session
= ci_udc_vbus_session
,
1842 .wakeup
= ci_udc_wakeup
,
1843 .set_selfpowered
= ci_udc_selfpowered
,
1844 .pullup
= ci_udc_pullup
,
1845 .vbus_draw
= ci_udc_vbus_draw
,
1846 .udc_start
= ci_udc_start
,
1847 .udc_stop
= ci_udc_stop
,
1848 .match_ep
= ci_udc_match_ep
,
1851 static int init_eps(struct ci_hdrc
*ci
)
1853 int retval
= 0, i
, j
;
1855 for (i
= 0; i
< ci
->hw_ep_max
/2; i
++)
1856 for (j
= RX
; j
<= TX
; j
++) {
1857 int k
= i
+ j
* ci
->hw_ep_max
/2;
1858 struct ci_hw_ep
*hwep
= &ci
->ci_hw_ep
[k
];
1860 scnprintf(hwep
->name
, sizeof(hwep
->name
), "ep%i%s", i
,
1861 (j
== TX
) ? "in" : "out");
1864 hwep
->lock
= &ci
->lock
;
1865 hwep
->td_pool
= ci
->td_pool
;
1867 hwep
->ep
.name
= hwep
->name
;
1868 hwep
->ep
.ops
= &usb_ep_ops
;
1871 hwep
->ep
.caps
.type_control
= true;
1873 hwep
->ep
.caps
.type_iso
= true;
1874 hwep
->ep
.caps
.type_bulk
= true;
1875 hwep
->ep
.caps
.type_int
= true;
1879 hwep
->ep
.caps
.dir_in
= true;
1881 hwep
->ep
.caps
.dir_out
= true;
1884 * for ep0: maxP defined in desc, for other
1885 * eps, maxP is set by epautoconfig() called
1888 usb_ep_set_maxpacket_limit(&hwep
->ep
, (unsigned short)~0);
1890 INIT_LIST_HEAD(&hwep
->qh
.queue
);
1891 hwep
->qh
.ptr
= dma_pool_zalloc(ci
->qh_pool
, GFP_KERNEL
,
1893 if (hwep
->qh
.ptr
== NULL
)
1897 * set up shorthands for ep0 out and in endpoints,
1898 * don't add to gadget's ep_list
1906 usb_ep_set_maxpacket_limit(&hwep
->ep
, CTRL_PAYLOAD_MAX
);
1910 list_add_tail(&hwep
->ep
.ep_list
, &ci
->gadget
.ep_list
);
1916 static void destroy_eps(struct ci_hdrc
*ci
)
1920 for (i
= 0; i
< ci
->hw_ep_max
; i
++) {
1921 struct ci_hw_ep
*hwep
= &ci
->ci_hw_ep
[i
];
1923 if (hwep
->pending_td
)
1924 free_pending_td(hwep
);
1925 dma_pool_free(ci
->qh_pool
, hwep
->qh
.ptr
, hwep
->qh
.dma
);
1930 * ci_udc_start: register a gadget driver
1931 * @gadget: our gadget
1932 * @driver: the driver being registered
1934 * Interrupts are enabled here.
1936 static int ci_udc_start(struct usb_gadget
*gadget
,
1937 struct usb_gadget_driver
*driver
)
1939 struct ci_hdrc
*ci
= container_of(gadget
, struct ci_hdrc
, gadget
);
1942 if (driver
->disconnect
== NULL
)
1945 ci
->ep0out
->ep
.desc
= &ctrl_endpt_out_desc
;
1946 retval
= usb_ep_enable(&ci
->ep0out
->ep
);
1950 ci
->ep0in
->ep
.desc
= &ctrl_endpt_in_desc
;
1951 retval
= usb_ep_enable(&ci
->ep0in
->ep
);
1955 ci
->driver
= driver
;
1957 /* Start otg fsm for B-device */
1958 if (ci_otg_is_fsm_mode(ci
) && ci
->fsm
.id
) {
1959 ci_hdrc_otg_fsm_start(ci
);
1963 if (ci
->vbus_active
)
1964 ci_hdrc_gadget_connect(gadget
, 1);
1966 usb_udc_vbus_handler(&ci
->gadget
, false);
1971 static void ci_udc_stop_for_otg_fsm(struct ci_hdrc
*ci
)
1973 if (!ci_otg_is_fsm_mode(ci
))
1976 mutex_lock(&ci
->fsm
.lock
);
1977 if (ci
->fsm
.otg
->state
== OTG_STATE_A_PERIPHERAL
) {
1978 ci
->fsm
.a_bidl_adis_tmout
= 1;
1979 ci_hdrc_otg_fsm_start(ci
);
1980 } else if (ci
->fsm
.otg
->state
== OTG_STATE_B_PERIPHERAL
) {
1981 ci
->fsm
.protocol
= PROTO_UNDEF
;
1982 ci
->fsm
.otg
->state
= OTG_STATE_UNDEFINED
;
1984 mutex_unlock(&ci
->fsm
.lock
);
1988 * ci_udc_stop: unregister a gadget driver
1990 static int ci_udc_stop(struct usb_gadget
*gadget
)
1992 struct ci_hdrc
*ci
= container_of(gadget
, struct ci_hdrc
, gadget
);
1993 unsigned long flags
;
1995 spin_lock_irqsave(&ci
->lock
, flags
);
1998 if (ci
->vbus_active
) {
1999 hw_device_state(ci
, 0);
2000 spin_unlock_irqrestore(&ci
->lock
, flags
);
2001 if (ci
->platdata
->notify_event
)
2002 ci
->platdata
->notify_event(ci
,
2003 CI_HDRC_CONTROLLER_STOPPED_EVENT
);
2004 _gadget_stop_activity(&ci
->gadget
);
2005 spin_lock_irqsave(&ci
->lock
, flags
);
2006 pm_runtime_put(ci
->dev
);
2009 spin_unlock_irqrestore(&ci
->lock
, flags
);
2011 ci_udc_stop_for_otg_fsm(ci
);
2015 /******************************************************************************
2017 *****************************************************************************/
2019 * udc_irq: ci interrupt handler
2021 * This function returns IRQ_HANDLED if the IRQ has been handled
2022 * It locks access to registers
2024 static irqreturn_t
udc_irq(struct ci_hdrc
*ci
)
2032 spin_lock(&ci
->lock
);
2034 if (ci
->platdata
->flags
& CI_HDRC_REGS_SHARED
) {
2035 if (hw_read(ci
, OP_USBMODE
, USBMODE_CM
) !=
2037 spin_unlock(&ci
->lock
);
2041 intr
= hw_test_and_clear_intr_active(ci
);
2044 /* order defines priority - do NOT change it */
2045 if (USBi_URI
& intr
)
2046 isr_reset_handler(ci
);
2048 if (USBi_PCI
& intr
) {
2049 ci
->gadget
.speed
= hw_port_is_high_speed(ci
) ?
2050 USB_SPEED_HIGH
: USB_SPEED_FULL
;
2052 usb_phy_set_event(ci
->usb_phy
,
2053 USB_EVENT_ENUMERATED
);
2054 if (ci
->suspended
) {
2055 if (ci
->driver
->resume
) {
2056 spin_unlock(&ci
->lock
);
2057 ci
->driver
->resume(&ci
->gadget
);
2058 spin_lock(&ci
->lock
);
2061 usb_gadget_set_state(&ci
->gadget
,
2067 isr_tr_complete_handler(ci
);
2069 if ((USBi_SLI
& intr
) && !(ci
->suspended
)) {
2071 ci
->resume_state
= ci
->gadget
.state
;
2072 if (ci
->gadget
.speed
!= USB_SPEED_UNKNOWN
&&
2073 ci
->driver
->suspend
) {
2074 spin_unlock(&ci
->lock
);
2075 ci
->driver
->suspend(&ci
->gadget
);
2076 spin_lock(&ci
->lock
);
2078 usb_gadget_set_state(&ci
->gadget
,
2079 USB_STATE_SUSPENDED
);
2081 retval
= IRQ_HANDLED
;
2085 spin_unlock(&ci
->lock
);
2091 * udc_start: initialize gadget role
2092 * @ci: chipidea controller
2094 static int udc_start(struct ci_hdrc
*ci
)
2096 struct device
*dev
= ci
->dev
;
2097 struct usb_otg_caps
*otg_caps
= &ci
->platdata
->ci_otg_caps
;
2100 ci
->gadget
.ops
= &usb_gadget_ops
;
2101 ci
->gadget
.speed
= USB_SPEED_UNKNOWN
;
2102 ci
->gadget
.max_speed
= USB_SPEED_HIGH
;
2103 ci
->gadget
.name
= ci
->platdata
->name
;
2104 ci
->gadget
.otg_caps
= otg_caps
;
2105 ci
->gadget
.sg_supported
= 1;
2106 ci
->gadget
.irq
= ci
->irq
;
2108 if (ci
->platdata
->flags
& CI_HDRC_REQUIRES_ALIGNED_DMA
)
2109 ci
->gadget
.quirk_avoids_skb_reserve
= 1;
2111 if (ci
->is_otg
&& (otg_caps
->hnp_support
|| otg_caps
->srp_support
||
2112 otg_caps
->adp_support
))
2113 ci
->gadget
.is_otg
= 1;
2115 INIT_LIST_HEAD(&ci
->gadget
.ep_list
);
2117 /* alloc resources */
2118 ci
->qh_pool
= dma_pool_create("ci_hw_qh", dev
->parent
,
2119 sizeof(struct ci_hw_qh
),
2120 64, CI_HDRC_PAGE_SIZE
);
2121 if (ci
->qh_pool
== NULL
)
2124 ci
->td_pool
= dma_pool_create("ci_hw_td", dev
->parent
,
2125 sizeof(struct ci_hw_td
),
2126 64, CI_HDRC_PAGE_SIZE
);
2127 if (ci
->td_pool
== NULL
) {
2132 retval
= init_eps(ci
);
2136 ci
->gadget
.ep0
= &ci
->ep0in
->ep
;
2138 retval
= usb_add_gadget_udc(dev
, &ci
->gadget
);
2147 dma_pool_destroy(ci
->td_pool
);
2149 dma_pool_destroy(ci
->qh_pool
);
2154 * ci_hdrc_gadget_destroy: parent remove must call this to remove UDC
2156 * No interrupts active, the IRQ has been released
2158 void ci_hdrc_gadget_destroy(struct ci_hdrc
*ci
)
2160 if (!ci
->roles
[CI_ROLE_GADGET
])
2163 usb_del_gadget_udc(&ci
->gadget
);
2167 dma_pool_destroy(ci
->td_pool
);
2168 dma_pool_destroy(ci
->qh_pool
);
2171 static int udc_id_switch_for_device(struct ci_hdrc
*ci
)
2173 if (ci
->platdata
->pins_device
)
2174 pinctrl_select_state(ci
->platdata
->pctl
,
2175 ci
->platdata
->pins_device
);
2178 /* Clear and enable BSV irq */
2179 hw_write_otgsc(ci
, OTGSC_BSVIS
| OTGSC_BSVIE
,
2180 OTGSC_BSVIS
| OTGSC_BSVIE
);
2185 static void udc_id_switch_for_host(struct ci_hdrc
*ci
)
2188 * host doesn't care B_SESSION_VALID event
2189 * so clear and disable BSV irq
2192 hw_write_otgsc(ci
, OTGSC_BSVIE
| OTGSC_BSVIS
, OTGSC_BSVIS
);
2194 ci
->vbus_active
= 0;
2196 if (ci
->platdata
->pins_device
&& ci
->platdata
->pins_default
)
2197 pinctrl_select_state(ci
->platdata
->pctl
,
2198 ci
->platdata
->pins_default
);
2201 #ifdef CONFIG_PM_SLEEP
2202 static void udc_suspend(struct ci_hdrc
*ci
)
2205 * Set OP_ENDPTLISTADDR to be non-zero for
2206 * checking if controller resume from power lost
2209 if (hw_read(ci
, OP_ENDPTLISTADDR
, ~0) == 0)
2210 hw_write(ci
, OP_ENDPTLISTADDR
, ~0, ~0);
2213 static void udc_resume(struct ci_hdrc
*ci
, bool power_lost
)
2217 hw_write_otgsc(ci
, OTGSC_BSVIS
| OTGSC_BSVIE
,
2218 OTGSC_BSVIS
| OTGSC_BSVIE
);
2219 if (ci
->vbus_active
)
2220 usb_gadget_vbus_disconnect(&ci
->gadget
);
2223 /* Restore value 0 if it was set for power lost check */
2224 if (hw_read(ci
, OP_ENDPTLISTADDR
, ~0) == 0xFFFFFFFF)
2225 hw_write(ci
, OP_ENDPTLISTADDR
, ~0, 0);
2230 * ci_hdrc_gadget_init - initialize device related bits
2231 * @ci: the controller
2233 * This function initializes the gadget, if the device is "device capable".
2235 int ci_hdrc_gadget_init(struct ci_hdrc
*ci
)
2237 struct ci_role_driver
*rdrv
;
2240 if (!hw_read(ci
, CAP_DCCPARAMS
, DCCPARAMS_DC
))
2243 rdrv
= devm_kzalloc(ci
->dev
, sizeof(*rdrv
), GFP_KERNEL
);
2247 rdrv
->start
= udc_id_switch_for_device
;
2248 rdrv
->stop
= udc_id_switch_for_host
;
2249 #ifdef CONFIG_PM_SLEEP
2250 rdrv
->suspend
= udc_suspend
;
2251 rdrv
->resume
= udc_resume
;
2253 rdrv
->irq
= udc_irq
;
2254 rdrv
->name
= "gadget";
2256 ret
= udc_start(ci
);
2258 ci
->roles
[CI_ROLE_GADGET
] = rdrv
;