USB: EHCI: fix up locking
[pandora-kernel.git] / drivers / usb / host / ehci-hcd.c
1 /*
2  * Enhanced Host Controller Interface (EHCI) driver for USB.
3  *
4  * Maintainer: Alan Stern <stern@rowland.harvard.edu>
5  *
6  * Copyright (c) 2000-2004 by David Brownell
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the
10  * Free Software Foundation; either version 2 of the License, or (at your
11  * option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16  * for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */
22
23 #include <linux/module.h>
24 #include <linux/pci.h>
25 #include <linux/dmapool.h>
26 #include <linux/kernel.h>
27 #include <linux/delay.h>
28 #include <linux/ioport.h>
29 #include <linux/sched.h>
30 #include <linux/vmalloc.h>
31 #include <linux/errno.h>
32 #include <linux/init.h>
33 #include <linux/hrtimer.h>
34 #include <linux/list.h>
35 #include <linux/interrupt.h>
36 #include <linux/usb.h>
37 #include <linux/usb/hcd.h>
38 #include <linux/moduleparam.h>
39 #include <linux/dma-mapping.h>
40 #include <linux/debugfs.h>
41 #include <linux/slab.h>
42 #include <linux/uaccess.h>
43
44 #include <asm/byteorder.h>
45 #include <asm/io.h>
46 #include <asm/irq.h>
47 #include <asm/unaligned.h>
48
49 #if defined(CONFIG_PPC_PS3)
50 #include <asm/firmware.h>
51 #endif
52
53 /*-------------------------------------------------------------------------*/
54
55 /*
56  * EHCI hc_driver implementation ... experimental, incomplete.
57  * Based on the final 1.0 register interface specification.
58  *
59  * USB 2.0 shows up in upcoming www.pcmcia.org technology.
60  * First was PCMCIA, like ISA; then CardBus, which is PCI.
61  * Next comes "CardBay", using USB 2.0 signals.
62  *
63  * Contains additional contributions by Brad Hards, Rory Bolt, and others.
64  * Special thanks to Intel and VIA for providing host controllers to
65  * test this driver on, and Cypress (including In-System Design) for
66  * providing early devices for those host controllers to talk to!
67  */
68
69 #define DRIVER_AUTHOR "David Brownell"
70 #define DRIVER_DESC "USB 2.0 'Enhanced' Host Controller (EHCI) Driver"
71
72 static const char       hcd_name [] = "ehci_hcd";
73
74
75 #undef VERBOSE_DEBUG
76 #undef EHCI_URB_TRACE
77
78 #ifdef DEBUG
79 #define EHCI_STATS
80 #endif
81
82 /* magic numbers that can affect system performance */
83 #define EHCI_TUNE_CERR          3       /* 0-3 qtd retries; 0 == don't stop */
84 #define EHCI_TUNE_RL_HS         4       /* nak throttle; see 4.9 */
85 #define EHCI_TUNE_RL_TT         0
86 #define EHCI_TUNE_MULT_HS       1       /* 1-3 transactions/uframe; 4.10.3 */
87 #define EHCI_TUNE_MULT_TT       1
88 /*
89  * Some drivers think it's safe to schedule isochronous transfers more than
90  * 256 ms into the future (partly as a result of an old bug in the scheduling
91  * code).  In an attempt to avoid trouble, we will use a minimum scheduling
92  * length of 512 frames instead of 256.
93  */
94 #define EHCI_TUNE_FLS           1       /* (medium) 512-frame schedule */
95
96 /* Initial IRQ latency:  faster than hw default */
97 static int log2_irq_thresh = 0;         // 0 to 6
98 module_param (log2_irq_thresh, int, S_IRUGO);
99 MODULE_PARM_DESC (log2_irq_thresh, "log2 IRQ latency, 1-64 microframes");
100
101 /* initial park setting:  slower than hw default */
102 static unsigned park = 0;
103 module_param (park, uint, S_IRUGO);
104 MODULE_PARM_DESC (park, "park setting; 1-3 back-to-back async packets");
105
106 /* for flakey hardware, ignore overcurrent indicators */
107 static bool ignore_oc = 0;
108 module_param (ignore_oc, bool, S_IRUGO);
109 MODULE_PARM_DESC (ignore_oc, "ignore bogus hardware overcurrent indications");
110
111 /* for link power management(LPM) feature */
112 static unsigned int hird;
113 module_param(hird, int, S_IRUGO);
114 MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us");
115
116 #define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT)
117
118 /*-------------------------------------------------------------------------*/
119
120 #include "ehci.h"
121 #include "ehci-dbg.c"
122 #include "pci-quirks.h"
123
124 /*-------------------------------------------------------------------------*/
125
126 /*
127  * handshake - spin reading hc until handshake completes or fails
128  * @ptr: address of hc register to be read
129  * @mask: bits to look at in result of read
130  * @done: value of those bits when handshake succeeds
131  * @usec: timeout in microseconds
132  *
133  * Returns negative errno, or zero on success
134  *
135  * Success happens when the "mask" bits have the specified value (hardware
136  * handshake done).  There are two failure modes:  "usec" have passed (major
137  * hardware flakeout), or the register reads as all-ones (hardware removed).
138  *
139  * That last failure should_only happen in cases like physical cardbus eject
140  * before driver shutdown. But it also seems to be caused by bugs in cardbus
141  * bridge shutdown:  shutting down the bridge before the devices using it.
142  */
143 static int handshake (struct ehci_hcd *ehci, void __iomem *ptr,
144                       u32 mask, u32 done, int usec)
145 {
146         u32     result;
147
148         do {
149                 result = ehci_readl(ehci, ptr);
150                 if (result == ~(u32)0)          /* card removed */
151                         return -ENODEV;
152                 result &= mask;
153                 if (result == done)
154                         return 0;
155                 udelay (1);
156                 usec--;
157         } while (usec > 0);
158         return -ETIMEDOUT;
159 }
160
161 /* check TDI/ARC silicon is in host mode */
162 static int tdi_in_host_mode (struct ehci_hcd *ehci)
163 {
164         u32             tmp;
165
166         tmp = ehci_readl(ehci, &ehci->regs->usbmode);
167         return (tmp & 3) == USBMODE_CM_HC;
168 }
169
170 /*
171  * Force HC to halt state from unknown (EHCI spec section 2.3).
172  * Must be called with interrupts enabled and the lock not held.
173  */
174 static int ehci_halt (struct ehci_hcd *ehci)
175 {
176         u32     temp;
177
178         spin_lock_irq(&ehci->lock);
179
180         /* disable any irqs left enabled by previous code */
181         ehci_writel(ehci, 0, &ehci->regs->intr_enable);
182
183         if (ehci_is_TDI(ehci) && !tdi_in_host_mode(ehci)) {
184                 spin_unlock_irq(&ehci->lock);
185                 return 0;
186         }
187
188         /*
189          * This routine gets called during probe before ehci->command
190          * has been initialized, so we can't rely on its value.
191          */
192         ehci->command &= ~CMD_RUN;
193         temp = ehci_readl(ehci, &ehci->regs->command);
194         temp &= ~(CMD_RUN | CMD_IAAD);
195         ehci_writel(ehci, temp, &ehci->regs->command);
196
197         spin_unlock_irq(&ehci->lock);
198         synchronize_irq(ehci_to_hcd(ehci)->irq);
199
200         return handshake(ehci, &ehci->regs->status,
201                           STS_HALT, STS_HALT, 16 * 125);
202 }
203
204 /* put TDI/ARC silicon into EHCI mode */
205 static void tdi_reset (struct ehci_hcd *ehci)
206 {
207         u32             tmp;
208
209         tmp = ehci_readl(ehci, &ehci->regs->usbmode);
210         tmp |= USBMODE_CM_HC;
211         /* The default byte access to MMR space is LE after
212          * controller reset. Set the required endian mode
213          * for transfer buffers to match the host microprocessor
214          */
215         if (ehci_big_endian_mmio(ehci))
216                 tmp |= USBMODE_BE;
217         ehci_writel(ehci, tmp, &ehci->regs->usbmode);
218 }
219
220 /*
221  * Reset a non-running (STS_HALT == 1) controller.
222  * Must be called with interrupts enabled and the lock not held.
223  */
224 static int ehci_reset (struct ehci_hcd *ehci)
225 {
226         int     retval;
227         u32     command = ehci_readl(ehci, &ehci->regs->command);
228
229         /* If the EHCI debug controller is active, special care must be
230          * taken before and after a host controller reset */
231         if (ehci->debug && !dbgp_reset_prep())
232                 ehci->debug = NULL;
233
234         command |= CMD_RESET;
235         dbg_cmd (ehci, "reset", command);
236         ehci_writel(ehci, command, &ehci->regs->command);
237         ehci->rh_state = EHCI_RH_HALTED;
238         ehci->next_statechange = jiffies;
239         retval = handshake (ehci, &ehci->regs->command,
240                             CMD_RESET, 0, 250 * 1000);
241
242         if (ehci->has_hostpc) {
243                 ehci_writel(ehci, USBMODE_EX_HC | USBMODE_EX_VBPS,
244                                 &ehci->regs->usbmode_ex);
245                 ehci_writel(ehci, TXFIFO_DEFAULT, &ehci->regs->txfill_tuning);
246         }
247         if (retval)
248                 return retval;
249
250         if (ehci_is_TDI(ehci))
251                 tdi_reset (ehci);
252
253         if (ehci->debug)
254                 dbgp_external_startup();
255
256         ehci->port_c_suspend = ehci->suspended_ports =
257                         ehci->resuming_ports = 0;
258         return retval;
259 }
260
261 /*
262  * Idle the controller (turn off the schedules).
263  * Must be called with interrupts enabled and the lock not held.
264  */
265 static void ehci_quiesce (struct ehci_hcd *ehci)
266 {
267         u32     temp;
268
269         if (ehci->rh_state != EHCI_RH_RUNNING)
270                 return;
271
272         /* wait for any schedule enables/disables to take effect */
273         temp = (ehci->command << 10) & (STS_ASS | STS_PSS);
274         handshake(ehci, &ehci->regs->status, STS_ASS | STS_PSS, temp, 16 * 125);
275
276         /* then disable anything that's still active */
277         spin_lock_irq(&ehci->lock);
278         ehci->command &= ~(CMD_ASE | CMD_PSE);
279         ehci_writel(ehci, ehci->command, &ehci->regs->command);
280         spin_unlock_irq(&ehci->lock);
281
282         /* hardware can take 16 microframes to turn off ... */
283         handshake(ehci, &ehci->regs->status, STS_ASS | STS_PSS, 0, 16 * 125);
284 }
285
286 /*-------------------------------------------------------------------------*/
287
288 static void end_unlink_async(struct ehci_hcd *ehci);
289 static void unlink_empty_async(struct ehci_hcd *ehci);
290 static void ehci_work(struct ehci_hcd *ehci);
291 static void start_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh);
292 static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh);
293
294 #include "ehci-timer.c"
295 #include "ehci-hub.c"
296 #include "ehci-lpm.c"
297 #include "ehci-mem.c"
298 #include "ehci-q.c"
299 #include "ehci-sched.c"
300 #include "ehci-sysfs.c"
301
302 /*-------------------------------------------------------------------------*/
303
304 /* On some systems, leaving remote wakeup enabled prevents system shutdown.
305  * The firmware seems to think that powering off is a wakeup event!
306  * This routine turns off remote wakeup and everything else, on all ports.
307  */
308 static void ehci_turn_off_all_ports(struct ehci_hcd *ehci)
309 {
310         int     port = HCS_N_PORTS(ehci->hcs_params);
311
312         while (port--)
313                 ehci_writel(ehci, PORT_RWC_BITS,
314                                 &ehci->regs->port_status[port]);
315 }
316
317 /*
318  * Halt HC, turn off all ports, and let the BIOS use the companion controllers.
319  * Must be called with interrupts enabled and the lock not held.
320  */
321 static void ehci_silence_controller(struct ehci_hcd *ehci)
322 {
323         ehci_halt(ehci);
324
325         spin_lock_irq(&ehci->lock);
326         ehci->rh_state = EHCI_RH_HALTED;
327         ehci_turn_off_all_ports(ehci);
328
329         /* make BIOS/etc use companion controller during reboot */
330         ehci_writel(ehci, 0, &ehci->regs->configured_flag);
331
332         /* unblock posted writes */
333         ehci_readl(ehci, &ehci->regs->configured_flag);
334         spin_unlock_irq(&ehci->lock);
335 }
336
337 /* ehci_shutdown kick in for silicon on any bus (not just pci, etc).
338  * This forcibly disables dma and IRQs, helping kexec and other cases
339  * where the next system software may expect clean state.
340  */
341 static void ehci_shutdown(struct usb_hcd *hcd)
342 {
343         struct ehci_hcd *ehci = hcd_to_ehci(hcd);
344
345         spin_lock_irq(&ehci->lock);
346         ehci->rh_state = EHCI_RH_STOPPING;
347         ehci->enabled_hrtimer_events = 0;
348         spin_unlock_irq(&ehci->lock);
349
350         ehci_silence_controller(ehci);
351
352         hrtimer_cancel(&ehci->hrtimer);
353 }
354
355 static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
356 {
357         unsigned port;
358
359         if (!HCS_PPC (ehci->hcs_params))
360                 return;
361
362         ehci_dbg (ehci, "...power%s ports...\n", is_on ? "up" : "down");
363         for (port = HCS_N_PORTS (ehci->hcs_params); port > 0; )
364                 (void) ehci_hub_control(ehci_to_hcd(ehci),
365                                 is_on ? SetPortFeature : ClearPortFeature,
366                                 USB_PORT_FEAT_POWER,
367                                 port--, NULL, 0);
368         /* Flush those writes */
369         ehci_readl(ehci, &ehci->regs->command);
370         msleep(20);
371 }
372
373 /*-------------------------------------------------------------------------*/
374
375 /*
376  * ehci_work is called from some interrupts, timers, and so on.
377  * it calls driver completion functions, after dropping ehci->lock.
378  */
379 static void ehci_work (struct ehci_hcd *ehci)
380 {
381         /* another CPU may drop ehci->lock during a schedule scan while
382          * it reports urb completions.  this flag guards against bogus
383          * attempts at re-entrant schedule scanning.
384          */
385         if (ehci->scanning) {
386                 ehci->need_rescan = true;
387                 return;
388         }
389         ehci->scanning = true;
390
391  rescan:
392         ehci->need_rescan = false;
393         if (ehci->async_count)
394                 scan_async(ehci);
395         if (ehci->intr_count > 0)
396                 scan_intr(ehci);
397         if (ehci->isoc_count > 0)
398                 scan_isoc(ehci);
399         if (ehci->need_rescan)
400                 goto rescan;
401         ehci->scanning = false;
402
403         /* the IO watchdog guards against hardware or driver bugs that
404          * misplace IRQs, and should let us run completely without IRQs.
405          * such lossage has been observed on both VT6202 and VT8235.
406          */
407         turn_on_io_watchdog(ehci);
408 }
409
410 /*
411  * Called when the ehci_hcd module is removed.
412  */
413 static void ehci_stop (struct usb_hcd *hcd)
414 {
415         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
416
417         ehci_dbg (ehci, "stop\n");
418
419         /* no more interrupts ... */
420
421         spin_lock_irq(&ehci->lock);
422         ehci->enabled_hrtimer_events = 0;
423         spin_unlock_irq(&ehci->lock);
424
425         ehci_quiesce(ehci);
426         ehci_silence_controller(ehci);
427         ehci_reset (ehci);
428
429         hrtimer_cancel(&ehci->hrtimer);
430         remove_sysfs_files(ehci);
431         remove_debug_files (ehci);
432
433         /* root hub is shut down separately (first, when possible) */
434         spin_lock_irq (&ehci->lock);
435         end_free_itds(ehci);
436         spin_unlock_irq (&ehci->lock);
437         ehci_mem_cleanup (ehci);
438
439         if (ehci->amd_pll_fix == 1)
440                 usb_amd_dev_put();
441
442 #ifdef  EHCI_STATS
443         ehci_dbg(ehci, "irq normal %ld err %ld iaa %ld (lost %ld)\n",
444                 ehci->stats.normal, ehci->stats.error, ehci->stats.iaa,
445                 ehci->stats.lost_iaa);
446         ehci_dbg (ehci, "complete %ld unlink %ld\n",
447                 ehci->stats.complete, ehci->stats.unlink);
448 #endif
449
450         dbg_status (ehci, "ehci_stop completed",
451                     ehci_readl(ehci, &ehci->regs->status));
452 }
453
454 /* one-time init, only for memory state */
455 static int ehci_init(struct usb_hcd *hcd)
456 {
457         struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
458         u32                     temp;
459         int                     retval;
460         u32                     hcc_params;
461         struct ehci_qh_hw       *hw;
462
463         spin_lock_init(&ehci->lock);
464
465         /*
466          * keep io watchdog by default, those good HCDs could turn off it later
467          */
468         ehci->need_io_watchdog = 1;
469
470         hrtimer_init(&ehci->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
471         ehci->hrtimer.function = ehci_hrtimer_func;
472         ehci->next_hrtimer_event = EHCI_HRTIMER_NO_EVENT;
473
474         hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
475
476         /*
477          * by default set standard 80% (== 100 usec/uframe) max periodic
478          * bandwidth as required by USB 2.0
479          */
480         ehci->uframe_periodic_max = 100;
481
482         /*
483          * hw default: 1K periodic list heads, one per frame.
484          * periodic_size can shrink by USBCMD update if hcc_params allows.
485          */
486         ehci->periodic_size = DEFAULT_I_TDPS;
487         INIT_LIST_HEAD(&ehci->intr_qh_list);
488         INIT_LIST_HEAD(&ehci->cached_itd_list);
489         INIT_LIST_HEAD(&ehci->cached_sitd_list);
490
491         if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
492                 /* periodic schedule size can be smaller than default */
493                 switch (EHCI_TUNE_FLS) {
494                 case 0: ehci->periodic_size = 1024; break;
495                 case 1: ehci->periodic_size = 512; break;
496                 case 2: ehci->periodic_size = 256; break;
497                 default:        BUG();
498                 }
499         }
500         if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0)
501                 return retval;
502
503         /* controllers may cache some of the periodic schedule ... */
504         if (HCC_ISOC_CACHE(hcc_params))         // full frame cache
505                 ehci->i_thresh = 2 + 8;
506         else                                    // N microframes cached
507                 ehci->i_thresh = 2 + HCC_ISOC_THRES(hcc_params);
508
509         /*
510          * dedicate a qh for the async ring head, since we couldn't unlink
511          * a 'real' qh without stopping the async schedule [4.8].  use it
512          * as the 'reclamation list head' too.
513          * its dummy is used in hw_alt_next of many tds, to prevent the qh
514          * from automatically advancing to the next td after short reads.
515          */
516         ehci->async->qh_next.qh = NULL;
517         hw = ehci->async->hw;
518         hw->hw_next = QH_NEXT(ehci, ehci->async->qh_dma);
519         hw->hw_info1 = cpu_to_hc32(ehci, QH_HEAD);
520 #if defined(CONFIG_PPC_PS3)
521         hw->hw_info1 |= cpu_to_hc32(ehci, QH_INACTIVATE);
522 #endif
523         hw->hw_token = cpu_to_hc32(ehci, QTD_STS_HALT);
524         hw->hw_qtd_next = EHCI_LIST_END(ehci);
525         ehci->async->qh_state = QH_STATE_LINKED;
526         hw->hw_alt_next = QTD_NEXT(ehci, ehci->async->dummy->qtd_dma);
527
528         /* clear interrupt enables, set irq latency */
529         if (log2_irq_thresh < 0 || log2_irq_thresh > 6)
530                 log2_irq_thresh = 0;
531         temp = 1 << (16 + log2_irq_thresh);
532         if (HCC_PER_PORT_CHANGE_EVENT(hcc_params)) {
533                 ehci->has_ppcd = 1;
534                 ehci_dbg(ehci, "enable per-port change event\n");
535                 temp |= CMD_PPCEE;
536         }
537         if (HCC_CANPARK(hcc_params)) {
538                 /* HW default park == 3, on hardware that supports it (like
539                  * NVidia and ALI silicon), maximizes throughput on the async
540                  * schedule by avoiding QH fetches between transfers.
541                  *
542                  * With fast usb storage devices and NForce2, "park" seems to
543                  * make problems:  throughput reduction (!), data errors...
544                  */
545                 if (park) {
546                         park = min(park, (unsigned) 3);
547                         temp |= CMD_PARK;
548                         temp |= park << 8;
549                 }
550                 ehci_dbg(ehci, "park %d\n", park);
551         }
552         if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
553                 /* periodic schedule size can be smaller than default */
554                 temp &= ~(3 << 2);
555                 temp |= (EHCI_TUNE_FLS << 2);
556         }
557         if (HCC_LPM(hcc_params)) {
558                 /* support link power management EHCI 1.1 addendum */
559                 ehci_dbg(ehci, "support lpm\n");
560                 ehci->has_lpm = 1;
561                 if (hird > 0xf) {
562                         ehci_dbg(ehci, "hird %d invalid, use default 0",
563                         hird);
564                         hird = 0;
565                 }
566                 temp |= hird << 24;
567         }
568         ehci->command = temp;
569
570         /* Accept arbitrarily long scatter-gather lists */
571         if (!(hcd->driver->flags & HCD_LOCAL_MEM))
572                 hcd->self.sg_tablesize = ~0;
573         return 0;
574 }
575
576 /* start HC running; it's halted, ehci_init() has been run (once) */
577 static int ehci_run (struct usb_hcd *hcd)
578 {
579         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
580         u32                     temp;
581         u32                     hcc_params;
582
583         hcd->uses_new_polling = 1;
584
585         /* EHCI spec section 4.1 */
586
587         ehci_writel(ehci, ehci->periodic_dma, &ehci->regs->frame_list);
588         ehci_writel(ehci, (u32)ehci->async->qh_dma, &ehci->regs->async_next);
589
590         /*
591          * hcc_params controls whether ehci->regs->segment must (!!!)
592          * be used; it constrains QH/ITD/SITD and QTD locations.
593          * pci_pool consistent memory always uses segment zero.
594          * streaming mappings for I/O buffers, like pci_map_single(),
595          * can return segments above 4GB, if the device allows.
596          *
597          * NOTE:  the dma mask is visible through dma_supported(), so
598          * drivers can pass this info along ... like NETIF_F_HIGHDMA,
599          * Scsi_Host.highmem_io, and so forth.  It's readonly to all
600          * host side drivers though.
601          */
602         hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
603         if (HCC_64BIT_ADDR(hcc_params)) {
604                 ehci_writel(ehci, 0, &ehci->regs->segment);
605 #if 0
606 // this is deeply broken on almost all architectures
607                 if (!dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64)))
608                         ehci_info(ehci, "enabled 64bit DMA\n");
609 #endif
610         }
611
612
613         // Philips, Intel, and maybe others need CMD_RUN before the
614         // root hub will detect new devices (why?); NEC doesn't
615         ehci->command &= ~(CMD_LRESET|CMD_IAAD|CMD_PSE|CMD_ASE|CMD_RESET);
616         ehci->command |= CMD_RUN;
617         ehci_writel(ehci, ehci->command, &ehci->regs->command);
618         dbg_cmd (ehci, "init", ehci->command);
619
620         /*
621          * Start, enabling full USB 2.0 functionality ... usb 1.1 devices
622          * are explicitly handed to companion controller(s), so no TT is
623          * involved with the root hub.  (Except where one is integrated,
624          * and there's no companion controller unless maybe for USB OTG.)
625          *
626          * Turning on the CF flag will transfer ownership of all ports
627          * from the companions to the EHCI controller.  If any of the
628          * companions are in the middle of a port reset at the time, it
629          * could cause trouble.  Write-locking ehci_cf_port_reset_rwsem
630          * guarantees that no resets are in progress.  After we set CF,
631          * a short delay lets the hardware catch up; new resets shouldn't
632          * be started before the port switching actions could complete.
633          */
634         down_write(&ehci_cf_port_reset_rwsem);
635         ehci->rh_state = EHCI_RH_RUNNING;
636         ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
637         ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
638         msleep(5);
639         up_write(&ehci_cf_port_reset_rwsem);
640         ehci->last_periodic_enable = ktime_get_real();
641
642         temp = HC_VERSION(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
643         ehci_info (ehci,
644                 "USB %x.%x started, EHCI %x.%02x%s\n",
645                 ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f),
646                 temp >> 8, temp & 0xff,
647                 ignore_oc ? ", overcurrent ignored" : "");
648
649         ehci_writel(ehci, INTR_MASK,
650                     &ehci->regs->intr_enable); /* Turn On Interrupts */
651
652         /* GRR this is run-once init(), being done every time the HC starts.
653          * So long as they're part of class devices, we can't do it init()
654          * since the class device isn't created that early.
655          */
656         create_debug_files(ehci);
657         create_sysfs_files(ehci);
658
659         return 0;
660 }
661
662 static int ehci_setup(struct usb_hcd *hcd)
663 {
664         struct ehci_hcd *ehci = hcd_to_ehci(hcd);
665         int retval;
666
667         ehci->regs = (void __iomem *)ehci->caps +
668             HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
669         dbg_hcs_params(ehci, "reset");
670         dbg_hcc_params(ehci, "reset");
671
672         /* cache this readonly data; minimize chip reads */
673         ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
674
675         ehci->sbrn = HCD_USB2;
676
677         /* data structure init */
678         retval = ehci_init(hcd);
679         if (retval)
680                 return retval;
681
682         retval = ehci_halt(ehci);
683         if (retval)
684                 return retval;
685
686         if (ehci_is_TDI(ehci))
687                 tdi_reset(ehci);
688
689         ehci_reset(ehci);
690
691         return 0;
692 }
693
694 /*-------------------------------------------------------------------------*/
695
696 static irqreturn_t ehci_irq (struct usb_hcd *hcd)
697 {
698         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
699         u32                     status, masked_status, pcd_status = 0, cmd;
700         int                     bh;
701
702         spin_lock (&ehci->lock);
703
704         status = ehci_readl(ehci, &ehci->regs->status);
705
706         /* e.g. cardbus physical eject */
707         if (status == ~(u32) 0) {
708                 ehci_dbg (ehci, "device removed\n");
709                 goto dead;
710         }
711
712         /*
713          * We don't use STS_FLR, but some controllers don't like it to
714          * remain on, so mask it out along with the other status bits.
715          */
716         masked_status = status & (INTR_MASK | STS_FLR);
717
718         /* Shared IRQ? */
719         if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) {
720                 spin_unlock(&ehci->lock);
721                 return IRQ_NONE;
722         }
723
724         /* clear (just) interrupts */
725         ehci_writel(ehci, masked_status, &ehci->regs->status);
726         cmd = ehci_readl(ehci, &ehci->regs->command);
727         bh = 0;
728
729 #ifdef  VERBOSE_DEBUG
730         /* unrequested/ignored: Frame List Rollover */
731         dbg_status (ehci, "irq", status);
732 #endif
733
734         /* INT, ERR, and IAA interrupt rates can be throttled */
735
736         /* normal [4.15.1.2] or error [4.15.1.1] completion */
737         if (likely ((status & (STS_INT|STS_ERR)) != 0)) {
738                 if (likely ((status & STS_ERR) == 0))
739                         COUNT (ehci->stats.normal);
740                 else
741                         COUNT (ehci->stats.error);
742                 bh = 1;
743         }
744
745         /* complete the unlinking of some qh [4.15.2.3] */
746         if (status & STS_IAA) {
747
748                 /* Turn off the IAA watchdog */
749                 ehci->enabled_hrtimer_events &= ~BIT(EHCI_HRTIMER_IAA_WATCHDOG);
750
751                 /*
752                  * Mild optimization: Allow another IAAD to reset the
753                  * hrtimer, if one occurs before the next expiration.
754                  * In theory we could always cancel the hrtimer, but
755                  * tests show that about half the time it will be reset
756                  * for some other event anyway.
757                  */
758                 if (ehci->next_hrtimer_event == EHCI_HRTIMER_IAA_WATCHDOG)
759                         ++ehci->next_hrtimer_event;
760
761                 /* guard against (alleged) silicon errata */
762                 if (cmd & CMD_IAAD)
763                         ehci_dbg(ehci, "IAA with IAAD still set?\n");
764                 if (ehci->async_iaa) {
765                         COUNT(ehci->stats.iaa);
766                         end_unlink_async(ehci);
767                 } else
768                         ehci_dbg(ehci, "IAA with nothing unlinked?\n");
769         }
770
771         /* remote wakeup [4.3.1] */
772         if (status & STS_PCD) {
773                 unsigned        i = HCS_N_PORTS (ehci->hcs_params);
774                 u32             ppcd = 0;
775
776                 /* kick root hub later */
777                 pcd_status = status;
778
779                 /* resume root hub? */
780                 if (ehci->rh_state == EHCI_RH_SUSPENDED)
781                         usb_hcd_resume_root_hub(hcd);
782
783                 /* get per-port change detect bits */
784                 if (ehci->has_ppcd)
785                         ppcd = status >> 16;
786
787                 while (i--) {
788                         int pstatus;
789
790                         /* leverage per-port change bits feature */
791                         if (ehci->has_ppcd && !(ppcd & (1 << i)))
792                                 continue;
793                         pstatus = ehci_readl(ehci,
794                                          &ehci->regs->port_status[i]);
795
796                         if (pstatus & PORT_OWNER)
797                                 continue;
798                         if (!(test_bit(i, &ehci->suspended_ports) &&
799                                         ((pstatus & PORT_RESUME) ||
800                                                 !(pstatus & PORT_SUSPEND)) &&
801                                         (pstatus & PORT_PE) &&
802                                         ehci->reset_done[i] == 0))
803                                 continue;
804
805                         /* start 20 msec resume signaling from this port,
806                          * and make khubd collect PORT_STAT_C_SUSPEND to
807                          * stop that signaling.  Use 5 ms extra for safety,
808                          * like usb_port_resume() does.
809                          */
810                         ehci->reset_done[i] = jiffies + msecs_to_jiffies(25);
811                         set_bit(i, &ehci->resuming_ports);
812                         ehci_dbg (ehci, "port %d remote wakeup\n", i + 1);
813                         mod_timer(&hcd->rh_timer, ehci->reset_done[i]);
814                 }
815         }
816
817         /* PCI errors [4.15.2.4] */
818         if (unlikely ((status & STS_FATAL) != 0)) {
819                 ehci_err(ehci, "fatal error\n");
820                 dbg_cmd(ehci, "fatal", cmd);
821                 dbg_status(ehci, "fatal", status);
822 dead:
823                 usb_hc_died(hcd);
824
825                 /* Don't let the controller do anything more */
826                 ehci->rh_state = EHCI_RH_STOPPING;
827                 ehci->command &= ~(CMD_RUN | CMD_ASE | CMD_PSE);
828                 ehci_writel(ehci, ehci->command, &ehci->regs->command);
829                 ehci_writel(ehci, 0, &ehci->regs->intr_enable);
830                 ehci_handle_controller_death(ehci);
831
832                 /* Handle completions when the controller stops */
833                 bh = 0;
834         }
835
836         if (bh)
837                 ehci_work (ehci);
838         spin_unlock (&ehci->lock);
839         if (pcd_status)
840                 usb_hcd_poll_rh_status(hcd);
841         return IRQ_HANDLED;
842 }
843
844 /*-------------------------------------------------------------------------*/
845
846 /*
847  * non-error returns are a promise to giveback() the urb later
848  * we drop ownership so next owner (or urb unlink) can get it
849  *
850  * urb + dev is in hcd.self.controller.urb_list
851  * we're queueing TDs onto software and hardware lists
852  *
853  * hcd-specific init for hcpriv hasn't been done yet
854  *
855  * NOTE:  control, bulk, and interrupt share the same code to append TDs
856  * to a (possibly active) QH, and the same QH scanning code.
857  */
858 static int ehci_urb_enqueue (
859         struct usb_hcd  *hcd,
860         struct urb      *urb,
861         gfp_t           mem_flags
862 ) {
863         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
864         struct list_head        qtd_list;
865
866         INIT_LIST_HEAD (&qtd_list);
867
868         switch (usb_pipetype (urb->pipe)) {
869         case PIPE_CONTROL:
870                 /* qh_completions() code doesn't handle all the fault cases
871                  * in multi-TD control transfers.  Even 1KB is rare anyway.
872                  */
873                 if (urb->transfer_buffer_length > (16 * 1024))
874                         return -EMSGSIZE;
875                 /* FALLTHROUGH */
876         /* case PIPE_BULK: */
877         default:
878                 if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))
879                         return -ENOMEM;
880                 return submit_async(ehci, urb, &qtd_list, mem_flags);
881
882         case PIPE_INTERRUPT:
883                 if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))
884                         return -ENOMEM;
885                 return intr_submit(ehci, urb, &qtd_list, mem_flags);
886
887         case PIPE_ISOCHRONOUS:
888                 if (urb->dev->speed == USB_SPEED_HIGH)
889                         return itd_submit (ehci, urb, mem_flags);
890                 else
891                         return sitd_submit (ehci, urb, mem_flags);
892         }
893 }
894
895 /* remove from hardware lists
896  * completions normally happen asynchronously
897  */
898
899 static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
900 {
901         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
902         struct ehci_qh          *qh;
903         unsigned long           flags;
904         int                     rc;
905
906         spin_lock_irqsave (&ehci->lock, flags);
907         rc = usb_hcd_check_unlink_urb(hcd, urb, status);
908         if (rc)
909                 goto done;
910
911         switch (usb_pipetype (urb->pipe)) {
912         // case PIPE_CONTROL:
913         // case PIPE_BULK:
914         default:
915                 qh = (struct ehci_qh *) urb->hcpriv;
916                 if (!qh)
917                         break;
918                 switch (qh->qh_state) {
919                 case QH_STATE_LINKED:
920                 case QH_STATE_COMPLETING:
921                         start_unlink_async(ehci, qh);
922                         break;
923                 case QH_STATE_UNLINK:
924                 case QH_STATE_UNLINK_WAIT:
925                         /* already started */
926                         break;
927                 case QH_STATE_IDLE:
928                         /* QH might be waiting for a Clear-TT-Buffer */
929                         qh_completions(ehci, qh);
930                         break;
931                 }
932                 break;
933
934         case PIPE_INTERRUPT:
935                 qh = (struct ehci_qh *) urb->hcpriv;
936                 if (!qh)
937                         break;
938                 switch (qh->qh_state) {
939                 case QH_STATE_LINKED:
940                 case QH_STATE_COMPLETING:
941                         start_unlink_intr(ehci, qh);
942                         break;
943                 case QH_STATE_IDLE:
944                         qh_completions (ehci, qh);
945                         break;
946                 default:
947                         ehci_dbg (ehci, "bogus qh %p state %d\n",
948                                         qh, qh->qh_state);
949                         goto done;
950                 }
951                 break;
952
953         case PIPE_ISOCHRONOUS:
954                 // itd or sitd ...
955
956                 // wait till next completion, do it then.
957                 // completion irqs can wait up to 1024 msec,
958                 break;
959         }
960 done:
961         spin_unlock_irqrestore (&ehci->lock, flags);
962         return rc;
963 }
964
965 /*-------------------------------------------------------------------------*/
966
967 // bulk qh holds the data toggle
968
969 static void
970 ehci_endpoint_disable (struct usb_hcd *hcd, struct usb_host_endpoint *ep)
971 {
972         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
973         unsigned long           flags;
974         struct ehci_qh          *qh, *tmp;
975
976         /* ASSERT:  any requests/urbs are being unlinked */
977         /* ASSERT:  nobody can be submitting urbs for this any more */
978
979 rescan:
980         spin_lock_irqsave (&ehci->lock, flags);
981         qh = ep->hcpriv;
982         if (!qh)
983                 goto done;
984
985         /* endpoints can be iso streams.  for now, we don't
986          * accelerate iso completions ... so spin a while.
987          */
988         if (qh->hw == NULL) {
989                 struct ehci_iso_stream  *stream = ep->hcpriv;
990
991                 if (!list_empty(&stream->td_list))
992                         goto idle_timeout;
993
994                 /* BUG_ON(!list_empty(&stream->free_list)); */
995                 kfree(stream);
996                 goto done;
997         }
998
999         if (ehci->rh_state < EHCI_RH_RUNNING)
1000                 qh->qh_state = QH_STATE_IDLE;
1001         switch (qh->qh_state) {
1002         case QH_STATE_LINKED:
1003         case QH_STATE_COMPLETING:
1004                 for (tmp = ehci->async->qh_next.qh;
1005                                 tmp && tmp != qh;
1006                                 tmp = tmp->qh_next.qh)
1007                         continue;
1008                 /* periodic qh self-unlinks on empty, and a COMPLETING qh
1009                  * may already be unlinked.
1010                  */
1011                 if (tmp)
1012                         start_unlink_async(ehci, qh);
1013                 /* FALL THROUGH */
1014         case QH_STATE_UNLINK:           /* wait for hw to finish? */
1015         case QH_STATE_UNLINK_WAIT:
1016 idle_timeout:
1017                 spin_unlock_irqrestore (&ehci->lock, flags);
1018                 schedule_timeout_uninterruptible(1);
1019                 goto rescan;
1020         case QH_STATE_IDLE:             /* fully unlinked */
1021                 if (qh->clearing_tt)
1022                         goto idle_timeout;
1023                 if (list_empty (&qh->qtd_list)) {
1024                         qh_destroy(ehci, qh);
1025                         break;
1026                 }
1027                 /* else FALL THROUGH */
1028         default:
1029                 /* caller was supposed to have unlinked any requests;
1030                  * that's not our job.  just leak this memory.
1031                  */
1032                 ehci_err (ehci, "qh %p (#%02x) state %d%s\n",
1033                         qh, ep->desc.bEndpointAddress, qh->qh_state,
1034                         list_empty (&qh->qtd_list) ? "" : "(has tds)");
1035                 break;
1036         }
1037  done:
1038         ep->hcpriv = NULL;
1039         spin_unlock_irqrestore (&ehci->lock, flags);
1040 }
1041
1042 static void
1043 ehci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep)
1044 {
1045         struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
1046         struct ehci_qh          *qh;
1047         int                     eptype = usb_endpoint_type(&ep->desc);
1048         int                     epnum = usb_endpoint_num(&ep->desc);
1049         int                     is_out = usb_endpoint_dir_out(&ep->desc);
1050         unsigned long           flags;
1051
1052         if (eptype != USB_ENDPOINT_XFER_BULK && eptype != USB_ENDPOINT_XFER_INT)
1053                 return;
1054
1055         spin_lock_irqsave(&ehci->lock, flags);
1056         qh = ep->hcpriv;
1057
1058         /* For Bulk and Interrupt endpoints we maintain the toggle state
1059          * in the hardware; the toggle bits in udev aren't used at all.
1060          * When an endpoint is reset by usb_clear_halt() we must reset
1061          * the toggle bit in the QH.
1062          */
1063         if (qh) {
1064                 usb_settoggle(qh->dev, epnum, is_out, 0);
1065                 if (!list_empty(&qh->qtd_list)) {
1066                         WARN_ONCE(1, "clear_halt for a busy endpoint\n");
1067                 } else if (qh->qh_state == QH_STATE_LINKED ||
1068                                 qh->qh_state == QH_STATE_COMPLETING) {
1069
1070                         /* The toggle value in the QH can't be updated
1071                          * while the QH is active.  Unlink it now;
1072                          * re-linking will call qh_refresh().
1073                          */
1074                         if (eptype == USB_ENDPOINT_XFER_BULK)
1075                                 start_unlink_async(ehci, qh);
1076                         else
1077                                 start_unlink_intr(ehci, qh);
1078                 }
1079         }
1080         spin_unlock_irqrestore(&ehci->lock, flags);
1081 }
1082
1083 static int ehci_get_frame (struct usb_hcd *hcd)
1084 {
1085         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
1086         return (ehci_read_frame_index(ehci) >> 3) % ehci->periodic_size;
1087 }
1088
1089 /*-------------------------------------------------------------------------*/
1090
1091 #ifdef  CONFIG_PM
1092
1093 /* suspend/resume, section 4.3 */
1094
1095 /* These routines handle the generic parts of controller suspend/resume */
1096
1097 static int __maybe_unused ehci_suspend(struct usb_hcd *hcd, bool do_wakeup)
1098 {
1099         struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
1100
1101         if (time_before(jiffies, ehci->next_statechange))
1102                 msleep(10);
1103
1104         /*
1105          * Root hub was already suspended.  Disable IRQ emission and
1106          * mark HW unaccessible.  The PM and USB cores make sure that
1107          * the root hub is either suspended or stopped.
1108          */
1109         ehci_prepare_ports_for_controller_suspend(ehci, do_wakeup);
1110
1111         spin_lock_irq(&ehci->lock);
1112         ehci_writel(ehci, 0, &ehci->regs->intr_enable);
1113         (void) ehci_readl(ehci, &ehci->regs->intr_enable);
1114
1115         clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
1116         spin_unlock_irq(&ehci->lock);
1117
1118         return 0;
1119 }
1120
1121 /* Returns 0 if power was preserved, 1 if power was lost */
1122 static int __maybe_unused ehci_resume(struct usb_hcd *hcd, bool hibernated)
1123 {
1124         struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
1125
1126         if (time_before(jiffies, ehci->next_statechange))
1127                 msleep(100);
1128
1129         /* Mark hardware accessible again as we are back to full power by now */
1130         set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
1131
1132         /*
1133          * If CF is still set and we aren't resuming from hibernation
1134          * then we maintained suspend power.
1135          * Just undo the effect of ehci_suspend().
1136          */
1137         if (ehci_readl(ehci, &ehci->regs->configured_flag) == FLAG_CF &&
1138                         !hibernated) {
1139                 int     mask = INTR_MASK;
1140
1141                 ehci_prepare_ports_for_controller_resume(ehci);
1142                 if (!hcd->self.root_hub->do_remote_wakeup)
1143                         mask &= ~STS_PCD;
1144                 ehci_writel(ehci, mask, &ehci->regs->intr_enable);
1145                 ehci_readl(ehci, &ehci->regs->intr_enable);
1146                 return 0;
1147         }
1148
1149         /*
1150          * Else reset, to cope with power loss or resume from hibernation
1151          * having let the firmware kick in during reboot.
1152          */
1153         usb_root_hub_lost_power(hcd->self.root_hub);
1154         (void) ehci_halt(ehci);
1155         (void) ehci_reset(ehci);
1156
1157         ehci_writel(ehci, ehci->command, &ehci->regs->command);
1158         ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
1159         ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
1160
1161         /* here we "know" root ports should always stay powered */
1162         ehci_port_power(ehci, 1);
1163
1164         ehci->rh_state = EHCI_RH_SUSPENDED;
1165         return 1;
1166 }
1167
1168 #endif
1169
1170 /*-------------------------------------------------------------------------*/
1171
1172 /*
1173  * The EHCI in ChipIdea HDRC cannot be a separate module or device,
1174  * because its registers (and irq) are shared between host/gadget/otg
1175  * functions  and in order to facilitate role switching we cannot
1176  * give the ehci driver exclusive access to those.
1177  */
1178 #ifndef CHIPIDEA_EHCI
1179
1180 MODULE_DESCRIPTION(DRIVER_DESC);
1181 MODULE_AUTHOR (DRIVER_AUTHOR);
1182 MODULE_LICENSE ("GPL");
1183
1184 #ifdef CONFIG_PCI
1185 #include "ehci-pci.c"
1186 #define PCI_DRIVER              ehci_pci_driver
1187 #endif
1188
1189 #ifdef CONFIG_USB_EHCI_FSL
1190 #include "ehci-fsl.c"
1191 #define PLATFORM_DRIVER         ehci_fsl_driver
1192 #endif
1193
1194 #ifdef CONFIG_USB_EHCI_MXC
1195 #include "ehci-mxc.c"
1196 #define PLATFORM_DRIVER         ehci_mxc_driver
1197 #endif
1198
1199 #ifdef CONFIG_USB_EHCI_SH
1200 #include "ehci-sh.c"
1201 #define PLATFORM_DRIVER         ehci_hcd_sh_driver
1202 #endif
1203
1204 #ifdef CONFIG_MIPS_ALCHEMY
1205 #include "ehci-au1xxx.c"
1206 #define PLATFORM_DRIVER         ehci_hcd_au1xxx_driver
1207 #endif
1208
1209 #ifdef CONFIG_USB_EHCI_HCD_OMAP
1210 #include "ehci-omap.c"
1211 #define        PLATFORM_DRIVER         ehci_hcd_omap_driver
1212 #endif
1213
1214 #ifdef CONFIG_PPC_PS3
1215 #include "ehci-ps3.c"
1216 #define PS3_SYSTEM_BUS_DRIVER   ps3_ehci_driver
1217 #endif
1218
1219 #ifdef CONFIG_USB_EHCI_HCD_PPC_OF
1220 #include "ehci-ppc-of.c"
1221 #define OF_PLATFORM_DRIVER      ehci_hcd_ppc_of_driver
1222 #endif
1223
1224 #ifdef CONFIG_XPS_USB_HCD_XILINX
1225 #include "ehci-xilinx-of.c"
1226 #define XILINX_OF_PLATFORM_DRIVER       ehci_hcd_xilinx_of_driver
1227 #endif
1228
1229 #ifdef CONFIG_PLAT_ORION
1230 #include "ehci-orion.c"
1231 #define PLATFORM_DRIVER         ehci_orion_driver
1232 #endif
1233
1234 #ifdef CONFIG_ARCH_IXP4XX
1235 #include "ehci-ixp4xx.c"
1236 #define PLATFORM_DRIVER         ixp4xx_ehci_driver
1237 #endif
1238
1239 #ifdef CONFIG_USB_W90X900_EHCI
1240 #include "ehci-w90x900.c"
1241 #define PLATFORM_DRIVER         ehci_hcd_w90x900_driver
1242 #endif
1243
1244 #ifdef CONFIG_ARCH_AT91
1245 #include "ehci-atmel.c"
1246 #define PLATFORM_DRIVER         ehci_atmel_driver
1247 #endif
1248
1249 #ifdef CONFIG_USB_OCTEON_EHCI
1250 #include "ehci-octeon.c"
1251 #define PLATFORM_DRIVER         ehci_octeon_driver
1252 #endif
1253
1254 #ifdef CONFIG_USB_CNS3XXX_EHCI
1255 #include "ehci-cns3xxx.c"
1256 #define PLATFORM_DRIVER         cns3xxx_ehci_driver
1257 #endif
1258
1259 #ifdef CONFIG_ARCH_VT8500
1260 #include "ehci-vt8500.c"
1261 #define PLATFORM_DRIVER         vt8500_ehci_driver
1262 #endif
1263
1264 #ifdef CONFIG_PLAT_SPEAR
1265 #include "ehci-spear.c"
1266 #define PLATFORM_DRIVER         spear_ehci_hcd_driver
1267 #endif
1268
1269 #ifdef CONFIG_USB_EHCI_MSM
1270 #include "ehci-msm.c"
1271 #define PLATFORM_DRIVER         ehci_msm_driver
1272 #endif
1273
1274 #ifdef CONFIG_USB_EHCI_HCD_PMC_MSP
1275 #include "ehci-pmcmsp.c"
1276 #define PLATFORM_DRIVER         ehci_hcd_msp_driver
1277 #endif
1278
1279 #ifdef CONFIG_USB_EHCI_TEGRA
1280 #include "ehci-tegra.c"
1281 #define PLATFORM_DRIVER         tegra_ehci_driver
1282 #endif
1283
1284 #ifdef CONFIG_USB_EHCI_S5P
1285 #include "ehci-s5p.c"
1286 #define PLATFORM_DRIVER         s5p_ehci_driver
1287 #endif
1288
1289 #ifdef CONFIG_SPARC_LEON
1290 #include "ehci-grlib.c"
1291 #define PLATFORM_DRIVER         ehci_grlib_driver
1292 #endif
1293
1294 #ifdef CONFIG_CPU_XLR
1295 #include "ehci-xls.c"
1296 #define PLATFORM_DRIVER         ehci_xls_driver
1297 #endif
1298
1299 #ifdef CONFIG_USB_EHCI_MV
1300 #include "ehci-mv.c"
1301 #define        PLATFORM_DRIVER         ehci_mv_driver
1302 #endif
1303
1304 #ifdef CONFIG_MACH_LOONGSON1
1305 #include "ehci-ls1x.c"
1306 #define PLATFORM_DRIVER         ehci_ls1x_driver
1307 #endif
1308
1309 #ifdef CONFIG_MIPS_SEAD3
1310 #include "ehci-sead3.c"
1311 #define PLATFORM_DRIVER         ehci_hcd_sead3_driver
1312 #endif
1313
1314 #ifdef CONFIG_USB_EHCI_HCD_PLATFORM
1315 #include "ehci-platform.c"
1316 #define PLATFORM_DRIVER         ehci_platform_driver
1317 #endif
1318
1319 #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
1320     !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER) && \
1321     !defined(XILINX_OF_PLATFORM_DRIVER)
1322 #error "missing bus glue for ehci-hcd"
1323 #endif
1324
1325 static int __init ehci_hcd_init(void)
1326 {
1327         int retval = 0;
1328
1329         if (usb_disabled())
1330                 return -ENODEV;
1331
1332         printk(KERN_INFO "%s: " DRIVER_DESC "\n", hcd_name);
1333         set_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
1334         if (test_bit(USB_UHCI_LOADED, &usb_hcds_loaded) ||
1335                         test_bit(USB_OHCI_LOADED, &usb_hcds_loaded))
1336                 printk(KERN_WARNING "Warning! ehci_hcd should always be loaded"
1337                                 " before uhci_hcd and ohci_hcd, not after\n");
1338
1339         pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
1340                  hcd_name,
1341                  sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
1342                  sizeof(struct ehci_itd), sizeof(struct ehci_sitd));
1343
1344 #ifdef DEBUG
1345         ehci_debug_root = debugfs_create_dir("ehci", usb_debug_root);
1346         if (!ehci_debug_root) {
1347                 retval = -ENOENT;
1348                 goto err_debug;
1349         }
1350 #endif
1351
1352 #ifdef PLATFORM_DRIVER
1353         retval = platform_driver_register(&PLATFORM_DRIVER);
1354         if (retval < 0)
1355                 goto clean0;
1356 #endif
1357
1358 #ifdef PCI_DRIVER
1359         retval = pci_register_driver(&PCI_DRIVER);
1360         if (retval < 0)
1361                 goto clean1;
1362 #endif
1363
1364 #ifdef PS3_SYSTEM_BUS_DRIVER
1365         retval = ps3_ehci_driver_register(&PS3_SYSTEM_BUS_DRIVER);
1366         if (retval < 0)
1367                 goto clean2;
1368 #endif
1369
1370 #ifdef OF_PLATFORM_DRIVER
1371         retval = platform_driver_register(&OF_PLATFORM_DRIVER);
1372         if (retval < 0)
1373                 goto clean3;
1374 #endif
1375
1376 #ifdef XILINX_OF_PLATFORM_DRIVER
1377         retval = platform_driver_register(&XILINX_OF_PLATFORM_DRIVER);
1378         if (retval < 0)
1379                 goto clean4;
1380 #endif
1381         return retval;
1382
1383 #ifdef XILINX_OF_PLATFORM_DRIVER
1384         /* platform_driver_unregister(&XILINX_OF_PLATFORM_DRIVER); */
1385 clean4:
1386 #endif
1387 #ifdef OF_PLATFORM_DRIVER
1388         platform_driver_unregister(&OF_PLATFORM_DRIVER);
1389 clean3:
1390 #endif
1391 #ifdef PS3_SYSTEM_BUS_DRIVER
1392         ps3_ehci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER);
1393 clean2:
1394 #endif
1395 #ifdef PCI_DRIVER
1396         pci_unregister_driver(&PCI_DRIVER);
1397 clean1:
1398 #endif
1399 #ifdef PLATFORM_DRIVER
1400         platform_driver_unregister(&PLATFORM_DRIVER);
1401 clean0:
1402 #endif
1403 #ifdef DEBUG
1404         debugfs_remove(ehci_debug_root);
1405         ehci_debug_root = NULL;
1406 err_debug:
1407 #endif
1408         clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
1409         return retval;
1410 }
1411 module_init(ehci_hcd_init);
1412
1413 static void __exit ehci_hcd_cleanup(void)
1414 {
1415 #ifdef XILINX_OF_PLATFORM_DRIVER
1416         platform_driver_unregister(&XILINX_OF_PLATFORM_DRIVER);
1417 #endif
1418 #ifdef OF_PLATFORM_DRIVER
1419         platform_driver_unregister(&OF_PLATFORM_DRIVER);
1420 #endif
1421 #ifdef PLATFORM_DRIVER
1422         platform_driver_unregister(&PLATFORM_DRIVER);
1423 #endif
1424 #ifdef PCI_DRIVER
1425         pci_unregister_driver(&PCI_DRIVER);
1426 #endif
1427 #ifdef PS3_SYSTEM_BUS_DRIVER
1428         ps3_ehci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER);
1429 #endif
1430 #ifdef DEBUG
1431         debugfs_remove(ehci_debug_root);
1432 #endif
1433         clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
1434 }
1435 module_exit(ehci_hcd_cleanup);
1436
1437 #endif /* CHIPIDEA_EHCI */