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