xref: /openbmc/linux/drivers/usb/chipidea/udc.c (revision 0d456bad)
1 /*
2  * udc.c - ChipIdea UDC driver
3  *
4  * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5  *
6  * Author: David Lopo
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12 
13 #include <linux/delay.h>
14 #include <linux/device.h>
15 #include <linux/dmapool.h>
16 #include <linux/dma-mapping.h>
17 #include <linux/err.h>
18 #include <linux/init.h>
19 #include <linux/platform_device.h>
20 #include <linux/module.h>
21 #include <linux/interrupt.h>
22 #include <linux/io.h>
23 #include <linux/irq.h>
24 #include <linux/kernel.h>
25 #include <linux/slab.h>
26 #include <linux/pm_runtime.h>
27 #include <linux/usb/ch9.h>
28 #include <linux/usb/gadget.h>
29 #include <linux/usb/otg.h>
30 #include <linux/usb/chipidea.h>
31 
32 #include "ci.h"
33 #include "udc.h"
34 #include "bits.h"
35 #include "debug.h"
36 
37 /* control endpoint description */
38 static const struct usb_endpoint_descriptor
39 ctrl_endpt_out_desc = {
40 	.bLength         = USB_DT_ENDPOINT_SIZE,
41 	.bDescriptorType = USB_DT_ENDPOINT,
42 
43 	.bEndpointAddress = USB_DIR_OUT,
44 	.bmAttributes    = USB_ENDPOINT_XFER_CONTROL,
45 	.wMaxPacketSize  = cpu_to_le16(CTRL_PAYLOAD_MAX),
46 };
47 
48 static const struct usb_endpoint_descriptor
49 ctrl_endpt_in_desc = {
50 	.bLength         = USB_DT_ENDPOINT_SIZE,
51 	.bDescriptorType = USB_DT_ENDPOINT,
52 
53 	.bEndpointAddress = USB_DIR_IN,
54 	.bmAttributes    = USB_ENDPOINT_XFER_CONTROL,
55 	.wMaxPacketSize  = cpu_to_le16(CTRL_PAYLOAD_MAX),
56 };
57 
58 /**
59  * hw_ep_bit: calculates the bit number
60  * @num: endpoint number
61  * @dir: endpoint direction
62  *
63  * This function returns bit number
64  */
65 static inline int hw_ep_bit(int num, int dir)
66 {
67 	return num + (dir ? 16 : 0);
68 }
69 
70 static inline int ep_to_bit(struct ci13xxx *ci, int n)
71 {
72 	int fill = 16 - ci->hw_ep_max / 2;
73 
74 	if (n >= ci->hw_ep_max / 2)
75 		n += fill;
76 
77 	return n;
78 }
79 
80 /**
81  * hw_device_state: enables/disables interrupts (execute without interruption)
82  * @dma: 0 => disable, !0 => enable and set dma engine
83  *
84  * This function returns an error code
85  */
86 static int hw_device_state(struct ci13xxx *ci, u32 dma)
87 {
88 	if (dma) {
89 		hw_write(ci, OP_ENDPTLISTADDR, ~0, dma);
90 		/* interrupt, error, port change, reset, sleep/suspend */
91 		hw_write(ci, OP_USBINTR, ~0,
92 			     USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
93 	} else {
94 		hw_write(ci, OP_USBINTR, ~0, 0);
95 	}
96 	return 0;
97 }
98 
99 /**
100  * hw_ep_flush: flush endpoint fifo (execute without interruption)
101  * @num: endpoint number
102  * @dir: endpoint direction
103  *
104  * This function returns an error code
105  */
106 static int hw_ep_flush(struct ci13xxx *ci, int num, int dir)
107 {
108 	int n = hw_ep_bit(num, dir);
109 
110 	do {
111 		/* flush any pending transfer */
112 		hw_write(ci, OP_ENDPTFLUSH, BIT(n), BIT(n));
113 		while (hw_read(ci, OP_ENDPTFLUSH, BIT(n)))
114 			cpu_relax();
115 	} while (hw_read(ci, OP_ENDPTSTAT, BIT(n)));
116 
117 	return 0;
118 }
119 
120 /**
121  * hw_ep_disable: disables endpoint (execute without interruption)
122  * @num: endpoint number
123  * @dir: endpoint direction
124  *
125  * This function returns an error code
126  */
127 static int hw_ep_disable(struct ci13xxx *ci, int num, int dir)
128 {
129 	hw_ep_flush(ci, num, dir);
130 	hw_write(ci, OP_ENDPTCTRL + num,
131 		 dir ? ENDPTCTRL_TXE : ENDPTCTRL_RXE, 0);
132 	return 0;
133 }
134 
135 /**
136  * hw_ep_enable: enables endpoint (execute without interruption)
137  * @num:  endpoint number
138  * @dir:  endpoint direction
139  * @type: endpoint type
140  *
141  * This function returns an error code
142  */
143 static int hw_ep_enable(struct ci13xxx *ci, int num, int dir, int type)
144 {
145 	u32 mask, data;
146 
147 	if (dir) {
148 		mask  = ENDPTCTRL_TXT;  /* type    */
149 		data  = type << ffs_nr(mask);
150 
151 		mask |= ENDPTCTRL_TXS;  /* unstall */
152 		mask |= ENDPTCTRL_TXR;  /* reset data toggle */
153 		data |= ENDPTCTRL_TXR;
154 		mask |= ENDPTCTRL_TXE;  /* enable  */
155 		data |= ENDPTCTRL_TXE;
156 	} else {
157 		mask  = ENDPTCTRL_RXT;  /* type    */
158 		data  = type << ffs_nr(mask);
159 
160 		mask |= ENDPTCTRL_RXS;  /* unstall */
161 		mask |= ENDPTCTRL_RXR;  /* reset data toggle */
162 		data |= ENDPTCTRL_RXR;
163 		mask |= ENDPTCTRL_RXE;  /* enable  */
164 		data |= ENDPTCTRL_RXE;
165 	}
166 	hw_write(ci, OP_ENDPTCTRL + num, mask, data);
167 	return 0;
168 }
169 
170 /**
171  * hw_ep_get_halt: return endpoint halt status
172  * @num: endpoint number
173  * @dir: endpoint direction
174  *
175  * This function returns 1 if endpoint halted
176  */
177 static int hw_ep_get_halt(struct ci13xxx *ci, int num, int dir)
178 {
179 	u32 mask = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
180 
181 	return hw_read(ci, OP_ENDPTCTRL + num, mask) ? 1 : 0;
182 }
183 
184 /**
185  * hw_test_and_clear_setup_status: test & clear setup status (execute without
186  *                                 interruption)
187  * @n: endpoint number
188  *
189  * This function returns setup status
190  */
191 static int hw_test_and_clear_setup_status(struct ci13xxx *ci, int n)
192 {
193 	n = ep_to_bit(ci, n);
194 	return hw_test_and_clear(ci, OP_ENDPTSETUPSTAT, BIT(n));
195 }
196 
197 /**
198  * hw_ep_prime: primes endpoint (execute without interruption)
199  * @num:     endpoint number
200  * @dir:     endpoint direction
201  * @is_ctrl: true if control endpoint
202  *
203  * This function returns an error code
204  */
205 static int hw_ep_prime(struct ci13xxx *ci, int num, int dir, int is_ctrl)
206 {
207 	int n = hw_ep_bit(num, dir);
208 
209 	if (is_ctrl && dir == RX && hw_read(ci, OP_ENDPTSETUPSTAT, BIT(num)))
210 		return -EAGAIN;
211 
212 	hw_write(ci, OP_ENDPTPRIME, BIT(n), BIT(n));
213 
214 	while (hw_read(ci, OP_ENDPTPRIME, BIT(n)))
215 		cpu_relax();
216 	if (is_ctrl && dir == RX && hw_read(ci, OP_ENDPTSETUPSTAT, BIT(num)))
217 		return -EAGAIN;
218 
219 	/* status shoult be tested according with manual but it doesn't work */
220 	return 0;
221 }
222 
223 /**
224  * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute
225  *                 without interruption)
226  * @num:   endpoint number
227  * @dir:   endpoint direction
228  * @value: true => stall, false => unstall
229  *
230  * This function returns an error code
231  */
232 static int hw_ep_set_halt(struct ci13xxx *ci, int num, int dir, int value)
233 {
234 	if (value != 0 && value != 1)
235 		return -EINVAL;
236 
237 	do {
238 		enum ci13xxx_regs reg = OP_ENDPTCTRL + num;
239 		u32 mask_xs = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
240 		u32 mask_xr = dir ? ENDPTCTRL_TXR : ENDPTCTRL_RXR;
241 
242 		/* data toggle - reserved for EP0 but it's in ESS */
243 		hw_write(ci, reg, mask_xs|mask_xr,
244 			  value ? mask_xs : mask_xr);
245 	} while (value != hw_ep_get_halt(ci, num, dir));
246 
247 	return 0;
248 }
249 
250 /**
251  * hw_is_port_high_speed: test if port is high speed
252  *
253  * This function returns true if high speed port
254  */
255 static int hw_port_is_high_speed(struct ci13xxx *ci)
256 {
257 	return ci->hw_bank.lpm ? hw_read(ci, OP_DEVLC, DEVLC_PSPD) :
258 		hw_read(ci, OP_PORTSC, PORTSC_HSP);
259 }
260 
261 /**
262  * hw_read_intr_enable: returns interrupt enable register
263  *
264  * This function returns register data
265  */
266 static u32 hw_read_intr_enable(struct ci13xxx *ci)
267 {
268 	return hw_read(ci, OP_USBINTR, ~0);
269 }
270 
271 /**
272  * hw_read_intr_status: returns interrupt status register
273  *
274  * This function returns register data
275  */
276 static u32 hw_read_intr_status(struct ci13xxx *ci)
277 {
278 	return hw_read(ci, OP_USBSTS, ~0);
279 }
280 
281 /**
282  * hw_test_and_clear_complete: test & clear complete status (execute without
283  *                             interruption)
284  * @n: endpoint number
285  *
286  * This function returns complete status
287  */
288 static int hw_test_and_clear_complete(struct ci13xxx *ci, int n)
289 {
290 	n = ep_to_bit(ci, n);
291 	return hw_test_and_clear(ci, OP_ENDPTCOMPLETE, BIT(n));
292 }
293 
294 /**
295  * hw_test_and_clear_intr_active: test & clear active interrupts (execute
296  *                                without interruption)
297  *
298  * This function returns active interrutps
299  */
300 static u32 hw_test_and_clear_intr_active(struct ci13xxx *ci)
301 {
302 	u32 reg = hw_read_intr_status(ci) & hw_read_intr_enable(ci);
303 
304 	hw_write(ci, OP_USBSTS, ~0, reg);
305 	return reg;
306 }
307 
308 static void hw_enable_vbus_intr(struct ci13xxx *ci)
309 {
310 	hw_write(ci, OP_OTGSC, OTGSC_AVVIS, OTGSC_AVVIS);
311 	hw_write(ci, OP_OTGSC, OTGSC_AVVIE, OTGSC_AVVIE);
312 	queue_work(ci->wq, &ci->vbus_work);
313 }
314 
315 static void hw_disable_vbus_intr(struct ci13xxx *ci)
316 {
317 	hw_write(ci, OP_OTGSC, OTGSC_AVVIE, 0);
318 }
319 
320 /**
321  * hw_test_and_clear_setup_guard: test & clear setup guard (execute without
322  *                                interruption)
323  *
324  * This function returns guard value
325  */
326 static int hw_test_and_clear_setup_guard(struct ci13xxx *ci)
327 {
328 	return hw_test_and_write(ci, OP_USBCMD, USBCMD_SUTW, 0);
329 }
330 
331 /**
332  * hw_test_and_set_setup_guard: test & set setup guard (execute without
333  *                              interruption)
334  *
335  * This function returns guard value
336  */
337 static int hw_test_and_set_setup_guard(struct ci13xxx *ci)
338 {
339 	return hw_test_and_write(ci, OP_USBCMD, USBCMD_SUTW, USBCMD_SUTW);
340 }
341 
342 /**
343  * hw_usb_set_address: configures USB address (execute without interruption)
344  * @value: new USB address
345  *
346  * This function explicitly sets the address, without the "USBADRA" (advance)
347  * feature, which is not supported by older versions of the controller.
348  */
349 static void hw_usb_set_address(struct ci13xxx *ci, u8 value)
350 {
351 	hw_write(ci, OP_DEVICEADDR, DEVICEADDR_USBADR,
352 		 value << ffs_nr(DEVICEADDR_USBADR));
353 }
354 
355 /**
356  * hw_usb_reset: restart device after a bus reset (execute without
357  *               interruption)
358  *
359  * This function returns an error code
360  */
361 static int hw_usb_reset(struct ci13xxx *ci)
362 {
363 	hw_usb_set_address(ci, 0);
364 
365 	/* ESS flushes only at end?!? */
366 	hw_write(ci, OP_ENDPTFLUSH,    ~0, ~0);
367 
368 	/* clear setup token semaphores */
369 	hw_write(ci, OP_ENDPTSETUPSTAT, 0,  0);
370 
371 	/* clear complete status */
372 	hw_write(ci, OP_ENDPTCOMPLETE,  0,  0);
373 
374 	/* wait until all bits cleared */
375 	while (hw_read(ci, OP_ENDPTPRIME, ~0))
376 		udelay(10);             /* not RTOS friendly */
377 
378 	/* reset all endpoints ? */
379 
380 	/* reset internal status and wait for further instructions
381 	   no need to verify the port reset status (ESS does it) */
382 
383 	return 0;
384 }
385 
386 static void vbus_work(struct work_struct *work)
387 {
388 	struct ci13xxx *ci = container_of(work, struct ci13xxx, vbus_work);
389 
390 	if (hw_read(ci, OP_OTGSC, OTGSC_AVV))
391 		usb_gadget_vbus_connect(&ci->gadget);
392 	else
393 		usb_gadget_vbus_disconnect(&ci->gadget);
394 }
395 
396 /******************************************************************************
397  * UTIL block
398  *****************************************************************************/
399 /**
400  * _usb_addr: calculates endpoint address from direction & number
401  * @ep:  endpoint
402  */
403 static inline u8 _usb_addr(struct ci13xxx_ep *ep)
404 {
405 	return ((ep->dir == TX) ? USB_ENDPOINT_DIR_MASK : 0) | ep->num;
406 }
407 
408 /**
409  * _hardware_queue: configures a request at hardware level
410  * @gadget: gadget
411  * @mEp:    endpoint
412  *
413  * This function returns an error code
414  */
415 static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
416 {
417 	struct ci13xxx *ci = mEp->ci;
418 	unsigned i;
419 	int ret = 0;
420 	unsigned length = mReq->req.length;
421 
422 	/* don't queue twice */
423 	if (mReq->req.status == -EALREADY)
424 		return -EALREADY;
425 
426 	mReq->req.status = -EALREADY;
427 
428 	if (mReq->req.zero && length && (length % mEp->ep.maxpacket == 0)) {
429 		mReq->zptr = dma_pool_alloc(mEp->td_pool, GFP_ATOMIC,
430 					   &mReq->zdma);
431 		if (mReq->zptr == NULL)
432 			return -ENOMEM;
433 
434 		memset(mReq->zptr, 0, sizeof(*mReq->zptr));
435 		mReq->zptr->next    = TD_TERMINATE;
436 		mReq->zptr->token   = TD_STATUS_ACTIVE;
437 		if (!mReq->req.no_interrupt)
438 			mReq->zptr->token   |= TD_IOC;
439 	}
440 	ret = usb_gadget_map_request(&ci->gadget, &mReq->req, mEp->dir);
441 	if (ret)
442 		return ret;
443 
444 	/*
445 	 * TD configuration
446 	 * TODO - handle requests which spawns into several TDs
447 	 */
448 	memset(mReq->ptr, 0, sizeof(*mReq->ptr));
449 	mReq->ptr->token    = length << ffs_nr(TD_TOTAL_BYTES);
450 	mReq->ptr->token   &= TD_TOTAL_BYTES;
451 	mReq->ptr->token   |= TD_STATUS_ACTIVE;
452 	if (mReq->zptr) {
453 		mReq->ptr->next    = mReq->zdma;
454 	} else {
455 		mReq->ptr->next    = TD_TERMINATE;
456 		if (!mReq->req.no_interrupt)
457 			mReq->ptr->token  |= TD_IOC;
458 	}
459 	mReq->ptr->page[0]  = mReq->req.dma;
460 	for (i = 1; i < 5; i++)
461 		mReq->ptr->page[i] =
462 			(mReq->req.dma + i * CI13XXX_PAGE_SIZE) & ~TD_RESERVED_MASK;
463 
464 	if (!list_empty(&mEp->qh.queue)) {
465 		struct ci13xxx_req *mReqPrev;
466 		int n = hw_ep_bit(mEp->num, mEp->dir);
467 		int tmp_stat;
468 
469 		mReqPrev = list_entry(mEp->qh.queue.prev,
470 				struct ci13xxx_req, queue);
471 		if (mReqPrev->zptr)
472 			mReqPrev->zptr->next = mReq->dma & TD_ADDR_MASK;
473 		else
474 			mReqPrev->ptr->next = mReq->dma & TD_ADDR_MASK;
475 		wmb();
476 		if (hw_read(ci, OP_ENDPTPRIME, BIT(n)))
477 			goto done;
478 		do {
479 			hw_write(ci, OP_USBCMD, USBCMD_ATDTW, USBCMD_ATDTW);
480 			tmp_stat = hw_read(ci, OP_ENDPTSTAT, BIT(n));
481 		} while (!hw_read(ci, OP_USBCMD, USBCMD_ATDTW));
482 		hw_write(ci, OP_USBCMD, USBCMD_ATDTW, 0);
483 		if (tmp_stat)
484 			goto done;
485 	}
486 
487 	/*  QH configuration */
488 	mEp->qh.ptr->td.next   = mReq->dma;    /* TERMINATE = 0 */
489 	mEp->qh.ptr->td.token &= ~TD_STATUS;   /* clear status */
490 	mEp->qh.ptr->cap |=  QH_ZLT;
491 
492 	wmb();   /* synchronize before ep prime */
493 
494 	ret = hw_ep_prime(ci, mEp->num, mEp->dir,
495 			   mEp->type == USB_ENDPOINT_XFER_CONTROL);
496 done:
497 	return ret;
498 }
499 
500 /**
501  * _hardware_dequeue: handles a request at hardware level
502  * @gadget: gadget
503  * @mEp:    endpoint
504  *
505  * This function returns an error code
506  */
507 static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
508 {
509 	if (mReq->req.status != -EALREADY)
510 		return -EINVAL;
511 
512 	if ((TD_STATUS_ACTIVE & mReq->ptr->token) != 0)
513 		return -EBUSY;
514 
515 	if (mReq->zptr) {
516 		if ((TD_STATUS_ACTIVE & mReq->zptr->token) != 0)
517 			return -EBUSY;
518 		dma_pool_free(mEp->td_pool, mReq->zptr, mReq->zdma);
519 		mReq->zptr = NULL;
520 	}
521 
522 	mReq->req.status = 0;
523 
524 	usb_gadget_unmap_request(&mEp->ci->gadget, &mReq->req, mEp->dir);
525 
526 	mReq->req.status = mReq->ptr->token & TD_STATUS;
527 	if ((TD_STATUS_HALTED & mReq->req.status) != 0)
528 		mReq->req.status = -1;
529 	else if ((TD_STATUS_DT_ERR & mReq->req.status) != 0)
530 		mReq->req.status = -1;
531 	else if ((TD_STATUS_TR_ERR & mReq->req.status) != 0)
532 		mReq->req.status = -1;
533 
534 	mReq->req.actual   = mReq->ptr->token & TD_TOTAL_BYTES;
535 	mReq->req.actual >>= ffs_nr(TD_TOTAL_BYTES);
536 	mReq->req.actual   = mReq->req.length - mReq->req.actual;
537 	mReq->req.actual   = mReq->req.status ? 0 : mReq->req.actual;
538 
539 	return mReq->req.actual;
540 }
541 
542 /**
543  * _ep_nuke: dequeues all endpoint requests
544  * @mEp: endpoint
545  *
546  * This function returns an error code
547  * Caller must hold lock
548  */
549 static int _ep_nuke(struct ci13xxx_ep *mEp)
550 __releases(mEp->lock)
551 __acquires(mEp->lock)
552 {
553 	if (mEp == NULL)
554 		return -EINVAL;
555 
556 	hw_ep_flush(mEp->ci, mEp->num, mEp->dir);
557 
558 	while (!list_empty(&mEp->qh.queue)) {
559 
560 		/* pop oldest request */
561 		struct ci13xxx_req *mReq = \
562 			list_entry(mEp->qh.queue.next,
563 				   struct ci13xxx_req, queue);
564 		list_del_init(&mReq->queue);
565 		mReq->req.status = -ESHUTDOWN;
566 
567 		if (mReq->req.complete != NULL) {
568 			spin_unlock(mEp->lock);
569 			mReq->req.complete(&mEp->ep, &mReq->req);
570 			spin_lock(mEp->lock);
571 		}
572 	}
573 	return 0;
574 }
575 
576 /**
577  * _gadget_stop_activity: stops all USB activity, flushes & disables all endpts
578  * @gadget: gadget
579  *
580  * This function returns an error code
581  */
582 static int _gadget_stop_activity(struct usb_gadget *gadget)
583 {
584 	struct usb_ep *ep;
585 	struct ci13xxx    *ci = container_of(gadget, struct ci13xxx, gadget);
586 	unsigned long flags;
587 
588 	spin_lock_irqsave(&ci->lock, flags);
589 	ci->gadget.speed = USB_SPEED_UNKNOWN;
590 	ci->remote_wakeup = 0;
591 	ci->suspended = 0;
592 	spin_unlock_irqrestore(&ci->lock, flags);
593 
594 	/* flush all endpoints */
595 	gadget_for_each_ep(ep, gadget) {
596 		usb_ep_fifo_flush(ep);
597 	}
598 	usb_ep_fifo_flush(&ci->ep0out->ep);
599 	usb_ep_fifo_flush(&ci->ep0in->ep);
600 
601 	if (ci->driver)
602 		ci->driver->disconnect(gadget);
603 
604 	/* make sure to disable all endpoints */
605 	gadget_for_each_ep(ep, gadget) {
606 		usb_ep_disable(ep);
607 	}
608 
609 	if (ci->status != NULL) {
610 		usb_ep_free_request(&ci->ep0in->ep, ci->status);
611 		ci->status = NULL;
612 	}
613 
614 	return 0;
615 }
616 
617 /******************************************************************************
618  * ISR block
619  *****************************************************************************/
620 /**
621  * isr_reset_handler: USB reset interrupt handler
622  * @ci: UDC device
623  *
624  * This function resets USB engine after a bus reset occurred
625  */
626 static void isr_reset_handler(struct ci13xxx *ci)
627 __releases(ci->lock)
628 __acquires(ci->lock)
629 {
630 	int retval;
631 
632 	dbg_event(0xFF, "BUS RST", 0);
633 
634 	spin_unlock(&ci->lock);
635 	retval = _gadget_stop_activity(&ci->gadget);
636 	if (retval)
637 		goto done;
638 
639 	retval = hw_usb_reset(ci);
640 	if (retval)
641 		goto done;
642 
643 	ci->status = usb_ep_alloc_request(&ci->ep0in->ep, GFP_ATOMIC);
644 	if (ci->status == NULL)
645 		retval = -ENOMEM;
646 
647 done:
648 	spin_lock(&ci->lock);
649 
650 	if (retval)
651 		dev_err(ci->dev, "error: %i\n", retval);
652 }
653 
654 /**
655  * isr_get_status_complete: get_status request complete function
656  * @ep:  endpoint
657  * @req: request handled
658  *
659  * Caller must release lock
660  */
661 static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req)
662 {
663 	if (ep == NULL || req == NULL)
664 		return;
665 
666 	kfree(req->buf);
667 	usb_ep_free_request(ep, req);
668 }
669 
670 /**
671  * isr_get_status_response: get_status request response
672  * @ci: ci struct
673  * @setup: setup request packet
674  *
675  * This function returns an error code
676  */
677 static int isr_get_status_response(struct ci13xxx *ci,
678 				   struct usb_ctrlrequest *setup)
679 __releases(mEp->lock)
680 __acquires(mEp->lock)
681 {
682 	struct ci13xxx_ep *mEp = ci->ep0in;
683 	struct usb_request *req = NULL;
684 	gfp_t gfp_flags = GFP_ATOMIC;
685 	int dir, num, retval;
686 
687 	if (mEp == NULL || setup == NULL)
688 		return -EINVAL;
689 
690 	spin_unlock(mEp->lock);
691 	req = usb_ep_alloc_request(&mEp->ep, gfp_flags);
692 	spin_lock(mEp->lock);
693 	if (req == NULL)
694 		return -ENOMEM;
695 
696 	req->complete = isr_get_status_complete;
697 	req->length   = 2;
698 	req->buf      = kzalloc(req->length, gfp_flags);
699 	if (req->buf == NULL) {
700 		retval = -ENOMEM;
701 		goto err_free_req;
702 	}
703 
704 	if ((setup->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
705 		/* Assume that device is bus powered for now. */
706 		*(u16 *)req->buf = ci->remote_wakeup << 1;
707 		retval = 0;
708 	} else if ((setup->bRequestType & USB_RECIP_MASK) \
709 		   == USB_RECIP_ENDPOINT) {
710 		dir = (le16_to_cpu(setup->wIndex) & USB_ENDPOINT_DIR_MASK) ?
711 			TX : RX;
712 		num =  le16_to_cpu(setup->wIndex) & USB_ENDPOINT_NUMBER_MASK;
713 		*(u16 *)req->buf = hw_ep_get_halt(ci, num, dir);
714 	}
715 	/* else do nothing; reserved for future use */
716 
717 	spin_unlock(mEp->lock);
718 	retval = usb_ep_queue(&mEp->ep, req, gfp_flags);
719 	spin_lock(mEp->lock);
720 	if (retval)
721 		goto err_free_buf;
722 
723 	return 0;
724 
725  err_free_buf:
726 	kfree(req->buf);
727  err_free_req:
728 	spin_unlock(mEp->lock);
729 	usb_ep_free_request(&mEp->ep, req);
730 	spin_lock(mEp->lock);
731 	return retval;
732 }
733 
734 /**
735  * isr_setup_status_complete: setup_status request complete function
736  * @ep:  endpoint
737  * @req: request handled
738  *
739  * Caller must release lock. Put the port in test mode if test mode
740  * feature is selected.
741  */
742 static void
743 isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
744 {
745 	struct ci13xxx *ci = req->context;
746 	unsigned long flags;
747 
748 	if (ci->setaddr) {
749 		hw_usb_set_address(ci, ci->address);
750 		ci->setaddr = false;
751 	}
752 
753 	spin_lock_irqsave(&ci->lock, flags);
754 	if (ci->test_mode)
755 		hw_port_test_set(ci, ci->test_mode);
756 	spin_unlock_irqrestore(&ci->lock, flags);
757 }
758 
759 /**
760  * isr_setup_status_phase: queues the status phase of a setup transation
761  * @ci: ci struct
762  *
763  * This function returns an error code
764  */
765 static int isr_setup_status_phase(struct ci13xxx *ci)
766 __releases(mEp->lock)
767 __acquires(mEp->lock)
768 {
769 	int retval;
770 	struct ci13xxx_ep *mEp;
771 
772 	mEp = (ci->ep0_dir == TX) ? ci->ep0out : ci->ep0in;
773 	ci->status->context = ci;
774 	ci->status->complete = isr_setup_status_complete;
775 
776 	spin_unlock(mEp->lock);
777 	retval = usb_ep_queue(&mEp->ep, ci->status, GFP_ATOMIC);
778 	spin_lock(mEp->lock);
779 
780 	return retval;
781 }
782 
783 /**
784  * isr_tr_complete_low: transaction complete low level handler
785  * @mEp: endpoint
786  *
787  * This function returns an error code
788  * Caller must hold lock
789  */
790 static int isr_tr_complete_low(struct ci13xxx_ep *mEp)
791 __releases(mEp->lock)
792 __acquires(mEp->lock)
793 {
794 	struct ci13xxx_req *mReq, *mReqTemp;
795 	struct ci13xxx_ep *mEpTemp = mEp;
796 	int retval = 0;
797 
798 	list_for_each_entry_safe(mReq, mReqTemp, &mEp->qh.queue,
799 			queue) {
800 		retval = _hardware_dequeue(mEp, mReq);
801 		if (retval < 0)
802 			break;
803 		list_del_init(&mReq->queue);
804 		dbg_done(_usb_addr(mEp), mReq->ptr->token, retval);
805 		if (mReq->req.complete != NULL) {
806 			spin_unlock(mEp->lock);
807 			if ((mEp->type == USB_ENDPOINT_XFER_CONTROL) &&
808 					mReq->req.length)
809 				mEpTemp = mEp->ci->ep0in;
810 			mReq->req.complete(&mEpTemp->ep, &mReq->req);
811 			spin_lock(mEp->lock);
812 		}
813 	}
814 
815 	if (retval == -EBUSY)
816 		retval = 0;
817 	if (retval < 0)
818 		dbg_event(_usb_addr(mEp), "DONE", retval);
819 
820 	return retval;
821 }
822 
823 /**
824  * isr_tr_complete_handler: transaction complete interrupt handler
825  * @ci: UDC descriptor
826  *
827  * This function handles traffic events
828  */
829 static void isr_tr_complete_handler(struct ci13xxx *ci)
830 __releases(ci->lock)
831 __acquires(ci->lock)
832 {
833 	unsigned i;
834 	u8 tmode = 0;
835 
836 	for (i = 0; i < ci->hw_ep_max; i++) {
837 		struct ci13xxx_ep *mEp  = &ci->ci13xxx_ep[i];
838 		int type, num, dir, err = -EINVAL;
839 		struct usb_ctrlrequest req;
840 
841 		if (mEp->ep.desc == NULL)
842 			continue;   /* not configured */
843 
844 		if (hw_test_and_clear_complete(ci, i)) {
845 			err = isr_tr_complete_low(mEp);
846 			if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
847 				if (err > 0)   /* needs status phase */
848 					err = isr_setup_status_phase(ci);
849 				if (err < 0) {
850 					dbg_event(_usb_addr(mEp),
851 						  "ERROR", err);
852 					spin_unlock(&ci->lock);
853 					if (usb_ep_set_halt(&mEp->ep))
854 						dev_err(ci->dev,
855 							"error: ep_set_halt\n");
856 					spin_lock(&ci->lock);
857 				}
858 			}
859 		}
860 
861 		if (mEp->type != USB_ENDPOINT_XFER_CONTROL ||
862 		    !hw_test_and_clear_setup_status(ci, i))
863 			continue;
864 
865 		if (i != 0) {
866 			dev_warn(ci->dev, "ctrl traffic at endpoint %d\n", i);
867 			continue;
868 		}
869 
870 		/*
871 		 * Flush data and handshake transactions of previous
872 		 * setup packet.
873 		 */
874 		_ep_nuke(ci->ep0out);
875 		_ep_nuke(ci->ep0in);
876 
877 		/* read_setup_packet */
878 		do {
879 			hw_test_and_set_setup_guard(ci);
880 			memcpy(&req, &mEp->qh.ptr->setup, sizeof(req));
881 		} while (!hw_test_and_clear_setup_guard(ci));
882 
883 		type = req.bRequestType;
884 
885 		ci->ep0_dir = (type & USB_DIR_IN) ? TX : RX;
886 
887 		dbg_setup(_usb_addr(mEp), &req);
888 
889 		switch (req.bRequest) {
890 		case USB_REQ_CLEAR_FEATURE:
891 			if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
892 					le16_to_cpu(req.wValue) ==
893 					USB_ENDPOINT_HALT) {
894 				if (req.wLength != 0)
895 					break;
896 				num  = le16_to_cpu(req.wIndex);
897 				dir = num & USB_ENDPOINT_DIR_MASK;
898 				num &= USB_ENDPOINT_NUMBER_MASK;
899 				if (dir) /* TX */
900 					num += ci->hw_ep_max/2;
901 				if (!ci->ci13xxx_ep[num].wedge) {
902 					spin_unlock(&ci->lock);
903 					err = usb_ep_clear_halt(
904 						&ci->ci13xxx_ep[num].ep);
905 					spin_lock(&ci->lock);
906 					if (err)
907 						break;
908 				}
909 				err = isr_setup_status_phase(ci);
910 			} else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE) &&
911 					le16_to_cpu(req.wValue) ==
912 					USB_DEVICE_REMOTE_WAKEUP) {
913 				if (req.wLength != 0)
914 					break;
915 				ci->remote_wakeup = 0;
916 				err = isr_setup_status_phase(ci);
917 			} else {
918 				goto delegate;
919 			}
920 			break;
921 		case USB_REQ_GET_STATUS:
922 			if (type != (USB_DIR_IN|USB_RECIP_DEVICE)   &&
923 			    type != (USB_DIR_IN|USB_RECIP_ENDPOINT) &&
924 			    type != (USB_DIR_IN|USB_RECIP_INTERFACE))
925 				goto delegate;
926 			if (le16_to_cpu(req.wLength) != 2 ||
927 			    le16_to_cpu(req.wValue)  != 0)
928 				break;
929 			err = isr_get_status_response(ci, &req);
930 			break;
931 		case USB_REQ_SET_ADDRESS:
932 			if (type != (USB_DIR_OUT|USB_RECIP_DEVICE))
933 				goto delegate;
934 			if (le16_to_cpu(req.wLength) != 0 ||
935 			    le16_to_cpu(req.wIndex)  != 0)
936 				break;
937 			ci->address = (u8)le16_to_cpu(req.wValue);
938 			ci->setaddr = true;
939 			err = isr_setup_status_phase(ci);
940 			break;
941 		case USB_REQ_SET_FEATURE:
942 			if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
943 					le16_to_cpu(req.wValue) ==
944 					USB_ENDPOINT_HALT) {
945 				if (req.wLength != 0)
946 					break;
947 				num  = le16_to_cpu(req.wIndex);
948 				dir = num & USB_ENDPOINT_DIR_MASK;
949 				num &= USB_ENDPOINT_NUMBER_MASK;
950 				if (dir) /* TX */
951 					num += ci->hw_ep_max/2;
952 
953 				spin_unlock(&ci->lock);
954 				err = usb_ep_set_halt(&ci->ci13xxx_ep[num].ep);
955 				spin_lock(&ci->lock);
956 				if (!err)
957 					isr_setup_status_phase(ci);
958 			} else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE)) {
959 				if (req.wLength != 0)
960 					break;
961 				switch (le16_to_cpu(req.wValue)) {
962 				case USB_DEVICE_REMOTE_WAKEUP:
963 					ci->remote_wakeup = 1;
964 					err = isr_setup_status_phase(ci);
965 					break;
966 				case USB_DEVICE_TEST_MODE:
967 					tmode = le16_to_cpu(req.wIndex) >> 8;
968 					switch (tmode) {
969 					case TEST_J:
970 					case TEST_K:
971 					case TEST_SE0_NAK:
972 					case TEST_PACKET:
973 					case TEST_FORCE_EN:
974 						ci->test_mode = tmode;
975 						err = isr_setup_status_phase(
976 								ci);
977 						break;
978 					default:
979 						break;
980 					}
981 				default:
982 					goto delegate;
983 				}
984 			} else {
985 				goto delegate;
986 			}
987 			break;
988 		default:
989 delegate:
990 			if (req.wLength == 0)   /* no data phase */
991 				ci->ep0_dir = TX;
992 
993 			spin_unlock(&ci->lock);
994 			err = ci->driver->setup(&ci->gadget, &req);
995 			spin_lock(&ci->lock);
996 			break;
997 		}
998 
999 		if (err < 0) {
1000 			dbg_event(_usb_addr(mEp), "ERROR", err);
1001 
1002 			spin_unlock(&ci->lock);
1003 			if (usb_ep_set_halt(&mEp->ep))
1004 				dev_err(ci->dev, "error: ep_set_halt\n");
1005 			spin_lock(&ci->lock);
1006 		}
1007 	}
1008 }
1009 
1010 /******************************************************************************
1011  * ENDPT block
1012  *****************************************************************************/
1013 /**
1014  * ep_enable: configure endpoint, making it usable
1015  *
1016  * Check usb_ep_enable() at "usb_gadget.h" for details
1017  */
1018 static int ep_enable(struct usb_ep *ep,
1019 		     const struct usb_endpoint_descriptor *desc)
1020 {
1021 	struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1022 	int retval = 0;
1023 	unsigned long flags;
1024 
1025 	if (ep == NULL || desc == NULL)
1026 		return -EINVAL;
1027 
1028 	spin_lock_irqsave(mEp->lock, flags);
1029 
1030 	/* only internal SW should enable ctrl endpts */
1031 
1032 	mEp->ep.desc = desc;
1033 
1034 	if (!list_empty(&mEp->qh.queue))
1035 		dev_warn(mEp->ci->dev, "enabling a non-empty endpoint!\n");
1036 
1037 	mEp->dir  = usb_endpoint_dir_in(desc) ? TX : RX;
1038 	mEp->num  = usb_endpoint_num(desc);
1039 	mEp->type = usb_endpoint_type(desc);
1040 
1041 	mEp->ep.maxpacket = usb_endpoint_maxp(desc);
1042 
1043 	dbg_event(_usb_addr(mEp), "ENABLE", 0);
1044 
1045 	mEp->qh.ptr->cap = 0;
1046 
1047 	if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1048 		mEp->qh.ptr->cap |=  QH_IOS;
1049 	else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
1050 		mEp->qh.ptr->cap &= ~QH_MULT;
1051 	else
1052 		mEp->qh.ptr->cap &= ~QH_ZLT;
1053 
1054 	mEp->qh.ptr->cap |=
1055 		(mEp->ep.maxpacket << ffs_nr(QH_MAX_PKT)) & QH_MAX_PKT;
1056 	mEp->qh.ptr->td.next |= TD_TERMINATE;   /* needed? */
1057 
1058 	/*
1059 	 * Enable endpoints in the HW other than ep0 as ep0
1060 	 * is always enabled
1061 	 */
1062 	if (mEp->num)
1063 		retval |= hw_ep_enable(mEp->ci, mEp->num, mEp->dir, mEp->type);
1064 
1065 	spin_unlock_irqrestore(mEp->lock, flags);
1066 	return retval;
1067 }
1068 
1069 /**
1070  * ep_disable: endpoint is no longer usable
1071  *
1072  * Check usb_ep_disable() at "usb_gadget.h" for details
1073  */
1074 static int ep_disable(struct usb_ep *ep)
1075 {
1076 	struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1077 	int direction, retval = 0;
1078 	unsigned long flags;
1079 
1080 	if (ep == NULL)
1081 		return -EINVAL;
1082 	else if (mEp->ep.desc == NULL)
1083 		return -EBUSY;
1084 
1085 	spin_lock_irqsave(mEp->lock, flags);
1086 
1087 	/* only internal SW should disable ctrl endpts */
1088 
1089 	direction = mEp->dir;
1090 	do {
1091 		dbg_event(_usb_addr(mEp), "DISABLE", 0);
1092 
1093 		retval |= _ep_nuke(mEp);
1094 		retval |= hw_ep_disable(mEp->ci, mEp->num, mEp->dir);
1095 
1096 		if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1097 			mEp->dir = (mEp->dir == TX) ? RX : TX;
1098 
1099 	} while (mEp->dir != direction);
1100 
1101 	mEp->ep.desc = NULL;
1102 
1103 	spin_unlock_irqrestore(mEp->lock, flags);
1104 	return retval;
1105 }
1106 
1107 /**
1108  * ep_alloc_request: allocate a request object to use with this endpoint
1109  *
1110  * Check usb_ep_alloc_request() at "usb_gadget.h" for details
1111  */
1112 static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1113 {
1114 	struct ci13xxx_ep  *mEp  = container_of(ep, struct ci13xxx_ep, ep);
1115 	struct ci13xxx_req *mReq = NULL;
1116 
1117 	if (ep == NULL)
1118 		return NULL;
1119 
1120 	mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags);
1121 	if (mReq != NULL) {
1122 		INIT_LIST_HEAD(&mReq->queue);
1123 
1124 		mReq->ptr = dma_pool_alloc(mEp->td_pool, gfp_flags,
1125 					   &mReq->dma);
1126 		if (mReq->ptr == NULL) {
1127 			kfree(mReq);
1128 			mReq = NULL;
1129 		}
1130 	}
1131 
1132 	dbg_event(_usb_addr(mEp), "ALLOC", mReq == NULL);
1133 
1134 	return (mReq == NULL) ? NULL : &mReq->req;
1135 }
1136 
1137 /**
1138  * ep_free_request: frees a request object
1139  *
1140  * Check usb_ep_free_request() at "usb_gadget.h" for details
1141  */
1142 static void ep_free_request(struct usb_ep *ep, struct usb_request *req)
1143 {
1144 	struct ci13xxx_ep  *mEp  = container_of(ep,  struct ci13xxx_ep, ep);
1145 	struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1146 	unsigned long flags;
1147 
1148 	if (ep == NULL || req == NULL) {
1149 		return;
1150 	} else if (!list_empty(&mReq->queue)) {
1151 		dev_err(mEp->ci->dev, "freeing queued request\n");
1152 		return;
1153 	}
1154 
1155 	spin_lock_irqsave(mEp->lock, flags);
1156 
1157 	if (mReq->ptr)
1158 		dma_pool_free(mEp->td_pool, mReq->ptr, mReq->dma);
1159 	kfree(mReq);
1160 
1161 	dbg_event(_usb_addr(mEp), "FREE", 0);
1162 
1163 	spin_unlock_irqrestore(mEp->lock, flags);
1164 }
1165 
1166 /**
1167  * ep_queue: queues (submits) an I/O request to an endpoint
1168  *
1169  * Check usb_ep_queue()* at usb_gadget.h" for details
1170  */
1171 static int ep_queue(struct usb_ep *ep, struct usb_request *req,
1172 		    gfp_t __maybe_unused gfp_flags)
1173 {
1174 	struct ci13xxx_ep  *mEp  = container_of(ep,  struct ci13xxx_ep, ep);
1175 	struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1176 	struct ci13xxx *ci = mEp->ci;
1177 	int retval = 0;
1178 	unsigned long flags;
1179 
1180 	if (ep == NULL || req == NULL || mEp->ep.desc == NULL)
1181 		return -EINVAL;
1182 
1183 	spin_lock_irqsave(mEp->lock, flags);
1184 
1185 	if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
1186 		if (req->length)
1187 			mEp = (ci->ep0_dir == RX) ?
1188 			       ci->ep0out : ci->ep0in;
1189 		if (!list_empty(&mEp->qh.queue)) {
1190 			_ep_nuke(mEp);
1191 			retval = -EOVERFLOW;
1192 			dev_warn(mEp->ci->dev, "endpoint ctrl %X nuked\n",
1193 				 _usb_addr(mEp));
1194 		}
1195 	}
1196 
1197 	/* first nuke then test link, e.g. previous status has not sent */
1198 	if (!list_empty(&mReq->queue)) {
1199 		retval = -EBUSY;
1200 		dev_err(mEp->ci->dev, "request already in queue\n");
1201 		goto done;
1202 	}
1203 
1204 	if (req->length > 4 * CI13XXX_PAGE_SIZE) {
1205 		req->length = 4 * CI13XXX_PAGE_SIZE;
1206 		retval = -EMSGSIZE;
1207 		dev_warn(mEp->ci->dev, "request length truncated\n");
1208 	}
1209 
1210 	dbg_queue(_usb_addr(mEp), req, retval);
1211 
1212 	/* push request */
1213 	mReq->req.status = -EINPROGRESS;
1214 	mReq->req.actual = 0;
1215 
1216 	retval = _hardware_enqueue(mEp, mReq);
1217 
1218 	if (retval == -EALREADY) {
1219 		dbg_event(_usb_addr(mEp), "QUEUE", retval);
1220 		retval = 0;
1221 	}
1222 	if (!retval)
1223 		list_add_tail(&mReq->queue, &mEp->qh.queue);
1224 
1225  done:
1226 	spin_unlock_irqrestore(mEp->lock, flags);
1227 	return retval;
1228 }
1229 
1230 /**
1231  * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint
1232  *
1233  * Check usb_ep_dequeue() at "usb_gadget.h" for details
1234  */
1235 static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
1236 {
1237 	struct ci13xxx_ep  *mEp  = container_of(ep,  struct ci13xxx_ep, ep);
1238 	struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1239 	unsigned long flags;
1240 
1241 	if (ep == NULL || req == NULL || mReq->req.status != -EALREADY ||
1242 		mEp->ep.desc == NULL || list_empty(&mReq->queue) ||
1243 		list_empty(&mEp->qh.queue))
1244 		return -EINVAL;
1245 
1246 	spin_lock_irqsave(mEp->lock, flags);
1247 
1248 	dbg_event(_usb_addr(mEp), "DEQUEUE", 0);
1249 
1250 	hw_ep_flush(mEp->ci, mEp->num, mEp->dir);
1251 
1252 	/* pop request */
1253 	list_del_init(&mReq->queue);
1254 
1255 	usb_gadget_unmap_request(&mEp->ci->gadget, req, mEp->dir);
1256 
1257 	req->status = -ECONNRESET;
1258 
1259 	if (mReq->req.complete != NULL) {
1260 		spin_unlock(mEp->lock);
1261 		mReq->req.complete(&mEp->ep, &mReq->req);
1262 		spin_lock(mEp->lock);
1263 	}
1264 
1265 	spin_unlock_irqrestore(mEp->lock, flags);
1266 	return 0;
1267 }
1268 
1269 /**
1270  * ep_set_halt: sets the endpoint halt feature
1271  *
1272  * Check usb_ep_set_halt() at "usb_gadget.h" for details
1273  */
1274 static int ep_set_halt(struct usb_ep *ep, int value)
1275 {
1276 	struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1277 	int direction, retval = 0;
1278 	unsigned long flags;
1279 
1280 	if (ep == NULL || mEp->ep.desc == NULL)
1281 		return -EINVAL;
1282 
1283 	spin_lock_irqsave(mEp->lock, flags);
1284 
1285 #ifndef STALL_IN
1286 	/* g_file_storage MS compliant but g_zero fails chapter 9 compliance */
1287 	if (value && mEp->type == USB_ENDPOINT_XFER_BULK && mEp->dir == TX &&
1288 	    !list_empty(&mEp->qh.queue)) {
1289 		spin_unlock_irqrestore(mEp->lock, flags);
1290 		return -EAGAIN;
1291 	}
1292 #endif
1293 
1294 	direction = mEp->dir;
1295 	do {
1296 		dbg_event(_usb_addr(mEp), "HALT", value);
1297 		retval |= hw_ep_set_halt(mEp->ci, mEp->num, mEp->dir, value);
1298 
1299 		if (!value)
1300 			mEp->wedge = 0;
1301 
1302 		if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1303 			mEp->dir = (mEp->dir == TX) ? RX : TX;
1304 
1305 	} while (mEp->dir != direction);
1306 
1307 	spin_unlock_irqrestore(mEp->lock, flags);
1308 	return retval;
1309 }
1310 
1311 /**
1312  * ep_set_wedge: sets the halt feature and ignores clear requests
1313  *
1314  * Check usb_ep_set_wedge() at "usb_gadget.h" for details
1315  */
1316 static int ep_set_wedge(struct usb_ep *ep)
1317 {
1318 	struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1319 	unsigned long flags;
1320 
1321 	if (ep == NULL || mEp->ep.desc == NULL)
1322 		return -EINVAL;
1323 
1324 	spin_lock_irqsave(mEp->lock, flags);
1325 
1326 	dbg_event(_usb_addr(mEp), "WEDGE", 0);
1327 	mEp->wedge = 1;
1328 
1329 	spin_unlock_irqrestore(mEp->lock, flags);
1330 
1331 	return usb_ep_set_halt(ep);
1332 }
1333 
1334 /**
1335  * ep_fifo_flush: flushes contents of a fifo
1336  *
1337  * Check usb_ep_fifo_flush() at "usb_gadget.h" for details
1338  */
1339 static void ep_fifo_flush(struct usb_ep *ep)
1340 {
1341 	struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1342 	unsigned long flags;
1343 
1344 	if (ep == NULL) {
1345 		dev_err(mEp->ci->dev, "%02X: -EINVAL\n", _usb_addr(mEp));
1346 		return;
1347 	}
1348 
1349 	spin_lock_irqsave(mEp->lock, flags);
1350 
1351 	dbg_event(_usb_addr(mEp), "FFLUSH", 0);
1352 	hw_ep_flush(mEp->ci, mEp->num, mEp->dir);
1353 
1354 	spin_unlock_irqrestore(mEp->lock, flags);
1355 }
1356 
1357 /**
1358  * Endpoint-specific part of the API to the USB controller hardware
1359  * Check "usb_gadget.h" for details
1360  */
1361 static const struct usb_ep_ops usb_ep_ops = {
1362 	.enable	       = ep_enable,
1363 	.disable       = ep_disable,
1364 	.alloc_request = ep_alloc_request,
1365 	.free_request  = ep_free_request,
1366 	.queue	       = ep_queue,
1367 	.dequeue       = ep_dequeue,
1368 	.set_halt      = ep_set_halt,
1369 	.set_wedge     = ep_set_wedge,
1370 	.fifo_flush    = ep_fifo_flush,
1371 };
1372 
1373 /******************************************************************************
1374  * GADGET block
1375  *****************************************************************************/
1376 static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active)
1377 {
1378 	struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
1379 	unsigned long flags;
1380 	int gadget_ready = 0;
1381 
1382 	if (!(ci->platdata->flags & CI13XXX_PULLUP_ON_VBUS))
1383 		return -EOPNOTSUPP;
1384 
1385 	spin_lock_irqsave(&ci->lock, flags);
1386 	ci->vbus_active = is_active;
1387 	if (ci->driver)
1388 		gadget_ready = 1;
1389 	spin_unlock_irqrestore(&ci->lock, flags);
1390 
1391 	if (gadget_ready) {
1392 		if (is_active) {
1393 			pm_runtime_get_sync(&_gadget->dev);
1394 			hw_device_reset(ci, USBMODE_CM_DC);
1395 			hw_enable_vbus_intr(ci);
1396 			hw_device_state(ci, ci->ep0out->qh.dma);
1397 		} else {
1398 			hw_device_state(ci, 0);
1399 			if (ci->platdata->notify_event)
1400 				ci->platdata->notify_event(ci,
1401 				CI13XXX_CONTROLLER_STOPPED_EVENT);
1402 			_gadget_stop_activity(&ci->gadget);
1403 			pm_runtime_put_sync(&_gadget->dev);
1404 		}
1405 	}
1406 
1407 	return 0;
1408 }
1409 
1410 static int ci13xxx_wakeup(struct usb_gadget *_gadget)
1411 {
1412 	struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
1413 	unsigned long flags;
1414 	int ret = 0;
1415 
1416 	spin_lock_irqsave(&ci->lock, flags);
1417 	if (!ci->remote_wakeup) {
1418 		ret = -EOPNOTSUPP;
1419 		goto out;
1420 	}
1421 	if (!hw_read(ci, OP_PORTSC, PORTSC_SUSP)) {
1422 		ret = -EINVAL;
1423 		goto out;
1424 	}
1425 	hw_write(ci, OP_PORTSC, PORTSC_FPR, PORTSC_FPR);
1426 out:
1427 	spin_unlock_irqrestore(&ci->lock, flags);
1428 	return ret;
1429 }
1430 
1431 static int ci13xxx_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1432 {
1433 	struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
1434 
1435 	if (ci->transceiver)
1436 		return usb_phy_set_power(ci->transceiver, mA);
1437 	return -ENOTSUPP;
1438 }
1439 
1440 /* Change Data+ pullup status
1441  * this func is used by usb_gadget_connect/disconnet
1442  */
1443 static int ci13xxx_pullup(struct usb_gadget *_gadget, int is_on)
1444 {
1445 	struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
1446 
1447 	if (is_on)
1448 		hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS);
1449 	else
1450 		hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
1451 
1452 	return 0;
1453 }
1454 
1455 static int ci13xxx_start(struct usb_gadget *gadget,
1456 			 struct usb_gadget_driver *driver);
1457 static int ci13xxx_stop(struct usb_gadget *gadget,
1458 			struct usb_gadget_driver *driver);
1459 /**
1460  * Device operations part of the API to the USB controller hardware,
1461  * which don't involve endpoints (or i/o)
1462  * Check  "usb_gadget.h" for details
1463  */
1464 static const struct usb_gadget_ops usb_gadget_ops = {
1465 	.vbus_session	= ci13xxx_vbus_session,
1466 	.wakeup		= ci13xxx_wakeup,
1467 	.pullup		= ci13xxx_pullup,
1468 	.vbus_draw	= ci13xxx_vbus_draw,
1469 	.udc_start	= ci13xxx_start,
1470 	.udc_stop	= ci13xxx_stop,
1471 };
1472 
1473 static int init_eps(struct ci13xxx *ci)
1474 {
1475 	int retval = 0, i, j;
1476 
1477 	for (i = 0; i < ci->hw_ep_max/2; i++)
1478 		for (j = RX; j <= TX; j++) {
1479 			int k = i + j * ci->hw_ep_max/2;
1480 			struct ci13xxx_ep *mEp = &ci->ci13xxx_ep[k];
1481 
1482 			scnprintf(mEp->name, sizeof(mEp->name), "ep%i%s", i,
1483 					(j == TX)  ? "in" : "out");
1484 
1485 			mEp->ci          = ci;
1486 			mEp->lock         = &ci->lock;
1487 			mEp->td_pool      = ci->td_pool;
1488 
1489 			mEp->ep.name      = mEp->name;
1490 			mEp->ep.ops       = &usb_ep_ops;
1491 			/*
1492 			 * for ep0: maxP defined in desc, for other
1493 			 * eps, maxP is set by epautoconfig() called
1494 			 * by gadget layer
1495 			 */
1496 			mEp->ep.maxpacket = (unsigned short)~0;
1497 
1498 			INIT_LIST_HEAD(&mEp->qh.queue);
1499 			mEp->qh.ptr = dma_pool_alloc(ci->qh_pool, GFP_KERNEL,
1500 						     &mEp->qh.dma);
1501 			if (mEp->qh.ptr == NULL)
1502 				retval = -ENOMEM;
1503 			else
1504 				memset(mEp->qh.ptr, 0, sizeof(*mEp->qh.ptr));
1505 
1506 			/*
1507 			 * set up shorthands for ep0 out and in endpoints,
1508 			 * don't add to gadget's ep_list
1509 			 */
1510 			if (i == 0) {
1511 				if (j == RX)
1512 					ci->ep0out = mEp;
1513 				else
1514 					ci->ep0in = mEp;
1515 
1516 				mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
1517 				continue;
1518 			}
1519 
1520 			list_add_tail(&mEp->ep.ep_list, &ci->gadget.ep_list);
1521 		}
1522 
1523 	return retval;
1524 }
1525 
1526 static void destroy_eps(struct ci13xxx *ci)
1527 {
1528 	int i;
1529 
1530 	for (i = 0; i < ci->hw_ep_max; i++) {
1531 		struct ci13xxx_ep *mEp = &ci->ci13xxx_ep[i];
1532 
1533 		dma_pool_free(ci->qh_pool, mEp->qh.ptr, mEp->qh.dma);
1534 	}
1535 }
1536 
1537 /**
1538  * ci13xxx_start: register a gadget driver
1539  * @gadget: our gadget
1540  * @driver: the driver being registered
1541  *
1542  * Interrupts are enabled here.
1543  */
1544 static int ci13xxx_start(struct usb_gadget *gadget,
1545 			 struct usb_gadget_driver *driver)
1546 {
1547 	struct ci13xxx *ci = container_of(gadget, struct ci13xxx, gadget);
1548 	unsigned long flags;
1549 	int retval = -ENOMEM;
1550 
1551 	if (driver->disconnect == NULL)
1552 		return -EINVAL;
1553 
1554 
1555 	ci->ep0out->ep.desc = &ctrl_endpt_out_desc;
1556 	retval = usb_ep_enable(&ci->ep0out->ep);
1557 	if (retval)
1558 		return retval;
1559 
1560 	ci->ep0in->ep.desc = &ctrl_endpt_in_desc;
1561 	retval = usb_ep_enable(&ci->ep0in->ep);
1562 	if (retval)
1563 		return retval;
1564 	spin_lock_irqsave(&ci->lock, flags);
1565 
1566 	ci->driver = driver;
1567 	pm_runtime_get_sync(&ci->gadget.dev);
1568 	if (ci->platdata->flags & CI13XXX_PULLUP_ON_VBUS) {
1569 		if (ci->vbus_active) {
1570 			if (ci->platdata->flags & CI13XXX_REGS_SHARED) {
1571 				hw_device_reset(ci, USBMODE_CM_DC);
1572 				hw_enable_vbus_intr(ci);
1573 			}
1574 		} else {
1575 			pm_runtime_put_sync(&ci->gadget.dev);
1576 			goto done;
1577 		}
1578 	}
1579 
1580 	retval = hw_device_state(ci, ci->ep0out->qh.dma);
1581 	if (retval)
1582 		pm_runtime_put_sync(&ci->gadget.dev);
1583 
1584  done:
1585 	spin_unlock_irqrestore(&ci->lock, flags);
1586 	return retval;
1587 }
1588 
1589 /**
1590  * ci13xxx_stop: unregister a gadget driver
1591  */
1592 static int ci13xxx_stop(struct usb_gadget *gadget,
1593 			struct usb_gadget_driver *driver)
1594 {
1595 	struct ci13xxx *ci = container_of(gadget, struct ci13xxx, gadget);
1596 	unsigned long flags;
1597 
1598 	spin_lock_irqsave(&ci->lock, flags);
1599 
1600 	if (!(ci->platdata->flags & CI13XXX_PULLUP_ON_VBUS) ||
1601 			ci->vbus_active) {
1602 		hw_device_state(ci, 0);
1603 		if (ci->platdata->notify_event)
1604 			ci->platdata->notify_event(ci,
1605 			CI13XXX_CONTROLLER_STOPPED_EVENT);
1606 		ci->driver = NULL;
1607 		spin_unlock_irqrestore(&ci->lock, flags);
1608 		_gadget_stop_activity(&ci->gadget);
1609 		spin_lock_irqsave(&ci->lock, flags);
1610 		pm_runtime_put(&ci->gadget.dev);
1611 	}
1612 
1613 	spin_unlock_irqrestore(&ci->lock, flags);
1614 
1615 	return 0;
1616 }
1617 
1618 /******************************************************************************
1619  * BUS block
1620  *****************************************************************************/
1621 /**
1622  * udc_irq: ci interrupt handler
1623  *
1624  * This function returns IRQ_HANDLED if the IRQ has been handled
1625  * It locks access to registers
1626  */
1627 static irqreturn_t udc_irq(struct ci13xxx *ci)
1628 {
1629 	irqreturn_t retval;
1630 	u32 intr;
1631 
1632 	if (ci == NULL)
1633 		return IRQ_HANDLED;
1634 
1635 	spin_lock(&ci->lock);
1636 
1637 	if (ci->platdata->flags & CI13XXX_REGS_SHARED) {
1638 		if (hw_read(ci, OP_USBMODE, USBMODE_CM) !=
1639 				USBMODE_CM_DC) {
1640 			spin_unlock(&ci->lock);
1641 			return IRQ_NONE;
1642 		}
1643 	}
1644 	intr = hw_test_and_clear_intr_active(ci);
1645 	dbg_interrupt(intr);
1646 
1647 	if (intr) {
1648 		/* order defines priority - do NOT change it */
1649 		if (USBi_URI & intr)
1650 			isr_reset_handler(ci);
1651 
1652 		if (USBi_PCI & intr) {
1653 			ci->gadget.speed = hw_port_is_high_speed(ci) ?
1654 				USB_SPEED_HIGH : USB_SPEED_FULL;
1655 			if (ci->suspended && ci->driver->resume) {
1656 				spin_unlock(&ci->lock);
1657 				ci->driver->resume(&ci->gadget);
1658 				spin_lock(&ci->lock);
1659 				ci->suspended = 0;
1660 			}
1661 		}
1662 
1663 		if (USBi_UI  & intr)
1664 			isr_tr_complete_handler(ci);
1665 
1666 		if (USBi_SLI & intr) {
1667 			if (ci->gadget.speed != USB_SPEED_UNKNOWN &&
1668 			    ci->driver->suspend) {
1669 				ci->suspended = 1;
1670 				spin_unlock(&ci->lock);
1671 				ci->driver->suspend(&ci->gadget);
1672 				spin_lock(&ci->lock);
1673 			}
1674 		}
1675 		retval = IRQ_HANDLED;
1676 	} else {
1677 		retval = IRQ_NONE;
1678 	}
1679 
1680 	intr = hw_read(ci, OP_OTGSC, ~0);
1681 	hw_write(ci, OP_OTGSC, ~0, intr);
1682 
1683 	if (intr & (OTGSC_AVVIE & OTGSC_AVVIS))
1684 		queue_work(ci->wq, &ci->vbus_work);
1685 
1686 	spin_unlock(&ci->lock);
1687 
1688 	return retval;
1689 }
1690 
1691 /**
1692  * udc_release: driver release function
1693  * @dev: device
1694  *
1695  * Currently does nothing
1696  */
1697 static void udc_release(struct device *dev)
1698 {
1699 }
1700 
1701 /**
1702  * udc_start: initialize gadget role
1703  * @ci: chipidea controller
1704  */
1705 static int udc_start(struct ci13xxx *ci)
1706 {
1707 	struct device *dev = ci->dev;
1708 	int retval = 0;
1709 
1710 	spin_lock_init(&ci->lock);
1711 
1712 	ci->gadget.ops          = &usb_gadget_ops;
1713 	ci->gadget.speed        = USB_SPEED_UNKNOWN;
1714 	ci->gadget.max_speed    = USB_SPEED_HIGH;
1715 	ci->gadget.is_otg       = 0;
1716 	ci->gadget.name         = ci->platdata->name;
1717 
1718 	INIT_LIST_HEAD(&ci->gadget.ep_list);
1719 
1720 	dev_set_name(&ci->gadget.dev, "gadget");
1721 	ci->gadget.dev.dma_mask = dev->dma_mask;
1722 	ci->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask;
1723 	ci->gadget.dev.parent   = dev;
1724 	ci->gadget.dev.release  = udc_release;
1725 
1726 	/* alloc resources */
1727 	ci->qh_pool = dma_pool_create("ci13xxx_qh", dev,
1728 				       sizeof(struct ci13xxx_qh),
1729 				       64, CI13XXX_PAGE_SIZE);
1730 	if (ci->qh_pool == NULL)
1731 		return -ENOMEM;
1732 
1733 	ci->td_pool = dma_pool_create("ci13xxx_td", dev,
1734 				       sizeof(struct ci13xxx_td),
1735 				       64, CI13XXX_PAGE_SIZE);
1736 	if (ci->td_pool == NULL) {
1737 		retval = -ENOMEM;
1738 		goto free_qh_pool;
1739 	}
1740 
1741 	retval = init_eps(ci);
1742 	if (retval)
1743 		goto free_pools;
1744 
1745 	ci->gadget.ep0 = &ci->ep0in->ep;
1746 
1747 	if (ci->global_phy)
1748 		ci->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
1749 
1750 	if (ci->platdata->flags & CI13XXX_REQUIRE_TRANSCEIVER) {
1751 		if (ci->transceiver == NULL) {
1752 			retval = -ENODEV;
1753 			goto destroy_eps;
1754 		}
1755 	}
1756 
1757 	if (!(ci->platdata->flags & CI13XXX_REGS_SHARED)) {
1758 		retval = hw_device_reset(ci, USBMODE_CM_DC);
1759 		if (retval)
1760 			goto put_transceiver;
1761 		hw_enable_vbus_intr(ci);
1762 	}
1763 
1764 	retval = device_register(&ci->gadget.dev);
1765 	if (retval) {
1766 		put_device(&ci->gadget.dev);
1767 		goto put_transceiver;
1768 	}
1769 
1770 	retval = dbg_create_files(&ci->gadget.dev);
1771 	if (retval)
1772 		goto unreg_device;
1773 
1774 	if (!IS_ERR_OR_NULL(ci->transceiver)) {
1775 		retval = otg_set_peripheral(ci->transceiver->otg,
1776 						&ci->gadget);
1777 		if (retval)
1778 			goto remove_dbg;
1779 	}
1780 
1781 	retval = usb_add_gadget_udc(dev, &ci->gadget);
1782 	if (retval)
1783 		goto remove_trans;
1784 
1785 	pm_runtime_no_callbacks(&ci->gadget.dev);
1786 	pm_runtime_enable(&ci->gadget.dev);
1787 
1788 	return retval;
1789 
1790 remove_trans:
1791 	if (!IS_ERR_OR_NULL(ci->transceiver)) {
1792 		otg_set_peripheral(ci->transceiver->otg, NULL);
1793 		if (ci->global_phy)
1794 			usb_put_phy(ci->transceiver);
1795 	}
1796 
1797 	dev_err(dev, "error = %i\n", retval);
1798 remove_dbg:
1799 	dbg_remove_files(&ci->gadget.dev);
1800 unreg_device:
1801 	device_unregister(&ci->gadget.dev);
1802 put_transceiver:
1803 	if (!IS_ERR_OR_NULL(ci->transceiver) && ci->global_phy)
1804 		usb_put_phy(ci->transceiver);
1805 destroy_eps:
1806 	destroy_eps(ci);
1807 free_pools:
1808 	dma_pool_destroy(ci->td_pool);
1809 free_qh_pool:
1810 	dma_pool_destroy(ci->qh_pool);
1811 	return retval;
1812 }
1813 
1814 /**
1815  * udc_remove: parent remove must call this to remove UDC
1816  *
1817  * No interrupts active, the IRQ has been released
1818  */
1819 static void udc_stop(struct ci13xxx *ci)
1820 {
1821 	if (ci == NULL)
1822 		return;
1823 
1824 	hw_disable_vbus_intr(ci);
1825 	cancel_work_sync(&ci->vbus_work);
1826 
1827 	usb_del_gadget_udc(&ci->gadget);
1828 
1829 	destroy_eps(ci);
1830 
1831 	dma_pool_destroy(ci->td_pool);
1832 	dma_pool_destroy(ci->qh_pool);
1833 
1834 	if (!IS_ERR_OR_NULL(ci->transceiver)) {
1835 		otg_set_peripheral(ci->transceiver->otg, NULL);
1836 		if (ci->global_phy)
1837 			usb_put_phy(ci->transceiver);
1838 	}
1839 	dbg_remove_files(&ci->gadget.dev);
1840 	device_unregister(&ci->gadget.dev);
1841 	/* my kobject is dynamic, I swear! */
1842 	memset(&ci->gadget, 0, sizeof(ci->gadget));
1843 }
1844 
1845 /**
1846  * ci_hdrc_gadget_init - initialize device related bits
1847  * ci: the controller
1848  *
1849  * This function enables the gadget role, if the device is "device capable".
1850  */
1851 int ci_hdrc_gadget_init(struct ci13xxx *ci)
1852 {
1853 	struct ci_role_driver *rdrv;
1854 
1855 	if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DC))
1856 		return -ENXIO;
1857 
1858 	rdrv = devm_kzalloc(ci->dev, sizeof(struct ci_role_driver), GFP_KERNEL);
1859 	if (!rdrv)
1860 		return -ENOMEM;
1861 
1862 	rdrv->start	= udc_start;
1863 	rdrv->stop	= udc_stop;
1864 	rdrv->irq	= udc_irq;
1865 	rdrv->name	= "gadget";
1866 	ci->roles[CI_ROLE_GADGET] = rdrv;
1867 	INIT_WORK(&ci->vbus_work, vbus_work);
1868 
1869 	return 0;
1870 }
1871