]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/usb/host/ehci-hub.c
ENGR00296519 USB: EHCI: wait more than 3ms until the device enters full-speed idle
[karo-tx-linux.git] / drivers / usb / host / ehci-hub.c
1 /*
2  * Copyright (C) 2001-2004 by David Brownell
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by the
6  * Free Software Foundation; either version 2 of the License, or (at your
7  * option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19 /* this file is part of ehci-hcd.c */
20
21 /*-------------------------------------------------------------------------*/
22
23 /*
24  * EHCI Root Hub ... the nonsharable stuff
25  *
26  * Registers don't need cpu_to_le32, that happens transparently
27  */
28
29 /*-------------------------------------------------------------------------*/
30 #include <linux/usb/otg.h>
31
32 #define PORT_WAKE_BITS  (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
33
34 #ifdef  CONFIG_PM
35
36 static int persist_enabled_on_companion(struct usb_device *udev, void *unused)
37 {
38         return !udev->maxchild && udev->persist_enabled &&
39                 udev->bus->root_hub->speed < USB_SPEED_HIGH;
40 }
41
42 /* After a power loss, ports that were owned by the companion must be
43  * reset so that the companion can still own them.
44  */
45 static void ehci_handover_companion_ports(struct ehci_hcd *ehci)
46 {
47         u32 __iomem     *reg;
48         u32             status;
49         int             port;
50         __le32          buf;
51         struct usb_hcd  *hcd = ehci_to_hcd(ehci);
52
53         if (!ehci->owned_ports)
54                 return;
55
56         /*
57          * USB 1.1 devices are mostly HIDs, which don't need to persist across
58          * suspends. If we ensure that none of our companion's devices have
59          * persist_enabled (by looking through all USB 1.1 buses in the system),
60          * we can skip this and avoid slowing resume down. Devices without
61          * persist will just get reenumerated shortly after resume anyway.
62          */
63         if (!usb_for_each_dev(NULL, persist_enabled_on_companion))
64                 return;
65
66         /* Make sure the ports are powered */
67         port = HCS_N_PORTS(ehci->hcs_params);
68         while (port--) {
69                 if (test_bit(port, &ehci->owned_ports)) {
70                         reg = &ehci->regs->port_status[port];
71                         status = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
72                         if (!(status & PORT_POWER)) {
73                                 status |= PORT_POWER;
74                                 ehci_writel(ehci, status, reg);
75                         }
76                 }
77         }
78
79         /* Give the connections some time to appear */
80         msleep(20);
81
82         spin_lock_irq(&ehci->lock);
83         port = HCS_N_PORTS(ehci->hcs_params);
84         while (port--) {
85                 if (test_bit(port, &ehci->owned_ports)) {
86                         reg = &ehci->regs->port_status[port];
87                         status = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
88
89                         /* Port already owned by companion? */
90                         if (status & PORT_OWNER)
91                                 clear_bit(port, &ehci->owned_ports);
92                         else if (test_bit(port, &ehci->companion_ports))
93                                 ehci_writel(ehci, status & ~PORT_PE, reg);
94                         else {
95                                 spin_unlock_irq(&ehci->lock);
96                                 ehci_hub_control(hcd, SetPortFeature,
97                                                 USB_PORT_FEAT_RESET, port + 1,
98                                                 NULL, 0);
99                                 spin_lock_irq(&ehci->lock);
100                         }
101                 }
102         }
103         spin_unlock_irq(&ehci->lock);
104
105         if (!ehci->owned_ports)
106                 return;
107         msleep(90);             /* Wait for resets to complete */
108
109         spin_lock_irq(&ehci->lock);
110         port = HCS_N_PORTS(ehci->hcs_params);
111         while (port--) {
112                 if (test_bit(port, &ehci->owned_ports)) {
113                         spin_unlock_irq(&ehci->lock);
114                         ehci_hub_control(hcd, GetPortStatus,
115                                         0, port + 1,
116                                         (char *) &buf, sizeof(buf));
117                         spin_lock_irq(&ehci->lock);
118
119                         /* The companion should now own the port,
120                          * but if something went wrong the port must not
121                          * remain enabled.
122                          */
123                         reg = &ehci->regs->port_status[port];
124                         status = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
125                         if (status & PORT_OWNER)
126                                 ehci_writel(ehci, status | PORT_CSC, reg);
127                         else {
128                                 ehci_dbg(ehci, "failed handover port %d: %x\n",
129                                                 port + 1, status);
130                                 ehci_writel(ehci, status & ~PORT_PE, reg);
131                         }
132                 }
133         }
134
135         ehci->owned_ports = 0;
136         spin_unlock_irq(&ehci->lock);
137 }
138
139 static int ehci_port_change(struct ehci_hcd *ehci)
140 {
141         int i = HCS_N_PORTS(ehci->hcs_params);
142
143         /* First check if the controller indicates a change event */
144
145         if (ehci_readl(ehci, &ehci->regs->status) & STS_PCD)
146                 return 1;
147
148         /*
149          * Not all controllers appear to update this while going from D3 to D0,
150          * so check the individual port status registers as well
151          */
152
153         while (i--)
154                 if (ehci_readl(ehci, &ehci->regs->port_status[i]) & PORT_CSC)
155                         return 1;
156
157         return 0;
158 }
159
160 static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
161                 bool suspending, bool do_wakeup)
162 {
163         int             port;
164         u32             temp;
165
166         /* If remote wakeup is enabled for the root hub but disabled
167          * for the controller, we must adjust all the port wakeup flags
168          * when the controller is suspended or resumed.  In all other
169          * cases they don't need to be changed.
170          */
171         if (!ehci_to_hcd(ehci)->self.root_hub->do_remote_wakeup || do_wakeup)
172                 return;
173
174         spin_lock_irq(&ehci->lock);
175
176         /* clear phy low-power mode before changing wakeup flags */
177         if (ehci->has_tdi_phy_lpm) {
178                 port = HCS_N_PORTS(ehci->hcs_params);
179                 while (port--) {
180                         u32 __iomem     *hostpc_reg = &ehci->regs->hostpc[port];
181
182                         temp = ehci_readl(ehci, hostpc_reg);
183                         ehci_writel(ehci, temp & ~HOSTPC_PHCD, hostpc_reg);
184                 }
185                 spin_unlock_irq(&ehci->lock);
186                 msleep(5);
187                 spin_lock_irq(&ehci->lock);
188         }
189
190         port = HCS_N_PORTS(ehci->hcs_params);
191         while (port--) {
192                 u32 __iomem     *reg = &ehci->regs->port_status[port];
193                 u32             t1 = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
194                 u32             t2 = t1 & ~PORT_WAKE_BITS;
195
196                 /* If we are suspending the controller, clear the flags.
197                  * If we are resuming the controller, set the wakeup flags.
198                  */
199                 if (!suspending) {
200                         if (t1 & PORT_CONNECT)
201                                 t2 |= PORT_WKOC_E | PORT_WKDISC_E;
202                         else
203                                 t2 |= PORT_WKOC_E | PORT_WKCONN_E;
204                 }
205                 ehci_writel(ehci, t2, reg);
206         }
207
208         /* enter phy low-power mode again */
209         if (ehci->has_tdi_phy_lpm) {
210                 port = HCS_N_PORTS(ehci->hcs_params);
211                 while (port--) {
212                         u32 __iomem     *hostpc_reg = &ehci->regs->hostpc[port];
213
214                         temp = ehci_readl(ehci, hostpc_reg);
215                         ehci_writel(ehci, temp | HOSTPC_PHCD, hostpc_reg);
216                 }
217         }
218
219         /* Does the root hub have a port wakeup pending? */
220         if (!suspending && ehci_port_change(ehci))
221                 usb_hcd_resume_root_hub(ehci_to_hcd(ehci));
222
223         spin_unlock_irq(&ehci->lock);
224 }
225
226 static int ehci_bus_suspend (struct usb_hcd *hcd)
227 {
228         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
229         int                     port;
230         int                     mask;
231         int                     changed;
232         bool                    fs_idle_delay;
233
234         ehci_dbg(ehci, "suspend root hub\n");
235
236         if (time_before (jiffies, ehci->next_statechange))
237                 msleep(5);
238
239         /* stop the schedules */
240         ehci_quiesce(ehci);
241
242         spin_lock_irq (&ehci->lock);
243         if (ehci->rh_state < EHCI_RH_RUNNING)
244                 goto done;
245
246         /* Once the controller is stopped, port resumes that are already
247          * in progress won't complete.  Hence if remote wakeup is enabled
248          * for the root hub and any ports are in the middle of a resume or
249          * remote wakeup, we must fail the suspend.
250          */
251         if (hcd->self.root_hub->do_remote_wakeup) {
252                 if (ehci->resuming_ports) {
253                         spin_unlock_irq(&ehci->lock);
254                         ehci_dbg(ehci, "suspend failed because a port is resuming\n");
255                         return -EBUSY;
256                 }
257         }
258
259         /* Unlike other USB host controller types, EHCI doesn't have
260          * any notion of "global" or bus-wide suspend.  The driver has
261          * to manually suspend all the active unsuspended ports, and
262          * then manually resume them in the bus_resume() routine.
263          */
264         ehci->bus_suspended = 0;
265         ehci->owned_ports = 0;
266         changed = 0;
267         fs_idle_delay = false;
268         port = HCS_N_PORTS(ehci->hcs_params);
269         while (port--) {
270                 u32 __iomem     *reg = &ehci->regs->port_status [port];
271                 u32             t1 = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
272                 u32             t2 = t1 & ~PORT_WAKE_BITS;
273
274                 /* keep track of which ports we suspend */
275                 if (t1 & PORT_OWNER)
276                         set_bit(port, &ehci->owned_ports);
277                 else if ((t1 & PORT_PE) && !(t1 & PORT_SUSPEND)) {
278                         t2 |= PORT_SUSPEND;
279                         set_bit(port, &ehci->bus_suspended);
280                 }
281
282                 /* enable remote wakeup on all ports, if told to do so */
283                 if (hcd->self.root_hub->do_remote_wakeup) {
284                         /* only enable appropriate wake bits, otherwise the
285                          * hardware can not go phy low power mode. If a race
286                          * condition happens here(connection change during bits
287                          * set), the port change detection will finally fix it.
288                          */
289                         if (t1 & PORT_CONNECT)
290                                 t2 |= PORT_WKOC_E | PORT_WKDISC_E;
291                         else
292                                 t2 |= PORT_WKOC_E | PORT_WKCONN_E;
293                 }
294
295                 if (t1 != t2) {
296                         /*
297                          * On some controllers, Wake-On-Disconnect will
298                          * generate false wakeup signals until the bus
299                          * switches over to full-speed idle.  For their
300                          * sake, add a delay if we need one.
301                          */
302                         if ((t2 & PORT_WKDISC_E) &&
303                                         ehci_port_speed(ehci, t2) ==
304                                                 USB_PORT_STAT_HIGH_SPEED)
305                                 fs_idle_delay = true;
306                         ehci_writel(ehci, t2, reg);
307                         if ((t2 & PORT_WKDISC_E)
308                                 && (ehci_port_speed(ehci, t2) ==
309                                         USB_PORT_STAT_HIGH_SPEED))
310                                 /*
311                                  * If the high-speed device has not switched
312                                  * to full-speed idle before WKDISC_E has
313                                  * effected, there will be a WKDISC event.
314                                  */
315                                 mdelay(4);
316                         changed = 1;
317                 }
318         }
319         spin_unlock_irq(&ehci->lock);
320
321         if ((changed && ehci->has_tdi_phy_lpm) || fs_idle_delay) {
322                 /*
323                  * Wait for HCD to enter low-power mode or for the bus
324                  * to switch to full-speed idle.
325                  */
326                 usleep_range(5000, 5500);
327         }
328
329         if (changed && ehci->has_tdi_phy_lpm) {
330                 spin_lock_irq(&ehci->lock);
331                 port = HCS_N_PORTS(ehci->hcs_params);
332                 while (port--) {
333                         u32 __iomem     *hostpc_reg = &ehci->regs->hostpc[port];
334                         u32             t3;
335
336                         t3 = ehci_readl(ehci, hostpc_reg);
337                         ehci_writel(ehci, t3 | HOSTPC_PHCD, hostpc_reg);
338                         t3 = ehci_readl(ehci, hostpc_reg);
339                         ehci_dbg(ehci, "Port %d phy low-power mode %s\n",
340                                         port, (t3 & HOSTPC_PHCD) ?
341                                         "succeeded" : "failed");
342                 }
343                 spin_unlock_irq(&ehci->lock);
344         }
345
346         /* Apparently some devices need a >= 1-uframe delay here */
347         if (ehci->bus_suspended)
348                 udelay(150);
349
350         /* turn off now-idle HC */
351         ehci_halt (ehci);
352
353         spin_lock_irq(&ehci->lock);
354         if (ehci->enabled_hrtimer_events & BIT(EHCI_HRTIMER_POLL_DEAD))
355                 ehci_handle_controller_death(ehci);
356         if (ehci->rh_state != EHCI_RH_RUNNING)
357                 goto done;
358         ehci->rh_state = EHCI_RH_SUSPENDED;
359
360         end_unlink_async(ehci);
361         unlink_empty_async_suspended(ehci);
362         ehci_handle_start_intr_unlinks(ehci);
363         ehci_handle_intr_unlinks(ehci);
364         end_free_itds(ehci);
365
366         /* allow remote wakeup */
367         mask = INTR_MASK;
368         if (!hcd->self.root_hub->do_remote_wakeup)
369                 mask &= ~STS_PCD;
370         ehci_writel(ehci, mask, &ehci->regs->intr_enable);
371         ehci_readl(ehci, &ehci->regs->intr_enable);
372
373  done:
374         ehci->next_statechange = jiffies + msecs_to_jiffies(10);
375         ehci->enabled_hrtimer_events = 0;
376         ehci->next_hrtimer_event = EHCI_HRTIMER_NO_EVENT;
377         spin_unlock_irq (&ehci->lock);
378
379         hrtimer_cancel(&ehci->hrtimer);
380         return 0;
381 }
382
383
384 /* caller has locked the root hub, and should reset/reinit on error */
385 static int ehci_bus_resume (struct usb_hcd *hcd)
386 {
387         struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
388         u32                     temp;
389         u32                     power_okay;
390         int                     i;
391         unsigned long           resume_needed = 0;
392
393         if (time_before (jiffies, ehci->next_statechange))
394                 msleep(5);
395         spin_lock_irq (&ehci->lock);
396         if (!HCD_HW_ACCESSIBLE(hcd) || ehci->shutdown)
397                 goto shutdown;
398
399         if (unlikely(ehci->debug)) {
400                 if (!dbgp_reset_prep(hcd))
401                         ehci->debug = NULL;
402                 else
403                         dbgp_external_startup(hcd);
404         }
405
406         /* Ideally and we've got a real resume here, and no port's power
407          * was lost.  (For PCI, that means Vaux was maintained.)  But we
408          * could instead be restoring a swsusp snapshot -- so that BIOS was
409          * the last user of the controller, not reset/pm hardware keeping
410          * state we gave to it.
411          */
412         power_okay = ehci_readl(ehci, &ehci->regs->intr_enable);
413         ehci_dbg(ehci, "resume root hub%s\n",
414                         power_okay ? "" : " after power loss");
415
416         /* at least some APM implementations will try to deliver
417          * IRQs right away, so delay them until we're ready.
418          */
419         ehci_writel(ehci, 0, &ehci->regs->intr_enable);
420
421         /* re-init operational registers */
422         ehci_writel(ehci, 0, &ehci->regs->segment);
423         ehci_writel(ehci, ehci->periodic_dma, &ehci->regs->frame_list);
424         ehci_writel(ehci, (u32) ehci->async->qh_dma, &ehci->regs->async_next);
425
426         /* restore CMD_RUN, framelist size, and irq threshold */
427         ehci->command |= CMD_RUN;
428         ehci_writel(ehci, ehci->command, &ehci->regs->command);
429         ehci->rh_state = EHCI_RH_RUNNING;
430
431         /*
432          * According to Bugzilla #8190, the port status for some controllers
433          * will be wrong without a delay. At their wrong status, the port
434          * is enabled, but not suspended neither resumed.
435          */
436         i = HCS_N_PORTS(ehci->hcs_params);
437         while (i--) {
438                 temp = ehci_readl(ehci, &ehci->regs->port_status[i]);
439                 if ((temp & PORT_PE) &&
440                                 !(temp & (PORT_SUSPEND | PORT_RESUME))) {
441                         ehci_dbg(ehci, "Port status(0x%x) is wrong\n", temp);
442                         spin_unlock_irq(&ehci->lock);
443                         msleep(8);
444                         spin_lock_irq(&ehci->lock);
445                         break;
446                 }
447         }
448
449         if (ehci->shutdown)
450                 goto shutdown;
451
452         /* clear phy low-power mode before resume */
453         if (ehci->bus_suspended && ehci->has_tdi_phy_lpm) {
454                 i = HCS_N_PORTS(ehci->hcs_params);
455                 while (i--) {
456                         if (test_bit(i, &ehci->bus_suspended)) {
457                                 u32 __iomem     *hostpc_reg =
458                                                         &ehci->regs->hostpc[i];
459
460                                 temp = ehci_readl(ehci, hostpc_reg);
461                                 ehci_writel(ehci, temp & ~HOSTPC_PHCD,
462                                                 hostpc_reg);
463                         }
464                 }
465                 spin_unlock_irq(&ehci->lock);
466                 msleep(5);
467                 spin_lock_irq(&ehci->lock);
468                 if (ehci->shutdown)
469                         goto shutdown;
470         }
471
472         /* manually resume the ports we suspended during bus_suspend() */
473         i = HCS_N_PORTS (ehci->hcs_params);
474         while (i--) {
475                 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
476                 temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS);
477                 if (test_bit(i, &ehci->bus_suspended) &&
478                                 (temp & PORT_SUSPEND)) {
479                         temp |= PORT_RESUME;
480                         set_bit(i, &resume_needed);
481                 }
482                 ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
483         }
484
485         /* msleep for 20ms only if code is trying to resume port */
486         if (resume_needed) {
487                 spin_unlock_irq(&ehci->lock);
488                 msleep(20);
489                 spin_lock_irq(&ehci->lock);
490                 if (ehci->shutdown)
491                         goto shutdown;
492         }
493
494         i = HCS_N_PORTS (ehci->hcs_params);
495         while (i--) {
496                 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
497                 if (test_bit(i, &resume_needed)) {
498                         temp &= ~(PORT_RWC_BITS | PORT_SUSPEND | PORT_RESUME);
499                         ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
500                 }
501         }
502
503         ehci->next_statechange = jiffies + msecs_to_jiffies(5);
504         spin_unlock_irq(&ehci->lock);
505
506         ehci_handover_companion_ports(ehci);
507
508         /* Now we can safely re-enable irqs */
509         spin_lock_irq(&ehci->lock);
510         if (ehci->shutdown)
511                 goto shutdown;
512         ehci_writel(ehci, INTR_MASK, &ehci->regs->intr_enable);
513         (void) ehci_readl(ehci, &ehci->regs->intr_enable);
514         spin_unlock_irq(&ehci->lock);
515
516         return 0;
517
518  shutdown:
519         spin_unlock_irq(&ehci->lock);
520         return -ESHUTDOWN;
521 }
522
523 #else
524
525 #define ehci_bus_suspend        NULL
526 #define ehci_bus_resume         NULL
527
528 #endif  /* CONFIG_PM */
529
530 /*-------------------------------------------------------------------------*/
531
532 /*
533  * Sets the owner of a port
534  */
535 static void set_owner(struct ehci_hcd *ehci, int portnum, int new_owner)
536 {
537         u32 __iomem             *status_reg;
538         u32                     port_status;
539         int                     try;
540
541         status_reg = &ehci->regs->port_status[portnum];
542
543         /*
544          * The controller won't set the OWNER bit if the port is
545          * enabled, so this loop will sometimes require at least two
546          * iterations: one to disable the port and one to set OWNER.
547          */
548         for (try = 4; try > 0; --try) {
549                 spin_lock_irq(&ehci->lock);
550                 port_status = ehci_readl(ehci, status_reg);
551                 if ((port_status & PORT_OWNER) == new_owner
552                                 || (port_status & (PORT_OWNER | PORT_CONNECT))
553                                         == 0)
554                         try = 0;
555                 else {
556                         port_status ^= PORT_OWNER;
557                         port_status &= ~(PORT_PE | PORT_RWC_BITS);
558                         ehci_writel(ehci, port_status, status_reg);
559                 }
560                 spin_unlock_irq(&ehci->lock);
561                 if (try > 1)
562                         msleep(5);
563         }
564 }
565
566 /*-------------------------------------------------------------------------*/
567
568 static int check_reset_complete (
569         struct ehci_hcd *ehci,
570         int             index,
571         u32 __iomem     *status_reg,
572         int             port_status
573 ) {
574         if (!(port_status & PORT_CONNECT))
575                 return port_status;
576
577         /* if reset finished and it's still not enabled -- handoff */
578         if (!(port_status & PORT_PE)) {
579
580                 /* with integrated TT, there's nobody to hand it to! */
581                 if (ehci_is_TDI(ehci)) {
582                         ehci_dbg (ehci,
583                                 "Failed to enable port %d on root hub TT\n",
584                                 index+1);
585                         return port_status;
586                 }
587
588                 ehci_dbg (ehci, "port %d full speed --> companion\n",
589                         index + 1);
590
591                 // what happens if HCS_N_CC(params) == 0 ?
592                 port_status |= PORT_OWNER;
593                 port_status &= ~PORT_RWC_BITS;
594                 ehci_writel(ehci, port_status, status_reg);
595
596                 /* ensure 440EPX ohci controller state is operational */
597                 if (ehci->has_amcc_usb23)
598                         set_ohci_hcfs(ehci, 1);
599         } else {
600                 ehci_dbg(ehci, "port %d reset complete, port enabled\n",
601                         index + 1);
602                 /* ensure 440EPx ohci controller state is suspended */
603                 if (ehci->has_amcc_usb23)
604                         set_ohci_hcfs(ehci, 0);
605         }
606
607         return port_status;
608 }
609
610 /*-------------------------------------------------------------------------*/
611
612
613 /* build "status change" packet (one or two bytes) from HC registers */
614
615 static int
616 ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
617 {
618         struct ehci_hcd *ehci = hcd_to_ehci (hcd);
619         u32             temp, status;
620         u32             mask;
621         int             ports, i, retval = 1;
622         unsigned long   flags;
623         u32             ppcd = ~0;
624
625         /* init status to no-changes */
626         buf [0] = 0;
627         ports = HCS_N_PORTS (ehci->hcs_params);
628         if (ports > 7) {
629                 buf [1] = 0;
630                 retval++;
631         }
632
633         /* Inform the core about resumes-in-progress by returning
634          * a non-zero value even if there are no status changes.
635          */
636         status = ehci->resuming_ports;
637
638         /* Some boards (mostly VIA?) report bogus overcurrent indications,
639          * causing massive log spam unless we completely ignore them.  It
640          * may be relevant that VIA VT8235 controllers, where PORT_POWER is
641          * always set, seem to clear PORT_OCC and PORT_CSC when writing to
642          * PORT_POWER; that's surprising, but maybe within-spec.
643          */
644         if (!ignore_oc)
645                 mask = PORT_CSC | PORT_PEC | PORT_OCC;
646         else
647                 mask = PORT_CSC | PORT_PEC;
648         // PORT_RESUME from hardware ~= PORT_STAT_C_SUSPEND
649
650         /* no hub change reports (bit 0) for now (power, ...) */
651
652         /* port N changes (bit N)? */
653         spin_lock_irqsave (&ehci->lock, flags);
654
655         /* get per-port change detect bits */
656         if (ehci->has_ppcd)
657                 ppcd = ehci_readl(ehci, &ehci->regs->status) >> 16;
658
659         for (i = 0; i < ports; i++) {
660                 /* leverage per-port change bits feature */
661                 if (ppcd & (1 << i))
662                         temp = ehci_readl(ehci, &ehci->regs->port_status[i]);
663                 else
664                         temp = 0;
665
666                 /*
667                  * Return status information even for ports with OWNER set.
668                  * Otherwise khubd wouldn't see the disconnect event when a
669                  * high-speed device is switched over to the companion
670                  * controller by the user.
671                  */
672
673                 if ((temp & mask) != 0 || test_bit(i, &ehci->port_c_suspend)
674                                 || (ehci->reset_done[i] && time_after_eq(
675                                         jiffies, ehci->reset_done[i]))) {
676                         if (i < 7)
677                             buf [0] |= 1 << (i + 1);
678                         else
679                             buf [1] |= 1 << (i - 7);
680                         status = STS_PCD;
681                 }
682         }
683
684         /* If a resume is in progress, make sure it can finish */
685         if (ehci->resuming_ports)
686                 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(25));
687
688         spin_unlock_irqrestore (&ehci->lock, flags);
689         return status ? retval : 0;
690 }
691
692 /*-------------------------------------------------------------------------*/
693
694 static void
695 ehci_hub_descriptor (
696         struct ehci_hcd                 *ehci,
697         struct usb_hub_descriptor       *desc
698 ) {
699         int             ports = HCS_N_PORTS (ehci->hcs_params);
700         u16             temp;
701
702         desc->bDescriptorType = 0x29;
703         desc->bPwrOn2PwrGood = 10;      /* ehci 1.0, 2.3.9 says 20ms max */
704         desc->bHubContrCurrent = 0;
705
706         desc->bNbrPorts = ports;
707         temp = 1 + (ports / 8);
708         desc->bDescLength = 7 + 2 * temp;
709
710         /* two bitmaps:  ports removable, and usb 1.0 legacy PortPwrCtrlMask */
711         memset(&desc->u.hs.DeviceRemovable[0], 0, temp);
712         memset(&desc->u.hs.DeviceRemovable[temp], 0xff, temp);
713
714         temp = 0x0008;                  /* per-port overcurrent reporting */
715         if (HCS_PPC (ehci->hcs_params))
716                 temp |= 0x0001;         /* per-port power control */
717         else
718                 temp |= 0x0002;         /* no power switching */
719 #if 0
720 // re-enable when we support USB_PORT_FEAT_INDICATOR below.
721         if (HCS_INDICATOR (ehci->hcs_params))
722                 temp |= 0x0080;         /* per-port indicators (LEDs) */
723 #endif
724         desc->wHubCharacteristics = cpu_to_le16(temp);
725 }
726
727 /*-------------------------------------------------------------------------*/
728 #ifdef CONFIG_USB_HCD_TEST_MODE
729
730 #define EHSET_TEST_SINGLE_STEP_SET_FEATURE 0x06
731
732 static void usb_ehset_completion(struct urb *urb)
733 {
734         struct completion  *done = urb->context;
735
736         complete(done);
737 }
738 static int submit_single_step_set_feature(
739         struct usb_hcd  *hcd,
740         struct urb      *urb,
741         int             is_setup
742 );
743
744 /*
745  * Allocate and initialize a control URB. This request will be used by the
746  * EHSET SINGLE_STEP_SET_FEATURE test in which the DATA and STATUS stages
747  * of the GetDescriptor request are sent 15 seconds after the SETUP stage.
748  * Return NULL if failed.
749  */
750 static struct urb *request_single_step_set_feature_urb(
751         struct usb_device       *udev,
752         void                    *dr,
753         void                    *buf,
754         struct completion       *done
755 ) {
756         struct urb *urb;
757         struct usb_hcd *hcd = bus_to_hcd(udev->bus);
758         struct usb_host_endpoint *ep;
759
760         urb = usb_alloc_urb(0, GFP_KERNEL);
761         if (!urb)
762                 return NULL;
763
764         urb->pipe = usb_rcvctrlpipe(udev, 0);
765         ep = (usb_pipein(urb->pipe) ? udev->ep_in : udev->ep_out)
766                                 [usb_pipeendpoint(urb->pipe)];
767         if (!ep) {
768                 usb_free_urb(urb);
769                 return NULL;
770         }
771
772         urb->ep = ep;
773         urb->dev = udev;
774         urb->setup_packet = (void *)dr;
775         urb->transfer_buffer = buf;
776         urb->transfer_buffer_length = USB_DT_DEVICE_SIZE;
777         urb->complete = usb_ehset_completion;
778         urb->status = -EINPROGRESS;
779         urb->actual_length = 0;
780         urb->transfer_flags = URB_DIR_IN;
781         usb_get_urb(urb);
782         atomic_inc(&urb->use_count);
783         atomic_inc(&urb->dev->urbnum);
784         urb->setup_dma = dma_map_single(
785                         hcd->self.controller,
786                         urb->setup_packet,
787                         sizeof(struct usb_ctrlrequest),
788                         DMA_TO_DEVICE);
789         urb->transfer_dma = dma_map_single(
790                         hcd->self.controller,
791                         urb->transfer_buffer,
792                         urb->transfer_buffer_length,
793                         DMA_FROM_DEVICE);
794         urb->context = done;
795         return urb;
796 }
797
798 static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
799 {
800         int retval = -ENOMEM;
801         struct usb_ctrlrequest *dr;
802         struct urb *urb;
803         struct usb_device *udev;
804         struct ehci_hcd *ehci = hcd_to_ehci(hcd);
805         struct usb_device_descriptor *buf;
806         DECLARE_COMPLETION_ONSTACK(done);
807
808         /* Obtain udev of the rhub's child port */
809         udev = usb_hub_find_child(hcd->self.root_hub, port);
810         if (!udev) {
811                 ehci_err(ehci, "No device attached to the RootHub\n");
812                 return -ENODEV;
813         }
814         buf = kmalloc(USB_DT_DEVICE_SIZE, GFP_KERNEL);
815         if (!buf)
816                 return -ENOMEM;
817
818         dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
819         if (!dr) {
820                 kfree(buf);
821                 return -ENOMEM;
822         }
823
824         /* Fill Setup packet for GetDescriptor */
825         dr->bRequestType = USB_DIR_IN;
826         dr->bRequest = USB_REQ_GET_DESCRIPTOR;
827         dr->wValue = cpu_to_le16(USB_DT_DEVICE << 8);
828         dr->wIndex = 0;
829         dr->wLength = cpu_to_le16(USB_DT_DEVICE_SIZE);
830         urb = request_single_step_set_feature_urb(udev, dr, buf, &done);
831         if (!urb)
832                 goto cleanup;
833
834         /* Submit just the SETUP stage */
835         retval = submit_single_step_set_feature(hcd, urb, 1);
836         if (retval)
837                 goto out1;
838         if (!wait_for_completion_timeout(&done, msecs_to_jiffies(2000))) {
839                 usb_kill_urb(urb);
840                 retval = -ETIMEDOUT;
841                 ehci_err(ehci, "%s SETUP stage timed out on ep0\n", __func__);
842                 goto out1;
843         }
844         msleep(15 * 1000);
845
846         /* Complete remaining DATA and STATUS stages using the same URB */
847         urb->status = -EINPROGRESS;
848         usb_get_urb(urb);
849         atomic_inc(&urb->use_count);
850         atomic_inc(&urb->dev->urbnum);
851         retval = submit_single_step_set_feature(hcd, urb, 0);
852         if (!retval && !wait_for_completion_timeout(&done,
853                                                 msecs_to_jiffies(2000))) {
854                 usb_kill_urb(urb);
855                 retval = -ETIMEDOUT;
856                 ehci_err(ehci, "%s IN stage timed out on ep0\n", __func__);
857         }
858 out1:
859         usb_free_urb(urb);
860 cleanup:
861         kfree(dr);
862         kfree(buf);
863         return retval;
864 }
865 #endif /* CONFIG_USB_HCD_TEST_MODE */
866 /*-------------------------------------------------------------------------*/
867
868 int ehci_hub_control(
869         struct usb_hcd  *hcd,
870         u16             typeReq,
871         u16             wValue,
872         u16             wIndex,
873         char            *buf,
874         u16             wLength
875 ) {
876         struct ehci_hcd *ehci = hcd_to_ehci (hcd);
877         int             ports = HCS_N_PORTS (ehci->hcs_params);
878         u32 __iomem     *status_reg = &ehci->regs->port_status[
879                                 (wIndex & 0xff) - 1];
880         u32 __iomem     *hostpc_reg = &ehci->regs->hostpc[(wIndex & 0xff) - 1];
881         u32             temp, temp1, status;
882         unsigned long   flags;
883         int             retval = 0;
884         unsigned        selector;
885
886         /*
887          * FIXME:  support SetPortFeatures USB_PORT_FEAT_INDICATOR.
888          * HCS_INDICATOR may say we can change LEDs to off/amber/green.
889          * (track current state ourselves) ... blink for diagnostics,
890          * power, "this is the one", etc.  EHCI spec supports this.
891          */
892
893         spin_lock_irqsave (&ehci->lock, flags);
894         switch (typeReq) {
895         case ClearHubFeature:
896                 switch (wValue) {
897                 case C_HUB_LOCAL_POWER:
898                 case C_HUB_OVER_CURRENT:
899                         /* no hub-wide feature/status flags */
900                         break;
901                 default:
902                         goto error;
903                 }
904                 break;
905         case ClearPortFeature:
906                 if (!wIndex || wIndex > ports)
907                         goto error;
908                 wIndex--;
909                 temp = ehci_readl(ehci, status_reg);
910                 temp &= ~PORT_RWC_BITS;
911
912                 /*
913                  * Even if OWNER is set, so the port is owned by the
914                  * companion controller, khubd needs to be able to clear
915                  * the port-change status bits (especially
916                  * USB_PORT_STAT_C_CONNECTION).
917                  */
918
919                 switch (wValue) {
920                 case USB_PORT_FEAT_ENABLE:
921                         ehci_writel(ehci, temp & ~PORT_PE, status_reg);
922                         break;
923                 case USB_PORT_FEAT_C_ENABLE:
924                         ehci_writel(ehci, temp | PORT_PEC, status_reg);
925                         break;
926                 case USB_PORT_FEAT_SUSPEND:
927                         if (temp & PORT_RESET)
928                                 goto error;
929                         if (ehci->no_selective_suspend)
930                                 break;
931 #ifdef CONFIG_USB_OTG
932                         if ((hcd->self.otg_port == (wIndex + 1))
933                             && hcd->self.b_hnp_enable) {
934                                 otg_start_hnp(hcd->phy->otg);
935                                 break;
936                         }
937 #endif
938                         if (!(temp & PORT_SUSPEND))
939                                 break;
940                         if ((temp & PORT_PE) == 0)
941                                 goto error;
942
943                         /* clear phy low-power mode before resume */
944                         if (ehci->has_tdi_phy_lpm) {
945                                 temp1 = ehci_readl(ehci, hostpc_reg);
946                                 ehci_writel(ehci, temp1 & ~HOSTPC_PHCD,
947                                                 hostpc_reg);
948                                 spin_unlock_irqrestore(&ehci->lock, flags);
949                                 msleep(5);/* wait to leave low-power mode */
950                                 spin_lock_irqsave(&ehci->lock, flags);
951                         }
952                         /* resume signaling for 20 msec */
953                         temp &= ~PORT_WAKE_BITS;
954                         ehci_writel(ehci, temp | PORT_RESUME, status_reg);
955                         ehci->reset_done[wIndex] = jiffies
956                                         + msecs_to_jiffies(20);
957                         set_bit(wIndex, &ehci->resuming_ports);
958                         usb_hcd_start_port_resume(&hcd->self, wIndex);
959                         break;
960                 case USB_PORT_FEAT_C_SUSPEND:
961                         clear_bit(wIndex, &ehci->port_c_suspend);
962                         break;
963                 case USB_PORT_FEAT_POWER:
964                         if (HCS_PPC (ehci->hcs_params))
965                                 ehci_writel(ehci, temp & ~PORT_POWER,
966                                                 status_reg);
967                         break;
968                 case USB_PORT_FEAT_C_CONNECTION:
969                         ehci_writel(ehci, temp | PORT_CSC, status_reg);
970                         break;
971                 case USB_PORT_FEAT_C_OVER_CURRENT:
972                         ehci_writel(ehci, temp | PORT_OCC, status_reg);
973                         break;
974                 case USB_PORT_FEAT_C_RESET:
975                         /* GetPortStatus clears reset */
976                         break;
977                 default:
978                         goto error;
979                 }
980                 ehci_readl(ehci, &ehci->regs->command); /* unblock posted write */
981                 break;
982         case GetHubDescriptor:
983                 ehci_hub_descriptor (ehci, (struct usb_hub_descriptor *)
984                         buf);
985                 break;
986         case GetHubStatus:
987                 /* no hub-wide feature/status flags */
988                 memset (buf, 0, 4);
989                 //cpu_to_le32s ((u32 *) buf);
990                 break;
991         case GetPortStatus:
992                 if (!wIndex || wIndex > ports)
993                         goto error;
994                 wIndex--;
995                 status = 0;
996                 temp = ehci_readl(ehci, status_reg);
997
998                 // wPortChange bits
999                 if (temp & PORT_CSC)
1000                         status |= USB_PORT_STAT_C_CONNECTION << 16;
1001                 if (temp & PORT_PEC)
1002                         status |= USB_PORT_STAT_C_ENABLE << 16;
1003
1004                 if ((temp & PORT_OCC) && !ignore_oc){
1005                         status |= USB_PORT_STAT_C_OVERCURRENT << 16;
1006
1007                         /*
1008                          * Hubs should disable port power on over-current.
1009                          * However, not all EHCI implementations do this
1010                          * automatically, even if they _do_ support per-port
1011                          * power switching; they're allowed to just limit the
1012                          * current.  khubd will turn the power back on.
1013                          */
1014                         if (((temp & PORT_OC) || (ehci->need_oc_pp_cycle))
1015                                         && HCS_PPC(ehci->hcs_params)) {
1016                                 ehci_writel(ehci,
1017                                         temp & ~(PORT_RWC_BITS | PORT_POWER),
1018                                         status_reg);
1019                                 temp = ehci_readl(ehci, status_reg);
1020                         }
1021                 }
1022
1023                 /* no reset or resume pending */
1024                 if (!ehci->reset_done[wIndex]) {
1025
1026                         /* Remote Wakeup received? */
1027                         if (temp & PORT_RESUME) {
1028                                 /* resume signaling for 20 msec */
1029                                 ehci->reset_done[wIndex] = jiffies
1030                                                 + msecs_to_jiffies(20);
1031                                 usb_hcd_start_port_resume(&hcd->self, wIndex);
1032                                 set_bit(wIndex, &ehci->resuming_ports);
1033                                 /* check the port again */
1034                                 mod_timer(&ehci_to_hcd(ehci)->rh_timer,
1035                                                 ehci->reset_done[wIndex]);
1036                         }
1037
1038                 /* reset or resume not yet complete */
1039                 } else if (!time_after_eq(jiffies, ehci->reset_done[wIndex])) {
1040                         ;       /* wait until it is complete */
1041
1042                 /* resume completed */
1043                 } else if (test_bit(wIndex, &ehci->resuming_ports)) {
1044                         clear_bit(wIndex, &ehci->suspended_ports);
1045                         set_bit(wIndex, &ehci->port_c_suspend);
1046                         ehci->reset_done[wIndex] = 0;
1047                         usb_hcd_end_port_resume(&hcd->self, wIndex);
1048
1049                         /* stop resume signaling */
1050                         temp &= ~(PORT_RWC_BITS | PORT_SUSPEND | PORT_RESUME);
1051                         ehci_writel(ehci, temp, status_reg);
1052                         clear_bit(wIndex, &ehci->resuming_ports);
1053                         retval = ehci_handshake(ehci, status_reg,
1054                                         PORT_RESUME, 0, 2000 /* 2msec */);
1055                         if (retval != 0) {
1056                                 ehci_err(ehci, "port %d resume error %d\n",
1057                                                 wIndex + 1, retval);
1058                                 goto error;
1059                         }
1060                         temp = ehci_readl(ehci, status_reg);
1061
1062                 /* whoever resets must GetPortStatus to complete it!! */
1063                 } else {
1064                         status |= USB_PORT_STAT_C_RESET << 16;
1065                         ehci->reset_done [wIndex] = 0;
1066
1067                         /* force reset to complete */
1068                         ehci_writel(ehci, temp & ~(PORT_RWC_BITS | PORT_RESET),
1069                                         status_reg);
1070                         /* REVISIT:  some hardware needs 550+ usec to clear
1071                          * this bit; seems too long to spin routinely...
1072                          */
1073                         retval = ehci_handshake(ehci, status_reg,
1074                                         PORT_RESET, 0, 1000);
1075                         if (retval != 0) {
1076                                 ehci_err (ehci, "port %d reset error %d\n",
1077                                         wIndex + 1, retval);
1078                                 goto error;
1079                         }
1080
1081                         /* see what we found out */
1082                         temp = check_reset_complete (ehci, wIndex, status_reg,
1083                                         ehci_readl(ehci, status_reg));
1084                 }
1085
1086                 /* transfer dedicated ports to the companion hc */
1087                 if ((temp & PORT_CONNECT) &&
1088                                 test_bit(wIndex, &ehci->companion_ports)) {
1089                         temp &= ~PORT_RWC_BITS;
1090                         temp |= PORT_OWNER;
1091                         ehci_writel(ehci, temp, status_reg);
1092                         ehci_dbg(ehci, "port %d --> companion\n", wIndex + 1);
1093                         temp = ehci_readl(ehci, status_reg);
1094                 }
1095
1096                 /*
1097                  * Even if OWNER is set, there's no harm letting khubd
1098                  * see the wPortStatus values (they should all be 0 except
1099                  * for PORT_POWER anyway).
1100                  */
1101
1102                 if (temp & PORT_CONNECT) {
1103                         status |= USB_PORT_STAT_CONNECTION;
1104                         // status may be from integrated TT
1105                         if (ehci->has_hostpc) {
1106                                 temp1 = ehci_readl(ehci, hostpc_reg);
1107                                 status |= ehci_port_speed(ehci, temp1);
1108                         } else
1109                                 status |= ehci_port_speed(ehci, temp);
1110                 }
1111                 if (temp & PORT_PE)
1112                         status |= USB_PORT_STAT_ENABLE;
1113
1114                 /* maybe the port was unsuspended without our knowledge */
1115                 if (temp & (PORT_SUSPEND|PORT_RESUME)) {
1116                         status |= USB_PORT_STAT_SUSPEND;
1117                 } else if (test_bit(wIndex, &ehci->suspended_ports)) {
1118                         clear_bit(wIndex, &ehci->suspended_ports);
1119                         clear_bit(wIndex, &ehci->resuming_ports);
1120                         ehci->reset_done[wIndex] = 0;
1121                         if (temp & PORT_PE)
1122                                 set_bit(wIndex, &ehci->port_c_suspend);
1123                         usb_hcd_end_port_resume(&hcd->self, wIndex);
1124                 }
1125
1126                 if (temp & PORT_OC)
1127                         status |= USB_PORT_STAT_OVERCURRENT;
1128                 if (temp & PORT_RESET)
1129                         status |= USB_PORT_STAT_RESET;
1130                 if (temp & PORT_POWER)
1131                         status |= USB_PORT_STAT_POWER;
1132                 if (test_bit(wIndex, &ehci->port_c_suspend))
1133                         status |= USB_PORT_STAT_C_SUSPEND << 16;
1134
1135                 if (status & ~0xffff)   /* only if wPortChange is interesting */
1136                         dbg_port(ehci, "GetStatus", wIndex + 1, temp);
1137                 put_unaligned_le32(status, buf);
1138                 break;
1139         case SetHubFeature:
1140                 switch (wValue) {
1141                 case C_HUB_LOCAL_POWER:
1142                 case C_HUB_OVER_CURRENT:
1143                         /* no hub-wide feature/status flags */
1144                         break;
1145                 default:
1146                         goto error;
1147                 }
1148                 break;
1149         case SetPortFeature:
1150                 selector = wIndex >> 8;
1151                 wIndex &= 0xff;
1152                 if (unlikely(ehci->debug)) {
1153                         /* If the debug port is active any port
1154                          * feature requests should get denied */
1155                         if (wIndex == HCS_DEBUG_PORT(ehci->hcs_params) &&
1156                             (readl(&ehci->debug->control) & DBGP_ENABLED)) {
1157                                 retval = -ENODEV;
1158                                 goto error_exit;
1159                         }
1160                 }
1161                 if (!wIndex || wIndex > ports)
1162                         goto error;
1163                 wIndex--;
1164                 temp = ehci_readl(ehci, status_reg);
1165                 if (temp & PORT_OWNER)
1166                         break;
1167
1168                 temp &= ~PORT_RWC_BITS;
1169                 switch (wValue) {
1170                 case USB_PORT_FEAT_SUSPEND:
1171                         if (ehci->no_selective_suspend)
1172                                 break;
1173                         if ((temp & PORT_PE) == 0
1174                                         || (temp & PORT_RESET) != 0)
1175                                 goto error;
1176
1177                         /* After above check the port must be connected.
1178                          * Set appropriate bit thus could put phy into low power
1179                          * mode if we have tdi_phy_lpm feature
1180                          */
1181                         temp &= ~PORT_WKCONN_E;
1182                         temp |= PORT_WKDISC_E | PORT_WKOC_E;
1183                         ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);
1184                         if (ehci->has_tdi_phy_lpm) {
1185                                 spin_unlock_irqrestore(&ehci->lock, flags);
1186                                 msleep(5);/* 5ms for HCD enter low pwr mode */
1187                                 spin_lock_irqsave(&ehci->lock, flags);
1188                                 temp1 = ehci_readl(ehci, hostpc_reg);
1189                                 ehci_writel(ehci, temp1 | HOSTPC_PHCD,
1190                                         hostpc_reg);
1191                                 temp1 = ehci_readl(ehci, hostpc_reg);
1192                                 ehci_dbg(ehci, "Port%d phy low pwr mode %s\n",
1193                                         wIndex, (temp1 & HOSTPC_PHCD) ?
1194                                         "succeeded" : "failed");
1195                         }
1196                         set_bit(wIndex, &ehci->suspended_ports);
1197                         break;
1198                 case USB_PORT_FEAT_POWER:
1199                         if (HCS_PPC (ehci->hcs_params))
1200                                 ehci_writel(ehci, temp | PORT_POWER,
1201                                                 status_reg);
1202                         break;
1203                 case USB_PORT_FEAT_RESET:
1204                         if (temp & (PORT_SUSPEND|PORT_RESUME))
1205                                 goto error;
1206                         /* line status bits may report this as low speed,
1207                          * which can be fine if this root hub has a
1208                          * transaction translator built in.
1209                          */
1210                         if ((temp & (PORT_PE|PORT_CONNECT)) == PORT_CONNECT
1211                                         && !ehci_is_TDI(ehci)
1212                                         && PORT_USB11 (temp)) {
1213                                 ehci_dbg (ehci,
1214                                         "port %d low speed --> companion\n",
1215                                         wIndex + 1);
1216                                 temp |= PORT_OWNER;
1217                         } else {
1218                                 temp |= PORT_RESET;
1219                                 temp &= ~PORT_PE;
1220
1221                                 /*
1222                                  * caller must wait, then call GetPortStatus
1223                                  * usb 2.0 spec says 50 ms resets on root
1224                                  */
1225                                 ehci->reset_done [wIndex] = jiffies
1226                                                 + msecs_to_jiffies (50);
1227                         }
1228                         ehci_writel(ehci, temp, status_reg);
1229                         break;
1230
1231                 /* For downstream facing ports (these):  one hub port is put
1232                  * into test mode according to USB2 11.24.2.13, then the hub
1233                  * must be reset (which for root hub now means rmmod+modprobe,
1234                  * or else system reboot).  See EHCI 2.3.9 and 4.14 for info
1235                  * about the EHCI-specific stuff.
1236                  */
1237                 case USB_PORT_FEAT_TEST:
1238 #ifdef CONFIG_USB_HCD_TEST_MODE
1239                         if (selector == EHSET_TEST_SINGLE_STEP_SET_FEATURE) {
1240                                 spin_unlock_irqrestore(&ehci->lock, flags);
1241                                 retval = ehset_single_step_set_feature(hcd,
1242                                                                         wIndex);
1243                                 spin_lock_irqsave(&ehci->lock, flags);
1244                                 break;
1245                         }
1246 #endif
1247                         if (!selector || selector > 5)
1248                                 goto error;
1249                         spin_unlock_irqrestore(&ehci->lock, flags);
1250                         ehci_quiesce(ehci);
1251                         spin_lock_irqsave(&ehci->lock, flags);
1252
1253                         /* Put all enabled ports into suspend */
1254                         while (ports--) {
1255                                 u32 __iomem *sreg =
1256                                                 &ehci->regs->port_status[ports];
1257
1258                                 temp = ehci_readl(ehci, sreg) & ~PORT_RWC_BITS;
1259                                 if (temp & PORT_PE)
1260                                         ehci_writel(ehci, temp | PORT_SUSPEND,
1261                                                         sreg);
1262                         }
1263
1264                         spin_unlock_irqrestore(&ehci->lock, flags);
1265                         ehci_halt(ehci);
1266                         spin_lock_irqsave(&ehci->lock, flags);
1267
1268                         temp = ehci_readl(ehci, status_reg);
1269                         temp |= selector << 16;
1270                         ehci_writel(ehci, temp, status_reg);
1271                         break;
1272
1273                 default:
1274                         goto error;
1275                 }
1276                 ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
1277                 break;
1278
1279         default:
1280 error:
1281                 /* "stall" on error */
1282                 retval = -EPIPE;
1283         }
1284 error_exit:
1285         spin_unlock_irqrestore (&ehci->lock, flags);
1286         return retval;
1287 }
1288 EXPORT_SYMBOL_GPL(ehci_hub_control);
1289
1290 static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum)
1291 {
1292         struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
1293
1294         if (ehci_is_TDI(ehci))
1295                 return;
1296         set_owner(ehci, --portnum, PORT_OWNER);
1297 }
1298
1299 static int ehci_port_handed_over(struct usb_hcd *hcd, int portnum)
1300 {
1301         struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
1302         u32 __iomem             *reg;
1303
1304         if (ehci_is_TDI(ehci))
1305                 return 0;
1306         reg = &ehci->regs->port_status[portnum - 1];
1307         return ehci_readl(ehci, reg) & PORT_OWNER;
1308 }