linux/drivers/usb/gadget/udc/bcm63xx_udc.c
<<
>>
Prefs
   1/*
   2 * bcm63xx_udc.c -- BCM63xx UDC high/full speed USB device controller
   3 *
   4 * Copyright (C) 2012 Kevin Cernekee <cernekee@gmail.com>
   5 * Copyright (C) 2012 Broadcom Corporation
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 */
  12
  13#include <linux/bitops.h>
  14#include <linux/bug.h>
  15#include <linux/clk.h>
  16#include <linux/compiler.h>
  17#include <linux/debugfs.h>
  18#include <linux/delay.h>
  19#include <linux/device.h>
  20#include <linux/dma-mapping.h>
  21#include <linux/errno.h>
  22#include <linux/interrupt.h>
  23#include <linux/ioport.h>
  24#include <linux/kconfig.h>
  25#include <linux/kernel.h>
  26#include <linux/list.h>
  27#include <linux/module.h>
  28#include <linux/moduleparam.h>
  29#include <linux/platform_device.h>
  30#include <linux/sched.h>
  31#include <linux/seq_file.h>
  32#include <linux/slab.h>
  33#include <linux/timer.h>
  34#include <linux/usb/ch9.h>
  35#include <linux/usb/gadget.h>
  36#include <linux/workqueue.h>
  37
  38#include <bcm63xx_cpu.h>
  39#include <bcm63xx_iudma.h>
  40#include <bcm63xx_dev_usb_usbd.h>
  41#include <bcm63xx_io.h>
  42#include <bcm63xx_regs.h>
  43
  44#define DRV_MODULE_NAME         "bcm63xx_udc"
  45
  46static const char bcm63xx_ep0name[] = "ep0";
  47
  48static const struct {
  49        const char *name;
  50        const struct usb_ep_caps caps;
  51} bcm63xx_ep_info[] = {
  52#define EP_INFO(_name, _caps) \
  53        { \
  54                .name = _name, \
  55                .caps = _caps, \
  56        }
  57
  58        EP_INFO(bcm63xx_ep0name,
  59                USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL, USB_EP_CAPS_DIR_ALL)),
  60        EP_INFO("ep1in-bulk",
  61                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
  62        EP_INFO("ep2out-bulk",
  63                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
  64        EP_INFO("ep3in-int",
  65                USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
  66        EP_INFO("ep4out-int",
  67                USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_OUT)),
  68
  69#undef EP_INFO
  70};
  71
  72static bool use_fullspeed;
  73module_param(use_fullspeed, bool, S_IRUGO);
  74MODULE_PARM_DESC(use_fullspeed, "true for fullspeed only");
  75
  76/*
  77 * RX IRQ coalescing options:
  78 *
  79 * false (default) - one IRQ per DATAx packet.  Slow but reliable.  The
  80 * driver is able to pass the "testusb" suite and recover from conditions like:
  81 *
  82 *   1) Device queues up a 2048-byte RX IUDMA transaction on an OUT bulk ep
  83 *   2) Host sends 512 bytes of data
  84 *   3) Host decides to reconfigure the device and sends SET_INTERFACE
  85 *   4) Device shuts down the endpoint and cancels the RX transaction
  86 *
  87 * true - one IRQ per transfer, for transfers <= 2048B.  Generates
  88 * considerably fewer IRQs, but error recovery is less robust.  Does not
  89 * reliably pass "testusb".
  90 *
  91 * TX always uses coalescing, because we can cancel partially complete TX
  92 * transfers by repeatedly flushing the FIFO.  The hardware doesn't allow
  93 * this on RX.
  94 */
  95static bool irq_coalesce;
  96module_param(irq_coalesce, bool, S_IRUGO);
  97MODULE_PARM_DESC(irq_coalesce, "take one IRQ per RX transfer");
  98
  99#define BCM63XX_NUM_EP                  5
 100#define BCM63XX_NUM_IUDMA               6
 101#define BCM63XX_NUM_FIFO_PAIRS          3
 102
 103#define IUDMA_RESET_TIMEOUT_US          10000
 104
 105#define IUDMA_EP0_RXCHAN                0
 106#define IUDMA_EP0_TXCHAN                1
 107
 108#define IUDMA_MAX_FRAGMENT              2048
 109#define BCM63XX_MAX_CTRL_PKT            64
 110
 111#define BCMEP_CTRL                      0x00
 112#define BCMEP_ISOC                      0x01
 113#define BCMEP_BULK                      0x02
 114#define BCMEP_INTR                      0x03
 115
 116#define BCMEP_OUT                       0x00
 117#define BCMEP_IN                        0x01
 118
 119#define BCM63XX_SPD_FULL                1
 120#define BCM63XX_SPD_HIGH                0
 121
 122#define IUDMA_DMAC_OFFSET               0x200
 123#define IUDMA_DMAS_OFFSET               0x400
 124
 125enum bcm63xx_ep0_state {
 126        EP0_REQUEUE,
 127        EP0_IDLE,
 128        EP0_IN_DATA_PHASE_SETUP,
 129        EP0_IN_DATA_PHASE_COMPLETE,
 130        EP0_OUT_DATA_PHASE_SETUP,
 131        EP0_OUT_DATA_PHASE_COMPLETE,
 132        EP0_OUT_STATUS_PHASE,
 133        EP0_IN_FAKE_STATUS_PHASE,
 134        EP0_SHUTDOWN,
 135};
 136
 137static const char __maybe_unused bcm63xx_ep0_state_names[][32] = {
 138        "REQUEUE",
 139        "IDLE",
 140        "IN_DATA_PHASE_SETUP",
 141        "IN_DATA_PHASE_COMPLETE",
 142        "OUT_DATA_PHASE_SETUP",
 143        "OUT_DATA_PHASE_COMPLETE",
 144        "OUT_STATUS_PHASE",
 145        "IN_FAKE_STATUS_PHASE",
 146        "SHUTDOWN",
 147};
 148
 149/**
 150 * struct iudma_ch_cfg - Static configuration for an IUDMA channel.
 151 * @ep_num: USB endpoint number.
 152 * @n_bds: Number of buffer descriptors in the ring.
 153 * @ep_type: Endpoint type (control, bulk, interrupt).
 154 * @dir: Direction (in, out).
 155 * @n_fifo_slots: Number of FIFO entries to allocate for this channel.
 156 * @max_pkt_hs: Maximum packet size in high speed mode.
 157 * @max_pkt_fs: Maximum packet size in full speed mode.
 158 */
 159struct iudma_ch_cfg {
 160        int                             ep_num;
 161        int                             n_bds;
 162        int                             ep_type;
 163        int                             dir;
 164        int                             n_fifo_slots;
 165        int                             max_pkt_hs;
 166        int                             max_pkt_fs;
 167};
 168
 169static const struct iudma_ch_cfg iudma_defaults[] = {
 170
 171        /* This controller was designed to support a CDC/RNDIS application.
 172           It may be possible to reconfigure some of the endpoints, but
 173           the hardware limitations (FIFO sizing and number of DMA channels)
 174           may significantly impact flexibility and/or stability.  Change
 175           these values at your own risk.
 176
 177              ep_num       ep_type           n_fifo_slots    max_pkt_fs
 178        idx      |  n_bds     |         dir       |  max_pkt_hs  |
 179         |       |    |       |          |        |      |       |       */
 180        [0] = { -1,   4, BCMEP_CTRL, BCMEP_OUT,  32,    64,     64 },
 181        [1] = {  0,   4, BCMEP_CTRL, BCMEP_OUT,  32,    64,     64 },
 182        [2] = {  2,  16, BCMEP_BULK, BCMEP_OUT, 128,   512,     64 },
 183        [3] = {  1,  16, BCMEP_BULK, BCMEP_IN,  128,   512,     64 },
 184        [4] = {  4,   4, BCMEP_INTR, BCMEP_OUT,  32,    64,     64 },
 185        [5] = {  3,   4, BCMEP_INTR, BCMEP_IN,   32,    64,     64 },
 186};
 187
 188struct bcm63xx_udc;
 189
 190/**
 191 * struct iudma_ch - Represents the current state of a single IUDMA channel.
 192 * @ch_idx: IUDMA channel index (0 to BCM63XX_NUM_IUDMA-1).
 193 * @ep_num: USB endpoint number.  -1 for ep0 RX.
 194 * @enabled: Whether bcm63xx_ep_enable() has been called.
 195 * @max_pkt: "Chunk size" on the USB interface.  Based on interface speed.
 196 * @is_tx: true for TX, false for RX.
 197 * @bep: Pointer to the associated endpoint.  NULL for ep0 RX.
 198 * @udc: Reference to the device controller.
 199 * @read_bd: Next buffer descriptor to reap from the hardware.
 200 * @write_bd: Next BD available for a new packet.
 201 * @end_bd: Points to the final BD in the ring.
 202 * @n_bds_used: Number of BD entries currently occupied.
 203 * @bd_ring: Base pointer to the BD ring.
 204 * @bd_ring_dma: Physical (DMA) address of bd_ring.
 205 * @n_bds: Total number of BDs in the ring.
 206 *
 207 * ep0 has two IUDMA channels (IUDMA_EP0_RXCHAN and IUDMA_EP0_TXCHAN), as it is
 208 * bidirectional.  The "struct usb_ep" associated with ep0 is for TX (IN)
 209 * only.
 210 *
 211 * Each bulk/intr endpoint has a single IUDMA channel and a single
 212 * struct usb_ep.
 213 */
 214struct iudma_ch {
 215        unsigned int                    ch_idx;
 216        int                             ep_num;
 217        bool                            enabled;
 218        int                             max_pkt;
 219        bool                            is_tx;
 220        struct bcm63xx_ep               *bep;
 221        struct bcm63xx_udc              *udc;
 222
 223        struct bcm_enet_desc            *read_bd;
 224        struct bcm_enet_desc            *write_bd;
 225        struct bcm_enet_desc            *end_bd;
 226        int                             n_bds_used;
 227
 228        struct bcm_enet_desc            *bd_ring;
 229        dma_addr_t                      bd_ring_dma;
 230        unsigned int                    n_bds;
 231};
 232
 233/**
 234 * struct bcm63xx_ep - Internal (driver) state of a single endpoint.
 235 * @ep_num: USB endpoint number.
 236 * @iudma: Pointer to IUDMA channel state.
 237 * @ep: USB gadget layer representation of the EP.
 238 * @udc: Reference to the device controller.
 239 * @queue: Linked list of outstanding requests for this EP.
 240 * @halted: 1 if the EP is stalled; 0 otherwise.
 241 */
 242struct bcm63xx_ep {
 243        unsigned int                    ep_num;
 244        struct iudma_ch                 *iudma;
 245        struct usb_ep                   ep;
 246        struct bcm63xx_udc              *udc;
 247        struct list_head                queue;
 248        unsigned                        halted:1;
 249};
 250
 251/**
 252 * struct bcm63xx_req - Internal (driver) state of a single request.
 253 * @queue: Links back to the EP's request list.
 254 * @req: USB gadget layer representation of the request.
 255 * @offset: Current byte offset into the data buffer (next byte to queue).
 256 * @bd_bytes: Number of data bytes in outstanding BD entries.
 257 * @iudma: IUDMA channel used for the request.
 258 */
 259struct bcm63xx_req {
 260        struct list_head                queue;          /* ep's requests */
 261        struct usb_request              req;
 262        unsigned int                    offset;
 263        unsigned int                    bd_bytes;
 264        struct iudma_ch                 *iudma;
 265};
 266
 267/**
 268 * struct bcm63xx_udc - Driver/hardware private context.
 269 * @lock: Spinlock to mediate access to this struct, and (most) HW regs.
 270 * @dev: Generic Linux device structure.
 271 * @pd: Platform data (board/port info).
 272 * @usbd_clk: Clock descriptor for the USB device block.
 273 * @usbh_clk: Clock descriptor for the USB host block.
 274 * @gadget: USB slave device.
 275 * @driver: Driver for USB slave devices.
 276 * @usbd_regs: Base address of the USBD/USB20D block.
 277 * @iudma_regs: Base address of the USBD's associated IUDMA block.
 278 * @bep: Array of endpoints, including ep0.
 279 * @iudma: Array of all IUDMA channels used by this controller.
 280 * @cfg: USB configuration number, from SET_CONFIGURATION wValue.
 281 * @iface: USB interface number, from SET_INTERFACE wIndex.
 282 * @alt_iface: USB alt interface number, from SET_INTERFACE wValue.
 283 * @ep0_ctrl_req: Request object for bcm63xx_udc-initiated ep0 transactions.
 284 * @ep0_ctrl_buf: Data buffer for ep0_ctrl_req.
 285 * @ep0state: Current state of the ep0 state machine.
 286 * @ep0_wq: Workqueue struct used to wake up the ep0 state machine.
 287 * @wedgemap: Bitmap of wedged endpoints.
 288 * @ep0_req_reset: USB reset is pending.
 289 * @ep0_req_set_cfg: Need to spoof a SET_CONFIGURATION packet.
 290 * @ep0_req_set_iface: Need to spoof a SET_INTERFACE packet.
 291 * @ep0_req_shutdown: Driver is shutting down; requesting ep0 to halt activity.
 292 * @ep0_req_completed: ep0 request has completed; worker has not seen it yet.
 293 * @ep0_reply: Pending reply from gadget driver.
 294 * @ep0_request: Outstanding ep0 request.
 295 * @debugfs_root: debugfs directory: /sys/kernel/debug/<DRV_MODULE_NAME>.
 296 * @debugfs_usbd: debugfs file "usbd" for controller state.
 297 * @debugfs_iudma: debugfs file "usbd" for IUDMA state.
 298 */
 299struct bcm63xx_udc {
 300        spinlock_t                      lock;
 301
 302        struct device                   *dev;
 303        struct bcm63xx_usbd_platform_data *pd;
 304        struct clk                      *usbd_clk;
 305        struct clk                      *usbh_clk;
 306
 307        struct usb_gadget               gadget;
 308        struct usb_gadget_driver        *driver;
 309
 310        void __iomem                    *usbd_regs;
 311        void __iomem                    *iudma_regs;
 312
 313        struct bcm63xx_ep               bep[BCM63XX_NUM_EP];
 314        struct iudma_ch                 iudma[BCM63XX_NUM_IUDMA];
 315
 316        int                             cfg;
 317        int                             iface;
 318        int                             alt_iface;
 319
 320        struct bcm63xx_req              ep0_ctrl_req;
 321        u8                              *ep0_ctrl_buf;
 322
 323        int                             ep0state;
 324        struct work_struct              ep0_wq;
 325
 326        unsigned long                   wedgemap;
 327
 328        unsigned                        ep0_req_reset:1;
 329        unsigned                        ep0_req_set_cfg:1;
 330        unsigned                        ep0_req_set_iface:1;
 331        unsigned                        ep0_req_shutdown:1;
 332
 333        unsigned                        ep0_req_completed:1;
 334        struct usb_request              *ep0_reply;
 335        struct usb_request              *ep0_request;
 336
 337        struct dentry                   *debugfs_root;
 338        struct dentry                   *debugfs_usbd;
 339        struct dentry                   *debugfs_iudma;
 340};
 341
 342static const struct usb_ep_ops bcm63xx_udc_ep_ops;
 343
 344/***********************************************************************
 345 * Convenience functions
 346 ***********************************************************************/
 347
 348static inline struct bcm63xx_udc *gadget_to_udc(struct usb_gadget *g)
 349{
 350        return container_of(g, struct bcm63xx_udc, gadget);
 351}
 352
 353static inline struct bcm63xx_ep *our_ep(struct usb_ep *ep)
 354{
 355        return container_of(ep, struct bcm63xx_ep, ep);
 356}
 357
 358static inline struct bcm63xx_req *our_req(struct usb_request *req)
 359{
 360        return container_of(req, struct bcm63xx_req, req);
 361}
 362
 363static inline u32 usbd_readl(struct bcm63xx_udc *udc, u32 off)
 364{
 365        return bcm_readl(udc->usbd_regs + off);
 366}
 367
 368static inline void usbd_writel(struct bcm63xx_udc *udc, u32 val, u32 off)
 369{
 370        bcm_writel(val, udc->usbd_regs + off);
 371}
 372
 373static inline u32 usb_dma_readl(struct bcm63xx_udc *udc, u32 off)
 374{
 375        return bcm_readl(udc->iudma_regs + off);
 376}
 377
 378static inline void usb_dma_writel(struct bcm63xx_udc *udc, u32 val, u32 off)
 379{
 380        bcm_writel(val, udc->iudma_regs + off);
 381}
 382
 383static inline u32 usb_dmac_readl(struct bcm63xx_udc *udc, u32 off, int chan)
 384{
 385        return bcm_readl(udc->iudma_regs + IUDMA_DMAC_OFFSET + off +
 386                        (ENETDMA_CHAN_WIDTH * chan));
 387}
 388
 389static inline void usb_dmac_writel(struct bcm63xx_udc *udc, u32 val, u32 off,
 390                                        int chan)
 391{
 392        bcm_writel(val, udc->iudma_regs + IUDMA_DMAC_OFFSET + off +
 393                        (ENETDMA_CHAN_WIDTH * chan));
 394}
 395
 396static inline u32 usb_dmas_readl(struct bcm63xx_udc *udc, u32 off, int chan)
 397{
 398        return bcm_readl(udc->iudma_regs + IUDMA_DMAS_OFFSET + off +
 399                        (ENETDMA_CHAN_WIDTH * chan));
 400}
 401
 402static inline void usb_dmas_writel(struct bcm63xx_udc *udc, u32 val, u32 off,
 403                                        int chan)
 404{
 405        bcm_writel(val, udc->iudma_regs + IUDMA_DMAS_OFFSET + off +
 406                        (ENETDMA_CHAN_WIDTH * chan));
 407}
 408
 409static inline void set_clocks(struct bcm63xx_udc *udc, bool is_enabled)
 410{
 411        if (is_enabled) {
 412                clk_enable(udc->usbh_clk);
 413                clk_enable(udc->usbd_clk);
 414                udelay(10);
 415        } else {
 416                clk_disable(udc->usbd_clk);
 417                clk_disable(udc->usbh_clk);
 418        }
 419}
 420
 421/***********************************************************************
 422 * Low-level IUDMA / FIFO operations
 423 ***********************************************************************/
 424
 425/**
 426 * bcm63xx_ep_dma_select - Helper function to set up the init_sel signal.
 427 * @udc: Reference to the device controller.
 428 * @idx: Desired init_sel value.
 429 *
 430 * The "init_sel" signal is used as a selection index for both endpoints
 431 * and IUDMA channels.  Since these do not map 1:1, the use of this signal
 432 * depends on the context.
 433 */
 434static void bcm63xx_ep_dma_select(struct bcm63xx_udc *udc, int idx)
 435{
 436        u32 val = usbd_readl(udc, USBD_CONTROL_REG);
 437
 438        val &= ~USBD_CONTROL_INIT_SEL_MASK;
 439        val |= idx << USBD_CONTROL_INIT_SEL_SHIFT;
 440        usbd_writel(udc, val, USBD_CONTROL_REG);
 441}
 442
 443/**
 444 * bcm63xx_set_stall - Enable/disable stall on one endpoint.
 445 * @udc: Reference to the device controller.
 446 * @bep: Endpoint on which to operate.
 447 * @is_stalled: true to enable stall, false to disable.
 448 *
 449 * See notes in bcm63xx_update_wedge() regarding automatic clearing of
 450 * halt/stall conditions.
 451 */
 452static void bcm63xx_set_stall(struct bcm63xx_udc *udc, struct bcm63xx_ep *bep,
 453        bool is_stalled)
 454{
 455        u32 val;
 456
 457        val = USBD_STALL_UPDATE_MASK |
 458                (is_stalled ? USBD_STALL_ENABLE_MASK : 0) |
 459                (bep->ep_num << USBD_STALL_EPNUM_SHIFT);
 460        usbd_writel(udc, val, USBD_STALL_REG);
 461}
 462
 463/**
 464 * bcm63xx_fifo_setup - (Re)initialize FIFO boundaries and settings.
 465 * @udc: Reference to the device controller.
 466 *
 467 * These parameters depend on the USB link speed.  Settings are
 468 * per-IUDMA-channel-pair.
 469 */
 470static void bcm63xx_fifo_setup(struct bcm63xx_udc *udc)
 471{
 472        int is_hs = udc->gadget.speed == USB_SPEED_HIGH;
 473        u32 i, val, rx_fifo_slot, tx_fifo_slot;
 474
 475        /* set up FIFO boundaries and packet sizes; this is done in pairs */
 476        rx_fifo_slot = tx_fifo_slot = 0;
 477        for (i = 0; i < BCM63XX_NUM_IUDMA; i += 2) {
 478                const struct iudma_ch_cfg *rx_cfg = &iudma_defaults[i];
 479                const struct iudma_ch_cfg *tx_cfg = &iudma_defaults[i + 1];
 480
 481                bcm63xx_ep_dma_select(udc, i >> 1);
 482
 483                val = (rx_fifo_slot << USBD_RXFIFO_CONFIG_START_SHIFT) |
 484                        ((rx_fifo_slot + rx_cfg->n_fifo_slots - 1) <<
 485                         USBD_RXFIFO_CONFIG_END_SHIFT);
 486                rx_fifo_slot += rx_cfg->n_fifo_slots;
 487                usbd_writel(udc, val, USBD_RXFIFO_CONFIG_REG);
 488                usbd_writel(udc,
 489                            is_hs ? rx_cfg->max_pkt_hs : rx_cfg->max_pkt_fs,
 490                            USBD_RXFIFO_EPSIZE_REG);
 491
 492                val = (tx_fifo_slot << USBD_TXFIFO_CONFIG_START_SHIFT) |
 493                        ((tx_fifo_slot + tx_cfg->n_fifo_slots - 1) <<
 494                         USBD_TXFIFO_CONFIG_END_SHIFT);
 495                tx_fifo_slot += tx_cfg->n_fifo_slots;
 496                usbd_writel(udc, val, USBD_TXFIFO_CONFIG_REG);
 497                usbd_writel(udc,
 498                            is_hs ? tx_cfg->max_pkt_hs : tx_cfg->max_pkt_fs,
 499                            USBD_TXFIFO_EPSIZE_REG);
 500
 501                usbd_readl(udc, USBD_TXFIFO_EPSIZE_REG);
 502        }
 503}
 504
 505/**
 506 * bcm63xx_fifo_reset_ep - Flush a single endpoint's FIFO.
 507 * @udc: Reference to the device controller.
 508 * @ep_num: Endpoint number.
 509 */
 510static void bcm63xx_fifo_reset_ep(struct bcm63xx_udc *udc, int ep_num)
 511{
 512        u32 val;
 513
 514        bcm63xx_ep_dma_select(udc, ep_num);
 515
 516        val = usbd_readl(udc, USBD_CONTROL_REG);
 517        val |= USBD_CONTROL_FIFO_RESET_MASK;
 518        usbd_writel(udc, val, USBD_CONTROL_REG);
 519        usbd_readl(udc, USBD_CONTROL_REG);
 520}
 521
 522/**
 523 * bcm63xx_fifo_reset - Flush all hardware FIFOs.
 524 * @udc: Reference to the device controller.
 525 */
 526static void bcm63xx_fifo_reset(struct bcm63xx_udc *udc)
 527{
 528        int i;
 529
 530        for (i = 0; i < BCM63XX_NUM_FIFO_PAIRS; i++)
 531                bcm63xx_fifo_reset_ep(udc, i);
 532}
 533
 534/**
 535 * bcm63xx_ep_init - Initial (one-time) endpoint initialization.
 536 * @udc: Reference to the device controller.
 537 */
 538static void bcm63xx_ep_init(struct bcm63xx_udc *udc)
 539{
 540        u32 i, val;
 541
 542        for (i = 0; i < BCM63XX_NUM_IUDMA; i++) {
 543                const struct iudma_ch_cfg *cfg = &iudma_defaults[i];
 544
 545                if (cfg->ep_num < 0)
 546                        continue;
 547
 548                bcm63xx_ep_dma_select(udc, cfg->ep_num);
 549                val = (cfg->ep_type << USBD_EPNUM_TYPEMAP_TYPE_SHIFT) |
 550                        ((i >> 1) << USBD_EPNUM_TYPEMAP_DMA_CH_SHIFT);
 551                usbd_writel(udc, val, USBD_EPNUM_TYPEMAP_REG);
 552        }
 553}
 554
 555/**
 556 * bcm63xx_ep_setup - Configure per-endpoint settings.
 557 * @udc: Reference to the device controller.
 558 *
 559 * This needs to be rerun if the speed/cfg/intf/altintf changes.
 560 */
 561static void bcm63xx_ep_setup(struct bcm63xx_udc *udc)
 562{
 563        u32 val, i;
 564
 565        usbd_writel(udc, USBD_CSR_SETUPADDR_DEF, USBD_CSR_SETUPADDR_REG);
 566
 567        for (i = 0; i < BCM63XX_NUM_IUDMA; i++) {
 568                const struct iudma_ch_cfg *cfg = &iudma_defaults[i];
 569                int max_pkt = udc->gadget.speed == USB_SPEED_HIGH ?
 570                              cfg->max_pkt_hs : cfg->max_pkt_fs;
 571                int idx = cfg->ep_num;
 572
 573                udc->iudma[i].max_pkt = max_pkt;
 574
 575                if (idx < 0)
 576                        continue;
 577                usb_ep_set_maxpacket_limit(&udc->bep[idx].ep, max_pkt);
 578
 579                val = (idx << USBD_CSR_EP_LOG_SHIFT) |
 580                      (cfg->dir << USBD_CSR_EP_DIR_SHIFT) |
 581                      (cfg->ep_type << USBD_CSR_EP_TYPE_SHIFT) |
 582                      (udc->cfg << USBD_CSR_EP_CFG_SHIFT) |
 583                      (udc->iface << USBD_CSR_EP_IFACE_SHIFT) |
 584                      (udc->alt_iface << USBD_CSR_EP_ALTIFACE_SHIFT) |
 585                      (max_pkt << USBD_CSR_EP_MAXPKT_SHIFT);
 586                usbd_writel(udc, val, USBD_CSR_EP_REG(idx));
 587        }
 588}
 589
 590/**
 591 * iudma_write - Queue a single IUDMA transaction.
 592 * @udc: Reference to the device controller.
 593 * @iudma: IUDMA channel to use.
 594 * @breq: Request containing the transaction data.
 595 *
 596 * For RX IUDMA, this will queue a single buffer descriptor, as RX IUDMA
 597 * does not honor SOP/EOP so the handling of multiple buffers is ambiguous.
 598 * So iudma_write() may be called several times to fulfill a single
 599 * usb_request.
 600 *
 601 * For TX IUDMA, this can queue multiple buffer descriptors if needed.
 602 */
 603static void iudma_write(struct bcm63xx_udc *udc, struct iudma_ch *iudma,
 604        struct bcm63xx_req *breq)
 605{
 606        int first_bd = 1, last_bd = 0, extra_zero_pkt = 0;
 607        unsigned int bytes_left = breq->req.length - breq->offset;
 608        const int max_bd_bytes = !irq_coalesce && !iudma->is_tx ?
 609                iudma->max_pkt : IUDMA_MAX_FRAGMENT;
 610
 611        iudma->n_bds_used = 0;
 612        breq->bd_bytes = 0;
 613        breq->iudma = iudma;
 614
 615        if ((bytes_left % iudma->max_pkt == 0) && bytes_left && breq->req.zero)
 616                extra_zero_pkt = 1;
 617
 618        do {
 619                struct bcm_enet_desc *d = iudma->write_bd;
 620                u32 dmaflags = 0;
 621                unsigned int n_bytes;
 622
 623                if (d == iudma->end_bd) {
 624                        dmaflags |= DMADESC_WRAP_MASK;
 625                        iudma->write_bd = iudma->bd_ring;
 626                } else {
 627                        iudma->write_bd++;
 628                }
 629                iudma->n_bds_used++;
 630
 631                n_bytes = min_t(int, bytes_left, max_bd_bytes);
 632                if (n_bytes)
 633                        dmaflags |= n_bytes << DMADESC_LENGTH_SHIFT;
 634                else
 635                        dmaflags |= (1 << DMADESC_LENGTH_SHIFT) |
 636                                    DMADESC_USB_ZERO_MASK;
 637
 638                dmaflags |= DMADESC_OWNER_MASK;
 639                if (first_bd) {
 640                        dmaflags |= DMADESC_SOP_MASK;
 641                        first_bd = 0;
 642                }
 643
 644                /*
 645                 * extra_zero_pkt forces one more iteration through the loop
 646                 * after all data is queued up, to send the zero packet
 647                 */
 648                if (extra_zero_pkt && !bytes_left)
 649                        extra_zero_pkt = 0;
 650
 651                if (!iudma->is_tx || iudma->n_bds_used == iudma->n_bds ||
 652                    (n_bytes == bytes_left && !extra_zero_pkt)) {
 653                        last_bd = 1;
 654                        dmaflags |= DMADESC_EOP_MASK;
 655                }
 656
 657                d->address = breq->req.dma + breq->offset;
 658                mb();
 659                d->len_stat = dmaflags;
 660
 661                breq->offset += n_bytes;
 662                breq->bd_bytes += n_bytes;
 663                bytes_left -= n_bytes;
 664        } while (!last_bd);
 665
 666        usb_dmac_writel(udc, ENETDMAC_CHANCFG_EN_MASK,
 667                        ENETDMAC_CHANCFG_REG, iudma->ch_idx);
 668}
 669
 670/**
 671 * iudma_read - Check for IUDMA buffer completion.
 672 * @udc: Reference to the device controller.
 673 * @iudma: IUDMA channel to use.
 674 *
 675 * This checks to see if ALL of the outstanding BDs on the DMA channel
 676 * have been filled.  If so, it returns the actual transfer length;
 677 * otherwise it returns -EBUSY.
 678 */
 679static int iudma_read(struct bcm63xx_udc *udc, struct iudma_ch *iudma)
 680{
 681        int i, actual_len = 0;
 682        struct bcm_enet_desc *d = iudma->read_bd;
 683
 684        if (!iudma->n_bds_used)
 685                return -EINVAL;
 686
 687        for (i = 0; i < iudma->n_bds_used; i++) {
 688                u32 dmaflags;
 689
 690                dmaflags = d->len_stat;
 691
 692                if (dmaflags & DMADESC_OWNER_MASK)
 693                        return -EBUSY;
 694
 695                actual_len += (dmaflags & DMADESC_LENGTH_MASK) >>
 696                              DMADESC_LENGTH_SHIFT;
 697                if (d == iudma->end_bd)
 698                        d = iudma->bd_ring;
 699                else
 700                        d++;
 701        }
 702
 703        iudma->read_bd = d;
 704        iudma->n_bds_used = 0;
 705        return actual_len;
 706}
 707
 708/**
 709 * iudma_reset_channel - Stop DMA on a single channel.
 710 * @udc: Reference to the device controller.
 711 * @iudma: IUDMA channel to reset.
 712 */
 713static void iudma_reset_channel(struct bcm63xx_udc *udc, struct iudma_ch *iudma)
 714{
 715        int timeout = IUDMA_RESET_TIMEOUT_US;
 716        struct bcm_enet_desc *d;
 717        int ch_idx = iudma->ch_idx;
 718
 719        if (!iudma->is_tx)
 720                bcm63xx_fifo_reset_ep(udc, max(0, iudma->ep_num));
 721
 722        /* stop DMA, then wait for the hardware to wrap up */
 723        usb_dmac_writel(udc, 0, ENETDMAC_CHANCFG_REG, ch_idx);
 724
 725        while (usb_dmac_readl(udc, ENETDMAC_CHANCFG_REG, ch_idx) &
 726                                   ENETDMAC_CHANCFG_EN_MASK) {
 727                udelay(1);
 728
 729                /* repeatedly flush the FIFO data until the BD completes */
 730                if (iudma->is_tx && iudma->ep_num >= 0)
 731                        bcm63xx_fifo_reset_ep(udc, iudma->ep_num);
 732
 733                if (!timeout--) {
 734                        dev_err(udc->dev, "can't reset IUDMA channel %d\n",
 735                                ch_idx);
 736                        break;
 737                }
 738                if (timeout == IUDMA_RESET_TIMEOUT_US / 2) {
 739                        dev_warn(udc->dev, "forcibly halting IUDMA channel %d\n",
 740                                 ch_idx);
 741                        usb_dmac_writel(udc, ENETDMAC_CHANCFG_BUFHALT_MASK,
 742                                        ENETDMAC_CHANCFG_REG, ch_idx);
 743                }
 744        }
 745        usb_dmac_writel(udc, ~0, ENETDMAC_IR_REG, ch_idx);
 746
 747        /* don't leave "live" HW-owned entries for the next guy to step on */
 748        for (d = iudma->bd_ring; d <= iudma->end_bd; d++)
 749                d->len_stat = 0;
 750        mb();
 751
 752        iudma->read_bd = iudma->write_bd = iudma->bd_ring;
 753        iudma->n_bds_used = 0;
 754
 755        /* set up IRQs, UBUS burst size, and BD base for this channel */
 756        usb_dmac_writel(udc, ENETDMAC_IR_BUFDONE_MASK,
 757                        ENETDMAC_IRMASK_REG, ch_idx);
 758        usb_dmac_writel(udc, 8, ENETDMAC_MAXBURST_REG, ch_idx);
 759
 760        usb_dmas_writel(udc, iudma->bd_ring_dma, ENETDMAS_RSTART_REG, ch_idx);
 761        usb_dmas_writel(udc, 0, ENETDMAS_SRAM2_REG, ch_idx);
 762}
 763
 764/**
 765 * iudma_init_channel - One-time IUDMA channel initialization.
 766 * @udc: Reference to the device controller.
 767 * @ch_idx: Channel to initialize.
 768 */
 769static int iudma_init_channel(struct bcm63xx_udc *udc, unsigned int ch_idx)
 770{
 771        struct iudma_ch *iudma = &udc->iudma[ch_idx];
 772        const struct iudma_ch_cfg *cfg = &iudma_defaults[ch_idx];
 773        unsigned int n_bds = cfg->n_bds;
 774        struct bcm63xx_ep *bep = NULL;
 775
 776        iudma->ep_num = cfg->ep_num;
 777        iudma->ch_idx = ch_idx;
 778        iudma->is_tx = !!(ch_idx & 0x01);
 779        if (iudma->ep_num >= 0) {
 780                bep = &udc->bep[iudma->ep_num];
 781                bep->iudma = iudma;
 782                INIT_LIST_HEAD(&bep->queue);
 783        }
 784
 785        iudma->bep = bep;
 786        iudma->udc = udc;
 787
 788        /* ep0 is always active; others are controlled by the gadget driver */
 789        if (iudma->ep_num <= 0)
 790                iudma->enabled = true;
 791
 792        iudma->n_bds = n_bds;
 793        iudma->bd_ring = dmam_alloc_coherent(udc->dev,
 794                n_bds * sizeof(struct bcm_enet_desc),
 795                &iudma->bd_ring_dma, GFP_KERNEL);
 796        if (!iudma->bd_ring)
 797                return -ENOMEM;
 798        iudma->end_bd = &iudma->bd_ring[n_bds - 1];
 799
 800        return 0;
 801}
 802
 803/**
 804 * iudma_init - One-time initialization of all IUDMA channels.
 805 * @udc: Reference to the device controller.
 806 *
 807 * Enable DMA, flush channels, and enable global IUDMA IRQs.
 808 */
 809static int iudma_init(struct bcm63xx_udc *udc)
 810{
 811        int i, rc;
 812
 813        usb_dma_writel(udc, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG);
 814
 815        for (i = 0; i < BCM63XX_NUM_IUDMA; i++) {
 816                rc = iudma_init_channel(udc, i);
 817                if (rc)
 818                        return rc;
 819                iudma_reset_channel(udc, &udc->iudma[i]);
 820        }
 821
 822        usb_dma_writel(udc, BIT(BCM63XX_NUM_IUDMA)-1, ENETDMA_GLB_IRQMASK_REG);
 823        return 0;
 824}
 825
 826/**
 827 * iudma_uninit - Uninitialize IUDMA channels.
 828 * @udc: Reference to the device controller.
 829 *
 830 * Kill global IUDMA IRQs, flush channels, and kill DMA.
 831 */
 832static void iudma_uninit(struct bcm63xx_udc *udc)
 833{
 834        int i;
 835
 836        usb_dma_writel(udc, 0, ENETDMA_GLB_IRQMASK_REG);
 837
 838        for (i = 0; i < BCM63XX_NUM_IUDMA; i++)
 839                iudma_reset_channel(udc, &udc->iudma[i]);
 840
 841        usb_dma_writel(udc, 0, ENETDMA_CFG_REG);
 842}
 843
 844/***********************************************************************
 845 * Other low-level USBD operations
 846 ***********************************************************************/
 847
 848/**
 849 * bcm63xx_set_ctrl_irqs - Mask/unmask control path interrupts.
 850 * @udc: Reference to the device controller.
 851 * @enable_irqs: true to enable, false to disable.
 852 */
 853static void bcm63xx_set_ctrl_irqs(struct bcm63xx_udc *udc, bool enable_irqs)
 854{
 855        u32 val;
 856
 857        usbd_writel(udc, 0, USBD_STATUS_REG);
 858
 859        val = BIT(USBD_EVENT_IRQ_USB_RESET) |
 860              BIT(USBD_EVENT_IRQ_SETUP) |
 861              BIT(USBD_EVENT_IRQ_SETCFG) |
 862              BIT(USBD_EVENT_IRQ_SETINTF) |
 863              BIT(USBD_EVENT_IRQ_USB_LINK);
 864        usbd_writel(udc, enable_irqs ? val : 0, USBD_EVENT_IRQ_MASK_REG);
 865        usbd_writel(udc, val, USBD_EVENT_IRQ_STATUS_REG);
 866}
 867
 868/**
 869 * bcm63xx_select_phy_mode - Select between USB device and host mode.
 870 * @udc: Reference to the device controller.
 871 * @is_device: true for device, false for host.
 872 *
 873 * This should probably be reworked to use the drivers/usb/otg
 874 * infrastructure.
 875 *
 876 * By default, the AFE/pullups are disabled in device mode, until
 877 * bcm63xx_select_pullup() is called.
 878 */
 879static void bcm63xx_select_phy_mode(struct bcm63xx_udc *udc, bool is_device)
 880{
 881        u32 val, portmask = BIT(udc->pd->port_no);
 882
 883        if (BCMCPU_IS_6328()) {
 884                /* configure pinmux to sense VBUS signal */
 885                val = bcm_gpio_readl(GPIO_PINMUX_OTHR_REG);
 886                val &= ~GPIO_PINMUX_OTHR_6328_USB_MASK;
 887                val |= is_device ? GPIO_PINMUX_OTHR_6328_USB_DEV :
 888                               GPIO_PINMUX_OTHR_6328_USB_HOST;
 889                bcm_gpio_writel(val, GPIO_PINMUX_OTHR_REG);
 890        }
 891
 892        val = bcm_rset_readl(RSET_USBH_PRIV, USBH_PRIV_UTMI_CTL_6368_REG);
 893        if (is_device) {
 894                val |= (portmask << USBH_PRIV_UTMI_CTL_HOSTB_SHIFT);
 895                val |= (portmask << USBH_PRIV_UTMI_CTL_NODRIV_SHIFT);
 896        } else {
 897                val &= ~(portmask << USBH_PRIV_UTMI_CTL_HOSTB_SHIFT);
 898                val &= ~(portmask << USBH_PRIV_UTMI_CTL_NODRIV_SHIFT);
 899        }
 900        bcm_rset_writel(RSET_USBH_PRIV, val, USBH_PRIV_UTMI_CTL_6368_REG);
 901
 902        val = bcm_rset_readl(RSET_USBH_PRIV, USBH_PRIV_SWAP_6368_REG);
 903        if (is_device)
 904                val |= USBH_PRIV_SWAP_USBD_MASK;
 905        else
 906                val &= ~USBH_PRIV_SWAP_USBD_MASK;
 907        bcm_rset_writel(RSET_USBH_PRIV, val, USBH_PRIV_SWAP_6368_REG);
 908}
 909
 910/**
 911 * bcm63xx_select_pullup - Enable/disable the pullup on D+
 912 * @udc: Reference to the device controller.
 913 * @is_on: true to enable the pullup, false to disable.
 914 *
 915 * If the pullup is active, the host will sense a FS/HS device connected to
 916 * the port.  If the pullup is inactive, the host will think the USB
 917 * device has been disconnected.
 918 */
 919static void bcm63xx_select_pullup(struct bcm63xx_udc *udc, bool is_on)
 920{
 921        u32 val, portmask = BIT(udc->pd->port_no);
 922
 923        val = bcm_rset_readl(RSET_USBH_PRIV, USBH_PRIV_UTMI_CTL_6368_REG);
 924        if (is_on)
 925                val &= ~(portmask << USBH_PRIV_UTMI_CTL_NODRIV_SHIFT);
 926        else
 927                val |= (portmask << USBH_PRIV_UTMI_CTL_NODRIV_SHIFT);
 928        bcm_rset_writel(RSET_USBH_PRIV, val, USBH_PRIV_UTMI_CTL_6368_REG);
 929}
 930
 931/**
 932 * bcm63xx_uninit_udc_hw - Shut down the hardware prior to driver removal.
 933 * @udc: Reference to the device controller.
 934 *
 935 * This just masks the IUDMA IRQs and releases the clocks.  It is assumed
 936 * that bcm63xx_udc_stop() has already run, and the clocks are stopped.
 937 */
 938static void bcm63xx_uninit_udc_hw(struct bcm63xx_udc *udc)
 939{
 940        set_clocks(udc, true);
 941        iudma_uninit(udc);
 942        set_clocks(udc, false);
 943
 944        clk_put(udc->usbd_clk);
 945        clk_put(udc->usbh_clk);
 946}
 947
 948/**
 949 * bcm63xx_init_udc_hw - Initialize the controller hardware and data structures.
 950 * @udc: Reference to the device controller.
 951 */
 952static int bcm63xx_init_udc_hw(struct bcm63xx_udc *udc)
 953{
 954        int i, rc = 0;
 955        u32 val;
 956
 957        udc->ep0_ctrl_buf = devm_kzalloc(udc->dev, BCM63XX_MAX_CTRL_PKT,
 958                                         GFP_KERNEL);
 959        if (!udc->ep0_ctrl_buf)
 960                return -ENOMEM;
 961
 962        INIT_LIST_HEAD(&udc->gadget.ep_list);
 963        for (i = 0; i < BCM63XX_NUM_EP; i++) {
 964                struct bcm63xx_ep *bep = &udc->bep[i];
 965
 966                bep->ep.name = bcm63xx_ep_info[i].name;
 967                bep->ep.caps = bcm63xx_ep_info[i].caps;
 968                bep->ep_num = i;
 969                bep->ep.ops = &bcm63xx_udc_ep_ops;
 970                list_add_tail(&bep->ep.ep_list, &udc->gadget.ep_list);
 971                bep->halted = 0;
 972                usb_ep_set_maxpacket_limit(&bep->ep, BCM63XX_MAX_CTRL_PKT);
 973                bep->udc = udc;
 974                bep->ep.desc = NULL;
 975                INIT_LIST_HEAD(&bep->queue);
 976        }
 977
 978        udc->gadget.ep0 = &udc->bep[0].ep;
 979        list_del(&udc->bep[0].ep.ep_list);
 980
 981        udc->gadget.speed = USB_SPEED_UNKNOWN;
 982        udc->ep0state = EP0_SHUTDOWN;
 983
 984        udc->usbh_clk = clk_get(udc->dev, "usbh");
 985        if (IS_ERR(udc->usbh_clk))
 986                return -EIO;
 987
 988        udc->usbd_clk = clk_get(udc->dev, "usbd");
 989        if (IS_ERR(udc->usbd_clk)) {
 990                clk_put(udc->usbh_clk);
 991                return -EIO;
 992        }
 993
 994        set_clocks(udc, true);
 995
 996        val = USBD_CONTROL_AUTO_CSRS_MASK |
 997              USBD_CONTROL_DONE_CSRS_MASK |
 998              (irq_coalesce ? USBD_CONTROL_RXZSCFG_MASK : 0);
 999        usbd_writel(udc, val, USBD_CONTROL_REG);
1000
1001        val = USBD_STRAPS_APP_SELF_PWR_MASK |
1002              USBD_STRAPS_APP_RAM_IF_MASK |
1003              USBD_STRAPS_APP_CSRPRGSUP_MASK |
1004              USBD_STRAPS_APP_8BITPHY_MASK |
1005              USBD_STRAPS_APP_RMTWKUP_MASK;
1006
1007        if (udc->gadget.max_speed == USB_SPEED_HIGH)
1008                val |= (BCM63XX_SPD_HIGH << USBD_STRAPS_SPEED_SHIFT);
1009        else
1010                val |= (BCM63XX_SPD_FULL << USBD_STRAPS_SPEED_SHIFT);
1011        usbd_writel(udc, val, USBD_STRAPS_REG);
1012
1013        bcm63xx_set_ctrl_irqs(udc, false);
1014
1015        usbd_writel(udc, 0, USBD_EVENT_IRQ_CFG_LO_REG);
1016
1017        val = USBD_EVENT_IRQ_CFG_FALLING(USBD_EVENT_IRQ_ENUM_ON) |
1018              USBD_EVENT_IRQ_CFG_FALLING(USBD_EVENT_IRQ_SET_CSRS);
1019        usbd_writel(udc, val, USBD_EVENT_IRQ_CFG_HI_REG);
1020
1021        rc = iudma_init(udc);
1022        set_clocks(udc, false);
1023        if (rc)
1024                bcm63xx_uninit_udc_hw(udc);
1025
1026        return 0;
1027}
1028
1029/***********************************************************************
1030 * Standard EP gadget operations
1031 ***********************************************************************/
1032
1033/**
1034 * bcm63xx_ep_enable - Enable one endpoint.
1035 * @ep: Endpoint to enable.
1036 * @desc: Contains max packet, direction, etc.
1037 *
1038 * Most of the endpoint parameters are fixed in this controller, so there
1039 * isn't much for this function to do.
1040 */
1041static int bcm63xx_ep_enable(struct usb_ep *ep,
1042        const struct usb_endpoint_descriptor *desc)
1043{
1044        struct bcm63xx_ep *bep = our_ep(ep);
1045        struct bcm63xx_udc *udc = bep->udc;
1046        struct iudma_ch *iudma = bep->iudma;
1047        unsigned long flags;
1048
1049        if (!ep || !desc || ep->name == bcm63xx_ep0name)
1050                return -EINVAL;
1051
1052        if (!udc->driver)
1053                return -ESHUTDOWN;
1054
1055        spin_lock_irqsave(&udc->lock, flags);
1056        if (iudma->enabled) {
1057                spin_unlock_irqrestore(&udc->lock, flags);
1058                return -EINVAL;
1059        }
1060
1061        iudma->enabled = true;
1062        BUG_ON(!list_empty(&bep->queue));
1063
1064        iudma_reset_channel(udc, iudma);
1065
1066        bep->halted = 0;
1067        bcm63xx_set_stall(udc, bep, false);
1068        clear_bit(bep->ep_num, &udc->wedgemap);
1069
1070        ep->desc = desc;
1071        ep->maxpacket = usb_endpoint_maxp(desc);
1072
1073        spin_unlock_irqrestore(&udc->lock, flags);
1074        return 0;
1075}
1076
1077/**
1078 * bcm63xx_ep_disable - Disable one endpoint.
1079 * @ep: Endpoint to disable.
1080 */
1081static int bcm63xx_ep_disable(struct usb_ep *ep)
1082{
1083        struct bcm63xx_ep *bep = our_ep(ep);
1084        struct bcm63xx_udc *udc = bep->udc;
1085        struct iudma_ch *iudma = bep->iudma;
1086        struct list_head *pos, *n;
1087        unsigned long flags;
1088
1089        if (!ep || !ep->desc)
1090                return -EINVAL;
1091
1092        spin_lock_irqsave(&udc->lock, flags);
1093        if (!iudma->enabled) {
1094                spin_unlock_irqrestore(&udc->lock, flags);
1095                return -EINVAL;
1096        }
1097        iudma->enabled = false;
1098
1099        iudma_reset_channel(udc, iudma);
1100
1101        if (!list_empty(&bep->queue)) {
1102                list_for_each_safe(pos, n, &bep->queue) {
1103                        struct bcm63xx_req *breq =
1104                                list_entry(pos, struct bcm63xx_req, queue);
1105
1106                        usb_gadget_unmap_request(&udc->gadget, &breq->req,
1107                                                 iudma->is_tx);
1108                        list_del(&breq->queue);
1109                        breq->req.status = -ESHUTDOWN;
1110
1111                        spin_unlock_irqrestore(&udc->lock, flags);
1112                        usb_gadget_giveback_request(&iudma->bep->ep, &breq->req);
1113                        spin_lock_irqsave(&udc->lock, flags);
1114                }
1115        }
1116        ep->desc = NULL;
1117
1118        spin_unlock_irqrestore(&udc->lock, flags);
1119        return 0;
1120}
1121
1122/**
1123 * bcm63xx_udc_alloc_request - Allocate a new request.
1124 * @ep: Endpoint associated with the request.
1125 * @mem_flags: Flags to pass to kzalloc().
1126 */
1127static struct usb_request *bcm63xx_udc_alloc_request(struct usb_ep *ep,
1128        gfp_t mem_flags)
1129{
1130        struct bcm63xx_req *breq;
1131
1132        breq = kzalloc(sizeof(*breq), mem_flags);
1133        if (!breq)
1134                return NULL;
1135        return &breq->req;
1136}
1137
1138/**
1139 * bcm63xx_udc_free_request - Free a request.
1140 * @ep: Endpoint associated with the request.
1141 * @req: Request to free.
1142 */
1143static void bcm63xx_udc_free_request(struct usb_ep *ep,
1144        struct usb_request *req)
1145{
1146        struct bcm63xx_req *breq = our_req(req);
1147        kfree(breq);
1148}
1149
1150/**
1151 * bcm63xx_udc_queue - Queue up a new request.
1152 * @ep: Endpoint associated with the request.
1153 * @req: Request to add.
1154 * @mem_flags: Unused.
1155 *
1156 * If the queue is empty, start this request immediately.  Otherwise, add
1157 * it to the list.
1158 *
1159 * ep0 replies are sent through this function from the gadget driver, but
1160 * they are treated differently because they need to be handled by the ep0
1161 * state machine.  (Sometimes they are replies to control requests that
1162 * were spoofed by this driver, and so they shouldn't be transmitted at all.)
1163 */
1164static int bcm63xx_udc_queue(struct usb_ep *ep, struct usb_request *req,
1165        gfp_t mem_flags)
1166{
1167        struct bcm63xx_ep *bep = our_ep(ep);
1168        struct bcm63xx_udc *udc = bep->udc;
1169        struct bcm63xx_req *breq = our_req(req);
1170        unsigned long flags;
1171        int rc = 0;
1172
1173        if (unlikely(!req || !req->complete || !req->buf || !ep))
1174                return -EINVAL;
1175
1176        req->actual = 0;
1177        req->status = 0;
1178        breq->offset = 0;
1179
1180        if (bep == &udc->bep[0]) {
1181                /* only one reply per request, please */
1182                if (udc->ep0_reply)
1183                        return -EINVAL;
1184
1185                udc->ep0_reply = req;
1186                schedule_work(&udc->ep0_wq);
1187                return 0;
1188        }
1189
1190        spin_lock_irqsave(&udc->lock, flags);
1191        if (!bep->iudma->enabled) {
1192                rc = -ESHUTDOWN;
1193                goto out;
1194        }
1195
1196        rc = usb_gadget_map_request(&udc->gadget, req, bep->iudma->is_tx);
1197        if (rc == 0) {
1198                list_add_tail(&breq->queue, &bep->queue);
1199                if (list_is_singular(&bep->queue))
1200                        iudma_write(udc, bep->iudma, breq);
1201        }
1202
1203out:
1204        spin_unlock_irqrestore(&udc->lock, flags);
1205        return rc;
1206}
1207
1208/**
1209 * bcm63xx_udc_dequeue - Remove a pending request from the queue.
1210 * @ep: Endpoint associated with the request.
1211 * @req: Request to remove.
1212 *
1213 * If the request is not at the head of the queue, this is easy - just nuke
1214 * it.  If the request is at the head of the queue, we'll need to stop the
1215 * DMA transaction and then queue up the successor.
1216 */
1217static int bcm63xx_udc_dequeue(struct usb_ep *ep, struct usb_request *req)
1218{
1219        struct bcm63xx_ep *bep = our_ep(ep);
1220        struct bcm63xx_udc *udc = bep->udc;
1221        struct bcm63xx_req *breq = our_req(req), *cur;
1222        unsigned long flags;
1223        int rc = 0;
1224
1225        spin_lock_irqsave(&udc->lock, flags);
1226        if (list_empty(&bep->queue)) {
1227                rc = -EINVAL;
1228                goto out;
1229        }
1230
1231        cur = list_first_entry(&bep->queue, struct bcm63xx_req, queue);
1232        usb_gadget_unmap_request(&udc->gadget, &breq->req, bep->iudma->is_tx);
1233
1234        if (breq == cur) {
1235                iudma_reset_channel(udc, bep->iudma);
1236                list_del(&breq->queue);
1237
1238                if (!list_empty(&bep->queue)) {
1239                        struct bcm63xx_req *next;
1240
1241                        next = list_first_entry(&bep->queue,
1242                                struct bcm63xx_req, queue);
1243                        iudma_write(udc, bep->iudma, next);
1244                }
1245        } else {
1246                list_del(&breq->queue);
1247        }
1248
1249out:
1250        spin_unlock_irqrestore(&udc->lock, flags);
1251
1252        req->status = -ESHUTDOWN;
1253        req->complete(ep, req);
1254
1255        return rc;
1256}
1257
1258/**
1259 * bcm63xx_udc_set_halt - Enable/disable STALL flag in the hardware.
1260 * @ep: Endpoint to halt.
1261 * @value: Zero to clear halt; nonzero to set halt.
1262 *
1263 * See comments in bcm63xx_update_wedge().
1264 */
1265static int bcm63xx_udc_set_halt(struct usb_ep *ep, int value)
1266{
1267        struct bcm63xx_ep *bep = our_ep(ep);
1268        struct bcm63xx_udc *udc = bep->udc;
1269        unsigned long flags;
1270
1271        spin_lock_irqsave(&udc->lock, flags);
1272        bcm63xx_set_stall(udc, bep, !!value);
1273        bep->halted = value;
1274        spin_unlock_irqrestore(&udc->lock, flags);
1275
1276        return 0;
1277}
1278
1279/**
1280 * bcm63xx_udc_set_wedge - Stall the endpoint until the next reset.
1281 * @ep: Endpoint to wedge.
1282 *
1283 * See comments in bcm63xx_update_wedge().
1284 */
1285static int bcm63xx_udc_set_wedge(struct usb_ep *ep)
1286{
1287        struct bcm63xx_ep *bep = our_ep(ep);
1288        struct bcm63xx_udc *udc = bep->udc;
1289        unsigned long flags;
1290
1291        spin_lock_irqsave(&udc->lock, flags);
1292        set_bit(bep->ep_num, &udc->wedgemap);
1293        bcm63xx_set_stall(udc, bep, true);
1294        spin_unlock_irqrestore(&udc->lock, flags);
1295
1296        return 0;
1297}
1298
1299static const struct usb_ep_ops bcm63xx_udc_ep_ops = {
1300        .enable         = bcm63xx_ep_enable,
1301        .disable        = bcm63xx_ep_disable,
1302
1303        .alloc_request  = bcm63xx_udc_alloc_request,
1304        .free_request   = bcm63xx_udc_free_request,
1305
1306        .queue          = bcm63xx_udc_queue,
1307        .dequeue        = bcm63xx_udc_dequeue,
1308
1309        .set_halt       = bcm63xx_udc_set_halt,
1310        .set_wedge      = bcm63xx_udc_set_wedge,
1311};
1312
1313/***********************************************************************
1314 * EP0 handling
1315 ***********************************************************************/
1316
1317/**
1318 * bcm63xx_ep0_setup_callback - Drop spinlock to invoke ->setup callback.
1319 * @udc: Reference to the device controller.
1320 * @ctrl: 8-byte SETUP request.
1321 */
1322static int bcm63xx_ep0_setup_callback(struct bcm63xx_udc *udc,
1323        struct usb_ctrlrequest *ctrl)
1324{
1325        int rc;
1326
1327        spin_unlock_irq(&udc->lock);
1328        rc = udc->driver->setup(&udc->gadget, ctrl);
1329        spin_lock_irq(&udc->lock);
1330        return rc;
1331}
1332
1333/**
1334 * bcm63xx_ep0_spoof_set_cfg - Synthesize a SET_CONFIGURATION request.
1335 * @udc: Reference to the device controller.
1336 *
1337 * Many standard requests are handled automatically in the hardware, but
1338 * we still need to pass them to the gadget driver so that it can
1339 * reconfigure the interfaces/endpoints if necessary.
1340 *
1341 * Unfortunately we are not able to send a STALL response if the host
1342 * requests an invalid configuration.  If this happens, we'll have to be
1343 * content with printing a warning.
1344 */
1345static int bcm63xx_ep0_spoof_set_cfg(struct bcm63xx_udc *udc)
1346{
1347        struct usb_ctrlrequest ctrl;
1348        int rc;
1349
1350        ctrl.bRequestType = USB_DIR_OUT | USB_RECIP_DEVICE;
1351        ctrl.bRequest = USB_REQ_SET_CONFIGURATION;
1352        ctrl.wValue = cpu_to_le16(udc->cfg);
1353        ctrl.wIndex = 0;
1354        ctrl.wLength = 0;
1355
1356        rc = bcm63xx_ep0_setup_callback(udc, &ctrl);
1357        if (rc < 0) {
1358                dev_warn_ratelimited(udc->dev,
1359                        "hardware auto-acked bad SET_CONFIGURATION(%d) request\n",
1360                        udc->cfg);
1361        }
1362        return rc;
1363}
1364
1365/**
1366 * bcm63xx_ep0_spoof_set_iface - Synthesize a SET_INTERFACE request.
1367 * @udc: Reference to the device controller.
1368 */
1369static int bcm63xx_ep0_spoof_set_iface(struct bcm63xx_udc *udc)
1370{
1371        struct usb_ctrlrequest ctrl;
1372        int rc;
1373
1374        ctrl.bRequestType = USB_DIR_OUT | USB_RECIP_INTERFACE;
1375        ctrl.bRequest = USB_REQ_SET_INTERFACE;
1376        ctrl.wValue = cpu_to_le16(udc->alt_iface);
1377        ctrl.wIndex = cpu_to_le16(udc->iface);
1378        ctrl.wLength = 0;
1379
1380        rc = bcm63xx_ep0_setup_callback(udc, &ctrl);
1381        if (rc < 0) {
1382                dev_warn_ratelimited(udc->dev,
1383                        "hardware auto-acked bad SET_INTERFACE(%d,%d) request\n",
1384                        udc->iface, udc->alt_iface);
1385        }
1386        return rc;
1387}
1388
1389/**
1390 * bcm63xx_ep0_map_write - dma_map and iudma_write a single request.
1391 * @udc: Reference to the device controller.
1392 * @ch_idx: IUDMA channel number.
1393 * @req: USB gadget layer representation of the request.
1394 */
1395static void bcm63xx_ep0_map_write(struct bcm63xx_udc *udc, int ch_idx,
1396        struct usb_request *req)
1397{
1398        struct bcm63xx_req *breq = our_req(req);
1399        struct iudma_ch *iudma = &udc->iudma[ch_idx];
1400
1401        BUG_ON(udc->ep0_request);
1402        udc->ep0_request = req;
1403
1404        req->actual = 0;
1405        breq->offset = 0;
1406        usb_gadget_map_request(&udc->gadget, req, iudma->is_tx);
1407        iudma_write(udc, iudma, breq);
1408}
1409
1410/**
1411 * bcm63xx_ep0_complete - Set completion status and "stage" the callback.
1412 * @udc: Reference to the device controller.
1413 * @req: USB gadget layer representation of the request.
1414 * @status: Status to return to the gadget driver.
1415 */
1416static void bcm63xx_ep0_complete(struct bcm63xx_udc *udc,
1417        struct usb_request *req, int status)
1418{
1419        req->status = status;
1420        if (status)
1421                req->actual = 0;
1422        if (req->complete) {
1423                spin_unlock_irq(&udc->lock);
1424                req->complete(&udc->bep[0].ep, req);
1425                spin_lock_irq(&udc->lock);
1426        }
1427}
1428
1429/**
1430 * bcm63xx_ep0_nuke_reply - Abort request from the gadget driver due to
1431 *   reset/shutdown.
1432 * @udc: Reference to the device controller.
1433 * @is_tx: Nonzero for TX (IN), zero for RX (OUT).
1434 */
1435static void bcm63xx_ep0_nuke_reply(struct bcm63xx_udc *udc, int is_tx)
1436{
1437        struct usb_request *req = udc->ep0_reply;
1438
1439        udc->ep0_reply = NULL;
1440        usb_gadget_unmap_request(&udc->gadget, req, is_tx);
1441        if (udc->ep0_request == req) {
1442                udc->ep0_req_completed = 0;
1443                udc->ep0_request = NULL;
1444        }
1445        bcm63xx_ep0_complete(udc, req, -ESHUTDOWN);
1446}
1447
1448/**
1449 * bcm63xx_ep0_read_complete - Close out the pending ep0 request; return
1450 *   transfer len.
1451 * @udc: Reference to the device controller.
1452 */
1453static int bcm63xx_ep0_read_complete(struct bcm63xx_udc *udc)
1454{
1455        struct usb_request *req = udc->ep0_request;
1456
1457        udc->ep0_req_completed = 0;
1458        udc->ep0_request = NULL;
1459
1460        return req->actual;
1461}
1462
1463/**
1464 * bcm63xx_ep0_internal_request - Helper function to submit an ep0 request.
1465 * @udc: Reference to the device controller.
1466 * @ch_idx: IUDMA channel number.
1467 * @length: Number of bytes to TX/RX.
1468 *
1469 * Used for simple transfers performed by the ep0 worker.  This will always
1470 * use ep0_ctrl_req / ep0_ctrl_buf.
1471 */
1472static void bcm63xx_ep0_internal_request(struct bcm63xx_udc *udc, int ch_idx,
1473        int length)
1474{
1475        struct usb_request *req = &udc->ep0_ctrl_req.req;
1476
1477        req->buf = udc->ep0_ctrl_buf;
1478        req->length = length;
1479        req->complete = NULL;
1480
1481        bcm63xx_ep0_map_write(udc, ch_idx, req);
1482}
1483
1484/**
1485 * bcm63xx_ep0_do_setup - Parse new SETUP packet and decide how to handle it.
1486 * @udc: Reference to the device controller.
1487 *
1488 * EP0_IDLE probably shouldn't ever happen.  EP0_REQUEUE means we're ready
1489 * for the next packet.  Anything else means the transaction requires multiple
1490 * stages of handling.
1491 */
1492static enum bcm63xx_ep0_state bcm63xx_ep0_do_setup(struct bcm63xx_udc *udc)
1493{
1494        int rc;
1495        struct usb_ctrlrequest *ctrl = (void *)udc->ep0_ctrl_buf;
1496
1497        rc = bcm63xx_ep0_read_complete(udc);
1498
1499        if (rc < 0) {
1500                dev_err(udc->dev, "missing SETUP packet\n");
1501                return EP0_IDLE;
1502        }
1503
1504        /*
1505         * Handle 0-byte IN STATUS acknowledgement.  The hardware doesn't
1506         * ALWAYS deliver these 100% of the time, so if we happen to see one,
1507         * just throw it away.
1508         */
1509        if (rc == 0)
1510                return EP0_REQUEUE;
1511
1512        /* Drop malformed SETUP packets */
1513        if (rc != sizeof(*ctrl)) {
1514                dev_warn_ratelimited(udc->dev,
1515                        "malformed SETUP packet (%d bytes)\n", rc);
1516                return EP0_REQUEUE;
1517        }
1518
1519        /* Process new SETUP packet arriving on ep0 */
1520        rc = bcm63xx_ep0_setup_callback(udc, ctrl);
1521        if (rc < 0) {
1522                bcm63xx_set_stall(udc, &udc->bep[0], true);
1523                return EP0_REQUEUE;
1524        }
1525
1526        if (!ctrl->wLength)
1527                return EP0_REQUEUE;
1528        else if (ctrl->bRequestType & USB_DIR_IN)
1529                return EP0_IN_DATA_PHASE_SETUP;
1530        else
1531                return EP0_OUT_DATA_PHASE_SETUP;
1532}
1533
1534/**
1535 * bcm63xx_ep0_do_idle - Check for outstanding requests if ep0 is idle.
1536 * @udc: Reference to the device controller.
1537 *
1538 * In state EP0_IDLE, the RX descriptor is either pending, or has been
1539 * filled with a SETUP packet from the host.  This function handles new
1540 * SETUP packets, control IRQ events (which can generate fake SETUP packets),
1541 * and reset/shutdown events.
1542 *
1543 * Returns 0 if work was done; -EAGAIN if nothing to do.
1544 */
1545static int bcm63xx_ep0_do_idle(struct bcm63xx_udc *udc)
1546{
1547        if (udc->ep0_req_reset) {
1548                udc->ep0_req_reset = 0;
1549        } else if (udc->ep0_req_set_cfg) {
1550                udc->ep0_req_set_cfg = 0;
1551                if (bcm63xx_ep0_spoof_set_cfg(udc) >= 0)
1552                        udc->ep0state = EP0_IN_FAKE_STATUS_PHASE;
1553        } else if (udc->ep0_req_set_iface) {
1554                udc->ep0_req_set_iface = 0;
1555                if (bcm63xx_ep0_spoof_set_iface(udc) >= 0)
1556                        udc->ep0state = EP0_IN_FAKE_STATUS_PHASE;
1557        } else if (udc->ep0_req_completed) {
1558                udc->ep0state = bcm63xx_ep0_do_setup(udc);
1559                return udc->ep0state == EP0_IDLE ? -EAGAIN : 0;
1560        } else if (udc->ep0_req_shutdown) {
1561                udc->ep0_req_shutdown = 0;
1562                udc->ep0_req_completed = 0;
1563                udc->ep0_request = NULL;
1564                iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]);
1565                usb_gadget_unmap_request(&udc->gadget,
1566                        &udc->ep0_ctrl_req.req, 0);
1567
1568                /* bcm63xx_udc_pullup() is waiting for this */
1569                mb();
1570                udc->ep0state = EP0_SHUTDOWN;
1571        } else if (udc->ep0_reply) {
1572                /*
1573                 * This could happen if a USB RESET shows up during an ep0
1574                 * transaction (especially if a laggy driver like gadgetfs
1575                 * is in use).
1576                 */
1577                dev_warn(udc->dev, "nuking unexpected reply\n");
1578                bcm63xx_ep0_nuke_reply(udc, 0);
1579        } else {
1580                return -EAGAIN;
1581        }
1582
1583        return 0;
1584}
1585
1586/**
1587 * bcm63xx_ep0_one_round - Handle the current ep0 state.
1588 * @udc: Reference to the device controller.
1589 *
1590 * Returns 0 if work was done; -EAGAIN if nothing to do.
1591 */
1592static int bcm63xx_ep0_one_round(struct bcm63xx_udc *udc)
1593{
1594        enum bcm63xx_ep0_state ep0state = udc->ep0state;
1595        bool shutdown = udc->ep0_req_reset || udc->ep0_req_shutdown;
1596
1597        switch (udc->ep0state) {
1598        case EP0_REQUEUE:
1599                /* set up descriptor to receive SETUP packet */
1600                bcm63xx_ep0_internal_request(udc, IUDMA_EP0_RXCHAN,
1601                                             BCM63XX_MAX_CTRL_PKT);
1602                ep0state = EP0_IDLE;
1603                break;
1604        case EP0_IDLE:
1605                return bcm63xx_ep0_do_idle(udc);
1606        case EP0_IN_DATA_PHASE_SETUP:
1607                /*
1608                 * Normal case: TX request is in ep0_reply (queued by the
1609                 * callback), or will be queued shortly.  When it's here,
1610                 * send it to the HW and go to EP0_IN_DATA_PHASE_COMPLETE.
1611                 *
1612                 * Shutdown case: Stop waiting for the reply.  Just
1613                 * REQUEUE->IDLE.  The gadget driver is NOT expected to
1614                 * queue anything else now.
1615                 */
1616                if (udc->ep0_reply) {
1617                        bcm63xx_ep0_map_write(udc, IUDMA_EP0_TXCHAN,
1618                                              udc->ep0_reply);
1619                        ep0state = EP0_IN_DATA_PHASE_COMPLETE;
1620                } else if (shutdown) {
1621                        ep0state = EP0_REQUEUE;
1622                }
1623                break;
1624        case EP0_IN_DATA_PHASE_COMPLETE: {
1625                /*
1626                 * Normal case: TX packet (ep0_reply) is in flight; wait for
1627                 * it to finish, then go back to REQUEUE->IDLE.
1628                 *
1629                 * Shutdown case: Reset the TX channel, send -ESHUTDOWN
1630                 * completion to the gadget driver, then REQUEUE->IDLE.
1631                 */
1632                if (udc->ep0_req_completed) {
1633                        udc->ep0_reply = NULL;
1634                        bcm63xx_ep0_read_complete(udc);
1635                        /*
1636                         * the "ack" sometimes gets eaten (see
1637                         * bcm63xx_ep0_do_idle)
1638                         */
1639                        ep0state = EP0_REQUEUE;
1640                } else if (shutdown) {
1641                        iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]);
1642                        bcm63xx_ep0_nuke_reply(udc, 1);
1643                        ep0state = EP0_REQUEUE;
1644                }
1645                break;
1646        }
1647        case EP0_OUT_DATA_PHASE_SETUP:
1648                /* Similar behavior to EP0_IN_DATA_PHASE_SETUP */
1649                if (udc->ep0_reply) {
1650                        bcm63xx_ep0_map_write(udc, IUDMA_EP0_RXCHAN,
1651                                              udc->ep0_reply);
1652                        ep0state = EP0_OUT_DATA_PHASE_COMPLETE;
1653                } else if (shutdown) {
1654                        ep0state = EP0_REQUEUE;
1655                }
1656                break;
1657        case EP0_OUT_DATA_PHASE_COMPLETE: {
1658                /* Similar behavior to EP0_IN_DATA_PHASE_COMPLETE */
1659                if (udc->ep0_req_completed) {
1660                        udc->ep0_reply = NULL;
1661                        bcm63xx_ep0_read_complete(udc);
1662
1663                        /* send 0-byte ack to host */
1664                        bcm63xx_ep0_internal_request(udc, IUDMA_EP0_TXCHAN, 0);
1665                        ep0state = EP0_OUT_STATUS_PHASE;
1666                } else if (shutdown) {
1667                        iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]);
1668                        bcm63xx_ep0_nuke_reply(udc, 0);
1669                        ep0state = EP0_REQUEUE;
1670                }
1671                break;
1672        }
1673        case EP0_OUT_STATUS_PHASE:
1674                /*
1675                 * Normal case: 0-byte OUT ack packet is in flight; wait
1676                 * for it to finish, then go back to REQUEUE->IDLE.
1677                 *
1678                 * Shutdown case: just cancel the transmission.  Don't bother
1679                 * calling the completion, because it originated from this
1680                 * function anyway.  Then go back to REQUEUE->IDLE.
1681                 */
1682                if (udc->ep0_req_completed) {
1683                        bcm63xx_ep0_read_complete(udc);
1684                        ep0state = EP0_REQUEUE;
1685                } else if (shutdown) {
1686                        iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]);
1687                        udc->ep0_request = NULL;
1688                        ep0state = EP0_REQUEUE;
1689                }
1690                break;
1691        case EP0_IN_FAKE_STATUS_PHASE: {
1692                /*
1693                 * Normal case: we spoofed a SETUP packet and are now
1694                 * waiting for the gadget driver to send a 0-byte reply.
1695                 * This doesn't actually get sent to the HW because the
1696                 * HW has already sent its own reply.  Once we get the
1697                 * response, return to IDLE.
1698                 *
1699                 * Shutdown case: return to IDLE immediately.
1700                 *
1701                 * Note that the ep0 RX descriptor has remained queued
1702                 * (and possibly unfilled) during this entire transaction.
1703                 * The HW datapath (IUDMA) never even sees SET_CONFIGURATION
1704                 * or SET_INTERFACE transactions.
1705                 */
1706                struct usb_request *r = udc->ep0_reply;
1707
1708                if (!r) {
1709                        if (shutdown)
1710                                ep0state = EP0_IDLE;
1711                        break;
1712                }
1713
1714                bcm63xx_ep0_complete(udc, r, 0);
1715                udc->ep0_reply = NULL;
1716                ep0state = EP0_IDLE;
1717                break;
1718        }
1719        case EP0_SHUTDOWN:
1720                break;
1721        }
1722
1723        if (udc->ep0state == ep0state)
1724                return -EAGAIN;
1725
1726        udc->ep0state = ep0state;
1727        return 0;
1728}
1729
1730/**
1731 * bcm63xx_ep0_process - ep0 worker thread / state machine.
1732 * @w: Workqueue struct.
1733 *
1734 * bcm63xx_ep0_process is triggered any time an event occurs on ep0.  It
1735 * is used to synchronize ep0 events and ensure that both HW and SW events
1736 * occur in a well-defined order.  When the ep0 IUDMA queues are idle, it may
1737 * synthesize SET_CONFIGURATION / SET_INTERFACE requests that were consumed
1738 * by the USBD hardware.
1739 *
1740 * The worker function will continue iterating around the state machine
1741 * until there is nothing left to do.  Usually "nothing left to do" means
1742 * that we're waiting for a new event from the hardware.
1743 */
1744static void bcm63xx_ep0_process(struct work_struct *w)
1745{
1746        struct bcm63xx_udc *udc = container_of(w, struct bcm63xx_udc, ep0_wq);
1747        spin_lock_irq(&udc->lock);
1748        while (bcm63xx_ep0_one_round(udc) == 0)
1749                ;
1750        spin_unlock_irq(&udc->lock);
1751}
1752
1753/***********************************************************************
1754 * Standard UDC gadget operations
1755 ***********************************************************************/
1756
1757/**
1758 * bcm63xx_udc_get_frame - Read current SOF frame number from the HW.
1759 * @gadget: USB slave device.
1760 */
1761static int bcm63xx_udc_get_frame(struct usb_gadget *gadget)
1762{
1763        struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1764
1765        return (usbd_readl(udc, USBD_STATUS_REG) &
1766                USBD_STATUS_SOF_MASK) >> USBD_STATUS_SOF_SHIFT;
1767}
1768
1769/**
1770 * bcm63xx_udc_pullup - Enable/disable pullup on D+ line.
1771 * @gadget: USB slave device.
1772 * @is_on: 0 to disable pullup, 1 to enable.
1773 *
1774 * See notes in bcm63xx_select_pullup().
1775 */
1776static int bcm63xx_udc_pullup(struct usb_gadget *gadget, int is_on)
1777{
1778        struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1779        unsigned long flags;
1780        int i, rc = -EINVAL;
1781
1782        spin_lock_irqsave(&udc->lock, flags);
1783        if (is_on && udc->ep0state == EP0_SHUTDOWN) {
1784                udc->gadget.speed = USB_SPEED_UNKNOWN;
1785                udc->ep0state = EP0_REQUEUE;
1786                bcm63xx_fifo_setup(udc);
1787                bcm63xx_fifo_reset(udc);
1788                bcm63xx_ep_setup(udc);
1789
1790                bitmap_zero(&udc->wedgemap, BCM63XX_NUM_EP);
1791                for (i = 0; i < BCM63XX_NUM_EP; i++)
1792                        bcm63xx_set_stall(udc, &udc->bep[i], false);
1793
1794                bcm63xx_set_ctrl_irqs(udc, true);
1795                bcm63xx_select_pullup(gadget_to_udc(gadget), true);
1796                rc = 0;
1797        } else if (!is_on && udc->ep0state != EP0_SHUTDOWN) {
1798                bcm63xx_select_pullup(gadget_to_udc(gadget), false);
1799
1800                udc->ep0_req_shutdown = 1;
1801                spin_unlock_irqrestore(&udc->lock, flags);
1802
1803                while (1) {
1804                        schedule_work(&udc->ep0_wq);
1805                        if (udc->ep0state == EP0_SHUTDOWN)
1806                                break;
1807                        msleep(50);
1808                }
1809                bcm63xx_set_ctrl_irqs(udc, false);
1810                cancel_work_sync(&udc->ep0_wq);
1811                return 0;
1812        }
1813
1814        spin_unlock_irqrestore(&udc->lock, flags);
1815        return rc;
1816}
1817
1818/**
1819 * bcm63xx_udc_start - Start the controller.
1820 * @gadget: USB slave device.
1821 * @driver: Driver for USB slave devices.
1822 */
1823static int bcm63xx_udc_start(struct usb_gadget *gadget,
1824                struct usb_gadget_driver *driver)
1825{
1826        struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1827        unsigned long flags;
1828
1829        if (!driver || driver->max_speed < USB_SPEED_HIGH ||
1830            !driver->setup)
1831                return -EINVAL;
1832        if (!udc)
1833                return -ENODEV;
1834        if (udc->driver)
1835                return -EBUSY;
1836
1837        spin_lock_irqsave(&udc->lock, flags);
1838
1839        set_clocks(udc, true);
1840        bcm63xx_fifo_setup(udc);
1841        bcm63xx_ep_init(udc);
1842        bcm63xx_ep_setup(udc);
1843        bcm63xx_fifo_reset(udc);
1844        bcm63xx_select_phy_mode(udc, true);
1845
1846        udc->driver = driver;
1847        driver->driver.bus = NULL;
1848        udc->gadget.dev.of_node = udc->dev->of_node;
1849
1850        spin_unlock_irqrestore(&udc->lock, flags);
1851
1852        return 0;
1853}
1854
1855/**
1856 * bcm63xx_udc_stop - Shut down the controller.
1857 * @gadget: USB slave device.
1858 * @driver: Driver for USB slave devices.
1859 */
1860static int bcm63xx_udc_stop(struct usb_gadget *gadget)
1861{
1862        struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1863        unsigned long flags;
1864
1865        spin_lock_irqsave(&udc->lock, flags);
1866
1867        udc->driver = NULL;
1868
1869        /*
1870         * If we switch the PHY too abruptly after dropping D+, the host
1871         * will often complain:
1872         *
1873         *     hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
1874         */
1875        msleep(100);
1876
1877        bcm63xx_select_phy_mode(udc, false);
1878        set_clocks(udc, false);
1879
1880        spin_unlock_irqrestore(&udc->lock, flags);
1881
1882        return 0;
1883}
1884
1885static const struct usb_gadget_ops bcm63xx_udc_ops = {
1886        .get_frame      = bcm63xx_udc_get_frame,
1887        .pullup         = bcm63xx_udc_pullup,
1888        .udc_start      = bcm63xx_udc_start,
1889        .udc_stop       = bcm63xx_udc_stop,
1890};
1891
1892/***********************************************************************
1893 * IRQ handling
1894 ***********************************************************************/
1895
1896/**
1897 * bcm63xx_update_cfg_iface - Read current configuration/interface settings.
1898 * @udc: Reference to the device controller.
1899 *
1900 * This controller intercepts SET_CONFIGURATION and SET_INTERFACE messages.
1901 * The driver never sees the raw control packets coming in on the ep0
1902 * IUDMA channel, but at least we get an interrupt event to tell us that
1903 * new values are waiting in the USBD_STATUS register.
1904 */
1905static void bcm63xx_update_cfg_iface(struct bcm63xx_udc *udc)
1906{
1907        u32 reg = usbd_readl(udc, USBD_STATUS_REG);
1908
1909        udc->cfg = (reg & USBD_STATUS_CFG_MASK) >> USBD_STATUS_CFG_SHIFT;
1910        udc->iface = (reg & USBD_STATUS_INTF_MASK) >> USBD_STATUS_INTF_SHIFT;
1911        udc->alt_iface = (reg & USBD_STATUS_ALTINTF_MASK) >>
1912                         USBD_STATUS_ALTINTF_SHIFT;
1913        bcm63xx_ep_setup(udc);
1914}
1915
1916/**
1917 * bcm63xx_update_link_speed - Check to see if the link speed has changed.
1918 * @udc: Reference to the device controller.
1919 *
1920 * The link speed update coincides with a SETUP IRQ.  Returns 1 if the
1921 * speed has changed, so that the caller can update the endpoint settings.
1922 */
1923static int bcm63xx_update_link_speed(struct bcm63xx_udc *udc)
1924{
1925        u32 reg = usbd_readl(udc, USBD_STATUS_REG);
1926        enum usb_device_speed oldspeed = udc->gadget.speed;
1927
1928        switch ((reg & USBD_STATUS_SPD_MASK) >> USBD_STATUS_SPD_SHIFT) {
1929        case BCM63XX_SPD_HIGH:
1930                udc->gadget.speed = USB_SPEED_HIGH;
1931                break;
1932        case BCM63XX_SPD_FULL:
1933                udc->gadget.speed = USB_SPEED_FULL;
1934                break;
1935        default:
1936                /* this should never happen */
1937                udc->gadget.speed = USB_SPEED_UNKNOWN;
1938                dev_err(udc->dev,
1939                        "received SETUP packet with invalid link speed\n");
1940                return 0;
1941        }
1942
1943        if (udc->gadget.speed != oldspeed) {
1944                dev_info(udc->dev, "link up, %s-speed mode\n",
1945                         udc->gadget.speed == USB_SPEED_HIGH ? "high" : "full");
1946                return 1;
1947        } else {
1948                return 0;
1949        }
1950}
1951
1952/**
1953 * bcm63xx_update_wedge - Iterate through wedged endpoints.
1954 * @udc: Reference to the device controller.
1955 * @new_status: true to "refresh" wedge status; false to clear it.
1956 *
1957 * On a SETUP interrupt, we need to manually "refresh" the wedge status
1958 * because the controller hardware is designed to automatically clear
1959 * stalls in response to a CLEAR_FEATURE request from the host.
1960 *
1961 * On a RESET interrupt, we do want to restore all wedged endpoints.
1962 */
1963static void bcm63xx_update_wedge(struct bcm63xx_udc *udc, bool new_status)
1964{
1965        int i;
1966
1967        for_each_set_bit(i, &udc->wedgemap, BCM63XX_NUM_EP) {
1968                bcm63xx_set_stall(udc, &udc->bep[i], new_status);
1969                if (!new_status)
1970                        clear_bit(i, &udc->wedgemap);
1971        }
1972}
1973
1974/**
1975 * bcm63xx_udc_ctrl_isr - ISR for control path events (USBD).
1976 * @irq: IRQ number (unused).
1977 * @dev_id: Reference to the device controller.
1978 *
1979 * This is where we handle link (VBUS) down, USB reset, speed changes,
1980 * SET_CONFIGURATION, and SET_INTERFACE events.
1981 */
1982static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
1983{
1984        struct bcm63xx_udc *udc = dev_id;
1985        u32 stat;
1986        bool disconnected = false, bus_reset = false;
1987
1988        stat = usbd_readl(udc, USBD_EVENT_IRQ_STATUS_REG) &
1989               usbd_readl(udc, USBD_EVENT_IRQ_MASK_REG);
1990
1991        usbd_writel(udc, stat, USBD_EVENT_IRQ_STATUS_REG);
1992
1993        spin_lock(&udc->lock);
1994        if (stat & BIT(USBD_EVENT_IRQ_USB_LINK)) {
1995                /* VBUS toggled */
1996
1997                if (!(usbd_readl(udc, USBD_EVENTS_REG) &
1998                      USBD_EVENTS_USB_LINK_MASK) &&
1999                      udc->gadget.speed != USB_SPEED_UNKNOWN)
2000                        dev_info(udc->dev, "link down\n");
2001
2002                udc->gadget.speed = USB_SPEED_UNKNOWN;
2003                disconnected = true;
2004        }
2005        if (stat & BIT(USBD_EVENT_IRQ_USB_RESET)) {
2006                bcm63xx_fifo_setup(udc);
2007                bcm63xx_fifo_reset(udc);
2008                bcm63xx_ep_setup(udc);
2009
2010                bcm63xx_update_wedge(udc, false);
2011
2012                udc->ep0_req_reset = 1;
2013                schedule_work(&udc->ep0_wq);
2014                bus_reset = true;
2015        }
2016        if (stat & BIT(USBD_EVENT_IRQ_SETUP)) {
2017                if (bcm63xx_update_link_speed(udc)) {
2018                        bcm63xx_fifo_setup(udc);
2019                        bcm63xx_ep_setup(udc);
2020                }
2021                bcm63xx_update_wedge(udc, true);
2022        }
2023        if (stat & BIT(USBD_EVENT_IRQ_SETCFG)) {
2024                bcm63xx_update_cfg_iface(udc);
2025                udc->ep0_req_set_cfg = 1;
2026                schedule_work(&udc->ep0_wq);
2027        }
2028        if (stat & BIT(USBD_EVENT_IRQ_SETINTF)) {
2029                bcm63xx_update_cfg_iface(udc);
2030                udc->ep0_req_set_iface = 1;
2031                schedule_work(&udc->ep0_wq);
2032        }
2033        spin_unlock(&udc->lock);
2034
2035        if (disconnected && udc->driver)
2036                udc->driver->disconnect(&udc->gadget);
2037        else if (bus_reset && udc->driver)
2038                usb_gadget_udc_reset(&udc->gadget, udc->driver);
2039
2040        return IRQ_HANDLED;
2041}
2042
2043/**
2044 * bcm63xx_udc_data_isr - ISR for data path events (IUDMA).
2045 * @irq: IRQ number (unused).
2046 * @dev_id: Reference to the IUDMA channel that generated the interrupt.
2047 *
2048 * For the two ep0 channels, we have special handling that triggers the
2049 * ep0 worker thread.  For normal bulk/intr channels, either queue up
2050 * the next buffer descriptor for the transaction (incomplete transaction),
2051 * or invoke the completion callback (complete transactions).
2052 */
2053static irqreturn_t bcm63xx_udc_data_isr(int irq, void *dev_id)
2054{
2055        struct iudma_ch *iudma = dev_id;
2056        struct bcm63xx_udc *udc = iudma->udc;
2057        struct bcm63xx_ep *bep;
2058        struct usb_request *req = NULL;
2059        struct bcm63xx_req *breq = NULL;
2060        int rc;
2061        bool is_done = false;
2062
2063        spin_lock(&udc->lock);
2064
2065        usb_dmac_writel(udc, ENETDMAC_IR_BUFDONE_MASK,
2066                        ENETDMAC_IR_REG, iudma->ch_idx);
2067        bep = iudma->bep;
2068        rc = iudma_read(udc, iudma);
2069
2070        /* special handling for EP0 RX (0) and TX (1) */
2071        if (iudma->ch_idx == IUDMA_EP0_RXCHAN ||
2072            iudma->ch_idx == IUDMA_EP0_TXCHAN) {
2073                req = udc->ep0_request;
2074                breq = our_req(req);
2075
2076                /* a single request could require multiple submissions */
2077                if (rc >= 0) {
2078                        req->actual += rc;
2079
2080                        if (req->actual >= req->length || breq->bd_bytes > rc) {
2081                                udc->ep0_req_completed = 1;
2082                                is_done = true;
2083                                schedule_work(&udc->ep0_wq);
2084
2085                                /* "actual" on a ZLP is 1 byte */
2086                                req->actual = min(req->actual, req->length);
2087                        } else {
2088                                /* queue up the next BD (same request) */
2089                                iudma_write(udc, iudma, breq);
2090                        }
2091                }
2092        } else if (!list_empty(&bep->queue)) {
2093                breq = list_first_entry(&bep->queue, struct bcm63xx_req, queue);
2094                req = &breq->req;
2095
2096                if (rc >= 0) {
2097                        req->actual += rc;
2098
2099                        if (req->actual >= req->length || breq->bd_bytes > rc) {
2100                                is_done = true;
2101                                list_del(&breq->queue);
2102
2103                                req->actual = min(req->actual, req->length);
2104
2105                                if (!list_empty(&bep->queue)) {
2106                                        struct bcm63xx_req *next;
2107
2108                                        next = list_first_entry(&bep->queue,
2109                                                struct bcm63xx_req, queue);
2110                                        iudma_write(udc, iudma, next);
2111                                }
2112                        } else {
2113                                iudma_write(udc, iudma, breq);
2114                        }
2115                }
2116        }
2117        spin_unlock(&udc->lock);
2118
2119        if (is_done) {
2120                usb_gadget_unmap_request(&udc->gadget, req, iudma->is_tx);
2121                if (req->complete)
2122                        req->complete(&bep->ep, req);
2123        }
2124
2125        return IRQ_HANDLED;
2126}
2127
2128/***********************************************************************
2129 * Debug filesystem
2130 ***********************************************************************/
2131
2132/*
2133 * bcm63xx_usbd_dbg_show - Show USBD controller state.
2134 * @s: seq_file to which the information will be written.
2135 * @p: Unused.
2136 *
2137 * This file nominally shows up as /sys/kernel/debug/bcm63xx_udc/usbd
2138 */
2139static int bcm63xx_usbd_dbg_show(struct seq_file *s, void *p)
2140{
2141        struct bcm63xx_udc *udc = s->private;
2142
2143        if (!udc->driver)
2144                return -ENODEV;
2145
2146        seq_printf(s, "ep0 state: %s\n",
2147                   bcm63xx_ep0_state_names[udc->ep0state]);
2148        seq_printf(s, "  pending requests: %s%s%s%s%s%s%s\n",
2149                   udc->ep0_req_reset ? "reset " : "",
2150                   udc->ep0_req_set_cfg ? "set_cfg " : "",
2151                   udc->ep0_req_set_iface ? "set_iface " : "",
2152                   udc->ep0_req_shutdown ? "shutdown " : "",
2153                   udc->ep0_request ? "pending " : "",
2154                   udc->ep0_req_completed ? "completed " : "",
2155                   udc->ep0_reply ? "reply " : "");
2156        seq_printf(s, "cfg: %d; iface: %d; alt_iface: %d\n",
2157                   udc->cfg, udc->iface, udc->alt_iface);
2158        seq_printf(s, "regs:\n");
2159        seq_printf(s, "  control: %08x; straps: %08x; status: %08x\n",
2160                   usbd_readl(udc, USBD_CONTROL_REG),
2161                   usbd_readl(udc, USBD_STRAPS_REG),
2162                   usbd_readl(udc, USBD_STATUS_REG));
2163        seq_printf(s, "  events:  %08x; stall:  %08x\n",
2164                   usbd_readl(udc, USBD_EVENTS_REG),
2165                   usbd_readl(udc, USBD_STALL_REG));
2166
2167        return 0;
2168}
2169
2170/*
2171 * bcm63xx_iudma_dbg_show - Show IUDMA status and descriptors.
2172 * @s: seq_file to which the information will be written.
2173 * @p: Unused.
2174 *
2175 * This file nominally shows up as /sys/kernel/debug/bcm63xx_udc/iudma
2176 */
2177static int bcm63xx_iudma_dbg_show(struct seq_file *s, void *p)
2178{
2179        struct bcm63xx_udc *udc = s->private;
2180        int ch_idx, i;
2181        u32 sram2, sram3;
2182
2183        if (!udc->driver)
2184                return -ENODEV;
2185
2186        for (ch_idx = 0; ch_idx < BCM63XX_NUM_IUDMA; ch_idx++) {
2187                struct iudma_ch *iudma = &udc->iudma[ch_idx];
2188                struct list_head *pos;
2189
2190                seq_printf(s, "IUDMA channel %d -- ", ch_idx);
2191                switch (iudma_defaults[ch_idx].ep_type) {
2192                case BCMEP_CTRL:
2193                        seq_printf(s, "control");
2194                        break;
2195                case BCMEP_BULK:
2196                        seq_printf(s, "bulk");
2197                        break;
2198                case BCMEP_INTR:
2199                        seq_printf(s, "interrupt");
2200                        break;
2201                }
2202                seq_printf(s, ch_idx & 0x01 ? " tx" : " rx");
2203                seq_printf(s, " [ep%d]:\n",
2204                           max_t(int, iudma_defaults[ch_idx].ep_num, 0));
2205                seq_printf(s, "  cfg: %08x; irqstat: %08x; irqmask: %08x; maxburst: %08x\n",
2206                           usb_dmac_readl(udc, ENETDMAC_CHANCFG_REG, ch_idx),
2207                           usb_dmac_readl(udc, ENETDMAC_IR_REG, ch_idx),
2208                           usb_dmac_readl(udc, ENETDMAC_IRMASK_REG, ch_idx),
2209                           usb_dmac_readl(udc, ENETDMAC_MAXBURST_REG, ch_idx));
2210
2211                sram2 = usb_dmas_readl(udc, ENETDMAS_SRAM2_REG, ch_idx);
2212                sram3 = usb_dmas_readl(udc, ENETDMAS_SRAM3_REG, ch_idx);
2213                seq_printf(s, "  base: %08x; index: %04x_%04x; desc: %04x_%04x %08x\n",
2214                           usb_dmas_readl(udc, ENETDMAS_RSTART_REG, ch_idx),
2215                           sram2 >> 16, sram2 & 0xffff,
2216                           sram3 >> 16, sram3 & 0xffff,
2217                           usb_dmas_readl(udc, ENETDMAS_SRAM4_REG, ch_idx));
2218                seq_printf(s, "  desc: %d/%d used", iudma->n_bds_used,
2219                           iudma->n_bds);
2220
2221                if (iudma->bep) {
2222                        i = 0;
2223                        list_for_each(pos, &iudma->bep->queue)
2224                                i++;
2225                        seq_printf(s, "; %d queued\n", i);
2226                } else {
2227                        seq_printf(s, "\n");
2228                }
2229
2230                for (i = 0; i < iudma->n_bds; i++) {
2231                        struct bcm_enet_desc *d = &iudma->bd_ring[i];
2232
2233                        seq_printf(s, "  %03x (%02x): len_stat: %04x_%04x; pa %08x",
2234                                   i * sizeof(*d), i,
2235                                   d->len_stat >> 16, d->len_stat & 0xffff,
2236                                   d->address);
2237                        if (d == iudma->read_bd)
2238                                seq_printf(s, "   <<RD");
2239                        if (d == iudma->write_bd)
2240                                seq_printf(s, "   <<WR");
2241                        seq_printf(s, "\n");
2242                }
2243
2244                seq_printf(s, "\n");
2245        }
2246
2247        return 0;
2248}
2249
2250static int bcm63xx_usbd_dbg_open(struct inode *inode, struct file *file)
2251{
2252        return single_open(file, bcm63xx_usbd_dbg_show, inode->i_private);
2253}
2254
2255static int bcm63xx_iudma_dbg_open(struct inode *inode, struct file *file)
2256{
2257        return single_open(file, bcm63xx_iudma_dbg_show, inode->i_private);
2258}
2259
2260static const struct file_operations usbd_dbg_fops = {
2261        .owner          = THIS_MODULE,
2262        .open           = bcm63xx_usbd_dbg_open,
2263        .llseek         = seq_lseek,
2264        .read           = seq_read,
2265        .release        = single_release,
2266};
2267
2268static const struct file_operations iudma_dbg_fops = {
2269        .owner          = THIS_MODULE,
2270        .open           = bcm63xx_iudma_dbg_open,
2271        .llseek         = seq_lseek,
2272        .read           = seq_read,
2273        .release        = single_release,
2274};
2275
2276
2277/**
2278 * bcm63xx_udc_init_debugfs - Create debugfs entries.
2279 * @udc: Reference to the device controller.
2280 */
2281static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc)
2282{
2283        struct dentry *root, *usbd, *iudma;
2284
2285        if (!IS_ENABLED(CONFIG_USB_GADGET_DEBUG_FS))
2286                return;
2287
2288        root = debugfs_create_dir(udc->gadget.name, NULL);
2289        if (IS_ERR(root) || !root)
2290                goto err_root;
2291
2292        usbd = debugfs_create_file("usbd", 0400, root, udc,
2293                        &usbd_dbg_fops);
2294        if (!usbd)
2295                goto err_usbd;
2296        iudma = debugfs_create_file("iudma", 0400, root, udc,
2297                        &iudma_dbg_fops);
2298        if (!iudma)
2299                goto err_iudma;
2300
2301        udc->debugfs_root = root;
2302        udc->debugfs_usbd = usbd;
2303        udc->debugfs_iudma = iudma;
2304        return;
2305err_iudma:
2306        debugfs_remove(usbd);
2307err_usbd:
2308        debugfs_remove(root);
2309err_root:
2310        dev_err(udc->dev, "debugfs is not available\n");
2311}
2312
2313/**
2314 * bcm63xx_udc_cleanup_debugfs - Remove debugfs entries.
2315 * @udc: Reference to the device controller.
2316 *
2317 * debugfs_remove() is safe to call with a NULL argument.
2318 */
2319static void bcm63xx_udc_cleanup_debugfs(struct bcm63xx_udc *udc)
2320{
2321        debugfs_remove(udc->debugfs_iudma);
2322        debugfs_remove(udc->debugfs_usbd);
2323        debugfs_remove(udc->debugfs_root);
2324        udc->debugfs_iudma = NULL;
2325        udc->debugfs_usbd = NULL;
2326        udc->debugfs_root = NULL;
2327}
2328
2329/***********************************************************************
2330 * Driver init/exit
2331 ***********************************************************************/
2332
2333/**
2334 * bcm63xx_udc_probe - Initialize a new instance of the UDC.
2335 * @pdev: Platform device struct from the bcm63xx BSP code.
2336 *
2337 * Note that platform data is required, because pd.port_no varies from chip
2338 * to chip and is used to switch the correct USB port to device mode.
2339 */
2340static int bcm63xx_udc_probe(struct platform_device *pdev)
2341{
2342        struct device *dev = &pdev->dev;
2343        struct bcm63xx_usbd_platform_data *pd = dev_get_platdata(dev);
2344        struct bcm63xx_udc *udc;
2345        struct resource *res;
2346        int rc = -ENOMEM, i, irq;
2347
2348        udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL);
2349        if (!udc)
2350                return -ENOMEM;
2351
2352        platform_set_drvdata(pdev, udc);
2353        udc->dev = dev;
2354        udc->pd = pd;
2355
2356        if (!pd) {
2357                dev_err(dev, "missing platform data\n");
2358                return -EINVAL;
2359        }
2360
2361        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2362        udc->usbd_regs = devm_ioremap_resource(dev, res);
2363        if (IS_ERR(udc->usbd_regs))
2364                return PTR_ERR(udc->usbd_regs);
2365
2366        res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
2367        udc->iudma_regs = devm_ioremap_resource(dev, res);
2368        if (IS_ERR(udc->iudma_regs))
2369                return PTR_ERR(udc->iudma_regs);
2370
2371        spin_lock_init(&udc->lock);
2372        INIT_WORK(&udc->ep0_wq, bcm63xx_ep0_process);
2373
2374        udc->gadget.ops = &bcm63xx_udc_ops;
2375        udc->gadget.name = dev_name(dev);
2376
2377        if (!pd->use_fullspeed && !use_fullspeed)
2378                udc->gadget.max_speed = USB_SPEED_HIGH;
2379        else
2380                udc->gadget.max_speed = USB_SPEED_FULL;
2381
2382        /* request clocks, allocate buffers, and clear any pending IRQs */
2383        rc = bcm63xx_init_udc_hw(udc);
2384        if (rc)
2385                return rc;
2386
2387        rc = -ENXIO;
2388
2389        /* IRQ resource #0: control interrupt (VBUS, speed, etc.) */
2390        irq = platform_get_irq(pdev, 0);
2391        if (irq < 0) {
2392                dev_err(dev, "missing IRQ resource #0\n");
2393                goto out_uninit;
2394        }
2395        if (devm_request_irq(dev, irq, &bcm63xx_udc_ctrl_isr, 0,
2396                             dev_name(dev), udc) < 0) {
2397                dev_err(dev, "error requesting IRQ #%d\n", irq);
2398                goto out_uninit;
2399        }
2400
2401        /* IRQ resources #1-6: data interrupts for IUDMA channels 0-5 */
2402        for (i = 0; i < BCM63XX_NUM_IUDMA; i++) {
2403                irq = platform_get_irq(pdev, i + 1);
2404                if (irq < 0) {
2405                        dev_err(dev, "missing IRQ resource #%d\n", i + 1);
2406                        goto out_uninit;
2407                }
2408                if (devm_request_irq(dev, irq, &bcm63xx_udc_data_isr, 0,
2409                                     dev_name(dev), &udc->iudma[i]) < 0) {
2410                        dev_err(dev, "error requesting IRQ #%d\n", irq);
2411                        goto out_uninit;
2412                }
2413        }
2414
2415        bcm63xx_udc_init_debugfs(udc);
2416        rc = usb_add_gadget_udc(dev, &udc->gadget);
2417        if (!rc)
2418                return 0;
2419
2420        bcm63xx_udc_cleanup_debugfs(udc);
2421out_uninit:
2422        bcm63xx_uninit_udc_hw(udc);
2423        return rc;
2424}
2425
2426/**
2427 * bcm63xx_udc_remove - Remove the device from the system.
2428 * @pdev: Platform device struct from the bcm63xx BSP code.
2429 */
2430static int bcm63xx_udc_remove(struct platform_device *pdev)
2431{
2432        struct bcm63xx_udc *udc = platform_get_drvdata(pdev);
2433
2434        bcm63xx_udc_cleanup_debugfs(udc);
2435        usb_del_gadget_udc(&udc->gadget);
2436        BUG_ON(udc->driver);
2437
2438        bcm63xx_uninit_udc_hw(udc);
2439
2440        return 0;
2441}
2442
2443static struct platform_driver bcm63xx_udc_driver = {
2444        .probe          = bcm63xx_udc_probe,
2445        .remove         = bcm63xx_udc_remove,
2446        .driver         = {
2447                .name   = DRV_MODULE_NAME,
2448        },
2449};
2450module_platform_driver(bcm63xx_udc_driver);
2451
2452MODULE_DESCRIPTION("BCM63xx USB Peripheral Controller");
2453MODULE_AUTHOR("Kevin Cernekee <cernekee@gmail.com>");
2454MODULE_LICENSE("GPL");
2455MODULE_ALIAS("platform:" DRV_MODULE_NAME);
2456