1 /*
2  * Copyright (C) 2011 Marvell International Ltd. All rights reserved.
3  * Author: Chao Xie <chao.xie@marvell.com>
4  *	   Neil Zhang <zhangwm@marvell.com>
5  *
6  * This program is free software; you can redistribute  it and/or modify it
7  * under  the terms of  the GNU General  Public License as published by the
8  * Free Software Foundation;  either version 2 of the  License, or (at your
9  * option) any later version.
10  */
11 
12 #include <linux/module.h>
13 #include <linux/pci.h>
14 #include <linux/dma-mapping.h>
15 #include <linux/dmapool.h>
16 #include <linux/kernel.h>
17 #include <linux/delay.h>
18 #include <linux/ioport.h>
19 #include <linux/sched.h>
20 #include <linux/slab.h>
21 #include <linux/errno.h>
22 #include <linux/init.h>
23 #include <linux/timer.h>
24 #include <linux/list.h>
25 #include <linux/interrupt.h>
26 #include <linux/moduleparam.h>
27 #include <linux/device.h>
28 #include <linux/usb/ch9.h>
29 #include <linux/usb/gadget.h>
30 #include <linux/usb/otg.h>
31 #include <linux/pm.h>
32 #include <linux/io.h>
33 #include <linux/irq.h>
34 #include <linux/platform_device.h>
35 #include <linux/clk.h>
36 #include <linux/platform_data/mv_usb.h>
37 #include <asm/system.h>
38 #include <asm/unaligned.h>
39 
40 #include "mv_udc.h"
41 
42 #define DRIVER_DESC		"Marvell PXA USB Device Controller driver"
43 #define DRIVER_VERSION		"8 Nov 2010"
44 
45 #define ep_dir(ep)	(((ep)->ep_num == 0) ? \
46 				((ep)->udc->ep0_dir) : ((ep)->direction))
47 
48 /* timeout value -- usec */
49 #define RESET_TIMEOUT		10000
50 #define FLUSH_TIMEOUT		10000
51 #define EPSTATUS_TIMEOUT	10000
52 #define PRIME_TIMEOUT		10000
53 #define READSAFE_TIMEOUT	1000
54 #define DTD_TIMEOUT		1000
55 
56 #define LOOPS_USEC_SHIFT	4
57 #define LOOPS_USEC		(1 << LOOPS_USEC_SHIFT)
58 #define LOOPS(timeout)		((timeout) >> LOOPS_USEC_SHIFT)
59 
60 static DECLARE_COMPLETION(release_done);
61 
62 static const char driver_name[] = "mv_udc";
63 static const char driver_desc[] = DRIVER_DESC;
64 
65 /* controller device global variable */
66 static struct mv_udc	*the_controller;
67 int mv_usb_otgsc;
68 
69 static void nuke(struct mv_ep *ep, int status);
70 static void stop_activity(struct mv_udc *udc, struct usb_gadget_driver *driver);
71 
72 /* for endpoint 0 operations */
73 static const struct usb_endpoint_descriptor mv_ep0_desc = {
74 	.bLength =		USB_DT_ENDPOINT_SIZE,
75 	.bDescriptorType =	USB_DT_ENDPOINT,
76 	.bEndpointAddress =	0,
77 	.bmAttributes =		USB_ENDPOINT_XFER_CONTROL,
78 	.wMaxPacketSize =	EP0_MAX_PKT_SIZE,
79 };
80 
ep0_reset(struct mv_udc * udc)81 static void ep0_reset(struct mv_udc *udc)
82 {
83 	struct mv_ep *ep;
84 	u32 epctrlx;
85 	int i = 0;
86 
87 	/* ep0 in and out */
88 	for (i = 0; i < 2; i++) {
89 		ep = &udc->eps[i];
90 		ep->udc = udc;
91 
92 		/* ep0 dQH */
93 		ep->dqh = &udc->ep_dqh[i];
94 
95 		/* configure ep0 endpoint capabilities in dQH */
96 		ep->dqh->max_packet_length =
97 			(EP0_MAX_PKT_SIZE << EP_QUEUE_HEAD_MAX_PKT_LEN_POS)
98 			| EP_QUEUE_HEAD_IOS;
99 
100 		ep->dqh->next_dtd_ptr = EP_QUEUE_HEAD_NEXT_TERMINATE;
101 
102 		epctrlx = readl(&udc->op_regs->epctrlx[0]);
103 		if (i) {	/* TX */
104 			epctrlx |= EPCTRL_TX_ENABLE
105 				| (USB_ENDPOINT_XFER_CONTROL
106 					<< EPCTRL_TX_EP_TYPE_SHIFT);
107 
108 		} else {	/* RX */
109 			epctrlx |= EPCTRL_RX_ENABLE
110 				| (USB_ENDPOINT_XFER_CONTROL
111 					<< EPCTRL_RX_EP_TYPE_SHIFT);
112 		}
113 
114 		writel(epctrlx, &udc->op_regs->epctrlx[0]);
115 	}
116 }
117 
118 /* protocol ep0 stall, will automatically be cleared on new transaction */
ep0_stall(struct mv_udc * udc)119 static void ep0_stall(struct mv_udc *udc)
120 {
121 	u32	epctrlx;
122 
123 	/* set TX and RX to stall */
124 	epctrlx = readl(&udc->op_regs->epctrlx[0]);
125 	epctrlx |= EPCTRL_RX_EP_STALL | EPCTRL_TX_EP_STALL;
126 	writel(epctrlx, &udc->op_regs->epctrlx[0]);
127 
128 	/* update ep0 state */
129 	udc->ep0_state = WAIT_FOR_SETUP;
130 	udc->ep0_dir = EP_DIR_OUT;
131 }
132 
process_ep_req(struct mv_udc * udc,int index,struct mv_req * curr_req)133 static int process_ep_req(struct mv_udc *udc, int index,
134 	struct mv_req *curr_req)
135 {
136 	struct mv_dtd	*curr_dtd;
137 	struct mv_dqh	*curr_dqh;
138 	int td_complete, actual, remaining_length;
139 	int i, direction;
140 	int retval = 0;
141 	u32 errors;
142 	u32 bit_pos;
143 
144 	curr_dqh = &udc->ep_dqh[index];
145 	direction = index % 2;
146 
147 	curr_dtd = curr_req->head;
148 	td_complete = 0;
149 	actual = curr_req->req.length;
150 
151 	for (i = 0; i < curr_req->dtd_count; i++) {
152 		if (curr_dtd->size_ioc_sts & DTD_STATUS_ACTIVE) {
153 			dev_dbg(&udc->dev->dev, "%s, dTD not completed\n",
154 				udc->eps[index].name);
155 			return 1;
156 		}
157 
158 		errors = curr_dtd->size_ioc_sts & DTD_ERROR_MASK;
159 		if (!errors) {
160 			remaining_length =
161 				(curr_dtd->size_ioc_sts	& DTD_PACKET_SIZE)
162 					>> DTD_LENGTH_BIT_POS;
163 			actual -= remaining_length;
164 
165 			if (remaining_length) {
166 				if (direction) {
167 					dev_dbg(&udc->dev->dev,
168 						"TX dTD remains data\n");
169 					retval = -EPROTO;
170 					break;
171 				} else
172 					break;
173 			}
174 		} else {
175 			dev_info(&udc->dev->dev,
176 				"complete_tr error: ep=%d %s: error = 0x%x\n",
177 				index >> 1, direction ? "SEND" : "RECV",
178 				errors);
179 			if (errors & DTD_STATUS_HALTED) {
180 				/* Clear the errors and Halt condition */
181 				curr_dqh->size_ioc_int_sts &= ~errors;
182 				retval = -EPIPE;
183 			} else if (errors & DTD_STATUS_DATA_BUFF_ERR) {
184 				retval = -EPROTO;
185 			} else if (errors & DTD_STATUS_TRANSACTION_ERR) {
186 				retval = -EILSEQ;
187 			}
188 		}
189 		if (i != curr_req->dtd_count - 1)
190 			curr_dtd = (struct mv_dtd *)curr_dtd->next_dtd_virt;
191 	}
192 	if (retval)
193 		return retval;
194 
195 	if (direction == EP_DIR_OUT)
196 		bit_pos = 1 << curr_req->ep->ep_num;
197 	else
198 		bit_pos = 1 << (16 + curr_req->ep->ep_num);
199 
200 	while ((curr_dqh->curr_dtd_ptr == curr_dtd->td_dma)) {
201 		if (curr_dtd->dtd_next == EP_QUEUE_HEAD_NEXT_TERMINATE) {
202 			while (readl(&udc->op_regs->epstatus) & bit_pos)
203 				udelay(1);
204 			break;
205 		}
206 		udelay(1);
207 	}
208 
209 	curr_req->req.actual = actual;
210 
211 	return 0;
212 }
213 
214 /*
215  * done() - retire a request; caller blocked irqs
216  * @status : request status to be set, only works when
217  * request is still in progress.
218  */
done(struct mv_ep * ep,struct mv_req * req,int status)219 static void done(struct mv_ep *ep, struct mv_req *req, int status)
220 {
221 	struct mv_udc *udc = NULL;
222 	unsigned char stopped = ep->stopped;
223 	struct mv_dtd *curr_td, *next_td;
224 	int j;
225 
226 	udc = (struct mv_udc *)ep->udc;
227 	/* Removed the req from fsl_ep->queue */
228 	list_del_init(&req->queue);
229 
230 	/* req.status should be set as -EINPROGRESS in ep_queue() */
231 	if (req->req.status == -EINPROGRESS)
232 		req->req.status = status;
233 	else
234 		status = req->req.status;
235 
236 	/* Free dtd for the request */
237 	next_td = req->head;
238 	for (j = 0; j < req->dtd_count; j++) {
239 		curr_td = next_td;
240 		if (j != req->dtd_count - 1)
241 			next_td = curr_td->next_dtd_virt;
242 		dma_pool_free(udc->dtd_pool, curr_td, curr_td->td_dma);
243 	}
244 
245 	if (req->mapped) {
246 		dma_unmap_single(ep->udc->gadget.dev.parent,
247 			req->req.dma, req->req.length,
248 			((ep_dir(ep) == EP_DIR_IN) ?
249 				DMA_TO_DEVICE : DMA_FROM_DEVICE));
250 		req->req.dma = DMA_ADDR_INVALID;
251 		req->mapped = 0;
252 	} else
253 		dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
254 			req->req.dma, req->req.length,
255 			((ep_dir(ep) == EP_DIR_IN) ?
256 				DMA_TO_DEVICE : DMA_FROM_DEVICE));
257 
258 	if (status && (status != -ESHUTDOWN))
259 		dev_info(&udc->dev->dev, "complete %s req %p stat %d len %u/%u",
260 			ep->ep.name, &req->req, status,
261 			req->req.actual, req->req.length);
262 
263 	ep->stopped = 1;
264 
265 	spin_unlock(&ep->udc->lock);
266 	/*
267 	 * complete() is from gadget layer,
268 	 * eg fsg->bulk_in_complete()
269 	 */
270 	if (req->req.complete)
271 		req->req.complete(&ep->ep, &req->req);
272 
273 	spin_lock(&ep->udc->lock);
274 	ep->stopped = stopped;
275 }
276 
queue_dtd(struct mv_ep * ep,struct mv_req * req)277 static int queue_dtd(struct mv_ep *ep, struct mv_req *req)
278 {
279 	struct mv_udc *udc;
280 	struct mv_dqh *dqh;
281 	u32 bit_pos, direction;
282 	u32 usbcmd, epstatus;
283 	unsigned int loops;
284 	int retval = 0;
285 
286 	udc = ep->udc;
287 	direction = ep_dir(ep);
288 	dqh = &(udc->ep_dqh[ep->ep_num * 2 + direction]);
289 	bit_pos = 1 << (((direction == EP_DIR_OUT) ? 0 : 16) + ep->ep_num);
290 
291 	/* check if the pipe is empty */
292 	if (!(list_empty(&ep->queue))) {
293 		struct mv_req *lastreq;
294 		lastreq = list_entry(ep->queue.prev, struct mv_req, queue);
295 		lastreq->tail->dtd_next =
296 			req->head->td_dma & EP_QUEUE_HEAD_NEXT_POINTER_MASK;
297 
298 		wmb();
299 
300 		if (readl(&udc->op_regs->epprime) & bit_pos)
301 			goto done;
302 
303 		loops = LOOPS(READSAFE_TIMEOUT);
304 		while (1) {
305 			/* start with setting the semaphores */
306 			usbcmd = readl(&udc->op_regs->usbcmd);
307 			usbcmd |= USBCMD_ATDTW_TRIPWIRE_SET;
308 			writel(usbcmd, &udc->op_regs->usbcmd);
309 
310 			/* read the endpoint status */
311 			epstatus = readl(&udc->op_regs->epstatus) & bit_pos;
312 
313 			/*
314 			 * Reread the ATDTW semaphore bit to check if it is
315 			 * cleared. When hardware see a hazard, it will clear
316 			 * the bit or else we remain set to 1 and we can
317 			 * proceed with priming of endpoint if not already
318 			 * primed.
319 			 */
320 			if (readl(&udc->op_regs->usbcmd)
321 				& USBCMD_ATDTW_TRIPWIRE_SET)
322 				break;
323 
324 			loops--;
325 			if (loops == 0) {
326 				dev_err(&udc->dev->dev,
327 					"Timeout for ATDTW_TRIPWIRE...\n");
328 				retval = -ETIME;
329 				goto done;
330 			}
331 			udelay(LOOPS_USEC);
332 		}
333 
334 		/* Clear the semaphore */
335 		usbcmd = readl(&udc->op_regs->usbcmd);
336 		usbcmd &= USBCMD_ATDTW_TRIPWIRE_CLEAR;
337 		writel(usbcmd, &udc->op_regs->usbcmd);
338 
339 		if (epstatus)
340 			goto done;
341 	}
342 
343 	/* Write dQH next pointer and terminate bit to 0 */
344 	dqh->next_dtd_ptr = req->head->td_dma
345 				& EP_QUEUE_HEAD_NEXT_POINTER_MASK;
346 
347 	/* clear active and halt bit, in case set from a previous error */
348 	dqh->size_ioc_int_sts &= ~(DTD_STATUS_ACTIVE | DTD_STATUS_HALTED);
349 
350 	/* Ensure that updates to the QH will occure before priming. */
351 	wmb();
352 
353 	/* Prime the Endpoint */
354 	writel(bit_pos, &udc->op_regs->epprime);
355 
356 done:
357 	return retval;
358 }
359 
360 
build_dtd(struct mv_req * req,unsigned * length,dma_addr_t * dma,int * is_last)361 static struct mv_dtd *build_dtd(struct mv_req *req, unsigned *length,
362 		dma_addr_t *dma, int *is_last)
363 {
364 	u32 temp;
365 	struct mv_dtd *dtd;
366 	struct mv_udc *udc;
367 
368 	/* how big will this transfer be? */
369 	*length = min(req->req.length - req->req.actual,
370 			(unsigned)EP_MAX_LENGTH_TRANSFER);
371 
372 	udc = req->ep->udc;
373 
374 	/*
375 	 * Be careful that no _GFP_HIGHMEM is set,
376 	 * or we can not use dma_to_virt
377 	 */
378 	dtd = dma_pool_alloc(udc->dtd_pool, GFP_KERNEL, dma);
379 	if (dtd == NULL)
380 		return dtd;
381 
382 	dtd->td_dma = *dma;
383 	/* initialize buffer page pointers */
384 	temp = (u32)(req->req.dma + req->req.actual);
385 	dtd->buff_ptr0 = cpu_to_le32(temp);
386 	temp &= ~0xFFF;
387 	dtd->buff_ptr1 = cpu_to_le32(temp + 0x1000);
388 	dtd->buff_ptr2 = cpu_to_le32(temp + 0x2000);
389 	dtd->buff_ptr3 = cpu_to_le32(temp + 0x3000);
390 	dtd->buff_ptr4 = cpu_to_le32(temp + 0x4000);
391 
392 	req->req.actual += *length;
393 
394 	/* zlp is needed if req->req.zero is set */
395 	if (req->req.zero) {
396 		if (*length == 0 || (*length % req->ep->ep.maxpacket) != 0)
397 			*is_last = 1;
398 		else
399 			*is_last = 0;
400 	} else if (req->req.length == req->req.actual)
401 		*is_last = 1;
402 	else
403 		*is_last = 0;
404 
405 	/* Fill in the transfer size; set active bit */
406 	temp = ((*length << DTD_LENGTH_BIT_POS) | DTD_STATUS_ACTIVE);
407 
408 	/* Enable interrupt for the last dtd of a request */
409 	if (*is_last && !req->req.no_interrupt)
410 		temp |= DTD_IOC;
411 
412 	dtd->size_ioc_sts = temp;
413 
414 	mb();
415 
416 	return dtd;
417 }
418 
419 /* generate dTD linked list for a request */
req_to_dtd(struct mv_req * req)420 static int req_to_dtd(struct mv_req *req)
421 {
422 	unsigned count;
423 	int is_last, is_first = 1;
424 	struct mv_dtd *dtd, *last_dtd = NULL;
425 	struct mv_udc *udc;
426 	dma_addr_t dma;
427 
428 	udc = req->ep->udc;
429 
430 	do {
431 		dtd = build_dtd(req, &count, &dma, &is_last);
432 		if (dtd == NULL)
433 			return -ENOMEM;
434 
435 		if (is_first) {
436 			is_first = 0;
437 			req->head = dtd;
438 		} else {
439 			last_dtd->dtd_next = dma;
440 			last_dtd->next_dtd_virt = dtd;
441 		}
442 		last_dtd = dtd;
443 		req->dtd_count++;
444 	} while (!is_last);
445 
446 	/* set terminate bit to 1 for the last dTD */
447 	dtd->dtd_next = DTD_NEXT_TERMINATE;
448 
449 	req->tail = dtd;
450 
451 	return 0;
452 }
453 
mv_ep_enable(struct usb_ep * _ep,const struct usb_endpoint_descriptor * desc)454 static int mv_ep_enable(struct usb_ep *_ep,
455 		const struct usb_endpoint_descriptor *desc)
456 {
457 	struct mv_udc *udc;
458 	struct mv_ep *ep;
459 	struct mv_dqh *dqh;
460 	u16 max = 0;
461 	u32 bit_pos, epctrlx, direction;
462 	unsigned char zlt = 0, ios = 0, mult = 0;
463 	unsigned long flags;
464 
465 	ep = container_of(_ep, struct mv_ep, ep);
466 	udc = ep->udc;
467 
468 	if (!_ep || !desc || ep->desc
469 			|| desc->bDescriptorType != USB_DT_ENDPOINT)
470 		return -EINVAL;
471 
472 	if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
473 		return -ESHUTDOWN;
474 
475 	direction = ep_dir(ep);
476 	max = usb_endpoint_maxp(desc);
477 
478 	/*
479 	 * disable HW zero length termination select
480 	 * driver handles zero length packet through req->req.zero
481 	 */
482 	zlt = 1;
483 
484 	bit_pos = 1 << ((direction == EP_DIR_OUT ? 0 : 16) + ep->ep_num);
485 
486 	/* Check if the Endpoint is Primed */
487 	if ((readl(&udc->op_regs->epprime) & bit_pos)
488 		|| (readl(&udc->op_regs->epstatus) & bit_pos)) {
489 		dev_info(&udc->dev->dev,
490 			"ep=%d %s: Init ERROR: ENDPTPRIME=0x%x,"
491 			" ENDPTSTATUS=0x%x, bit_pos=0x%x\n",
492 			(unsigned)ep->ep_num, direction ? "SEND" : "RECV",
493 			(unsigned)readl(&udc->op_regs->epprime),
494 			(unsigned)readl(&udc->op_regs->epstatus),
495 			(unsigned)bit_pos);
496 		goto en_done;
497 	}
498 	/* Set the max packet length, interrupt on Setup and Mult fields */
499 	switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
500 	case USB_ENDPOINT_XFER_BULK:
501 		zlt = 1;
502 		mult = 0;
503 		break;
504 	case USB_ENDPOINT_XFER_CONTROL:
505 		ios = 1;
506 	case USB_ENDPOINT_XFER_INT:
507 		mult = 0;
508 		break;
509 	case USB_ENDPOINT_XFER_ISOC:
510 		/* Calculate transactions needed for high bandwidth iso */
511 		mult = (unsigned char)(1 + ((max >> 11) & 0x03));
512 		max = max & 0x7ff;	/* bit 0~10 */
513 		/* 3 transactions at most */
514 		if (mult > 3)
515 			goto en_done;
516 		break;
517 	default:
518 		goto en_done;
519 	}
520 
521 	spin_lock_irqsave(&udc->lock, flags);
522 	/* Get the endpoint queue head address */
523 	dqh = ep->dqh;
524 	dqh->max_packet_length = (max << EP_QUEUE_HEAD_MAX_PKT_LEN_POS)
525 		| (mult << EP_QUEUE_HEAD_MULT_POS)
526 		| (zlt ? EP_QUEUE_HEAD_ZLT_SEL : 0)
527 		| (ios ? EP_QUEUE_HEAD_IOS : 0);
528 	dqh->next_dtd_ptr = 1;
529 	dqh->size_ioc_int_sts = 0;
530 
531 	ep->ep.maxpacket = max;
532 	ep->desc = desc;
533 	ep->stopped = 0;
534 
535 	/* Enable the endpoint for Rx or Tx and set the endpoint type */
536 	epctrlx = readl(&udc->op_regs->epctrlx[ep->ep_num]);
537 	if (direction == EP_DIR_IN) {
538 		epctrlx &= ~EPCTRL_TX_ALL_MASK;
539 		epctrlx |= EPCTRL_TX_ENABLE | EPCTRL_TX_DATA_TOGGLE_RST
540 			| ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
541 				<< EPCTRL_TX_EP_TYPE_SHIFT);
542 	} else {
543 		epctrlx &= ~EPCTRL_RX_ALL_MASK;
544 		epctrlx |= EPCTRL_RX_ENABLE | EPCTRL_RX_DATA_TOGGLE_RST
545 			| ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
546 				<< EPCTRL_RX_EP_TYPE_SHIFT);
547 	}
548 	writel(epctrlx, &udc->op_regs->epctrlx[ep->ep_num]);
549 
550 	/*
551 	 * Implement Guideline (GL# USB-7) The unused endpoint type must
552 	 * be programmed to bulk.
553 	 */
554 	epctrlx = readl(&udc->op_regs->epctrlx[ep->ep_num]);
555 	if ((epctrlx & EPCTRL_RX_ENABLE) == 0) {
556 		epctrlx |= (USB_ENDPOINT_XFER_BULK
557 				<< EPCTRL_RX_EP_TYPE_SHIFT);
558 		writel(epctrlx, &udc->op_regs->epctrlx[ep->ep_num]);
559 	}
560 
561 	epctrlx = readl(&udc->op_regs->epctrlx[ep->ep_num]);
562 	if ((epctrlx & EPCTRL_TX_ENABLE) == 0) {
563 		epctrlx |= (USB_ENDPOINT_XFER_BULK
564 				<< EPCTRL_TX_EP_TYPE_SHIFT);
565 		writel(epctrlx, &udc->op_regs->epctrlx[ep->ep_num]);
566 	}
567 
568 	spin_unlock_irqrestore(&udc->lock, flags);
569 
570 	return 0;
571 en_done:
572 	return -EINVAL;
573 }
574 
mv_ep_disable(struct usb_ep * _ep)575 static int  mv_ep_disable(struct usb_ep *_ep)
576 {
577 	struct mv_udc *udc;
578 	struct mv_ep *ep;
579 	struct mv_dqh *dqh;
580 	u32 bit_pos, epctrlx, direction;
581 	unsigned long flags;
582 
583 	ep = container_of(_ep, struct mv_ep, ep);
584 	if ((_ep == NULL) || !ep->desc)
585 		return -EINVAL;
586 
587 	udc = ep->udc;
588 
589 	/* Get the endpoint queue head address */
590 	dqh = ep->dqh;
591 
592 	spin_lock_irqsave(&udc->lock, flags);
593 
594 	direction = ep_dir(ep);
595 	bit_pos = 1 << ((direction == EP_DIR_OUT ? 0 : 16) + ep->ep_num);
596 
597 	/* Reset the max packet length and the interrupt on Setup */
598 	dqh->max_packet_length = 0;
599 
600 	/* Disable the endpoint for Rx or Tx and reset the endpoint type */
601 	epctrlx = readl(&udc->op_regs->epctrlx[ep->ep_num]);
602 	epctrlx &= ~((direction == EP_DIR_IN)
603 			? (EPCTRL_TX_ENABLE | EPCTRL_TX_TYPE)
604 			: (EPCTRL_RX_ENABLE | EPCTRL_RX_TYPE));
605 	writel(epctrlx, &udc->op_regs->epctrlx[ep->ep_num]);
606 
607 	/* nuke all pending requests (does flush) */
608 	nuke(ep, -ESHUTDOWN);
609 
610 	ep->desc = NULL;
611 	ep->stopped = 1;
612 
613 	spin_unlock_irqrestore(&udc->lock, flags);
614 
615 	return 0;
616 }
617 
618 static struct usb_request *
mv_alloc_request(struct usb_ep * _ep,gfp_t gfp_flags)619 mv_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
620 {
621 	struct mv_req *req = NULL;
622 
623 	req = kzalloc(sizeof *req, gfp_flags);
624 	if (!req)
625 		return NULL;
626 
627 	req->req.dma = DMA_ADDR_INVALID;
628 	INIT_LIST_HEAD(&req->queue);
629 
630 	return &req->req;
631 }
632 
mv_free_request(struct usb_ep * _ep,struct usb_request * _req)633 static void mv_free_request(struct usb_ep *_ep, struct usb_request *_req)
634 {
635 	struct mv_req *req = NULL;
636 
637 	req = container_of(_req, struct mv_req, req);
638 
639 	if (_req)
640 		kfree(req);
641 }
642 
mv_ep_fifo_flush(struct usb_ep * _ep)643 static void mv_ep_fifo_flush(struct usb_ep *_ep)
644 {
645 	struct mv_udc *udc;
646 	u32 bit_pos, direction;
647 	struct mv_ep *ep;
648 	unsigned int loops;
649 
650 	if (!_ep)
651 		return;
652 
653 	ep = container_of(_ep, struct mv_ep, ep);
654 	if (!ep->desc)
655 		return;
656 
657 	udc = ep->udc;
658 	direction = ep_dir(ep);
659 
660 	if (ep->ep_num == 0)
661 		bit_pos = (1 << 16) | 1;
662 	else if (direction == EP_DIR_OUT)
663 		bit_pos = 1 << ep->ep_num;
664 	else
665 		bit_pos = 1 << (16 + ep->ep_num);
666 
667 	loops = LOOPS(EPSTATUS_TIMEOUT);
668 	do {
669 		unsigned int inter_loops;
670 
671 		if (loops == 0) {
672 			dev_err(&udc->dev->dev,
673 				"TIMEOUT for ENDPTSTATUS=0x%x, bit_pos=0x%x\n",
674 				(unsigned)readl(&udc->op_regs->epstatus),
675 				(unsigned)bit_pos);
676 			return;
677 		}
678 		/* Write 1 to the Flush register */
679 		writel(bit_pos, &udc->op_regs->epflush);
680 
681 		/* Wait until flushing completed */
682 		inter_loops = LOOPS(FLUSH_TIMEOUT);
683 		while (readl(&udc->op_regs->epflush)) {
684 			/*
685 			 * ENDPTFLUSH bit should be cleared to indicate this
686 			 * operation is complete
687 			 */
688 			if (inter_loops == 0) {
689 				dev_err(&udc->dev->dev,
690 					"TIMEOUT for ENDPTFLUSH=0x%x,"
691 					"bit_pos=0x%x\n",
692 					(unsigned)readl(&udc->op_regs->epflush),
693 					(unsigned)bit_pos);
694 				return;
695 			}
696 			inter_loops--;
697 			udelay(LOOPS_USEC);
698 		}
699 		loops--;
700 	} while (readl(&udc->op_regs->epstatus) & bit_pos);
701 }
702 
703 /* queues (submits) an I/O request to an endpoint */
704 static int
mv_ep_queue(struct usb_ep * _ep,struct usb_request * _req,gfp_t gfp_flags)705 mv_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
706 {
707 	struct mv_ep *ep = container_of(_ep, struct mv_ep, ep);
708 	struct mv_req *req = container_of(_req, struct mv_req, req);
709 	struct mv_udc *udc = ep->udc;
710 	unsigned long flags;
711 
712 	/* catch various bogus parameters */
713 	if (!_req || !req->req.complete || !req->req.buf
714 			|| !list_empty(&req->queue)) {
715 		dev_err(&udc->dev->dev, "%s, bad params", __func__);
716 		return -EINVAL;
717 	}
718 	if (unlikely(!_ep || !ep->desc)) {
719 		dev_err(&udc->dev->dev, "%s, bad ep", __func__);
720 		return -EINVAL;
721 	}
722 	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
723 		if (req->req.length > ep->ep.maxpacket)
724 			return -EMSGSIZE;
725 	}
726 
727 	udc = ep->udc;
728 	if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
729 		return -ESHUTDOWN;
730 
731 	req->ep = ep;
732 
733 	/* map virtual address to hardware */
734 	if (req->req.dma == DMA_ADDR_INVALID) {
735 		req->req.dma = dma_map_single(ep->udc->gadget.dev.parent,
736 					req->req.buf,
737 					req->req.length, ep_dir(ep)
738 						? DMA_TO_DEVICE
739 						: DMA_FROM_DEVICE);
740 		req->mapped = 1;
741 	} else {
742 		dma_sync_single_for_device(ep->udc->gadget.dev.parent,
743 					req->req.dma, req->req.length,
744 					ep_dir(ep)
745 						? DMA_TO_DEVICE
746 						: DMA_FROM_DEVICE);
747 		req->mapped = 0;
748 	}
749 
750 	req->req.status = -EINPROGRESS;
751 	req->req.actual = 0;
752 	req->dtd_count = 0;
753 
754 	spin_lock_irqsave(&udc->lock, flags);
755 
756 	/* build dtds and push them to device queue */
757 	if (!req_to_dtd(req)) {
758 		int retval;
759 		retval = queue_dtd(ep, req);
760 		if (retval) {
761 			spin_unlock_irqrestore(&udc->lock, flags);
762 			return retval;
763 		}
764 	} else {
765 		spin_unlock_irqrestore(&udc->lock, flags);
766 		return -ENOMEM;
767 	}
768 
769 	/* Update ep0 state */
770 	if (ep->ep_num == 0)
771 		udc->ep0_state = DATA_STATE_XMIT;
772 
773 	/* irq handler advances the queue */
774 	if (req != NULL)
775 		list_add_tail(&req->queue, &ep->queue);
776 	spin_unlock_irqrestore(&udc->lock, flags);
777 
778 	return 0;
779 }
780 
mv_prime_ep(struct mv_ep * ep,struct mv_req * req)781 static void mv_prime_ep(struct mv_ep *ep, struct mv_req *req)
782 {
783 	struct mv_dqh *dqh = ep->dqh;
784 	u32 bit_pos;
785 
786 	/* Write dQH next pointer and terminate bit to 0 */
787 	dqh->next_dtd_ptr = req->head->td_dma
788 		& EP_QUEUE_HEAD_NEXT_POINTER_MASK;
789 
790 	/* clear active and halt bit, in case set from a previous error */
791 	dqh->size_ioc_int_sts &= ~(DTD_STATUS_ACTIVE | DTD_STATUS_HALTED);
792 
793 	/* Ensure that updates to the QH will occure before priming. */
794 	wmb();
795 
796 	bit_pos = 1 << (((ep_dir(ep) == EP_DIR_OUT) ? 0 : 16) + ep->ep_num);
797 
798 	/* Prime the Endpoint */
799 	writel(bit_pos, &ep->udc->op_regs->epprime);
800 }
801 
802 /* dequeues (cancels, unlinks) an I/O request from an endpoint */
mv_ep_dequeue(struct usb_ep * _ep,struct usb_request * _req)803 static int mv_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
804 {
805 	struct mv_ep *ep = container_of(_ep, struct mv_ep, ep);
806 	struct mv_req *req;
807 	struct mv_udc *udc = ep->udc;
808 	unsigned long flags;
809 	int stopped, ret = 0;
810 	u32 epctrlx;
811 
812 	if (!_ep || !_req)
813 		return -EINVAL;
814 
815 	spin_lock_irqsave(&ep->udc->lock, flags);
816 	stopped = ep->stopped;
817 
818 	/* Stop the ep before we deal with the queue */
819 	ep->stopped = 1;
820 	epctrlx = readl(&udc->op_regs->epctrlx[ep->ep_num]);
821 	if (ep_dir(ep) == EP_DIR_IN)
822 		epctrlx &= ~EPCTRL_TX_ENABLE;
823 	else
824 		epctrlx &= ~EPCTRL_RX_ENABLE;
825 	writel(epctrlx, &udc->op_regs->epctrlx[ep->ep_num]);
826 
827 	/* make sure it's actually queued on this endpoint */
828 	list_for_each_entry(req, &ep->queue, queue) {
829 		if (&req->req == _req)
830 			break;
831 	}
832 	if (&req->req != _req) {
833 		ret = -EINVAL;
834 		goto out;
835 	}
836 
837 	/* The request is in progress, or completed but not dequeued */
838 	if (ep->queue.next == &req->queue) {
839 		_req->status = -ECONNRESET;
840 		mv_ep_fifo_flush(_ep);	/* flush current transfer */
841 
842 		/* The request isn't the last request in this ep queue */
843 		if (req->queue.next != &ep->queue) {
844 			struct mv_req *next_req;
845 
846 			next_req = list_entry(req->queue.next,
847 				struct mv_req, queue);
848 
849 			/* Point the QH to the first TD of next request */
850 			mv_prime_ep(ep, next_req);
851 		} else {
852 			struct mv_dqh *qh;
853 
854 			qh = ep->dqh;
855 			qh->next_dtd_ptr = 1;
856 			qh->size_ioc_int_sts = 0;
857 		}
858 
859 		/* The request hasn't been processed, patch up the TD chain */
860 	} else {
861 		struct mv_req *prev_req;
862 
863 		prev_req = list_entry(req->queue.prev, struct mv_req, queue);
864 		writel(readl(&req->tail->dtd_next),
865 				&prev_req->tail->dtd_next);
866 
867 	}
868 
869 	done(ep, req, -ECONNRESET);
870 
871 	/* Enable EP */
872 out:
873 	epctrlx = readl(&udc->op_regs->epctrlx[ep->ep_num]);
874 	if (ep_dir(ep) == EP_DIR_IN)
875 		epctrlx |= EPCTRL_TX_ENABLE;
876 	else
877 		epctrlx |= EPCTRL_RX_ENABLE;
878 	writel(epctrlx, &udc->op_regs->epctrlx[ep->ep_num]);
879 	ep->stopped = stopped;
880 
881 	spin_unlock_irqrestore(&ep->udc->lock, flags);
882 	return ret;
883 }
884 
ep_set_stall(struct mv_udc * udc,u8 ep_num,u8 direction,int stall)885 static void ep_set_stall(struct mv_udc *udc, u8 ep_num, u8 direction, int stall)
886 {
887 	u32 epctrlx;
888 
889 	epctrlx = readl(&udc->op_regs->epctrlx[ep_num]);
890 
891 	if (stall) {
892 		if (direction == EP_DIR_IN)
893 			epctrlx |= EPCTRL_TX_EP_STALL;
894 		else
895 			epctrlx |= EPCTRL_RX_EP_STALL;
896 	} else {
897 		if (direction == EP_DIR_IN) {
898 			epctrlx &= ~EPCTRL_TX_EP_STALL;
899 			epctrlx |= EPCTRL_TX_DATA_TOGGLE_RST;
900 		} else {
901 			epctrlx &= ~EPCTRL_RX_EP_STALL;
902 			epctrlx |= EPCTRL_RX_DATA_TOGGLE_RST;
903 		}
904 	}
905 	writel(epctrlx, &udc->op_regs->epctrlx[ep_num]);
906 }
907 
ep_is_stall(struct mv_udc * udc,u8 ep_num,u8 direction)908 static int ep_is_stall(struct mv_udc *udc, u8 ep_num, u8 direction)
909 {
910 	u32 epctrlx;
911 
912 	epctrlx = readl(&udc->op_regs->epctrlx[ep_num]);
913 
914 	if (direction == EP_DIR_OUT)
915 		return (epctrlx & EPCTRL_RX_EP_STALL) ? 1 : 0;
916 	else
917 		return (epctrlx & EPCTRL_TX_EP_STALL) ? 1 : 0;
918 }
919 
mv_ep_set_halt_wedge(struct usb_ep * _ep,int halt,int wedge)920 static int mv_ep_set_halt_wedge(struct usb_ep *_ep, int halt, int wedge)
921 {
922 	struct mv_ep *ep;
923 	unsigned long flags = 0;
924 	int status = 0;
925 	struct mv_udc *udc;
926 
927 	ep = container_of(_ep, struct mv_ep, ep);
928 	udc = ep->udc;
929 	if (!_ep || !ep->desc) {
930 		status = -EINVAL;
931 		goto out;
932 	}
933 
934 	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
935 		status = -EOPNOTSUPP;
936 		goto out;
937 	}
938 
939 	/*
940 	 * Attempt to halt IN ep will fail if any transfer requests
941 	 * are still queue
942 	 */
943 	if (halt && (ep_dir(ep) == EP_DIR_IN) && !list_empty(&ep->queue)) {
944 		status = -EAGAIN;
945 		goto out;
946 	}
947 
948 	spin_lock_irqsave(&ep->udc->lock, flags);
949 	ep_set_stall(udc, ep->ep_num, ep_dir(ep), halt);
950 	if (halt && wedge)
951 		ep->wedge = 1;
952 	else if (!halt)
953 		ep->wedge = 0;
954 	spin_unlock_irqrestore(&ep->udc->lock, flags);
955 
956 	if (ep->ep_num == 0) {
957 		udc->ep0_state = WAIT_FOR_SETUP;
958 		udc->ep0_dir = EP_DIR_OUT;
959 	}
960 out:
961 	return status;
962 }
963 
mv_ep_set_halt(struct usb_ep * _ep,int halt)964 static int mv_ep_set_halt(struct usb_ep *_ep, int halt)
965 {
966 	return mv_ep_set_halt_wedge(_ep, halt, 0);
967 }
968 
mv_ep_set_wedge(struct usb_ep * _ep)969 static int mv_ep_set_wedge(struct usb_ep *_ep)
970 {
971 	return mv_ep_set_halt_wedge(_ep, 1, 1);
972 }
973 
974 static struct usb_ep_ops mv_ep_ops = {
975 	.enable		= mv_ep_enable,
976 	.disable	= mv_ep_disable,
977 
978 	.alloc_request	= mv_alloc_request,
979 	.free_request	= mv_free_request,
980 
981 	.queue		= mv_ep_queue,
982 	.dequeue	= mv_ep_dequeue,
983 
984 	.set_wedge	= mv_ep_set_wedge,
985 	.set_halt	= mv_ep_set_halt,
986 	.fifo_flush	= mv_ep_fifo_flush,	/* flush fifo */
987 };
988 
udc_clock_enable(struct mv_udc * udc)989 static void udc_clock_enable(struct mv_udc *udc)
990 {
991 	unsigned int i;
992 
993 	for (i = 0; i < udc->clknum; i++)
994 		clk_enable(udc->clk[i]);
995 }
996 
udc_clock_disable(struct mv_udc * udc)997 static void udc_clock_disable(struct mv_udc *udc)
998 {
999 	unsigned int i;
1000 
1001 	for (i = 0; i < udc->clknum; i++)
1002 		clk_disable(udc->clk[i]);
1003 }
1004 
udc_stop(struct mv_udc * udc)1005 static void udc_stop(struct mv_udc *udc)
1006 {
1007 	u32 tmp;
1008 
1009 	/* Disable interrupts */
1010 	tmp = readl(&udc->op_regs->usbintr);
1011 	tmp &= ~(USBINTR_INT_EN | USBINTR_ERR_INT_EN |
1012 		USBINTR_PORT_CHANGE_DETECT_EN | USBINTR_RESET_EN);
1013 	writel(tmp, &udc->op_regs->usbintr);
1014 
1015 	udc->stopped = 1;
1016 
1017 	/* Reset the Run the bit in the command register to stop VUSB */
1018 	tmp = readl(&udc->op_regs->usbcmd);
1019 	tmp &= ~USBCMD_RUN_STOP;
1020 	writel(tmp, &udc->op_regs->usbcmd);
1021 }
1022 
udc_start(struct mv_udc * udc)1023 static void udc_start(struct mv_udc *udc)
1024 {
1025 	u32 usbintr;
1026 
1027 	usbintr = USBINTR_INT_EN | USBINTR_ERR_INT_EN
1028 		| USBINTR_PORT_CHANGE_DETECT_EN
1029 		| USBINTR_RESET_EN | USBINTR_DEVICE_SUSPEND;
1030 	/* Enable interrupts */
1031 	writel(usbintr, &udc->op_regs->usbintr);
1032 
1033 	udc->stopped = 0;
1034 
1035 	/* Set the Run bit in the command register */
1036 	writel(USBCMD_RUN_STOP, &udc->op_regs->usbcmd);
1037 }
1038 
udc_reset(struct mv_udc * udc)1039 static int udc_reset(struct mv_udc *udc)
1040 {
1041 	unsigned int loops;
1042 	u32 tmp, portsc;
1043 
1044 	/* Stop the controller */
1045 	tmp = readl(&udc->op_regs->usbcmd);
1046 	tmp &= ~USBCMD_RUN_STOP;
1047 	writel(tmp, &udc->op_regs->usbcmd);
1048 
1049 	/* Reset the controller to get default values */
1050 	writel(USBCMD_CTRL_RESET, &udc->op_regs->usbcmd);
1051 
1052 	/* wait for reset to complete */
1053 	loops = LOOPS(RESET_TIMEOUT);
1054 	while (readl(&udc->op_regs->usbcmd) & USBCMD_CTRL_RESET) {
1055 		if (loops == 0) {
1056 			dev_err(&udc->dev->dev,
1057 				"Wait for RESET completed TIMEOUT\n");
1058 			return -ETIMEDOUT;
1059 		}
1060 		loops--;
1061 		udelay(LOOPS_USEC);
1062 	}
1063 
1064 	/* set controller to device mode */
1065 	tmp = readl(&udc->op_regs->usbmode);
1066 	tmp |= USBMODE_CTRL_MODE_DEVICE;
1067 
1068 	/* turn setup lockout off, require setup tripwire in usbcmd */
1069 	tmp |= USBMODE_SETUP_LOCK_OFF | USBMODE_STREAM_DISABLE;
1070 
1071 	writel(tmp, &udc->op_regs->usbmode);
1072 
1073 	writel(0x0, &udc->op_regs->epsetupstat);
1074 
1075 	/* Configure the Endpoint List Address */
1076 	writel(udc->ep_dqh_dma & USB_EP_LIST_ADDRESS_MASK,
1077 		&udc->op_regs->eplistaddr);
1078 
1079 	portsc = readl(&udc->op_regs->portsc[0]);
1080 	if (readl(&udc->cap_regs->hcsparams) & HCSPARAMS_PPC)
1081 		portsc &= (~PORTSCX_W1C_BITS | ~PORTSCX_PORT_POWER);
1082 
1083 	if (udc->force_fs)
1084 		portsc |= PORTSCX_FORCE_FULL_SPEED_CONNECT;
1085 	else
1086 		portsc &= (~PORTSCX_FORCE_FULL_SPEED_CONNECT);
1087 
1088 	writel(portsc, &udc->op_regs->portsc[0]);
1089 
1090 	tmp = readl(&udc->op_regs->epctrlx[0]);
1091 	tmp &= ~(EPCTRL_TX_EP_STALL | EPCTRL_RX_EP_STALL);
1092 	writel(tmp, &udc->op_regs->epctrlx[0]);
1093 
1094 	return 0;
1095 }
1096 
mv_udc_enable_internal(struct mv_udc * udc)1097 static int mv_udc_enable_internal(struct mv_udc *udc)
1098 {
1099 	int retval;
1100 
1101 	if (udc->active)
1102 		return 0;
1103 
1104 	dev_dbg(&udc->dev->dev, "enable udc\n");
1105 	udc_clock_enable(udc);
1106 	if (udc->pdata->phy_init) {
1107 		retval = udc->pdata->phy_init(udc->phy_regs);
1108 		if (retval) {
1109 			dev_err(&udc->dev->dev,
1110 				"init phy error %d\n", retval);
1111 			udc_clock_disable(udc);
1112 			return retval;
1113 		}
1114 	}
1115 	udc->active = 1;
1116 
1117 	return 0;
1118 }
1119 
mv_udc_enable(struct mv_udc * udc)1120 static int mv_udc_enable(struct mv_udc *udc)
1121 {
1122 	if (udc->clock_gating)
1123 		return mv_udc_enable_internal(udc);
1124 
1125 	return 0;
1126 }
1127 
mv_udc_disable_internal(struct mv_udc * udc)1128 static void mv_udc_disable_internal(struct mv_udc *udc)
1129 {
1130 	if (udc->active) {
1131 		dev_dbg(&udc->dev->dev, "disable udc\n");
1132 		if (udc->pdata->phy_deinit)
1133 			udc->pdata->phy_deinit(udc->phy_regs);
1134 		udc_clock_disable(udc);
1135 		udc->active = 0;
1136 	}
1137 }
1138 
mv_udc_disable(struct mv_udc * udc)1139 static void mv_udc_disable(struct mv_udc *udc)
1140 {
1141 	if (udc->clock_gating)
1142 		mv_udc_disable_internal(udc);
1143 }
1144 
mv_udc_get_frame(struct usb_gadget * gadget)1145 static int mv_udc_get_frame(struct usb_gadget *gadget)
1146 {
1147 	struct mv_udc *udc;
1148 	u16	retval;
1149 
1150 	if (!gadget)
1151 		return -ENODEV;
1152 
1153 	udc = container_of(gadget, struct mv_udc, gadget);
1154 
1155 	retval = readl(&udc->op_regs->frindex) & USB_FRINDEX_MASKS;
1156 
1157 	return retval;
1158 }
1159 
1160 /* Tries to wake up the host connected to this gadget */
mv_udc_wakeup(struct usb_gadget * gadget)1161 static int mv_udc_wakeup(struct usb_gadget *gadget)
1162 {
1163 	struct mv_udc *udc = container_of(gadget, struct mv_udc, gadget);
1164 	u32 portsc;
1165 
1166 	/* Remote wakeup feature not enabled by host */
1167 	if (!udc->remote_wakeup)
1168 		return -ENOTSUPP;
1169 
1170 	portsc = readl(&udc->op_regs->portsc);
1171 	/* not suspended? */
1172 	if (!(portsc & PORTSCX_PORT_SUSPEND))
1173 		return 0;
1174 	/* trigger force resume */
1175 	portsc |= PORTSCX_PORT_FORCE_RESUME;
1176 	writel(portsc, &udc->op_regs->portsc[0]);
1177 	return 0;
1178 }
1179 
mv_udc_vbus_session(struct usb_gadget * gadget,int is_active)1180 static int mv_udc_vbus_session(struct usb_gadget *gadget, int is_active)
1181 {
1182 	struct mv_udc *udc;
1183 	unsigned long flags;
1184 	int retval = 0;
1185 
1186 	udc = container_of(gadget, struct mv_udc, gadget);
1187 	spin_lock_irqsave(&udc->lock, flags);
1188 
1189 	udc->vbus_active = (is_active != 0);
1190 
1191 	dev_dbg(&udc->dev->dev, "%s: softconnect %d, vbus_active %d\n",
1192 		__func__, udc->softconnect, udc->vbus_active);
1193 
1194 	if (udc->driver && udc->softconnect && udc->vbus_active) {
1195 		retval = mv_udc_enable(udc);
1196 		if (retval == 0) {
1197 			/* Clock is disabled, need re-init registers */
1198 			udc_reset(udc);
1199 			ep0_reset(udc);
1200 			udc_start(udc);
1201 		}
1202 	} else if (udc->driver && udc->softconnect) {
1203 		/* stop all the transfer in queue*/
1204 		stop_activity(udc, udc->driver);
1205 		udc_stop(udc);
1206 		mv_udc_disable(udc);
1207 	}
1208 
1209 	spin_unlock_irqrestore(&udc->lock, flags);
1210 	return retval;
1211 }
1212 
mv_udc_pullup(struct usb_gadget * gadget,int is_on)1213 static int mv_udc_pullup(struct usb_gadget *gadget, int is_on)
1214 {
1215 	struct mv_udc *udc;
1216 	unsigned long flags;
1217 	int retval = 0;
1218 
1219 	udc = container_of(gadget, struct mv_udc, gadget);
1220 	spin_lock_irqsave(&udc->lock, flags);
1221 
1222 	udc->softconnect = (is_on != 0);
1223 
1224 	dev_dbg(&udc->dev->dev, "%s: softconnect %d, vbus_active %d\n",
1225 			__func__, udc->softconnect, udc->vbus_active);
1226 
1227 	if (udc->driver && udc->softconnect && udc->vbus_active) {
1228 		retval = mv_udc_enable(udc);
1229 		if (retval == 0) {
1230 			/* Clock is disabled, need re-init registers */
1231 			udc_reset(udc);
1232 			ep0_reset(udc);
1233 			udc_start(udc);
1234 		}
1235 	} else if (udc->driver && udc->vbus_active) {
1236 		/* stop all the transfer in queue*/
1237 		stop_activity(udc, udc->driver);
1238 		udc_stop(udc);
1239 		mv_udc_disable(udc);
1240 	}
1241 
1242 	spin_unlock_irqrestore(&udc->lock, flags);
1243 	return retval;
1244 }
1245 
1246 static int mv_udc_start(struct usb_gadget_driver *driver,
1247 		int (*bind)(struct usb_gadget *));
1248 static int mv_udc_stop(struct usb_gadget_driver *driver);
1249 /* device controller usb_gadget_ops structure */
1250 static const struct usb_gadget_ops mv_ops = {
1251 
1252 	/* returns the current frame number */
1253 	.get_frame	= mv_udc_get_frame,
1254 
1255 	/* tries to wake up the host connected to this gadget */
1256 	.wakeup		= mv_udc_wakeup,
1257 
1258 	/* notify controller that VBUS is powered or not */
1259 	.vbus_session	= mv_udc_vbus_session,
1260 
1261 	/* D+ pullup, software-controlled connect/disconnect to USB host */
1262 	.pullup		= mv_udc_pullup,
1263 	.start		= mv_udc_start,
1264 	.stop		= mv_udc_stop,
1265 };
1266 
eps_init(struct mv_udc * udc)1267 static int eps_init(struct mv_udc *udc)
1268 {
1269 	struct mv_ep	*ep;
1270 	char name[14];
1271 	int i;
1272 
1273 	/* initialize ep0 */
1274 	ep = &udc->eps[0];
1275 	ep->udc = udc;
1276 	strncpy(ep->name, "ep0", sizeof(ep->name));
1277 	ep->ep.name = ep->name;
1278 	ep->ep.ops = &mv_ep_ops;
1279 	ep->wedge = 0;
1280 	ep->stopped = 0;
1281 	ep->ep.maxpacket = EP0_MAX_PKT_SIZE;
1282 	ep->ep_num = 0;
1283 	ep->desc = &mv_ep0_desc;
1284 	INIT_LIST_HEAD(&ep->queue);
1285 
1286 	ep->ep_type = USB_ENDPOINT_XFER_CONTROL;
1287 
1288 	/* initialize other endpoints */
1289 	for (i = 2; i < udc->max_eps * 2; i++) {
1290 		ep = &udc->eps[i];
1291 		if (i % 2) {
1292 			snprintf(name, sizeof(name), "ep%din", i / 2);
1293 			ep->direction = EP_DIR_IN;
1294 		} else {
1295 			snprintf(name, sizeof(name), "ep%dout", i / 2);
1296 			ep->direction = EP_DIR_OUT;
1297 		}
1298 		ep->udc = udc;
1299 		strncpy(ep->name, name, sizeof(ep->name));
1300 		ep->ep.name = ep->name;
1301 
1302 		ep->ep.ops = &mv_ep_ops;
1303 		ep->stopped = 0;
1304 		ep->ep.maxpacket = (unsigned short) ~0;
1305 		ep->ep_num = i / 2;
1306 
1307 		INIT_LIST_HEAD(&ep->queue);
1308 		list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
1309 
1310 		ep->dqh = &udc->ep_dqh[i];
1311 	}
1312 
1313 	return 0;
1314 }
1315 
1316 /* delete all endpoint requests, called with spinlock held */
nuke(struct mv_ep * ep,int status)1317 static void nuke(struct mv_ep *ep, int status)
1318 {
1319 	/* called with spinlock held */
1320 	ep->stopped = 1;
1321 
1322 	/* endpoint fifo flush */
1323 	mv_ep_fifo_flush(&ep->ep);
1324 
1325 	while (!list_empty(&ep->queue)) {
1326 		struct mv_req *req = NULL;
1327 		req = list_entry(ep->queue.next, struct mv_req, queue);
1328 		done(ep, req, status);
1329 	}
1330 }
1331 
1332 /* stop all USB activities */
stop_activity(struct mv_udc * udc,struct usb_gadget_driver * driver)1333 static void stop_activity(struct mv_udc *udc, struct usb_gadget_driver *driver)
1334 {
1335 	struct mv_ep	*ep;
1336 
1337 	nuke(&udc->eps[0], -ESHUTDOWN);
1338 
1339 	list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
1340 		nuke(ep, -ESHUTDOWN);
1341 	}
1342 
1343 	/* report disconnect; the driver is already quiesced */
1344 	if (driver) {
1345 		spin_unlock(&udc->lock);
1346 		driver->disconnect(&udc->gadget);
1347 		spin_lock(&udc->lock);
1348 	}
1349 }
1350 
mv_udc_start(struct usb_gadget_driver * driver,int (* bind)(struct usb_gadget *))1351 static int mv_udc_start(struct usb_gadget_driver *driver,
1352 		int (*bind)(struct usb_gadget *))
1353 {
1354 	struct mv_udc *udc = the_controller;
1355 	int retval = 0;
1356 	unsigned long flags;
1357 
1358 	if (!udc)
1359 		return -ENODEV;
1360 
1361 	if (udc->driver)
1362 		return -EBUSY;
1363 
1364 	spin_lock_irqsave(&udc->lock, flags);
1365 
1366 	/* hook up the driver ... */
1367 	driver->driver.bus = NULL;
1368 	udc->driver = driver;
1369 	udc->gadget.dev.driver = &driver->driver;
1370 
1371 	udc->usb_state = USB_STATE_ATTACHED;
1372 	udc->ep0_state = WAIT_FOR_SETUP;
1373 	udc->ep0_dir = EP_DIR_OUT;
1374 
1375 	spin_unlock_irqrestore(&udc->lock, flags);
1376 
1377 	retval = bind(&udc->gadget);
1378 	if (retval) {
1379 		dev_err(&udc->dev->dev, "bind to driver %s --> %d\n",
1380 				driver->driver.name, retval);
1381 		udc->driver = NULL;
1382 		udc->gadget.dev.driver = NULL;
1383 		return retval;
1384 	}
1385 
1386 	if (udc->transceiver) {
1387 		retval = otg_set_peripheral(udc->transceiver, &udc->gadget);
1388 		if (retval) {
1389 			dev_err(&udc->dev->dev,
1390 				"unable to register peripheral to otg\n");
1391 			if (driver->unbind) {
1392 				driver->unbind(&udc->gadget);
1393 				udc->gadget.dev.driver = NULL;
1394 				udc->driver = NULL;
1395 			}
1396 			return retval;
1397 		}
1398 	}
1399 
1400 	/* pullup is always on */
1401 	mv_udc_pullup(&udc->gadget, 1);
1402 
1403 	/* When boot with cable attached, there will be no vbus irq occurred */
1404 	if (udc->qwork)
1405 		queue_work(udc->qwork, &udc->vbus_work);
1406 
1407 	return 0;
1408 }
1409 
mv_udc_stop(struct usb_gadget_driver * driver)1410 static int mv_udc_stop(struct usb_gadget_driver *driver)
1411 {
1412 	struct mv_udc *udc = the_controller;
1413 	unsigned long flags;
1414 
1415 	if (!udc)
1416 		return -ENODEV;
1417 
1418 	spin_lock_irqsave(&udc->lock, flags);
1419 
1420 	mv_udc_enable(udc);
1421 	udc_stop(udc);
1422 
1423 	/* stop all usb activities */
1424 	udc->gadget.speed = USB_SPEED_UNKNOWN;
1425 	stop_activity(udc, driver);
1426 	mv_udc_disable(udc);
1427 
1428 	spin_unlock_irqrestore(&udc->lock, flags);
1429 
1430 	/* unbind gadget driver */
1431 	driver->unbind(&udc->gadget);
1432 	udc->gadget.dev.driver = NULL;
1433 	udc->driver = NULL;
1434 
1435 	return 0;
1436 }
1437 
mv_set_ptc(struct mv_udc * udc,u32 mode)1438 static void mv_set_ptc(struct mv_udc *udc, u32 mode)
1439 {
1440 	u32 portsc;
1441 
1442 	portsc = readl(&udc->op_regs->portsc[0]);
1443 	portsc |= mode << 16;
1444 	writel(portsc, &udc->op_regs->portsc[0]);
1445 }
1446 
prime_status_complete(struct usb_ep * ep,struct usb_request * _req)1447 static void prime_status_complete(struct usb_ep *ep, struct usb_request *_req)
1448 {
1449 	struct mv_udc *udc = the_controller;
1450 	struct mv_req *req = container_of(_req, struct mv_req, req);
1451 	unsigned long flags;
1452 
1453 	dev_info(&udc->dev->dev, "switch to test mode %d\n", req->test_mode);
1454 
1455 	spin_lock_irqsave(&udc->lock, flags);
1456 	if (req->test_mode) {
1457 		mv_set_ptc(udc, req->test_mode);
1458 		req->test_mode = 0;
1459 	}
1460 	spin_unlock_irqrestore(&udc->lock, flags);
1461 }
1462 
1463 static int
udc_prime_status(struct mv_udc * udc,u8 direction,u16 status,bool empty)1464 udc_prime_status(struct mv_udc *udc, u8 direction, u16 status, bool empty)
1465 {
1466 	int retval = 0;
1467 	struct mv_req *req;
1468 	struct mv_ep *ep;
1469 
1470 	ep = &udc->eps[0];
1471 	udc->ep0_dir = direction;
1472 	udc->ep0_state = WAIT_FOR_OUT_STATUS;
1473 
1474 	req = udc->status_req;
1475 
1476 	/* fill in the reqest structure */
1477 	if (empty == false) {
1478 		*((u16 *) req->req.buf) = cpu_to_le16(status);
1479 		req->req.length = 2;
1480 	} else
1481 		req->req.length = 0;
1482 
1483 	req->ep = ep;
1484 	req->req.status = -EINPROGRESS;
1485 	req->req.actual = 0;
1486 	if (udc->test_mode) {
1487 		req->req.complete = prime_status_complete;
1488 		req->test_mode = udc->test_mode;
1489 		udc->test_mode = 0;
1490 	} else
1491 		req->req.complete = NULL;
1492 	req->dtd_count = 0;
1493 
1494 	if (req->req.dma == DMA_ADDR_INVALID) {
1495 		req->req.dma = dma_map_single(ep->udc->gadget.dev.parent,
1496 				req->req.buf, req->req.length,
1497 				ep_dir(ep) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
1498 		req->mapped = 1;
1499 	}
1500 
1501 	/* prime the data phase */
1502 	if (!req_to_dtd(req))
1503 		retval = queue_dtd(ep, req);
1504 	else{	/* no mem */
1505 		retval = -ENOMEM;
1506 		goto out;
1507 	}
1508 
1509 	if (retval) {
1510 		dev_err(&udc->dev->dev, "response error on GET_STATUS request\n");
1511 		goto out;
1512 	}
1513 
1514 	list_add_tail(&req->queue, &ep->queue);
1515 
1516 	return 0;
1517 out:
1518 	return retval;
1519 }
1520 
mv_udc_testmode(struct mv_udc * udc,u16 index)1521 static void mv_udc_testmode(struct mv_udc *udc, u16 index)
1522 {
1523 	if (index <= TEST_FORCE_EN) {
1524 		udc->test_mode = index;
1525 		if (udc_prime_status(udc, EP_DIR_IN, 0, true))
1526 			ep0_stall(udc);
1527 	} else
1528 		dev_err(&udc->dev->dev,
1529 			"This test mode(%d) is not supported\n", index);
1530 }
1531 
ch9setaddress(struct mv_udc * udc,struct usb_ctrlrequest * setup)1532 static void ch9setaddress(struct mv_udc *udc, struct usb_ctrlrequest *setup)
1533 {
1534 	udc->dev_addr = (u8)setup->wValue;
1535 
1536 	/* update usb state */
1537 	udc->usb_state = USB_STATE_ADDRESS;
1538 
1539 	if (udc_prime_status(udc, EP_DIR_IN, 0, true))
1540 		ep0_stall(udc);
1541 }
1542 
ch9getstatus(struct mv_udc * udc,u8 ep_num,struct usb_ctrlrequest * setup)1543 static void ch9getstatus(struct mv_udc *udc, u8 ep_num,
1544 	struct usb_ctrlrequest *setup)
1545 {
1546 	u16 status = 0;
1547 	int retval;
1548 
1549 	if ((setup->bRequestType & (USB_DIR_IN | USB_TYPE_MASK))
1550 		!= (USB_DIR_IN | USB_TYPE_STANDARD))
1551 		return;
1552 
1553 	if ((setup->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
1554 		status = 1 << USB_DEVICE_SELF_POWERED;
1555 		status |= udc->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP;
1556 	} else if ((setup->bRequestType & USB_RECIP_MASK)
1557 			== USB_RECIP_INTERFACE) {
1558 		/* get interface status */
1559 		status = 0;
1560 	} else if ((setup->bRequestType & USB_RECIP_MASK)
1561 			== USB_RECIP_ENDPOINT) {
1562 		u8 ep_num, direction;
1563 
1564 		ep_num = setup->wIndex & USB_ENDPOINT_NUMBER_MASK;
1565 		direction = (setup->wIndex & USB_ENDPOINT_DIR_MASK)
1566 				? EP_DIR_IN : EP_DIR_OUT;
1567 		status = ep_is_stall(udc, ep_num, direction)
1568 				<< USB_ENDPOINT_HALT;
1569 	}
1570 
1571 	retval = udc_prime_status(udc, EP_DIR_IN, status, false);
1572 	if (retval)
1573 		ep0_stall(udc);
1574 	else
1575 		udc->ep0_state = DATA_STATE_XMIT;
1576 }
1577 
ch9clearfeature(struct mv_udc * udc,struct usb_ctrlrequest * setup)1578 static void ch9clearfeature(struct mv_udc *udc, struct usb_ctrlrequest *setup)
1579 {
1580 	u8 ep_num;
1581 	u8 direction;
1582 	struct mv_ep *ep;
1583 
1584 	if ((setup->bRequestType & (USB_TYPE_MASK | USB_RECIP_MASK))
1585 		== ((USB_TYPE_STANDARD | USB_RECIP_DEVICE))) {
1586 		switch (setup->wValue) {
1587 		case USB_DEVICE_REMOTE_WAKEUP:
1588 			udc->remote_wakeup = 0;
1589 			break;
1590 		default:
1591 			goto out;
1592 		}
1593 	} else if ((setup->bRequestType & (USB_TYPE_MASK | USB_RECIP_MASK))
1594 		== ((USB_TYPE_STANDARD | USB_RECIP_ENDPOINT))) {
1595 		switch (setup->wValue) {
1596 		case USB_ENDPOINT_HALT:
1597 			ep_num = setup->wIndex & USB_ENDPOINT_NUMBER_MASK;
1598 			direction = (setup->wIndex & USB_ENDPOINT_DIR_MASK)
1599 				? EP_DIR_IN : EP_DIR_OUT;
1600 			if (setup->wValue != 0 || setup->wLength != 0
1601 				|| ep_num > udc->max_eps)
1602 				goto out;
1603 			ep = &udc->eps[ep_num * 2 + direction];
1604 			if (ep->wedge == 1)
1605 				break;
1606 			spin_unlock(&udc->lock);
1607 			ep_set_stall(udc, ep_num, direction, 0);
1608 			spin_lock(&udc->lock);
1609 			break;
1610 		default:
1611 			goto out;
1612 		}
1613 	} else
1614 		goto out;
1615 
1616 	if (udc_prime_status(udc, EP_DIR_IN, 0, true))
1617 		ep0_stall(udc);
1618 out:
1619 	return;
1620 }
1621 
ch9setfeature(struct mv_udc * udc,struct usb_ctrlrequest * setup)1622 static void ch9setfeature(struct mv_udc *udc, struct usb_ctrlrequest *setup)
1623 {
1624 	u8 ep_num;
1625 	u8 direction;
1626 
1627 	if ((setup->bRequestType & (USB_TYPE_MASK | USB_RECIP_MASK))
1628 		== ((USB_TYPE_STANDARD | USB_RECIP_DEVICE))) {
1629 		switch (setup->wValue) {
1630 		case USB_DEVICE_REMOTE_WAKEUP:
1631 			udc->remote_wakeup = 1;
1632 			break;
1633 		case USB_DEVICE_TEST_MODE:
1634 			if (setup->wIndex & 0xFF
1635 				||  udc->gadget.speed != USB_SPEED_HIGH)
1636 				ep0_stall(udc);
1637 
1638 			if (udc->usb_state != USB_STATE_CONFIGURED
1639 				&& udc->usb_state != USB_STATE_ADDRESS
1640 				&& udc->usb_state != USB_STATE_DEFAULT)
1641 				ep0_stall(udc);
1642 
1643 			mv_udc_testmode(udc, (setup->wIndex >> 8));
1644 			goto out;
1645 		default:
1646 			goto out;
1647 		}
1648 	} else if ((setup->bRequestType & (USB_TYPE_MASK | USB_RECIP_MASK))
1649 		== ((USB_TYPE_STANDARD | USB_RECIP_ENDPOINT))) {
1650 		switch (setup->wValue) {
1651 		case USB_ENDPOINT_HALT:
1652 			ep_num = setup->wIndex & USB_ENDPOINT_NUMBER_MASK;
1653 			direction = (setup->wIndex & USB_ENDPOINT_DIR_MASK)
1654 				? EP_DIR_IN : EP_DIR_OUT;
1655 			if (setup->wValue != 0 || setup->wLength != 0
1656 				|| ep_num > udc->max_eps)
1657 				goto out;
1658 			spin_unlock(&udc->lock);
1659 			ep_set_stall(udc, ep_num, direction, 1);
1660 			spin_lock(&udc->lock);
1661 			break;
1662 		default:
1663 			goto out;
1664 		}
1665 	} else
1666 		goto out;
1667 
1668 	if (udc_prime_status(udc, EP_DIR_IN, 0, true))
1669 		ep0_stall(udc);
1670 out:
1671 	return;
1672 }
1673 
handle_setup_packet(struct mv_udc * udc,u8 ep_num,struct usb_ctrlrequest * setup)1674 static void handle_setup_packet(struct mv_udc *udc, u8 ep_num,
1675 	struct usb_ctrlrequest *setup)
1676 {
1677 	bool delegate = false;
1678 
1679 	nuke(&udc->eps[ep_num * 2 + EP_DIR_OUT], -ESHUTDOWN);
1680 
1681 	dev_dbg(&udc->dev->dev, "SETUP %02x.%02x v%04x i%04x l%04x\n",
1682 			setup->bRequestType, setup->bRequest,
1683 			setup->wValue, setup->wIndex, setup->wLength);
1684 	/* We process some stardard setup requests here */
1685 	if ((setup->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
1686 		switch (setup->bRequest) {
1687 		case USB_REQ_GET_STATUS:
1688 			ch9getstatus(udc, ep_num, setup);
1689 			break;
1690 
1691 		case USB_REQ_SET_ADDRESS:
1692 			ch9setaddress(udc, setup);
1693 			break;
1694 
1695 		case USB_REQ_CLEAR_FEATURE:
1696 			ch9clearfeature(udc, setup);
1697 			break;
1698 
1699 		case USB_REQ_SET_FEATURE:
1700 			ch9setfeature(udc, setup);
1701 			break;
1702 
1703 		default:
1704 			delegate = true;
1705 		}
1706 	} else
1707 		delegate = true;
1708 
1709 	/* delegate USB standard requests to the gadget driver */
1710 	if (delegate == true) {
1711 		/* USB requests handled by gadget */
1712 		if (setup->wLength) {
1713 			/* DATA phase from gadget, STATUS phase from udc */
1714 			udc->ep0_dir = (setup->bRequestType & USB_DIR_IN)
1715 					?  EP_DIR_IN : EP_DIR_OUT;
1716 			spin_unlock(&udc->lock);
1717 			if (udc->driver->setup(&udc->gadget,
1718 				&udc->local_setup_buff) < 0)
1719 				ep0_stall(udc);
1720 			spin_lock(&udc->lock);
1721 			udc->ep0_state = (setup->bRequestType & USB_DIR_IN)
1722 					?  DATA_STATE_XMIT : DATA_STATE_RECV;
1723 		} else {
1724 			/* no DATA phase, IN STATUS phase from gadget */
1725 			udc->ep0_dir = EP_DIR_IN;
1726 			spin_unlock(&udc->lock);
1727 			if (udc->driver->setup(&udc->gadget,
1728 				&udc->local_setup_buff) < 0)
1729 				ep0_stall(udc);
1730 			spin_lock(&udc->lock);
1731 			udc->ep0_state = WAIT_FOR_OUT_STATUS;
1732 		}
1733 	}
1734 }
1735 
1736 /* complete DATA or STATUS phase of ep0 prime status phase if needed */
ep0_req_complete(struct mv_udc * udc,struct mv_ep * ep0,struct mv_req * req)1737 static void ep0_req_complete(struct mv_udc *udc,
1738 	struct mv_ep *ep0, struct mv_req *req)
1739 {
1740 	u32 new_addr;
1741 
1742 	if (udc->usb_state == USB_STATE_ADDRESS) {
1743 		/* set the new address */
1744 		new_addr = (u32)udc->dev_addr;
1745 		writel(new_addr << USB_DEVICE_ADDRESS_BIT_SHIFT,
1746 			&udc->op_regs->deviceaddr);
1747 	}
1748 
1749 	done(ep0, req, 0);
1750 
1751 	switch (udc->ep0_state) {
1752 	case DATA_STATE_XMIT:
1753 		/* receive status phase */
1754 		if (udc_prime_status(udc, EP_DIR_OUT, 0, true))
1755 			ep0_stall(udc);
1756 		break;
1757 	case DATA_STATE_RECV:
1758 		/* send status phase */
1759 		if (udc_prime_status(udc, EP_DIR_IN, 0 , true))
1760 			ep0_stall(udc);
1761 		break;
1762 	case WAIT_FOR_OUT_STATUS:
1763 		udc->ep0_state = WAIT_FOR_SETUP;
1764 		break;
1765 	case WAIT_FOR_SETUP:
1766 		dev_err(&udc->dev->dev, "unexpect ep0 packets\n");
1767 		break;
1768 	default:
1769 		ep0_stall(udc);
1770 		break;
1771 	}
1772 }
1773 
get_setup_data(struct mv_udc * udc,u8 ep_num,u8 * buffer_ptr)1774 static void get_setup_data(struct mv_udc *udc, u8 ep_num, u8 *buffer_ptr)
1775 {
1776 	u32 temp;
1777 	struct mv_dqh *dqh;
1778 
1779 	dqh = &udc->ep_dqh[ep_num * 2 + EP_DIR_OUT];
1780 
1781 	/* Clear bit in ENDPTSETUPSTAT */
1782 	writel((1 << ep_num), &udc->op_regs->epsetupstat);
1783 
1784 	/* while a hazard exists when setup package arrives */
1785 	do {
1786 		/* Set Setup Tripwire */
1787 		temp = readl(&udc->op_regs->usbcmd);
1788 		writel(temp | USBCMD_SETUP_TRIPWIRE_SET, &udc->op_regs->usbcmd);
1789 
1790 		/* Copy the setup packet to local buffer */
1791 		memcpy(buffer_ptr, (u8 *) dqh->setup_buffer, 8);
1792 	} while (!(readl(&udc->op_regs->usbcmd) & USBCMD_SETUP_TRIPWIRE_SET));
1793 
1794 	/* Clear Setup Tripwire */
1795 	temp = readl(&udc->op_regs->usbcmd);
1796 	writel(temp & ~USBCMD_SETUP_TRIPWIRE_SET, &udc->op_regs->usbcmd);
1797 }
1798 
irq_process_tr_complete(struct mv_udc * udc)1799 static void irq_process_tr_complete(struct mv_udc *udc)
1800 {
1801 	u32 tmp, bit_pos;
1802 	int i, ep_num = 0, direction = 0;
1803 	struct mv_ep	*curr_ep;
1804 	struct mv_req *curr_req, *temp_req;
1805 	int status;
1806 
1807 	/*
1808 	 * We use separate loops for ENDPTSETUPSTAT and ENDPTCOMPLETE
1809 	 * because the setup packets are to be read ASAP
1810 	 */
1811 
1812 	/* Process all Setup packet received interrupts */
1813 	tmp = readl(&udc->op_regs->epsetupstat);
1814 
1815 	if (tmp) {
1816 		for (i = 0; i < udc->max_eps; i++) {
1817 			if (tmp & (1 << i)) {
1818 				get_setup_data(udc, i,
1819 					(u8 *)(&udc->local_setup_buff));
1820 				handle_setup_packet(udc, i,
1821 					&udc->local_setup_buff);
1822 			}
1823 		}
1824 	}
1825 
1826 	/* Don't clear the endpoint setup status register here.
1827 	 * It is cleared as a setup packet is read out of the buffer
1828 	 */
1829 
1830 	/* Process non-setup transaction complete interrupts */
1831 	tmp = readl(&udc->op_regs->epcomplete);
1832 
1833 	if (!tmp)
1834 		return;
1835 
1836 	writel(tmp, &udc->op_regs->epcomplete);
1837 
1838 	for (i = 0; i < udc->max_eps * 2; i++) {
1839 		ep_num = i >> 1;
1840 		direction = i % 2;
1841 
1842 		bit_pos = 1 << (ep_num + 16 * direction);
1843 
1844 		if (!(bit_pos & tmp))
1845 			continue;
1846 
1847 		if (i == 1)
1848 			curr_ep = &udc->eps[0];
1849 		else
1850 			curr_ep = &udc->eps[i];
1851 		/* process the req queue until an uncomplete request */
1852 		list_for_each_entry_safe(curr_req, temp_req,
1853 			&curr_ep->queue, queue) {
1854 			status = process_ep_req(udc, i, curr_req);
1855 			if (status)
1856 				break;
1857 
1858 			/* write back status to req */
1859 			curr_req->req.status = status;
1860 
1861 			/* ep0 request completion */
1862 			if (ep_num == 0) {
1863 				ep0_req_complete(udc, curr_ep, curr_req);
1864 				break;
1865 			} else {
1866 				done(curr_ep, curr_req, status);
1867 			}
1868 		}
1869 	}
1870 }
1871 
irq_process_reset(struct mv_udc * udc)1872 void irq_process_reset(struct mv_udc *udc)
1873 {
1874 	u32 tmp;
1875 	unsigned int loops;
1876 
1877 	udc->ep0_dir = EP_DIR_OUT;
1878 	udc->ep0_state = WAIT_FOR_SETUP;
1879 	udc->remote_wakeup = 0;		/* default to 0 on reset */
1880 
1881 	/* The address bits are past bit 25-31. Set the address */
1882 	tmp = readl(&udc->op_regs->deviceaddr);
1883 	tmp &= ~(USB_DEVICE_ADDRESS_MASK);
1884 	writel(tmp, &udc->op_regs->deviceaddr);
1885 
1886 	/* Clear all the setup token semaphores */
1887 	tmp = readl(&udc->op_regs->epsetupstat);
1888 	writel(tmp, &udc->op_regs->epsetupstat);
1889 
1890 	/* Clear all the endpoint complete status bits */
1891 	tmp = readl(&udc->op_regs->epcomplete);
1892 	writel(tmp, &udc->op_regs->epcomplete);
1893 
1894 	/* wait until all endptprime bits cleared */
1895 	loops = LOOPS(PRIME_TIMEOUT);
1896 	while (readl(&udc->op_regs->epprime) & 0xFFFFFFFF) {
1897 		if (loops == 0) {
1898 			dev_err(&udc->dev->dev,
1899 				"Timeout for ENDPTPRIME = 0x%x\n",
1900 				readl(&udc->op_regs->epprime));
1901 			break;
1902 		}
1903 		loops--;
1904 		udelay(LOOPS_USEC);
1905 	}
1906 
1907 	/* Write 1s to the Flush register */
1908 	writel((u32)~0, &udc->op_regs->epflush);
1909 
1910 	if (readl(&udc->op_regs->portsc[0]) & PORTSCX_PORT_RESET) {
1911 		dev_info(&udc->dev->dev, "usb bus reset\n");
1912 		udc->usb_state = USB_STATE_DEFAULT;
1913 		/* reset all the queues, stop all USB activities */
1914 		stop_activity(udc, udc->driver);
1915 	} else {
1916 		dev_info(&udc->dev->dev, "USB reset portsc 0x%x\n",
1917 			readl(&udc->op_regs->portsc));
1918 
1919 		/*
1920 		 * re-initialize
1921 		 * controller reset
1922 		 */
1923 		udc_reset(udc);
1924 
1925 		/* reset all the queues, stop all USB activities */
1926 		stop_activity(udc, udc->driver);
1927 
1928 		/* reset ep0 dQH and endptctrl */
1929 		ep0_reset(udc);
1930 
1931 		/* enable interrupt and set controller to run state */
1932 		udc_start(udc);
1933 
1934 		udc->usb_state = USB_STATE_ATTACHED;
1935 	}
1936 }
1937 
handle_bus_resume(struct mv_udc * udc)1938 static void handle_bus_resume(struct mv_udc *udc)
1939 {
1940 	udc->usb_state = udc->resume_state;
1941 	udc->resume_state = 0;
1942 
1943 	/* report resume to the driver */
1944 	if (udc->driver) {
1945 		if (udc->driver->resume) {
1946 			spin_unlock(&udc->lock);
1947 			udc->driver->resume(&udc->gadget);
1948 			spin_lock(&udc->lock);
1949 		}
1950 	}
1951 }
1952 
irq_process_suspend(struct mv_udc * udc)1953 static void irq_process_suspend(struct mv_udc *udc)
1954 {
1955 	udc->resume_state = udc->usb_state;
1956 	udc->usb_state = USB_STATE_SUSPENDED;
1957 
1958 	if (udc->driver->suspend) {
1959 		spin_unlock(&udc->lock);
1960 		udc->driver->suspend(&udc->gadget);
1961 		spin_lock(&udc->lock);
1962 	}
1963 }
1964 
irq_process_port_change(struct mv_udc * udc)1965 static void irq_process_port_change(struct mv_udc *udc)
1966 {
1967 	u32 portsc;
1968 
1969 	portsc = readl(&udc->op_regs->portsc[0]);
1970 	if (!(portsc & PORTSCX_PORT_RESET)) {
1971 		/* Get the speed */
1972 		u32 speed = portsc & PORTSCX_PORT_SPEED_MASK;
1973 		switch (speed) {
1974 		case PORTSCX_PORT_SPEED_HIGH:
1975 			udc->gadget.speed = USB_SPEED_HIGH;
1976 			break;
1977 		case PORTSCX_PORT_SPEED_FULL:
1978 			udc->gadget.speed = USB_SPEED_FULL;
1979 			break;
1980 		case PORTSCX_PORT_SPEED_LOW:
1981 			udc->gadget.speed = USB_SPEED_LOW;
1982 			break;
1983 		default:
1984 			udc->gadget.speed = USB_SPEED_UNKNOWN;
1985 			break;
1986 		}
1987 	}
1988 
1989 	if (portsc & PORTSCX_PORT_SUSPEND) {
1990 		udc->resume_state = udc->usb_state;
1991 		udc->usb_state = USB_STATE_SUSPENDED;
1992 		if (udc->driver->suspend) {
1993 			spin_unlock(&udc->lock);
1994 			udc->driver->suspend(&udc->gadget);
1995 			spin_lock(&udc->lock);
1996 		}
1997 	}
1998 
1999 	if (!(portsc & PORTSCX_PORT_SUSPEND)
2000 		&& udc->usb_state == USB_STATE_SUSPENDED) {
2001 		handle_bus_resume(udc);
2002 	}
2003 
2004 	if (!udc->resume_state)
2005 		udc->usb_state = USB_STATE_DEFAULT;
2006 }
2007 
irq_process_error(struct mv_udc * udc)2008 static void irq_process_error(struct mv_udc *udc)
2009 {
2010 	/* Increment the error count */
2011 	udc->errors++;
2012 }
2013 
mv_udc_irq(int irq,void * dev)2014 static irqreturn_t mv_udc_irq(int irq, void *dev)
2015 {
2016 	struct mv_udc *udc = (struct mv_udc *)dev;
2017 	u32 status, intr;
2018 
2019 	/* Disable ISR when stopped bit is set */
2020 	if (udc->stopped)
2021 		return IRQ_NONE;
2022 
2023 	spin_lock(&udc->lock);
2024 
2025 	status = readl(&udc->op_regs->usbsts);
2026 	intr = readl(&udc->op_regs->usbintr);
2027 	status &= intr;
2028 
2029 	if (status == 0) {
2030 		spin_unlock(&udc->lock);
2031 		return IRQ_NONE;
2032 	}
2033 
2034 	/* Clear all the interrupts occurred */
2035 	writel(status, &udc->op_regs->usbsts);
2036 
2037 	if (status & USBSTS_ERR)
2038 		irq_process_error(udc);
2039 
2040 	if (status & USBSTS_RESET)
2041 		irq_process_reset(udc);
2042 
2043 	if (status & USBSTS_PORT_CHANGE)
2044 		irq_process_port_change(udc);
2045 
2046 	if (status & USBSTS_INT)
2047 		irq_process_tr_complete(udc);
2048 
2049 	if (status & USBSTS_SUSPEND)
2050 		irq_process_suspend(udc);
2051 
2052 	spin_unlock(&udc->lock);
2053 
2054 	return IRQ_HANDLED;
2055 }
2056 
mv_udc_vbus_irq(int irq,void * dev)2057 static irqreturn_t mv_udc_vbus_irq(int irq, void *dev)
2058 {
2059 	struct mv_udc *udc = (struct mv_udc *)dev;
2060 
2061 	/* polling VBUS and init phy may cause too much time*/
2062 	if (udc->qwork)
2063 		queue_work(udc->qwork, &udc->vbus_work);
2064 
2065 	return IRQ_HANDLED;
2066 }
2067 
mv_udc_vbus_work(struct work_struct * work)2068 static void mv_udc_vbus_work(struct work_struct *work)
2069 {
2070 	struct mv_udc *udc;
2071 	unsigned int vbus;
2072 
2073 	udc = container_of(work, struct mv_udc, vbus_work);
2074 	if (!udc->pdata->vbus)
2075 		return;
2076 
2077 	vbus = udc->pdata->vbus->poll();
2078 	dev_info(&udc->dev->dev, "vbus is %d\n", vbus);
2079 
2080 	if (vbus == VBUS_HIGH)
2081 		mv_udc_vbus_session(&udc->gadget, 1);
2082 	else if (vbus == VBUS_LOW)
2083 		mv_udc_vbus_session(&udc->gadget, 0);
2084 }
2085 
2086 /* release device structure */
gadget_release(struct device * _dev)2087 static void gadget_release(struct device *_dev)
2088 {
2089 	struct mv_udc *udc = the_controller;
2090 
2091 	complete(udc->done);
2092 }
2093 
mv_udc_remove(struct platform_device * dev)2094 static int __devexit mv_udc_remove(struct platform_device *dev)
2095 {
2096 	struct mv_udc *udc = the_controller;
2097 	int clk_i;
2098 
2099 	usb_del_gadget_udc(&udc->gadget);
2100 
2101 	if (udc->qwork) {
2102 		flush_workqueue(udc->qwork);
2103 		destroy_workqueue(udc->qwork);
2104 	}
2105 
2106 	/*
2107 	 * If we have transceiver inited,
2108 	 * then vbus irq will not be requested in udc driver.
2109 	 */
2110 	if (udc->pdata && udc->pdata->vbus
2111 		&& udc->clock_gating && udc->transceiver == NULL)
2112 		free_irq(udc->pdata->vbus->irq, &dev->dev);
2113 
2114 	/* free memory allocated in probe */
2115 	if (udc->dtd_pool)
2116 		dma_pool_destroy(udc->dtd_pool);
2117 
2118 	if (udc->ep_dqh)
2119 		dma_free_coherent(&dev->dev, udc->ep_dqh_size,
2120 			udc->ep_dqh, udc->ep_dqh_dma);
2121 
2122 	kfree(udc->eps);
2123 
2124 	if (udc->irq)
2125 		free_irq(udc->irq, &dev->dev);
2126 
2127 	mv_udc_disable(udc);
2128 
2129 	if (udc->cap_regs)
2130 		iounmap(udc->cap_regs);
2131 
2132 	if (udc->phy_regs)
2133 		iounmap(udc->phy_regs);
2134 
2135 	if (udc->status_req) {
2136 		kfree(udc->status_req->req.buf);
2137 		kfree(udc->status_req);
2138 	}
2139 
2140 	for (clk_i = 0; clk_i <= udc->clknum; clk_i++)
2141 		clk_put(udc->clk[clk_i]);
2142 
2143 	device_unregister(&udc->gadget.dev);
2144 
2145 	/* free dev, wait for the release() finished */
2146 	wait_for_completion(udc->done);
2147 	kfree(udc);
2148 
2149 	the_controller = NULL;
2150 
2151 	return 0;
2152 }
2153 
mv_udc_probe(struct platform_device * dev)2154 static int __devinit mv_udc_probe(struct platform_device *dev)
2155 {
2156 	struct mv_usb_platform_data *pdata = dev->dev.platform_data;
2157 	struct mv_udc *udc;
2158 	int retval = 0;
2159 	int clk_i = 0;
2160 	struct resource *r;
2161 	size_t size;
2162 
2163 	if (pdata == NULL) {
2164 		dev_err(&dev->dev, "missing platform_data\n");
2165 		return -ENODEV;
2166 	}
2167 
2168 	size = sizeof(*udc) + sizeof(struct clk *) * pdata->clknum;
2169 	udc = kzalloc(size, GFP_KERNEL);
2170 	if (udc == NULL) {
2171 		dev_err(&dev->dev, "failed to allocate memory for udc\n");
2172 		return -ENOMEM;
2173 	}
2174 
2175 	the_controller = udc;
2176 	udc->done = &release_done;
2177 	udc->pdata = dev->dev.platform_data;
2178 	spin_lock_init(&udc->lock);
2179 
2180 	udc->dev = dev;
2181 
2182 #ifdef CONFIG_USB_OTG_UTILS
2183 	if (pdata->mode == MV_USB_MODE_OTG)
2184 		udc->transceiver = otg_get_transceiver();
2185 #endif
2186 
2187 	udc->clknum = pdata->clknum;
2188 	for (clk_i = 0; clk_i < udc->clknum; clk_i++) {
2189 		udc->clk[clk_i] = clk_get(&dev->dev, pdata->clkname[clk_i]);
2190 		if (IS_ERR(udc->clk[clk_i])) {
2191 			retval = PTR_ERR(udc->clk[clk_i]);
2192 			goto err_put_clk;
2193 		}
2194 	}
2195 
2196 	r = platform_get_resource_byname(udc->dev, IORESOURCE_MEM, "capregs");
2197 	if (r == NULL) {
2198 		dev_err(&dev->dev, "no I/O memory resource defined\n");
2199 		retval = -ENODEV;
2200 		goto err_put_clk;
2201 	}
2202 
2203 	udc->cap_regs = (struct mv_cap_regs __iomem *)
2204 		ioremap(r->start, resource_size(r));
2205 	if (udc->cap_regs == NULL) {
2206 		dev_err(&dev->dev, "failed to map I/O memory\n");
2207 		retval = -EBUSY;
2208 		goto err_put_clk;
2209 	}
2210 
2211 	r = platform_get_resource_byname(udc->dev, IORESOURCE_MEM, "phyregs");
2212 	if (r == NULL) {
2213 		dev_err(&dev->dev, "no phy I/O memory resource defined\n");
2214 		retval = -ENODEV;
2215 		goto err_iounmap_capreg;
2216 	}
2217 
2218 	udc->phy_regs = ioremap(r->start, resource_size(r));
2219 	if (udc->phy_regs == NULL) {
2220 		dev_err(&dev->dev, "failed to map phy I/O memory\n");
2221 		retval = -EBUSY;
2222 		goto err_iounmap_capreg;
2223 	}
2224 
2225 	/* we will acces controller register, so enable the clk */
2226 	retval = mv_udc_enable_internal(udc);
2227 	if (retval)
2228 		goto err_iounmap_phyreg;
2229 
2230 	udc->op_regs =
2231 		(struct mv_op_regs __iomem *)((unsigned long)udc->cap_regs
2232 		+ (readl(&udc->cap_regs->caplength_hciversion)
2233 			& CAPLENGTH_MASK));
2234 	udc->max_eps = readl(&udc->cap_regs->dccparams) & DCCPARAMS_DEN_MASK;
2235 
2236 	/*
2237 	 * some platform will use usb to download image, it may not disconnect
2238 	 * usb gadget before loading kernel. So first stop udc here.
2239 	 */
2240 	udc_stop(udc);
2241 	writel(0xFFFFFFFF, &udc->op_regs->usbsts);
2242 
2243 	size = udc->max_eps * sizeof(struct mv_dqh) *2;
2244 	size = (size + DQH_ALIGNMENT - 1) & ~(DQH_ALIGNMENT - 1);
2245 	udc->ep_dqh = dma_alloc_coherent(&dev->dev, size,
2246 					&udc->ep_dqh_dma, GFP_KERNEL);
2247 
2248 	if (udc->ep_dqh == NULL) {
2249 		dev_err(&dev->dev, "allocate dQH memory failed\n");
2250 		retval = -ENOMEM;
2251 		goto err_disable_clock;
2252 	}
2253 	udc->ep_dqh_size = size;
2254 
2255 	/* create dTD dma_pool resource */
2256 	udc->dtd_pool = dma_pool_create("mv_dtd",
2257 			&dev->dev,
2258 			sizeof(struct mv_dtd),
2259 			DTD_ALIGNMENT,
2260 			DMA_BOUNDARY);
2261 
2262 	if (!udc->dtd_pool) {
2263 		retval = -ENOMEM;
2264 		goto err_free_dma;
2265 	}
2266 
2267 	size = udc->max_eps * sizeof(struct mv_ep) *2;
2268 	udc->eps = kzalloc(size, GFP_KERNEL);
2269 	if (udc->eps == NULL) {
2270 		dev_err(&dev->dev, "allocate ep memory failed\n");
2271 		retval = -ENOMEM;
2272 		goto err_destroy_dma;
2273 	}
2274 
2275 	/* initialize ep0 status request structure */
2276 	udc->status_req = kzalloc(sizeof(struct mv_req), GFP_KERNEL);
2277 	if (!udc->status_req) {
2278 		dev_err(&dev->dev, "allocate status_req memory failed\n");
2279 		retval = -ENOMEM;
2280 		goto err_free_eps;
2281 	}
2282 	INIT_LIST_HEAD(&udc->status_req->queue);
2283 
2284 	/* allocate a small amount of memory to get valid address */
2285 	udc->status_req->req.buf = kzalloc(8, GFP_KERNEL);
2286 	udc->status_req->req.dma = DMA_ADDR_INVALID;
2287 
2288 	udc->resume_state = USB_STATE_NOTATTACHED;
2289 	udc->usb_state = USB_STATE_POWERED;
2290 	udc->ep0_dir = EP_DIR_OUT;
2291 	udc->remote_wakeup = 0;
2292 
2293 	r = platform_get_resource(udc->dev, IORESOURCE_IRQ, 0);
2294 	if (r == NULL) {
2295 		dev_err(&dev->dev, "no IRQ resource defined\n");
2296 		retval = -ENODEV;
2297 		goto err_free_status_req;
2298 	}
2299 	udc->irq = r->start;
2300 	if (request_irq(udc->irq, mv_udc_irq,
2301 		IRQF_SHARED, driver_name, udc)) {
2302 		dev_err(&dev->dev, "Request irq %d for UDC failed\n",
2303 			udc->irq);
2304 		retval = -ENODEV;
2305 		goto err_free_status_req;
2306 	}
2307 
2308 	/* initialize gadget structure */
2309 	udc->gadget.ops = &mv_ops;	/* usb_gadget_ops */
2310 	udc->gadget.ep0 = &udc->eps[0].ep;	/* gadget ep0 */
2311 	INIT_LIST_HEAD(&udc->gadget.ep_list);	/* ep_list */
2312 	udc->gadget.speed = USB_SPEED_UNKNOWN;	/* speed */
2313 	udc->gadget.max_speed = USB_SPEED_HIGH;	/* support dual speed */
2314 
2315 	/* the "gadget" abstracts/virtualizes the controller */
2316 	dev_set_name(&udc->gadget.dev, "gadget");
2317 	udc->gadget.dev.parent = &dev->dev;
2318 	udc->gadget.dev.dma_mask = dev->dev.dma_mask;
2319 	udc->gadget.dev.release = gadget_release;
2320 	udc->gadget.name = driver_name;		/* gadget name */
2321 
2322 	retval = device_register(&udc->gadget.dev);
2323 	if (retval)
2324 		goto err_free_irq;
2325 
2326 	eps_init(udc);
2327 
2328 	/* VBUS detect: we can disable/enable clock on demand.*/
2329 	if (udc->transceiver)
2330 		udc->clock_gating = 1;
2331 	else if (pdata->vbus) {
2332 		udc->clock_gating = 1;
2333 		retval = request_threaded_irq(pdata->vbus->irq, NULL,
2334 				mv_udc_vbus_irq, IRQF_ONESHOT, "vbus", udc);
2335 		if (retval) {
2336 			dev_info(&dev->dev,
2337 				"Can not request irq for VBUS, "
2338 				"disable clock gating\n");
2339 			udc->clock_gating = 0;
2340 		}
2341 
2342 		udc->qwork = create_singlethread_workqueue("mv_udc_queue");
2343 		if (!udc->qwork) {
2344 			dev_err(&dev->dev, "cannot create workqueue\n");
2345 			retval = -ENOMEM;
2346 			goto err_unregister;
2347 		}
2348 
2349 		INIT_WORK(&udc->vbus_work, mv_udc_vbus_work);
2350 	}
2351 
2352 	/*
2353 	 * When clock gating is supported, we can disable clk and phy.
2354 	 * If not, it means that VBUS detection is not supported, we
2355 	 * have to enable vbus active all the time to let controller work.
2356 	 */
2357 	if (udc->clock_gating)
2358 		mv_udc_disable_internal(udc);
2359 	else
2360 		udc->vbus_active = 1;
2361 
2362 	retval = usb_add_gadget_udc(&dev->dev, &udc->gadget);
2363 	if (retval)
2364 		goto err_unregister;
2365 
2366 	dev_info(&dev->dev, "successful probe UDC device %s clock gating.\n",
2367 		udc->clock_gating ? "with" : "without");
2368 
2369 	return 0;
2370 
2371 err_unregister:
2372 	if (udc->pdata && udc->pdata->vbus
2373 		&& udc->clock_gating && udc->transceiver == NULL)
2374 		free_irq(pdata->vbus->irq, &dev->dev);
2375 	device_unregister(&udc->gadget.dev);
2376 err_free_irq:
2377 	free_irq(udc->irq, &dev->dev);
2378 err_free_status_req:
2379 	kfree(udc->status_req->req.buf);
2380 	kfree(udc->status_req);
2381 err_free_eps:
2382 	kfree(udc->eps);
2383 err_destroy_dma:
2384 	dma_pool_destroy(udc->dtd_pool);
2385 err_free_dma:
2386 	dma_free_coherent(&dev->dev, udc->ep_dqh_size,
2387 			udc->ep_dqh, udc->ep_dqh_dma);
2388 err_disable_clock:
2389 	mv_udc_disable_internal(udc);
2390 err_iounmap_phyreg:
2391 	iounmap(udc->phy_regs);
2392 err_iounmap_capreg:
2393 	iounmap(udc->cap_regs);
2394 err_put_clk:
2395 	for (clk_i--; clk_i >= 0; clk_i--)
2396 		clk_put(udc->clk[clk_i]);
2397 	the_controller = NULL;
2398 	kfree(udc);
2399 	return retval;
2400 }
2401 
2402 #ifdef CONFIG_PM
mv_udc_suspend(struct device * _dev)2403 static int mv_udc_suspend(struct device *_dev)
2404 {
2405 	struct mv_udc *udc = the_controller;
2406 
2407 	/* if OTG is enabled, the following will be done in OTG driver*/
2408 	if (udc->transceiver)
2409 		return 0;
2410 
2411 	if (udc->pdata->vbus && udc->pdata->vbus->poll)
2412 		if (udc->pdata->vbus->poll() == VBUS_HIGH) {
2413 			dev_info(&udc->dev->dev, "USB cable is connected!\n");
2414 			return -EAGAIN;
2415 		}
2416 
2417 	/*
2418 	 * only cable is unplugged, udc can suspend.
2419 	 * So do not care about clock_gating == 1.
2420 	 */
2421 	if (!udc->clock_gating) {
2422 		udc_stop(udc);
2423 
2424 		spin_lock_irq(&udc->lock);
2425 		/* stop all usb activities */
2426 		stop_activity(udc, udc->driver);
2427 		spin_unlock_irq(&udc->lock);
2428 
2429 		mv_udc_disable_internal(udc);
2430 	}
2431 
2432 	return 0;
2433 }
2434 
mv_udc_resume(struct device * _dev)2435 static int mv_udc_resume(struct device *_dev)
2436 {
2437 	struct mv_udc *udc = the_controller;
2438 	int retval;
2439 
2440 	/* if OTG is enabled, the following will be done in OTG driver*/
2441 	if (udc->transceiver)
2442 		return 0;
2443 
2444 	if (!udc->clock_gating) {
2445 		retval = mv_udc_enable_internal(udc);
2446 		if (retval)
2447 			return retval;
2448 
2449 		if (udc->driver && udc->softconnect) {
2450 			udc_reset(udc);
2451 			ep0_reset(udc);
2452 			udc_start(udc);
2453 		}
2454 	}
2455 
2456 	return 0;
2457 }
2458 
2459 static const struct dev_pm_ops mv_udc_pm_ops = {
2460 	.suspend	= mv_udc_suspend,
2461 	.resume		= mv_udc_resume,
2462 };
2463 #endif
2464 
mv_udc_shutdown(struct platform_device * dev)2465 static void mv_udc_shutdown(struct platform_device *dev)
2466 {
2467 	struct mv_udc *udc = the_controller;
2468 	u32 mode;
2469 
2470 	/* reset controller mode to IDLE */
2471 	mode = readl(&udc->op_regs->usbmode);
2472 	mode &= ~3;
2473 	writel(mode, &udc->op_regs->usbmode);
2474 }
2475 
2476 static struct platform_driver udc_driver = {
2477 	.probe		= mv_udc_probe,
2478 	.remove		= __exit_p(mv_udc_remove),
2479 	.shutdown	= mv_udc_shutdown,
2480 	.driver		= {
2481 		.owner	= THIS_MODULE,
2482 		.name	= "mv-udc",
2483 #ifdef CONFIG_PM
2484 		.pm	= &mv_udc_pm_ops,
2485 #endif
2486 	},
2487 };
2488 
2489 module_platform_driver(udc_driver);
2490 MODULE_ALIAS("platform:mv-udc");
2491 MODULE_DESCRIPTION(DRIVER_DESC);
2492 MODULE_AUTHOR("Chao Xie <chao.xie@marvell.com>");
2493 MODULE_VERSION(DRIVER_VERSION);
2494 MODULE_LICENSE("GPL");
2495