xref: /openbmc/linux/drivers/usb/host/isp116x-hcd.c (revision 643d1f7f)
1 /*
2  * ISP116x HCD (Host Controller Driver) for USB.
3  *
4  * Derived from the SL811 HCD, rewritten for ISP116x.
5  * Copyright (C) 2005 Olav Kongas <ok@artecdesign.ee>
6  *
7  * Portions:
8  * Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
9  * Copyright (C) 2004 David Brownell
10  *
11  * Periodic scheduling is based on Roman's OHCI code
12  * Copyright (C) 1999 Roman Weissgaerber
13  *
14  */
15 
16 /*
17  * The driver basically works. A number of people have used it with a range
18  * of devices.
19  *
20  * The driver passes all usbtests 1-14.
21  *
22  * Suspending/resuming of root hub via sysfs works. Remote wakeup works too.
23  * And suspending/resuming of platform device works too. Suspend/resume
24  * via HCD operations vector is not implemented.
25  *
26  * Iso transfer support is not implemented. Adding this would include
27  * implementing recovery from the failure to service the processed ITL
28  * fifo ram in time, which will involve chip reset.
29  *
30  * TODO:
31  + More testing of suspend/resume.
32 */
33 
34 /*
35   ISP116x chips require certain delays between accesses to its
36   registers. The following timing options exist.
37 
38   1. Configure your memory controller (the best)
39   2. Implement platform-specific delay function possibly
40   combined with configuring the memory controller; see
41   include/linux/usb-isp116x.h for more info. Some broken
42   memory controllers line LH7A400 SMC need this. Also,
43   uncomment for that to work the following
44   USE_PLATFORM_DELAY macro.
45   3. Use ndelay (easiest, poorest). For that, uncomment
46   the following USE_NDELAY macro.
47 */
48 #define USE_PLATFORM_DELAY
49 //#define USE_NDELAY
50 
51 //#define DEBUG
52 //#define VERBOSE
53 /* Transfer descriptors. See dump_ptd() for printout format  */
54 //#define PTD_TRACE
55 /* enqueuing/finishing log of urbs */
56 //#define URB_TRACE
57 
58 #include <linux/module.h>
59 #include <linux/delay.h>
60 #include <linux/debugfs.h>
61 #include <linux/seq_file.h>
62 #include <linux/errno.h>
63 #include <linux/init.h>
64 #include <linux/list.h>
65 #include <linux/usb.h>
66 #include <linux/usb/isp116x.h>
67 #include <linux/platform_device.h>
68 
69 #include <asm/io.h>
70 #include <asm/irq.h>
71 #include <asm/system.h>
72 #include <asm/byteorder.h>
73 
74 #include "../core/hcd.h"
75 #include "isp116x.h"
76 
77 #define DRIVER_VERSION	"03 Nov 2005"
78 #define DRIVER_DESC	"ISP116x USB Host Controller Driver"
79 
80 MODULE_DESCRIPTION(DRIVER_DESC);
81 MODULE_LICENSE("GPL");
82 
83 static const char hcd_name[] = "isp116x-hcd";
84 
85 /*-----------------------------------------------------------------*/
86 
87 /*
88   Write len bytes to fifo, pad till 32-bit boundary
89  */
90 static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len)
91 {
92 	u8 *dp = (u8 *) buf;
93 	u16 *dp2 = (u16 *) buf;
94 	u16 w;
95 	int quot = len % 4;
96 
97 	if ((unsigned long)dp2 & 1) {
98 		/* not aligned */
99 		for (; len > 1; len -= 2) {
100 			w = *dp++;
101 			w |= *dp++ << 8;
102 			isp116x_raw_write_data16(isp116x, w);
103 		}
104 		if (len)
105 			isp116x_write_data16(isp116x, (u16) * dp);
106 	} else {
107 		/* aligned */
108 		for (; len > 1; len -= 2)
109 			isp116x_raw_write_data16(isp116x, *dp2++);
110 		if (len)
111 			isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2));
112 	}
113 	if (quot == 1 || quot == 2)
114 		isp116x_raw_write_data16(isp116x, 0);
115 }
116 
117 /*
118   Read len bytes from fifo and then read till 32-bit boundary.
119  */
120 static void read_ptddata_from_fifo(struct isp116x *isp116x, void *buf, int len)
121 {
122 	u8 *dp = (u8 *) buf;
123 	u16 *dp2 = (u16 *) buf;
124 	u16 w;
125 	int quot = len % 4;
126 
127 	if ((unsigned long)dp2 & 1) {
128 		/* not aligned */
129 		for (; len > 1; len -= 2) {
130 			w = isp116x_raw_read_data16(isp116x);
131 			*dp++ = w & 0xff;
132 			*dp++ = (w >> 8) & 0xff;
133 		}
134 		if (len)
135 			*dp = 0xff & isp116x_read_data16(isp116x);
136 	} else {
137 		/* aligned */
138 		for (; len > 1; len -= 2)
139 			*dp2++ = isp116x_raw_read_data16(isp116x);
140 		if (len)
141 			*(u8 *) dp2 = 0xff & isp116x_read_data16(isp116x);
142 	}
143 	if (quot == 1 || quot == 2)
144 		isp116x_raw_read_data16(isp116x);
145 }
146 
147 /*
148   Write ptd's and data for scheduled transfers into
149   the fifo ram. Fifo must be empty and ready.
150 */
151 static void pack_fifo(struct isp116x *isp116x)
152 {
153 	struct isp116x_ep *ep;
154 	struct ptd *ptd;
155 	int buflen = isp116x->atl_last_dir == PTD_DIR_IN
156 	    ? isp116x->atl_bufshrt : isp116x->atl_buflen;
157 
158 	isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
159 	isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
160 	isp116x_write_addr(isp116x, HCATLPORT | ISP116x_WRITE_OFFSET);
161 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
162 		ptd = &ep->ptd;
163 		dump_ptd(ptd);
164 		dump_ptd_out_data(ptd, ep->data);
165 		isp116x_write_data16(isp116x, ptd->count);
166 		isp116x_write_data16(isp116x, ptd->mps);
167 		isp116x_write_data16(isp116x, ptd->len);
168 		isp116x_write_data16(isp116x, ptd->faddr);
169 		buflen -= sizeof(struct ptd);
170 		/* Skip writing data for last IN PTD */
171 		if (ep->active || (isp116x->atl_last_dir != PTD_DIR_IN)) {
172 			write_ptddata_to_fifo(isp116x, ep->data, ep->length);
173 			buflen -= ALIGN(ep->length, 4);
174 		}
175 	}
176 	BUG_ON(buflen);
177 }
178 
179 /*
180   Read the processed ptd's and data from fifo ram back to
181   URBs' buffers. Fifo must be full and done
182 */
183 static void unpack_fifo(struct isp116x *isp116x)
184 {
185 	struct isp116x_ep *ep;
186 	struct ptd *ptd;
187 	int buflen = isp116x->atl_last_dir == PTD_DIR_IN
188 	    ? isp116x->atl_buflen : isp116x->atl_bufshrt;
189 
190 	isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
191 	isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
192 	isp116x_write_addr(isp116x, HCATLPORT);
193 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
194 		ptd = &ep->ptd;
195 		ptd->count = isp116x_read_data16(isp116x);
196 		ptd->mps = isp116x_read_data16(isp116x);
197 		ptd->len = isp116x_read_data16(isp116x);
198 		ptd->faddr = isp116x_read_data16(isp116x);
199 		buflen -= sizeof(struct ptd);
200 		/* Skip reading data for last Setup or Out PTD */
201 		if (ep->active || (isp116x->atl_last_dir == PTD_DIR_IN)) {
202 			read_ptddata_from_fifo(isp116x, ep->data, ep->length);
203 			buflen -= ALIGN(ep->length, 4);
204 		}
205 		dump_ptd(ptd);
206 		dump_ptd_in_data(ptd, ep->data);
207 	}
208 	BUG_ON(buflen);
209 }
210 
211 /*---------------------------------------------------------------*/
212 
213 /*
214   Set up PTD's.
215 */
216 static void preproc_atl_queue(struct isp116x *isp116x)
217 {
218 	struct isp116x_ep *ep;
219 	struct urb *urb;
220 	struct ptd *ptd;
221 	u16 len;
222 
223 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
224 		u16 toggle = 0, dir = PTD_DIR_SETUP;
225 
226 		BUG_ON(list_empty(&ep->hep->urb_list));
227 		urb = container_of(ep->hep->urb_list.next,
228 				   struct urb, urb_list);
229 		ptd = &ep->ptd;
230 		len = ep->length;
231 		ep->data = (unsigned char *)urb->transfer_buffer
232 		    + urb->actual_length;
233 
234 		switch (ep->nextpid) {
235 		case USB_PID_IN:
236 			toggle = usb_gettoggle(urb->dev, ep->epnum, 0);
237 			dir = PTD_DIR_IN;
238 			break;
239 		case USB_PID_OUT:
240 			toggle = usb_gettoggle(urb->dev, ep->epnum, 1);
241 			dir = PTD_DIR_OUT;
242 			break;
243 		case USB_PID_SETUP:
244 			len = sizeof(struct usb_ctrlrequest);
245 			ep->data = urb->setup_packet;
246 			break;
247 		case USB_PID_ACK:
248 			toggle = 1;
249 			len = 0;
250 			dir = (urb->transfer_buffer_length
251 			       && usb_pipein(urb->pipe))
252 			    ? PTD_DIR_OUT : PTD_DIR_IN;
253 			break;
254 		default:
255 			ERR("%s %d: ep->nextpid %d\n", __func__, __LINE__,
256 			    ep->nextpid);
257 			BUG();
258 		}
259 
260 		ptd->count = PTD_CC_MSK | PTD_ACTIVE_MSK | PTD_TOGGLE(toggle);
261 		ptd->mps = PTD_MPS(ep->maxpacket)
262 		    | PTD_SPD(urb->dev->speed == USB_SPEED_LOW)
263 		    | PTD_EP(ep->epnum);
264 		ptd->len = PTD_LEN(len) | PTD_DIR(dir);
265 		ptd->faddr = PTD_FA(usb_pipedevice(urb->pipe));
266 		if (!ep->active) {
267 			ptd->mps |= PTD_LAST_MSK;
268 			isp116x->atl_last_dir = dir;
269 		}
270 		isp116x->atl_bufshrt = sizeof(struct ptd) + isp116x->atl_buflen;
271 		isp116x->atl_buflen = isp116x->atl_bufshrt + ALIGN(len, 4);
272 	}
273 }
274 
275 /*
276   Take done or failed requests out of schedule. Give back
277   processed urbs.
278 */
279 static void finish_request(struct isp116x *isp116x, struct isp116x_ep *ep,
280 			   struct urb *urb, int status)
281 __releases(isp116x->lock) __acquires(isp116x->lock)
282 {
283 	unsigned i;
284 
285 	ep->error_count = 0;
286 
287 	if (usb_pipecontrol(urb->pipe))
288 		ep->nextpid = USB_PID_SETUP;
289 
290 	urb_dbg(urb, "Finish");
291 
292 	usb_hcd_unlink_urb_from_ep(isp116x_to_hcd(isp116x), urb);
293 	spin_unlock(&isp116x->lock);
294 	usb_hcd_giveback_urb(isp116x_to_hcd(isp116x), urb, status);
295 	spin_lock(&isp116x->lock);
296 
297 	/* take idle endpoints out of the schedule */
298 	if (!list_empty(&ep->hep->urb_list))
299 		return;
300 
301 	/* async deschedule */
302 	if (!list_empty(&ep->schedule)) {
303 		list_del_init(&ep->schedule);
304 		return;
305 	}
306 
307 	/* periodic deschedule */
308 	DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
309 	for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
310 		struct isp116x_ep *temp;
311 		struct isp116x_ep **prev = &isp116x->periodic[i];
312 
313 		while (*prev && ((temp = *prev) != ep))
314 			prev = &temp->next;
315 		if (*prev)
316 			*prev = ep->next;
317 		isp116x->load[i] -= ep->load;
318 	}
319 	ep->branch = PERIODIC_SIZE;
320 	isp116x_to_hcd(isp116x)->self.bandwidth_allocated -=
321 	    ep->load / ep->period;
322 
323 	/* switch irq type? */
324 	if (!--isp116x->periodic_count) {
325 		isp116x->irqenb &= ~HCuPINT_SOF;
326 		isp116x->irqenb |= HCuPINT_ATL;
327 	}
328 }
329 
330 /*
331   Analyze transfer results, handle partial transfers and errors
332 */
333 static void postproc_atl_queue(struct isp116x *isp116x)
334 {
335 	struct isp116x_ep *ep;
336 	struct urb *urb;
337 	struct usb_device *udev;
338 	struct ptd *ptd;
339 	int short_not_ok;
340 	int status;
341 	u8 cc;
342 
343 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
344 		BUG_ON(list_empty(&ep->hep->urb_list));
345 		urb =
346 		    container_of(ep->hep->urb_list.next, struct urb, urb_list);
347 		udev = urb->dev;
348 		ptd = &ep->ptd;
349 		cc = PTD_GET_CC(ptd);
350 		short_not_ok = 1;
351 		status = -EINPROGRESS;
352 
353 		/* Data underrun is special. For allowed underrun
354 		   we clear the error and continue as normal. For
355 		   forbidden underrun we finish the DATA stage
356 		   immediately while for control transfer,
357 		   we do a STATUS stage. */
358 		if (cc == TD_DATAUNDERRUN) {
359 			if (!(urb->transfer_flags & URB_SHORT_NOT_OK) ||
360 					usb_pipecontrol(urb->pipe)) {
361 				DBG("Allowed or control data underrun\n");
362 				cc = TD_CC_NOERROR;
363 				short_not_ok = 0;
364 			} else {
365 				ep->error_count = 1;
366 				usb_settoggle(udev, ep->epnum,
367 					      ep->nextpid == USB_PID_OUT,
368 					      PTD_GET_TOGGLE(ptd));
369 				urb->actual_length += PTD_GET_COUNT(ptd);
370 				status = cc_to_error[TD_DATAUNDERRUN];
371 				goto done;
372 			}
373 		}
374 
375 		if (cc != TD_CC_NOERROR && cc != TD_NOTACCESSED
376 		    && (++ep->error_count >= 3 || cc == TD_CC_STALL
377 			|| cc == TD_DATAOVERRUN)) {
378 			status = cc_to_error[cc];
379 			if (ep->nextpid == USB_PID_ACK)
380 				ep->nextpid = 0;
381 			goto done;
382 		}
383 		/* According to usb spec, zero-length Int transfer signals
384 		   finishing of the urb. Hey, does this apply only
385 		   for IN endpoints? */
386 		if (usb_pipeint(urb->pipe) && !PTD_GET_LEN(ptd)) {
387 			status = 0;
388 			goto done;
389 		}
390 
391 		/* Relax after previously failed, but later succeeded
392 		   or correctly NAK'ed retransmission attempt */
393 		if (ep->error_count
394 		    && (cc == TD_CC_NOERROR || cc == TD_NOTACCESSED))
395 			ep->error_count = 0;
396 
397 		/* Take into account idiosyncracies of the isp116x chip
398 		   regarding toggle bit for failed transfers */
399 		if (ep->nextpid == USB_PID_OUT)
400 			usb_settoggle(udev, ep->epnum, 1, PTD_GET_TOGGLE(ptd)
401 				      ^ (ep->error_count > 0));
402 		else if (ep->nextpid == USB_PID_IN)
403 			usb_settoggle(udev, ep->epnum, 0, PTD_GET_TOGGLE(ptd)
404 				      ^ (ep->error_count > 0));
405 
406 		switch (ep->nextpid) {
407 		case USB_PID_IN:
408 		case USB_PID_OUT:
409 			urb->actual_length += PTD_GET_COUNT(ptd);
410 			if (PTD_GET_ACTIVE(ptd)
411 			    || (cc != TD_CC_NOERROR && cc < 0x0E))
412 				break;
413 			if (urb->transfer_buffer_length != urb->actual_length) {
414 				if (short_not_ok)
415 					break;
416 			} else {
417 				if (urb->transfer_flags & URB_ZERO_PACKET
418 				    && ep->nextpid == USB_PID_OUT
419 				    && !(PTD_GET_COUNT(ptd) % ep->maxpacket)) {
420 					DBG("Zero packet requested\n");
421 					break;
422 				}
423 			}
424 			/* All data for this URB is transferred, let's finish */
425 			if (usb_pipecontrol(urb->pipe))
426 				ep->nextpid = USB_PID_ACK;
427 			else
428 				status = 0;
429 			break;
430 		case USB_PID_SETUP:
431 			if (PTD_GET_ACTIVE(ptd)
432 			    || (cc != TD_CC_NOERROR && cc < 0x0E))
433 				break;
434 			if (urb->transfer_buffer_length == urb->actual_length)
435 				ep->nextpid = USB_PID_ACK;
436 			else if (usb_pipeout(urb->pipe)) {
437 				usb_settoggle(udev, 0, 1, 1);
438 				ep->nextpid = USB_PID_OUT;
439 			} else {
440 				usb_settoggle(udev, 0, 0, 1);
441 				ep->nextpid = USB_PID_IN;
442 			}
443 			break;
444 		case USB_PID_ACK:
445 			if (PTD_GET_ACTIVE(ptd)
446 			    || (cc != TD_CC_NOERROR && cc < 0x0E))
447 				break;
448 			status = 0;
449 			ep->nextpid = 0;
450 			break;
451 		default:
452 			BUG();
453 		}
454 
455  done:
456 		if (status != -EINPROGRESS || urb->unlinked)
457 			finish_request(isp116x, ep, urb, status);
458 	}
459 }
460 
461 /*
462   Scan transfer lists, schedule transfers, send data off
463   to chip.
464  */
465 static void start_atl_transfers(struct isp116x *isp116x)
466 {
467 	struct isp116x_ep *last_ep = NULL, *ep;
468 	struct urb *urb;
469 	u16 load = 0;
470 	int len, index, speed, byte_time;
471 
472 	if (atomic_read(&isp116x->atl_finishing))
473 		return;
474 
475 	if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state))
476 		return;
477 
478 	/* FIFO not empty? */
479 	if (isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_FULL)
480 		return;
481 
482 	isp116x->atl_active = NULL;
483 	isp116x->atl_buflen = isp116x->atl_bufshrt = 0;
484 
485 	/* Schedule int transfers */
486 	if (isp116x->periodic_count) {
487 		isp116x->fmindex = index =
488 		    (isp116x->fmindex + 1) & (PERIODIC_SIZE - 1);
489 		if ((load = isp116x->load[index])) {
490 			/* Bring all int transfers for this frame
491 			   into the active queue */
492 			isp116x->atl_active = last_ep =
493 			    isp116x->periodic[index];
494 			while (last_ep->next)
495 				last_ep = (last_ep->active = last_ep->next);
496 			last_ep->active = NULL;
497 		}
498 	}
499 
500 	/* Schedule control/bulk transfers */
501 	list_for_each_entry(ep, &isp116x->async, schedule) {
502 		urb = container_of(ep->hep->urb_list.next,
503 				   struct urb, urb_list);
504 		speed = urb->dev->speed;
505 		byte_time = speed == USB_SPEED_LOW
506 		    ? BYTE_TIME_LOWSPEED : BYTE_TIME_FULLSPEED;
507 
508 		if (ep->nextpid == USB_PID_SETUP) {
509 			len = sizeof(struct usb_ctrlrequest);
510 		} else if (ep->nextpid == USB_PID_ACK) {
511 			len = 0;
512 		} else {
513 			/* Find current free length ... */
514 			len = (MAX_LOAD_LIMIT - load) / byte_time;
515 
516 			/* ... then limit it to configured max size ... */
517 			len = min(len, speed == USB_SPEED_LOW ?
518 				  MAX_TRANSFER_SIZE_LOWSPEED :
519 				  MAX_TRANSFER_SIZE_FULLSPEED);
520 
521 			/* ... and finally cut to the multiple of MaxPacketSize,
522 			   or to the real length if there's enough room. */
523 			if (len <
524 			    (urb->transfer_buffer_length -
525 			     urb->actual_length)) {
526 				len -= len % ep->maxpacket;
527 				if (!len)
528 					continue;
529 			} else
530 				len = urb->transfer_buffer_length -
531 				    urb->actual_length;
532 			BUG_ON(len < 0);
533 		}
534 
535 		load += len * byte_time;
536 		if (load > MAX_LOAD_LIMIT)
537 			break;
538 
539 		ep->active = NULL;
540 		ep->length = len;
541 		if (last_ep)
542 			last_ep->active = ep;
543 		else
544 			isp116x->atl_active = ep;
545 		last_ep = ep;
546 	}
547 
548 	/* Avoid starving of endpoints */
549 	if ((&isp116x->async)->next != (&isp116x->async)->prev)
550 		list_move(&isp116x->async, (&isp116x->async)->next);
551 
552 	if (isp116x->atl_active) {
553 		preproc_atl_queue(isp116x);
554 		pack_fifo(isp116x);
555 	}
556 }
557 
558 /*
559   Finish the processed transfers
560 */
561 static void finish_atl_transfers(struct isp116x *isp116x)
562 {
563 	if (!isp116x->atl_active)
564 		return;
565 	/* Fifo not ready? */
566 	if (!(isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_DONE))
567 		return;
568 
569 	atomic_inc(&isp116x->atl_finishing);
570 	unpack_fifo(isp116x);
571 	postproc_atl_queue(isp116x);
572 	atomic_dec(&isp116x->atl_finishing);
573 }
574 
575 static irqreturn_t isp116x_irq(struct usb_hcd *hcd)
576 {
577 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
578 	u16 irqstat;
579 	irqreturn_t ret = IRQ_NONE;
580 
581 	spin_lock(&isp116x->lock);
582 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
583 	irqstat = isp116x_read_reg16(isp116x, HCuPINT);
584 	isp116x_write_reg16(isp116x, HCuPINT, irqstat);
585 
586 	if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
587 		ret = IRQ_HANDLED;
588 		finish_atl_transfers(isp116x);
589 	}
590 
591 	if (irqstat & HCuPINT_OPR) {
592 		u32 intstat = isp116x_read_reg32(isp116x, HCINTSTAT);
593 		isp116x_write_reg32(isp116x, HCINTSTAT, intstat);
594 		if (intstat & HCINT_UE) {
595 			ERR("Unrecoverable error, HC is dead!\n");
596 			/* IRQ's are off, we do no DMA,
597 			   perfectly ready to die ... */
598 			hcd->state = HC_STATE_HALT;
599 			ret = IRQ_HANDLED;
600 			goto done;
601 		}
602 		if (intstat & HCINT_RHSC)
603 			/* When root hub or any of its ports is going
604 			   to come out of suspend, it may take more
605 			   than 10ms for status bits to stabilize. */
606 			mod_timer(&hcd->rh_timer, jiffies
607 				  + msecs_to_jiffies(20) + 1);
608 		if (intstat & HCINT_RD) {
609 			DBG("---- remote wakeup\n");
610 			usb_hcd_resume_root_hub(hcd);
611 		}
612 		irqstat &= ~HCuPINT_OPR;
613 		ret = IRQ_HANDLED;
614 	}
615 
616 	if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
617 		start_atl_transfers(isp116x);
618 	}
619 
620 	isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
621       done:
622 	spin_unlock(&isp116x->lock);
623 	return ret;
624 }
625 
626 /*-----------------------------------------------------------------*/
627 
628 /* usb 1.1 says max 90% of a frame is available for periodic transfers.
629  * this driver doesn't promise that much since it's got to handle an
630  * IRQ per packet; irq handling latencies also use up that time.
631  */
632 
633 /* out of 1000 us */
634 #define	MAX_PERIODIC_LOAD	600
635 static int balance(struct isp116x *isp116x, u16 period, u16 load)
636 {
637 	int i, branch = -ENOSPC;
638 
639 	/* search for the least loaded schedule branch of that period
640 	   which has enough bandwidth left unreserved. */
641 	for (i = 0; i < period; i++) {
642 		if (branch < 0 || isp116x->load[branch] > isp116x->load[i]) {
643 			int j;
644 
645 			for (j = i; j < PERIODIC_SIZE; j += period) {
646 				if ((isp116x->load[j] + load)
647 				    > MAX_PERIODIC_LOAD)
648 					break;
649 			}
650 			if (j < PERIODIC_SIZE)
651 				continue;
652 			branch = i;
653 		}
654 	}
655 	return branch;
656 }
657 
658 /* NB! ALL the code above this point runs with isp116x->lock
659    held, irqs off
660 */
661 
662 /*-----------------------------------------------------------------*/
663 
664 static int isp116x_urb_enqueue(struct usb_hcd *hcd,
665 			       struct urb *urb,
666 			       gfp_t mem_flags)
667 {
668 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
669 	struct usb_device *udev = urb->dev;
670 	unsigned int pipe = urb->pipe;
671 	int is_out = !usb_pipein(pipe);
672 	int type = usb_pipetype(pipe);
673 	int epnum = usb_pipeendpoint(pipe);
674 	struct usb_host_endpoint *hep = urb->ep;
675 	struct isp116x_ep *ep = NULL;
676 	unsigned long flags;
677 	int i;
678 	int ret = 0;
679 
680 	urb_dbg(urb, "Enqueue");
681 
682 	if (type == PIPE_ISOCHRONOUS) {
683 		ERR("Isochronous transfers not supported\n");
684 		urb_dbg(urb, "Refused to enqueue");
685 		return -ENXIO;
686 	}
687 	/* avoid all allocations within spinlocks: request or endpoint */
688 	if (!hep->hcpriv) {
689 		ep = kzalloc(sizeof *ep, mem_flags);
690 		if (!ep)
691 			return -ENOMEM;
692 	}
693 
694 	spin_lock_irqsave(&isp116x->lock, flags);
695 	if (!HC_IS_RUNNING(hcd->state)) {
696 		kfree(ep);
697 		ret = -ENODEV;
698 		goto fail_not_linked;
699 	}
700 	ret = usb_hcd_link_urb_to_ep(hcd, urb);
701 	if (ret) {
702 		kfree(ep);
703 		goto fail_not_linked;
704 	}
705 
706 	if (hep->hcpriv)
707 		ep = hep->hcpriv;
708 	else {
709 		INIT_LIST_HEAD(&ep->schedule);
710 		ep->udev = udev;
711 		ep->epnum = epnum;
712 		ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
713 		usb_settoggle(udev, epnum, is_out, 0);
714 
715 		if (type == PIPE_CONTROL) {
716 			ep->nextpid = USB_PID_SETUP;
717 		} else if (is_out) {
718 			ep->nextpid = USB_PID_OUT;
719 		} else {
720 			ep->nextpid = USB_PID_IN;
721 		}
722 
723 		if (urb->interval) {
724 			/*
725 			   With INT URBs submitted, the driver works with SOF
726 			   interrupt enabled and ATL interrupt disabled. After
727 			   the PTDs are written to fifo ram, the chip starts
728 			   fifo processing and usb transfers after the next
729 			   SOF and continues until the transfers are finished
730 			   (succeeded or failed) or the frame ends. Therefore,
731 			   the transfers occur only in every second frame,
732 			   while fifo reading/writing and data processing
733 			   occur in every other second frame. */
734 			if (urb->interval < 2)
735 				urb->interval = 2;
736 			if (urb->interval > 2 * PERIODIC_SIZE)
737 				urb->interval = 2 * PERIODIC_SIZE;
738 			ep->period = urb->interval >> 1;
739 			ep->branch = PERIODIC_SIZE;
740 			ep->load = usb_calc_bus_time(udev->speed,
741 						     !is_out,
742 						     (type == PIPE_ISOCHRONOUS),
743 						     usb_maxpacket(udev, pipe,
744 								   is_out)) /
745 			    1000;
746 		}
747 		hep->hcpriv = ep;
748 		ep->hep = hep;
749 	}
750 
751 	/* maybe put endpoint into schedule */
752 	switch (type) {
753 	case PIPE_CONTROL:
754 	case PIPE_BULK:
755 		if (list_empty(&ep->schedule))
756 			list_add_tail(&ep->schedule, &isp116x->async);
757 		break;
758 	case PIPE_INTERRUPT:
759 		urb->interval = ep->period;
760 		ep->length = min((int)ep->maxpacket,
761 				 urb->transfer_buffer_length);
762 
763 		/* urb submitted for already existing endpoint */
764 		if (ep->branch < PERIODIC_SIZE)
765 			break;
766 
767 		ep->branch = ret = balance(isp116x, ep->period, ep->load);
768 		if (ret < 0)
769 			goto fail;
770 		ret = 0;
771 
772 		urb->start_frame = (isp116x->fmindex & (PERIODIC_SIZE - 1))
773 		    + ep->branch;
774 
775 		/* sort each schedule branch by period (slow before fast)
776 		   to share the faster parts of the tree without needing
777 		   dummy/placeholder nodes */
778 		DBG("schedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
779 		for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
780 			struct isp116x_ep **prev = &isp116x->periodic[i];
781 			struct isp116x_ep *here = *prev;
782 
783 			while (here && ep != here) {
784 				if (ep->period > here->period)
785 					break;
786 				prev = &here->next;
787 				here = *prev;
788 			}
789 			if (ep != here) {
790 				ep->next = here;
791 				*prev = ep;
792 			}
793 			isp116x->load[i] += ep->load;
794 		}
795 		hcd->self.bandwidth_allocated += ep->load / ep->period;
796 
797 		/* switch over to SOFint */
798 		if (!isp116x->periodic_count++) {
799 			isp116x->irqenb &= ~HCuPINT_ATL;
800 			isp116x->irqenb |= HCuPINT_SOF;
801 			isp116x_write_reg16(isp116x, HCuPINTENB,
802 					    isp116x->irqenb);
803 		}
804 	}
805 
806 	urb->hcpriv = hep;
807 	start_atl_transfers(isp116x);
808 
809       fail:
810 	if (ret)
811 		usb_hcd_unlink_urb_from_ep(hcd, urb);
812       fail_not_linked:
813 	spin_unlock_irqrestore(&isp116x->lock, flags);
814 	return ret;
815 }
816 
817 /*
818    Dequeue URBs.
819 */
820 static int isp116x_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
821 		int status)
822 {
823 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
824 	struct usb_host_endpoint *hep;
825 	struct isp116x_ep *ep, *ep_act;
826 	unsigned long flags;
827 	int rc;
828 
829 	spin_lock_irqsave(&isp116x->lock, flags);
830 	rc = usb_hcd_check_unlink_urb(hcd, urb, status);
831 	if (rc)
832 		goto done;
833 
834 	hep = urb->hcpriv;
835 	ep = hep->hcpriv;
836 	WARN_ON(hep != ep->hep);
837 
838 	/* In front of queue? */
839 	if (ep->hep->urb_list.next == &urb->urb_list)
840 		/* active? */
841 		for (ep_act = isp116x->atl_active; ep_act;
842 		     ep_act = ep_act->active)
843 			if (ep_act == ep) {
844 				VDBG("dequeue, urb %p active; wait for irq\n",
845 				     urb);
846 				urb = NULL;
847 				break;
848 			}
849 
850 	if (urb)
851 		finish_request(isp116x, ep, urb, status);
852  done:
853 	spin_unlock_irqrestore(&isp116x->lock, flags);
854 	return rc;
855 }
856 
857 static void isp116x_endpoint_disable(struct usb_hcd *hcd,
858 				     struct usb_host_endpoint *hep)
859 {
860 	int i;
861 	struct isp116x_ep *ep = hep->hcpriv;
862 
863 	if (!ep)
864 		return;
865 
866 	/* assume we'd just wait for the irq */
867 	for (i = 0; i < 100 && !list_empty(&hep->urb_list); i++)
868 		msleep(3);
869 	if (!list_empty(&hep->urb_list))
870 		WARN("ep %p not empty?\n", ep);
871 
872 	kfree(ep);
873 	hep->hcpriv = NULL;
874 }
875 
876 static int isp116x_get_frame(struct usb_hcd *hcd)
877 {
878 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
879 	u32 fmnum;
880 	unsigned long flags;
881 
882 	spin_lock_irqsave(&isp116x->lock, flags);
883 	fmnum = isp116x_read_reg32(isp116x, HCFMNUM);
884 	spin_unlock_irqrestore(&isp116x->lock, flags);
885 	return (int)fmnum;
886 }
887 
888 /*
889   Adapted from ohci-hub.c. Currently we don't support autosuspend.
890 */
891 static int isp116x_hub_status_data(struct usb_hcd *hcd, char *buf)
892 {
893 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
894 	int ports, i, changed = 0;
895 	unsigned long flags;
896 
897 	if (!HC_IS_RUNNING(hcd->state))
898 		return -ESHUTDOWN;
899 
900 	/* Report no status change now, if we are scheduled to be
901 	   called later */
902 	if (timer_pending(&hcd->rh_timer))
903 		return 0;
904 
905 	ports = isp116x->rhdesca & RH_A_NDP;
906 	spin_lock_irqsave(&isp116x->lock, flags);
907 	isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
908 	if (isp116x->rhstatus & (RH_HS_LPSC | RH_HS_OCIC))
909 		buf[0] = changed = 1;
910 	else
911 		buf[0] = 0;
912 
913 	for (i = 0; i < ports; i++) {
914 		u32 status = isp116x->rhport[i] =
915 		    isp116x_read_reg32(isp116x, i ? HCRHPORT2 : HCRHPORT1);
916 
917 		if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
918 			      | RH_PS_OCIC | RH_PS_PRSC)) {
919 			changed = 1;
920 			buf[0] |= 1 << (i + 1);
921 		}
922 	}
923 	spin_unlock_irqrestore(&isp116x->lock, flags);
924 	return changed;
925 }
926 
927 static void isp116x_hub_descriptor(struct isp116x *isp116x,
928 				   struct usb_hub_descriptor *desc)
929 {
930 	u32 reg = isp116x->rhdesca;
931 
932 	desc->bDescriptorType = 0x29;
933 	desc->bDescLength = 9;
934 	desc->bHubContrCurrent = 0;
935 	desc->bNbrPorts = (u8) (reg & 0x3);
936 	/* Power switching, device type, overcurrent. */
937 	desc->wHubCharacteristics = cpu_to_le16((u16) ((reg >> 8) & 0x1f));
938 	desc->bPwrOn2PwrGood = (u8) ((reg >> 24) & 0xff);
939 	/* two bitmaps:  ports removable, and legacy PortPwrCtrlMask */
940 	desc->bitmap[0] = 0;
941 	desc->bitmap[1] = ~0;
942 }
943 
944 /* Perform reset of a given port.
945    It would be great to just start the reset and let the
946    USB core to clear the reset in due time. However,
947    root hub ports should be reset for at least 50 ms, while
948    our chip stays in reset for about 10 ms. I.e., we must
949    repeatedly reset it ourself here.
950 */
951 static inline void root_port_reset(struct isp116x *isp116x, unsigned port)
952 {
953 	u32 tmp;
954 	unsigned long flags, t;
955 
956 	/* Root hub reset should be 50 ms, but some devices
957 	   want it even longer. */
958 	t = jiffies + msecs_to_jiffies(100);
959 
960 	while (time_before(jiffies, t)) {
961 		spin_lock_irqsave(&isp116x->lock, flags);
962 		/* spin until any current reset finishes */
963 		for (;;) {
964 			tmp = isp116x_read_reg32(isp116x, port ?
965 						 HCRHPORT2 : HCRHPORT1);
966 			if (!(tmp & RH_PS_PRS))
967 				break;
968 			udelay(500);
969 		}
970 		/* Don't reset a disconnected port */
971 		if (!(tmp & RH_PS_CCS)) {
972 			spin_unlock_irqrestore(&isp116x->lock, flags);
973 			break;
974 		}
975 		/* Reset lasts 10ms (claims datasheet) */
976 		isp116x_write_reg32(isp116x, port ? HCRHPORT2 :
977 				    HCRHPORT1, (RH_PS_PRS));
978 		spin_unlock_irqrestore(&isp116x->lock, flags);
979 		msleep(10);
980 	}
981 }
982 
983 /* Adapted from ohci-hub.c */
984 static int isp116x_hub_control(struct usb_hcd *hcd,
985 			       u16 typeReq,
986 			       u16 wValue, u16 wIndex, char *buf, u16 wLength)
987 {
988 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
989 	int ret = 0;
990 	unsigned long flags;
991 	int ports = isp116x->rhdesca & RH_A_NDP;
992 	u32 tmp = 0;
993 
994 	switch (typeReq) {
995 	case ClearHubFeature:
996 		DBG("ClearHubFeature: ");
997 		switch (wValue) {
998 		case C_HUB_OVER_CURRENT:
999 			DBG("C_HUB_OVER_CURRENT\n");
1000 			spin_lock_irqsave(&isp116x->lock, flags);
1001 			isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_OCIC);
1002 			spin_unlock_irqrestore(&isp116x->lock, flags);
1003 		case C_HUB_LOCAL_POWER:
1004 			DBG("C_HUB_LOCAL_POWER\n");
1005 			break;
1006 		default:
1007 			goto error;
1008 		}
1009 		break;
1010 	case SetHubFeature:
1011 		DBG("SetHubFeature: ");
1012 		switch (wValue) {
1013 		case C_HUB_OVER_CURRENT:
1014 		case C_HUB_LOCAL_POWER:
1015 			DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1016 			break;
1017 		default:
1018 			goto error;
1019 		}
1020 		break;
1021 	case GetHubDescriptor:
1022 		DBG("GetHubDescriptor\n");
1023 		isp116x_hub_descriptor(isp116x,
1024 				       (struct usb_hub_descriptor *)buf);
1025 		break;
1026 	case GetHubStatus:
1027 		DBG("GetHubStatus\n");
1028 		*(__le32 *) buf = 0;
1029 		break;
1030 	case GetPortStatus:
1031 		DBG("GetPortStatus\n");
1032 		if (!wIndex || wIndex > ports)
1033 			goto error;
1034 		tmp = isp116x->rhport[--wIndex];
1035 		*(__le32 *) buf = cpu_to_le32(tmp);
1036 		DBG("GetPortStatus: port[%d]  %08x\n", wIndex + 1, tmp);
1037 		break;
1038 	case ClearPortFeature:
1039 		DBG("ClearPortFeature: ");
1040 		if (!wIndex || wIndex > ports)
1041 			goto error;
1042 		wIndex--;
1043 
1044 		switch (wValue) {
1045 		case USB_PORT_FEAT_ENABLE:
1046 			DBG("USB_PORT_FEAT_ENABLE\n");
1047 			tmp = RH_PS_CCS;
1048 			break;
1049 		case USB_PORT_FEAT_C_ENABLE:
1050 			DBG("USB_PORT_FEAT_C_ENABLE\n");
1051 			tmp = RH_PS_PESC;
1052 			break;
1053 		case USB_PORT_FEAT_SUSPEND:
1054 			DBG("USB_PORT_FEAT_SUSPEND\n");
1055 			tmp = RH_PS_POCI;
1056 			break;
1057 		case USB_PORT_FEAT_C_SUSPEND:
1058 			DBG("USB_PORT_FEAT_C_SUSPEND\n");
1059 			tmp = RH_PS_PSSC;
1060 			break;
1061 		case USB_PORT_FEAT_POWER:
1062 			DBG("USB_PORT_FEAT_POWER\n");
1063 			tmp = RH_PS_LSDA;
1064 			break;
1065 		case USB_PORT_FEAT_C_CONNECTION:
1066 			DBG("USB_PORT_FEAT_C_CONNECTION\n");
1067 			tmp = RH_PS_CSC;
1068 			break;
1069 		case USB_PORT_FEAT_C_OVER_CURRENT:
1070 			DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
1071 			tmp = RH_PS_OCIC;
1072 			break;
1073 		case USB_PORT_FEAT_C_RESET:
1074 			DBG("USB_PORT_FEAT_C_RESET\n");
1075 			tmp = RH_PS_PRSC;
1076 			break;
1077 		default:
1078 			goto error;
1079 		}
1080 		spin_lock_irqsave(&isp116x->lock, flags);
1081 		isp116x_write_reg32(isp116x, wIndex
1082 				    ? HCRHPORT2 : HCRHPORT1, tmp);
1083 		isp116x->rhport[wIndex] =
1084 		    isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
1085 		spin_unlock_irqrestore(&isp116x->lock, flags);
1086 		break;
1087 	case SetPortFeature:
1088 		DBG("SetPortFeature: ");
1089 		if (!wIndex || wIndex > ports)
1090 			goto error;
1091 		wIndex--;
1092 		switch (wValue) {
1093 		case USB_PORT_FEAT_SUSPEND:
1094 			DBG("USB_PORT_FEAT_SUSPEND\n");
1095 			spin_lock_irqsave(&isp116x->lock, flags);
1096 			isp116x_write_reg32(isp116x, wIndex
1097 					    ? HCRHPORT2 : HCRHPORT1, RH_PS_PSS);
1098 			break;
1099 		case USB_PORT_FEAT_POWER:
1100 			DBG("USB_PORT_FEAT_POWER\n");
1101 			spin_lock_irqsave(&isp116x->lock, flags);
1102 			isp116x_write_reg32(isp116x, wIndex
1103 					    ? HCRHPORT2 : HCRHPORT1, RH_PS_PPS);
1104 			break;
1105 		case USB_PORT_FEAT_RESET:
1106 			DBG("USB_PORT_FEAT_RESET\n");
1107 			root_port_reset(isp116x, wIndex);
1108 			spin_lock_irqsave(&isp116x->lock, flags);
1109 			break;
1110 		default:
1111 			goto error;
1112 		}
1113 		isp116x->rhport[wIndex] =
1114 		    isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
1115 		spin_unlock_irqrestore(&isp116x->lock, flags);
1116 		break;
1117 
1118 	default:
1119 	      error:
1120 		/* "protocol stall" on error */
1121 		DBG("PROTOCOL STALL\n");
1122 		ret = -EPIPE;
1123 	}
1124 	return ret;
1125 }
1126 
1127 /*-----------------------------------------------------------------*/
1128 
1129 #ifdef CONFIG_DEBUG_FS
1130 
1131 static void dump_irq(struct seq_file *s, char *label, u16 mask)
1132 {
1133 	seq_printf(s, "%s %04x%s%s%s%s%s%s\n", label, mask,
1134 		   mask & HCuPINT_CLKRDY ? " clkrdy" : "",
1135 		   mask & HCuPINT_SUSP ? " susp" : "",
1136 		   mask & HCuPINT_OPR ? " opr" : "",
1137 		   mask & HCuPINT_AIIEOT ? " eot" : "",
1138 		   mask & HCuPINT_ATL ? " atl" : "",
1139 		   mask & HCuPINT_SOF ? " sof" : "");
1140 }
1141 
1142 static void dump_int(struct seq_file *s, char *label, u32 mask)
1143 {
1144 	seq_printf(s, "%s %08x%s%s%s%s%s%s%s\n", label, mask,
1145 		   mask & HCINT_MIE ? " MIE" : "",
1146 		   mask & HCINT_RHSC ? " rhsc" : "",
1147 		   mask & HCINT_FNO ? " fno" : "",
1148 		   mask & HCINT_UE ? " ue" : "",
1149 		   mask & HCINT_RD ? " rd" : "",
1150 		   mask & HCINT_SF ? " sof" : "", mask & HCINT_SO ? " so" : "");
1151 }
1152 
1153 static int isp116x_show_dbg(struct seq_file *s, void *unused)
1154 {
1155 	struct isp116x *isp116x = s->private;
1156 
1157 	seq_printf(s, "%s\n%s version %s\n",
1158 		   isp116x_to_hcd(isp116x)->product_desc, hcd_name,
1159 		   DRIVER_VERSION);
1160 
1161 	if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x)->state)) {
1162 		seq_printf(s, "HCD is suspended\n");
1163 		return 0;
1164 	}
1165 	if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state)) {
1166 		seq_printf(s, "HCD not running\n");
1167 		return 0;
1168 	}
1169 
1170 	spin_lock_irq(&isp116x->lock);
1171 	dump_irq(s, "hc_irq_enable", isp116x_read_reg16(isp116x, HCuPINTENB));
1172 	dump_irq(s, "hc_irq_status", isp116x_read_reg16(isp116x, HCuPINT));
1173 	dump_int(s, "hc_int_enable", isp116x_read_reg32(isp116x, HCINTENB));
1174 	dump_int(s, "hc_int_status", isp116x_read_reg32(isp116x, HCINTSTAT));
1175 	isp116x_show_regs_seq(isp116x, s);
1176 	spin_unlock_irq(&isp116x->lock);
1177 	seq_printf(s, "\n");
1178 
1179 	return 0;
1180 }
1181 
1182 static int isp116x_open_seq(struct inode *inode, struct file *file)
1183 {
1184 	return single_open(file, isp116x_show_dbg, inode->i_private);
1185 }
1186 
1187 static const struct file_operations isp116x_debug_fops = {
1188 	.open = isp116x_open_seq,
1189 	.read = seq_read,
1190 	.llseek = seq_lseek,
1191 	.release = single_release,
1192 };
1193 
1194 static int create_debug_file(struct isp116x *isp116x)
1195 {
1196 	isp116x->dentry = debugfs_create_file(hcd_name,
1197 					      S_IRUGO, NULL, isp116x,
1198 					      &isp116x_debug_fops);
1199 	if (!isp116x->dentry)
1200 		return -ENOMEM;
1201 	return 0;
1202 }
1203 
1204 static void remove_debug_file(struct isp116x *isp116x)
1205 {
1206 	debugfs_remove(isp116x->dentry);
1207 }
1208 
1209 #else
1210 
1211 #define	create_debug_file(d)	0
1212 #define	remove_debug_file(d)	do{}while(0)
1213 
1214 #endif				/* CONFIG_DEBUG_FS */
1215 
1216 /*-----------------------------------------------------------------*/
1217 
1218 /*
1219   Software reset - can be called from any contect.
1220 */
1221 static int isp116x_sw_reset(struct isp116x *isp116x)
1222 {
1223 	int retries = 15;
1224 	unsigned long flags;
1225 	int ret = 0;
1226 
1227 	spin_lock_irqsave(&isp116x->lock, flags);
1228 	isp116x_write_reg16(isp116x, HCSWRES, HCSWRES_MAGIC);
1229 	isp116x_write_reg32(isp116x, HCCMDSTAT, HCCMDSTAT_HCR);
1230 	while (--retries) {
1231 		/* It usually resets within 1 ms */
1232 		mdelay(1);
1233 		if (!(isp116x_read_reg32(isp116x, HCCMDSTAT) & HCCMDSTAT_HCR))
1234 			break;
1235 	}
1236 	if (!retries) {
1237 		ERR("Software reset timeout\n");
1238 		ret = -ETIME;
1239 	}
1240 	spin_unlock_irqrestore(&isp116x->lock, flags);
1241 	return ret;
1242 }
1243 
1244 static int isp116x_reset(struct usb_hcd *hcd)
1245 {
1246 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1247 	unsigned long t;
1248 	u16 clkrdy = 0;
1249 	int ret, timeout = 15 /* ms */ ;
1250 
1251 	ret = isp116x_sw_reset(isp116x);
1252 	if (ret)
1253 		return ret;
1254 
1255 	t = jiffies + msecs_to_jiffies(timeout);
1256 	while (time_before_eq(jiffies, t)) {
1257 		msleep(4);
1258 		spin_lock_irq(&isp116x->lock);
1259 		clkrdy = isp116x_read_reg16(isp116x, HCuPINT) & HCuPINT_CLKRDY;
1260 		spin_unlock_irq(&isp116x->lock);
1261 		if (clkrdy)
1262 			break;
1263 	}
1264 	if (!clkrdy) {
1265 		ERR("Clock not ready after %dms\n", timeout);
1266 		/* After sw_reset the clock won't report to be ready, if
1267 		   H_WAKEUP pin is high. */
1268 		ERR("Please make sure that the H_WAKEUP pin is pulled low!\n");
1269 		ret = -ENODEV;
1270 	}
1271 	return ret;
1272 }
1273 
1274 static void isp116x_stop(struct usb_hcd *hcd)
1275 {
1276 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1277 	unsigned long flags;
1278 	u32 val;
1279 
1280 	spin_lock_irqsave(&isp116x->lock, flags);
1281 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1282 
1283 	/* Switch off ports' power, some devices don't come up
1284 	   after next 'insmod' without this */
1285 	val = isp116x_read_reg32(isp116x, HCRHDESCA);
1286 	val &= ~(RH_A_NPS | RH_A_PSM);
1287 	isp116x_write_reg32(isp116x, HCRHDESCA, val);
1288 	isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_LPS);
1289 	spin_unlock_irqrestore(&isp116x->lock, flags);
1290 
1291 	isp116x_sw_reset(isp116x);
1292 }
1293 
1294 /*
1295   Configure the chip. The chip must be successfully reset by now.
1296 */
1297 static int isp116x_start(struct usb_hcd *hcd)
1298 {
1299 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1300 	struct isp116x_platform_data *board = isp116x->board;
1301 	u32 val;
1302 	unsigned long flags;
1303 
1304 	spin_lock_irqsave(&isp116x->lock, flags);
1305 
1306 	/* clear interrupt status and disable all interrupt sources */
1307 	isp116x_write_reg16(isp116x, HCuPINT, 0xff);
1308 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1309 
1310 	val = isp116x_read_reg16(isp116x, HCCHIPID);
1311 	if ((val & HCCHIPID_MASK) != HCCHIPID_MAGIC) {
1312 		ERR("Invalid chip ID %04x\n", val);
1313 		spin_unlock_irqrestore(&isp116x->lock, flags);
1314 		return -ENODEV;
1315 	}
1316 
1317 	/* To be removed in future */
1318 	hcd->uses_new_polling = 1;
1319 
1320 	isp116x_write_reg16(isp116x, HCITLBUFLEN, ISP116x_ITL_BUFSIZE);
1321 	isp116x_write_reg16(isp116x, HCATLBUFLEN, ISP116x_ATL_BUFSIZE);
1322 
1323 	/* ----- HW conf */
1324 	val = HCHWCFG_INT_ENABLE | HCHWCFG_DBWIDTH(1);
1325 	if (board->sel15Kres)
1326 		val |= HCHWCFG_15KRSEL;
1327 	/* Remote wakeup won't work without working clock */
1328 	if (board->remote_wakeup_enable)
1329 		val |= HCHWCFG_CLKNOTSTOP;
1330 	if (board->oc_enable)
1331 		val |= HCHWCFG_ANALOG_OC;
1332 	if (board->int_act_high)
1333 		val |= HCHWCFG_INT_POL;
1334 	if (board->int_edge_triggered)
1335 		val |= HCHWCFG_INT_TRIGGER;
1336 	isp116x_write_reg16(isp116x, HCHWCFG, val);
1337 
1338 	/* ----- Root hub conf */
1339 	val = (25 << 24) & RH_A_POTPGT;
1340 	/* AN10003_1.pdf recommends RH_A_NPS (no power switching) to
1341 	   be always set. Yet, instead, we request individual port
1342 	   power switching. */
1343 	val |= RH_A_PSM;
1344 	/* Report overcurrent per port */
1345 	val |= RH_A_OCPM;
1346 	isp116x_write_reg32(isp116x, HCRHDESCA, val);
1347 	isp116x->rhdesca = isp116x_read_reg32(isp116x, HCRHDESCA);
1348 
1349 	val = RH_B_PPCM;
1350 	isp116x_write_reg32(isp116x, HCRHDESCB, val);
1351 	isp116x->rhdescb = isp116x_read_reg32(isp116x, HCRHDESCB);
1352 
1353 	val = 0;
1354 	if (board->remote_wakeup_enable) {
1355 		if (!device_can_wakeup(hcd->self.controller))
1356 			device_init_wakeup(hcd->self.controller, 1);
1357 		val |= RH_HS_DRWE;
1358 	}
1359 	isp116x_write_reg32(isp116x, HCRHSTATUS, val);
1360 	isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
1361 
1362 	isp116x_write_reg32(isp116x, HCFMINTVL, 0x27782edf);
1363 
1364 	hcd->state = HC_STATE_RUNNING;
1365 
1366 	/* Set up interrupts */
1367 	isp116x->intenb = HCINT_MIE | HCINT_RHSC | HCINT_UE;
1368 	if (board->remote_wakeup_enable)
1369 		isp116x->intenb |= HCINT_RD;
1370 	isp116x->irqenb = HCuPINT_ATL | HCuPINT_OPR;	/* | HCuPINT_SUSP; */
1371 	isp116x_write_reg32(isp116x, HCINTENB, isp116x->intenb);
1372 	isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
1373 
1374 	/* Go operational */
1375 	val = HCCONTROL_USB_OPER;
1376 	if (board->remote_wakeup_enable)
1377 		val |= HCCONTROL_RWE;
1378 	isp116x_write_reg32(isp116x, HCCONTROL, val);
1379 
1380 	/* Disable ports to avoid race in device enumeration */
1381 	isp116x_write_reg32(isp116x, HCRHPORT1, RH_PS_CCS);
1382 	isp116x_write_reg32(isp116x, HCRHPORT2, RH_PS_CCS);
1383 
1384 	isp116x_show_regs_log(isp116x);
1385 	spin_unlock_irqrestore(&isp116x->lock, flags);
1386 	return 0;
1387 }
1388 
1389 #ifdef	CONFIG_PM
1390 
1391 static int isp116x_bus_suspend(struct usb_hcd *hcd)
1392 {
1393 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1394 	unsigned long flags;
1395 	u32 val;
1396 	int ret = 0;
1397 
1398 	spin_lock_irqsave(&isp116x->lock, flags);
1399 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1400 
1401 	switch (val & HCCONTROL_HCFS) {
1402 	case HCCONTROL_USB_OPER:
1403 		spin_unlock_irqrestore(&isp116x->lock, flags);
1404 		val &= (~HCCONTROL_HCFS & ~HCCONTROL_RWE);
1405 		val |= HCCONTROL_USB_SUSPEND;
1406 		if (device_may_wakeup(&hcd->self.root_hub->dev))
1407 			val |= HCCONTROL_RWE;
1408 		/* Wait for usb transfers to finish */
1409 		msleep(2);
1410 		spin_lock_irqsave(&isp116x->lock, flags);
1411 		isp116x_write_reg32(isp116x, HCCONTROL, val);
1412 		spin_unlock_irqrestore(&isp116x->lock, flags);
1413 		/* Wait for devices to suspend */
1414 		msleep(5);
1415 		break;
1416 	case HCCONTROL_USB_RESUME:
1417 		isp116x_write_reg32(isp116x, HCCONTROL,
1418 				    (val & ~HCCONTROL_HCFS) |
1419 				    HCCONTROL_USB_RESET);
1420 	case HCCONTROL_USB_RESET:
1421 		ret = -EBUSY;
1422 	default:		/* HCCONTROL_USB_SUSPEND */
1423 		spin_unlock_irqrestore(&isp116x->lock, flags);
1424 		break;
1425 	}
1426 
1427 	return ret;
1428 }
1429 
1430 static int isp116x_bus_resume(struct usb_hcd *hcd)
1431 {
1432 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1433 	u32 val;
1434 
1435 	msleep(5);
1436 	spin_lock_irq(&isp116x->lock);
1437 
1438 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1439 	switch (val & HCCONTROL_HCFS) {
1440 	case HCCONTROL_USB_SUSPEND:
1441 		val &= ~HCCONTROL_HCFS;
1442 		val |= HCCONTROL_USB_RESUME;
1443 		isp116x_write_reg32(isp116x, HCCONTROL, val);
1444 	case HCCONTROL_USB_RESUME:
1445 		break;
1446 	case HCCONTROL_USB_OPER:
1447 		spin_unlock_irq(&isp116x->lock);
1448 		/* Without setting power_state here the
1449 		   SUSPENDED state won't be removed from
1450 		   sysfs/usbN/power.state as a response to remote
1451 		   wakeup. Maybe in the future. */
1452 		hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1453 		return 0;
1454 	default:
1455 		/* HCCONTROL_USB_RESET: this may happen, when during
1456 		   suspension the HC lost power. Reinitialize completely */
1457 		spin_unlock_irq(&isp116x->lock);
1458 		DBG("Chip has been reset while suspended. Reinit from scratch.\n");
1459 		isp116x_reset(hcd);
1460 		isp116x_start(hcd);
1461 		isp116x_hub_control(hcd, SetPortFeature,
1462 				    USB_PORT_FEAT_POWER, 1, NULL, 0);
1463 		if ((isp116x->rhdesca & RH_A_NDP) == 2)
1464 			isp116x_hub_control(hcd, SetPortFeature,
1465 					    USB_PORT_FEAT_POWER, 2, NULL, 0);
1466 		hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1467 		return 0;
1468 	}
1469 
1470 	val = isp116x->rhdesca & RH_A_NDP;
1471 	while (val--) {
1472 		u32 stat =
1473 		    isp116x_read_reg32(isp116x, val ? HCRHPORT2 : HCRHPORT1);
1474 		/* force global, not selective, resume */
1475 		if (!(stat & RH_PS_PSS))
1476 			continue;
1477 		DBG("%s: Resuming port %d\n", __func__, val);
1478 		isp116x_write_reg32(isp116x, RH_PS_POCI, val
1479 				    ? HCRHPORT2 : HCRHPORT1);
1480 	}
1481 	spin_unlock_irq(&isp116x->lock);
1482 
1483 	hcd->state = HC_STATE_RESUMING;
1484 	msleep(20);
1485 
1486 	/* Go operational */
1487 	spin_lock_irq(&isp116x->lock);
1488 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1489 	isp116x_write_reg32(isp116x, HCCONTROL,
1490 			    (val & ~HCCONTROL_HCFS) | HCCONTROL_USB_OPER);
1491 	spin_unlock_irq(&isp116x->lock);
1492 	/* see analogous comment above */
1493 	hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1494 	hcd->state = HC_STATE_RUNNING;
1495 
1496 	return 0;
1497 }
1498 
1499 #else
1500 
1501 #define	isp116x_bus_suspend	NULL
1502 #define	isp116x_bus_resume	NULL
1503 
1504 #endif
1505 
1506 static struct hc_driver isp116x_hc_driver = {
1507 	.description = hcd_name,
1508 	.product_desc = "ISP116x Host Controller",
1509 	.hcd_priv_size = sizeof(struct isp116x),
1510 
1511 	.irq = isp116x_irq,
1512 	.flags = HCD_USB11,
1513 
1514 	.reset = isp116x_reset,
1515 	.start = isp116x_start,
1516 	.stop = isp116x_stop,
1517 
1518 	.urb_enqueue = isp116x_urb_enqueue,
1519 	.urb_dequeue = isp116x_urb_dequeue,
1520 	.endpoint_disable = isp116x_endpoint_disable,
1521 
1522 	.get_frame_number = isp116x_get_frame,
1523 
1524 	.hub_status_data = isp116x_hub_status_data,
1525 	.hub_control = isp116x_hub_control,
1526 	.bus_suspend = isp116x_bus_suspend,
1527 	.bus_resume = isp116x_bus_resume,
1528 };
1529 
1530 /*----------------------------------------------------------------*/
1531 
1532 static int isp116x_remove(struct platform_device *pdev)
1533 {
1534 	struct usb_hcd *hcd = platform_get_drvdata(pdev);
1535 	struct isp116x *isp116x;
1536 	struct resource *res;
1537 
1538 	if (!hcd)
1539 		return 0;
1540 	isp116x = hcd_to_isp116x(hcd);
1541 	remove_debug_file(isp116x);
1542 	usb_remove_hcd(hcd);
1543 
1544 	iounmap(isp116x->data_reg);
1545 	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1546 	release_mem_region(res->start, 2);
1547 	iounmap(isp116x->addr_reg);
1548 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1549 	release_mem_region(res->start, 2);
1550 
1551 	usb_put_hcd(hcd);
1552 	return 0;
1553 }
1554 
1555 #define resource_len(r) (((r)->end - (r)->start) + 1)
1556 
1557 static int __devinit isp116x_probe(struct platform_device *pdev)
1558 {
1559 	struct usb_hcd *hcd;
1560 	struct isp116x *isp116x;
1561 	struct resource *addr, *data;
1562 	void __iomem *addr_reg;
1563 	void __iomem *data_reg;
1564 	int irq;
1565 	int ret = 0;
1566 
1567 	if (pdev->num_resources < 3) {
1568 		ret = -ENODEV;
1569 		goto err1;
1570 	}
1571 
1572 	data = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1573 	addr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1574 	irq = platform_get_irq(pdev, 0);
1575 	if (!addr || !data || irq < 0) {
1576 		ret = -ENODEV;
1577 		goto err1;
1578 	}
1579 
1580 	if (pdev->dev.dma_mask) {
1581 		DBG("DMA not supported\n");
1582 		ret = -EINVAL;
1583 		goto err1;
1584 	}
1585 
1586 	if (!request_mem_region(addr->start, 2, hcd_name)) {
1587 		ret = -EBUSY;
1588 		goto err1;
1589 	}
1590 	addr_reg = ioremap(addr->start, resource_len(addr));
1591 	if (addr_reg == NULL) {
1592 		ret = -ENOMEM;
1593 		goto err2;
1594 	}
1595 	if (!request_mem_region(data->start, 2, hcd_name)) {
1596 		ret = -EBUSY;
1597 		goto err3;
1598 	}
1599 	data_reg = ioremap(data->start, resource_len(data));
1600 	if (data_reg == NULL) {
1601 		ret = -ENOMEM;
1602 		goto err4;
1603 	}
1604 
1605 	/* allocate and initialize hcd */
1606 	hcd = usb_create_hcd(&isp116x_hc_driver, &pdev->dev, pdev->dev.bus_id);
1607 	if (!hcd) {
1608 		ret = -ENOMEM;
1609 		goto err5;
1610 	}
1611 	/* this rsrc_start is bogus */
1612 	hcd->rsrc_start = addr->start;
1613 	isp116x = hcd_to_isp116x(hcd);
1614 	isp116x->data_reg = data_reg;
1615 	isp116x->addr_reg = addr_reg;
1616 	spin_lock_init(&isp116x->lock);
1617 	INIT_LIST_HEAD(&isp116x->async);
1618 	isp116x->board = pdev->dev.platform_data;
1619 
1620 	if (!isp116x->board) {
1621 		ERR("Platform data structure not initialized\n");
1622 		ret = -ENODEV;
1623 		goto err6;
1624 	}
1625 	if (isp116x_check_platform_delay(isp116x)) {
1626 		ERR("USE_PLATFORM_DELAY defined, but delay function not "
1627 		    "implemented.\n");
1628 		ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
1629 		ret = -ENODEV;
1630 		goto err6;
1631 	}
1632 
1633 	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
1634 	if (ret)
1635 		goto err6;
1636 
1637 	ret = create_debug_file(isp116x);
1638 	if (ret) {
1639 		ERR("Couldn't create debugfs entry\n");
1640 		goto err7;
1641 	}
1642 
1643 	return 0;
1644 
1645       err7:
1646 	usb_remove_hcd(hcd);
1647       err6:
1648 	usb_put_hcd(hcd);
1649       err5:
1650 	iounmap(data_reg);
1651       err4:
1652 	release_mem_region(data->start, 2);
1653       err3:
1654 	iounmap(addr_reg);
1655       err2:
1656 	release_mem_region(addr->start, 2);
1657       err1:
1658 	ERR("init error, %d\n", ret);
1659 	return ret;
1660 }
1661 
1662 #ifdef	CONFIG_PM
1663 /*
1664   Suspend of platform device
1665 */
1666 static int isp116x_suspend(struct platform_device *dev, pm_message_t state)
1667 {
1668 	VDBG("%s: state %x\n", __func__, state.event);
1669 	dev->dev.power.power_state = state;
1670 	return 0;
1671 }
1672 
1673 /*
1674   Resume platform device
1675 */
1676 static int isp116x_resume(struct platform_device *dev)
1677 {
1678 	VDBG("%s:  state %x\n", __func__, dev->power.power_state.event);
1679 	dev->dev.power.power_state = PMSG_ON;
1680 	return 0;
1681 }
1682 
1683 #else
1684 
1685 #define	isp116x_suspend    NULL
1686 #define	isp116x_resume     NULL
1687 
1688 #endif
1689 
1690 static struct platform_driver isp116x_driver = {
1691 	.probe = isp116x_probe,
1692 	.remove = isp116x_remove,
1693 	.suspend = isp116x_suspend,
1694 	.resume = isp116x_resume,
1695 	.driver = {
1696 		   .name = (char *)hcd_name,
1697 		   },
1698 };
1699 
1700 /*-----------------------------------------------------------------*/
1701 
1702 static int __init isp116x_init(void)
1703 {
1704 	if (usb_disabled())
1705 		return -ENODEV;
1706 
1707 	INFO("driver %s, %s\n", hcd_name, DRIVER_VERSION);
1708 	return platform_driver_register(&isp116x_driver);
1709 }
1710 
1711 module_init(isp116x_init);
1712 
1713 static void __exit isp116x_cleanup(void)
1714 {
1715 	platform_driver_unregister(&isp116x_driver);
1716 }
1717 
1718 module_exit(isp116x_cleanup);
1719