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