uboot/drivers/usb/gadget/pxa25x_udc.c
<<
>>
Prefs
   1/*
   2 * Intel PXA25x and IXP4xx on-chip full speed USB device controllers
   3 *
   4 * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
   5 * Copyright (C) 2003 Robert Schwebel, Pengutronix
   6 * Copyright (C) 2003 Benedikt Spranger, Pengutronix
   7 * Copyright (C) 2003 David Brownell
   8 * Copyright (C) 2003 Joshua Wise
   9 * Copyright (C) 2012 Lukasz Dalek <luk0104@gmail.com>
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License as published by
  13 * the Free Software Foundation; either version 2 of the License, or
  14 * (at your option) any later version.
  15 *
  16 * This program is distributed in the hope that it will be useful,
  17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19 * GNU General Public License for more details.
  20 *
  21 * You should have received a copy of the GNU General Public License
  22 * along with this program; if not, write to the Free Software
  23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24 *
  25 * MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell");
  26 */
  27
  28#define CONFIG_USB_PXA25X_SMALL
  29#define DRIVER_NAME "pxa25x_udc_linux"
  30#define ARCH_HAS_PREFETCH
  31
  32#include <common.h>
  33#include <errno.h>
  34#include <asm/byteorder.h>
  35#include <asm/system.h>
  36#include <asm/mach-types.h>
  37#include <asm/unaligned.h>
  38#include <linux/compat.h>
  39#include <malloc.h>
  40#include <asm/io.h>
  41#include <asm/arch/pxa.h>
  42
  43#include <linux/usb/ch9.h>
  44#include <linux/usb/gadget.h>
  45#include <usb/lin_gadget_compat.h>
  46#include <asm/arch/pxa-regs.h>
  47
  48#include "pxa25x_udc.h"
  49
  50/*
  51 * This driver handles the USB Device Controller (UDC) in Intel's PXA 25x
  52 * series processors.  The UDC for the IXP 4xx series is very similar.
  53 * There are fifteen endpoints, in addition to ep0.
  54 *
  55 * Such controller drivers work with a gadget driver.  The gadget driver
  56 * returns descriptors, implements configuration and data protocols used
  57 * by the host to interact with this device, and allocates endpoints to
  58 * the different protocol interfaces.  The controller driver virtualizes
  59 * usb hardware so that the gadget drivers will be more portable.
  60 *
  61 * This UDC hardware wants to implement a bit too much USB protocol, so
  62 * it constrains the sorts of USB configuration change events that work.
  63 * The errata for these chips are misleading; some "fixed" bugs from
  64 * pxa250 a0/a1 b0/b1/b2 sure act like they're still there.
  65 *
  66 * Note that the UDC hardware supports DMA (except on IXP) but that's
  67 * not used here.  IN-DMA (to host) is simple enough, when the data is
  68 * suitably aligned (16 bytes) ... the network stack doesn't do that,
  69 * other software can.  OUT-DMA is buggy in most chip versions, as well
  70 * as poorly designed (data toggle not automatic).  So this driver won't
  71 * bother using DMA.  (Mostly-working IN-DMA support was available in
  72 * kernels before 2.6.23, but was never enabled or well tested.)
  73 */
  74
  75#define DRIVER_VERSION  "18-August-2012"
  76#define DRIVER_DESC     "PXA 25x USB Device Controller driver"
  77
  78static const char driver_name[] = "pxa25x_udc";
  79static const char ep0name[] = "ep0";
  80
  81/* Watchdog */
  82static inline void start_watchdog(struct pxa25x_udc *udc)
  83{
  84        debug("Started watchdog\n");
  85        udc->watchdog.base = get_timer(0);
  86        udc->watchdog.running = 1;
  87}
  88
  89static inline void stop_watchdog(struct pxa25x_udc *udc)
  90{
  91        udc->watchdog.running = 0;
  92        debug("Stopped watchdog\n");
  93}
  94
  95static inline void test_watchdog(struct pxa25x_udc *udc)
  96{
  97        if (!udc->watchdog.running)
  98                return;
  99
 100        debug("watchdog %ld %ld\n", get_timer(udc->watchdog.base),
 101                udc->watchdog.period);
 102
 103        if (get_timer(udc->watchdog.base) >= udc->watchdog.period) {
 104                stop_watchdog(udc);
 105                udc->watchdog.function(udc);
 106        }
 107}
 108
 109static void udc_watchdog(struct pxa25x_udc *dev)
 110{
 111        uint32_t udccs0 = readl(&dev->regs->udccs[0]);
 112
 113        debug("Fired up udc_watchdog\n");
 114
 115        local_irq_disable();
 116        if (dev->ep0state == EP0_STALL
 117                        && (udccs0 & UDCCS0_FST) == 0
 118                        && (udccs0 & UDCCS0_SST) == 0) {
 119                writel(UDCCS0_FST|UDCCS0_FTF, &dev->regs->udccs[0]);
 120                debug("ep0 re-stall\n");
 121                start_watchdog(dev);
 122        }
 123        local_irq_enable();
 124}
 125
 126#ifdef DEBUG
 127
 128static const char * const state_name[] = {
 129        "EP0_IDLE",
 130        "EP0_IN_DATA_PHASE", "EP0_OUT_DATA_PHASE",
 131        "EP0_END_XFER", "EP0_STALL"
 132};
 133
 134static void
 135dump_udccr(const char *label)
 136{
 137        u32 udccr = readl(&UDC_REGS->udccr);
 138        debug("%s %02X =%s%s%s%s%s%s%s%s\n",
 139                label, udccr,
 140                (udccr & UDCCR_REM) ? " rem" : "",
 141                (udccr & UDCCR_RSTIR) ? " rstir" : "",
 142                (udccr & UDCCR_SRM) ? " srm" : "",
 143                (udccr & UDCCR_SUSIR) ? " susir" : "",
 144                (udccr & UDCCR_RESIR) ? " resir" : "",
 145                (udccr & UDCCR_RSM) ? " rsm" : "",
 146                (udccr & UDCCR_UDA) ? " uda" : "",
 147                (udccr & UDCCR_UDE) ? " ude" : "");
 148}
 149
 150static void
 151dump_udccs0(const char *label)
 152{
 153        u32 udccs0 = readl(&UDC_REGS->udccs[0]);
 154
 155        debug("%s %s %02X =%s%s%s%s%s%s%s%s\n",
 156                label, state_name[the_controller->ep0state], udccs0,
 157                (udccs0 & UDCCS0_SA) ? " sa" : "",
 158                (udccs0 & UDCCS0_RNE) ? " rne" : "",
 159                (udccs0 & UDCCS0_FST) ? " fst" : "",
 160                (udccs0 & UDCCS0_SST) ? " sst" : "",
 161                (udccs0 & UDCCS0_DRWF) ? " dwrf" : "",
 162                (udccs0 & UDCCS0_FTF) ? " ftf" : "",
 163                (udccs0 & UDCCS0_IPR) ? " ipr" : "",
 164                (udccs0 & UDCCS0_OPR) ? " opr" : "");
 165}
 166
 167static void
 168dump_state(struct pxa25x_udc *dev)
 169{
 170        u32 tmp;
 171        unsigned i;
 172
 173        debug("%s, uicr %02X.%02X, usir %02X.%02x, ufnr %02X.%02X\n",
 174                state_name[dev->ep0state],
 175                readl(&UDC_REGS->uicr1), readl(&UDC_REGS->uicr0),
 176                readl(&UDC_REGS->usir1), readl(&UDC_REGS->usir0),
 177                readl(&UDC_REGS->ufnrh), readl(&UDC_REGS->ufnrl));
 178        dump_udccr("udccr");
 179        if (dev->has_cfr) {
 180                tmp = readl(&UDC_REGS->udccfr);
 181                debug("udccfr %02X =%s%s\n", tmp,
 182                        (tmp & UDCCFR_AREN) ? " aren" : "",
 183                        (tmp & UDCCFR_ACM) ? " acm" : "");
 184        }
 185
 186        if (!dev->driver) {
 187                debug("no gadget driver bound\n");
 188                return;
 189        } else
 190                debug("ep0 driver '%s'\n", "ether");
 191
 192        dump_udccs0("udccs0");
 193        debug("ep0 IN %lu/%lu, OUT %lu/%lu\n",
 194                dev->stats.write.bytes, dev->stats.write.ops,
 195                dev->stats.read.bytes, dev->stats.read.ops);
 196
 197        for (i = 1; i < PXA_UDC_NUM_ENDPOINTS; i++) {
 198                if (dev->ep[i].desc == NULL)
 199                        continue;
 200                debug("udccs%d = %02x\n", i, *dev->ep->reg_udccs);
 201        }
 202}
 203
 204#else /* DEBUG */
 205
 206static inline void dump_udccr(const char *label) { }
 207static inline void dump_udccs0(const char *label) { }
 208static inline void dump_state(struct pxa25x_udc *dev) { }
 209
 210#endif /* DEBUG */
 211
 212/*
 213 * ---------------------------------------------------------------------------
 214 *      endpoint related parts of the api to the usb controller hardware,
 215 *      used by gadget driver; and the inner talker-to-hardware core.
 216 * ---------------------------------------------------------------------------
 217 */
 218
 219static void pxa25x_ep_fifo_flush(struct usb_ep *ep);
 220static void nuke(struct pxa25x_ep *, int status);
 221
 222/* one GPIO should control a D+ pullup, so host sees this device (or not) */
 223static void pullup_off(void)
 224{
 225        struct pxa2xx_udc_mach_info *mach = the_controller->mach;
 226
 227        if (mach->udc_command)
 228                mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
 229}
 230
 231static void pullup_on(void)
 232{
 233        struct pxa2xx_udc_mach_info *mach = the_controller->mach;
 234
 235        if (mach->udc_command)
 236                mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
 237}
 238
 239static void pio_irq_enable(int bEndpointAddress)
 240{
 241        bEndpointAddress &= 0xf;
 242        if (bEndpointAddress < 8) {
 243                clrbits_le32(&the_controller->regs->uicr0,
 244                        1 << bEndpointAddress);
 245        } else {
 246                bEndpointAddress -= 8;
 247                clrbits_le32(&the_controller->regs->uicr1,
 248                        1 << bEndpointAddress);
 249        }
 250}
 251
 252static void pio_irq_disable(int bEndpointAddress)
 253{
 254        bEndpointAddress &= 0xf;
 255        if (bEndpointAddress < 8) {
 256                setbits_le32(&the_controller->regs->uicr0,
 257                        1 << bEndpointAddress);
 258        } else {
 259                bEndpointAddress -= 8;
 260                setbits_le32(&the_controller->regs->uicr1,
 261                        1 << bEndpointAddress);
 262        }
 263}
 264
 265static inline void udc_set_mask_UDCCR(int mask)
 266{
 267        /*
 268         * The UDCCR reg contains mask and interrupt status bits,
 269         * so using '|=' isn't safe as it may ack an interrupt.
 270         */
 271        const uint32_t mask_bits = UDCCR_REM | UDCCR_SRM | UDCCR_UDE;
 272
 273        mask &= mask_bits;
 274        clrsetbits_le32(&the_controller->regs->udccr, ~mask_bits, mask);
 275}
 276
 277static inline void udc_clear_mask_UDCCR(int mask)
 278{
 279        const uint32_t mask_bits = UDCCR_REM | UDCCR_SRM | UDCCR_UDE;
 280
 281        mask = ~mask & mask_bits;
 282        clrbits_le32(&the_controller->regs->udccr, ~mask);
 283}
 284
 285static inline void udc_ack_int_UDCCR(int mask)
 286{
 287        const uint32_t mask_bits = UDCCR_REM | UDCCR_SRM | UDCCR_UDE;
 288
 289        mask &= ~mask_bits;
 290        clrsetbits_le32(&the_controller->regs->udccr, ~mask_bits, mask);
 291}
 292
 293/*
 294 * endpoint enable/disable
 295 *
 296 * we need to verify the descriptors used to enable endpoints.  since pxa25x
 297 * endpoint configurations are fixed, and are pretty much always enabled,
 298 * there's not a lot to manage here.
 299 *
 300 * because pxa25x can't selectively initialize bulk (or interrupt) endpoints,
 301 * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except
 302 * for a single interface (with only the default altsetting) and for gadget
 303 * drivers that don't halt endpoints (not reset by set_interface).  that also
 304 * means that if you use ISO, you must violate the USB spec rule that all
 305 * iso endpoints must be in non-default altsettings.
 306 */
 307static int pxa25x_ep_enable(struct usb_ep *_ep,
 308                const struct usb_endpoint_descriptor *desc)
 309{
 310        struct pxa25x_ep *ep;
 311        struct pxa25x_udc *dev;
 312
 313        ep = container_of(_ep, struct pxa25x_ep, ep);
 314        if (!_ep || !desc || ep->desc || _ep->name == ep0name
 315                        || desc->bDescriptorType != USB_DT_ENDPOINT
 316                        || ep->bEndpointAddress != desc->bEndpointAddress
 317                        || ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) {
 318                printf("%s, bad ep or descriptor\n", __func__);
 319                return -EINVAL;
 320        }
 321
 322        /* xfer types must match, except that interrupt ~= bulk */
 323        if (ep->bmAttributes != desc->bmAttributes
 324                        && ep->bmAttributes != USB_ENDPOINT_XFER_BULK
 325                        && desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
 326                printf("%s, %s type mismatch\n", __func__, _ep->name);
 327                return -EINVAL;
 328        }
 329
 330        /* hardware _could_ do smaller, but driver doesn't */
 331        if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK
 332                                && le16_to_cpu(desc->wMaxPacketSize)
 333                                                != BULK_FIFO_SIZE)
 334                        || !desc->wMaxPacketSize) {
 335                printf("%s, bad %s maxpacket\n", __func__, _ep->name);
 336                return -ERANGE;
 337        }
 338
 339        dev = ep->dev;
 340        if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) {
 341                printf("%s, bogus device state\n", __func__);
 342                return -ESHUTDOWN;
 343        }
 344
 345        ep->desc = desc;
 346        ep->stopped = 0;
 347        ep->pio_irqs = 0;
 348        ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
 349
 350        /* flush fifo (mostly for OUT buffers) */
 351        pxa25x_ep_fifo_flush(_ep);
 352
 353        /* ... reset halt state too, if we could ... */
 354
 355        debug("enabled %s\n", _ep->name);
 356        return 0;
 357}
 358
 359static int pxa25x_ep_disable(struct usb_ep *_ep)
 360{
 361        struct pxa25x_ep *ep;
 362        unsigned long flags;
 363
 364        ep = container_of(_ep, struct pxa25x_ep, ep);
 365        if (!_ep || !ep->desc) {
 366                printf("%s, %s not enabled\n", __func__,
 367                        _ep ? ep->ep.name : NULL);
 368                return -EINVAL;
 369        }
 370        local_irq_save(flags);
 371
 372        nuke(ep, -ESHUTDOWN);
 373
 374        /* flush fifo (mostly for IN buffers) */
 375        pxa25x_ep_fifo_flush(_ep);
 376
 377        ep->desc = NULL;
 378        ep->stopped = 1;
 379
 380        local_irq_restore(flags);
 381        debug("%s disabled\n", _ep->name);
 382        return 0;
 383}
 384
 385/*-------------------------------------------------------------------------*/
 386
 387/*
 388 * for the pxa25x, these can just wrap kmalloc/kfree.  gadget drivers
 389 * must still pass correctly initialized endpoints, since other controller
 390 * drivers may care about how it's currently set up (dma issues etc).
 391 */
 392
 393/*
 394 *      pxa25x_ep_alloc_request - allocate a request data structure
 395 */
 396static struct usb_request *
 397pxa25x_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 398{
 399        struct pxa25x_request *req;
 400
 401        req = kzalloc(sizeof(*req), gfp_flags);
 402        if (!req)
 403                return NULL;
 404
 405        INIT_LIST_HEAD(&req->queue);
 406        return &req->req;
 407}
 408
 409
 410/*
 411 *      pxa25x_ep_free_request - deallocate a request data structure
 412 */
 413static void
 414pxa25x_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
 415{
 416        struct pxa25x_request   *req;
 417
 418        req = container_of(_req, struct pxa25x_request, req);
 419        WARN_ON(!list_empty(&req->queue));
 420        kfree(req);
 421}
 422
 423/*-------------------------------------------------------------------------*/
 424
 425/*
 426 *      done - retire a request; caller blocked irqs
 427 */
 428static void done(struct pxa25x_ep *ep, struct pxa25x_request *req, int status)
 429{
 430        unsigned stopped = ep->stopped;
 431
 432        list_del_init(&req->queue);
 433
 434        if (likely(req->req.status == -EINPROGRESS))
 435                req->req.status = status;
 436        else
 437                status = req->req.status;
 438
 439        if (status && status != -ESHUTDOWN)
 440                debug("complete %s req %p stat %d len %u/%u\n",
 441                        ep->ep.name, &req->req, status,
 442                        req->req.actual, req->req.length);
 443
 444        /* don't modify queue heads during completion callback */
 445        ep->stopped = 1;
 446        req->req.complete(&ep->ep, &req->req);
 447        ep->stopped = stopped;
 448}
 449
 450
 451static inline void ep0_idle(struct pxa25x_udc *dev)
 452{
 453        dev->ep0state = EP0_IDLE;
 454}
 455
 456static int
 457write_packet(u32 *uddr, struct pxa25x_request *req, unsigned max)
 458{
 459        u8 *buf;
 460        unsigned length, count;
 461
 462        debug("%s(): uddr %p\n", __func__, uddr);
 463
 464        buf = req->req.buf + req->req.actual;
 465        prefetch(buf);
 466
 467        /* how big will this packet be? */
 468        length = min(req->req.length - req->req.actual, max);
 469        req->req.actual += length;
 470
 471        count = length;
 472        while (likely(count--))
 473                writeb(*buf++, uddr);
 474
 475        return length;
 476}
 477
 478/*
 479 * write to an IN endpoint fifo, as many packets as possible.
 480 * irqs will use this to write the rest later.
 481 * caller guarantees at least one packet buffer is ready (or a zlp).
 482 */
 483static int
 484write_fifo(struct pxa25x_ep *ep, struct pxa25x_request *req)
 485{
 486        unsigned max;
 487
 488        max = le16_to_cpu(ep->desc->wMaxPacketSize);
 489        do {
 490                unsigned count;
 491                int is_last, is_short;
 492
 493                count = write_packet(ep->reg_uddr, req, max);
 494
 495                /* last packet is usually short (or a zlp) */
 496                if (unlikely(count != max))
 497                        is_last = is_short = 1;
 498                else {
 499                        if (likely(req->req.length != req->req.actual)
 500                                        || req->req.zero)
 501                                is_last = 0;
 502                        else
 503                                is_last = 1;
 504                        /* interrupt/iso maxpacket may not fill the fifo */
 505                        is_short = unlikely(max < ep->fifo_size);
 506                }
 507
 508                debug_cond(NOISY, "wrote %s %d bytes%s%s %d left %p\n",
 509                        ep->ep.name, count,
 510                        is_last ? "/L" : "", is_short ? "/S" : "",
 511                        req->req.length - req->req.actual, req);
 512
 513                /*
 514                 * let loose that packet. maybe try writing another one,
 515                 * double buffering might work.  TSP, TPC, and TFS
 516                 * bit values are the same for all normal IN endpoints.
 517                 */
 518                writel(UDCCS_BI_TPC, ep->reg_udccs);
 519                if (is_short)
 520                        writel(UDCCS_BI_TSP, ep->reg_udccs);
 521
 522                /* requests complete when all IN data is in the FIFO */
 523                if (is_last) {
 524                        done(ep, req, 0);
 525                        if (list_empty(&ep->queue))
 526                                pio_irq_disable(ep->bEndpointAddress);
 527                        return 1;
 528                }
 529
 530                /*
 531                 * TODO experiment: how robust can fifo mode tweaking be?
 532                 * double buffering is off in the default fifo mode, which
 533                 * prevents TFS from being set here.
 534                 */
 535
 536        } while (readl(ep->reg_udccs) & UDCCS_BI_TFS);
 537        return 0;
 538}
 539
 540/*
 541 * caller asserts req->pending (ep0 irq status nyet cleared); starts
 542 * ep0 data stage.  these chips want very simple state transitions.
 543 */
 544static inline
 545void ep0start(struct pxa25x_udc *dev, u32 flags, const char *tag)
 546{
 547        writel(flags|UDCCS0_SA|UDCCS0_OPR, &dev->regs->udccs[0]);
 548        writel(USIR0_IR0, &dev->regs->usir0);
 549        dev->req_pending = 0;
 550        debug_cond(NOISY, "%s() %s, udccs0: %02x/%02x usir: %X.%X\n",
 551                __func__, tag, readl(&dev->regs->udccs[0]), flags,
 552                readl(&dev->regs->usir1), readl(&dev->regs->usir0));
 553}
 554
 555static int
 556write_ep0_fifo(struct pxa25x_ep *ep, struct pxa25x_request *req)
 557{
 558        unsigned count;
 559        int is_short;
 560
 561        count = write_packet(&ep->dev->regs->uddr0, req, EP0_FIFO_SIZE);
 562        ep->dev->stats.write.bytes += count;
 563
 564        /* last packet "must be" short (or a zlp) */
 565        is_short = (count != EP0_FIFO_SIZE);
 566
 567        debug_cond(NOISY, "ep0in %d bytes %d left %p\n", count,
 568                req->req.length - req->req.actual, req);
 569
 570        if (unlikely(is_short)) {
 571                if (ep->dev->req_pending)
 572                        ep0start(ep->dev, UDCCS0_IPR, "short IN");
 573                else
 574                        writel(UDCCS0_IPR, &ep->dev->regs->udccs[0]);
 575
 576                count = req->req.length;
 577                done(ep, req, 0);
 578                ep0_idle(ep->dev);
 579
 580                /*
 581                 * This seems to get rid of lost status irqs in some cases:
 582                 * host responds quickly, or next request involves config
 583                 * change automagic, or should have been hidden, or ...
 584                 *
 585                 * FIXME get rid of all udelays possible...
 586                 */
 587                if (count >= EP0_FIFO_SIZE) {
 588                        count = 100;
 589                        do {
 590                                if ((readl(&ep->dev->regs->udccs[0]) &
 591                                     UDCCS0_OPR) != 0) {
 592                                        /* clear OPR, generate ack */
 593                                        writel(UDCCS0_OPR,
 594                                                &ep->dev->regs->udccs[0]);
 595                                        break;
 596                                }
 597                                count--;
 598                                udelay(1);
 599                        } while (count);
 600                }
 601        } else if (ep->dev->req_pending)
 602                ep0start(ep->dev, 0, "IN");
 603
 604        return is_short;
 605}
 606
 607
 608/*
 609 * read_fifo -  unload packet(s) from the fifo we use for usb OUT
 610 * transfers and put them into the request.  caller should have made
 611 * sure there's at least one packet ready.
 612 *
 613 * returns true if the request completed because of short packet or the
 614 * request buffer having filled (and maybe overran till end-of-packet).
 615 */
 616static int
 617read_fifo(struct pxa25x_ep *ep, struct pxa25x_request *req)
 618{
 619        u32 udccs;
 620        u8 *buf;
 621        unsigned bufferspace, count, is_short;
 622
 623        for (;;) {
 624                /*
 625                 * make sure there's a packet in the FIFO.
 626                 * UDCCS_{BO,IO}_RPC are all the same bit value.
 627                 * UDCCS_{BO,IO}_RNE are all the same bit value.
 628                 */
 629                udccs = readl(ep->reg_udccs);
 630                if (unlikely((udccs & UDCCS_BO_RPC) == 0))
 631                        break;
 632                buf = req->req.buf + req->req.actual;
 633                prefetchw(buf);
 634                bufferspace = req->req.length - req->req.actual;
 635
 636                /* read all bytes from this packet */
 637                if (likely(udccs & UDCCS_BO_RNE)) {
 638                        count = 1 + (0x0ff & readl(ep->reg_ubcr));
 639                        req->req.actual += min(count, bufferspace);
 640                } else /* zlp */
 641                        count = 0;
 642                is_short = (count < ep->ep.maxpacket);
 643                debug_cond(NOISY, "read %s %02x, %d bytes%s req %p %d/%d\n",
 644                        ep->ep.name, udccs, count,
 645                        is_short ? "/S" : "",
 646                        req, req->req.actual, req->req.length);
 647                while (likely(count-- != 0)) {
 648                        u8 byte = readb(ep->reg_uddr);
 649
 650                        if (unlikely(bufferspace == 0)) {
 651                                /*
 652                                 * this happens when the driver's buffer
 653                                 * is smaller than what the host sent.
 654                                 * discard the extra data.
 655                                 */
 656                                if (req->req.status != -EOVERFLOW)
 657                                        printf("%s overflow %d\n",
 658                                                ep->ep.name, count);
 659                                req->req.status = -EOVERFLOW;
 660                        } else {
 661                                *buf++ = byte;
 662                                bufferspace--;
 663                        }
 664                }
 665                writel(UDCCS_BO_RPC, ep->reg_udccs);
 666                /* RPC/RSP/RNE could now reflect the other packet buffer */
 667
 668                /* iso is one request per packet */
 669                if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
 670                        if (udccs & UDCCS_IO_ROF)
 671                                req->req.status = -EHOSTUNREACH;
 672                        /* more like "is_done" */
 673                        is_short = 1;
 674                }
 675
 676                /* completion */
 677                if (is_short || req->req.actual == req->req.length) {
 678                        done(ep, req, 0);
 679                        if (list_empty(&ep->queue))
 680                                pio_irq_disable(ep->bEndpointAddress);
 681                        return 1;
 682                }
 683
 684                /* finished that packet.  the next one may be waiting... */
 685        }
 686        return 0;
 687}
 688
 689/*
 690 * special ep0 version of the above.  no UBCR0 or double buffering; status
 691 * handshaking is magic.  most device protocols don't need control-OUT.
 692 * CDC vendor commands (and RNDIS), mass storage CB/CBI, and some other
 693 * protocols do use them.
 694 */
 695static int
 696read_ep0_fifo(struct pxa25x_ep *ep, struct pxa25x_request *req)
 697{
 698        u8 *buf, byte;
 699        unsigned bufferspace;
 700
 701        buf = req->req.buf + req->req.actual;
 702        bufferspace = req->req.length - req->req.actual;
 703
 704        while (readl(&ep->dev->regs->udccs[0]) & UDCCS0_RNE) {
 705                byte = (u8)readb(&ep->dev->regs->uddr0);
 706
 707                if (unlikely(bufferspace == 0)) {
 708                        /*
 709                         * this happens when the driver's buffer
 710                         * is smaller than what the host sent.
 711                         * discard the extra data.
 712                         */
 713                        if (req->req.status != -EOVERFLOW)
 714                                printf("%s overflow\n", ep->ep.name);
 715                        req->req.status = -EOVERFLOW;
 716                } else {
 717                        *buf++ = byte;
 718                        req->req.actual++;
 719                        bufferspace--;
 720                }
 721        }
 722
 723        writel(UDCCS0_OPR | UDCCS0_IPR, &ep->dev->regs->udccs[0]);
 724
 725        /* completion */
 726        if (req->req.actual >= req->req.length)
 727                return 1;
 728
 729        /* finished that packet.  the next one may be waiting... */
 730        return 0;
 731}
 732
 733/*-------------------------------------------------------------------------*/
 734
 735static int
 736pxa25x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
 737{
 738        struct pxa25x_request *req;
 739        struct pxa25x_ep *ep;
 740        struct pxa25x_udc *dev;
 741        unsigned long flags;
 742
 743        req = container_of(_req, struct pxa25x_request, req);
 744        if (unlikely(!_req || !_req->complete || !_req->buf
 745                        || !list_empty(&req->queue))) {
 746                printf("%s, bad params\n", __func__);
 747                return -EINVAL;
 748        }
 749
 750        ep = container_of(_ep, struct pxa25x_ep, ep);
 751        if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) {
 752                printf("%s, bad ep\n", __func__);
 753                return -EINVAL;
 754        }
 755
 756        dev = ep->dev;
 757        if (unlikely(!dev->driver
 758                        || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
 759                printf("%s, bogus device state\n", __func__);
 760                return -ESHUTDOWN;
 761        }
 762
 763        /*
 764         * iso is always one packet per request, that's the only way
 765         * we can report per-packet status.  that also helps with dma.
 766         */
 767        if (unlikely(ep->bmAttributes == USB_ENDPOINT_XFER_ISOC
 768                        && req->req.length >
 769                        le16_to_cpu(ep->desc->wMaxPacketSize)))
 770                return -EMSGSIZE;
 771
 772        debug_cond(NOISY, "%s queue req %p, len %d buf %p\n",
 773                _ep->name, _req, _req->length, _req->buf);
 774
 775        local_irq_save(flags);
 776
 777        _req->status = -EINPROGRESS;
 778        _req->actual = 0;
 779
 780        /* kickstart this i/o queue? */
 781        if (list_empty(&ep->queue) && !ep->stopped) {
 782                if (ep->desc == NULL/* ep0 */) {
 783                        unsigned length = _req->length;
 784
 785                        switch (dev->ep0state) {
 786                        case EP0_IN_DATA_PHASE:
 787                                dev->stats.write.ops++;
 788                                if (write_ep0_fifo(ep, req))
 789                                        req = NULL;
 790                                break;
 791
 792                        case EP0_OUT_DATA_PHASE:
 793                                dev->stats.read.ops++;
 794                                /* messy ... */
 795                                if (dev->req_config) {
 796                                        debug("ep0 config ack%s\n",
 797                                                dev->has_cfr ?  "" : " raced");
 798                                        if (dev->has_cfr)
 799                                                writel(UDCCFR_AREN|UDCCFR_ACM
 800                                                        |UDCCFR_MB1,
 801                                                        &ep->dev->regs->udccfr);
 802                                        done(ep, req, 0);
 803                                        dev->ep0state = EP0_END_XFER;
 804                                        local_irq_restore(flags);
 805                                        return 0;
 806                                }
 807                                if (dev->req_pending)
 808                                        ep0start(dev, UDCCS0_IPR, "OUT");
 809                                if (length == 0 ||
 810                                                ((readl(
 811                                                &ep->dev->regs->udccs[0])
 812                                                & UDCCS0_RNE) != 0
 813                                                && read_ep0_fifo(ep, req))) {
 814                                        ep0_idle(dev);
 815                                        done(ep, req, 0);
 816                                        req = NULL;
 817                                }
 818                                break;
 819
 820                        default:
 821                                printf("ep0 i/o, odd state %d\n",
 822                                        dev->ep0state);
 823                                local_irq_restore(flags);
 824                                return -EL2HLT;
 825                        }
 826                /* can the FIFO can satisfy the request immediately? */
 827                } else if ((ep->bEndpointAddress & USB_DIR_IN) != 0) {
 828                        if ((readl(ep->reg_udccs) & UDCCS_BI_TFS) != 0
 829                                        && write_fifo(ep, req))
 830                                req = NULL;
 831                } else if ((readl(ep->reg_udccs) & UDCCS_BO_RFS) != 0
 832                                && read_fifo(ep, req)) {
 833                        req = NULL;
 834                }
 835
 836                if (likely(req && ep->desc))
 837                        pio_irq_enable(ep->bEndpointAddress);
 838        }
 839
 840        /* pio or dma irq handler advances the queue. */
 841        if (likely(req != NULL))
 842                list_add_tail(&req->queue, &ep->queue);
 843        local_irq_restore(flags);
 844
 845        return 0;
 846}
 847
 848
 849/*
 850 *      nuke - dequeue ALL requests
 851 */
 852static void nuke(struct pxa25x_ep *ep, int status)
 853{
 854        struct pxa25x_request *req;
 855
 856        /* called with irqs blocked */
 857        while (!list_empty(&ep->queue)) {
 858                req = list_entry(ep->queue.next,
 859                                struct pxa25x_request,
 860                                queue);
 861                done(ep, req, status);
 862        }
 863        if (ep->desc)
 864                pio_irq_disable(ep->bEndpointAddress);
 865}
 866
 867
 868/* dequeue JUST ONE request */
 869static int pxa25x_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 870{
 871        struct pxa25x_ep *ep;
 872        struct pxa25x_request *req;
 873        unsigned long flags;
 874
 875        ep = container_of(_ep, struct pxa25x_ep, ep);
 876        if (!_ep || ep->ep.name == ep0name)
 877                return -EINVAL;
 878
 879        local_irq_save(flags);
 880
 881        /* make sure it's actually queued on this endpoint */
 882        list_for_each_entry(req, &ep->queue, queue) {
 883                if (&req->req == _req)
 884                        break;
 885        }
 886        if (&req->req != _req) {
 887                local_irq_restore(flags);
 888                return -EINVAL;
 889        }
 890
 891        done(ep, req, -ECONNRESET);
 892
 893        local_irq_restore(flags);
 894        return 0;
 895}
 896
 897/*-------------------------------------------------------------------------*/
 898
 899static int pxa25x_ep_set_halt(struct usb_ep *_ep, int value)
 900{
 901        struct pxa25x_ep *ep;
 902        unsigned long flags;
 903
 904        ep = container_of(_ep, struct pxa25x_ep, ep);
 905        if (unlikely(!_ep
 906                        || (!ep->desc && ep->ep.name != ep0name))
 907                        || ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
 908                printf("%s, bad ep\n", __func__);
 909                return -EINVAL;
 910        }
 911        if (value == 0) {
 912                /*
 913                 * this path (reset toggle+halt) is needed to implement
 914                 * SET_INTERFACE on normal hardware.  but it can't be
 915                 * done from software on the PXA UDC, and the hardware
 916                 * forgets to do it as part of SET_INTERFACE automagic.
 917                 */
 918                printf("only host can clear %s halt\n", _ep->name);
 919                return -EROFS;
 920        }
 921
 922        local_irq_save(flags);
 923
 924        if ((ep->bEndpointAddress & USB_DIR_IN) != 0
 925                        && ((readl(ep->reg_udccs) & UDCCS_BI_TFS) == 0
 926                           || !list_empty(&ep->queue))) {
 927                local_irq_restore(flags);
 928                return -EAGAIN;
 929        }
 930
 931        /* FST bit is the same for control, bulk in, bulk out, interrupt in */
 932        writel(UDCCS_BI_FST|UDCCS_BI_FTF, ep->reg_udccs);
 933
 934        /* ep0 needs special care */
 935        if (!ep->desc) {
 936                start_watchdog(ep->dev);
 937                ep->dev->req_pending = 0;
 938                ep->dev->ep0state = EP0_STALL;
 939
 940        /* and bulk/intr endpoints like dropping stalls too */
 941        } else {
 942                unsigned i;
 943                for (i = 0; i < 1000; i += 20) {
 944                        if (readl(ep->reg_udccs) & UDCCS_BI_SST)
 945                                break;
 946                        udelay(20);
 947                }
 948        }
 949        local_irq_restore(flags);
 950
 951        debug("%s halt\n", _ep->name);
 952        return 0;
 953}
 954
 955static int pxa25x_ep_fifo_status(struct usb_ep *_ep)
 956{
 957        struct pxa25x_ep        *ep;
 958
 959        ep = container_of(_ep, struct pxa25x_ep, ep);
 960        if (!_ep) {
 961                printf("%s, bad ep\n", __func__);
 962                return -ENODEV;
 963        }
 964        /* pxa can't report unclaimed bytes from IN fifos */
 965        if ((ep->bEndpointAddress & USB_DIR_IN) != 0)
 966                return -EOPNOTSUPP;
 967        if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN
 968                        || (readl(ep->reg_udccs) & UDCCS_BO_RFS) == 0)
 969                return 0;
 970        else
 971                return (readl(ep->reg_ubcr) & 0xfff) + 1;
 972}
 973
 974static void pxa25x_ep_fifo_flush(struct usb_ep *_ep)
 975{
 976        struct pxa25x_ep        *ep;
 977
 978        ep = container_of(_ep, struct pxa25x_ep, ep);
 979        if (!_ep || ep->ep.name == ep0name || !list_empty(&ep->queue)) {
 980                printf("%s, bad ep\n", __func__);
 981                return;
 982        }
 983
 984        /* toggle and halt bits stay unchanged */
 985
 986        /* for OUT, just read and discard the FIFO contents. */
 987        if ((ep->bEndpointAddress & USB_DIR_IN) == 0) {
 988                while (((readl(ep->reg_udccs)) & UDCCS_BO_RNE) != 0)
 989                        (void)readb(ep->reg_uddr);
 990                return;
 991        }
 992
 993        /* most IN status is the same, but ISO can't stall */
 994        writel(UDCCS_BI_TPC|UDCCS_BI_FTF|UDCCS_BI_TUR
 995                | (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC
 996                        ? 0 : UDCCS_BI_SST), ep->reg_udccs);
 997}
 998
 999
