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