2  * ISP116x HCD (Host Controller Driver) for USB.
 
   4  * Derived from the SL811 HCD, rewritten for ISP116x.
 
   5  * Copyright (C) 2005 Olav Kongas <ok@artecdesign.ee>
 
   8  * Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
 
   9  * Copyright (C) 2004 David Brownell
 
  11  * Periodic scheduling is based on Roman's OHCI code
 
  12  * Copyright (C) 1999 Roman Weissgaerber
 
  17  * The driver basically works. A number of people have used it with a range
 
  20  * The driver passes all usbtests 1-14.
 
  22  * Suspending/resuming of root hub via sysfs works. Remote wakeup works too.
 
  23  * And suspending/resuming of platform device works too. Suspend/resume
 
  24  * via HCD operations vector is not implemented.
 
  26  * Iso transfer support is not implemented. Adding this would include
 
  27  * implementing recovery from the failure to service the processed ITL
 
  28  * fifo ram in time, which will involve chip reset.
 
  31  + More testing of suspend/resume.
 
  35   ISP116x chips require certain delays between accesses to its
 
  36   registers. The following timing options exist.
 
  38   1. Configure your memory controller (the best)
 
  39   2. Implement platform-specific delay function possibly
 
  40   combined with configuring the memory controller; see
 
  41   include/linux/usb-isp116x.h for more info. Some broken
 
  42   memory controllers line LH7A400 SMC need this. Also,
 
  43   uncomment for that to work the following
 
  44   USE_PLATFORM_DELAY macro.
 
  45   3. Use ndelay (easiest, poorest). For that, uncomment
 
  46   the following USE_NDELAY macro.
 
  48 #define USE_PLATFORM_DELAY
 
  53 /* Transfer descriptors. See dump_ptd() for printout format  */
 
  55 /* enqueuing/finishing log of urbs */
 
  58 #include <linux/module.h>
 
  59 #include <linux/delay.h>
 
  60 #include <linux/debugfs.h>
 
  61 #include <linux/seq_file.h>
 
  62 #include <linux/errno.h>
 
  63 #include <linux/init.h>
 
  64 #include <linux/list.h>
 
  65 #include <linux/usb.h>
 
  66 #include <linux/usb/isp116x.h>
 
  67 #include <linux/platform_device.h>
 
  71 #include <asm/system.h>
 
  72 #include <asm/byteorder.h>
 
  74 #include "../core/hcd.h"
 
  77 #define DRIVER_VERSION  "03 Nov 2005"
 
  78 #define DRIVER_DESC     "ISP116x USB Host Controller Driver"
 
  80 MODULE_DESCRIPTION(DRIVER_DESC);
 
  81 MODULE_LICENSE("GPL");
 
  83 static const char hcd_name[] = "isp116x-hcd";
 
  85 /*-----------------------------------------------------------------*/
 
  88   Write len bytes to fifo, pad till 32-bit boundary
 
  90 static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len)
 
  93         u16 *dp2 = (u16 *) buf;
 
  97         if ((unsigned long)dp2 & 1) {
 
  99                 for (; len > 1; len -= 2) {
 
 102                         isp116x_raw_write_data16(isp116x, w);
 
 105                         isp116x_write_data16(isp116x, (u16) * dp);
 
 108                 for (; len > 1; len -= 2)
 
 109                         isp116x_raw_write_data16(isp116x, *dp2++);
 
 111                         isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2));
 
 113         if (quot == 1 || quot == 2)
 
 114                 isp116x_raw_write_data16(isp116x, 0);
 
 118   Read len bytes from fifo and then read till 32-bit boundary.
 
 120 static void read_ptddata_from_fifo(struct isp116x *isp116x, void *buf, int len)
 
 123         u16 *dp2 = (u16 *) buf;
 
 127         if ((unsigned long)dp2 & 1) {
 
 129                 for (; len > 1; len -= 2) {
 
 130                         w = isp116x_raw_read_data16(isp116x);
 
 132                         *dp++ = (w >> 8) & 0xff;
 
 135                         *dp = 0xff & isp116x_read_data16(isp116x);
 
 138                 for (; len > 1; len -= 2)
 
 139                         *dp2++ = isp116x_raw_read_data16(isp116x);
 
 141                         *(u8 *) dp2 = 0xff & isp116x_read_data16(isp116x);
 
 143         if (quot == 1 || quot == 2)
 
 144                 isp116x_raw_read_data16(isp116x);
 
 148   Write ptd's and data for scheduled transfers into
 
 149   the fifo ram. Fifo must be empty and ready.
 
 151 static void pack_fifo(struct isp116x *isp116x)
 
 153         struct isp116x_ep *ep;
 
 155         int buflen = isp116x->atl_last_dir == PTD_DIR_IN
 
 156             ? isp116x->atl_bufshrt : isp116x->atl_buflen;
 
 158         isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
 
 159         isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
 
 160         isp116x_write_addr(isp116x, HCATLPORT | ISP116x_WRITE_OFFSET);
 
 161         for (ep = isp116x->atl_active; ep; ep = ep->active) {
 
 164                 dump_ptd_out_data(ptd, ep->data);
 
 165                 isp116x_write_data16(isp116x, ptd->count);
 
 166                 isp116x_write_data16(isp116x, ptd->mps);
 
 167                 isp116x_write_data16(isp116x, ptd->len);
 
 168                 isp116x_write_data16(isp116x, ptd->faddr);
 
 169                 buflen -= sizeof(struct ptd);
 
 170                 /* Skip writing data for last IN PTD */
 
 171                 if (ep->active || (isp116x->atl_last_dir != PTD_DIR_IN)) {
 
 172                         write_ptddata_to_fifo(isp116x, ep->data, ep->length);
 
 173                         buflen -= ALIGN(ep->length, 4);
 
 180   Read the processed ptd's and data from fifo ram back to
 
 181   URBs' buffers. Fifo must be full and done
 
 183 static void unpack_fifo(struct isp116x *isp116x)
 
 185         struct isp116x_ep *ep;
 
 187         int buflen = isp116x->atl_last_dir == PTD_DIR_IN
 
 188             ? isp116x->atl_buflen : isp116x->atl_bufshrt;
 
 190         isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
 
 191         isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
 
 192         isp116x_write_addr(isp116x, HCATLPORT);
 
 193         for (ep = isp116x->atl_active; ep; ep = ep->active) {
 
 195                 ptd->count = isp116x_read_data16(isp116x);
 
 196                 ptd->mps = isp116x_read_data16(isp116x);
 
 197                 ptd->len = isp116x_read_data16(isp116x);
 
 198                 ptd->faddr = isp116x_read_data16(isp116x);
 
 199                 buflen -= sizeof(struct ptd);
 
 200                 /* Skip reading data for last Setup or Out PTD */
 
 201                 if (ep->active || (isp116x->atl_last_dir == PTD_DIR_IN)) {
 
 202                         read_ptddata_from_fifo(isp116x, ep->data, ep->length);
 
 203                         buflen -= ALIGN(ep->length, 4);
 
 206                 dump_ptd_in_data(ptd, ep->data);
 
 211 /*---------------------------------------------------------------*/
 
 216 static void preproc_atl_queue(struct isp116x *isp116x)
 
 218         struct isp116x_ep *ep;
 
 223         for (ep = isp116x->atl_active; ep; ep = ep->active) {
 
 224                 u16 toggle = 0, dir = PTD_DIR_SETUP;
 
 226                 BUG_ON(list_empty(&ep->hep->urb_list));
 
 227                 urb = container_of(ep->hep->urb_list.next,
 
 228                                    struct urb, urb_list);
 
 231                 spin_lock(&urb->lock);
 
 232                 ep->data = (unsigned char *)urb->transfer_buffer
 
 233                     + urb->actual_length;
 
 235                 switch (ep->nextpid) {
 
 237                         toggle = usb_gettoggle(urb->dev, ep->epnum, 0);
 
 241                         toggle = usb_gettoggle(urb->dev, ep->epnum, 1);
 
 245                         len = sizeof(struct usb_ctrlrequest);
 
 246                         ep->data = urb->setup_packet;
 
 251                         dir = (urb->transfer_buffer_length
 
 252                                && usb_pipein(urb->pipe))
 
 253                             ? PTD_DIR_OUT : PTD_DIR_IN;
 
 256                         ERR("%s %d: ep->nextpid %d\n", __func__, __LINE__,
 
 261                 ptd->count = PTD_CC_MSK | PTD_ACTIVE_MSK | PTD_TOGGLE(toggle);
 
 262                 ptd->mps = PTD_MPS(ep->maxpacket)
 
 263                     | PTD_SPD(urb->dev->speed == USB_SPEED_LOW)
 
 265                 ptd->len = PTD_LEN(len) | PTD_DIR(dir);
 
 266                 ptd->faddr = PTD_FA(usb_pipedevice(urb->pipe));
 
 267                 spin_unlock(&urb->lock);
 
 269                         ptd->mps |= PTD_LAST_MSK;
 
 270                         isp116x->atl_last_dir = dir;
 
 272                 isp116x->atl_bufshrt = sizeof(struct ptd) + isp116x->atl_buflen;
 
 273                 isp116x->atl_buflen = isp116x->atl_bufshrt + ALIGN(len, 4);
 
 278   Analyze transfer results, handle partial transfers and errors
 
 280 static void postproc_atl_queue(struct isp116x *isp116x)
 
 282         struct isp116x_ep *ep;
 
 284         struct usb_device *udev;
 
 289         for (ep = isp116x->atl_active; ep; ep = ep->active) {
 
 290                 BUG_ON(list_empty(&ep->hep->urb_list));
 
 292                     container_of(ep->hep->urb_list.next, struct urb, urb_list);
 
 295                 cc = PTD_GET_CC(ptd);
 
 297                 spin_lock(&urb->lock);
 
 299                 /* Data underrun is special. For allowed underrun
 
 300                    we clear the error and continue as normal. For
 
 301                    forbidden underrun we finish the DATA stage
 
 302                    immediately while for control transfer,
 
 303                    we do a STATUS stage. */
 
 304                 if (cc == TD_DATAUNDERRUN) {
 
 305                         if (!(urb->transfer_flags & URB_SHORT_NOT_OK)) {
 
 306                                 DBG("Allowed data underrun\n");
 
 311                                 if (usb_pipecontrol(urb->pipe))
 
 312                                         ep->nextpid = USB_PID_ACK;
 
 314                                         usb_settoggle(udev, ep->epnum,
 
 317                                                       PTD_GET_TOGGLE(ptd));
 
 318                                 urb->actual_length += PTD_GET_COUNT(ptd);
 
 319                                 urb->status = cc_to_error[TD_DATAUNDERRUN];
 
 320                                 spin_unlock(&urb->lock);
 
 324                 /* Keep underrun error through the STATUS stage */
 
 325                 if (urb->status == cc_to_error[TD_DATAUNDERRUN])
 
 326                         cc = TD_DATAUNDERRUN;
 
 328                 if (cc != TD_CC_NOERROR && cc != TD_NOTACCESSED
 
 329                     && (++ep->error_count >= 3 || cc == TD_CC_STALL
 
 330                         || cc == TD_DATAOVERRUN)) {
 
 331                         if (urb->status == -EINPROGRESS)
 
 332                                 urb->status = cc_to_error[cc];
 
 333                         if (ep->nextpid == USB_PID_ACK)
 
 335                         spin_unlock(&urb->lock);
 
 338                 /* According to usb spec, zero-length Int transfer signals
 
 339                    finishing of the urb. Hey, does this apply only
 
 341                 if (usb_pipeint(urb->pipe) && !PTD_GET_LEN(ptd)) {
 
 342                         if (urb->status == -EINPROGRESS)
 
 344                         spin_unlock(&urb->lock);
 
 348                 /* Relax after previously failed, but later succeeded
 
 349                    or correctly NAK'ed retransmission attempt */
 
 351                     && (cc == TD_CC_NOERROR || cc == TD_NOTACCESSED))
 
 354                 /* Take into account idiosyncracies of the isp116x chip
 
 355                    regarding toggle bit for failed transfers */
 
 356                 if (ep->nextpid == USB_PID_OUT)
 
 357                         usb_settoggle(udev, ep->epnum, 1, PTD_GET_TOGGLE(ptd)
 
 358                                       ^ (ep->error_count > 0));
 
 359                 else if (ep->nextpid == USB_PID_IN)
 
 360                         usb_settoggle(udev, ep->epnum, 0, PTD_GET_TOGGLE(ptd)
 
 361                                       ^ (ep->error_count > 0));
 
 363                 switch (ep->nextpid) {
 
 366                         urb->actual_length += PTD_GET_COUNT(ptd);
 
 367                         if (PTD_GET_ACTIVE(ptd)
 
 368                             || (cc != TD_CC_NOERROR && cc < 0x0E))
 
 370                         if (urb->transfer_buffer_length != urb->actual_length) {
 
 374                                 if (urb->transfer_flags & URB_ZERO_PACKET
 
 375                                     && ep->nextpid == USB_PID_OUT
 
 376                                     && !(PTD_GET_COUNT(ptd) % ep->maxpacket)) {
 
 377                                         DBG("Zero packet requested\n");
 
 381                         /* All data for this URB is transferred, let's finish */
 
 382                         if (usb_pipecontrol(urb->pipe))
 
 383                                 ep->nextpid = USB_PID_ACK;
 
 384                         else if (urb->status == -EINPROGRESS)
 
 388                         if (PTD_GET_ACTIVE(ptd)
 
 389                             || (cc != TD_CC_NOERROR && cc < 0x0E))
 
 391                         if (urb->transfer_buffer_length == urb->actual_length)
 
 392                                 ep->nextpid = USB_PID_ACK;
 
 393                         else if (usb_pipeout(urb->pipe)) {
 
 394                                 usb_settoggle(udev, 0, 1, 1);
 
 395                                 ep->nextpid = USB_PID_OUT;
 
 397                                 usb_settoggle(udev, 0, 0, 1);
 
 398                                 ep->nextpid = USB_PID_IN;
 
 402                         if (PTD_GET_ACTIVE(ptd)
 
 403                             || (cc != TD_CC_NOERROR && cc < 0x0E))
 
 405                         if (urb->status == -EINPROGRESS)
 
 412                 spin_unlock(&urb->lock);
 
 417   Take done or failed requests out of schedule. Give back
 
 420 static void finish_request(struct isp116x *isp116x, struct isp116x_ep *ep,
 
 421                            struct urb *urb, struct pt_regs *regs)
 
 422 __releases(isp116x->lock) __acquires(isp116x->lock)
 
 429         if (usb_pipecontrol(urb->pipe))
 
 430                 ep->nextpid = USB_PID_SETUP;
 
 432         urb_dbg(urb, "Finish");
 
 434         spin_unlock(&isp116x->lock);
 
 435         usb_hcd_giveback_urb(isp116x_to_hcd(isp116x), urb, regs);
 
 436         spin_lock(&isp116x->lock);
 
 438         /* take idle endpoints out of the schedule */
 
 439         if (!list_empty(&ep->hep->urb_list))
 
 442         /* async deschedule */
 
 443         if (!list_empty(&ep->schedule)) {
 
 444                 list_del_init(&ep->schedule);
 
 448         /* periodic deschedule */
 
 449         DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
 
 450         for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
 
 451                 struct isp116x_ep *temp;
 
 452                 struct isp116x_ep **prev = &isp116x->periodic[i];
 
 454                 while (*prev && ((temp = *prev) != ep))
 
 458                 isp116x->load[i] -= ep->load;
 
 460         ep->branch = PERIODIC_SIZE;
 
 461         isp116x_to_hcd(isp116x)->self.bandwidth_allocated -=
 
 462             ep->load / ep->period;
 
 464         /* switch irq type? */
 
 465         if (!--isp116x->periodic_count) {
 
 466                 isp116x->irqenb &= ~HCuPINT_SOF;
 
 467                 isp116x->irqenb |= HCuPINT_ATL;
 
 472   Scan transfer lists, schedule transfers, send data off
 
 475 static void start_atl_transfers(struct isp116x *isp116x)
 
 477         struct isp116x_ep *last_ep = NULL, *ep;
 
 480         int len, index, speed, byte_time;
 
 482         if (atomic_read(&isp116x->atl_finishing))
 
 485         if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state))
 
 488         /* FIFO not empty? */
 
 489         if (isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_FULL)
 
 492         isp116x->atl_active = NULL;
 
 493         isp116x->atl_buflen = isp116x->atl_bufshrt = 0;
 
 495         /* Schedule int transfers */
 
 496         if (isp116x->periodic_count) {
 
 497                 isp116x->fmindex = index =
 
 498                     (isp116x->fmindex + 1) & (PERIODIC_SIZE - 1);
 
 499                 if ((load = isp116x->load[index])) {
 
 500                         /* Bring all int transfers for this frame
 
 501                            into the active queue */
 
 502                         isp116x->atl_active = last_ep =
 
 503                             isp116x->periodic[index];
 
 504                         while (last_ep->next)
 
 505                                 last_ep = (last_ep->active = last_ep->next);
 
 506                         last_ep->active = NULL;
 
 510         /* Schedule control/bulk transfers */
 
 511         list_for_each_entry(ep, &isp116x->async, schedule) {
 
 512                 urb = container_of(ep->hep->urb_list.next,
 
 513                                    struct urb, urb_list);
 
 514                 speed = urb->dev->speed;
 
 515                 byte_time = speed == USB_SPEED_LOW
 
 516                     ? BYTE_TIME_LOWSPEED : BYTE_TIME_FULLSPEED;
 
 518                 if (ep->nextpid == USB_PID_SETUP) {
 
 519                         len = sizeof(struct usb_ctrlrequest);
 
 520                 } else if (ep->nextpid == USB_PID_ACK) {
 
 523                         /* Find current free length ... */
 
 524                         len = (MAX_LOAD_LIMIT - load) / byte_time;
 
 526                         /* ... then limit it to configured max size ... */
 
 527                         len = min(len, speed == USB_SPEED_LOW ?
 
 528                                   MAX_TRANSFER_SIZE_LOWSPEED :
 
 529                                   MAX_TRANSFER_SIZE_FULLSPEED);
 
 531                         /* ... and finally cut to the multiple of MaxPacketSize,
 
 532                            or to the real length if there's enough room. */
 
 534                             (urb->transfer_buffer_length -
 
 535                              urb->actual_length)) {
 
 536                                 len -= len % ep->maxpacket;
 
 540                                 len = urb->transfer_buffer_length -
 
 545                 load += len * byte_time;
 
 546                 if (load > MAX_LOAD_LIMIT)
 
 552                         last_ep->active = ep;
 
 554                         isp116x->atl_active = ep;
 
 558         /* Avoid starving of endpoints */
 
 559         if ((&isp116x->async)->next != (&isp116x->async)->prev)
 
 560                 list_move(&isp116x->async, (&isp116x->async)->next);
 
 562         if (isp116x->atl_active) {
 
 563                 preproc_atl_queue(isp116x);
 
 569   Finish the processed transfers
 
 571 static void finish_atl_transfers(struct isp116x *isp116x, struct pt_regs *regs)
 
 573         struct isp116x_ep *ep;
 
 576         if (!isp116x->atl_active)
 
 578         /* Fifo not ready? */
 
 579         if (!(isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_DONE))
 
 582         atomic_inc(&isp116x->atl_finishing);
 
 583         unpack_fifo(isp116x);
 
 584         postproc_atl_queue(isp116x);
 
 585         for (ep = isp116x->atl_active; ep; ep = ep->active) {
 
 587                     container_of(ep->hep->urb_list.next, struct urb, urb_list);
 
 588                 /* USB_PID_ACK check here avoids finishing of
 
 589                    control transfers, for which TD_DATAUNDERRUN
 
 590                    occured, while URB_SHORT_NOT_OK was set */
 
 591                 if (urb && urb->status != -EINPROGRESS
 
 592                     && ep->nextpid != USB_PID_ACK)
 
 593                         finish_request(isp116x, ep, urb, regs);
 
 595         atomic_dec(&isp116x->atl_finishing);
 
 598 static irqreturn_t isp116x_irq(struct usb_hcd *hcd, struct pt_regs *regs)
 
 600         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
 602         irqreturn_t ret = IRQ_NONE;
 
 604         spin_lock(&isp116x->lock);
 
 605         isp116x_write_reg16(isp116x, HCuPINTENB, 0);
 
 606         irqstat = isp116x_read_reg16(isp116x, HCuPINT);
 
 607         isp116x_write_reg16(isp116x, HCuPINT, irqstat);
 
 609         if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
 
 611                 finish_atl_transfers(isp116x, regs);
 
 614         if (irqstat & HCuPINT_OPR) {
 
 615                 u32 intstat = isp116x_read_reg32(isp116x, HCINTSTAT);
 
 616                 isp116x_write_reg32(isp116x, HCINTSTAT, intstat);
 
 617                 if (intstat & HCINT_UE) {
 
 618                         ERR("Unrecoverable error, HC is dead!\n");
 
 619                         /* IRQ's are off, we do no DMA,
 
 620                            perfectly ready to die ... */
 
 621                         hcd->state = HC_STATE_HALT;
 
 625                 if (intstat & HCINT_RHSC)
 
 626                         /* When root hub or any of its ports is going
 
 627                            to come out of suspend, it may take more
 
 628                            than 10ms for status bits to stabilize. */
 
 629                         mod_timer(&hcd->rh_timer, jiffies
 
 630                                   + msecs_to_jiffies(20) + 1);
 
 631                 if (intstat & HCINT_RD) {
 
 632                         DBG("---- remote wakeup\n");
 
 633                         usb_hcd_resume_root_hub(hcd);
 
 635                 irqstat &= ~HCuPINT_OPR;
 
 639         if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
 
 640                 start_atl_transfers(isp116x);
 
 643         isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
 
 645         spin_unlock(&isp116x->lock);
 
 649 /*-----------------------------------------------------------------*/
 
 651 /* usb 1.1 says max 90% of a frame is available for periodic transfers.
 
 652  * this driver doesn't promise that much since it's got to handle an
 
 653  * IRQ per packet; irq handling latencies also use up that time.
 
 657 #define MAX_PERIODIC_LOAD       600
 
 658 static int balance(struct isp116x *isp116x, u16 period, u16 load)
 
 660         int i, branch = -ENOSPC;
 
 662         /* search for the least loaded schedule branch of that period
 
 663            which has enough bandwidth left unreserved. */
 
 664         for (i = 0; i < period; i++) {
 
 665                 if (branch < 0 || isp116x->load[branch] > isp116x->load[i]) {
 
 668                         for (j = i; j < PERIODIC_SIZE; j += period) {
 
 669                                 if ((isp116x->load[j] + load)
 
 673                         if (j < PERIODIC_SIZE)
 
 681 /* NB! ALL the code above this point runs with isp116x->lock
 
 685 /*-----------------------------------------------------------------*/
 
 687 static int isp116x_urb_enqueue(struct usb_hcd *hcd,
 
 688                                struct usb_host_endpoint *hep, struct urb *urb,
 
 691         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
 692         struct usb_device *udev = urb->dev;
 
 693         unsigned int pipe = urb->pipe;
 
 694         int is_out = !usb_pipein(pipe);
 
 695         int type = usb_pipetype(pipe);
 
 696         int epnum = usb_pipeendpoint(pipe);
 
 697         struct isp116x_ep *ep = NULL;
 
 702         urb_dbg(urb, "Enqueue");
 
 704         if (type == PIPE_ISOCHRONOUS) {
 
 705                 ERR("Isochronous transfers not supported\n");
 
 706                 urb_dbg(urb, "Refused to enqueue");
 
 709         /* avoid all allocations within spinlocks: request or endpoint */
 
 711                 ep = kzalloc(sizeof *ep, mem_flags);
 
 716         spin_lock_irqsave(&isp116x->lock, flags);
 
 717         if (!HC_IS_RUNNING(hcd->state)) {
 
 726                 INIT_LIST_HEAD(&ep->schedule);
 
 729                 ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
 
 730                 usb_settoggle(udev, epnum, is_out, 0);
 
 732                 if (type == PIPE_CONTROL) {
 
 733                         ep->nextpid = USB_PID_SETUP;
 
 735                         ep->nextpid = USB_PID_OUT;
 
 737                         ep->nextpid = USB_PID_IN;
 
 742                            With INT URBs submitted, the driver works with SOF
 
 743                            interrupt enabled and ATL interrupt disabled. After
 
 744                            the PTDs are written to fifo ram, the chip starts
 
 745                            fifo processing and usb transfers after the next
 
 746                            SOF and continues until the transfers are finished
 
 747                            (succeeded or failed) or the frame ends. Therefore,
 
 748                            the transfers occur only in every second frame,
 
 749                            while fifo reading/writing and data processing
 
 750                            occur in every other second frame. */
 
 751                         if (urb->interval < 2)
 
 753                         if (urb->interval > 2 * PERIODIC_SIZE)
 
 754                                 urb->interval = 2 * PERIODIC_SIZE;
 
 755                         ep->period = urb->interval >> 1;
 
 756                         ep->branch = PERIODIC_SIZE;
 
 757                         ep->load = usb_calc_bus_time(udev->speed,
 
 759                                                      (type == PIPE_ISOCHRONOUS),
 
 760                                                      usb_maxpacket(udev, pipe,
 
 768         /* maybe put endpoint into schedule */
 
 772                 if (list_empty(&ep->schedule))
 
 773                         list_add_tail(&ep->schedule, &isp116x->async);
 
 776                 urb->interval = ep->period;
 
 777                 ep->length = min((int)ep->maxpacket,
 
 778                                  urb->transfer_buffer_length);
 
 780                 /* urb submitted for already existing endpoint */
 
 781                 if (ep->branch < PERIODIC_SIZE)
 
 784                 ep->branch = ret = balance(isp116x, ep->period, ep->load);
 
 789                 urb->start_frame = (isp116x->fmindex & (PERIODIC_SIZE - 1))
 
 792                 /* sort each schedule branch by period (slow before fast)
 
 793                    to share the faster parts of the tree without needing
 
 794                    dummy/placeholder nodes */
 
 795                 DBG("schedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
 
 796                 for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
 
 797                         struct isp116x_ep **prev = &isp116x->periodic[i];
 
 798                         struct isp116x_ep *here = *prev;
 
 800                         while (here && ep != here) {
 
 801                                 if (ep->period > here->period)
 
 810                         isp116x->load[i] += ep->load;
 
 812                 hcd->self.bandwidth_allocated += ep->load / ep->period;
 
 814                 /* switch over to SOFint */
 
 815                 if (!isp116x->periodic_count++) {
 
 816                         isp116x->irqenb &= ~HCuPINT_ATL;
 
 817                         isp116x->irqenb |= HCuPINT_SOF;
 
 818                         isp116x_write_reg16(isp116x, HCuPINTENB,
 
 823         /* in case of unlink-during-submit */
 
 824         spin_lock(&urb->lock);
 
 825         if (urb->status != -EINPROGRESS) {
 
 826                 spin_unlock(&urb->lock);
 
 827                 finish_request(isp116x, ep, urb, NULL);
 
 832         spin_unlock(&urb->lock);
 
 833         start_atl_transfers(isp116x);
 
 836         spin_unlock_irqrestore(&isp116x->lock, flags);
 
 843 static int isp116x_urb_dequeue(struct usb_hcd *hcd, struct urb *urb)
 
 845         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
 846         struct usb_host_endpoint *hep;
 
 847         struct isp116x_ep *ep, *ep_act;
 
 850         spin_lock_irqsave(&isp116x->lock, flags);
 
 852         /* URB already unlinked (or never linked)? */
 
 854                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
 858         WARN_ON(hep != ep->hep);
 
 860         /* In front of queue? */
 
 861         if (ep->hep->urb_list.next == &urb->urb_list)
 
 863                 for (ep_act = isp116x->atl_active; ep_act;
 
 864                      ep_act = ep_act->active)
 
 866                                 VDBG("dequeue, urb %p active; wait for irq\n",
 
 873                 finish_request(isp116x, ep, urb, NULL);
 
 875         spin_unlock_irqrestore(&isp116x->lock, flags);
 
 879 static void isp116x_endpoint_disable(struct usb_hcd *hcd,
 
 880                                      struct usb_host_endpoint *hep)
 
 883         struct isp116x_ep *ep = hep->hcpriv;
 
 888         /* assume we'd just wait for the irq */
 
 889         for (i = 0; i < 100 && !list_empty(&hep->urb_list); i++)
 
 891         if (!list_empty(&hep->urb_list))
 
 892                 WARN("ep %p not empty?\n", ep);
 
 898 static int isp116x_get_frame(struct usb_hcd *hcd)
 
 900         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
 904         spin_lock_irqsave(&isp116x->lock, flags);
 
 905         fmnum = isp116x_read_reg32(isp116x, HCFMNUM);
 
 906         spin_unlock_irqrestore(&isp116x->lock, flags);
 
 911   Adapted from ohci-hub.c. Currently we don't support autosuspend.
 
 913 static int isp116x_hub_status_data(struct usb_hcd *hcd, char *buf)
 
 915         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
 916         int ports, i, changed = 0;
 
 919         if (!HC_IS_RUNNING(hcd->state))
 
 922         /* Report no status change now, if we are scheduled to be
 
 924         if (timer_pending(&hcd->rh_timer))
 
 927         ports = isp116x->rhdesca & RH_A_NDP;
 
 928         spin_lock_irqsave(&isp116x->lock, flags);
 
 929         isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
 
 930         if (isp116x->rhstatus & (RH_HS_LPSC | RH_HS_OCIC))
 
 931                 buf[0] = changed = 1;
 
 935         for (i = 0; i < ports; i++) {
 
 936                 u32 status = isp116x->rhport[i] =
 
 937                     isp116x_read_reg32(isp116x, i ? HCRHPORT2 : HCRHPORT1);
 
 939                 if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
 
 940                               | RH_PS_OCIC | RH_PS_PRSC)) {
 
 942                         buf[0] |= 1 << (i + 1);
 
 946         spin_unlock_irqrestore(&isp116x->lock, flags);
 
 950 static void isp116x_hub_descriptor(struct isp116x *isp116x,
 
 951                                    struct usb_hub_descriptor *desc)
 
 953         u32 reg = isp116x->rhdesca;
 
 955         desc->bDescriptorType = 0x29;
 
 956         desc->bDescLength = 9;
 
 957         desc->bHubContrCurrent = 0;
 
 958         desc->bNbrPorts = (u8) (reg & 0x3);
 
 959         /* Power switching, device type, overcurrent. */
 
 960         desc->wHubCharacteristics = cpu_to_le16((u16) ((reg >> 8) & 0x1f));
 
 961         desc->bPwrOn2PwrGood = (u8) ((reg >> 24) & 0xff);
 
 962         /* two bitmaps:  ports removable, and legacy PortPwrCtrlMask */
 
 964         desc->bitmap[1] = ~0;
 
 967 /* Perform reset of a given port.
 
 968    It would be great to just start the reset and let the
 
 969    USB core to clear the reset in due time. However,
 
 970    root hub ports should be reset for at least 50 ms, while
 
 971    our chip stays in reset for about 10 ms. I.e., we must
 
 972    repeatedly reset it ourself here.
 
 974 static inline void root_port_reset(struct isp116x *isp116x, unsigned port)
 
 977         unsigned long flags, t;
 
 979         /* Root hub reset should be 50 ms, but some devices
 
 980            want it even longer. */
 
 981         t = jiffies + msecs_to_jiffies(100);
 
 983         while (time_before(jiffies, t)) {
 
 984                 spin_lock_irqsave(&isp116x->lock, flags);
 
 985                 /* spin until any current reset finishes */
 
 987                         tmp = isp116x_read_reg32(isp116x, port ?
 
 988                                                  HCRHPORT2 : HCRHPORT1);
 
 989                         if (!(tmp & RH_PS_PRS))
 
 993                 /* Don't reset a disconnected port */
 
 994                 if (!(tmp & RH_PS_CCS)) {
 
 995                         spin_unlock_irqrestore(&isp116x->lock, flags);
 
 998                 /* Reset lasts 10ms (claims datasheet) */
 
 999                 isp116x_write_reg32(isp116x, port ? HCRHPORT2 :
 
1000                                     HCRHPORT1, (RH_PS_PRS));
 
1001                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1006 /* Adapted from ohci-hub.c */
 
1007 static int isp116x_hub_control(struct usb_hcd *hcd,
 
1009                                u16 wValue, u16 wIndex, char *buf, u16 wLength)
 
1011         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
1013         unsigned long flags;
 
1014         int ports = isp116x->rhdesca & RH_A_NDP;
 
1018         case ClearHubFeature:
 
1019                 DBG("ClearHubFeature: ");
 
1021                 case C_HUB_OVER_CURRENT:
 
1022                         DBG("C_HUB_OVER_CURRENT\n");
 
1023                         spin_lock_irqsave(&isp116x->lock, flags);
 
1024                         isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_OCIC);
 
1025                         spin_unlock_irqrestore(&isp116x->lock, flags);
 
1026                 case C_HUB_LOCAL_POWER:
 
1027                         DBG("C_HUB_LOCAL_POWER\n");
 
1034                 DBG("SetHubFeature: ");
 
1036                 case C_HUB_OVER_CURRENT:
 
1037                 case C_HUB_LOCAL_POWER:
 
1038                         DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
 
1044         case GetHubDescriptor:
 
1045                 DBG("GetHubDescriptor\n");
 
1046                 isp116x_hub_descriptor(isp116x,
 
1047                                        (struct usb_hub_descriptor *)buf);
 
1050                 DBG("GetHubStatus\n");
 
1051                 *(__le32 *) buf = 0;
 
1054                 DBG("GetPortStatus\n");
 
1055                 if (!wIndex || wIndex > ports)
 
1057                 tmp = isp116x->rhport[--wIndex];
 
1058                 *(__le32 *) buf = cpu_to_le32(tmp);
 
1059                 DBG("GetPortStatus: port[%d]  %08x\n", wIndex + 1, tmp);
 
1061         case ClearPortFeature:
 
1062                 DBG("ClearPortFeature: ");
 
1063                 if (!wIndex || wIndex > ports)
 
1068                 case USB_PORT_FEAT_ENABLE:
 
1069                         DBG("USB_PORT_FEAT_ENABLE\n");
 
1072                 case USB_PORT_FEAT_C_ENABLE:
 
1073                         DBG("USB_PORT_FEAT_C_ENABLE\n");
 
1076                 case USB_PORT_FEAT_SUSPEND:
 
1077                         DBG("USB_PORT_FEAT_SUSPEND\n");
 
1080                 case USB_PORT_FEAT_C_SUSPEND:
 
1081                         DBG("USB_PORT_FEAT_C_SUSPEND\n");
 
1084                 case USB_PORT_FEAT_POWER:
 
1085                         DBG("USB_PORT_FEAT_POWER\n");
 
1088                 case USB_PORT_FEAT_C_CONNECTION:
 
1089                         DBG("USB_PORT_FEAT_C_CONNECTION\n");
 
1092                 case USB_PORT_FEAT_C_OVER_CURRENT:
 
1093                         DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
 
1096                 case USB_PORT_FEAT_C_RESET:
 
1097                         DBG("USB_PORT_FEAT_C_RESET\n");
 
1103                 spin_lock_irqsave(&isp116x->lock, flags);
 
1104                 isp116x_write_reg32(isp116x, wIndex
 
1105                                     ? HCRHPORT2 : HCRHPORT1, tmp);
 
1106                 isp116x->rhport[wIndex] =
 
1107                     isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
 
1108                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1110         case SetPortFeature:
 
1111                 DBG("SetPortFeature: ");
 
1112                 if (!wIndex || wIndex > ports)
 
1116                 case USB_PORT_FEAT_SUSPEND:
 
1117                         DBG("USB_PORT_FEAT_SUSPEND\n");
 
1118                         spin_lock_irqsave(&isp116x->lock, flags);
 
1119                         isp116x_write_reg32(isp116x, wIndex
 
1120                                             ? HCRHPORT2 : HCRHPORT1, RH_PS_PSS);
 
1122                 case USB_PORT_FEAT_POWER:
 
1123                         DBG("USB_PORT_FEAT_POWER\n");
 
1124                         spin_lock_irqsave(&isp116x->lock, flags);
 
1125                         isp116x_write_reg32(isp116x, wIndex
 
1126                                             ? HCRHPORT2 : HCRHPORT1, RH_PS_PPS);
 
1128                 case USB_PORT_FEAT_RESET:
 
1129                         DBG("USB_PORT_FEAT_RESET\n");
 
1130                         root_port_reset(isp116x, wIndex);
 
1131                         spin_lock_irqsave(&isp116x->lock, flags);
 
1136                 isp116x->rhport[wIndex] =
 
1137                     isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
 
1138                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1143                 /* "protocol stall" on error */
 
1144                 DBG("PROTOCOL STALL\n");
 
1150 /*-----------------------------------------------------------------*/
 
1152 #ifdef CONFIG_DEBUG_FS
 
1154 static void dump_irq(struct seq_file *s, char *label, u16 mask)
 
1156         seq_printf(s, "%s %04x%s%s%s%s%s%s\n", label, mask,
 
1157                    mask & HCuPINT_CLKRDY ? " clkrdy" : "",
 
1158                    mask & HCuPINT_SUSP ? " susp" : "",
 
1159                    mask & HCuPINT_OPR ? " opr" : "",
 
1160                    mask & HCuPINT_AIIEOT ? " eot" : "",
 
1161                    mask & HCuPINT_ATL ? " atl" : "",
 
1162                    mask & HCuPINT_SOF ? " sof" : "");
 
1165 static void dump_int(struct seq_file *s, char *label, u32 mask)
 
1167         seq_printf(s, "%s %08x%s%s%s%s%s%s%s\n", label, mask,
 
1168                    mask & HCINT_MIE ? " MIE" : "",
 
1169                    mask & HCINT_RHSC ? " rhsc" : "",
 
1170                    mask & HCINT_FNO ? " fno" : "",
 
1171                    mask & HCINT_UE ? " ue" : "",
 
1172                    mask & HCINT_RD ? " rd" : "",
 
1173                    mask & HCINT_SF ? " sof" : "", mask & HCINT_SO ? " so" : "");
 
1176 static int isp116x_show_dbg(struct seq_file *s, void *unused)
 
1178         struct isp116x *isp116x = s->private;
 
1180         seq_printf(s, "%s\n%s version %s\n",
 
1181                    isp116x_to_hcd(isp116x)->product_desc, hcd_name,
 
1184         if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x)->state)) {
 
1185                 seq_printf(s, "HCD is suspended\n");
 
1188         if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state)) {
 
1189                 seq_printf(s, "HCD not running\n");
 
1193         spin_lock_irq(&isp116x->lock);
 
1194         dump_irq(s, "hc_irq_enable", isp116x_read_reg16(isp116x, HCuPINTENB));
 
1195         dump_irq(s, "hc_irq_status", isp116x_read_reg16(isp116x, HCuPINT));
 
1196         dump_int(s, "hc_int_enable", isp116x_read_reg32(isp116x, HCINTENB));
 
1197         dump_int(s, "hc_int_status", isp116x_read_reg32(isp116x, HCINTSTAT));
 
1198         isp116x_show_regs_seq(isp116x, s);
 
1199         spin_unlock_irq(&isp116x->lock);
 
1200         seq_printf(s, "\n");
 
1205 static int isp116x_open_seq(struct inode *inode, struct file *file)
 
1207         return single_open(file, isp116x_show_dbg, inode->u.generic_ip);
 
1210 static struct file_operations isp116x_debug_fops = {
 
1211         .open = isp116x_open_seq,
 
1213         .llseek = seq_lseek,
 
1214         .release = single_release,
 
1217 static int create_debug_file(struct isp116x *isp116x)
 
1219         isp116x->dentry = debugfs_create_file(hcd_name,
 
1220                                               S_IRUGO, NULL, isp116x,
 
1221                                               &isp116x_debug_fops);
 
1222         if (!isp116x->dentry)
 
1227 static void remove_debug_file(struct isp116x *isp116x)
 
1229         debugfs_remove(isp116x->dentry);
 
1234 #define create_debug_file(d)    0
 
1235 #define remove_debug_file(d)    do{}while(0)
 
1237 #endif                          /* CONFIG_DEBUG_FS */
 
1239 /*-----------------------------------------------------------------*/
 
1242   Software reset - can be called from any contect.
 
1244 static int isp116x_sw_reset(struct isp116x *isp116x)
 
1247         unsigned long flags;
 
1250         spin_lock_irqsave(&isp116x->lock, flags);
 
1251         isp116x_write_reg16(isp116x, HCSWRES, HCSWRES_MAGIC);
 
1252         isp116x_write_reg32(isp116x, HCCMDSTAT, HCCMDSTAT_HCR);
 
1254                 /* It usually resets within 1 ms */
 
1256                 if (!(isp116x_read_reg32(isp116x, HCCMDSTAT) & HCCMDSTAT_HCR))
 
1260                 ERR("Software reset timeout\n");
 
1263         spin_unlock_irqrestore(&isp116x->lock, flags);
 
1267 static int isp116x_reset(struct usb_hcd *hcd)
 
1269         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
1272         int ret, timeout = 15 /* ms */ ;
 
1274         ret = isp116x_sw_reset(isp116x);
 
1278         t = jiffies + msecs_to_jiffies(timeout);
 
1279         while (time_before_eq(jiffies, t)) {
 
1281                 spin_lock_irq(&isp116x->lock);
 
1282                 clkrdy = isp116x_read_reg16(isp116x, HCuPINT) & HCuPINT_CLKRDY;
 
1283                 spin_unlock_irq(&isp116x->lock);
 
1288                 ERR("Clock not ready after %dms\n", timeout);
 
1289                 /* After sw_reset the clock won't report to be ready, if
 
1290                    H_WAKEUP pin is high. */
 
1291                 ERR("Please make sure that the H_WAKEUP pin is pulled low!\n");
 
1297 static void isp116x_stop(struct usb_hcd *hcd)
 
1299         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
1300         unsigned long flags;
 
1303         spin_lock_irqsave(&isp116x->lock, flags);
 
1304         isp116x_write_reg16(isp116x, HCuPINTENB, 0);
 
1306         /* Switch off ports' power, some devices don't come up
 
1307            after next 'insmod' without this */
 
1308         val = isp116x_read_reg32(isp116x, HCRHDESCA);
 
1309         val &= ~(RH_A_NPS | RH_A_PSM);
 
1310         isp116x_write_reg32(isp116x, HCRHDESCA, val);
 
1311         isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_LPS);
 
1312         spin_unlock_irqrestore(&isp116x->lock, flags);
 
1314         isp116x_sw_reset(isp116x);
 
1318   Configure the chip. The chip must be successfully reset by now.
 
1320 static int isp116x_start(struct usb_hcd *hcd)
 
1322         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
1323         struct isp116x_platform_data *board = isp116x->board;
 
1325         unsigned long flags;
 
1327         spin_lock_irqsave(&isp116x->lock, flags);
 
1329         /* clear interrupt status and disable all interrupt sources */
 
1330         isp116x_write_reg16(isp116x, HCuPINT, 0xff);
 
1331         isp116x_write_reg16(isp116x, HCuPINTENB, 0);
 
1333         val = isp116x_read_reg16(isp116x, HCCHIPID);
 
1334         if ((val & HCCHIPID_MASK) != HCCHIPID_MAGIC) {
 
1335                 ERR("Invalid chip ID %04x\n", val);
 
1336                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1340         /* To be removed in future */
 
1341         hcd->uses_new_polling = 1;
 
1343         isp116x_write_reg16(isp116x, HCITLBUFLEN, ISP116x_ITL_BUFSIZE);
 
1344         isp116x_write_reg16(isp116x, HCATLBUFLEN, ISP116x_ATL_BUFSIZE);
 
1347         val = HCHWCFG_INT_ENABLE | HCHWCFG_DBWIDTH(1);
 
1348         if (board->sel15Kres)
 
1349                 val |= HCHWCFG_15KRSEL;
 
1350         /* Remote wakeup won't work without working clock */
 
1351         if (board->remote_wakeup_enable)
 
1352                 val |= HCHWCFG_CLKNOTSTOP;
 
1353         if (board->oc_enable)
 
1354                 val |= HCHWCFG_ANALOG_OC;
 
1355         if (board->int_act_high)
 
1356                 val |= HCHWCFG_INT_POL;
 
1357         if (board->int_edge_triggered)
 
1358                 val |= HCHWCFG_INT_TRIGGER;
 
1359         isp116x_write_reg16(isp116x, HCHWCFG, val);
 
1361         /* ----- Root hub conf */
 
1362         val = (25 << 24) & RH_A_POTPGT;
 
1363         /* AN10003_1.pdf recommends RH_A_NPS (no power switching) to
 
1364            be always set. Yet, instead, we request individual port
 
1367         /* Report overcurrent per port */
 
1369         isp116x_write_reg32(isp116x, HCRHDESCA, val);
 
1370         isp116x->rhdesca = isp116x_read_reg32(isp116x, HCRHDESCA);
 
1373         isp116x_write_reg32(isp116x, HCRHDESCB, val);
 
1374         isp116x->rhdescb = isp116x_read_reg32(isp116x, HCRHDESCB);
 
1377         if (board->remote_wakeup_enable) {
 
1378                 if (!device_can_wakeup(hcd->self.controller))
 
1379                         device_init_wakeup(hcd->self.controller, 1);
 
1382         isp116x_write_reg32(isp116x, HCRHSTATUS, val);
 
1383         isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
 
1385         isp116x_write_reg32(isp116x, HCFMINTVL, 0x27782edf);
 
1387         hcd->state = HC_STATE_RUNNING;
 
1389         /* Set up interrupts */
 
1390         isp116x->intenb = HCINT_MIE | HCINT_RHSC | HCINT_UE;
 
1391         if (board->remote_wakeup_enable)
 
1392                 isp116x->intenb |= HCINT_RD;
 
1393         isp116x->irqenb = HCuPINT_ATL | HCuPINT_OPR;    /* | HCuPINT_SUSP; */
 
1394         isp116x_write_reg32(isp116x, HCINTENB, isp116x->intenb);
 
1395         isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
 
1397         /* Go operational */
 
1398         val = HCCONTROL_USB_OPER;
 
1399         if (board->remote_wakeup_enable)
 
1400                 val |= HCCONTROL_RWE;
 
1401         isp116x_write_reg32(isp116x, HCCONTROL, val);
 
1403         /* Disable ports to avoid race in device enumeration */
 
1404         isp116x_write_reg32(isp116x, HCRHPORT1, RH_PS_CCS);
 
1405         isp116x_write_reg32(isp116x, HCRHPORT2, RH_PS_CCS);
 
1407         isp116x_show_regs_log(isp116x);
 
1408         spin_unlock_irqrestore(&isp116x->lock, flags);
 
1414 static int isp116x_bus_suspend(struct usb_hcd *hcd)
 
1416         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
1417         unsigned long flags;
 
1421         spin_lock_irqsave(&isp116x->lock, flags);
 
1422         val = isp116x_read_reg32(isp116x, HCCONTROL);
 
1424         switch (val & HCCONTROL_HCFS) {
 
1425         case HCCONTROL_USB_OPER:
 
1426                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1427                 val &= (~HCCONTROL_HCFS & ~HCCONTROL_RWE);
 
1428                 val |= HCCONTROL_USB_SUSPEND;
 
1429                 if (device_may_wakeup(&hcd->self.root_hub->dev))
 
1430                         val |= HCCONTROL_RWE;
 
1431                 /* Wait for usb transfers to finish */
 
1433                 spin_lock_irqsave(&isp116x->lock, flags);
 
1434                 isp116x_write_reg32(isp116x, HCCONTROL, val);
 
1435                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1436                 /* Wait for devices to suspend */
 
1439         case HCCONTROL_USB_RESUME:
 
1440                 isp116x_write_reg32(isp116x, HCCONTROL,
 
1441                                     (val & ~HCCONTROL_HCFS) |
 
1442                                     HCCONTROL_USB_RESET);
 
1443         case HCCONTROL_USB_RESET:
 
1445         default:                /* HCCONTROL_USB_SUSPEND */
 
1446                 spin_unlock_irqrestore(&isp116x->lock, flags);
 
1453 static int isp116x_bus_resume(struct usb_hcd *hcd)
 
1455         struct isp116x *isp116x = hcd_to_isp116x(hcd);
 
1459         spin_lock_irq(&isp116x->lock);
 
1461         val = isp116x_read_reg32(isp116x, HCCONTROL);
 
1462         switch (val & HCCONTROL_HCFS) {
 
1463         case HCCONTROL_USB_SUSPEND:
 
1464                 val &= ~HCCONTROL_HCFS;
 
1465                 val |= HCCONTROL_USB_RESUME;
 
1466                 isp116x_write_reg32(isp116x, HCCONTROL, val);
 
1467         case HCCONTROL_USB_RESUME:
 
1469         case HCCONTROL_USB_OPER:
 
1470                 spin_unlock_irq(&isp116x->lock);
 
1471                 /* Without setting power_state here the
 
1472                    SUSPENDED state won't be removed from
 
1473                    sysfs/usbN/power.state as a response to remote
 
1474                    wakeup. Maybe in the future. */
 
1475                 hcd->self.root_hub->dev.power.power_state = PMSG_ON;
 
1478                 /* HCCONTROL_USB_RESET: this may happen, when during
 
1479                    suspension the HC lost power. Reinitialize completely */
 
1480                 spin_unlock_irq(&isp116x->lock);
 
1481                 DBG("Chip has been reset while suspended. Reinit from scratch.\n");
 
1484                 isp116x_hub_control(hcd, SetPortFeature,
 
1485                                     USB_PORT_FEAT_POWER, 1, NULL, 0);
 
1486                 if ((isp116x->rhdesca & RH_A_NDP) == 2)
 
1487                         isp116x_hub_control(hcd, SetPortFeature,
 
1488                                             USB_PORT_FEAT_POWER, 2, NULL, 0);
 
1489                 hcd->self.root_hub->dev.power.power_state = PMSG_ON;
 
1493         val = isp116x->rhdesca & RH_A_NDP;
 
1496                     isp116x_read_reg32(isp116x, val ? HCRHPORT2 : HCRHPORT1);
 
1497                 /* force global, not selective, resume */
 
1498                 if (!(stat & RH_PS_PSS))
 
1500                 DBG("%s: Resuming port %d\n", __func__, val);
 
1501                 isp116x_write_reg32(isp116x, RH_PS_POCI, val
 
1502                                     ? HCRHPORT2 : HCRHPORT1);
 
1504         spin_unlock_irq(&isp116x->lock);
 
1506         hcd->state = HC_STATE_RESUMING;
 
1509         /* Go operational */
 
1510         spin_lock_irq(&isp116x->lock);
 
1511         val = isp116x_read_reg32(isp116x, HCCONTROL);
 
1512         isp116x_write_reg32(isp116x, HCCONTROL,
 
1513                             (val & ~HCCONTROL_HCFS) | HCCONTROL_USB_OPER);
 
1514         spin_unlock_irq(&isp116x->lock);
 
1515         /* see analogous comment above */
 
1516         hcd->self.root_hub->dev.power.power_state = PMSG_ON;
 
1517         hcd->state = HC_STATE_RUNNING;
 
1524 #define isp116x_bus_suspend     NULL
 
1525 #define isp116x_bus_resume      NULL
 
1529 static struct hc_driver isp116x_hc_driver = {
 
1530         .description = hcd_name,
 
1531         .product_desc = "ISP116x Host Controller",
 
1532         .hcd_priv_size = sizeof(struct isp116x),
 
1537         .reset = isp116x_reset,
 
1538         .start = isp116x_start,
 
1539         .stop = isp116x_stop,
 
1541         .urb_enqueue = isp116x_urb_enqueue,
 
1542         .urb_dequeue = isp116x_urb_dequeue,
 
1543         .endpoint_disable = isp116x_endpoint_disable,
 
1545         .get_frame_number = isp116x_get_frame,
 
1547         .hub_status_data = isp116x_hub_status_data,
 
1548         .hub_control = isp116x_hub_control,
 
1549         .bus_suspend = isp116x_bus_suspend,
 
1550         .bus_resume = isp116x_bus_resume,
 
1553 /*----------------------------------------------------------------*/
 
1555 static int isp116x_remove(struct platform_device *pdev)
 
1557         struct usb_hcd *hcd = platform_get_drvdata(pdev);
 
1558         struct isp116x *isp116x;
 
1559         struct resource *res;
 
1563         isp116x = hcd_to_isp116x(hcd);
 
1564         remove_debug_file(isp116x);
 
1565         usb_remove_hcd(hcd);
 
1567         iounmap(isp116x->data_reg);
 
1568         res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
 
1569         release_mem_region(res->start, 2);
 
1570         iounmap(isp116x->addr_reg);
 
1571         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
1572         release_mem_region(res->start, 2);
 
1578 #define resource_len(r) (((r)->end - (r)->start) + 1)
 
1580 static int __init isp116x_probe(struct platform_device *pdev)
 
1582         struct usb_hcd *hcd;
 
1583         struct isp116x *isp116x;
 
1584         struct resource *addr, *data;
 
1585         void __iomem *addr_reg;
 
1586         void __iomem *data_reg;
 
1590         if (pdev->num_resources < 3) {
 
1595         data = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
1596         addr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
 
1597         irq = platform_get_irq(pdev, 0);
 
1598         if (!addr || !data || irq < 0) {
 
1603         if (pdev->dev.dma_mask) {
 
1604                 DBG("DMA not supported\n");
 
1609         if (!request_mem_region(addr->start, 2, hcd_name)) {
 
1613         addr_reg = ioremap(addr->start, resource_len(addr));
 
1614         if (addr_reg == NULL) {
 
1618         if (!request_mem_region(data->start, 2, hcd_name)) {
 
1622         data_reg = ioremap(data->start, resource_len(data));
 
1623         if (data_reg == NULL) {
 
1628         /* allocate and initialize hcd */
 
1629         hcd = usb_create_hcd(&isp116x_hc_driver, &pdev->dev, pdev->dev.bus_id);
 
1634         /* this rsrc_start is bogus */
 
1635         hcd->rsrc_start = addr->start;
 
1636         isp116x = hcd_to_isp116x(hcd);
 
1637         isp116x->data_reg = data_reg;
 
1638         isp116x->addr_reg = addr_reg;
 
1639         spin_lock_init(&isp116x->lock);
 
1640         INIT_LIST_HEAD(&isp116x->async);
 
1641         isp116x->board = pdev->dev.platform_data;
 
1643         if (!isp116x->board) {
 
1644                 ERR("Platform data structure not initialized\n");
 
1648         if (isp116x_check_platform_delay(isp116x)) {
 
1649                 ERR("USE_PLATFORM_DELAY defined, but delay function not "
 
1651                 ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
 
1656         ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
 
1660         ret = create_debug_file(isp116x);
 
1662                 ERR("Couldn't create debugfs entry\n");
 
1669         usb_remove_hcd(hcd);
 
1675         release_mem_region(data->start, 2);
 
1679         release_mem_region(addr->start, 2);
 
1681         ERR("init error, %d\n", ret);
 
1687   Suspend of platform device
 
1689 static int isp116x_suspend(struct platform_device *dev, pm_message_t state)
 
1691         VDBG("%s: state %x\n", __func__, state.event);
 
1692         dev->dev.power.power_state = state;
 
1697   Resume platform device
 
1699 static int isp116x_resume(struct platform_device *dev)
 
1701         VDBG("%s:  state %x\n", __func__, dev->power.power_state.event);
 
1702         dev->dev.power.power_state = PMSG_ON;
 
1708 #define isp116x_suspend    NULL
 
1709 #define isp116x_resume     NULL
 
1713 static struct platform_driver isp116x_driver = {
 
1714         .probe = isp116x_probe,
 
1715         .remove = isp116x_remove,
 
1716         .suspend = isp116x_suspend,
 
1717         .resume = isp116x_resume,
 
1719                    .name = (char *)hcd_name,
 
1723 /*-----------------------------------------------------------------*/
 
1725 static int __init isp116x_init(void)
 
1730         INFO("driver %s, %s\n", hcd_name, DRIVER_VERSION);
 
1731         return platform_driver_register(&isp116x_driver);
 
1734 module_init(isp116x_init);
 
1736 static void __exit isp116x_cleanup(void)
 
1738         platform_driver_unregister(&isp116x_driver);
 
1741 module_exit(isp116x_cleanup);