1000static struct usb_ep_ops pxa25x_ep_ops = {
1001        .enable         = pxa25x_ep_enable,
1002        .disable        = pxa25x_ep_disable,
1003
1004        .alloc_request  = pxa25x_ep_alloc_request,
1005        .free_request   = pxa25x_ep_free_request,
1006
1007        .queue          = pxa25x_ep_queue,
1008        .dequeue        = pxa25x_ep_dequeue,
1009
1010        .set_halt       = pxa25x_ep_set_halt,
1011        .fifo_status    = pxa25x_ep_fifo_status,
1012        .fifo_flush     = pxa25x_ep_fifo_flush,
1013};
1014
1015
1016/* ---------------------------------------------------------------------------
1017 *      device-scoped parts of the api to the usb controller hardware
1018 * ---------------------------------------------------------------------------
1019 */
1020
1021static int pxa25x_udc_get_frame(struct usb_gadget *_gadget)
1022{
1023        return ((readl(&the_controller->regs->ufnrh) & 0x07) << 8) |
1024                (readl(&the_controller->regs->ufnrl) & 0xff);
1025}
1026
1027static int pxa25x_udc_wakeup(struct usb_gadget *_gadget)
1028{
1029        /* host may not have enabled remote wakeup */
1030        if ((readl(&the_controller->regs->udccs[0]) & UDCCS0_DRWF) == 0)
1031                return -EHOSTUNREACH;
1032        udc_set_mask_UDCCR(UDCCR_RSM);
1033        return 0;
1034}
1035
1036static void stop_activity(struct pxa25x_udc *, struct usb_gadget_driver *);
1037static void udc_enable(struct pxa25x_udc *);
1038static void udc_disable(struct pxa25x_udc *);
1039
1040/*
1041 * We disable the UDC -- and its 48 MHz clock -- whenever it's not
1042 * in active use.
1043 */
1044static int pullup(struct pxa25x_udc *udc)
1045{
1046        if (udc->pullup)
1047                pullup_on();
1048        else
1049                pullup_off();
1050
1051
1052        int is_active = udc->pullup;
1053        if (is_active) {
1054                if (!udc->active) {
1055                        udc->active = 1;
1056                        udc_enable(udc);
1057                }
1058        } else {
1059                if (udc->active) {
1060                        if (udc->gadget.speed != USB_SPEED_UNKNOWN)
1061                                stop_activity(udc, udc->driver);
1062                        udc_disable(udc);
1063                        udc->active = 0;
1064                }
1065
1066        }
1067        return 0;
1068}
1069
1070/* VBUS reporting logically comes from a transceiver */
1071static int pxa25x_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
1072{
1073        struct pxa25x_udc *udc;
1074
1075        udc = container_of(_gadget, struct pxa25x_udc, gadget);
1076        printf("vbus %s\n", is_active ? "supplied" : "inactive");
1077        pullup(udc);
1078        return 0;
1079}
1080
1081/* drivers may have software control over D+ pullup */
1082static int pxa25x_udc_pullup(struct usb_gadget *_gadget, int is_active)
1083{
1084        struct pxa25x_udc       *udc;
1085
1086        udc = container_of(_gadget, struct pxa25x_udc, gadget);
1087
1088        /* not all boards support pullup control */
1089        if (!udc->mach->udc_command)
1090                return -EOPNOTSUPP;
1091
1092        udc->pullup = (is_active != 0);
1093        pullup(udc);
1094        return 0;
1095}
1096
1097/*
1098 * boards may consume current from VBUS, up to 100-500mA based on config.
1099 * the 500uA suspend ceiling means that exclusively vbus-powered PXA designs
1100 * violate USB specs.
1101 */
1102static int pxa25x_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1103{
1104        return -EOPNOTSUPP;
1105}
1106
1107static const struct usb_gadget_ops pxa25x_udc_ops = {
1108        .get_frame      = pxa25x_udc_get_frame,
1109        .wakeup         = pxa25x_udc_wakeup,
1110        .vbus_session   = pxa25x_udc_vbus_session,
1111        .pullup         = pxa25x_udc_pullup,
1112        .vbus_draw      = pxa25x_udc_vbus_draw,
1113};
1114
1115/*-------------------------------------------------------------------------*/
1116
1117/*
1118 *      udc_disable - disable USB device controller
1119 */
1120static void udc_disable(struct pxa25x_udc *dev)
1121{
1122        /* block all irqs */
1123        udc_set_mask_UDCCR(UDCCR_SRM|UDCCR_REM);
1124        writel(0xff, &dev->regs->uicr0);
1125        writel(0xff, &dev->regs->uicr1);
1126        writel(UFNRH_SIM, &dev->regs->ufnrh);
1127
1128        /* if hardware supports it, disconnect from usb */
1129        pullup_off();
1130
1131        udc_clear_mask_UDCCR(UDCCR_UDE);
1132
1133        ep0_idle(dev);
1134        dev->gadget.speed = USB_SPEED_UNKNOWN;
1135}
1136
1137/*
1138 *      udc_reinit - initialize software state
1139 */
1140static void udc_reinit(struct pxa25x_udc *dev)
1141{
1142        u32 i;
1143
1144        /* device/ep0 records init */
1145        INIT_LIST_HEAD(&dev->gadget.ep_list);
1146        INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
1147        dev->ep0state = EP0_IDLE;
1148
1149        /* basic endpoint records init */
1150        for (i = 0; i < PXA_UDC_NUM_ENDPOINTS; i++) {
1151                struct pxa25x_ep *ep = &dev->ep[i];
1152
1153                if (i != 0)
1154                        list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
1155
1156                ep->desc = NULL;
1157                ep->stopped = 0;
1158                INIT_LIST_HEAD(&ep->queue);
1159                ep->pio_irqs = 0;
1160        }
1161
1162        /* the rest was statically initialized, and is read-only */
1163}
1164
1165/*
1166 * until it's enabled, this UDC should be completely invisible
1167 * to any USB host.
1168 */
1169static void udc_enable(struct pxa25x_udc *dev)
1170{
1171        debug("udc: enabling udc\n");
1172
1173        udc_clear_mask_UDCCR(UDCCR_UDE);
1174
1175        /*
1176         * Try to clear these bits before we enable the udc.
1177         * Do not touch reset ack bit, we would take care of it in
1178         * interrupt handle routine
1179         */
1180        udc_ack_int_UDCCR(UDCCR_SUSIR|UDCCR_RESIR);
1181
1182        ep0_idle(dev);
1183        dev->gadget.speed = USB_SPEED_UNKNOWN;
1184        dev->stats.irqs = 0;
1185
1186        /*
1187         * sequence taken from chapter 12.5.10, PXA250 AppProcDevManual:
1188         * - enable UDC
1189         * - if RESET is already in progress, ack interrupt
1190         * - unmask reset interrupt
1191         */
1192        udc_set_mask_UDCCR(UDCCR_UDE);
1193        if (!(readl(&dev->regs->udccr) & UDCCR_UDA))
1194                udc_ack_int_UDCCR(UDCCR_RSTIR);
1195
1196        if (dev->has_cfr /* UDC_RES2 is defined */) {
1197                /*
1198                 * pxa255 (a0+) can avoid a set_config race that could
1199                 * prevent gadget drivers from configuring correctly
1200                 */
1201                writel(UDCCFR_ACM | UDCCFR_MB1, &dev->regs->udccfr);
1202        }
1203
1204        /* enable suspend/resume and reset irqs */
1205        udc_clear_mask_UDCCR(UDCCR_SRM | UDCCR_REM);
1206
1207        /* enable ep0 irqs */
1208        clrbits_le32(&dev->regs->uicr0, UICR0_IM0);
1209
1210        /* if hardware supports it, pullup D+ and wait for reset */
1211        pullup_on();
1212}
1213
1214static inline void clear_ep_state(struct pxa25x_udc *dev)
1215{
1216        unsigned i;
1217
1218        /*
1219         * hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint
1220         * fifos, and pending transactions mustn't be continued in any case.
1221         */
1222        for (i = 1; i < PXA_UDC_NUM_ENDPOINTS; i++)
1223                nuke(&dev->ep[i], -ECONNABORTED);
1224}
1225
1226static void handle_ep0(struct pxa25x_udc *dev)
1227{
1228        u32 udccs0 = readl(&dev->regs->udccs[0]);
1229        struct pxa25x_ep *ep = &dev->ep[0];
1230        struct pxa25x_request *req;
1231        union {
1232                struct usb_ctrlrequest  r;
1233                u8                      raw[8];
1234                u32                     word[2];
1235        } u;
1236
1237        if (list_empty(&ep->queue))
1238                req = NULL;
1239        else
1240                req = list_entry(ep->queue.next, struct pxa25x_request, queue);
1241
1242        /* clear stall status */
1243        if (udccs0 & UDCCS0_SST) {
1244                nuke(ep, -EPIPE);
1245                writel(UDCCS0_SST, &dev->regs->udccs[0]);
1246                stop_watchdog(dev);
1247                ep0_idle(dev);
1248        }
1249
1250        /* previous request unfinished?  non-error iff back-to-back ... */
1251        if ((udccs0 & UDCCS0_SA) != 0 && dev->ep0state != EP0_IDLE) {
1252                nuke(ep, 0);
1253                stop_watchdog(dev);
1254                ep0_idle(dev);
1255        }
1256
1257        switch (dev->ep0state) {
1258        case EP0_IDLE:
1259                /* late-breaking status? */
1260                udccs0 = readl(&dev->regs->udccs[0]);
1261
1262                /* start control request? */
1263                if (likely((udccs0 & (UDCCS0_OPR|UDCCS0_SA|UDCCS0_RNE))
1264                                == (UDCCS0_OPR|UDCCS0_SA|UDCCS0_RNE))) {
1265                        int i;
1266
1267                        nuke(ep, -EPROTO);
1268
1269                        /* read SETUP packet */
1270                        for (i = 0; i < 8; i++) {
1271                                if (unlikely(!(readl(&dev->regs->udccs[0]) &
1272                                                UDCCS0_RNE))) {
1273bad_setup:
1274                                        debug("SETUP %d!\n", i);
1275                                        goto stall;
1276                                }
1277                                u.raw[i] = (u8)readb(&dev->regs->uddr0);
1278                        }
1279                        if (unlikely((readl(&dev->regs->udccs[0]) &
1280                                        UDCCS0_RNE) != 0))
1281                                goto bad_setup;
1282
1283got_setup:
1284                        debug("SETUP %02x.%02x v%04x i%04x l%04x\n",
1285                                u.r.bRequestType, u.r.bRequest,
1286                                le16_to_cpu(u.r.wValue),
1287                                le16_to_cpu(u.r.wIndex),
1288                                le16_to_cpu(u.r.wLength));
1289
1290                        /* cope with automagic for some standard requests. */
1291                        dev->req_std = (u.r.bRequestType & USB_TYPE_MASK)
1292                                                == USB_TYPE_STANDARD;
1293                        dev->req_config = 0;
1294                        dev->req_pending = 1;
1295                        switch (u.r.bRequest) {
1296                        /* hardware restricts gadget drivers here! */
1297                        case USB_REQ_SET_CONFIGURATION:
1298                                debug("GOT SET_CONFIGURATION\n");
1299                                if (u.r.bRequestType == USB_RECIP_DEVICE) {
1300                                        /*
1301                                         * reflect hardware's automagic
1302                                         * up to the gadget driver.
1303                                         */
1304config_change:
1305                                        dev->req_config = 1;
1306                                        clear_ep_state(dev);
1307                                        /*
1308                                         * if !has_cfr, there's no synch
1309                                         * else use AREN (later) not SA|OPR
1310                                         * USIR0_IR0 acts edge sensitive
1311                                         */
1312                                }
1313                                break;
1314                        /* ... and here, even more ... */
1315                        case USB_REQ_SET_INTERFACE:
1316                                if (u.r.bRequestType == USB_RECIP_INTERFACE) {
1317                                        /*
1318                                         * udc hardware is broken by design:
1319                                         *  - altsetting may only be zero;
1320                                         *  - hw resets all interfaces' eps;
1321                                         *  - ep reset doesn't include halt(?).
1322                                         */
1323                                        printf("broken set_interface (%d/%d)\n",
1324                                                le16_to_cpu(u.r.wIndex),
1325                                                le16_to_cpu(u.r.wValue));
1326                                        goto config_change;
1327                                }
1328                                break;
1329                        /* hardware was supposed to hide this */
1330                        case USB_REQ_SET_ADDRESS:
1331                                debug("GOT SET ADDRESS\n");
1332                                if (u.r.bRequestType == USB_RECIP_DEVICE) {
1333                                        ep0start(dev, 0, "address");
1334                                        return;
1335                                }
1336                                break;
1337                        }
1338
1339                        if (u.r.bRequestType & USB_DIR_IN)
1340                                dev->ep0state = EP0_IN_DATA_PHASE;
1341                        else
1342                                dev->ep0state = EP0_OUT_DATA_PHASE;
1343
1344                        i = dev->driver->setup(&dev->gadget, &u.r);
1345                        if (i < 0) {
1346                                /* hardware automagic preventing STALL... */
1347                                if (dev->req_config) {
1348                                        /*
1349                                         * hardware sometimes neglects to tell
1350                                         * tell us about config change events,
1351                                         * so later ones may fail...
1352                                         */
1353                                        printf("config change %02x fail %d?\n",
1354                                                u.r.bRequest, i);
1355                                        return;
1356                                        /*
1357                                         * TODO experiment:  if has_cfr,
1358                                         * hardware didn't ACK; maybe we
1359                                         * could actually STALL!
1360                                         */
1361                                }
1362                                if (0) {
1363stall:
1364                                        /* uninitialized when goto stall */
1365                                        i = 0;
1366                                }
1367                                debug("protocol STALL, "
1368                                        "%02x err %d\n",
1369                                        readl(&dev->regs->udccs[0]), i);
1370
1371                                /*
1372                                 * the watchdog timer helps deal with cases
1373                                 * where udc seems to clear FST wrongly, and
1374                                 * then NAKs instead of STALLing.
1375                                 */
1376                                ep0start(dev, UDCCS0_FST|UDCCS0_FTF, "stall");
1377                                start_watchdog(dev);
1378                                dev->ep0state = EP0_STALL;
1379
1380                        /* deferred i/o == no response yet */
1381                        } else if (dev->req_pending) {
1382                                if (likely(dev->ep0state == EP0_IN_DATA_PHASE
1383                                                || dev->req_std || u.r.wLength))
1384                                        ep0start(dev, 0, "defer");
1385                                else
1386                                        ep0start(dev, UDCCS0_IPR, "defer/IPR");
1387                        }
1388
1389                        /* expect at least one data or status stage irq */
1390                        return;
1391
1392                } else if (likely((udccs0 & (UDCCS0_OPR|UDCCS0_SA))
1393                                == (UDCCS0_OPR|UDCCS0_SA))) {
1394                        unsigned i;
1395
1396                        /*
1397                         * pxa210/250 erratum 131 for B0/B1 says RNE lies.
1398                         * still observed on a pxa255 a0.
1399                         */
1400                        debug("e131\n");
1401                        nuke(ep, -EPROTO);
1402
1403                        /* read SETUP data, but don't trust it too much */
1404                        for (i = 0; i < 8; i++)
1405                                u.raw[i] = (u8)readb(&dev->regs->uddr0);
1406                        if ((u.r.bRequestType & USB_RECIP_MASK)
1407                                        > USB_RECIP_OTHER)
1408                                goto stall;
1409                        if (u.word[0] == 0 && u.word[1] == 0)
1410                                goto stall;
1411                        goto got_setup;
1412                } else {
1413                        /*
1414                         * some random early IRQ:
1415                         * - we acked FST
1416                         * - IPR cleared
1417                         * - OPR got set, without SA (likely status stage)
1418                         */
1419                        debug("random IRQ %X %X\n", udccs0,
1420                                readl(&dev->regs->udccs[0]));
1421                        writel(udccs0 & (UDCCS0_SA|UDCCS0_OPR),
1422                                &dev->regs->udccs[0]);
1423                }
1424                break;
1425        case EP0_IN_DATA_PHASE:                 /* GET_DESCRIPTOR etc */
1426                if (udccs0 & UDCCS0_OPR) {
1427                        debug("ep0in premature status\n");
1428                        if (req)
1429                                done(ep, req, 0);
1430                        ep0_idle(dev);
1431                } else /* irq was IPR clearing */ {
1432                        if (req) {
1433                                debug("next ep0 in packet\n");
1434                                /* this IN packet might finish the request */
1435                                (void) write_ep0_fifo(ep, req);
1436                        } /* else IN token before response was written */
1437                }
1438                break;
1439        case EP0_OUT_DATA_PHASE:                /* SET_DESCRIPTOR etc */
1440                if (udccs0 & UDCCS0_OPR) {
1441                        if (req) {
1442                                /* this OUT packet might finish the request */
1443                                if (read_ep0_fifo(ep, req))
1444                                        done(ep, req, 0);
1445                                /* else more OUT packets expected */
1446                        } /* else OUT token before read was issued */
1447                } else /* irq was IPR clearing */ {
1448                        debug("ep0out premature status\n");
1449                        if (req)
1450                                done(ep, req, 0);
1451                        ep0_idle(dev);
1452                }
1453                break;
1454        case EP0_END_XFER:
1455                if (req)
1456                        done(ep, req, 0);
1457                /*
1458                 * ack control-IN status (maybe in-zlp was skipped)
1459                 * also appears after some config change events.
1460                 */
1461                if (udccs0 & UDCCS0_OPR)
1462                        writel(UDCCS0_OPR, &dev->regs->udccs[0]);
1463                ep0_idle(dev);
1464                break;
1465        case EP0_STALL:
1466                writel(UDCCS0_FST, &dev->regs->udccs[0]);
1467                break;
1468        }
1469
1470        writel(USIR0_IR0, &dev->regs->usir0);
1471}
1472
1473static void handle_ep(struct pxa25x_ep *ep)
1474{
1475        struct pxa25x_request   *req;
1476        int                     is_in = ep->bEndpointAddress & USB_DIR_IN;
1477        int                     completed;
1478        u32                     udccs, tmp;
1479
1480        do {
1481                completed = 0;
1482                if (likely(!list_empty(&ep->queue)))
1483                        req = list_entry(ep->queue.next,
1484                                        struct pxa25x_request, queue);
1485                else
1486                        req = NULL;
1487
1488                /* TODO check FST handling */
1489
1490                udccs = readl(ep->reg_udccs);
1491                if (unlikely(is_in)) {  /* irq from TPC, SST, or (ISO) TUR */
1492                        tmp = UDCCS_BI_TUR;
1493                        if (likely(ep->bmAttributes == USB_ENDPOINT_XFER_BULK))
1494                                tmp |= UDCCS_BI_SST;
1495                        tmp &= udccs;
1496                        if (likely(tmp))
1497                                writel(tmp, ep->reg_udccs);
1498                        if (req && likely((udccs & UDCCS_BI_TFS) != 0))
1499                                completed = write_fifo(ep, req);
1500
1501                } else {        /* irq from RPC (or for ISO, ROF) */
1502                        if (likely(ep->bmAttributes == USB_ENDPOINT_XFER_BULK))
1503                                tmp = UDCCS_BO_SST | UDCCS_BO_DME;
1504                        else
1505                                tmp = UDCCS_IO_ROF | UDCCS_IO_DME;
1506                        tmp &= udccs;
1507                        if (likely(tmp))
1508                                writel(tmp, ep->reg_udccs);
1509
1510                        /* fifos can hold packets, ready for reading... */
1511                        if (likely(req))
1512                                completed = read_fifo(ep, req);
1513                        else
1514                                pio_irq_disable(ep->bEndpointAddress);
1515                }
1516                ep->pio_irqs++;
1517        } while (completed);
1518}
1519
1520/*
1521 *      pxa25x_udc_irq - interrupt handler
1522 *
1523 * avoid delays in ep0 processing. the control handshaking isn't always
1524 * under software control (pxa250c0 and the pxa255 are better), and delays
1525 * could cause usb protocol errors.
1526 */
1527static struct pxa25x_udc memory;
1528static int
1529pxa25x_udc_irq(void)
1530{
1531        struct pxa25x_udc *dev = &memory;
1532        int handled;
1533
1534        test_watchdog(dev);
1535
1536        dev->stats.irqs++;
1537        do {
1538                u32 udccr = readl(&dev->regs->udccr);
1539
1540                handled = 0;
1541
1542                /* SUSpend Interrupt Request */
1543                if (unlikely(udccr & UDCCR_SUSIR)) {
1544                        udc_ack_int_UDCCR(UDCCR_SUSIR);
1545                        handled = 1;
1546                        debug("USB suspend\n");
1547
1548                        if (dev->gadget.speed != USB_SPEED_UNKNOWN
1549                                        && dev->driver
1550                                        && dev->driver->suspend)
1551                                dev->driver->suspend(&dev->gadget);
1552                        ep0_idle(dev);
1553                }
1554
1555                /* RESume Interrupt Request */
1556                if (unlikely(udccr & UDCCR_RESIR)) {
1557                        udc_ack_int_UDCCR(UDCCR_RESIR);
1558                        handled = 1;
1559                        debug("USB resume\n");
1560
1561                        if (dev->gadget.speed != USB_SPEED_UNKNOWN
1562                                        && dev->driver
1563                                        && dev->driver->resume)
1564                                dev->driver->resume(&dev->gadget);
1565                }
1566
1567                /* ReSeT Interrupt Request - USB reset */
1568                if (unlikely(udccr & UDCCR_RSTIR)) {
1569                        udc_ack_int_UDCCR(UDCCR_RSTIR);
1570                        handled = 1;
1571
1572                        if ((readl(&dev->regs->udccr) & UDCCR_UDA) == 0) {
1573                                debug("USB reset start\n");
1574
1575                                /*
1576                                 * reset driver and endpoints,
1577                                 * in case that's not yet done
1578                                 */
1579                                stop_activity(dev, dev->driver);
1580
1581                        } else {
1582                                debug("USB reset end\n");
1583                                dev->gadget.speed = USB_SPEED_FULL;
1584                                memset(&dev->stats, 0, sizeof dev->stats);
1585                                /* driver and endpoints are still reset */
1586                        }
1587
1588                } else {
1589                        u32 uicr0 = readl(&dev->regs->uicr0);
1590                        u32 uicr1 = readl(&dev->regs->uicr1);
1591                        u32 usir0 = readl(&dev->regs->usir0);
1592                        u32 usir1 = readl(&dev->regs->usir1);
1593
1594                        usir0 = usir0 & ~uicr0;
1595                        usir1 = usir1 & ~uicr1;
1596                        int i;
1597
1598                        if (unlikely(!usir0 && !usir1))
1599                                continue;
1600
1601                        debug_cond(NOISY, "irq %02x.%02x\n", usir1, usir0);
1602
1603                        /* control traffic */
1604                        if (usir0 & USIR0_IR0) {
1605                                dev->ep[0].pio_irqs++;
1606                                handle_ep0(dev);
1607                                handled = 1;
1608                        }
1609
1610                        /* endpoint data transfers */
1611                        for (i = 0; i < 8; i++) {
1612                                u32     tmp = 1 << i;
1613
1614                                if (i && (usir0 & tmp)) {
1615                                        handle_ep(&dev->ep[i]);
1616                                        setbits_le32(&dev->regs->usir0, tmp);
1617                                        handled = 1;
1618                                }
1619#ifndef CONFIG_USB_PXA25X_SMALL
1620                                if (usir1 & tmp) {
1621                                        handle_ep(&dev->ep[i+8]);
1622                                        setbits_le32(&dev->regs->usir1, tmp);
1623                                        handled = 1;
1624                                }
1625#endif
1626                        }
1627                }
1628
1629                /* we could also ask for 1 msec SOF (SIR) interrupts */
1630
1631        } while (handled);
1632        return IRQ_HANDLED;
1633}
1634
1635/*-------------------------------------------------------------------------*/
1636
1637/*
1638 * this uses load-time allocation and initialization (instead of
1639 * doing it at run-time) to save code, eliminate fault paths, and
1640 * be more obviously correct.
1641 */
1642static struct pxa25x_udc memory = {
1643        .regs = UDC_REGS,
1644
1645        .gadget = {
1646                .ops            = &pxa25x_udc_ops,
1647                .ep0            = &memory.ep[0].ep,
1648                .name           = driver_name,
1649        },
1650
1651        /* control endpoint */
1652        .ep[0] = {
1653                .ep = {
1654                        .name           = ep0name,
1655                        .ops            = &pxa25x_ep_ops,
1656                        .maxpacket      = EP0_FIFO_SIZE,
1657                },
1658                .dev            = &memory,
1659                .reg_udccs      = &UDC_REGS->udccs[0],
1660                .reg_uddr       = &UDC_REGS->uddr0,
1661        },
1662
1663        /* first group of endpoints */
1664        .ep[1] = {
1665                .ep = {
1666                        .name           = "ep1in-bulk",
1667                        .ops            = &pxa25x_ep_ops,
1668                        .maxpacket      = BULK_FIFO_SIZE,
1669                },
1670                .dev            = &memory,
1671                .fifo_size      = BULK_FIFO_SIZE,
1672                .bEndpointAddress = USB_DIR_IN | 1,
1673                .bmAttributes   = USB_ENDPOINT_XFER_BULK,
1674                .reg_udccs      = &UDC_REGS->udccs[1],
1675                .reg_uddr       = &UDC_REGS->uddr1,
1676        },
1677        .ep[2] = {
1678                .ep = {
1679                        .name           = "ep2out-bulk",
1680                        .ops            = &pxa25x_ep_ops,
1681                        .maxpacket      = BULK_FIFO_SIZE,
1682                },
1683                .dev            = &memory,
1684                .fifo_size      = BULK_FIFO_SIZE,
1685                .bEndpointAddress = 2,
1686                .bmAttributes   = USB_ENDPOINT_XFER_BULK,
1687                .reg_udccs      = &UDC_REGS->udccs[2],
1688                .reg_ubcr       = &UDC_REGS->ubcr2,
1689                .reg_uddr       = &UDC_REGS->uddr2,
1690        },
1691#ifndef CONFIG_USB_PXA25X_SMALL
1692        .ep[3] = {
1693                .ep = {
1694                        .name           = "ep3in-iso",
1695                        .ops            = &pxa25x_ep_ops,
1696                        .maxpacket      = ISO_FIFO_SIZE,
1697                },
1698                .dev            = &memory,
1699                .fifo_size      = ISO_FIFO_SIZE,
1700                .bEndpointAddress = USB_DIR_IN | 3,
1701                .bmAttributes   = USB_ENDPOINT_XFER_ISOC,
1702                .reg_udccs      = &UDC_REGS->udccs[3],
1703                .reg_uddr       = &UDC_REGS->uddr3,
1704        },
1705        .ep[4] = {
1706                .ep = {
1707                        .name           = "ep4out-iso",
1708                        .ops            = &pxa25x_ep_ops,
1709                        .maxpacket      = ISO_FIFO_SIZE,
1710                },
1711                .dev            = &memory,
1712                .fifo_size      = ISO_FIFO_SIZE,
1713                .bEndpointAddress = 4,
1714                .bmAttributes   = USB_ENDPOINT_XFER_ISOC,
1715                .reg_udccs      = &UDC_REGS->udccs[4],
1716                .reg_ubcr       = &UDC_REGS->ubcr4,
1717                .reg_uddr       = &UDC_REGS->uddr4,
1718        },
1719        .ep[5] = {
1720                .ep = {
1721                        .name           = "ep5in-int",
1722                        .ops            = &pxa25x_ep_ops,
1723                        .maxpacket      = INT_FIFO_SIZE,
1724                },
1725                .dev            = &memory,
1726                .fifo_size      = INT_FIFO_SIZE,
1727                .bEndpointAddress = USB_DIR_IN | 5,
1728                .bmAttributes   = USB_ENDPOINT_XFER_INT,
1729                .reg_udccs      = &UDC_REGS->udccs[5],
1730                .reg_uddr       = &UDC_REGS->uddr5,
1731        },
1732
1733        /* second group of endpoints */
1734        .ep[6] = {
1735                .ep = {
1736                        .name           = "ep6in-bulk",
1737                        .ops            = &pxa25x_ep_ops,
1738                        .maxpacket      = BULK_FIFO_SIZE,
1739                },
1740                .dev            = &memory,
1741                .fifo_size      = BULK_FIFO_SIZE,
1742                .bEndpointAddress = USB_DIR_IN | 6,
1743                .bmAttributes   = USB_ENDPOINT_XFER_BULK,
1744                .reg_udccs      = &UDC_REGS->udccs[6],
1745                .reg_uddr       = &UDC_REGS->uddr6,
1746        },
1747        .ep[7] = {
1748                .ep = {
1749                        .name           = "ep7out-bulk",
1750                        .ops            = &pxa25x_ep_ops,
1751                        .maxpacket      = BULK_FIFO_SIZE,
1752                },
1753                .dev            = &memory,
1754                .fifo_size      = BULK_FIFO_SIZE,
1755                .bEndpointAddress = 7,
1756                .bmAttributes   = USB_ENDPOINT_XFER_BULK,
1757                .reg_udccs      = &UDC_REGS->udccs[7],
1758                .reg_ubcr       = &UDC_REGS->ubcr7,
1759                .reg_uddr       = &UDC_REGS->uddr7,
1760        },
1761        .ep[8] = {
1762                .ep = {
1763                        .name           = "ep8in-iso",
1764                        .ops            = &pxa25x_ep_ops,
1765                        .maxpacket      = ISO_FIFO_SIZE,
1766                },
1767                .dev            = &memory,
1768                .fifo_size      = ISO_FIFO_SIZE,
1769                .bEndpointAddress = USB_DIR_IN | 8,
1770                .bmAttributes   = USB_ENDPOINT_XFER_ISOC,
1771                .reg_udccs      = &UDC_REGS->udccs[8],
1772                .reg_uddr       = &UDC_REGS->uddr8,
1773        },
1774        .ep[9] = {
1775                .ep = {
1776                        .name           = "ep9out-iso",
1777                        .ops            = &pxa25x_ep_ops,
1778                        .maxpacket      = ISO_FIFO_SIZE,
1779                },
1780                .dev            = &memory,
1781                .fifo_size      = ISO_FIFO_SIZE,
1782                .bEndpointAddress = 9,
1783                .bmAttributes   = USB_ENDPOINT_XFER_ISOC,
1784                .reg_udccs      = &UDC_REGS->udccs[9],
1785                .reg_ubcr       = &UDC_REGS->ubcr9,
1786                .reg_uddr       = &UDC_REGS->uddr9,
1787        },
1788        .ep[10] = {
1789                .ep = {
1790                        .name           = "ep10in-int",
1791                        .ops            = &pxa25x_ep_ops,
1792                        .maxpacket      = INT_FIFO_SIZE,
1793                },
1794                .dev            = &memory,
1795                .fifo_size      = INT_FIFO_SIZE,
1796                .bEndpointAddress = USB_DIR_IN | 10,
1797                .bmAttributes   = USB_ENDPOINT_XFER_INT,
1798                .reg_udccs      = &UDC_REGS->udccs[10],
1799                .reg_uddr       = &UDC_REGS->uddr10,
1800        },
1801
1802        /* third group of endpoints */
1803        .ep[11] = {
1804                .ep = {
1805                        .name           = "ep11in-bulk",
1806                        .ops            = &pxa25x_ep_ops,
1807                        .maxpacket      = BULK_FIFO_SIZE,
1808                },
1809                .dev            = &memory,
1810                .fifo_size      = BULK_FIFO_SIZE,
1811                .bEndpointAddress = USB_DIR_IN | 11,
1812                .bmAttributes   = USB_ENDPOINT_XFER_BULK,
1813                .reg_udccs      = &UDC_REGS->udccs[11],
1814                .reg_uddr       = &UDC_REGS->uddr11,
1815        },
1816        .ep[12] = {
1817                .ep = {
1818                        .name           = "ep12out-bulk",
1819                        .ops            = &pxa25x_ep_ops,
1820                        .maxpacket      = BULK_FIFO_SIZE,
1821                },
1822                .dev            = &memory,
1823                .fifo_size      = BULK_FIFO_SIZE,
1824                .bEndpointAddress = 12,
1825                .bmAttributes   = USB_ENDPOINT_XFER_BULK,
1826                .reg_udccs      = &UDC_REGS->udccs[12],
1827                .reg_ubcr       = &UDC_REGS->ubcr12,
1828                .reg_uddr       = &UDC_REGS->uddr12,
1829        },
1830        .ep[13] = {
1831                .ep = {
1832                        .name           = "ep13in-iso",
1833                        .ops            = &pxa25x_ep_ops,
1834                        .maxpacket      = ISO_FIFO_SIZE,
1835                },
1836                .dev            = &memory,
1837                .fifo_size      = ISO_FIFO_SIZE,
1838                .bEndpointAddress = USB_DIR_IN | 13,
1839                .bmAttributes   = USB_ENDPOINT_XFER_ISOC,
1840                .reg_udccs      = &UDC_REGS->udccs[13],
1841                .reg_uddr       = &UDC_REGS->uddr13,
1842        },
1843        .ep[14] = {
1844                .ep = {
1845                        .name           = "ep14out-iso",
1846                        .ops            = &pxa25x_ep_ops,
1847                        .maxpacket      = ISO_FIFO_SIZE,
1848                },
1849                .dev            = &memory,
1850                .fifo_size      = ISO_FIFO_SIZE,
1851                .bEndpointAddress = 14,
1852                .bmAttributes   = USB_ENDPOINT_XFER_ISOC,
1853                .reg_udccs      = &UDC_REGS->udccs[14],
1854                .reg_ubcr       = &UDC_REGS->ubcr14,
1855                .reg_uddr       = &UDC_REGS->uddr14,
1856        },
1857        .ep[15] = {
1858                .ep = {
1859                        .name           = "ep15in-int",
1860                        .ops            = &pxa25x_ep_ops,
1861                        .maxpacket      = INT_FIFO_SIZE,
1862                },
1863                .dev            = &memory,
1864                .fifo_size      = INT_FIFO_SIZE,
1865                .bEndpointAddress = USB_DIR_IN | 15,
1866                .bmAttributes   = USB_ENDPOINT_XFER_INT,
1867                .reg_udccs      = &UDC_REGS->udccs[15],
1868                .reg_uddr       = &UDC_REGS->uddr15,
1869        },
1870#endif /* !CONFIG_USB_PXA25X_SMALL */
1871};
1872
1873static void udc_command(int cmd)
1874{
1875        switch (cmd) {
1876        case PXA2XX_UDC_CMD_CONNECT:
1877                setbits_le32(GPDR(CONFIG_USB_DEV_PULLUP_GPIO),
1878                        GPIO_bit(CONFIG_USB_DEV_PULLUP_GPIO));
1879
1880                /* enable pullup */
1881                writel(GPIO_bit(CONFIG_USB_DEV_PULLUP_GPIO),
1882                        GPCR(CONFIG_USB_DEV_PULLUP_GPIO));
1883
1884                debug("Connected to USB\n");
1885                break;
1886
1887        case PXA2XX_UDC_CMD_DISCONNECT:
1888                /* disable pullup resistor */
1889                writel(GPIO_bit(CONFIG_USB_DEV_PULLUP_GPIO),
1890                        GPSR(CONFIG_USB_DEV_PULLUP_GPIO));
1891
1892                /* setup pin as input, line will float */
1893                clrbits_le32(GPDR(CONFIG_USB_DEV_PULLUP_GPIO),
1894                        GPIO_bit(CONFIG_USB_DEV_PULLUP_GPIO));
1895
1896                debug("Disconnected from USB\n");
1897                break;
1898        }
1899}
1900
1901static struct pxa2xx_udc_mach_info mach_info = {
1902        .udc_command = udc_command,
1903};
1904
1905/*
1906 * when a driver is successfully registered, it will receive
1907 * control requests including set_configuration(), which enables
1908 * non-control requests.  then usb traffic follows until a
1909 * disconnect is reported.  then a host may connect again, or
1910 * the driver might get unbound.
1911 */
1912int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1913{
1914        struct pxa25x_udc *dev = &memory;
1915        int retval;
1916        uint32_t chiprev;
1917
1918        if (!driver
1919                        || driver->speed < USB_SPEED_FULL
1920                        || !driver->disconnect
1921                        || !driver->setup)
1922                return -EINVAL;
1923        if (!dev)
1924                return -ENODEV;
1925        if (dev->driver)
1926                return -EBUSY;
1927
1928        /* Enable clock for usb controller */
1929        setbits_le32(CKEN, CKEN11_USB);
1930
1931        /* first hook up the driver ... */
1932        dev->driver = driver;
1933        dev->pullup = 1;
1934
1935        /* trigger chiprev-specific logic */
1936        switch ((chiprev = pxa_get_cpu_revision())) {
1937        case PXA255_A0:
1938                dev->has_cfr = 1;
1939                break;
1940        case PXA250_A0:
1941        case PXA250_A1:
1942                /* A0/A1 "not released"; ep 13, 15 unusable */
1943                /* fall through */
1944        case PXA250_B2: case PXA210_B2:
1945        case PXA250_B1: case PXA210_B1:
1946        case PXA250_B0: case PXA210_B0:
1947                /* OUT-DMA is broken ... */
1948                /* fall through */
1949        case PXA250_C0: case PXA210_C0:
1950                break;
1951        default:
1952                printf("%s: unrecognized processor: %08x\n",
1953                        DRIVER_NAME, chiprev);
1954                return -ENODEV;
1955        }
1956
1957        the_controller = dev;
1958
1959        /* prepare watchdog timer */
1960        dev->watchdog.running = 0;
1961        dev->watchdog.period = 5000 * CONFIG_SYS_HZ / 1000000; /* 5 ms */
1962        dev->watchdog.function = udc_watchdog;
1963
1964        udc_disable(dev);
1965        udc_reinit(dev);
1966
1967        dev->mach = &mach_info;
1968
1969        dev->gadget.name = "pxa2xx_udc";
1970        retval = driver->bind(&dev->gadget);
1971        if (retval) {
1972                printf("bind to driver %s --> error %d\n",
1973                                DRIVER_NAME, retval);
1974                dev->driver = NULL;
1975                return retval;
1976        }
1977
1978        /*
1979         * ... then enable host detection and ep0; and we're ready
1980         * for set_configuration as well as eventual disconnect.
1981         */
1982        printf("registered gadget driver '%s'\n", DRIVER_NAME);
1983
1984        pullup(dev);
1985        dump_state(dev);
1986        return 0;
1987}
1988
1989static void
1990stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
1991{
1992        int i;
1993
1994        /* don't disconnect drivers more than once */
1995        if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1996                driver = NULL;
1997        dev->gadget.speed = USB_SPEED_UNKNOWN;
1998
1999        /* prevent new request submissions, kill any outstanding requests  */
2000        for (i = 0; i < PXA_UDC_NUM_ENDPOINTS; i++) {
2001                struct pxa25x_ep *ep = &dev->ep[i];
2002
2003                ep->stopped = 1;
2004                nuke(ep, -ESHUTDOWN);
2005        }
2006        stop_watchdog(dev);
2007
2008        /* report disconnect; the driver is already quiesced */
2009        if (driver)
2010                driver->disconnect(&dev->gadget);
2011
2012        /* re-init driver-visible data structures */
2013        udc_reinit(dev);
2014}
2015
2016int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
2017{
2018        struct pxa25x_udc       *dev = the_controller;
2019
2020        if (!dev)
2021                return -ENODEV;
2022        if (!driver || driver != dev->driver || !driver->unbind)
2023                return -EINVAL;
2024
2025        local_irq_disable();
2026        dev->pullup = 0;
2027        pullup(dev);
2028        stop_activity(dev, driver);
2029        local_irq_enable();
2030
2031        driver->unbind(&dev->gadget);
2032        dev->driver = NULL;
2033
2034        printf("unregistered gadget driver '%s'\n", DRIVER_NAME);
2035        dump_state(dev);
2036
2037        the_controller = NULL;
2038
2039        clrbits_le32(CKEN, CKEN11_USB);
2040
2041        return 0;
2042}
2043
2044extern void udc_disconnect(void)
2045{
2046        setbits_le32(CKEN, CKEN11_USB);
2047        udc_clear_mask_UDCCR(UDCCR_UDE);
2048        udc_command(PXA2XX_UDC_CMD_DISCONNECT);
2049        clrbits_le32(CKEN, CKEN11_USB);
2050}
2051
2052/*-------------------------------------------------------------------------*/
2053
2054extern int
2055usb_gadget_handle_interrupts(void)
2056{
2057        return pxa25x_udc_irq();
2058}
2059