linux/drivers/usb/musb/musb_core.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * MUSB OTG driver core code
   4 *
   5 * Copyright 2005 Mentor Graphics Corporation
   6 * Copyright (C) 2005-2006 by Texas Instruments
   7 * Copyright (C) 2006-2007 Nokia Corporation
   8 */
   9
  10/*
  11 * Inventra (Multipoint) Dual-Role Controller Driver for Linux.
  12 *
  13 * This consists of a Host Controller Driver (HCD) and a peripheral
  14 * controller driver implementing the "Gadget" API; OTG support is
  15 * in the works.  These are normal Linux-USB controller drivers which
  16 * use IRQs and have no dedicated thread.
  17 *
  18 * This version of the driver has only been used with products from
  19 * Texas Instruments.  Those products integrate the Inventra logic
  20 * with other DMA, IRQ, and bus modules, as well as other logic that
  21 * needs to be reflected in this driver.
  22 *
  23 *
  24 * NOTE:  the original Mentor code here was pretty much a collection
  25 * of mechanisms that don't seem to have been fully integrated/working
  26 * for *any* Linux kernel version.  This version aims at Linux 2.6.now,
  27 * Key open issues include:
  28 *
  29 *  - Lack of host-side transaction scheduling, for all transfer types.
  30 *    The hardware doesn't do it; instead, software must.
  31 *
  32 *    This is not an issue for OTG devices that don't support external
  33 *    hubs, but for more "normal" USB hosts it's a user issue that the
  34 *    "multipoint" support doesn't scale in the expected ways.  That
  35 *    includes DaVinci EVM in a common non-OTG mode.
  36 *
  37 *      * Control and bulk use dedicated endpoints, and there's as
  38 *        yet no mechanism to either (a) reclaim the hardware when
  39 *        peripherals are NAKing, which gets complicated with bulk
  40 *        endpoints, or (b) use more than a single bulk endpoint in
  41 *        each direction.
  42 *
  43 *        RESULT:  one device may be perceived as blocking another one.
  44 *
  45 *      * Interrupt and isochronous will dynamically allocate endpoint
  46 *        hardware, but (a) there's no record keeping for bandwidth;
  47 *        (b) in the common case that few endpoints are available, there
  48 *        is no mechanism to reuse endpoints to talk to multiple devices.
  49 *
  50 *        RESULT:  At one extreme, bandwidth can be overcommitted in
  51 *        some hardware configurations, no faults will be reported.
  52 *        At the other extreme, the bandwidth capabilities which do
  53 *        exist tend to be severely undercommitted.  You can't yet hook
  54 *        up both a keyboard and a mouse to an external USB hub.
  55 */
  56
  57/*
  58 * This gets many kinds of configuration information:
  59 *      - Kconfig for everything user-configurable
  60 *      - platform_device for addressing, irq, and platform_data
  61 *      - platform_data is mostly for board-specific information
  62 *        (plus recentrly, SOC or family details)
  63 *
  64 * Most of the conditional compilation will (someday) vanish.
  65 */
  66
  67#include <linux/module.h>
  68#include <linux/kernel.h>
  69#include <linux/sched.h>
  70#include <linux/slab.h>
  71#include <linux/list.h>
  72#include <linux/kobject.h>
  73#include <linux/prefetch.h>
  74#include <linux/platform_device.h>
  75#include <linux/io.h>
  76#include <linux/iopoll.h>
  77#include <linux/dma-mapping.h>
  78#include <linux/usb.h>
  79#include <linux/usb/of.h>
  80
  81#include "musb_core.h"
  82#include "musb_trace.h"
  83
  84#define TA_WAIT_BCON(m) max_t(int, (m)->a_wait_bcon, OTG_TIME_A_WAIT_BCON)
  85
  86
  87#define DRIVER_AUTHOR "Mentor Graphics, Texas Instruments, Nokia"
  88#define DRIVER_DESC "Inventra Dual-Role USB Controller Driver"
  89
  90#define MUSB_VERSION "6.0"
  91
  92#define DRIVER_INFO DRIVER_DESC ", v" MUSB_VERSION
  93
  94#define MUSB_DRIVER_NAME "musb-hdrc"
  95const char musb_driver_name[] = MUSB_DRIVER_NAME;
  96
  97MODULE_DESCRIPTION(DRIVER_INFO);
  98MODULE_AUTHOR(DRIVER_AUTHOR);
  99MODULE_LICENSE("GPL");
 100MODULE_ALIAS("platform:" MUSB_DRIVER_NAME);
 101
 102
 103/*-------------------------------------------------------------------------*/
 104
 105static inline struct musb *dev_to_musb(struct device *dev)
 106{
 107        return dev_get_drvdata(dev);
 108}
 109
 110enum musb_mode musb_get_mode(struct device *dev)
 111{
 112        enum usb_dr_mode mode;
 113
 114        mode = usb_get_dr_mode(dev);
 115        switch (mode) {
 116        case USB_DR_MODE_HOST:
 117                return MUSB_HOST;
 118        case USB_DR_MODE_PERIPHERAL:
 119                return MUSB_PERIPHERAL;
 120        case USB_DR_MODE_OTG:
 121        case USB_DR_MODE_UNKNOWN:
 122        default:
 123                return MUSB_OTG;
 124        }
 125}
 126EXPORT_SYMBOL_GPL(musb_get_mode);
 127
 128/*-------------------------------------------------------------------------*/
 129
 130static int musb_ulpi_read(struct usb_phy *phy, u32 reg)
 131{
 132        void __iomem *addr = phy->io_priv;
 133        int     i = 0;
 134        u8      r;
 135        u8      power;
 136        int     ret;
 137
 138        pm_runtime_get_sync(phy->io_dev);
 139
 140        /* Make sure the transceiver is not in low power mode */
 141        power = musb_readb(addr, MUSB_POWER);
 142        power &= ~MUSB_POWER_SUSPENDM;
 143        musb_writeb(addr, MUSB_POWER, power);
 144
 145        /* REVISIT: musbhdrc_ulpi_an.pdf recommends setting the
 146         * ULPICarKitControlDisableUTMI after clearing POWER_SUSPENDM.
 147         */
 148
 149        musb_writeb(addr, MUSB_ULPI_REG_ADDR, (u8)reg);
 150        musb_writeb(addr, MUSB_ULPI_REG_CONTROL,
 151                        MUSB_ULPI_REG_REQ | MUSB_ULPI_RDN_WR);
 152
 153        while (!(musb_readb(addr, MUSB_ULPI_REG_CONTROL)
 154                                & MUSB_ULPI_REG_CMPLT)) {
 155                i++;
 156                if (i == 10000) {
 157                        ret = -ETIMEDOUT;
 158                        goto out;
 159                }
 160
 161        }
 162        r = musb_readb(addr, MUSB_ULPI_REG_CONTROL);
 163        r &= ~MUSB_ULPI_REG_CMPLT;
 164        musb_writeb(addr, MUSB_ULPI_REG_CONTROL, r);
 165
 166        ret = musb_readb(addr, MUSB_ULPI_REG_DATA);
 167
 168out:
 169        pm_runtime_put(phy->io_dev);
 170
 171        return ret;
 172}
 173
 174static int musb_ulpi_write(struct usb_phy *phy, u32 val, u32 reg)
 175{
 176        void __iomem *addr = phy->io_priv;
 177        int     i = 0;
 178        u8      r = 0;
 179        u8      power;
 180        int     ret = 0;
 181
 182        pm_runtime_get_sync(phy->io_dev);
 183
 184        /* Make sure the transceiver is not in low power mode */
 185        power = musb_readb(addr, MUSB_POWER);
 186        power &= ~MUSB_POWER_SUSPENDM;
 187        musb_writeb(addr, MUSB_POWER, power);
 188
 189        musb_writeb(addr, MUSB_ULPI_REG_ADDR, (u8)reg);
 190        musb_writeb(addr, MUSB_ULPI_REG_DATA, (u8)val);
 191        musb_writeb(addr, MUSB_ULPI_REG_CONTROL, MUSB_ULPI_REG_REQ);
 192
 193        while (!(musb_readb(addr, MUSB_ULPI_REG_CONTROL)
 194                                & MUSB_ULPI_REG_CMPLT)) {
 195                i++;
 196                if (i == 10000) {
 197                        ret = -ETIMEDOUT;
 198                        goto out;
 199                }
 200        }
 201
 202        r = musb_readb(addr, MUSB_ULPI_REG_CONTROL);
 203        r &= ~MUSB_ULPI_REG_CMPLT;
 204        musb_writeb(addr, MUSB_ULPI_REG_CONTROL, r);
 205
 206out:
 207        pm_runtime_put(phy->io_dev);
 208
 209        return ret;
 210}
 211
 212static struct usb_phy_io_ops musb_ulpi_access = {
 213        .read = musb_ulpi_read,
 214        .write = musb_ulpi_write,
 215};
 216
 217/*-------------------------------------------------------------------------*/
 218
 219static u32 musb_default_fifo_offset(u8 epnum)
 220{
 221        return 0x20 + (epnum * 4);
 222}
 223
 224/* "flat" mapping: each endpoint has its own i/o address */
 225static void musb_flat_ep_select(void __iomem *mbase, u8 epnum)
 226{
 227}
 228
 229static u32 musb_flat_ep_offset(u8 epnum, u16 offset)
 230{
 231        return 0x100 + (0x10 * epnum) + offset;
 232}
 233
 234/* "indexed" mapping: INDEX register controls register bank select */
 235static void musb_indexed_ep_select(void __iomem *mbase, u8 epnum)
 236{
 237        musb_writeb(mbase, MUSB_INDEX, epnum);
 238}
 239
 240static u32 musb_indexed_ep_offset(u8 epnum, u16 offset)
 241{
 242        return 0x10 + offset;
 243}
 244
 245static u32 musb_default_busctl_offset(u8 epnum, u16 offset)
 246{
 247        return 0x80 + (0x08 * epnum) + offset;
 248}
 249
 250static u8 musb_default_readb(void __iomem *addr, u32 offset)
 251{
 252        u8 data =  __raw_readb(addr + offset);
 253
 254        trace_musb_readb(__builtin_return_address(0), addr, offset, data);
 255        return data;
 256}
 257
 258static void musb_default_writeb(void __iomem *addr, u32 offset, u8 data)
 259{
 260        trace_musb_writeb(__builtin_return_address(0), addr, offset, data);
 261        __raw_writeb(data, addr + offset);
 262}
 263
 264static u16 musb_default_readw(void __iomem *addr, u32 offset)
 265{
 266        u16 data = __raw_readw(addr + offset);
 267
 268        trace_musb_readw(__builtin_return_address(0), addr, offset, data);
 269        return data;
 270}
 271
 272static void musb_default_writew(void __iomem *addr, u32 offset, u16 data)
 273{
 274        trace_musb_writew(__builtin_return_address(0), addr, offset, data);
 275        __raw_writew(data, addr + offset);
 276}
 277
 278static u16 musb_default_get_toggle(struct musb_qh *qh, int is_out)
 279{
 280        void __iomem *epio = qh->hw_ep->regs;
 281        u16 csr;
 282
 283        if (is_out)
 284                csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
 285        else
 286                csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
 287
 288        return csr;
 289}
 290
 291static u16 musb_default_set_toggle(struct musb_qh *qh, int is_out,
 292                                   struct urb *urb)
 293{
 294        u16 csr;
 295        u16 toggle;
 296
 297        toggle = usb_gettoggle(urb->dev, qh->epnum, is_out);
 298
 299        if (is_out)
 300                csr = toggle ? (MUSB_TXCSR_H_WR_DATATOGGLE
 301                                | MUSB_TXCSR_H_DATATOGGLE)
 302                                : MUSB_TXCSR_CLRDATATOG;
 303        else
 304                csr = toggle ? (MUSB_RXCSR_H_WR_DATATOGGLE
 305                                | MUSB_RXCSR_H_DATATOGGLE) : 0;
 306
 307        return csr;
 308}
 309
 310/*
 311 * Load an endpoint's FIFO
 312 */
 313static void musb_default_write_fifo(struct musb_hw_ep *hw_ep, u16 len,
 314                                    const u8 *src)
 315{
 316        struct musb *musb = hw_ep->musb;
 317        void __iomem *fifo = hw_ep->fifo;
 318
 319        if (unlikely(len == 0))
 320                return;
 321
 322        prefetch((u8 *)src);
 323
 324        dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n",
 325                        'T', hw_ep->epnum, fifo, len, src);
 326
 327        /* we can't assume unaligned reads work */
 328        if (likely((0x01 & (unsigned long) src) == 0)) {
 329                u16     index = 0;
 330
 331                /* best case is 32bit-aligned source address */
 332                if ((0x02 & (unsigned long) src) == 0) {
 333                        if (len >= 4) {
 334                                iowrite32_rep(fifo, src + index, len >> 2);
 335                                index += len & ~0x03;
 336                        }
 337                        if (len & 0x02) {
 338                                __raw_writew(*(u16 *)&src[index], fifo);
 339                                index += 2;
 340                        }
 341                } else {
 342                        if (len >= 2) {
 343                                iowrite16_rep(fifo, src + index, len >> 1);
 344                                index += len & ~0x01;
 345                        }
 346                }
 347                if (len & 0x01)
 348                        __raw_writeb(src[index], fifo);
 349        } else  {
 350                /* byte aligned */
 351                iowrite8_rep(fifo, src, len);
 352        }
 353}
 354
 355/*
 356 * Unload an endpoint's FIFO
 357 */
 358static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
 359{
 360        struct musb *musb = hw_ep->musb;
 361        void __iomem *fifo = hw_ep->fifo;
 362
 363        if (unlikely(len == 0))
 364                return;
 365
 366        dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n",
 367                        'R', hw_ep->epnum, fifo, len, dst);
 368
 369        /* we can't assume unaligned writes work */
 370        if (likely((0x01 & (unsigned long) dst) == 0)) {
 371                u16     index = 0;
 372
 373                /* best case is 32bit-aligned destination address */
 374                if ((0x02 & (unsigned long) dst) == 0) {
 375                        if (len >= 4) {
 376                                ioread32_rep(fifo, dst, len >> 2);
 377                                index = len & ~0x03;
 378                        }
 379                        if (len & 0x02) {
 380                                *(u16 *)&dst[index] = __raw_readw(fifo);
 381                                index += 2;
 382                        }
 383                } else {
 384                        if (len >= 2) {
 385                                ioread16_rep(fifo, dst, len >> 1);
 386                                index = len & ~0x01;
 387                        }
 388                }
 389                if (len & 0x01)
 390                        dst[index] = __raw_readb(fifo);
 391        } else  {
 392                /* byte aligned */
 393                ioread8_rep(fifo, dst, len);
 394        }
 395}
 396
 397/*
 398 * Old style IO functions
 399 */
 400u8 (*musb_readb)(void __iomem *addr, u32 offset);
 401EXPORT_SYMBOL_GPL(musb_readb);
 402
 403void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
 404EXPORT_SYMBOL_GPL(musb_writeb);
 405
 406u8 (*musb_clearb)(void __iomem *addr, u32 offset);
 407EXPORT_SYMBOL_GPL(musb_clearb);
 408
 409u16 (*musb_readw)(void __iomem *addr, u32 offset);
 410EXPORT_SYMBOL_GPL(musb_readw);
 411
 412void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
 413EXPORT_SYMBOL_GPL(musb_writew);
 414
 415u16 (*musb_clearw)(void __iomem *addr, u32 offset);
 416EXPORT_SYMBOL_GPL(musb_clearw);
 417
 418u32 musb_readl(void __iomem *addr, u32 offset)
 419{
 420        u32 data = __raw_readl(addr + offset);
 421
 422        trace_musb_readl(__builtin_return_address(0), addr, offset, data);
 423        return data;
 424}
 425EXPORT_SYMBOL_GPL(musb_readl);
 426
 427void musb_writel(void __iomem *addr, u32 offset, u32 data)
 428{
 429        trace_musb_writel(__builtin_return_address(0), addr, offset, data);
 430        __raw_writel(data, addr + offset);
 431}
 432EXPORT_SYMBOL_GPL(musb_writel);
 433
 434#ifndef CONFIG_MUSB_PIO_ONLY
 435struct dma_controller *
 436(*musb_dma_controller_create)(struct musb *musb, void __iomem *base);
 437EXPORT_SYMBOL(musb_dma_controller_create);
 438
 439void (*musb_dma_controller_destroy)(struct dma_controller *c);
 440EXPORT_SYMBOL(musb_dma_controller_destroy);
 441#endif
 442
 443/*
 444 * New style IO functions
 445 */
 446void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
 447{
 448        return hw_ep->musb->io.read_fifo(hw_ep, len, dst);
 449}
 450
 451void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
 452{
 453        return hw_ep->musb->io.write_fifo(hw_ep, len, src);
 454}
 455
 456static u8 musb_read_devctl(struct musb *musb)
 457{
 458        return musb_readb(musb->mregs, MUSB_DEVCTL);
 459}
 460
 461/**
 462 * musb_set_host - set and initialize host mode
 463 * @musb: musb controller driver data
 464 *
 465 * At least some musb revisions need to enable devctl session bit in
 466 * peripheral mode to switch to host mode. Initializes things to host
 467 * mode and sets A_IDLE. SoC glue needs to advance state further
 468 * based on phy provided VBUS state.
 469 *
 470 * Note that the SoC glue code may need to wait for musb to settle
 471 * on enable before calling this to avoid babble.
 472 */
 473int musb_set_host(struct musb *musb)
 474{
 475        int error = 0;
 476        u8 devctl;
 477
 478        if (!musb)
 479                return -EINVAL;
 480
 481        devctl = musb_read_devctl(musb);
 482        if (!(devctl & MUSB_DEVCTL_BDEVICE)) {
 483                trace_musb_state(musb, devctl, "Already in host mode");
 484                goto init_data;
 485        }
 486
 487        devctl |= MUSB_DEVCTL_SESSION;
 488        musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
 489
 490        error = readx_poll_timeout(musb_read_devctl, musb, devctl,
 491                                   !(devctl & MUSB_DEVCTL_BDEVICE), 5000,
 492                                   1000000);
 493        if (error) {
 494                dev_err(musb->controller, "%s: could not set host: %02x\n",
 495                        __func__, devctl);
 496
 497                return error;
 498        }
 499
 500        devctl = musb_read_devctl(musb);
 501        trace_musb_state(musb, devctl, "Host mode set");
 502
 503init_data:
 504        musb->is_active = 1;
 505        musb->xceiv->otg->state = OTG_STATE_A_IDLE;
 506        MUSB_HST_MODE(musb);
 507
 508        return error;
 509}
 510EXPORT_SYMBOL_GPL(musb_set_host);
 511
 512/**
 513 * musb_set_peripheral - set and initialize peripheral mode
 514 * @musb: musb controller driver data
 515 *
 516 * Clears devctl session bit and initializes things for peripheral
 517 * mode and sets B_IDLE. SoC glue needs to advance state further
 518 * based on phy provided VBUS state.
 519 */
 520int musb_set_peripheral(struct musb *musb)
 521{
 522        int error = 0;
 523        u8 devctl;
 524
 525        if (!musb)
 526                return -EINVAL;
 527
 528        devctl = musb_read_devctl(musb);
 529        if (devctl & MUSB_DEVCTL_BDEVICE) {
 530                trace_musb_state(musb, devctl, "Already in peripheral mode");
 531                goto init_data;
 532        }
 533
 534        devctl &= ~MUSB_DEVCTL_SESSION;
 535        musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
 536
 537        error = readx_poll_timeout(musb_read_devctl, musb, devctl,
 538                                   devctl & MUSB_DEVCTL_BDEVICE, 5000,
 539                                   1000000);
 540        if (error) {
 541                dev_err(musb->controller, "%s: could not set peripheral: %02x\n",
 542                        __func__, devctl);
 543
 544                return error;
 545        }
 546
 547        devctl = musb_read_devctl(musb);
 548        trace_musb_state(musb, devctl, "Peripheral mode set");
 549
 550init_data:
 551        musb->is_active = 0;
 552        musb->xceiv->otg->state = OTG_STATE_B_IDLE;
 553        MUSB_DEV_MODE(musb);
 554
 555        return error;
 556}
 557EXPORT_SYMBOL_GPL(musb_set_peripheral);
 558
 559/*-------------------------------------------------------------------------*/
 560
 561/* for high speed test mode; see USB 2.0 spec 7.1.20 */
 562static const u8 musb_test_packet[53] = {
 563        /* implicit SYNC then DATA0 to start */
 564
 565        /* JKJKJKJK x9 */
 566        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 567        /* JJKKJJKK x8 */
 568        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
 569        /* JJJJKKKK x8 */
 570        0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
 571        /* JJJJJJJKKKKKKK x8 */
 572        0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 573        /* JJJJJJJK x8 */
 574        0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd,
 575        /* JKKKKKKK x10, JK */
 576        0xfc, 0x7e, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0x7e
 577
 578        /* implicit CRC16 then EOP to end */
 579};
 580
 581void musb_load_testpacket(struct musb *musb)
 582{
 583        void __iomem    *regs = musb->endpoints[0].regs;
 584
 585        musb_ep_select(musb->mregs, 0);
 586        musb_write_fifo(musb->control_ep,
 587                        sizeof(musb_test_packet), musb_test_packet);
 588        musb_writew(regs, MUSB_CSR0, MUSB_CSR0_TXPKTRDY);
 589}
 590
 591/*-------------------------------------------------------------------------*/
 592
 593/*
 594 * Handles OTG hnp timeouts, such as b_ase0_brst
 595 */
 596static void musb_otg_timer_func(struct timer_list *t)
 597{
 598        struct musb     *musb = from_timer(musb, t, otg_timer);
 599        unsigned long   flags;
 600
 601        spin_lock_irqsave(&musb->lock, flags);
 602        switch (musb->xceiv->otg->state) {
 603        case OTG_STATE_B_WAIT_ACON:
 604                musb_dbg(musb,
 605                        "HNP: b_wait_acon timeout; back to b_peripheral");
 606                musb_g_disconnect(musb);
 607                musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
 608                musb->is_active = 0;
 609                break;
 610        case OTG_STATE_A_SUSPEND:
 611        case OTG_STATE_A_WAIT_BCON:
 612                musb_dbg(musb, "HNP: %s timeout",
 613                        usb_otg_state_string(musb->xceiv->otg->state));
 614                musb_platform_set_vbus(musb, 0);
 615                musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
 616                break;
 617        default:
 618                musb_dbg(musb, "HNP: Unhandled mode %s",
 619                        usb_otg_state_string(musb->xceiv->otg->state));
 620        }
 621        spin_unlock_irqrestore(&musb->lock, flags);
 622}
 623
 624/*
 625 * Stops the HNP transition. Caller must take care of locking.
 626 */
 627void musb_hnp_stop(struct musb *musb)
 628{
 629        struct usb_hcd  *hcd = musb->hcd;
 630        void __iomem    *mbase = musb->mregs;
 631        u8      reg;
 632
 633        musb_dbg(musb, "HNP: stop from %s",
 634                        usb_otg_state_string(musb->xceiv->otg->state));
 635
 636        switch (musb->xceiv->otg->state) {
 637        case OTG_STATE_A_PERIPHERAL:
 638                musb_g_disconnect(musb);
 639                musb_dbg(musb, "HNP: back to %s",
 640                        usb_otg_state_string(musb->xceiv->otg->state));
 641                break;
 642        case OTG_STATE_B_HOST:
 643                musb_dbg(musb, "HNP: Disabling HR");
 644                if (hcd)
 645                        hcd->self.is_b_host = 0;
 646                musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
 647                MUSB_DEV_MODE(musb);
 648                reg = musb_readb(mbase, MUSB_POWER);
 649                reg |= MUSB_POWER_SUSPENDM;
 650                musb_writeb(mbase, MUSB_POWER, reg);
 651                /* REVISIT: Start SESSION_REQUEST here? */
 652                break;
 653        default:
 654                musb_dbg(musb, "HNP: Stopping in unknown state %s",
 655                        usb_otg_state_string(musb->xceiv->otg->state));
 656        }
 657
 658        /*
 659         * When returning to A state after HNP, avoid hub_port_rebounce(),
 660         * which cause occasional OPT A "Did not receive reset after connect"
 661         * errors.
 662         */
 663        musb->port1_status &= ~(USB_PORT_STAT_C_CONNECTION << 16);
 664}
 665
 666static void musb_recover_from_babble(struct musb *musb);
 667
 668static void musb_handle_intr_resume(struct musb *musb, u8 devctl)
 669{
 670        musb_dbg(musb, "RESUME (%s)",
 671                        usb_otg_state_string(musb->xceiv->otg->state));
 672
 673        if (devctl & MUSB_DEVCTL_HM) {
 674                switch (musb->xceiv->otg->state) {
 675                case OTG_STATE_A_SUSPEND:
 676                        /* remote wakeup? */
 677                        musb->port1_status |=
 678                                        (USB_PORT_STAT_C_SUSPEND << 16)
 679                                        | MUSB_PORT_STAT_RESUME;
 680                        musb->rh_timer = jiffies
 681                                + msecs_to_jiffies(USB_RESUME_TIMEOUT);
 682                        musb->xceiv->otg->state = OTG_STATE_A_HOST;
 683                        musb->is_active = 1;
 684                        musb_host_resume_root_hub(musb);
 685                        schedule_delayed_work(&musb->finish_resume_work,
 686                                msecs_to_jiffies(USB_RESUME_TIMEOUT));
 687                        break;
 688                case OTG_STATE_B_WAIT_ACON:
 689                        musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
 690                        musb->is_active = 1;
 691                        MUSB_DEV_MODE(musb);
 692                        break;
 693                default:
 694                        WARNING("bogus %s RESUME (%s)\n",
 695                                "host",
 696                                usb_otg_state_string(musb->xceiv->otg->state));
 697                }
 698        } else {
 699                switch (musb->xceiv->otg->state) {
 700                case OTG_STATE_A_SUSPEND:
 701                        /* possibly DISCONNECT is upcoming */
 702                        musb->xceiv->otg->state = OTG_STATE_A_HOST;
 703                        musb_host_resume_root_hub(musb);
 704                        break;
 705                case OTG_STATE_B_WAIT_ACON:
 706                case OTG_STATE_B_PERIPHERAL:
 707                        /* disconnect while suspended?  we may
 708                         * not get a disconnect irq...
 709                         */
 710                        if ((devctl & MUSB_DEVCTL_VBUS)
 711                                        != (3 << MUSB_DEVCTL_VBUS_SHIFT)
 712                                        ) {
 713                                musb->int_usb |= MUSB_INTR_DISCONNECT;
 714                                musb->int_usb &= ~MUSB_INTR_SUSPEND;
 715                                break;
 716                        }
 717                        musb_g_resume(musb);
 718                        break;
 719                case OTG_STATE_B_IDLE:
 720                        musb->int_usb &= ~MUSB_INTR_SUSPEND;
 721                        break;
 722                default:
 723                        WARNING("bogus %s RESUME (%s)\n",
 724                                "peripheral",
 725                                usb_otg_state_string(musb->xceiv->otg->state));
 726                }
 727        }
 728}
 729
 730/* return IRQ_HANDLED to tell the caller to return immediately */
 731static irqreturn_t musb_handle_intr_sessreq(struct musb *musb, u8 devctl)
 732{
 733        void __iomem *mbase = musb->mregs;
 734
 735        if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS
 736                        && (devctl & MUSB_DEVCTL_BDEVICE)) {
 737                musb_dbg(musb, "SessReq while on B state");
 738                return IRQ_HANDLED;
 739        }
 740
 741        musb_dbg(musb, "SESSION_REQUEST (%s)",
 742                usb_otg_state_string(musb->xceiv->otg->state));
 743
 744        /* IRQ arrives from ID pin sense or (later, if VBUS power
 745         * is removed) SRP.  responses are time critical:
 746         *  - turn on VBUS (with silicon-specific mechanism)
 747         *  - go through A_WAIT_VRISE
 748         *  - ... to A_WAIT_BCON.
 749         * a_wait_vrise_tmout triggers VBUS_ERROR transitions
 750         */
 751        musb_writeb(mbase, MUSB_DEVCTL, MUSB_DEVCTL_SESSION);
 752        musb->ep0_stage = MUSB_EP0_START;
 753        musb->xceiv->otg->state = OTG_STATE_A_IDLE;
 754        MUSB_HST_MODE(musb);
 755        musb_platform_set_vbus(musb, 1);
 756
 757        return IRQ_NONE;
 758}
 759
 760static void musb_handle_intr_vbuserr(struct musb *musb, u8 devctl)
 761{
 762        int     ignore = 0;
 763
 764        /* During connection as an A-Device, we may see a short
 765         * current spikes causing voltage drop, because of cable
 766         * and peripheral capacitance combined with vbus draw.
 767         * (So: less common with truly self-powered devices, where
 768         * vbus doesn't act like a power supply.)
 769         *
 770         * Such spikes are short; usually less than ~500 usec, max
 771         * of ~2 msec.  That is, they're not sustained overcurrent
 772         * errors, though they're reported using VBUSERROR irqs.
 773         *
 774         * Workarounds:  (a) hardware: use self powered devices.
 775         * (b) software:  ignore non-repeated VBUS errors.
 776         *
 777         * REVISIT:  do delays from lots of DEBUG_KERNEL checks
 778         * make trouble here, keeping VBUS < 4.4V ?
 779         */
 780        switch (musb->xceiv->otg->state) {
 781        case OTG_STATE_A_HOST:
 782                /* recovery is dicey once we've gotten past the
 783                 * initial stages of enumeration, but if VBUS
 784                 * stayed ok at the other end of the link, and
 785                 * another reset is due (at least for high speed,
 786                 * to redo the chirp etc), it might work OK...
 787                 */
 788        case OTG_STATE_A_WAIT_BCON:
 789        case OTG_STATE_A_WAIT_VRISE:
 790                if (musb->vbuserr_retry) {
 791                        void __iomem *mbase = musb->mregs;
 792
 793                        musb->vbuserr_retry--;
 794                        ignore = 1;
 795                        devctl |= MUSB_DEVCTL_SESSION;
 796                        musb_writeb(mbase, MUSB_DEVCTL, devctl);
 797                } else {
 798                        musb->port1_status |=
 799                                  USB_PORT_STAT_OVERCURRENT
 800                                | (USB_PORT_STAT_C_OVERCURRENT << 16);
 801                }
 802                break;
 803        default:
 804                break;
 805        }
 806
 807        dev_printk(ignore ? KERN_DEBUG : KERN_ERR, musb->controller,
 808                        "VBUS_ERROR in %s (%02x, %s), retry #%d, port1 %08x\n",
 809                        usb_otg_state_string(musb->xceiv->otg->state),
 810                        devctl,
 811                        ({ char *s;
 812                        switch (devctl & MUSB_DEVCTL_VBUS) {
 813                        case 0 << MUSB_DEVCTL_VBUS_SHIFT:
 814                                s = "<SessEnd"; break;
 815                        case 1 << MUSB_DEVCTL_VBUS_SHIFT:
 816                                s = "<AValid"; break;
 817                        case 2 << MUSB_DEVCTL_VBUS_SHIFT:
 818                                s = "<VBusValid"; break;
 819                        /* case 3 << MUSB_DEVCTL_VBUS_SHIFT: */
 820                        default:
 821                                s = "VALID"; break;
 822                        } s; }),
 823                        VBUSERR_RETRY_COUNT - musb->vbuserr_retry,
 824                        musb->port1_status);
 825
 826        /* go through A_WAIT_VFALL then start a new session */
 827        if (!ignore)
 828                musb_platform_set_vbus(musb, 0);
 829}
 830
 831static void musb_handle_intr_suspend(struct musb *musb, u8 devctl)
 832{
 833        musb_dbg(musb, "SUSPEND (%s) devctl %02x",
 834                usb_otg_state_string(musb->xceiv->otg->state), devctl);
 835
 836        switch (musb->xceiv->otg->state) {
 837        case OTG_STATE_A_PERIPHERAL:
 838                /* We also come here if the cable is removed, since
 839                 * this silicon doesn't report ID-no-longer-grounded.
 840                 *
 841                 * We depend on T(a_wait_bcon) to shut us down, and
 842                 * hope users don't do anything dicey during this
 843                 * undesired detour through A_WAIT_BCON.
 844                 */
 845                musb_hnp_stop(musb);
 846                musb_host_resume_root_hub(musb);
 847                musb_root_disconnect(musb);
 848                musb_platform_try_idle(musb, jiffies
 849                                + msecs_to_jiffies(musb->a_wait_bcon
 850                                        ? : OTG_TIME_A_WAIT_BCON));
 851
 852                break;
 853        case OTG_STATE_B_IDLE:
 854                if (!musb->is_active)
 855                        break;
 856                fallthrough;
 857        case OTG_STATE_B_PERIPHERAL:
 858                musb_g_suspend(musb);
 859                musb->is_active = musb->g.b_hnp_enable;
 860                if (musb->is_active) {
 861                        musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON;
 862                        musb_dbg(musb, "HNP: Setting timer for b_ase0_brst");
 863                        mod_timer(&musb->otg_timer, jiffies
 864                                + msecs_to_jiffies(
 865                                                OTG_TIME_B_ASE0_BRST));
 866                }
 867                break;
 868        case OTG_STATE_A_WAIT_BCON:
 869                if (musb->a_wait_bcon != 0)
 870                        musb_platform_try_idle(musb, jiffies
 871                                + msecs_to_jiffies(musb->a_wait_bcon));
 872                break;
 873        case OTG_STATE_A_HOST:
 874                musb->xceiv->otg->state = OTG_STATE_A_SUSPEND;
 875                musb->is_active = musb->hcd->self.b_hnp_enable;
 876                break;
 877        case OTG_STATE_B_HOST:
 878                /* Transition to B_PERIPHERAL, see 6.8.2.6 p 44 */
 879                musb_dbg(musb, "REVISIT: SUSPEND as B_HOST");
 880                break;
 881        default:
 882                /* "should not happen" */
 883                musb->is_active = 0;
 884                break;
 885        }
 886}
 887
 888static void musb_handle_intr_connect(struct musb *musb, u8 devctl, u8 int_usb)
 889{
 890        struct usb_hcd *hcd = musb->hcd;
 891
 892        musb->is_active = 1;
 893        musb->ep0_stage = MUSB_EP0_START;
 894
 895        musb->intrtxe = musb->epmask;
 896        musb_writew(musb->mregs, MUSB_INTRTXE, musb->intrtxe);
 897        musb->intrrxe = musb->epmask & 0xfffe;
 898        musb_writew(musb->mregs, MUSB_INTRRXE, musb->intrrxe);
 899        musb_writeb(musb->mregs, MUSB_INTRUSBE, 0xf7);
 900        musb->port1_status &= ~(USB_PORT_STAT_LOW_SPEED
 901                                |USB_PORT_STAT_HIGH_SPEED
 902                                |USB_PORT_STAT_ENABLE
 903                                );
 904        musb->port1_status |= USB_PORT_STAT_CONNECTION
 905                                |(USB_PORT_STAT_C_CONNECTION << 16);
 906
 907        /* high vs full speed is just a guess until after reset */
 908        if (devctl & MUSB_DEVCTL_LSDEV)
 909                musb->port1_status |= USB_PORT_STAT_LOW_SPEED;
 910
 911        /* indicate new connection to OTG machine */
 912        switch (musb->xceiv->otg->state) {
 913        case OTG_STATE_B_PERIPHERAL:
 914                if (int_usb & MUSB_INTR_SUSPEND) {
 915                        musb_dbg(musb, "HNP: SUSPEND+CONNECT, now b_host");
 916                        int_usb &= ~MUSB_INTR_SUSPEND;
 917                        goto b_host;
 918                } else
 919                        musb_dbg(musb, "CONNECT as b_peripheral???");
 920                break;
 921        case OTG_STATE_B_WAIT_ACON:
 922                musb_dbg(musb, "HNP: CONNECT, now b_host");
 923b_host:
 924                musb->xceiv->otg->state = OTG_STATE_B_HOST;
 925                if (musb->hcd)
 926                        musb->hcd->self.is_b_host = 1;
 927                del_timer(&musb->otg_timer);
 928                break;
 929        default:
 930                if ((devctl & MUSB_DEVCTL_VBUS)
 931                                == (3 << MUSB_DEVCTL_VBUS_SHIFT)) {
 932                        musb->xceiv->otg->state = OTG_STATE_A_HOST;
 933                        if (hcd)
 934                                hcd->self.is_b_host = 0;
 935                }
 936                break;
 937        }
 938
 939        musb_host_poke_root_hub(musb);
 940
 941        musb_dbg(musb, "CONNECT (%s) devctl %02x",
 942                        usb_otg_state_string(musb->xceiv->otg->state), devctl);
 943}
 944
 945static void musb_handle_intr_disconnect(struct musb *musb, u8 devctl)
 946{
 947        musb_dbg(musb, "DISCONNECT (%s) as %s, devctl %02x",
 948                        usb_otg_state_string(musb->xceiv->otg->state),
 949                        MUSB_MODE(musb), devctl);
 950
 951        switch (musb->xceiv->otg->state) {
 952        case OTG_STATE_A_HOST:
 953        case OTG_STATE_A_SUSPEND:
 954                musb_host_resume_root_hub(musb);
 955                musb_root_disconnect(musb);
 956                if (musb->a_wait_bcon != 0)
 957                        musb_platform_try_idle(musb, jiffies
 958                                + msecs_to_jiffies(musb->a_wait_bcon));
 959                break;
 960        case OTG_STATE_B_HOST:
 961                /* REVISIT this behaves for "real disconnect"
 962                 * cases; make sure the other transitions from
 963                 * from B_HOST act right too.  The B_HOST code
 964                 * in hnp_stop() is currently not used...
 965                 */
 966                musb_root_disconnect(musb);
 967                if (musb->hcd)
 968                        musb->hcd->self.is_b_host = 0;
 969                musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
 970                MUSB_DEV_MODE(musb);
 971                musb_g_disconnect(musb);
 972                break;
 973        case OTG_STATE_A_PERIPHERAL:
 974                musb_hnp_stop(musb);
 975                musb_root_disconnect(musb);
 976                fallthrough;
 977        case OTG_STATE_B_WAIT_ACON:
 978        case OTG_STATE_B_PERIPHERAL:
 979        case OTG_STATE_B_IDLE:
 980                musb_g_disconnect(musb);
 981                break;
 982        default:
 983                WARNING("unhandled DISCONNECT transition (%s)\n",
 984                        usb_otg_state_string(musb->xceiv->otg->state));
 985                break;
 986        }
 987}
 988
 989/*
 990 * mentor saves a bit: bus reset and babble share the same irq.
 991 * only host sees babble; only peripheral sees bus reset.
 992 */
 993static void musb_handle_intr_reset(struct musb *musb)
 994{
 995        if (is_host_active(musb)) {
 996                /*
 997                 * When BABBLE happens what we can depends on which
 998                 * platform MUSB is running, because some platforms
 999                 * implemented proprietary means for 'recovering' from
1000                 * Babble conditions. One such platform is AM335x. In
1001                 * most cases, however, the only thing we can do is
1002                 * drop the session.
1003                 */
1004                dev_err(musb->controller, "Babble\n");
1005                musb_recover_from_babble(musb);
1006        } else {
1007                musb_dbg(musb, "BUS RESET as %s",
1008                        usb_otg_state_string(musb->xceiv->otg->state));
1009                switch (musb->xceiv->otg->state) {
1010                case OTG_STATE_A_SUSPEND:
1011                        musb_g_reset(musb);
1012                        fallthrough;
1013                case OTG_STATE_A_WAIT_BCON:     /* OPT TD.4.7-900ms */
1014                        /* never use invalid T(a_wait_bcon) */
1015                        musb_dbg(musb, "HNP: in %s, %d msec timeout",
1016                                usb_otg_state_string(musb->xceiv->otg->state),
1017                                TA_WAIT_BCON(musb));
1018                        mod_timer(&musb->otg_timer, jiffies
1019                                + msecs_to_jiffies(TA_WAIT_BCON(musb)));
1020                        break;
1021                case OTG_STATE_A_PERIPHERAL:
1022                        del_timer(&musb->otg_timer);
1023                        musb_g_reset(musb);
1024                        break;
1025                case OTG_STATE_B_WAIT_ACON:
1026                        musb_dbg(musb, "HNP: RESET (%s), to b_peripheral",
1027                                usb_otg_state_string(musb->xceiv->otg->state));
1028                        musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
1029                        musb_g_reset(musb);
1030                        break;
1031                case OTG_STATE_B_IDLE:
1032                        musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
1033                        fallthrough;
1034                case OTG_STATE_B_PERIPHERAL:
1035                        musb_g_reset(musb);
1036                        break;
1037                default:
1038                        musb_dbg(musb, "Unhandled BUS RESET as %s",
1039                                usb_otg_state_string(musb->xceiv->otg->state));
1040                }
1041        }
1042}
1043
1044/*
1045 * Interrupt Service Routine to record USB "global" interrupts.
1046 * Since these do not happen often and signify things of
1047 * paramount importance, it seems OK to check them individually;
1048 * the order of the tests is specified in the manual
1049 *
1050 * @param musb instance pointer
1051 * @param int_usb register contents
1052 * @param devctl
1053 */
1054
1055static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
1056                                u8 devctl)
1057{
1058        irqreturn_t handled = IRQ_NONE;
1059
1060        musb_dbg(musb, "<== DevCtl=%02x, int_usb=0x%x", devctl, int_usb);
1061
1062        /* in host mode, the peripheral may issue remote wakeup.
1063         * in peripheral mode, the host may resume the link.
1064         * spurious RESUME irqs happen too, paired with SUSPEND.
1065         */
1066        if (int_usb & MUSB_INTR_RESUME) {
1067                musb_handle_intr_resume(musb, devctl);
1068                handled = IRQ_HANDLED;
1069        }
1070
1071        /* see manual for the order of the tests */
1072        if (int_usb & MUSB_INTR_SESSREQ) {
1073                if (musb_handle_intr_sessreq(musb, devctl))
1074                        return IRQ_HANDLED;
1075                handled = IRQ_HANDLED;
1076        }
1077
1078        if (int_usb & MUSB_INTR_VBUSERROR) {
1079                musb_handle_intr_vbuserr(musb, devctl);
1080                handled = IRQ_HANDLED;
1081        }
1082
1083        if (int_usb & MUSB_INTR_SUSPEND) {
1084                musb_handle_intr_suspend(musb, devctl);
1085                handled = IRQ_HANDLED;
1086        }
1087
1088        if (int_usb & MUSB_INTR_CONNECT) {
1089                musb_handle_intr_connect(musb, devctl, int_usb);
1090                handled = IRQ_HANDLED;
1091        }
1092
1093        if (int_usb & MUSB_INTR_DISCONNECT) {
1094                musb_handle_intr_disconnect(musb, devctl);
1095                handled = IRQ_HANDLED;
1096        }
1097
1098        if (int_usb & MUSB_INTR_RESET) {
1099                musb_handle_intr_reset(musb);
1100                handled = IRQ_HANDLED;
1101        }
1102
1103#if 0
1104/* REVISIT ... this would be for multiplexing periodic endpoints, or
1105 * supporting transfer phasing to prevent exceeding ISO bandwidth
1106 * limits of a given frame or microframe.
1107 *
1108 * It's not needed for peripheral side, which dedicates endpoints;
1109 * though it _might_ use SOF irqs for other purposes.
1110 *
1111 * And it's not currently needed for host side, which also dedicates
1112 * endpoints, relies on TX/RX interval registers, and isn't claimed
1113 * to support ISO transfers yet.
1114 */
1115        if (int_usb & MUSB_INTR_SOF) {
1116                void __iomem *mbase = musb->mregs;
1117                struct musb_hw_ep       *ep;
1118                u8 epnum;
1119                u16 frame;
1120
1121                dev_dbg(musb->controller, "START_OF_FRAME\n");
1122                handled = IRQ_HANDLED;
1123
1124                /* start any periodic Tx transfers waiting for current frame */
1125                frame = musb_readw(mbase, MUSB_FRAME);
1126                ep = musb->endpoints;
1127                for (epnum = 1; (epnum < musb->nr_endpoints)
1128                                        && (musb->epmask >= (1 << epnum));
1129                                epnum++, ep++) {
1130                        /*
1131                         * FIXME handle framecounter wraps (12 bits)
1132                         * eliminate duplicated StartUrb logic
1133                         */
1134                        if (ep->dwWaitFrame >= frame) {
1135                                ep->dwWaitFrame = 0;
1136                                pr_debug("SOF --> periodic TX%s on %d\n",
1137                                        ep->tx_channel ? " DMA" : "",
1138                                        epnum);
1139                                if (!ep->tx_channel)
1140                                        musb_h_tx_start(musb, epnum);
1141                                else
1142                                        cppi_hostdma_start(musb, epnum);
1143                        }
1144                }               /* end of for loop */
1145        }
1146#endif
1147
1148        schedule_delayed_work(&musb->irq_work, 0);
1149
1150        return handled;
1151}
1152
1153/*-------------------------------------------------------------------------*/
1154
1155static void musb_disable_interrupts(struct musb *musb)
1156{
1157        void __iomem    *mbase = musb->mregs;
1158
1159        /* disable interrupts */
1160        musb_writeb(mbase, MUSB_INTRUSBE, 0);
1161        musb->intrtxe = 0;
1162        musb_writew(mbase, MUSB_INTRTXE, 0);
1163        musb->intrrxe = 0;
1164        musb_writew(mbase, MUSB_INTRRXE, 0);
1165
1166        /*  flush pending interrupts */
1167        musb_clearb(mbase, MUSB_INTRUSB);
1168        musb_clearw(mbase, MUSB_INTRTX);
1169        musb_clearw(mbase, MUSB_INTRRX);
1170}
1171
1172static void musb_enable_interrupts(struct musb *musb)
1173{
1174        void __iomem    *regs = musb->mregs;
1175
1176        /*  Set INT enable registers, enable interrupts */
1177        musb->intrtxe = musb->epmask;
1178        musb_writew(regs, MUSB_INTRTXE, musb->intrtxe);
1179        musb->intrrxe = musb->epmask & 0xfffe;
1180        musb_writew(regs, MUSB_INTRRXE, musb->intrrxe);
1181        musb_writeb(regs, MUSB_INTRUSBE, 0xf7);
1182
1183}
1184
1185/*
1186 * Program the HDRC to start (enable interrupts, dma, etc.).
1187 */
1188void musb_start(struct musb *musb)
1189{
1190        void __iomem    *regs = musb->mregs;
1191        u8              devctl = musb_readb(regs, MUSB_DEVCTL);
1192        u8              power;
1193
1194        musb_dbg(musb, "<== devctl %02x", devctl);
1195
1196        musb_enable_interrupts(musb);
1197        musb_writeb(regs, MUSB_TESTMODE, 0);
1198
1199        power = MUSB_POWER_ISOUPDATE;
1200        /*
1201         * treating UNKNOWN as unspecified maximum speed, in which case
1202         * we will default to high-speed.
1203         */
1204        if (musb->config->maximum_speed == USB_SPEED_HIGH ||
1205                        musb->config->maximum_speed == USB_SPEED_UNKNOWN)
1206                power |= MUSB_POWER_HSENAB;
1207        musb_writeb(regs, MUSB_POWER, power);
1208
1209        musb->is_active = 0;
1210        devctl = musb_readb(regs, MUSB_DEVCTL);
1211        devctl &= ~MUSB_DEVCTL_SESSION;
1212
1213        /* session started after:
1214         * (a) ID-grounded irq, host mode;
1215         * (b) vbus present/connect IRQ, peripheral mode;
1216         * (c) peripheral initiates, using SRP
1217         */
1218        if (musb->port_mode != MUSB_HOST &&
1219                        musb->xceiv->otg->state != OTG_STATE_A_WAIT_BCON &&
1220                        (devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS) {
1221                musb->is_active = 1;
1222        } else {
1223                devctl |= MUSB_DEVCTL_SESSION;
1224        }
1225
1226        musb_platform_enable(musb);
1227        musb_writeb(regs, MUSB_DEVCTL, devctl);
1228}
1229
1230/*
1231 * Make the HDRC stop (disable interrupts, etc.);
1232 * reversible by musb_start
1233 * called on gadget driver unregister
1234 * with controller locked, irqs blocked
1235 * acts as a NOP unless some role activated the hardware
1236 */
1237void musb_stop(struct musb *musb)
1238{
1239        /* stop IRQs, timers, ... */
1240        musb_platform_disable(musb);
1241        musb_disable_interrupts(musb);
1242        musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
1243
1244        /* FIXME
1245         *  - mark host and/or peripheral drivers unusable/inactive
1246         *  - disable DMA (and enable it in HdrcStart)
1247         *  - make sure we can musb_start() after musb_stop(); with
1248         *    OTG mode, gadget driver module rmmod/modprobe cycles that
1249         *  - ...
1250         */
1251        musb_platform_try_idle(musb, 0);
1252}
1253
1254/*-------------------------------------------------------------------------*/
1255
1256/*
1257 * The silicon either has hard-wired endpoint configurations, or else
1258 * "dynamic fifo" sizing.  The driver has support for both, though at this
1259 * writing only the dynamic sizing is very well tested.   Since we switched
1260 * away from compile-time hardware parameters, we can no longer rely on
1261 * dead code elimination to leave only the relevant one in the object file.
1262 *
1263 * We don't currently use dynamic fifo setup capability to do anything
1264 * more than selecting one of a bunch of predefined configurations.
1265 */
1266static ushort fifo_mode;
1267
1268/* "modprobe ... fifo_mode=1" etc */
1269module_param(fifo_mode, ushort, 0);
1270MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration");
1271
1272/*
1273 * tables defining fifo_mode values.  define more if you like.
1274 * for host side, make sure both halves of ep1 are set up.
1275 */
1276
1277/* mode 0 - fits in 2KB */
1278static struct musb_fifo_cfg mode_0_cfg[] = {
1279{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, },
1280{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, },
1281{ .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, },
1282{ .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
1283{ .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
1284};
1285
1286/* mode 1 - fits in 4KB */
1287static struct musb_fifo_cfg mode_1_cfg[] = {
1288{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
1289{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
1290{ .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, .mode = BUF_DOUBLE, },
1291{ .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
1292{ .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
1293};
1294
1295/* mode 2 - fits in 4KB */
1296static struct musb_fifo_cfg mode_2_cfg[] = {
1297{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, },
1298{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, },
1299{ .hw_ep_num = 2, .style = FIFO_TX,   .maxpacket = 512, },
1300{ .hw_ep_num = 2, .style = FIFO_RX,   .maxpacket = 512, },
1301{ .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 960, },
1302{ .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 1024, },
1303};
1304
1305/* mode 3 - fits in 4KB */
1306static struct musb_fifo_cfg mode_3_cfg[] = {
1307{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
1308{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
1309{ .hw_ep_num = 2, .style = FIFO_TX,   .maxpacket = 512, },
1310{ .hw_ep_num = 2, .style = FIFO_RX,   .maxpacket = 512, },
1311{ .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
1312{ .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
1313};
1314
1315/* mode 4 - fits in 16KB */
1316static struct musb_fifo_cfg mode_4_cfg[] = {
1317{ .hw_ep_num =  1, .style = FIFO_TX,   .maxpacket = 512, },
1318{ .hw_ep_num =  1, .style = FIFO_RX,   .maxpacket = 512, },
1319{ .hw_ep_num =  2, .style = FIFO_TX,   .maxpacket = 512, },
1320{ .hw_ep_num =  2, .style = FIFO_RX,   .maxpacket = 512, },
1321{ .hw_ep_num =  3, .style = FIFO_TX,   .maxpacket = 512, },
1322{ .hw_ep_num =  3, .style = FIFO_RX,   .maxpacket = 512, },
1323{ .hw_ep_num =  4, .style = FIFO_TX,   .maxpacket = 512, },
1324{ .hw_ep_num =  4, .style = FIFO_RX,   .maxpacket = 512, },
1325{ .hw_ep_num =  5, .style = FIFO_TX,   .maxpacket = 512, },
1326{ .hw_ep_num =  5, .style = FIFO_RX,   .maxpacket = 512, },
1327{ .hw_ep_num =  6, .style = FIFO_TX,   .maxpacket = 512, },
1328{ .hw_ep_num =  6, .style = FIFO_RX,   .maxpacket = 512, },
1329{ .hw_ep_num =  7, .style = FIFO_TX,   .maxpacket = 512, },
1330{ .hw_ep_num =  7, .style = FIFO_RX,   .maxpacket = 512, },
1331{ .hw_ep_num =  8, .style = FIFO_TX,   .maxpacket = 512, },
1332{ .hw_ep_num =  8, .style = FIFO_RX,   .maxpacket = 512, },
1333{ .hw_ep_num =  9, .style = FIFO_TX,   .maxpacket = 512, },
1334{ .hw_ep_num =  9, .style = FIFO_RX,   .maxpacket = 512, },
1335{ .hw_ep_num = 10, .style = FIFO_TX,   .maxpacket = 256, },
1336{ .hw_ep_num = 10, .style = FIFO_RX,   .maxpacket = 64, },
1337{ .hw_ep_num = 11, .style = FIFO_TX,   .maxpacket = 256, },
1338{ .hw_ep_num = 11, .style = FIFO_RX,   .maxpacket = 64, },
1339{ .hw_ep_num = 12, .style = FIFO_TX,   .maxpacket = 256, },
1340{ .hw_ep_num = 12, .style = FIFO_RX,   .maxpacket = 64, },
1341{ .hw_ep_num = 13, .style = FIFO_RXTX, .maxpacket = 4096, },
1342{ .hw_ep_num = 14, .style = FIFO_RXTX, .maxpacket = 1024, },
1343{ .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, },
1344};
1345
1346/* mode 5 - fits in 8KB */
1347static struct musb_fifo_cfg mode_5_cfg[] = {
1348{ .hw_ep_num =  1, .style = FIFO_TX,   .maxpacket = 512, },
1349{ .hw_ep_num =  1, .style = FIFO_RX,   .maxpacket = 512, },
1350{ .hw_ep_num =  2, .style = FIFO_TX,   .maxpacket = 512, },
1351{ .hw_ep_num =  2, .style = FIFO_RX,   .maxpacket = 512, },
1352{ .hw_ep_num =  3, .style = FIFO_TX,   .maxpacket = 512, },
1353{ .hw_ep_num =  3, .style = FIFO_RX,   .maxpacket = 512, },
1354{ .hw_ep_num =  4, .style = FIFO_TX,   .maxpacket = 512, },
1355{ .hw_ep_num =  4, .style = FIFO_RX,   .maxpacket = 512, },
1356{ .hw_ep_num =  5, .style = FIFO_TX,   .maxpacket = 512, },
1357{ .hw_ep_num =  5, .style = FIFO_RX,   .maxpacket = 512, },
1358{ .hw_ep_num =  6, .style = FIFO_TX,   .maxpacket = 32, },
1359{ .hw_ep_num =  6, .style = FIFO_RX,   .maxpacket = 32, },
1360{ .hw_ep_num =  7, .style = FIFO_TX,   .maxpacket = 32, },
1361{ .hw_ep_num =  7, .style = FIFO_RX,   .maxpacket = 32, },
1362{ .hw_ep_num =  8, .style = FIFO_TX,   .maxpacket = 32, },
1363{ .hw_ep_num =  8, .style = FIFO_RX,   .maxpacket = 32, },
1364{ .hw_ep_num =  9, .style = FIFO_TX,   .maxpacket = 32, },
1365{ .hw_ep_num =  9, .style = FIFO_RX,   .maxpacket = 32, },
1366{ .hw_ep_num = 10, .style = FIFO_TX,   .maxpacket = 32, },
1367{ .hw_ep_num = 10, .style = FIFO_RX,   .maxpacket = 32, },
1368{ .hw_ep_num = 11, .style = FIFO_TX,   .maxpacket = 32, },
1369{ .hw_ep_num = 11, .style = FIFO_RX,   .maxpacket = 32, },
1370{ .hw_ep_num = 12, .style = FIFO_TX,   .maxpacket = 32, },
1371{ .hw_ep_num = 12, .style = FIFO_RX,   .maxpacket = 32, },
1372{ .hw_ep_num = 13, .style = FIFO_RXTX, .maxpacket = 512, },
1373{ .hw_ep_num = 14, .style = FIFO_RXTX, .maxpacket = 1024, },
1374{ .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, },
1375};
1376
1377/*
1378 * configure a fifo; for non-shared endpoints, this may be called
1379 * once for a tx fifo and once for an rx fifo.
1380 *
1381 * returns negative errno or offset for next fifo.
1382 */
1383static int
1384fifo_setup(struct musb *musb, struct musb_hw_ep  *hw_ep,
1385                const struct musb_fifo_cfg *cfg, u16 offset)
1386{
1387        void __iomem    *mbase = musb->mregs;
1388        int     size = 0;
1389        u16     maxpacket = cfg->maxpacket;
1390        u16     c_off = offset >> 3;
1391        u8      c_size;
1392
1393        /* expect hw_ep has already been zero-initialized */
1394
1395        size = ffs(max(maxpacket, (u16) 8)) - 1;
1396        maxpacket = 1 << size;
1397
1398        c_size = size - 3;
1399        if (cfg->mode == BUF_DOUBLE) {
1400                if ((offset + (maxpacket << 1)) >
1401                                (1 << (musb->config->ram_bits + 2)))
1402                        return -EMSGSIZE;
1403                c_size |= MUSB_FIFOSZ_DPB;
1404        } else {
1405                if ((offset + maxpacket) > (1 << (musb->config->ram_bits + 2)))
1406                        return -EMSGSIZE;
1407        }
1408
1409        /* configure the FIFO */
1410        musb_writeb(mbase, MUSB_INDEX, hw_ep->epnum);
1411
1412        /* EP0 reserved endpoint for control, bidirectional;
1413         * EP1 reserved for bulk, two unidirectional halves.
1414         */
1415        if (hw_ep->epnum == 1)
1416                musb->bulk_ep = hw_ep;
1417        /* REVISIT error check:  be sure ep0 can both rx and tx ... */
1418        switch (cfg->style) {
1419        case FIFO_TX:
1420                musb_writeb(mbase, MUSB_TXFIFOSZ, c_size);
1421                musb_writew(mbase, MUSB_TXFIFOADD, c_off);
1422                hw_ep->tx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB);
1423                hw_ep->max_packet_sz_tx = maxpacket;
1424                break;
1425        case FIFO_RX:
1426                musb_writeb(mbase, MUSB_RXFIFOSZ, c_size);
1427                musb_writew(mbase, MUSB_RXFIFOADD, c_off);
1428                hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB);
1429                hw_ep->max_packet_sz_rx = maxpacket;
1430                break;
1431        case FIFO_RXTX:
1432                musb_writeb(mbase, MUSB_TXFIFOSZ, c_size);
1433                musb_writew(mbase, MUSB_TXFIFOADD, c_off);
1434                hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB);
1435                hw_ep->max_packet_sz_rx = maxpacket;
1436
1437                musb_writeb(mbase, MUSB_RXFIFOSZ, c_size);
1438                musb_writew(mbase, MUSB_RXFIFOADD, c_off);
1439                hw_ep->tx_double_buffered = hw_ep->rx_double_buffered;
1440                hw_ep->max_packet_sz_tx = maxpacket;
1441
1442                hw_ep->is_shared_fifo = true;
1443                break;
1444        }
1445
1446        /* NOTE rx and tx endpoint irqs aren't managed separately,
1447         * which happens to be ok
1448         */
1449        musb->epmask |= (1 << hw_ep->epnum);
1450
1451        return offset + (maxpacket << ((c_size & MUSB_FIFOSZ_DPB) ? 1 : 0));
1452}
1453
1454static struct musb_fifo_cfg ep0_cfg = {
1455        .style = FIFO_RXTX, .maxpacket = 64,
1456};
1457
1458static int ep_config_from_table(struct musb *musb)
1459{
1460        const struct musb_fifo_cfg      *cfg;
1461        unsigned                i, n;
1462        int                     offset;
1463        struct musb_hw_ep       *hw_ep = musb->endpoints;
1464
1465        if (musb->config->fifo_cfg) {
1466                cfg = musb->config->fifo_cfg;
1467                n = musb->config->fifo_cfg_size;
1468                goto done;
1469        }
1470
1471        switch (fifo_mode) {
1472        default:
1473                fifo_mode = 0;
1474                fallthrough;
1475        case 0:
1476                cfg = mode_0_cfg;
1477                n = ARRAY_SIZE(mode_0_cfg);
1478                break;
1479        case 1:
1480                cfg = mode_1_cfg;
1481                n = ARRAY_SIZE(mode_1_cfg);
1482                break;
1483        case 2:
1484                cfg = mode_2_cfg;
1485                n = ARRAY_SIZE(mode_2_cfg);
1486                break;
1487        case 3:
1488                cfg = mode_3_cfg;
1489                n = ARRAY_SIZE(mode_3_cfg);
1490                break;
1491        case 4:
1492                cfg = mode_4_cfg;
1493                n = ARRAY_SIZE(mode_4_cfg);
1494                break;
1495        case 5:
1496                cfg = mode_5_cfg;
1497                n = ARRAY_SIZE(mode_5_cfg);
1498                break;
1499        }
1500
1501        pr_debug("%s: setup fifo_mode %d\n", musb_driver_name, fifo_mode);
1502
1503
1504done:
1505        offset = fifo_setup(musb, hw_ep, &ep0_cfg, 0);
1506        /* assert(offset > 0) */
1507
1508        /* NOTE:  for RTL versions >= 1.400 EPINFO and RAMINFO would
1509         * be better than static musb->config->num_eps and DYN_FIFO_SIZE...
1510         */
1511
1512        for (i = 0; i < n; i++) {
1513                u8      epn = cfg->hw_ep_num;
1514
1515                if (epn >= musb->config->num_eps) {
1516                        pr_debug("%s: invalid ep %d\n",
1517                                        musb_driver_name, epn);
1518                        return -EINVAL;
1519                }
1520                offset = fifo_setup(musb, hw_ep + epn, cfg++, offset);
1521                if (offset < 0) {
1522                        pr_debug("%s: mem overrun, ep %d\n",
1523                                        musb_driver_name, epn);
1524                        return offset;
1525                }
1526                epn++;
1527                musb->nr_endpoints = max(epn, musb->nr_endpoints);
1528        }
1529
1530        pr_debug("%s: %d/%d max ep, %d/%d memory\n",
1531                        musb_driver_name,
1532                        n + 1, musb->config->num_eps * 2 - 1,
1533                        offset, (1 << (musb->config->ram_bits + 2)));
1534
1535        if (!musb->bulk_ep) {
1536                pr_debug("%s: missing bulk\n", musb_driver_name);
1537                return -EINVAL;
1538        }
1539
1540        return 0;
1541}
1542
1543
1544/*
1545 * ep_config_from_hw - when MUSB_C_DYNFIFO_DEF is false
1546 * @param musb the controller
1547 */
1548static int ep_config_from_hw(struct musb *musb)
1549{
1550        u8 epnum = 0;
1551        struct musb_hw_ep *hw_ep;
1552        void __iomem *mbase = musb->mregs;
1553        int ret = 0;
1554
1555        musb_dbg(musb, "<== static silicon ep config");
1556
1557        /* FIXME pick up ep0 maxpacket size */
1558
1559        for (epnum = 1; epnum < musb->config->num_eps; epnum++) {
1560                musb_ep_select(mbase, epnum);
1561                hw_ep = musb->endpoints + epnum;
1562
1563                ret = musb_read_fifosize(musb, hw_ep, epnum);
1564                if (ret < 0)
1565                        break;
1566
1567                /* FIXME set up hw_ep->{rx,tx}_double_buffered */
1568
1569                /* pick an RX/TX endpoint for bulk */
1570                if (hw_ep->max_packet_sz_tx < 512
1571                                || hw_ep->max_packet_sz_rx < 512)
1572                        continue;
1573
1574                /* REVISIT:  this algorithm is lazy, we should at least
1575                 * try to pick a double buffered endpoint.
1576                 */
1577                if (musb->bulk_ep)
1578                        continue;
1579                musb->bulk_ep = hw_ep;
1580        }
1581
1582        if (!musb->bulk_ep) {
1583                pr_debug("%s: missing bulk\n", musb_driver_name);
1584                return -EINVAL;
1585        }
1586
1587        return 0;
1588}
1589
1590enum { MUSB_CONTROLLER_MHDRC, MUSB_CONTROLLER_HDRC, };
1591
1592/* Initialize MUSB (M)HDRC part of the USB hardware subsystem;
1593 * configure endpoints, or take their config from silicon
1594 */
1595static int musb_core_init(u16 musb_type, struct musb *musb)
1596{
1597        u8 reg;
1598        char *type;
1599        char aInfo[90];
1600        void __iomem    *mbase = musb->mregs;
1601        int             status = 0;
1602        int             i;
1603
1604        /* log core options (read using indexed model) */
1605        reg = musb_read_configdata(mbase);
1606
1607        strcpy(aInfo, (reg & MUSB_CONFIGDATA_UTMIDW) ? "UTMI-16" : "UTMI-8");
1608        if (reg & MUSB_CONFIGDATA_DYNFIFO) {
1609                strcat(aInfo, ", dyn FIFOs");
1610                musb->dyn_fifo = true;
1611        }
1612        if (reg & MUSB_CONFIGDATA_MPRXE) {
1613                strcat(aInfo, ", bulk combine");
1614                musb->bulk_combine = true;
1615        }
1616        if (reg & MUSB_CONFIGDATA_MPTXE) {
1617                strcat(aInfo, ", bulk split");
1618                musb->bulk_split = true;
1619        }
1620        if (reg & MUSB_CONFIGDATA_HBRXE) {
1621                strcat(aInfo, ", HB-ISO Rx");
1622                musb->hb_iso_rx = true;
1623        }
1624        if (reg & MUSB_CONFIGDATA_HBTXE) {
1625                strcat(aInfo, ", HB-ISO Tx");
1626                musb->hb_iso_tx = true;
1627        }
1628        if (reg & MUSB_CONFIGDATA_SOFTCONE)
1629                strcat(aInfo, ", SoftConn");
1630
1631        pr_debug("%s: ConfigData=0x%02x (%s)\n", musb_driver_name, reg, aInfo);
1632
1633        if (MUSB_CONTROLLER_MHDRC == musb_type) {
1634                musb->is_multipoint = 1;
1635                type = "M";
1636        } else {
1637                musb->is_multipoint = 0;
1638                type = "";
1639                if (IS_ENABLED(CONFIG_USB) &&
1640                    !IS_ENABLED(CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB)) {
1641                        pr_err("%s: kernel must disable external hubs, please fix the configuration\n",
1642                               musb_driver_name);
1643                }
1644        }
1645
1646        /* log release info */
1647        musb->hwvers = musb_readw(mbase, MUSB_HWVERS);
1648        pr_debug("%s: %sHDRC RTL version %d.%d%s\n",
1649                 musb_driver_name, type, MUSB_HWVERS_MAJOR(musb->hwvers),
1650                 MUSB_HWVERS_MINOR(musb->hwvers),
1651                 (musb->hwvers & MUSB_HWVERS_RC) ? "RC" : "");
1652
1653        /* configure ep0 */
1654        musb_configure_ep0(musb);
1655
1656        /* discover endpoint configuration */
1657        musb->nr_endpoints = 1;
1658        musb->epmask = 1;
1659
1660        if (musb->dyn_fifo)
1661                status = ep_config_from_table(musb);
1662        else
1663                status = ep_config_from_hw(musb);
1664
1665        if (status < 0)
1666                return status;
1667
1668        /* finish init, and print endpoint config */
1669        for (i = 0; i < musb->nr_endpoints; i++) {
1670                struct musb_hw_ep       *hw_ep = musb->endpoints + i;
1671
1672                hw_ep->fifo = musb->io.fifo_offset(i) + mbase;
1673#if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010)
1674                if (musb->ops->quirks & MUSB_IN_TUSB) {
1675                        hw_ep->fifo_async = musb->async + 0x400 +
1676                                musb->io.fifo_offset(i);
1677                        hw_ep->fifo_sync = musb->sync + 0x400 +
1678                                musb->io.fifo_offset(i);
1679                        hw_ep->fifo_sync_va =
1680                                musb->sync_va + 0x400 + musb->io.fifo_offset(i);
1681
1682                        if (i == 0)
1683                                hw_ep->conf = mbase - 0x400 + TUSB_EP0_CONF;
1684                        else
1685                                hw_ep->conf = mbase + 0x400 +
1686                                        (((i - 1) & 0xf) << 2);
1687                }
1688#endif
1689
1690                hw_ep->regs = musb->io.ep_offset(i, 0) + mbase;
1691                hw_ep->rx_reinit = 1;
1692                hw_ep->tx_reinit = 1;
1693
1694                if (hw_ep->max_packet_sz_tx) {
1695                        musb_dbg(musb, "%s: hw_ep %d%s, %smax %d",
1696                                musb_driver_name, i,
1697                                hw_ep->is_shared_fifo ? "shared" : "tx",
1698                                hw_ep->tx_double_buffered
1699                                        ? "doublebuffer, " : "",
1700                                hw_ep->max_packet_sz_tx);
1701                }
1702                if (hw_ep->max_packet_sz_rx && !hw_ep->is_shared_fifo) {
1703                        musb_dbg(musb, "%s: hw_ep %d%s, %smax %d",
1704                                musb_driver_name, i,
1705                                "rx",
1706                                hw_ep->rx_double_buffered
1707                                        ? "doublebuffer, " : "",
1708                                hw_ep->max_packet_sz_rx);
1709                }
1710                if (!(hw_ep->max_packet_sz_tx || hw_ep->max_packet_sz_rx))
1711                        musb_dbg(musb, "hw_ep %d not configured", i);
1712        }
1713
1714        return 0;
1715}
1716
1717/*-------------------------------------------------------------------------*/
1718
1719/*
1720 * handle all the irqs defined by the HDRC core. for now we expect:  other
1721 * irq sources (phy, dma, etc) will be handled first, musb->int_* values
1722 * will be assigned, and the irq will already have been acked.
1723 *
1724 * called in irq context with spinlock held, irqs blocked
1725 */
1726irqreturn_t musb_interrupt(struct musb *musb)
1727{
1728        irqreturn_t     retval = IRQ_NONE;
1729        unsigned long   status;
1730        unsigned long   epnum;
1731        u8              devctl;
1732
1733        if (!musb->int_usb && !musb->int_tx && !musb->int_rx)
1734                return IRQ_NONE;
1735
1736        devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
1737
1738        trace_musb_isr(musb);
1739
1740        /**
1741         * According to Mentor Graphics' documentation, flowchart on page 98,
1742         * IRQ should be handled as follows:
1743         *
1744         * . Resume IRQ
1745         * . Session Request IRQ
1746         * . VBUS Error IRQ
1747         * . Suspend IRQ
1748         * . Connect IRQ
1749         * . Disconnect IRQ
1750         * . Reset/Babble IRQ
1751         * . SOF IRQ (we're not using this one)
1752         * . Endpoint 0 IRQ
1753         * . TX Endpoints
1754         * . RX Endpoints
1755         *
1756         * We will be following that flowchart in order to avoid any problems
1757         * that might arise with internal Finite State Machine.
1758         */
1759
1760        if (musb->int_usb)
1761                retval |= musb_stage0_irq(musb, musb->int_usb, devctl);
1762
1763        if (musb->int_tx & 1) {
1764                if (is_host_active(musb))
1765                        retval |= musb_h_ep0_irq(musb);
1766                else
1767                        retval |= musb_g_ep0_irq(musb);
1768
1769                /* we have just handled endpoint 0 IRQ, clear it */
1770                musb->int_tx &= ~BIT(0);
1771        }
1772
1773        status = musb->int_tx;
1774
1775        for_each_set_bit(epnum, &status, 16) {
1776                retval = IRQ_HANDLED;
1777                if (is_host_active(musb))
1778                        musb_host_tx(musb, epnum);
1779                else
1780                        musb_g_tx(musb, epnum);
1781        }
1782
1783        status = musb->int_rx;
1784
1785        for_each_set_bit(epnum, &status, 16) {
1786                retval = IRQ_HANDLED;
1787                if (is_host_active(musb))
1788                        musb_host_rx(musb, epnum);
1789                else
1790                        musb_g_rx(musb, epnum);
1791        }
1792
1793        return retval;
1794}
1795EXPORT_SYMBOL_GPL(musb_interrupt);
1796
1797#ifndef CONFIG_MUSB_PIO_ONLY
1798static bool use_dma = true;
1799
1800/* "modprobe ... use_dma=0" etc */
1801module_param(use_dma, bool, 0644);
1802MODULE_PARM_DESC(use_dma, "enable/disable use of DMA");
1803
1804void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit)
1805{
1806        /* called with controller lock already held */
1807
1808        if (!epnum) {
1809                if (!is_cppi_enabled(musb)) {
1810                        /* endpoint 0 */
1811                        if (is_host_active(musb))
1812                                musb_h_ep0_irq(musb);
1813                        else
1814                                musb_g_ep0_irq(musb);
1815                }
1816        } else {
1817                /* endpoints 1..15 */
1818                if (transmit) {
1819                        if (is_host_active(musb))
1820                                musb_host_tx(musb, epnum);
1821                        else
1822                                musb_g_tx(musb, epnum);
1823                } else {
1824                        /* receive */
1825                        if (is_host_active(musb))
1826                                musb_host_rx(musb, epnum);
1827                        else
1828                                musb_g_rx(musb, epnum);
1829                }
1830        }
1831}
1832EXPORT_SYMBOL_GPL(musb_dma_completion);
1833
1834#else
1835#define use_dma                 0
1836#endif
1837
1838static int (*musb_phy_callback)(enum musb_vbus_id_status status);
1839
1840/*
1841 * musb_mailbox - optional phy notifier function
1842 * @status phy state change
1843 *
1844 * Optionally gets called from the USB PHY. Note that the USB PHY must be
1845 * disabled at the point the phy_callback is registered or unregistered.
1846 */
1847int musb_mailbox(enum musb_vbus_id_status status)
1848{
1849        if (musb_phy_callback)
1850                return musb_phy_callback(status);
1851
1852        return -ENODEV;
1853};
1854EXPORT_SYMBOL_GPL(musb_mailbox);
1855
1856/*-------------------------------------------------------------------------*/
1857
1858static ssize_t
1859mode_show(struct device *dev, struct device_attribute *attr, char *buf)
1860{
1861        struct musb *musb = dev_to_musb(dev);
1862        unsigned long flags;
1863        int ret;
1864
1865        spin_lock_irqsave(&musb->lock, flags);
1866        ret = sprintf(buf, "%s\n", usb_otg_state_string(musb->xceiv->otg->state));
1867        spin_unlock_irqrestore(&musb->lock, flags);
1868
1869        return ret;
1870}
1871
1872static ssize_t
1873mode_store(struct device *dev, struct device_attribute *attr,
1874                const char *buf, size_t n)
1875{
1876        struct musb     *musb = dev_to_musb(dev);
1877        unsigned long   flags;
1878        int             status;
1879
1880        spin_lock_irqsave(&musb->lock, flags);
1881        if (sysfs_streq(buf, "host"))
1882                status = musb_platform_set_mode(musb, MUSB_HOST);
1883        else if (sysfs_streq(buf, "peripheral"))
1884                status = musb_platform_set_mode(musb, MUSB_PERIPHERAL);
1885        else if (sysfs_streq(buf, "otg"))
1886                status = musb_platform_set_mode(musb, MUSB_OTG);
1887        else
1888                status = -EINVAL;
1889        spin_unlock_irqrestore(&musb->lock, flags);
1890
1891        return (status == 0) ? n : status;
1892}
1893static DEVICE_ATTR_RW(mode);
1894
1895static ssize_t
1896vbus_store(struct device *dev, struct device_attribute *attr,
1897                const char *buf, size_t n)
1898{
1899        struct musb     *musb = dev_to_musb(dev);
1900        unsigned long   flags;
1901        unsigned long   val;
1902
1903        if (sscanf(buf, "%lu", &val) < 1) {
1904                dev_err(dev, "Invalid VBUS timeout ms value\n");
1905                return -EINVAL;
1906        }
1907
1908        spin_lock_irqsave(&musb->lock, flags);
1909        /* force T(a_wait_bcon) to be zero/unlimited *OR* valid */
1910        musb->a_wait_bcon = val ? max_t(int, val, OTG_TIME_A_WAIT_BCON) : 0 ;
1911        if (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON)
1912                musb->is_active = 0;
1913        musb_platform_try_idle(musb, jiffies + msecs_to_jiffies(val));
1914        spin_unlock_irqrestore(&musb->lock, flags);
1915
1916        return n;
1917}
1918
1919static ssize_t
1920vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
1921{
1922        struct musb     *musb = dev_to_musb(dev);
1923        unsigned long   flags;
1924        unsigned long   val;
1925        int             vbus;
1926        u8              devctl;
1927
1928        pm_runtime_get_sync(dev);
1929        spin_lock_irqsave(&musb->lock, flags);
1930        val = musb->a_wait_bcon;
1931        vbus = musb_platform_get_vbus_status(musb);
1932        if (vbus < 0) {
1933                /* Use default MUSB method by means of DEVCTL register */
1934                devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
1935                if ((devctl & MUSB_DEVCTL_VBUS)
1936                                == (3 << MUSB_DEVCTL_VBUS_SHIFT))
1937                        vbus = 1;
1938                else
1939                        vbus = 0;
1940        }
1941        spin_unlock_irqrestore(&musb->lock, flags);
1942        pm_runtime_put_sync(dev);
1943
1944        return sprintf(buf, "Vbus %s, timeout %lu msec\n",
1945                        vbus ? "on" : "off", val);
1946}
1947static DEVICE_ATTR_RW(vbus);
1948
1949/* Gadget drivers can't know that a host is connected so they might want
1950 * to start SRP, but users can.  This allows userspace to trigger SRP.
1951 */
1952static ssize_t srp_store(struct device *dev, struct device_attribute *attr,
1953                const char *buf, size_t n)
1954{
1955        struct musb     *musb = dev_to_musb(dev);
1956        unsigned short  srp;
1957
1958        if (sscanf(buf, "%hu", &srp) != 1
1959                        || (srp != 1)) {
1960                dev_err(dev, "SRP: Value must be 1\n");
1961                return -EINVAL;
1962        }
1963
1964        if (srp == 1)
1965                musb_g_wakeup(musb);
1966
1967        return n;
1968}
1969static DEVICE_ATTR_WO(srp);
1970
1971static struct attribute *musb_attrs[] = {
1972        &dev_attr_mode.attr,
1973        &dev_attr_vbus.attr,
1974        &dev_attr_srp.attr,
1975        NULL
1976};
1977ATTRIBUTE_GROUPS(musb);
1978
1979#define MUSB_QUIRK_B_INVALID_VBUS_91    (MUSB_DEVCTL_BDEVICE | \
1980                                         (2 << MUSB_DEVCTL_VBUS_SHIFT) | \
1981                                         MUSB_DEVCTL_SESSION)
1982#define MUSB_QUIRK_B_DISCONNECT_99      (MUSB_DEVCTL_BDEVICE | \
1983                                         (3 << MUSB_DEVCTL_VBUS_SHIFT) | \
1984                                         MUSB_DEVCTL_SESSION)
1985#define MUSB_QUIRK_A_DISCONNECT_19      ((3 << MUSB_DEVCTL_VBUS_SHIFT) | \
1986                                         MUSB_DEVCTL_SESSION)
1987
1988static bool musb_state_needs_recheck(struct musb *musb, u8 devctl,
1989                                     const char *desc)
1990{
1991        if (musb->quirk_retries && !musb->flush_irq_work) {
1992                trace_musb_state(musb, devctl, desc);
1993                schedule_delayed_work(&musb->irq_work,
1994                                      msecs_to_jiffies(1000));
1995                musb->quirk_retries--;
1996
1997                return true;
1998        }
1999
2000        return false;
2001}
2002
2003/*
2004 * Check the musb devctl session bit to determine if we want to
2005 * allow PM runtime for the device. In general, we want to keep things
2006 * active when the session bit is set except after host disconnect.
2007 *
2008 * Only called from musb_irq_work. If this ever needs to get called
2009 * elsewhere, proper locking must be implemented for musb->session.
2010 */
2011static void musb_pm_runtime_check_session(struct musb *musb)
2012{
2013        u8 devctl, s;
2014        int error;
2015
2016        devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2017
2018        /* Handle session status quirks first */
2019        s = MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV |
2020                MUSB_DEVCTL_HR;
2021        switch (devctl & ~s) {
2022        case MUSB_QUIRK_B_DISCONNECT_99:
2023                musb_state_needs_recheck(musb, devctl,
2024                        "Poll devctl in case of suspend after disconnect");
2025                break;
2026        case MUSB_QUIRK_B_INVALID_VBUS_91:
2027                if (musb_state_needs_recheck(musb, devctl,
2028                                "Poll devctl on invalid vbus, assume no session"))
2029                        return;
2030                fallthrough;
2031        case MUSB_QUIRK_A_DISCONNECT_19:
2032                if (musb_state_needs_recheck(musb, devctl,
2033                                "Poll devctl on possible host mode disconnect"))
2034                        return;
2035                if (!musb->session)
2036                        break;
2037                trace_musb_state(musb, devctl, "Allow PM on possible host mode disconnect");
2038                pm_runtime_mark_last_busy(musb->controller);
2039                pm_runtime_put_autosuspend(musb->controller);
2040                musb->session = false;
2041                return;
2042        default:
2043                break;
2044        }
2045
2046        /* No need to do anything if session has not changed */
2047        s = devctl & MUSB_DEVCTL_SESSION;
2048        if (s == musb->session)
2049                return;
2050
2051        /* Block PM or allow PM? */
2052        if (s) {
2053                trace_musb_state(musb, devctl, "Block PM on active session");
2054                error = pm_runtime_get_sync(musb->controller);
2055                if (error < 0)
2056                        dev_err(musb->controller, "Could not enable: %i\n",
2057                                error);
2058                musb->quirk_retries = 3;
2059
2060                /*
2061                 * We can get a spurious MUSB_INTR_SESSREQ interrupt on start-up
2062                 * in B-peripheral mode with nothing connected and the session
2063                 * bit clears silently. Check status again in 3 seconds.
2064                 */
2065                if (devctl & MUSB_DEVCTL_BDEVICE)
2066                        schedule_delayed_work(&musb->irq_work,
2067                                              msecs_to_jiffies(3000));
2068        } else {
2069                trace_musb_state(musb, devctl, "Allow PM with no session");
2070                pm_runtime_mark_last_busy(musb->controller);
2071                pm_runtime_put_autosuspend(musb->controller);
2072        }
2073
2074        musb->session = s;
2075}
2076
2077/* Only used to provide driver mode change events */
2078static void musb_irq_work(struct work_struct *data)
2079{
2080        struct musb *musb = container_of(data, struct musb, irq_work.work);
2081        int error;
2082
2083        error = pm_runtime_resume_and_get(musb->controller);
2084        if (error < 0) {
2085                dev_err(musb->controller, "Could not enable: %i\n", error);
2086
2087                return;
2088        }
2089
2090        musb_pm_runtime_check_session(musb);
2091
2092        if (musb->xceiv->otg->state != musb->xceiv_old_state) {
2093                musb->xceiv_old_state = musb->xceiv->otg->state;
2094                sysfs_notify(&musb->controller->kobj, NULL, "mode");
2095        }
2096
2097        pm_runtime_mark_last_busy(musb->controller);
2098        pm_runtime_put_autosuspend(musb->controller);
2099}
2100
2101static void musb_recover_from_babble(struct musb *musb)
2102{
2103        int ret;
2104        u8 devctl;
2105
2106        musb_disable_interrupts(musb);
2107
2108        /*
2109         * wait at least 320 cycles of 60MHz clock. That's 5.3us, we will give
2110         * it some slack and wait for 10us.
2111         */
2112        udelay(10);
2113
2114        ret  = musb_platform_recover(musb);
2115        if (ret) {
2116                musb_enable_interrupts(musb);
2117                return;
2118        }
2119
2120        /* drop session bit */
2121        devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2122        devctl &= ~MUSB_DEVCTL_SESSION;
2123        musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
2124
2125        /* tell usbcore about it */
2126        musb_root_disconnect(musb);
2127
2128        /*
2129         * When a babble condition occurs, the musb controller
2130         * removes the session bit and the endpoint config is lost.
2131         */
2132        if (musb->dyn_fifo)
2133                ret = ep_config_from_table(musb);
2134        else
2135                ret = ep_config_from_hw(musb);
2136
2137        /* restart session */
2138        if (ret == 0)
2139                musb_start(musb);
2140}
2141
2142/* --------------------------------------------------------------------------
2143 * Init support
2144 */
2145
2146static struct musb *allocate_instance(struct device *dev,
2147                const struct musb_hdrc_config *config, void __iomem *mbase)
2148{
2149        struct musb             *musb;
2150        struct musb_hw_ep       *ep;
2151        int                     epnum;
2152        int                     ret;
2153
2154        musb = devm_kzalloc(dev, sizeof(*musb), GFP_KERNEL);
2155        if (!musb)
2156                return NULL;
2157
2158        INIT_LIST_HEAD(&musb->control);
2159        INIT_LIST_HEAD(&musb->in_bulk);
2160        INIT_LIST_HEAD(&musb->out_bulk);
2161        INIT_LIST_HEAD(&musb->pending_list);
2162
2163        musb->vbuserr_retry = VBUSERR_RETRY_COUNT;
2164        musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON;
2165        musb->mregs = mbase;
2166        musb->ctrl_base = mbase;
2167        musb->nIrq = -ENODEV;
2168        musb->config = config;
2169        BUG_ON(musb->config->num_eps > MUSB_C_NUM_EPS);
2170        for (epnum = 0, ep = musb->endpoints;
2171                        epnum < musb->config->num_eps;
2172                        epnum++, ep++) {
2173                ep->musb = musb;
2174                ep->epnum = epnum;
2175        }
2176
2177        musb->controller = dev;
2178
2179        ret = musb_host_alloc(musb);
2180        if (ret < 0)
2181                goto err_free;
2182
2183        dev_set_drvdata(dev, musb);
2184
2185        return musb;
2186
2187err_free:
2188        return NULL;
2189}
2190
2191static void musb_free(struct musb *musb)
2192{
2193        /* this has multiple entry modes. it handles fault cleanup after
2194         * probe(), where things may be partially set up, as well as rmmod
2195         * cleanup after everything's been de-activated.
2196         */
2197
2198        if (musb->nIrq >= 0) {
2199                if (musb->irq_wake)
2200                        disable_irq_wake(musb->nIrq);
2201                free_irq(musb->nIrq, musb);
2202        }
2203
2204        musb_host_free(musb);
2205}
2206
2207struct musb_pending_work {
2208        int (*callback)(struct musb *musb, void *data);
2209        void *data;
2210        struct list_head node;
2211};
2212
2213#ifdef CONFIG_PM
2214/*
2215 * Called from musb_runtime_resume(), musb_resume(), and
2216 * musb_queue_resume_work(). Callers must take musb->lock.
2217 */
2218static int musb_run_resume_work(struct musb *musb)
2219{
2220        struct musb_pending_work *w, *_w;
2221        unsigned long flags;
2222        int error = 0;
2223
2224        spin_lock_irqsave(&musb->list_lock, flags);
2225        list_for_each_entry_safe(w, _w, &musb->pending_list, node) {
2226                if (w->callback) {
2227                        error = w->callback(musb, w->data);
2228                        if (error < 0) {
2229                                dev_err(musb->controller,
2230                                        "resume callback %p failed: %i\n",
2231                                        w->callback, error);
2232                        }
2233                }
2234                list_del(&w->node);
2235                devm_kfree(musb->controller, w);
2236        }
2237        spin_unlock_irqrestore(&musb->list_lock, flags);
2238
2239        return error;
2240}
2241#endif
2242
2243/*
2244 * Called to run work if device is active or else queue the work to happen
2245 * on resume. Caller must take musb->lock and must hold an RPM reference.
2246 *
2247 * Note that we cowardly refuse queuing work after musb PM runtime
2248 * resume is done calling musb_run_resume_work() and return -EINPROGRESS
2249 * instead.
2250 */
2251int musb_queue_resume_work(struct musb *musb,
2252                           int (*callback)(struct musb *musb, void *data),
2253                           void *data)
2254{
2255        struct musb_pending_work *w;
2256        unsigned long flags;
2257        bool is_suspended;
2258        int error;
2259
2260        if (WARN_ON(!callback))
2261                return -EINVAL;
2262
2263        spin_lock_irqsave(&musb->list_lock, flags);
2264        is_suspended = musb->is_runtime_suspended;
2265
2266        if (is_suspended) {
2267                w = devm_kzalloc(musb->controller, sizeof(*w), GFP_ATOMIC);
2268                if (!w) {
2269                        error = -ENOMEM;
2270                        goto out_unlock;
2271                }
2272
2273                w->callback = callback;
2274                w->data = data;
2275
2276                list_add_tail(&w->node, &musb->pending_list);
2277                error = 0;
2278        }
2279
2280out_unlock:
2281        spin_unlock_irqrestore(&musb->list_lock, flags);
2282
2283        if (!is_suspended)
2284                error = callback(musb, data);
2285
2286        return error;
2287}
2288EXPORT_SYMBOL_GPL(musb_queue_resume_work);
2289
2290static void musb_deassert_reset(struct work_struct *work)
2291{
2292        struct musb *musb;
2293        unsigned long flags;
2294
2295        musb = container_of(work, struct musb, deassert_reset_work.work);
2296
2297        spin_lock_irqsave(&musb->lock, flags);
2298
2299        if (musb->port1_status & USB_PORT_STAT_RESET)
2300                musb_port_reset(musb, false);
2301
2302        spin_unlock_irqrestore(&musb->lock, flags);
2303}
2304
2305/*
2306 * Perform generic per-controller initialization.
2307 *
2308 * @dev: the controller (already clocked, etc)
2309 * @nIrq: IRQ number
2310 * @ctrl: virtual address of controller registers,
2311 *      not yet corrected for platform-specific offsets
2312 */
2313static int
2314musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
2315{
2316        int                     status;
2317        struct musb             *musb;
2318        struct musb_hdrc_platform_data *plat = dev_get_platdata(dev);
2319
2320        /* The driver might handle more features than the board; OK.
2321         * Fail when the board needs a feature that's not enabled.
2322         */
2323        if (!plat) {
2324                dev_err(dev, "no platform_data?\n");
2325                status = -ENODEV;
2326                goto fail0;
2327        }
2328
2329        /* allocate */
2330        musb = allocate_instance(dev, plat->config, ctrl);
2331        if (!musb) {
2332                status = -ENOMEM;
2333                goto fail0;
2334        }
2335
2336        spin_lock_init(&musb->lock);
2337        spin_lock_init(&musb->list_lock);
2338        musb->board_set_power = plat->set_power;
2339        musb->min_power = plat->min_power;
2340        musb->ops = plat->platform_ops;
2341        musb->port_mode = plat->mode;
2342
2343        /*
2344         * Initialize the default IO functions. At least omap2430 needs
2345         * these early. We initialize the platform specific IO functions
2346         * later on.
2347         */
2348        musb_readb = musb_default_readb;
2349        musb_writeb = musb_default_writeb;
2350        musb_readw = musb_default_readw;
2351        musb_writew = musb_default_writew;
2352
2353        /* The musb_platform_init() call:
2354         *   - adjusts musb->mregs
2355         *   - sets the musb->isr
2356         *   - may initialize an integrated transceiver
2357         *   - initializes musb->xceiv, usually by otg_get_phy()
2358         *   - stops powering VBUS
2359         *
2360         * There are various transceiver configurations.
2361         * DaVinci, TUSB60x0, and others integrate them.  OMAP3 uses
2362         * external/discrete ones in various flavors (twl4030 family,
2363         * isp1504, non-OTG, etc) mostly hooking up through ULPI.
2364         */
2365        status = musb_platform_init(musb);
2366        if (status < 0)
2367                goto fail1;
2368
2369        if (!musb->isr) {
2370                status = -ENODEV;
2371                goto fail2;
2372        }
2373
2374
2375        /* Most devices use indexed offset or flat offset */
2376        if (musb->ops->quirks & MUSB_INDEXED_EP) {
2377                musb->io.ep_offset = musb_indexed_ep_offset;
2378                musb->io.ep_select = musb_indexed_ep_select;
2379        } else {
2380                musb->io.ep_offset = musb_flat_ep_offset;
2381                musb->io.ep_select = musb_flat_ep_select;
2382        }
2383
2384        if (musb->ops->quirks & MUSB_G_NO_SKB_RESERVE)
2385                musb->g.quirk_avoids_skb_reserve = 1;
2386
2387        /* At least tusb6010 has its own offsets */
2388        if (musb->ops->ep_offset)
2389                musb->io.ep_offset = musb->ops->ep_offset;
2390        if (musb->ops->ep_select)
2391                musb->io.ep_select = musb->ops->ep_select;
2392
2393        if (musb->ops->fifo_mode)
2394                fifo_mode = musb->ops->fifo_mode;
2395        else
2396                fifo_mode = 4;
2397
2398        if (musb->ops->fifo_offset)
2399                musb->io.fifo_offset = musb->ops->fifo_offset;
2400        else
2401                musb->io.fifo_offset = musb_default_fifo_offset;
2402
2403        if (musb->ops->busctl_offset)
2404                musb->io.busctl_offset = musb->ops->busctl_offset;
2405        else
2406                musb->io.busctl_offset = musb_default_busctl_offset;
2407
2408        if (musb->ops->readb)
2409                musb_readb = musb->ops->readb;
2410        if (musb->ops->writeb)
2411                musb_writeb = musb->ops->writeb;
2412        if (musb->ops->clearb)
2413                musb_clearb = musb->ops->clearb;
2414        else
2415                musb_clearb = musb_readb;
2416
2417        if (musb->ops->readw)
2418                musb_readw = musb->ops->readw;
2419        if (musb->ops->writew)
2420                musb_writew = musb->ops->writew;
2421        if (musb->ops->clearw)
2422                musb_clearw = musb->ops->clearw;
2423        else
2424                musb_clearw = musb_readw;
2425
2426#ifndef CONFIG_MUSB_PIO_ONLY
2427        if (!musb->ops->dma_init || !musb->ops->dma_exit) {
2428                dev_err(dev, "DMA controller not set\n");
2429                status = -ENODEV;
2430                goto fail2;
2431        }
2432        musb_dma_controller_create = musb->ops->dma_init;
2433        musb_dma_controller_destroy = musb->ops->dma_exit;
2434#endif
2435
2436        if (musb->ops->read_fifo)
2437                musb->io.read_fifo = musb->ops->read_fifo;
2438        else
2439                musb->io.read_fifo = musb_default_read_fifo;
2440
2441        if (musb->ops->write_fifo)
2442                musb->io.write_fifo = musb->ops->write_fifo;
2443        else
2444                musb->io.write_fifo = musb_default_write_fifo;
2445
2446        if (musb->ops->get_toggle)
2447                musb->io.get_toggle = musb->ops->get_toggle;
2448        else
2449                musb->io.get_toggle = musb_default_get_toggle;
2450
2451        if (musb->ops->set_toggle)
2452                musb->io.set_toggle = musb->ops->set_toggle;
2453        else
2454                musb->io.set_toggle = musb_default_set_toggle;
2455
2456        if (!musb->xceiv->io_ops) {
2457                musb->xceiv->io_dev = musb->controller;
2458                musb->xceiv->io_priv = musb->mregs;
2459                musb->xceiv->io_ops = &musb_ulpi_access;
2460        }
2461
2462        if (musb->ops->phy_callback)
2463                musb_phy_callback = musb->ops->phy_callback;
2464
2465        /*
2466         * We need musb_read/write functions initialized for PM.
2467         * Note that at least 2430 glue needs autosuspend delay
2468         * somewhere above 300 ms for the hardware to idle properly
2469         * after disconnecting the cable in host mode. Let's use
2470         * 500 ms for some margin.
2471         */
2472        pm_runtime_use_autosuspend(musb->controller);
2473        pm_runtime_set_autosuspend_delay(musb->controller, 500);
2474        pm_runtime_enable(musb->controller);
2475        pm_runtime_get_sync(musb->controller);
2476
2477        status = usb_phy_init(musb->xceiv);
2478        if (status < 0)
2479                goto err_usb_phy_init;
2480
2481        if (use_dma && dev->dma_mask) {
2482                musb->dma_controller =
2483                        musb_dma_controller_create(musb, musb->mregs);
2484                if (IS_ERR(musb->dma_controller)) {
2485                        status = PTR_ERR(musb->dma_controller);
2486                        goto fail2_5;
2487                }
2488        }
2489
2490        /* be sure interrupts are disabled before connecting ISR */
2491        musb_platform_disable(musb);
2492        musb_disable_interrupts(musb);
2493        musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
2494
2495        /* MUSB_POWER_SOFTCONN might be already set, JZ4740 does this. */
2496        musb_writeb(musb->mregs, MUSB_POWER, 0);
2497
2498        /* Init IRQ workqueue before request_irq */
2499        INIT_DELAYED_WORK(&musb->irq_work, musb_irq_work);
2500        INIT_DELAYED_WORK(&musb->deassert_reset_work, musb_deassert_reset);
2501        INIT_DELAYED_WORK(&musb->finish_resume_work, musb_host_finish_resume);
2502
2503        /* setup musb parts of the core (especially endpoints) */
2504        status = musb_core_init(plat->config->multipoint
2505                        ? MUSB_CONTROLLER_MHDRC
2506                        : MUSB_CONTROLLER_HDRC, musb);
2507        if (status < 0)
2508                goto fail3;
2509
2510        timer_setup(&musb->otg_timer, musb_otg_timer_func, 0);
2511
2512        /* attach to the IRQ */
2513        if (request_irq(nIrq, musb->isr, IRQF_SHARED, dev_name(dev), musb)) {
2514                dev_err(dev, "request_irq %d failed!\n", nIrq);
2515                status = -ENODEV;
2516                goto fail3;
2517        }
2518        musb->nIrq = nIrq;
2519        /* FIXME this handles wakeup irqs wrong */
2520        if (enable_irq_wake(nIrq) == 0) {
2521                musb->irq_wake = 1;
2522                device_init_wakeup(dev, 1);
2523        } else {
2524                musb->irq_wake = 0;
2525        }
2526
2527        /* program PHY to use external vBus if required */
2528        if (plat->extvbus) {
2529                u8 busctl = musb_readb(musb->mregs, MUSB_ULPI_BUSCONTROL);
2530                busctl |= MUSB_ULPI_USE_EXTVBUS;
2531                musb_writeb(musb->mregs, MUSB_ULPI_BUSCONTROL, busctl);
2532        }
2533
2534        MUSB_DEV_MODE(musb);
2535        musb->xceiv->otg->state = OTG_STATE_B_IDLE;
2536
2537        switch (musb->port_mode) {
2538        case MUSB_HOST:
2539                status = musb_host_setup(musb, plat->power);
2540                if (status < 0)
2541                        goto fail3;
2542                status = musb_platform_set_mode(musb, MUSB_HOST);
2543                break;
2544        case MUSB_PERIPHERAL:
2545                status = musb_gadget_setup(musb);
2546                if (status < 0)
2547                        goto fail3;
2548                status = musb_platform_set_mode(musb, MUSB_PERIPHERAL);
2549                break;
2550        case MUSB_OTG:
2551                status = musb_host_setup(musb, plat->power);
2552                if (status < 0)
2553                        goto fail3;
2554                status = musb_gadget_setup(musb);
2555                if (status) {
2556                        musb_host_cleanup(musb);
2557                        goto fail3;
2558                }
2559                status = musb_platform_set_mode(musb, MUSB_OTG);
2560                break;
2561        default:
2562                dev_err(dev, "unsupported port mode %d\n", musb->port_mode);
2563                break;
2564        }
2565
2566        if (status < 0)
2567                goto fail3;
2568
2569        musb_init_debugfs(musb);
2570
2571        musb->is_initialized = 1;
2572        pm_runtime_mark_last_busy(musb->controller);
2573        pm_runtime_put_autosuspend(musb->controller);
2574
2575        return 0;
2576
2577fail3:
2578        cancel_delayed_work_sync(&musb->irq_work);
2579        cancel_delayed_work_sync(&musb->finish_resume_work);
2580        cancel_delayed_work_sync(&musb->deassert_reset_work);
2581        if (musb->dma_controller)
2582                musb_dma_controller_destroy(musb->dma_controller);
2583
2584fail2_5:
2585        usb_phy_shutdown(musb->xceiv);
2586
2587err_usb_phy_init:
2588        pm_runtime_dont_use_autosuspend(musb->controller);
2589        pm_runtime_put_sync(musb->controller);
2590        pm_runtime_disable(musb->controller);
2591
2592fail2:
2593        if (musb->irq_wake)
2594                device_init_wakeup(dev, 0);
2595        musb_platform_exit(musb);
2596
2597fail1:
2598        if (status != -EPROBE_DEFER)
2599                dev_err(musb->controller,
2600                        "%s failed with status %d\n", __func__, status);
2601
2602        musb_free(musb);
2603
2604fail0:
2605
2606        return status;
2607
2608}
2609
2610/*-------------------------------------------------------------------------*/
2611
2612/* all implementations (PCI bridge to FPGA, VLYNQ, etc) should just
2613 * bridge to a platform device; this driver then suffices.
2614 */
2615static int musb_probe(struct platform_device *pdev)
2616{
2617        struct device   *dev = &pdev->dev;
2618        int             irq = platform_get_irq_byname(pdev, "mc");
2619        void __iomem    *base;
2620
2621        if (irq <= 0)
2622                return -ENODEV;
2623
2624        base = devm_platform_ioremap_resource(pdev, 0);
2625        if (IS_ERR(base))
2626                return PTR_ERR(base);
2627
2628        return musb_init_controller(dev, irq, base);
2629}
2630
2631static int musb_remove(struct platform_device *pdev)
2632{
2633        struct device   *dev = &pdev->dev;
2634        struct musb     *musb = dev_to_musb(dev);
2635        unsigned long   flags;
2636
2637        /* this gets called on rmmod.
2638         *  - Host mode: host may still be active
2639         *  - Peripheral mode: peripheral is deactivated (or never-activated)
2640         *  - OTG mode: both roles are deactivated (or never-activated)
2641         */
2642        musb_exit_debugfs(musb);
2643
2644        cancel_delayed_work_sync(&musb->irq_work);
2645        cancel_delayed_work_sync(&musb->finish_resume_work);
2646        cancel_delayed_work_sync(&musb->deassert_reset_work);
2647        pm_runtime_get_sync(musb->controller);
2648        musb_host_cleanup(musb);
2649        musb_gadget_cleanup(musb);
2650
2651        musb_platform_disable(musb);
2652        spin_lock_irqsave(&musb->lock, flags);
2653        musb_disable_interrupts(musb);
2654        musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
2655        spin_unlock_irqrestore(&musb->lock, flags);
2656        musb_platform_exit(musb);
2657
2658        pm_runtime_dont_use_autosuspend(musb->controller);
2659        pm_runtime_put_sync(musb->controller);
2660        pm_runtime_disable(musb->controller);
2661        musb_phy_callback = NULL;
2662        if (musb->dma_controller)
2663                musb_dma_controller_destroy(musb->dma_controller);
2664        usb_phy_shutdown(musb->xceiv);
2665        musb_free(musb);
2666        device_init_wakeup(dev, 0);
2667        return 0;
2668}
2669
2670#ifdef  CONFIG_PM
2671
2672static void musb_save_context(struct musb *musb)
2673{
2674        int i;
2675        void __iomem *musb_base = musb->mregs;
2676        void __iomem *epio;
2677
2678        musb->context.frame = musb_readw(musb_base, MUSB_FRAME);
2679        musb->context.testmode = musb_readb(musb_base, MUSB_TESTMODE);
2680        musb->context.busctl = musb_readb(musb_base, MUSB_ULPI_BUSCONTROL);
2681        musb->context.power = musb_readb(musb_base, MUSB_POWER);
2682        musb->context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE);
2683        musb->context.index = musb_readb(musb_base, MUSB_INDEX);
2684        musb->context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
2685
2686        for (i = 0; i < musb->config->num_eps; ++i) {
2687                struct musb_hw_ep       *hw_ep;
2688
2689                hw_ep = &musb->endpoints[i];
2690                if (!hw_ep)
2691                        continue;
2692
2693                epio = hw_ep->regs;
2694                if (!epio)
2695                        continue;
2696
2697                musb_writeb(musb_base, MUSB_INDEX, i);
2698                musb->context.index_regs[i].txmaxp =
2699                        musb_readw(epio, MUSB_TXMAXP);
2700                musb->context.index_regs[i].txcsr =
2701                        musb_readw(epio, MUSB_TXCSR);
2702                musb->context.index_regs[i].rxmaxp =
2703                        musb_readw(epio, MUSB_RXMAXP);
2704                musb->context.index_regs[i].rxcsr =
2705                        musb_readw(epio, MUSB_RXCSR);
2706
2707                if (musb->dyn_fifo) {
2708                        musb->context.index_regs[i].txfifoadd =
2709                                        musb_readw(musb_base, MUSB_TXFIFOADD);
2710                        musb->context.index_regs[i].rxfifoadd =
2711                                        musb_readw(musb_base, MUSB_RXFIFOADD);
2712                        musb->context.index_regs[i].txfifosz =
2713                                        musb_readb(musb_base, MUSB_TXFIFOSZ);
2714                        musb->context.index_regs[i].rxfifosz =
2715                                        musb_readb(musb_base, MUSB_RXFIFOSZ);
2716                }
2717
2718                musb->context.index_regs[i].txtype =
2719                        musb_readb(epio, MUSB_TXTYPE);
2720                musb->context.index_regs[i].txinterval =
2721                        musb_readb(epio, MUSB_TXINTERVAL);
2722                musb->context.index_regs[i].rxtype =
2723                        musb_readb(epio, MUSB_RXTYPE);
2724                musb->context.index_regs[i].rxinterval =
2725                        musb_readb(epio, MUSB_RXINTERVAL);
2726
2727                musb->context.index_regs[i].txfunaddr =
2728                        musb_read_txfunaddr(musb, i);
2729                musb->context.index_regs[i].txhubaddr =
2730                        musb_read_txhubaddr(musb, i);
2731                musb->context.index_regs[i].txhubport =
2732                        musb_read_txhubport(musb, i);
2733
2734                musb->context.index_regs[i].rxfunaddr =
2735                        musb_read_rxfunaddr(musb, i);
2736                musb->context.index_regs[i].rxhubaddr =
2737                        musb_read_rxhubaddr(musb, i);
2738                musb->context.index_regs[i].rxhubport =
2739                        musb_read_rxhubport(musb, i);
2740        }
2741}
2742
2743static void musb_restore_context(struct musb *musb)
2744{
2745        int i;
2746        void __iomem *musb_base = musb->mregs;
2747        void __iomem *epio;
2748        u8 power;
2749
2750        musb_writew(musb_base, MUSB_FRAME, musb->context.frame);
2751        musb_writeb(musb_base, MUSB_TESTMODE, musb->context.testmode);
2752        musb_writeb(musb_base, MUSB_ULPI_BUSCONTROL, musb->context.busctl);
2753
2754        /* Don't affect SUSPENDM/RESUME bits in POWER reg */
2755        power = musb_readb(musb_base, MUSB_POWER);
2756        power &= MUSB_POWER_SUSPENDM | MUSB_POWER_RESUME;
2757        musb->context.power &= ~(MUSB_POWER_SUSPENDM | MUSB_POWER_RESUME);
2758        power |= musb->context.power;
2759        musb_writeb(musb_base, MUSB_POWER, power);
2760
2761        musb_writew(musb_base, MUSB_INTRTXE, musb->intrtxe);
2762        musb_writew(musb_base, MUSB_INTRRXE, musb->intrrxe);
2763        musb_writeb(musb_base, MUSB_INTRUSBE, musb->context.intrusbe);
2764        if (musb->context.devctl & MUSB_DEVCTL_SESSION)
2765                musb_writeb(musb_base, MUSB_DEVCTL, musb->context.devctl);
2766
2767        for (i = 0; i < musb->config->num_eps; ++i) {
2768                struct musb_hw_ep       *hw_ep;
2769
2770                hw_ep = &musb->endpoints[i];
2771                if (!hw_ep)
2772                        continue;
2773
2774                epio = hw_ep->regs;
2775                if (!epio)
2776                        continue;
2777
2778                musb_writeb(musb_base, MUSB_INDEX, i);
2779                musb_writew(epio, MUSB_TXMAXP,
2780                        musb->context.index_regs[i].txmaxp);
2781                musb_writew(epio, MUSB_TXCSR,
2782                        musb->context.index_regs[i].txcsr);
2783                musb_writew(epio, MUSB_RXMAXP,
2784                        musb->context.index_regs[i].rxmaxp);
2785                musb_writew(epio, MUSB_RXCSR,
2786                        musb->context.index_regs[i].rxcsr);
2787
2788                if (musb->dyn_fifo) {
2789                        musb_writeb(musb_base, MUSB_TXFIFOSZ,
2790                                musb->context.index_regs[i].txfifosz);
2791                        musb_writeb(musb_base, MUSB_RXFIFOSZ,
2792                                musb->context.index_regs[i].rxfifosz);
2793                        musb_writew(musb_base, MUSB_TXFIFOADD,
2794                                musb->context.index_regs[i].txfifoadd);
2795                        musb_writew(musb_base, MUSB_RXFIFOADD,
2796                                musb->context.index_regs[i].rxfifoadd);
2797                }
2798
2799                musb_writeb(epio, MUSB_TXTYPE,
2800                                musb->context.index_regs[i].txtype);
2801                musb_writeb(epio, MUSB_TXINTERVAL,
2802                                musb->context.index_regs[i].txinterval);
2803                musb_writeb(epio, MUSB_RXTYPE,
2804                                musb->context.index_regs[i].rxtype);
2805                musb_writeb(epio, MUSB_RXINTERVAL,
2806
2807                                musb->context.index_regs[i].rxinterval);
2808                musb_write_txfunaddr(musb, i,
2809                                musb->context.index_regs[i].txfunaddr);
2810                musb_write_txhubaddr(musb, i,
2811                                musb->context.index_regs[i].txhubaddr);
2812                musb_write_txhubport(musb, i,
2813                                musb->context.index_regs[i].txhubport);
2814
2815                musb_write_rxfunaddr(musb, i,
2816                                musb->context.index_regs[i].rxfunaddr);
2817                musb_write_rxhubaddr(musb, i,
2818                                musb->context.index_regs[i].rxhubaddr);
2819                musb_write_rxhubport(musb, i,
2820                                musb->context.index_regs[i].rxhubport);
2821        }
2822        musb_writeb(musb_base, MUSB_INDEX, musb->context.index);
2823}
2824
2825static int musb_suspend(struct device *dev)
2826{
2827        struct musb     *musb = dev_to_musb(dev);
2828        unsigned long   flags;
2829        int ret;
2830
2831        ret = pm_runtime_get_sync(dev);
2832        if (ret < 0) {
2833                pm_runtime_put_noidle(dev);
2834                return ret;
2835        }
2836
2837        musb_platform_disable(musb);
2838        musb_disable_interrupts(musb);
2839
2840        musb->flush_irq_work = true;
2841        while (flush_delayed_work(&musb->irq_work))
2842                ;
2843        musb->flush_irq_work = false;
2844
2845        if (!(musb->ops->quirks & MUSB_PRESERVE_SESSION))
2846                musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
2847
2848        WARN_ON(!list_empty(&musb->pending_list));
2849
2850        spin_lock_irqsave(&musb->lock, flags);
2851
2852        if (is_peripheral_active(musb)) {
2853                /* FIXME force disconnect unless we know USB will wake
2854                 * the system up quickly enough to respond ...
2855                 */
2856        } else if (is_host_active(musb)) {
2857                /* we know all the children are suspended; sometimes
2858                 * they will even be wakeup-enabled.
2859                 */
2860        }
2861
2862        musb_save_context(musb);
2863
2864        spin_unlock_irqrestore(&musb->lock, flags);
2865        return 0;
2866}
2867
2868static int musb_resume(struct device *dev)
2869{
2870        struct musb *musb = dev_to_musb(dev);
2871        unsigned long flags;
2872        int error;
2873        u8 devctl;
2874        u8 mask;
2875
2876        /*
2877         * For static cmos like DaVinci, register values were preserved
2878         * unless for some reason the whole soc powered down or the USB
2879         * module got reset through the PSC (vs just being disabled).
2880         *
2881         * For the DSPS glue layer though, a full register restore has to
2882         * be done. As it shouldn't harm other platforms, we do it
2883         * unconditionally.
2884         */
2885
2886        musb_restore_context(musb);
2887
2888        devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2889        mask = MUSB_DEVCTL_BDEVICE | MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV;
2890        if ((devctl & mask) != (musb->context.devctl & mask))
2891                musb->port1_status = 0;
2892
2893        musb_enable_interrupts(musb);
2894        musb_platform_enable(musb);
2895
2896        /* session might be disabled in suspend */
2897        if (musb->port_mode == MUSB_HOST &&
2898            !(musb->ops->quirks & MUSB_PRESERVE_SESSION)) {
2899                devctl |= MUSB_DEVCTL_SESSION;
2900                musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
2901        }
2902
2903        spin_lock_irqsave(&musb->lock, flags);
2904        error = musb_run_resume_work(musb);
2905        if (error)
2906                dev_err(musb->controller, "resume work failed with %i\n",
2907                        error);
2908        spin_unlock_irqrestore(&musb->lock, flags);
2909
2910        pm_runtime_mark_last_busy(dev);
2911        pm_runtime_put_autosuspend(dev);
2912
2913        return 0;
2914}
2915
2916static int musb_runtime_suspend(struct device *dev)
2917{
2918        struct musb     *musb = dev_to_musb(dev);
2919
2920        musb_save_context(musb);
2921        musb->is_runtime_suspended = 1;
2922
2923        return 0;
2924}
2925
2926static int musb_runtime_resume(struct device *dev)
2927{
2928        struct musb *musb = dev_to_musb(dev);
2929        unsigned long flags;
2930        int error;
2931
2932        /*
2933         * When pm_runtime_get_sync called for the first time in driver
2934         * init,  some of the structure is still not initialized which is
2935         * used in restore function. But clock needs to be
2936         * enabled before any register access, so
2937         * pm_runtime_get_sync has to be called.
2938         * Also context restore without save does not make
2939         * any sense
2940         */
2941        if (!musb->is_initialized)
2942                return 0;
2943
2944        musb_restore_context(musb);
2945
2946        spin_lock_irqsave(&musb->lock, flags);
2947        error = musb_run_resume_work(musb);
2948        if (error)
2949                dev_err(musb->controller, "resume work failed with %i\n",
2950                        error);
2951        musb->is_runtime_suspended = 0;
2952        spin_unlock_irqrestore(&musb->lock, flags);
2953
2954        return 0;
2955}
2956
2957static const struct dev_pm_ops musb_dev_pm_ops = {
2958        .suspend        = musb_suspend,
2959        .resume         = musb_resume,
2960        .runtime_suspend = musb_runtime_suspend,
2961        .runtime_resume = musb_runtime_resume,
2962};
2963
2964#define MUSB_DEV_PM_OPS (&musb_dev_pm_ops)
2965#else
2966#define MUSB_DEV_PM_OPS NULL
2967#endif
2968
2969static struct platform_driver musb_driver = {
2970        .driver = {
2971                .name           = musb_driver_name,
2972                .bus            = &platform_bus_type,
2973                .pm             = MUSB_DEV_PM_OPS,
2974                .dev_groups     = musb_groups,
2975        },
2976        .probe          = musb_probe,
2977        .remove         = musb_remove,
2978};
2979
2980module_platform_driver(musb_driver);
2981