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