xref: /openbmc/linux/drivers/usb/host/isp116x-hcd.c (revision a1e58bbd)
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_read_reg32(isp116x, i ? HCRHPORT2 : HCRHPORT1);
915 
916 		if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
917 			      | RH_PS_OCIC | RH_PS_PRSC)) {
918 			changed = 1;
919 			buf[0] |= 1 << (i + 1);
920 		}
921 	}
922 	spin_unlock_irqrestore(&isp116x->lock, flags);
923 	return changed;
924 }
925 
926 static void isp116x_hub_descriptor(struct isp116x *isp116x,
927 				   struct usb_hub_descriptor *desc)
928 {
929 	u32 reg = isp116x->rhdesca;
930 
931 	desc->bDescriptorType = 0x29;
932 	desc->bDescLength = 9;
933 	desc->bHubContrCurrent = 0;
934 	desc->bNbrPorts = (u8) (reg & 0x3);
935 	/* Power switching, device type, overcurrent. */
936 	desc->wHubCharacteristics = cpu_to_le16((u16) ((reg >> 8) & 0x1f));
937 	desc->bPwrOn2PwrGood = (u8) ((reg >> 24) & 0xff);
938 	/* two bitmaps:  ports removable, and legacy PortPwrCtrlMask */
939 	desc->bitmap[0] = 0;
940 	desc->bitmap[1] = ~0;
941 }
942 
943 /* Perform reset of a given port.
944    It would be great to just start the reset and let the
945    USB core to clear the reset in due time. However,
946    root hub ports should be reset for at least 50 ms, while
947    our chip stays in reset for about 10 ms. I.e., we must
948    repeatedly reset it ourself here.
949 */
950 static inline void root_port_reset(struct isp116x *isp116x, unsigned port)
951 {
952 	u32 tmp;
953 	unsigned long flags, t;
954 
955 	/* Root hub reset should be 50 ms, but some devices
956 	   want it even longer. */
957 	t = jiffies + msecs_to_jiffies(100);
958 
959 	while (time_before(jiffies, t)) {
960 		spin_lock_irqsave(&isp116x->lock, flags);
961 		/* spin until any current reset finishes */
962 		for (;;) {
963 			tmp = isp116x_read_reg32(isp116x, port ?
964 						 HCRHPORT2 : HCRHPORT1);
965 			if (!(tmp & RH_PS_PRS))
966 				break;
967 			udelay(500);
968 		}
969 		/* Don't reset a disconnected port */
970 		if (!(tmp & RH_PS_CCS)) {
971 			spin_unlock_irqrestore(&isp116x->lock, flags);
972 			break;
973 		}
974 		/* Reset lasts 10ms (claims datasheet) */
975 		isp116x_write_reg32(isp116x, port ? HCRHPORT2 :
976 				    HCRHPORT1, (RH_PS_PRS));
977 		spin_unlock_irqrestore(&isp116x->lock, flags);
978 		msleep(10);
979 	}
980 }
981 
982 /* Adapted from ohci-hub.c */
983 static int isp116x_hub_control(struct usb_hcd *hcd,
984 			       u16 typeReq,
985 			       u16 wValue, u16 wIndex, char *buf, u16 wLength)
986 {
987 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
988 	int ret = 0;
989 	unsigned long flags;
990 	int ports = isp116x->rhdesca & RH_A_NDP;
991 	u32 tmp = 0;
992 
993 	switch (typeReq) {
994 	case ClearHubFeature:
995 		DBG("ClearHubFeature: ");
996 		switch (wValue) {
997 		case C_HUB_OVER_CURRENT:
998 			DBG("C_HUB_OVER_CURRENT\n");
999 			spin_lock_irqsave(&isp116x->lock, flags);
1000 			isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_OCIC);
1001 			spin_unlock_irqrestore(&isp116x->lock, flags);
1002 		case C_HUB_LOCAL_POWER:
1003 			DBG("C_HUB_LOCAL_POWER\n");
1004 			break;
1005 		default:
1006 			goto error;
1007 		}
1008 		break;
1009 	case SetHubFeature:
1010 		DBG("SetHubFeature: ");
1011 		switch (wValue) {
1012 		case C_HUB_OVER_CURRENT:
1013 		case C_HUB_LOCAL_POWER:
1014 			DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1015 			break;
1016 		default:
1017 			goto error;
1018 		}
1019 		break;
1020 	case GetHubDescriptor:
1021 		DBG("GetHubDescriptor\n");
1022 		isp116x_hub_descriptor(isp116x,
1023 				       (struct usb_hub_descriptor *)buf);
1024 		break;
1025 	case GetHubStatus:
1026 		DBG("GetHubStatus\n");
1027 		*(__le32 *) buf = 0;
1028 		break;
1029 	case GetPortStatus:
1030 		DBG("GetPortStatus\n");
1031 		if (!wIndex || wIndex > ports)
1032 			goto error;
1033 		spin_lock_irqsave(&isp116x->lock, flags);
1034 		tmp = isp116x_read_reg32(isp116x, (--wIndex) ? HCRHPORT2 : HCRHPORT1);
1035 		spin_unlock_irqrestore(&isp116x->lock, flags);
1036 		*(__le32 *) buf = cpu_to_le32(tmp);
1037 		DBG("GetPortStatus: port[%d]  %08x\n", wIndex + 1, tmp);
1038 		break;
1039 	case ClearPortFeature:
1040 		DBG("ClearPortFeature: ");
1041 		if (!wIndex || wIndex > ports)
1042 			goto error;
1043 		wIndex--;
1044 
1045 		switch (wValue) {
1046 		case USB_PORT_FEAT_ENABLE:
1047 			DBG("USB_PORT_FEAT_ENABLE\n");
1048 			tmp = RH_PS_CCS;
1049 			break;
1050 		case USB_PORT_FEAT_C_ENABLE:
1051 			DBG("USB_PORT_FEAT_C_ENABLE\n");
1052 			tmp = RH_PS_PESC;
1053 			break;
1054 		case USB_PORT_FEAT_SUSPEND:
1055 			DBG("USB_PORT_FEAT_SUSPEND\n");
1056 			tmp = RH_PS_POCI;
1057 			break;
1058 		case USB_PORT_FEAT_C_SUSPEND:
1059 			DBG("USB_PORT_FEAT_C_SUSPEND\n");
1060 			tmp = RH_PS_PSSC;
1061 			break;
1062 		case USB_PORT_FEAT_POWER:
1063 			DBG("USB_PORT_FEAT_POWER\n");
1064 			tmp = RH_PS_LSDA;
1065 			break;
1066 		case USB_PORT_FEAT_C_CONNECTION:
1067 			DBG("USB_PORT_FEAT_C_CONNECTION\n");
1068 			tmp = RH_PS_CSC;
1069 			break;
1070 		case USB_PORT_FEAT_C_OVER_CURRENT:
1071 			DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
1072 			tmp = RH_PS_OCIC;
1073 			break;
1074 		case USB_PORT_FEAT_C_RESET:
1075 			DBG("USB_PORT_FEAT_C_RESET\n");
1076 			tmp = RH_PS_PRSC;
1077 			break;
1078 		default:
1079 			goto error;
1080 		}
1081 		spin_lock_irqsave(&isp116x->lock, flags);
1082 		isp116x_write_reg32(isp116x, wIndex
1083 				    ? HCRHPORT2 : HCRHPORT1, tmp);
1084 		spin_unlock_irqrestore(&isp116x->lock, flags);
1085 		break;
1086 	case SetPortFeature:
1087 		DBG("SetPortFeature: ");
1088 		if (!wIndex || wIndex > ports)
1089 			goto error;
1090 		wIndex--;
1091 		switch (wValue) {
1092 		case USB_PORT_FEAT_SUSPEND:
1093 			DBG("USB_PORT_FEAT_SUSPEND\n");
1094 			spin_lock_irqsave(&isp116x->lock, flags);
1095 			isp116x_write_reg32(isp116x, wIndex
1096 					    ? HCRHPORT2 : HCRHPORT1, RH_PS_PSS);
1097 			spin_unlock_irqrestore(&isp116x->lock, flags);
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 			spin_unlock_irqrestore(&isp116x->lock, flags);
1105 			break;
1106 		case USB_PORT_FEAT_RESET:
1107 			DBG("USB_PORT_FEAT_RESET\n");
1108 			root_port_reset(isp116x, wIndex);
1109 			break;
1110 		default:
1111 			goto error;
1112 		}
1113 		break;
1114 
1115 	default:
1116 	      error:
1117 		/* "protocol stall" on error */
1118 		DBG("PROTOCOL STALL\n");
1119 		ret = -EPIPE;
1120 	}
1121 	return ret;
1122 }
1123 
1124 /*-----------------------------------------------------------------*/
1125 
1126 #ifdef CONFIG_DEBUG_FS
1127 
1128 static void dump_irq(struct seq_file *s, char *label, u16 mask)
1129 {
1130 	seq_printf(s, "%s %04x%s%s%s%s%s%s\n", label, mask,
1131 		   mask & HCuPINT_CLKRDY ? " clkrdy" : "",
1132 		   mask & HCuPINT_SUSP ? " susp" : "",
1133 		   mask & HCuPINT_OPR ? " opr" : "",
1134 		   mask & HCuPINT_AIIEOT ? " eot" : "",
1135 		   mask & HCuPINT_ATL ? " atl" : "",
1136 		   mask & HCuPINT_SOF ? " sof" : "");
1137 }
1138 
1139 static void dump_int(struct seq_file *s, char *label, u32 mask)
1140 {
1141 	seq_printf(s, "%s %08x%s%s%s%s%s%s%s\n", label, mask,
1142 		   mask & HCINT_MIE ? " MIE" : "",
1143 		   mask & HCINT_RHSC ? " rhsc" : "",
1144 		   mask & HCINT_FNO ? " fno" : "",
1145 		   mask & HCINT_UE ? " ue" : "",
1146 		   mask & HCINT_RD ? " rd" : "",
1147 		   mask & HCINT_SF ? " sof" : "", mask & HCINT_SO ? " so" : "");
1148 }
1149 
1150 static int isp116x_show_dbg(struct seq_file *s, void *unused)
1151 {
1152 	struct isp116x *isp116x = s->private;
1153 
1154 	seq_printf(s, "%s\n%s version %s\n",
1155 		   isp116x_to_hcd(isp116x)->product_desc, hcd_name,
1156 		   DRIVER_VERSION);
1157 
1158 	if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x)->state)) {
1159 		seq_printf(s, "HCD is suspended\n");
1160 		return 0;
1161 	}
1162 	if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state)) {
1163 		seq_printf(s, "HCD not running\n");
1164 		return 0;
1165 	}
1166 
1167 	spin_lock_irq(&isp116x->lock);
1168 	dump_irq(s, "hc_irq_enable", isp116x_read_reg16(isp116x, HCuPINTENB));
1169 	dump_irq(s, "hc_irq_status", isp116x_read_reg16(isp116x, HCuPINT));
1170 	dump_int(s, "hc_int_enable", isp116x_read_reg32(isp116x, HCINTENB));
1171 	dump_int(s, "hc_int_status", isp116x_read_reg32(isp116x, HCINTSTAT));
1172 	isp116x_show_regs_seq(isp116x, s);
1173 	spin_unlock_irq(&isp116x->lock);
1174 	seq_printf(s, "\n");
1175 
1176 	return 0;
1177 }
1178 
1179 static int isp116x_open_seq(struct inode *inode, struct file *file)
1180 {
1181 	return single_open(file, isp116x_show_dbg, inode->i_private);
1182 }
1183 
1184 static const struct file_operations isp116x_debug_fops = {
1185 	.open = isp116x_open_seq,
1186 	.read = seq_read,
1187 	.llseek = seq_lseek,
1188 	.release = single_release,
1189 };
1190 
1191 static int create_debug_file(struct isp116x *isp116x)
1192 {
1193 	isp116x->dentry = debugfs_create_file(hcd_name,
1194 					      S_IRUGO, NULL, isp116x,
1195 					      &isp116x_debug_fops);
1196 	if (!isp116x->dentry)
1197 		return -ENOMEM;
1198 	return 0;
1199 }
1200 
1201 static void remove_debug_file(struct isp116x *isp116x)
1202 {
1203 	debugfs_remove(isp116x->dentry);
1204 }
1205 
1206 #else
1207 
1208 #define	create_debug_file(d)	0
1209 #define	remove_debug_file(d)	do{}while(0)
1210 
1211 #endif				/* CONFIG_DEBUG_FS */
1212 
1213 /*-----------------------------------------------------------------*/
1214 
1215 /*
1216   Software reset - can be called from any contect.
1217 */
1218 static int isp116x_sw_reset(struct isp116x *isp116x)
1219 {
1220 	int retries = 15;
1221 	unsigned long flags;
1222 	int ret = 0;
1223 
1224 	spin_lock_irqsave(&isp116x->lock, flags);
1225 	isp116x_write_reg16(isp116x, HCSWRES, HCSWRES_MAGIC);
1226 	isp116x_write_reg32(isp116x, HCCMDSTAT, HCCMDSTAT_HCR);
1227 	while (--retries) {
1228 		/* It usually resets within 1 ms */
1229 		mdelay(1);
1230 		if (!(isp116x_read_reg32(isp116x, HCCMDSTAT) & HCCMDSTAT_HCR))
1231 			break;
1232 	}
1233 	if (!retries) {
1234 		ERR("Software reset timeout\n");
1235 		ret = -ETIME;
1236 	}
1237 	spin_unlock_irqrestore(&isp116x->lock, flags);
1238 	return ret;
1239 }
1240 
1241 static int isp116x_reset(struct usb_hcd *hcd)
1242 {
1243 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1244 	unsigned long t;
1245 	u16 clkrdy = 0;
1246 	int ret, timeout = 15 /* ms */ ;
1247 
1248 	ret = isp116x_sw_reset(isp116x);
1249 	if (ret)
1250 		return ret;
1251 
1252 	t = jiffies + msecs_to_jiffies(timeout);
1253 	while (time_before_eq(jiffies, t)) {
1254 		msleep(4);
1255 		spin_lock_irq(&isp116x->lock);
1256 		clkrdy = isp116x_read_reg16(isp116x, HCuPINT) & HCuPINT_CLKRDY;
1257 		spin_unlock_irq(&isp116x->lock);
1258 		if (clkrdy)
1259 			break;
1260 	}
1261 	if (!clkrdy) {
1262 		ERR("Clock not ready after %dms\n", timeout);
1263 		/* After sw_reset the clock won't report to be ready, if
1264 		   H_WAKEUP pin is high. */
1265 		ERR("Please make sure that the H_WAKEUP pin is pulled low!\n");
1266 		ret = -ENODEV;
1267 	}
1268 	return ret;
1269 }
1270 
1271 static void isp116x_stop(struct usb_hcd *hcd)
1272 {
1273 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1274 	unsigned long flags;
1275 	u32 val;
1276 
1277 	spin_lock_irqsave(&isp116x->lock, flags);
1278 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1279 
1280 	/* Switch off ports' power, some devices don't come up
1281 	   after next 'insmod' without this */
1282 	val = isp116x_read_reg32(isp116x, HCRHDESCA);
1283 	val &= ~(RH_A_NPS | RH_A_PSM);
1284 	isp116x_write_reg32(isp116x, HCRHDESCA, val);
1285 	isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_LPS);
1286 	spin_unlock_irqrestore(&isp116x->lock, flags);
1287 
1288 	isp116x_sw_reset(isp116x);
1289 }
1290 
1291 /*
1292   Configure the chip. The chip must be successfully reset by now.
1293 */
1294 static int isp116x_start(struct usb_hcd *hcd)
1295 {
1296 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1297 	struct isp116x_platform_data *board = isp116x->board;
1298 	u32 val;
1299 	unsigned long flags;
1300 
1301 	spin_lock_irqsave(&isp116x->lock, flags);
1302 
1303 	/* clear interrupt status and disable all interrupt sources */
1304 	isp116x_write_reg16(isp116x, HCuPINT, 0xff);
1305 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1306 
1307 	val = isp116x_read_reg16(isp116x, HCCHIPID);
1308 	if ((val & HCCHIPID_MASK) != HCCHIPID_MAGIC) {
1309 		ERR("Invalid chip ID %04x\n", val);
1310 		spin_unlock_irqrestore(&isp116x->lock, flags);
1311 		return -ENODEV;
1312 	}
1313 
1314 	/* To be removed in future */
1315 	hcd->uses_new_polling = 1;
1316 
1317 	isp116x_write_reg16(isp116x, HCITLBUFLEN, ISP116x_ITL_BUFSIZE);
1318 	isp116x_write_reg16(isp116x, HCATLBUFLEN, ISP116x_ATL_BUFSIZE);
1319 
1320 	/* ----- HW conf */
1321 	val = HCHWCFG_INT_ENABLE | HCHWCFG_DBWIDTH(1);
1322 	if (board->sel15Kres)
1323 		val |= HCHWCFG_15KRSEL;
1324 	/* Remote wakeup won't work without working clock */
1325 	if (board->remote_wakeup_enable)
1326 		val |= HCHWCFG_CLKNOTSTOP;
1327 	if (board->oc_enable)
1328 		val |= HCHWCFG_ANALOG_OC;
1329 	if (board->int_act_high)
1330 		val |= HCHWCFG_INT_POL;
1331 	if (board->int_edge_triggered)
1332 		val |= HCHWCFG_INT_TRIGGER;
1333 	isp116x_write_reg16(isp116x, HCHWCFG, val);
1334 
1335 	/* ----- Root hub conf */
1336 	val = (25 << 24) & RH_A_POTPGT;
1337 	/* AN10003_1.pdf recommends RH_A_NPS (no power switching) to
1338 	   be always set. Yet, instead, we request individual port
1339 	   power switching. */
1340 	val |= RH_A_PSM;
1341 	/* Report overcurrent per port */
1342 	val |= RH_A_OCPM;
1343 	isp116x_write_reg32(isp116x, HCRHDESCA, val);
1344 	isp116x->rhdesca = isp116x_read_reg32(isp116x, HCRHDESCA);
1345 
1346 	val = RH_B_PPCM;
1347 	isp116x_write_reg32(isp116x, HCRHDESCB, val);
1348 	isp116x->rhdescb = isp116x_read_reg32(isp116x, HCRHDESCB);
1349 
1350 	val = 0;
1351 	if (board->remote_wakeup_enable) {
1352 		if (!device_can_wakeup(hcd->self.controller))
1353 			device_init_wakeup(hcd->self.controller, 1);
1354 		val |= RH_HS_DRWE;
1355 	}
1356 	isp116x_write_reg32(isp116x, HCRHSTATUS, val);
1357 	isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
1358 
1359 	isp116x_write_reg32(isp116x, HCFMINTVL, 0x27782edf);
1360 
1361 	hcd->state = HC_STATE_RUNNING;
1362 
1363 	/* Set up interrupts */
1364 	isp116x->intenb = HCINT_MIE | HCINT_RHSC | HCINT_UE;
1365 	if (board->remote_wakeup_enable)
1366 		isp116x->intenb |= HCINT_RD;
1367 	isp116x->irqenb = HCuPINT_ATL | HCuPINT_OPR;	/* | HCuPINT_SUSP; */
1368 	isp116x_write_reg32(isp116x, HCINTENB, isp116x->intenb);
1369 	isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
1370 
1371 	/* Go operational */
1372 	val = HCCONTROL_USB_OPER;
1373 	if (board->remote_wakeup_enable)
1374 		val |= HCCONTROL_RWE;
1375 	isp116x_write_reg32(isp116x, HCCONTROL, val);
1376 
1377 	/* Disable ports to avoid race in device enumeration */
1378 	isp116x_write_reg32(isp116x, HCRHPORT1, RH_PS_CCS);
1379 	isp116x_write_reg32(isp116x, HCRHPORT2, RH_PS_CCS);
1380 
1381 	isp116x_show_regs_log(isp116x);
1382 	spin_unlock_irqrestore(&isp116x->lock, flags);
1383 	return 0;
1384 }
1385 
1386 #ifdef	CONFIG_PM
1387 
1388 static int isp116x_bus_suspend(struct usb_hcd *hcd)
1389 {
1390 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1391 	unsigned long flags;
1392 	u32 val;
1393 	int ret = 0;
1394 
1395 	spin_lock_irqsave(&isp116x->lock, flags);
1396 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1397 
1398 	switch (val & HCCONTROL_HCFS) {
1399 	case HCCONTROL_USB_OPER:
1400 		spin_unlock_irqrestore(&isp116x->lock, flags);
1401 		val &= (~HCCONTROL_HCFS & ~HCCONTROL_RWE);
1402 		val |= HCCONTROL_USB_SUSPEND;
1403 		if (device_may_wakeup(&hcd->self.root_hub->dev))
1404 			val |= HCCONTROL_RWE;
1405 		/* Wait for usb transfers to finish */
1406 		msleep(2);
1407 		spin_lock_irqsave(&isp116x->lock, flags);
1408 		isp116x_write_reg32(isp116x, HCCONTROL, val);
1409 		spin_unlock_irqrestore(&isp116x->lock, flags);
1410 		/* Wait for devices to suspend */
1411 		msleep(5);
1412 		break;
1413 	case HCCONTROL_USB_RESUME:
1414 		isp116x_write_reg32(isp116x, HCCONTROL,
1415 				    (val & ~HCCONTROL_HCFS) |
1416 				    HCCONTROL_USB_RESET);
1417 	case HCCONTROL_USB_RESET:
1418 		ret = -EBUSY;
1419 	default:		/* HCCONTROL_USB_SUSPEND */
1420 		spin_unlock_irqrestore(&isp116x->lock, flags);
1421 		break;
1422 	}
1423 
1424 	return ret;
1425 }
1426 
1427 static int isp116x_bus_resume(struct usb_hcd *hcd)
1428 {
1429 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1430 	u32 val;
1431 
1432 	msleep(5);
1433 	spin_lock_irq(&isp116x->lock);
1434 
1435 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1436 	switch (val & HCCONTROL_HCFS) {
1437 	case HCCONTROL_USB_SUSPEND:
1438 		val &= ~HCCONTROL_HCFS;
1439 		val |= HCCONTROL_USB_RESUME;
1440 		isp116x_write_reg32(isp116x, HCCONTROL, val);
1441 	case HCCONTROL_USB_RESUME:
1442 		break;
1443 	case HCCONTROL_USB_OPER:
1444 		spin_unlock_irq(&isp116x->lock);
1445 		/* Without setting power_state here the
1446 		   SUSPENDED state won't be removed from
1447 		   sysfs/usbN/power.state as a response to remote
1448 		   wakeup. Maybe in the future. */
1449 		hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1450 		return 0;
1451 	default:
1452 		/* HCCONTROL_USB_RESET: this may happen, when during
1453 		   suspension the HC lost power. Reinitialize completely */
1454 		spin_unlock_irq(&isp116x->lock);
1455 		DBG("Chip has been reset while suspended. Reinit from scratch.\n");
1456 		isp116x_reset(hcd);
1457 		isp116x_start(hcd);
1458 		isp116x_hub_control(hcd, SetPortFeature,
1459 				    USB_PORT_FEAT_POWER, 1, NULL, 0);
1460 		if ((isp116x->rhdesca & RH_A_NDP) == 2)
1461 			isp116x_hub_control(hcd, SetPortFeature,
1462 					    USB_PORT_FEAT_POWER, 2, NULL, 0);
1463 		hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1464 		return 0;
1465 	}
1466 
1467 	val = isp116x->rhdesca & RH_A_NDP;
1468 	while (val--) {
1469 		u32 stat =
1470 		    isp116x_read_reg32(isp116x, val ? HCRHPORT2 : HCRHPORT1);
1471 		/* force global, not selective, resume */
1472 		if (!(stat & RH_PS_PSS))
1473 			continue;
1474 		DBG("%s: Resuming port %d\n", __func__, val);
1475 		isp116x_write_reg32(isp116x, RH_PS_POCI, val
1476 				    ? HCRHPORT2 : HCRHPORT1);
1477 	}
1478 	spin_unlock_irq(&isp116x->lock);
1479 
1480 	hcd->state = HC_STATE_RESUMING;
1481 	msleep(20);
1482 
1483 	/* Go operational */
1484 	spin_lock_irq(&isp116x->lock);
1485 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1486 	isp116x_write_reg32(isp116x, HCCONTROL,
1487 			    (val & ~HCCONTROL_HCFS) | HCCONTROL_USB_OPER);
1488 	spin_unlock_irq(&isp116x->lock);
1489 	/* see analogous comment above */
1490 	hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1491 	hcd->state = HC_STATE_RUNNING;
1492 
1493 	return 0;
1494 }
1495 
1496 #else
1497 
1498 #define	isp116x_bus_suspend	NULL
1499 #define	isp116x_bus_resume	NULL
1500 
1501 #endif
1502 
1503 static struct hc_driver isp116x_hc_driver = {
1504 	.description = hcd_name,
1505 	.product_desc = "ISP116x Host Controller",
1506 	.hcd_priv_size = sizeof(struct isp116x),
1507 
1508 	.irq = isp116x_irq,
1509 	.flags = HCD_USB11,
1510 
1511 	.reset = isp116x_reset,
1512 	.start = isp116x_start,
1513 	.stop = isp116x_stop,
1514 
1515 	.urb_enqueue = isp116x_urb_enqueue,
1516 	.urb_dequeue = isp116x_urb_dequeue,
1517 	.endpoint_disable = isp116x_endpoint_disable,
1518 
1519 	.get_frame_number = isp116x_get_frame,
1520 
1521 	.hub_status_data = isp116x_hub_status_data,
1522 	.hub_control = isp116x_hub_control,
1523 	.bus_suspend = isp116x_bus_suspend,
1524 	.bus_resume = isp116x_bus_resume,
1525 };
1526 
1527 /*----------------------------------------------------------------*/
1528 
1529 static int isp116x_remove(struct platform_device *pdev)
1530 {
1531 	struct usb_hcd *hcd = platform_get_drvdata(pdev);
1532 	struct isp116x *isp116x;
1533 	struct resource *res;
1534 
1535 	if (!hcd)
1536 		return 0;
1537 	isp116x = hcd_to_isp116x(hcd);
1538 	remove_debug_file(isp116x);
1539 	usb_remove_hcd(hcd);
1540 
1541 	iounmap(isp116x->data_reg);
1542 	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1543 	release_mem_region(res->start, 2);
1544 	iounmap(isp116x->addr_reg);
1545 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1546 	release_mem_region(res->start, 2);
1547 
1548 	usb_put_hcd(hcd);
1549 	return 0;
1550 }
1551 
1552 #define resource_len(r) (((r)->end - (r)->start) + 1)
1553 
1554 static int __devinit isp116x_probe(struct platform_device *pdev)
1555 {
1556 	struct usb_hcd *hcd;
1557 	struct isp116x *isp116x;
1558 	struct resource *addr, *data;
1559 	void __iomem *addr_reg;
1560 	void __iomem *data_reg;
1561 	int irq;
1562 	int ret = 0;
1563 
1564 	if (pdev->num_resources < 3) {
1565 		ret = -ENODEV;
1566 		goto err1;
1567 	}
1568 
1569 	data = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1570 	addr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1571 	irq = platform_get_irq(pdev, 0);
1572 	if (!addr || !data || irq < 0) {
1573 		ret = -ENODEV;
1574 		goto err1;
1575 	}
1576 
1577 	if (pdev->dev.dma_mask) {
1578 		DBG("DMA not supported\n");
1579 		ret = -EINVAL;
1580 		goto err1;
1581 	}
1582 
1583 	if (!request_mem_region(addr->start, 2, hcd_name)) {
1584 		ret = -EBUSY;
1585 		goto err1;
1586 	}
1587 	addr_reg = ioremap(addr->start, resource_len(addr));
1588 	if (addr_reg == NULL) {
1589 		ret = -ENOMEM;
1590 		goto err2;
1591 	}
1592 	if (!request_mem_region(data->start, 2, hcd_name)) {
1593 		ret = -EBUSY;
1594 		goto err3;
1595 	}
1596 	data_reg = ioremap(data->start, resource_len(data));
1597 	if (data_reg == NULL) {
1598 		ret = -ENOMEM;
1599 		goto err4;
1600 	}
1601 
1602 	/* allocate and initialize hcd */
1603 	hcd = usb_create_hcd(&isp116x_hc_driver, &pdev->dev, pdev->dev.bus_id);
1604 	if (!hcd) {
1605 		ret = -ENOMEM;
1606 		goto err5;
1607 	}
1608 	/* this rsrc_start is bogus */
1609 	hcd->rsrc_start = addr->start;
1610 	isp116x = hcd_to_isp116x(hcd);
1611 	isp116x->data_reg = data_reg;
1612 	isp116x->addr_reg = addr_reg;
1613 	spin_lock_init(&isp116x->lock);
1614 	INIT_LIST_HEAD(&isp116x->async);
1615 	isp116x->board = pdev->dev.platform_data;
1616 
1617 	if (!isp116x->board) {
1618 		ERR("Platform data structure not initialized\n");
1619 		ret = -ENODEV;
1620 		goto err6;
1621 	}
1622 	if (isp116x_check_platform_delay(isp116x)) {
1623 		ERR("USE_PLATFORM_DELAY defined, but delay function not "
1624 		    "implemented.\n");
1625 		ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
1626 		ret = -ENODEV;
1627 		goto err6;
1628 	}
1629 
1630 	ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
1631 	if (ret)
1632 		goto err6;
1633 
1634 	ret = create_debug_file(isp116x);
1635 	if (ret) {
1636 		ERR("Couldn't create debugfs entry\n");
1637 		goto err7;
1638 	}
1639 
1640 	return 0;
1641 
1642       err7:
1643 	usb_remove_hcd(hcd);
1644       err6:
1645 	usb_put_hcd(hcd);
1646       err5:
1647 	iounmap(data_reg);
1648       err4:
1649 	release_mem_region(data->start, 2);
1650       err3:
1651 	iounmap(addr_reg);
1652       err2:
1653 	release_mem_region(addr->start, 2);
1654       err1:
1655 	ERR("init error, %d\n", ret);
1656 	return ret;
1657 }
1658 
1659 #ifdef	CONFIG_PM
1660 /*
1661   Suspend of platform device
1662 */
1663 static int isp116x_suspend(struct platform_device *dev, pm_message_t state)
1664 {
1665 	VDBG("%s: state %x\n", __func__, state.event);
1666 	dev->dev.power.power_state = state;
1667 	return 0;
1668 }
1669 
1670 /*
1671   Resume platform device
1672 */
1673 static int isp116x_resume(struct platform_device *dev)
1674 {
1675 	VDBG("%s:  state %x\n", __func__, dev->power.power_state.event);
1676 	dev->dev.power.power_state = PMSG_ON;
1677 	return 0;
1678 }
1679 
1680 #else
1681 
1682 #define	isp116x_suspend    NULL
1683 #define	isp116x_resume     NULL
1684 
1685 #endif
1686 
1687 static struct platform_driver isp116x_driver = {
1688 	.probe = isp116x_probe,
1689 	.remove = isp116x_remove,
1690 	.suspend = isp116x_suspend,
1691 	.resume = isp116x_resume,
1692 	.driver = {
1693 		   .name = (char *)hcd_name,
1694 		   },
1695 };
1696 
1697 /*-----------------------------------------------------------------*/
1698 
1699 static int __init isp116x_init(void)
1700 {
1701 	if (usb_disabled())
1702 		return -ENODEV;
1703 
1704 	INFO("driver %s, %s\n", hcd_name, DRIVER_VERSION);
1705 	return platform_driver_register(&isp116x_driver);
1706 }
1707 
1708 module_init(isp116x_init);
1709 
1710 static void __exit isp116x_cleanup(void)
1711 {
1712 	platform_driver_unregister(&isp116x_driver);
1713 }
1714 
1715 module_exit(isp116x_cleanup);
1716