1 // SPDX-License-Identifier: GPL-2.0+
3 * bcm63xx_udc.c -- BCM63xx UDC high/full speed USB device controller
5 * Copyright (C) 2012 Kevin Cernekee <cernekee@gmail.com>
6 * Copyright (C) 2012 Broadcom Corporation
9 #include <linux/bitops.h>
10 #include <linux/bug.h>
11 #include <linux/clk.h>
12 #include <linux/compiler.h>
13 #include <linux/debugfs.h>
14 #include <linux/delay.h>
15 #include <linux/device.h>
16 #include <linux/dma-mapping.h>
17 #include <linux/errno.h>
18 #include <linux/interrupt.h>
19 #include <linux/ioport.h>
20 #include <linux/kernel.h>
21 #include <linux/list.h>
22 #include <linux/module.h>
23 #include <linux/moduleparam.h>
24 #include <linux/platform_device.h>
25 #include <linux/sched.h>
26 #include <linux/seq_file.h>
27 #include <linux/slab.h>
28 #include <linux/timer.h>
29 #include <linux/usb/ch9.h>
30 #include <linux/usb/gadget.h>
31 #include <linux/workqueue.h>
33 #include <bcm63xx_cpu.h>
34 #include <bcm63xx_iudma.h>
35 #include <bcm63xx_dev_usb_usbd.h>
36 #include <bcm63xx_io.h>
37 #include <bcm63xx_regs.h>
39 #define DRV_MODULE_NAME "bcm63xx_udc"
41 static const char bcm63xx_ep0name
[] = "ep0";
45 const struct usb_ep_caps caps
;
46 } bcm63xx_ep_info
[] = {
47 #define EP_INFO(_name, _caps) \
53 EP_INFO(bcm63xx_ep0name
,
54 USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL
, USB_EP_CAPS_DIR_ALL
)),
56 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK
, USB_EP_CAPS_DIR_IN
)),
57 EP_INFO("ep2out-bulk",
58 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK
, USB_EP_CAPS_DIR_OUT
)),
60 USB_EP_CAPS(USB_EP_CAPS_TYPE_INT
, USB_EP_CAPS_DIR_IN
)),
62 USB_EP_CAPS(USB_EP_CAPS_TYPE_INT
, USB_EP_CAPS_DIR_OUT
)),
67 static bool use_fullspeed
;
68 module_param(use_fullspeed
, bool, S_IRUGO
);
69 MODULE_PARM_DESC(use_fullspeed
, "true for fullspeed only");
72 * RX IRQ coalescing options:
74 * false (default) - one IRQ per DATAx packet. Slow but reliable. The
75 * driver is able to pass the "testusb" suite and recover from conditions like:
77 * 1) Device queues up a 2048-byte RX IUDMA transaction on an OUT bulk ep
78 * 2) Host sends 512 bytes of data
79 * 3) Host decides to reconfigure the device and sends SET_INTERFACE
80 * 4) Device shuts down the endpoint and cancels the RX transaction
82 * true - one IRQ per transfer, for transfers <= 2048B. Generates
83 * considerably fewer IRQs, but error recovery is less robust. Does not
84 * reliably pass "testusb".
86 * TX always uses coalescing, because we can cancel partially complete TX
87 * transfers by repeatedly flushing the FIFO. The hardware doesn't allow
90 static bool irq_coalesce
;
91 module_param(irq_coalesce
, bool, S_IRUGO
);
92 MODULE_PARM_DESC(irq_coalesce
, "take one IRQ per RX transfer");
94 #define BCM63XX_NUM_EP 5
95 #define BCM63XX_NUM_IUDMA 6
96 #define BCM63XX_NUM_FIFO_PAIRS 3
98 #define IUDMA_RESET_TIMEOUT_US 10000
100 #define IUDMA_EP0_RXCHAN 0
101 #define IUDMA_EP0_TXCHAN 1
103 #define IUDMA_MAX_FRAGMENT 2048
104 #define BCM63XX_MAX_CTRL_PKT 64
106 #define BCMEP_CTRL 0x00
107 #define BCMEP_ISOC 0x01
108 #define BCMEP_BULK 0x02
109 #define BCMEP_INTR 0x03
111 #define BCMEP_OUT 0x00
112 #define BCMEP_IN 0x01
114 #define BCM63XX_SPD_FULL 1
115 #define BCM63XX_SPD_HIGH 0
117 #define IUDMA_DMAC_OFFSET 0x200
118 #define IUDMA_DMAS_OFFSET 0x400
120 enum bcm63xx_ep0_state
{
123 EP0_IN_DATA_PHASE_SETUP
,
124 EP0_IN_DATA_PHASE_COMPLETE
,
125 EP0_OUT_DATA_PHASE_SETUP
,
126 EP0_OUT_DATA_PHASE_COMPLETE
,
127 EP0_OUT_STATUS_PHASE
,
128 EP0_IN_FAKE_STATUS_PHASE
,
132 static const char __maybe_unused bcm63xx_ep0_state_names
[][32] = {
135 "IN_DATA_PHASE_SETUP",
136 "IN_DATA_PHASE_COMPLETE",
137 "OUT_DATA_PHASE_SETUP",
138 "OUT_DATA_PHASE_COMPLETE",
140 "IN_FAKE_STATUS_PHASE",
145 * struct iudma_ch_cfg - Static configuration for an IUDMA channel.
146 * @ep_num: USB endpoint number.
147 * @n_bds: Number of buffer descriptors in the ring.
148 * @ep_type: Endpoint type (control, bulk, interrupt).
149 * @dir: Direction (in, out).
150 * @n_fifo_slots: Number of FIFO entries to allocate for this channel.
151 * @max_pkt_hs: Maximum packet size in high speed mode.
152 * @max_pkt_fs: Maximum packet size in full speed mode.
154 struct iudma_ch_cfg
{
164 static const struct iudma_ch_cfg iudma_defaults
[] = {
166 /* This controller was designed to support a CDC/RNDIS application.
167 It may be possible to reconfigure some of the endpoints, but
168 the hardware limitations (FIFO sizing and number of DMA channels)
169 may significantly impact flexibility and/or stability. Change
170 these values at your own risk.
172 ep_num ep_type n_fifo_slots max_pkt_fs
173 idx | n_bds | dir | max_pkt_hs |
175 [0] = { -1, 4, BCMEP_CTRL
, BCMEP_OUT
, 32, 64, 64 },
176 [1] = { 0, 4, BCMEP_CTRL
, BCMEP_OUT
, 32, 64, 64 },
177 [2] = { 2, 16, BCMEP_BULK
, BCMEP_OUT
, 128, 512, 64 },
178 [3] = { 1, 16, BCMEP_BULK
, BCMEP_IN
, 128, 512, 64 },
179 [4] = { 4, 4, BCMEP_INTR
, BCMEP_OUT
, 32, 64, 64 },
180 [5] = { 3, 4, BCMEP_INTR
, BCMEP_IN
, 32, 64, 64 },
186 * struct iudma_ch - Represents the current state of a single IUDMA channel.
187 * @ch_idx: IUDMA channel index (0 to BCM63XX_NUM_IUDMA-1).
188 * @ep_num: USB endpoint number. -1 for ep0 RX.
189 * @enabled: Whether bcm63xx_ep_enable() has been called.
190 * @max_pkt: "Chunk size" on the USB interface. Based on interface speed.
191 * @is_tx: true for TX, false for RX.
192 * @bep: Pointer to the associated endpoint. NULL for ep0 RX.
193 * @udc: Reference to the device controller.
194 * @read_bd: Next buffer descriptor to reap from the hardware.
195 * @write_bd: Next BD available for a new packet.
196 * @end_bd: Points to the final BD in the ring.
197 * @n_bds_used: Number of BD entries currently occupied.
198 * @bd_ring: Base pointer to the BD ring.
199 * @bd_ring_dma: Physical (DMA) address of bd_ring.
200 * @n_bds: Total number of BDs in the ring.
202 * ep0 has two IUDMA channels (IUDMA_EP0_RXCHAN and IUDMA_EP0_TXCHAN), as it is
203 * bidirectional. The "struct usb_ep" associated with ep0 is for TX (IN)
206 * Each bulk/intr endpoint has a single IUDMA channel and a single
215 struct bcm63xx_ep
*bep
;
216 struct bcm63xx_udc
*udc
;
218 struct bcm_enet_desc
*read_bd
;
219 struct bcm_enet_desc
*write_bd
;
220 struct bcm_enet_desc
*end_bd
;
223 struct bcm_enet_desc
*bd_ring
;
224 dma_addr_t bd_ring_dma
;
229 * struct bcm63xx_ep - Internal (driver) state of a single endpoint.
230 * @ep_num: USB endpoint number.
231 * @iudma: Pointer to IUDMA channel state.
232 * @ep: USB gadget layer representation of the EP.
233 * @udc: Reference to the device controller.
234 * @queue: Linked list of outstanding requests for this EP.
235 * @halted: 1 if the EP is stalled; 0 otherwise.
239 struct iudma_ch
*iudma
;
241 struct bcm63xx_udc
*udc
;
242 struct list_head queue
;
247 * struct bcm63xx_req - Internal (driver) state of a single request.
248 * @queue: Links back to the EP's request list.
249 * @req: USB gadget layer representation of the request.
250 * @offset: Current byte offset into the data buffer (next byte to queue).
251 * @bd_bytes: Number of data bytes in outstanding BD entries.
252 * @iudma: IUDMA channel used for the request.
255 struct list_head queue
; /* ep's requests */
256 struct usb_request req
;
258 unsigned int bd_bytes
;
259 struct iudma_ch
*iudma
;
263 * struct bcm63xx_udc - Driver/hardware private context.
264 * @lock: Spinlock to mediate access to this struct, and (most) HW regs.
265 * @dev: Generic Linux device structure.
266 * @pd: Platform data (board/port info).
267 * @usbd_clk: Clock descriptor for the USB device block.
268 * @usbh_clk: Clock descriptor for the USB host block.
269 * @gadget: USB slave device.
270 * @driver: Driver for USB slave devices.
271 * @usbd_regs: Base address of the USBD/USB20D block.
272 * @iudma_regs: Base address of the USBD's associated IUDMA block.
273 * @bep: Array of endpoints, including ep0.
274 * @iudma: Array of all IUDMA channels used by this controller.
275 * @cfg: USB configuration number, from SET_CONFIGURATION wValue.
276 * @iface: USB interface number, from SET_INTERFACE wIndex.
277 * @alt_iface: USB alt interface number, from SET_INTERFACE wValue.
278 * @ep0_ctrl_req: Request object for bcm63xx_udc-initiated ep0 transactions.
279 * @ep0_ctrl_buf: Data buffer for ep0_ctrl_req.
280 * @ep0state: Current state of the ep0 state machine.
281 * @ep0_wq: Workqueue struct used to wake up the ep0 state machine.
282 * @wedgemap: Bitmap of wedged endpoints.
283 * @ep0_req_reset: USB reset is pending.
284 * @ep0_req_set_cfg: Need to spoof a SET_CONFIGURATION packet.
285 * @ep0_req_set_iface: Need to spoof a SET_INTERFACE packet.
286 * @ep0_req_shutdown: Driver is shutting down; requesting ep0 to halt activity.
287 * @ep0_req_completed: ep0 request has completed; worker has not seen it yet.
288 * @ep0_reply: Pending reply from gadget driver.
289 * @ep0_request: Outstanding ep0 request.
290 * @debugfs_root: debugfs directory: /sys/kernel/debug/<DRV_MODULE_NAME>.
296 struct bcm63xx_usbd_platform_data
*pd
;
297 struct clk
*usbd_clk
;
298 struct clk
*usbh_clk
;
300 struct usb_gadget gadget
;
301 struct usb_gadget_driver
*driver
;
303 void __iomem
*usbd_regs
;
304 void __iomem
*iudma_regs
;
306 struct bcm63xx_ep bep
[BCM63XX_NUM_EP
];
307 struct iudma_ch iudma
[BCM63XX_NUM_IUDMA
];
313 struct bcm63xx_req ep0_ctrl_req
;
317 struct work_struct ep0_wq
;
319 unsigned long wedgemap
;
321 unsigned ep0_req_reset
:1;
322 unsigned ep0_req_set_cfg
:1;
323 unsigned ep0_req_set_iface
:1;
324 unsigned ep0_req_shutdown
:1;
326 unsigned ep0_req_completed
:1;
327 struct usb_request
*ep0_reply
;
328 struct usb_request
*ep0_request
;
330 struct dentry
*debugfs_root
;
333 static const struct usb_ep_ops bcm63xx_udc_ep_ops
;
335 /***********************************************************************
336 * Convenience functions
337 ***********************************************************************/
339 static inline struct bcm63xx_udc
*gadget_to_udc(struct usb_gadget
*g
)
341 return container_of(g
, struct bcm63xx_udc
, gadget
);
344 static inline struct bcm63xx_ep
*our_ep(struct usb_ep
*ep
)
346 return container_of(ep
, struct bcm63xx_ep
, ep
);
349 static inline struct bcm63xx_req
*our_req(struct usb_request
*req
)
351 return container_of(req
, struct bcm63xx_req
, req
);
354 static inline u32
usbd_readl(struct bcm63xx_udc
*udc
, u32 off
)
356 return bcm_readl(udc
->usbd_regs
+ off
);
359 static inline void usbd_writel(struct bcm63xx_udc
*udc
, u32 val
, u32 off
)
361 bcm_writel(val
, udc
->usbd_regs
+ off
);
364 static inline u32
usb_dma_readl(struct bcm63xx_udc
*udc
, u32 off
)
366 return bcm_readl(udc
->iudma_regs
+ off
);
369 static inline void usb_dma_writel(struct bcm63xx_udc
*udc
, u32 val
, u32 off
)
371 bcm_writel(val
, udc
->iudma_regs
+ off
);
374 static inline u32
usb_dmac_readl(struct bcm63xx_udc
*udc
, u32 off
, int chan
)
376 return bcm_readl(udc
->iudma_regs
+ IUDMA_DMAC_OFFSET
+ off
+
377 (ENETDMA_CHAN_WIDTH
* chan
));
380 static inline void usb_dmac_writel(struct bcm63xx_udc
*udc
, u32 val
, u32 off
,
383 bcm_writel(val
, udc
->iudma_regs
+ IUDMA_DMAC_OFFSET
+ off
+
384 (ENETDMA_CHAN_WIDTH
* chan
));
387 static inline u32
usb_dmas_readl(struct bcm63xx_udc
*udc
, u32 off
, int chan
)
389 return bcm_readl(udc
->iudma_regs
+ IUDMA_DMAS_OFFSET
+ off
+
390 (ENETDMA_CHAN_WIDTH
* chan
));
393 static inline void usb_dmas_writel(struct bcm63xx_udc
*udc
, u32 val
, u32 off
,
396 bcm_writel(val
, udc
->iudma_regs
+ IUDMA_DMAS_OFFSET
+ off
+
397 (ENETDMA_CHAN_WIDTH
* chan
));
400 static inline void set_clocks(struct bcm63xx_udc
*udc
, bool is_enabled
)
403 clk_enable(udc
->usbh_clk
);
404 clk_enable(udc
->usbd_clk
);
407 clk_disable(udc
->usbd_clk
);
408 clk_disable(udc
->usbh_clk
);
412 /***********************************************************************
413 * Low-level IUDMA / FIFO operations
414 ***********************************************************************/
417 * bcm63xx_ep_dma_select - Helper function to set up the init_sel signal.
418 * @udc: Reference to the device controller.
419 * @idx: Desired init_sel value.
421 * The "init_sel" signal is used as a selection index for both endpoints
422 * and IUDMA channels. Since these do not map 1:1, the use of this signal
423 * depends on the context.
425 static void bcm63xx_ep_dma_select(struct bcm63xx_udc
*udc
, int idx
)
427 u32 val
= usbd_readl(udc
, USBD_CONTROL_REG
);
429 val
&= ~USBD_CONTROL_INIT_SEL_MASK
;
430 val
|= idx
<< USBD_CONTROL_INIT_SEL_SHIFT
;
431 usbd_writel(udc
, val
, USBD_CONTROL_REG
);
435 * bcm63xx_set_stall - Enable/disable stall on one endpoint.
436 * @udc: Reference to the device controller.
437 * @bep: Endpoint on which to operate.
438 * @is_stalled: true to enable stall, false to disable.
440 * See notes in bcm63xx_update_wedge() regarding automatic clearing of
441 * halt/stall conditions.
443 static void bcm63xx_set_stall(struct bcm63xx_udc
*udc
, struct bcm63xx_ep
*bep
,
448 val
= USBD_STALL_UPDATE_MASK
|
449 (is_stalled
? USBD_STALL_ENABLE_MASK
: 0) |
450 (bep
->ep_num
<< USBD_STALL_EPNUM_SHIFT
);
451 usbd_writel(udc
, val
, USBD_STALL_REG
);
455 * bcm63xx_fifo_setup - (Re)initialize FIFO boundaries and settings.
456 * @udc: Reference to the device controller.
458 * These parameters depend on the USB link speed. Settings are
459 * per-IUDMA-channel-pair.
461 static void bcm63xx_fifo_setup(struct bcm63xx_udc
*udc
)
463 int is_hs
= udc
->gadget
.speed
== USB_SPEED_HIGH
;
464 u32 i
, val
, rx_fifo_slot
, tx_fifo_slot
;
466 /* set up FIFO boundaries and packet sizes; this is done in pairs */
467 rx_fifo_slot
= tx_fifo_slot
= 0;
468 for (i
= 0; i
< BCM63XX_NUM_IUDMA
; i
+= 2) {
469 const struct iudma_ch_cfg
*rx_cfg
= &iudma_defaults
[i
];
470 const struct iudma_ch_cfg
*tx_cfg
= &iudma_defaults
[i
+ 1];
472 bcm63xx_ep_dma_select(udc
, i
>> 1);
474 val
= (rx_fifo_slot
<< USBD_RXFIFO_CONFIG_START_SHIFT
) |
475 ((rx_fifo_slot
+ rx_cfg
->n_fifo_slots
- 1) <<
476 USBD_RXFIFO_CONFIG_END_SHIFT
);
477 rx_fifo_slot
+= rx_cfg
->n_fifo_slots
;
478 usbd_writel(udc
, val
, USBD_RXFIFO_CONFIG_REG
);
480 is_hs
? rx_cfg
->max_pkt_hs
: rx_cfg
->max_pkt_fs
,
481 USBD_RXFIFO_EPSIZE_REG
);
483 val
= (tx_fifo_slot
<< USBD_TXFIFO_CONFIG_START_SHIFT
) |
484 ((tx_fifo_slot
+ tx_cfg
->n_fifo_slots
- 1) <<
485 USBD_TXFIFO_CONFIG_END_SHIFT
);
486 tx_fifo_slot
+= tx_cfg
->n_fifo_slots
;
487 usbd_writel(udc
, val
, USBD_TXFIFO_CONFIG_REG
);
489 is_hs
? tx_cfg
->max_pkt_hs
: tx_cfg
->max_pkt_fs
,
490 USBD_TXFIFO_EPSIZE_REG
);
492 usbd_readl(udc
, USBD_TXFIFO_EPSIZE_REG
);
497 * bcm63xx_fifo_reset_ep - Flush a single endpoint's FIFO.
498 * @udc: Reference to the device controller.
499 * @ep_num: Endpoint number.
501 static void bcm63xx_fifo_reset_ep(struct bcm63xx_udc
*udc
, int ep_num
)
505 bcm63xx_ep_dma_select(udc
, ep_num
);
507 val
= usbd_readl(udc
, USBD_CONTROL_REG
);
508 val
|= USBD_CONTROL_FIFO_RESET_MASK
;
509 usbd_writel(udc
, val
, USBD_CONTROL_REG
);
510 usbd_readl(udc
, USBD_CONTROL_REG
);
514 * bcm63xx_fifo_reset - Flush all hardware FIFOs.
515 * @udc: Reference to the device controller.
517 static void bcm63xx_fifo_reset(struct bcm63xx_udc
*udc
)
521 for (i
= 0; i
< BCM63XX_NUM_FIFO_PAIRS
; i
++)
522 bcm63xx_fifo_reset_ep(udc
, i
);
526 * bcm63xx_ep_init - Initial (one-time) endpoint initialization.
527 * @udc: Reference to the device controller.
529 static void bcm63xx_ep_init(struct bcm63xx_udc
*udc
)
533 for (i
= 0; i
< BCM63XX_NUM_IUDMA
; i
++) {
534 const struct iudma_ch_cfg
*cfg
= &iudma_defaults
[i
];
539 bcm63xx_ep_dma_select(udc
, cfg
->ep_num
);
540 val
= (cfg
->ep_type
<< USBD_EPNUM_TYPEMAP_TYPE_SHIFT
) |
541 ((i
>> 1) << USBD_EPNUM_TYPEMAP_DMA_CH_SHIFT
);
542 usbd_writel(udc
, val
, USBD_EPNUM_TYPEMAP_REG
);
547 * bcm63xx_ep_setup - Configure per-endpoint settings.
548 * @udc: Reference to the device controller.
550 * This needs to be rerun if the speed/cfg/intf/altintf changes.
552 static void bcm63xx_ep_setup(struct bcm63xx_udc
*udc
)
556 usbd_writel(udc
, USBD_CSR_SETUPADDR_DEF
, USBD_CSR_SETUPADDR_REG
);
558 for (i
= 0; i
< BCM63XX_NUM_IUDMA
; i
++) {
559 const struct iudma_ch_cfg
*cfg
= &iudma_defaults
[i
];
560 int max_pkt
= udc
->gadget
.speed
== USB_SPEED_HIGH
?
561 cfg
->max_pkt_hs
: cfg
->max_pkt_fs
;
562 int idx
= cfg
->ep_num
;
564 udc
->iudma
[i
].max_pkt
= max_pkt
;
568 usb_ep_set_maxpacket_limit(&udc
->bep
[idx
].ep
, max_pkt
);
570 val
= (idx
<< USBD_CSR_EP_LOG_SHIFT
) |
571 (cfg
->dir
<< USBD_CSR_EP_DIR_SHIFT
) |
572 (cfg
->ep_type
<< USBD_CSR_EP_TYPE_SHIFT
) |
573 (udc
->cfg
<< USBD_CSR_EP_CFG_SHIFT
) |
574 (udc
->iface
<< USBD_CSR_EP_IFACE_SHIFT
) |
575 (udc
->alt_iface
<< USBD_CSR_EP_ALTIFACE_SHIFT
) |
576 (max_pkt
<< USBD_CSR_EP_MAXPKT_SHIFT
);
577 usbd_writel(udc
, val
, USBD_CSR_EP_REG(idx
));
582 * iudma_write - Queue a single IUDMA transaction.
583 * @udc: Reference to the device controller.
584 * @iudma: IUDMA channel to use.
585 * @breq: Request containing the transaction data.
587 * For RX IUDMA, this will queue a single buffer descriptor, as RX IUDMA
588 * does not honor SOP/EOP so the handling of multiple buffers is ambiguous.
589 * So iudma_write() may be called several times to fulfill a single
592 * For TX IUDMA, this can queue multiple buffer descriptors if needed.
594 static void iudma_write(struct bcm63xx_udc
*udc
, struct iudma_ch
*iudma
,
595 struct bcm63xx_req
*breq
)
597 int first_bd
= 1, last_bd
= 0, extra_zero_pkt
= 0;
598 unsigned int bytes_left
= breq
->req
.length
- breq
->offset
;
599 const int max_bd_bytes
= !irq_coalesce
&& !iudma
->is_tx
?
600 iudma
->max_pkt
: IUDMA_MAX_FRAGMENT
;
602 iudma
->n_bds_used
= 0;
606 if ((bytes_left
% iudma
->max_pkt
== 0) && bytes_left
&& breq
->req
.zero
)
610 struct bcm_enet_desc
*d
= iudma
->write_bd
;
612 unsigned int n_bytes
;
614 if (d
== iudma
->end_bd
) {
615 dmaflags
|= DMADESC_WRAP_MASK
;
616 iudma
->write_bd
= iudma
->bd_ring
;
622 n_bytes
= min_t(int, bytes_left
, max_bd_bytes
);
624 dmaflags
|= n_bytes
<< DMADESC_LENGTH_SHIFT
;
626 dmaflags
|= (1 << DMADESC_LENGTH_SHIFT
) |
627 DMADESC_USB_ZERO_MASK
;
629 dmaflags
|= DMADESC_OWNER_MASK
;
631 dmaflags
|= DMADESC_SOP_MASK
;
636 * extra_zero_pkt forces one more iteration through the loop
637 * after all data is queued up, to send the zero packet
639 if (extra_zero_pkt
&& !bytes_left
)
642 if (!iudma
->is_tx
|| iudma
->n_bds_used
== iudma
->n_bds
||
643 (n_bytes
== bytes_left
&& !extra_zero_pkt
)) {
645 dmaflags
|= DMADESC_EOP_MASK
;
648 d
->address
= breq
->req
.dma
+ breq
->offset
;
650 d
->len_stat
= dmaflags
;
652 breq
->offset
+= n_bytes
;
653 breq
->bd_bytes
+= n_bytes
;
654 bytes_left
-= n_bytes
;
657 usb_dmac_writel(udc
, ENETDMAC_CHANCFG_EN_MASK
,
658 ENETDMAC_CHANCFG_REG
, iudma
->ch_idx
);
662 * iudma_read - Check for IUDMA buffer completion.
663 * @udc: Reference to the device controller.
664 * @iudma: IUDMA channel to use.
666 * This checks to see if ALL of the outstanding BDs on the DMA channel
667 * have been filled. If so, it returns the actual transfer length;
668 * otherwise it returns -EBUSY.
670 static int iudma_read(struct bcm63xx_udc
*udc
, struct iudma_ch
*iudma
)
672 int i
, actual_len
= 0;
673 struct bcm_enet_desc
*d
= iudma
->read_bd
;
675 if (!iudma
->n_bds_used
)
678 for (i
= 0; i
< iudma
->n_bds_used
; i
++) {
681 dmaflags
= d
->len_stat
;
683 if (dmaflags
& DMADESC_OWNER_MASK
)
686 actual_len
+= (dmaflags
& DMADESC_LENGTH_MASK
) >>
687 DMADESC_LENGTH_SHIFT
;
688 if (d
== iudma
->end_bd
)
695 iudma
->n_bds_used
= 0;
700 * iudma_reset_channel - Stop DMA on a single channel.
701 * @udc: Reference to the device controller.
702 * @iudma: IUDMA channel to reset.
704 static void iudma_reset_channel(struct bcm63xx_udc
*udc
, struct iudma_ch
*iudma
)
706 int timeout
= IUDMA_RESET_TIMEOUT_US
;
707 struct bcm_enet_desc
*d
;
708 int ch_idx
= iudma
->ch_idx
;
711 bcm63xx_fifo_reset_ep(udc
, max(0, iudma
->ep_num
));
713 /* stop DMA, then wait for the hardware to wrap up */
714 usb_dmac_writel(udc
, 0, ENETDMAC_CHANCFG_REG
, ch_idx
);
716 while (usb_dmac_readl(udc
, ENETDMAC_CHANCFG_REG
, ch_idx
) &
717 ENETDMAC_CHANCFG_EN_MASK
) {
720 /* repeatedly flush the FIFO data until the BD completes */
721 if (iudma
->is_tx
&& iudma
->ep_num
>= 0)
722 bcm63xx_fifo_reset_ep(udc
, iudma
->ep_num
);
725 dev_err(udc
->dev
, "can't reset IUDMA channel %d\n",
729 if (timeout
== IUDMA_RESET_TIMEOUT_US
/ 2) {
730 dev_warn(udc
->dev
, "forcibly halting IUDMA channel %d\n",
732 usb_dmac_writel(udc
, ENETDMAC_CHANCFG_BUFHALT_MASK
,
733 ENETDMAC_CHANCFG_REG
, ch_idx
);
736 usb_dmac_writel(udc
, ~0, ENETDMAC_IR_REG
, ch_idx
);
738 /* don't leave "live" HW-owned entries for the next guy to step on */
739 for (d
= iudma
->bd_ring
; d
<= iudma
->end_bd
; d
++)
743 iudma
->read_bd
= iudma
->write_bd
= iudma
->bd_ring
;
744 iudma
->n_bds_used
= 0;
746 /* set up IRQs, UBUS burst size, and BD base for this channel */
747 usb_dmac_writel(udc
, ENETDMAC_IR_BUFDONE_MASK
,
748 ENETDMAC_IRMASK_REG
, ch_idx
);
749 usb_dmac_writel(udc
, 8, ENETDMAC_MAXBURST_REG
, ch_idx
);
751 usb_dmas_writel(udc
, iudma
->bd_ring_dma
, ENETDMAS_RSTART_REG
, ch_idx
);
752 usb_dmas_writel(udc
, 0, ENETDMAS_SRAM2_REG
, ch_idx
);
756 * iudma_init_channel - One-time IUDMA channel initialization.
757 * @udc: Reference to the device controller.
758 * @ch_idx: Channel to initialize.
760 static int iudma_init_channel(struct bcm63xx_udc
*udc
, unsigned int ch_idx
)
762 struct iudma_ch
*iudma
= &udc
->iudma
[ch_idx
];
763 const struct iudma_ch_cfg
*cfg
= &iudma_defaults
[ch_idx
];
764 unsigned int n_bds
= cfg
->n_bds
;
765 struct bcm63xx_ep
*bep
= NULL
;
767 iudma
->ep_num
= cfg
->ep_num
;
768 iudma
->ch_idx
= ch_idx
;
769 iudma
->is_tx
= !!(ch_idx
& 0x01);
770 if (iudma
->ep_num
>= 0) {
771 bep
= &udc
->bep
[iudma
->ep_num
];
773 INIT_LIST_HEAD(&bep
->queue
);
779 /* ep0 is always active; others are controlled by the gadget driver */
780 if (iudma
->ep_num
<= 0)
781 iudma
->enabled
= true;
783 iudma
->n_bds
= n_bds
;
784 iudma
->bd_ring
= dmam_alloc_coherent(udc
->dev
,
785 n_bds
* sizeof(struct bcm_enet_desc
),
786 &iudma
->bd_ring_dma
, GFP_KERNEL
);
789 iudma
->end_bd
= &iudma
->bd_ring
[n_bds
- 1];
795 * iudma_init - One-time initialization of all IUDMA channels.
796 * @udc: Reference to the device controller.
798 * Enable DMA, flush channels, and enable global IUDMA IRQs.
800 static int iudma_init(struct bcm63xx_udc
*udc
)
804 usb_dma_writel(udc
, ENETDMA_CFG_EN_MASK
, ENETDMA_CFG_REG
);
806 for (i
= 0; i
< BCM63XX_NUM_IUDMA
; i
++) {
807 rc
= iudma_init_channel(udc
, i
);
810 iudma_reset_channel(udc
, &udc
->iudma
[i
]);
813 usb_dma_writel(udc
, BIT(BCM63XX_NUM_IUDMA
)-1, ENETDMA_GLB_IRQMASK_REG
);
818 * iudma_uninit - Uninitialize IUDMA channels.
819 * @udc: Reference to the device controller.
821 * Kill global IUDMA IRQs, flush channels, and kill DMA.
823 static void iudma_uninit(struct bcm63xx_udc
*udc
)
827 usb_dma_writel(udc
, 0, ENETDMA_GLB_IRQMASK_REG
);
829 for (i
= 0; i
< BCM63XX_NUM_IUDMA
; i
++)
830 iudma_reset_channel(udc
, &udc
->iudma
[i
]);
832 usb_dma_writel(udc
, 0, ENETDMA_CFG_REG
);
835 /***********************************************************************
836 * Other low-level USBD operations
837 ***********************************************************************/
840 * bcm63xx_set_ctrl_irqs - Mask/unmask control path interrupts.
841 * @udc: Reference to the device controller.
842 * @enable_irqs: true to enable, false to disable.
844 static void bcm63xx_set_ctrl_irqs(struct bcm63xx_udc
*udc
, bool enable_irqs
)
848 usbd_writel(udc
, 0, USBD_STATUS_REG
);
850 val
= BIT(USBD_EVENT_IRQ_USB_RESET
) |
851 BIT(USBD_EVENT_IRQ_SETUP
) |
852 BIT(USBD_EVENT_IRQ_SETCFG
) |
853 BIT(USBD_EVENT_IRQ_SETINTF
) |
854 BIT(USBD_EVENT_IRQ_USB_LINK
);
855 usbd_writel(udc
, enable_irqs
? val
: 0, USBD_EVENT_IRQ_MASK_REG
);
856 usbd_writel(udc
, val
, USBD_EVENT_IRQ_STATUS_REG
);
860 * bcm63xx_select_phy_mode - Select between USB device and host mode.
861 * @udc: Reference to the device controller.
862 * @is_device: true for device, false for host.
864 * This should probably be reworked to use the drivers/usb/otg
867 * By default, the AFE/pullups are disabled in device mode, until
868 * bcm63xx_select_pullup() is called.
870 static void bcm63xx_select_phy_mode(struct bcm63xx_udc
*udc
, bool is_device
)
872 u32 val
, portmask
= BIT(udc
->pd
->port_no
);
874 if (BCMCPU_IS_6328()) {
875 /* configure pinmux to sense VBUS signal */
876 val
= bcm_gpio_readl(GPIO_PINMUX_OTHR_REG
);
877 val
&= ~GPIO_PINMUX_OTHR_6328_USB_MASK
;
878 val
|= is_device
? GPIO_PINMUX_OTHR_6328_USB_DEV
:
879 GPIO_PINMUX_OTHR_6328_USB_HOST
;
880 bcm_gpio_writel(val
, GPIO_PINMUX_OTHR_REG
);
883 val
= bcm_rset_readl(RSET_USBH_PRIV
, USBH_PRIV_UTMI_CTL_6368_REG
);
885 val
|= (portmask
<< USBH_PRIV_UTMI_CTL_HOSTB_SHIFT
);
886 val
|= (portmask
<< USBH_PRIV_UTMI_CTL_NODRIV_SHIFT
);
888 val
&= ~(portmask
<< USBH_PRIV_UTMI_CTL_HOSTB_SHIFT
);
889 val
&= ~(portmask
<< USBH_PRIV_UTMI_CTL_NODRIV_SHIFT
);
891 bcm_rset_writel(RSET_USBH_PRIV
, val
, USBH_PRIV_UTMI_CTL_6368_REG
);
893 val
= bcm_rset_readl(RSET_USBH_PRIV
, USBH_PRIV_SWAP_6368_REG
);
895 val
|= USBH_PRIV_SWAP_USBD_MASK
;
897 val
&= ~USBH_PRIV_SWAP_USBD_MASK
;
898 bcm_rset_writel(RSET_USBH_PRIV
, val
, USBH_PRIV_SWAP_6368_REG
);
902 * bcm63xx_select_pullup - Enable/disable the pullup on D+
903 * @udc: Reference to the device controller.
904 * @is_on: true to enable the pullup, false to disable.
906 * If the pullup is active, the host will sense a FS/HS device connected to
907 * the port. If the pullup is inactive, the host will think the USB
908 * device has been disconnected.
910 static void bcm63xx_select_pullup(struct bcm63xx_udc
*udc
, bool is_on
)
912 u32 val
, portmask
= BIT(udc
->pd
->port_no
);
914 val
= bcm_rset_readl(RSET_USBH_PRIV
, USBH_PRIV_UTMI_CTL_6368_REG
);
916 val
&= ~(portmask
<< USBH_PRIV_UTMI_CTL_NODRIV_SHIFT
);
918 val
|= (portmask
<< USBH_PRIV_UTMI_CTL_NODRIV_SHIFT
);
919 bcm_rset_writel(RSET_USBH_PRIV
, val
, USBH_PRIV_UTMI_CTL_6368_REG
);
923 * bcm63xx_uninit_udc_hw - Shut down the hardware prior to driver removal.
924 * @udc: Reference to the device controller.
926 * This just masks the IUDMA IRQs and releases the clocks. It is assumed
927 * that bcm63xx_udc_stop() has already run, and the clocks are stopped.
929 static void bcm63xx_uninit_udc_hw(struct bcm63xx_udc
*udc
)
931 set_clocks(udc
, true);
933 set_clocks(udc
, false);
935 clk_put(udc
->usbd_clk
);
936 clk_put(udc
->usbh_clk
);
940 * bcm63xx_init_udc_hw - Initialize the controller hardware and data structures.
941 * @udc: Reference to the device controller.
943 static int bcm63xx_init_udc_hw(struct bcm63xx_udc
*udc
)
948 udc
->ep0_ctrl_buf
= devm_kzalloc(udc
->dev
, BCM63XX_MAX_CTRL_PKT
,
950 if (!udc
->ep0_ctrl_buf
)
953 INIT_LIST_HEAD(&udc
->gadget
.ep_list
);
954 for (i
= 0; i
< BCM63XX_NUM_EP
; i
++) {
955 struct bcm63xx_ep
*bep
= &udc
->bep
[i
];
957 bep
->ep
.name
= bcm63xx_ep_info
[i
].name
;
958 bep
->ep
.caps
= bcm63xx_ep_info
[i
].caps
;
960 bep
->ep
.ops
= &bcm63xx_udc_ep_ops
;
961 list_add_tail(&bep
->ep
.ep_list
, &udc
->gadget
.ep_list
);
963 usb_ep_set_maxpacket_limit(&bep
->ep
, BCM63XX_MAX_CTRL_PKT
);
966 INIT_LIST_HEAD(&bep
->queue
);
969 udc
->gadget
.ep0
= &udc
->bep
[0].ep
;
970 list_del(&udc
->bep
[0].ep
.ep_list
);
972 udc
->gadget
.speed
= USB_SPEED_UNKNOWN
;
973 udc
->ep0state
= EP0_SHUTDOWN
;
975 udc
->usbh_clk
= clk_get(udc
->dev
, "usbh");
976 if (IS_ERR(udc
->usbh_clk
))
979 udc
->usbd_clk
= clk_get(udc
->dev
, "usbd");
980 if (IS_ERR(udc
->usbd_clk
)) {
981 clk_put(udc
->usbh_clk
);
985 set_clocks(udc
, true);
987 val
= USBD_CONTROL_AUTO_CSRS_MASK
|
988 USBD_CONTROL_DONE_CSRS_MASK
|
989 (irq_coalesce
? USBD_CONTROL_RXZSCFG_MASK
: 0);
990 usbd_writel(udc
, val
, USBD_CONTROL_REG
);
992 val
= USBD_STRAPS_APP_SELF_PWR_MASK
|
993 USBD_STRAPS_APP_RAM_IF_MASK
|
994 USBD_STRAPS_APP_CSRPRGSUP_MASK
|
995 USBD_STRAPS_APP_8BITPHY_MASK
|
996 USBD_STRAPS_APP_RMTWKUP_MASK
;
998 if (udc
->gadget
.max_speed
== USB_SPEED_HIGH
)
999 val
|= (BCM63XX_SPD_HIGH
<< USBD_STRAPS_SPEED_SHIFT
);
1001 val
|= (BCM63XX_SPD_FULL
<< USBD_STRAPS_SPEED_SHIFT
);
1002 usbd_writel(udc
, val
, USBD_STRAPS_REG
);
1004 bcm63xx_set_ctrl_irqs(udc
, false);
1006 usbd_writel(udc
, 0, USBD_EVENT_IRQ_CFG_LO_REG
);
1008 val
= USBD_EVENT_IRQ_CFG_FALLING(USBD_EVENT_IRQ_ENUM_ON
) |
1009 USBD_EVENT_IRQ_CFG_FALLING(USBD_EVENT_IRQ_SET_CSRS
);
1010 usbd_writel(udc
, val
, USBD_EVENT_IRQ_CFG_HI_REG
);
1012 rc
= iudma_init(udc
);
1013 set_clocks(udc
, false);
1015 bcm63xx_uninit_udc_hw(udc
);
1020 /***********************************************************************
1021 * Standard EP gadget operations
1022 ***********************************************************************/
1025 * bcm63xx_ep_enable - Enable one endpoint.
1026 * @ep: Endpoint to enable.
1027 * @desc: Contains max packet, direction, etc.
1029 * Most of the endpoint parameters are fixed in this controller, so there
1030 * isn't much for this function to do.
1032 static int bcm63xx_ep_enable(struct usb_ep
*ep
,
1033 const struct usb_endpoint_descriptor
*desc
)
1035 struct bcm63xx_ep
*bep
= our_ep(ep
);
1036 struct bcm63xx_udc
*udc
= bep
->udc
;
1037 struct iudma_ch
*iudma
= bep
->iudma
;
1038 unsigned long flags
;
1040 if (!ep
|| !desc
|| ep
->name
== bcm63xx_ep0name
)
1046 spin_lock_irqsave(&udc
->lock
, flags
);
1047 if (iudma
->enabled
) {
1048 spin_unlock_irqrestore(&udc
->lock
, flags
);
1052 iudma
->enabled
= true;
1053 BUG_ON(!list_empty(&bep
->queue
));
1055 iudma_reset_channel(udc
, iudma
);
1058 bcm63xx_set_stall(udc
, bep
, false);
1059 clear_bit(bep
->ep_num
, &udc
->wedgemap
);
1062 ep
->maxpacket
= usb_endpoint_maxp(desc
);
1064 spin_unlock_irqrestore(&udc
->lock
, flags
);
1069 * bcm63xx_ep_disable - Disable one endpoint.
1070 * @ep: Endpoint to disable.
1072 static int bcm63xx_ep_disable(struct usb_ep
*ep
)
1074 struct bcm63xx_ep
*bep
= our_ep(ep
);
1075 struct bcm63xx_udc
*udc
= bep
->udc
;
1076 struct iudma_ch
*iudma
= bep
->iudma
;
1077 struct bcm63xx_req
*breq
, *n
;
1078 unsigned long flags
;
1080 if (!ep
|| !ep
->desc
)
1083 spin_lock_irqsave(&udc
->lock
, flags
);
1084 if (!iudma
->enabled
) {
1085 spin_unlock_irqrestore(&udc
->lock
, flags
);
1088 iudma
->enabled
= false;
1090 iudma_reset_channel(udc
, iudma
);
1092 if (!list_empty(&bep
->queue
)) {
1093 list_for_each_entry_safe(breq
, n
, &bep
->queue
, queue
) {
1094 usb_gadget_unmap_request(&udc
->gadget
, &breq
->req
,
1096 list_del(&breq
->queue
);
1097 breq
->req
.status
= -ESHUTDOWN
;
1099 spin_unlock_irqrestore(&udc
->lock
, flags
);
1100 usb_gadget_giveback_request(&iudma
->bep
->ep
, &breq
->req
);
1101 spin_lock_irqsave(&udc
->lock
, flags
);
1106 spin_unlock_irqrestore(&udc
->lock
, flags
);
1111 * bcm63xx_udc_alloc_request - Allocate a new request.
1112 * @ep: Endpoint associated with the request.
1113 * @mem_flags: Flags to pass to kzalloc().
1115 static struct usb_request
*bcm63xx_udc_alloc_request(struct usb_ep
*ep
,
1118 struct bcm63xx_req
*breq
;
1120 breq
= kzalloc(sizeof(*breq
), mem_flags
);
1127 * bcm63xx_udc_free_request - Free a request.
1128 * @ep: Endpoint associated with the request.
1129 * @req: Request to free.
1131 static void bcm63xx_udc_free_request(struct usb_ep
*ep
,
1132 struct usb_request
*req
)
1134 struct bcm63xx_req
*breq
= our_req(req
);
1139 * bcm63xx_udc_queue - Queue up a new request.
1140 * @ep: Endpoint associated with the request.
1141 * @req: Request to add.
1142 * @mem_flags: Unused.
1144 * If the queue is empty, start this request immediately. Otherwise, add
1147 * ep0 replies are sent through this function from the gadget driver, but
1148 * they are treated differently because they need to be handled by the ep0
1149 * state machine. (Sometimes they are replies to control requests that
1150 * were spoofed by this driver, and so they shouldn't be transmitted at all.)
1152 static int bcm63xx_udc_queue(struct usb_ep
*ep
, struct usb_request
*req
,
1155 struct bcm63xx_ep
*bep
= our_ep(ep
);
1156 struct bcm63xx_udc
*udc
= bep
->udc
;
1157 struct bcm63xx_req
*breq
= our_req(req
);
1158 unsigned long flags
;
1161 if (unlikely(!req
|| !req
->complete
|| !req
->buf
|| !ep
))
1168 if (bep
== &udc
->bep
[0]) {
1169 /* only one reply per request, please */
1173 udc
->ep0_reply
= req
;
1174 schedule_work(&udc
->ep0_wq
);
1178 spin_lock_irqsave(&udc
->lock
, flags
);
1179 if (!bep
->iudma
->enabled
) {
1184 rc
= usb_gadget_map_request(&udc
->gadget
, req
, bep
->iudma
->is_tx
);
1186 list_add_tail(&breq
->queue
, &bep
->queue
);
1187 if (list_is_singular(&bep
->queue
))
1188 iudma_write(udc
, bep
->iudma
, breq
);
1192 spin_unlock_irqrestore(&udc
->lock
, flags
);
1197 * bcm63xx_udc_dequeue - Remove a pending request from the queue.
1198 * @ep: Endpoint associated with the request.
1199 * @req: Request to remove.
1201 * If the request is not at the head of the queue, this is easy - just nuke
1202 * it. If the request is at the head of the queue, we'll need to stop the
1203 * DMA transaction and then queue up the successor.
1205 static int bcm63xx_udc_dequeue(struct usb_ep
*ep
, struct usb_request
*req
)
1207 struct bcm63xx_ep
*bep
= our_ep(ep
);
1208 struct bcm63xx_udc
*udc
= bep
->udc
;
1209 struct bcm63xx_req
*breq
= our_req(req
), *cur
;
1210 unsigned long flags
;
1213 spin_lock_irqsave(&udc
->lock
, flags
);
1214 if (list_empty(&bep
->queue
)) {
1219 cur
= list_first_entry(&bep
->queue
, struct bcm63xx_req
, queue
);
1220 usb_gadget_unmap_request(&udc
->gadget
, &breq
->req
, bep
->iudma
->is_tx
);
1223 iudma_reset_channel(udc
, bep
->iudma
);
1224 list_del(&breq
->queue
);
1226 if (!list_empty(&bep
->queue
)) {
1227 struct bcm63xx_req
*next
;
1229 next
= list_first_entry(&bep
->queue
,
1230 struct bcm63xx_req
, queue
);
1231 iudma_write(udc
, bep
->iudma
, next
);
1234 list_del(&breq
->queue
);
1238 spin_unlock_irqrestore(&udc
->lock
, flags
);
1240 req
->status
= -ESHUTDOWN
;
1241 req
->complete(ep
, req
);
1247 * bcm63xx_udc_set_halt - Enable/disable STALL flag in the hardware.
1248 * @ep: Endpoint to halt.
1249 * @value: Zero to clear halt; nonzero to set halt.
1251 * See comments in bcm63xx_update_wedge().
1253 static int bcm63xx_udc_set_halt(struct usb_ep
*ep
, int value
)
1255 struct bcm63xx_ep
*bep
= our_ep(ep
);
1256 struct bcm63xx_udc
*udc
= bep
->udc
;
1257 unsigned long flags
;
1259 spin_lock_irqsave(&udc
->lock
, flags
);
1260 bcm63xx_set_stall(udc
, bep
, !!value
);
1261 bep
->halted
= value
;
1262 spin_unlock_irqrestore(&udc
->lock
, flags
);
1268 * bcm63xx_udc_set_wedge - Stall the endpoint until the next reset.
1269 * @ep: Endpoint to wedge.
1271 * See comments in bcm63xx_update_wedge().
1273 static int bcm63xx_udc_set_wedge(struct usb_ep
*ep
)
1275 struct bcm63xx_ep
*bep
= our_ep(ep
);
1276 struct bcm63xx_udc
*udc
= bep
->udc
;
1277 unsigned long flags
;
1279 spin_lock_irqsave(&udc
->lock
, flags
);
1280 set_bit(bep
->ep_num
, &udc
->wedgemap
);
1281 bcm63xx_set_stall(udc
, bep
, true);
1282 spin_unlock_irqrestore(&udc
->lock
, flags
);
1287 static const struct usb_ep_ops bcm63xx_udc_ep_ops
= {
1288 .enable
= bcm63xx_ep_enable
,
1289 .disable
= bcm63xx_ep_disable
,
1291 .alloc_request
= bcm63xx_udc_alloc_request
,
1292 .free_request
= bcm63xx_udc_free_request
,
1294 .queue
= bcm63xx_udc_queue
,
1295 .dequeue
= bcm63xx_udc_dequeue
,
1297 .set_halt
= bcm63xx_udc_set_halt
,
1298 .set_wedge
= bcm63xx_udc_set_wedge
,
1301 /***********************************************************************
1303 ***********************************************************************/
1306 * bcm63xx_ep0_setup_callback - Drop spinlock to invoke ->setup callback.
1307 * @udc: Reference to the device controller.
1308 * @ctrl: 8-byte SETUP request.
1310 static int bcm63xx_ep0_setup_callback(struct bcm63xx_udc
*udc
,
1311 struct usb_ctrlrequest
*ctrl
)
1315 spin_unlock_irq(&udc
->lock
);
1316 rc
= udc
->driver
->setup(&udc
->gadget
, ctrl
);
1317 spin_lock_irq(&udc
->lock
);
1322 * bcm63xx_ep0_spoof_set_cfg - Synthesize a SET_CONFIGURATION request.
1323 * @udc: Reference to the device controller.
1325 * Many standard requests are handled automatically in the hardware, but
1326 * we still need to pass them to the gadget driver so that it can
1327 * reconfigure the interfaces/endpoints if necessary.
1329 * Unfortunately we are not able to send a STALL response if the host
1330 * requests an invalid configuration. If this happens, we'll have to be
1331 * content with printing a warning.
1333 static int bcm63xx_ep0_spoof_set_cfg(struct bcm63xx_udc
*udc
)
1335 struct usb_ctrlrequest ctrl
;
1338 ctrl
.bRequestType
= USB_DIR_OUT
| USB_RECIP_DEVICE
;
1339 ctrl
.bRequest
= USB_REQ_SET_CONFIGURATION
;
1340 ctrl
.wValue
= cpu_to_le16(udc
->cfg
);
1344 rc
= bcm63xx_ep0_setup_callback(udc
, &ctrl
);
1346 dev_warn_ratelimited(udc
->dev
,
1347 "hardware auto-acked bad SET_CONFIGURATION(%d) request\n",
1354 * bcm63xx_ep0_spoof_set_iface - Synthesize a SET_INTERFACE request.
1355 * @udc: Reference to the device controller.
1357 static int bcm63xx_ep0_spoof_set_iface(struct bcm63xx_udc
*udc
)
1359 struct usb_ctrlrequest ctrl
;
1362 ctrl
.bRequestType
= USB_DIR_OUT
| USB_RECIP_INTERFACE
;
1363 ctrl
.bRequest
= USB_REQ_SET_INTERFACE
;
1364 ctrl
.wValue
= cpu_to_le16(udc
->alt_iface
);
1365 ctrl
.wIndex
= cpu_to_le16(udc
->iface
);
1368 rc
= bcm63xx_ep0_setup_callback(udc
, &ctrl
);
1370 dev_warn_ratelimited(udc
->dev
,
1371 "hardware auto-acked bad SET_INTERFACE(%d,%d) request\n",
1372 udc
->iface
, udc
->alt_iface
);
1378 * bcm63xx_ep0_map_write - dma_map and iudma_write a single request.
1379 * @udc: Reference to the device controller.
1380 * @ch_idx: IUDMA channel number.
1381 * @req: USB gadget layer representation of the request.
1383 static void bcm63xx_ep0_map_write(struct bcm63xx_udc
*udc
, int ch_idx
,
1384 struct usb_request
*req
)
1386 struct bcm63xx_req
*breq
= our_req(req
);
1387 struct iudma_ch
*iudma
= &udc
->iudma
[ch_idx
];
1389 BUG_ON(udc
->ep0_request
);
1390 udc
->ep0_request
= req
;
1394 usb_gadget_map_request(&udc
->gadget
, req
, iudma
->is_tx
);
1395 iudma_write(udc
, iudma
, breq
);
1399 * bcm63xx_ep0_complete - Set completion status and "stage" the callback.
1400 * @udc: Reference to the device controller.
1401 * @req: USB gadget layer representation of the request.
1402 * @status: Status to return to the gadget driver.
1404 static void bcm63xx_ep0_complete(struct bcm63xx_udc
*udc
,
1405 struct usb_request
*req
, int status
)
1407 req
->status
= status
;
1410 if (req
->complete
) {
1411 spin_unlock_irq(&udc
->lock
);
1412 req
->complete(&udc
->bep
[0].ep
, req
);
1413 spin_lock_irq(&udc
->lock
);
1418 * bcm63xx_ep0_nuke_reply - Abort request from the gadget driver due to
1420 * @udc: Reference to the device controller.
1421 * @is_tx: Nonzero for TX (IN), zero for RX (OUT).
1423 static void bcm63xx_ep0_nuke_reply(struct bcm63xx_udc
*udc
, int is_tx
)
1425 struct usb_request
*req
= udc
->ep0_reply
;
1427 udc
->ep0_reply
= NULL
;
1428 usb_gadget_unmap_request(&udc
->gadget
, req
, is_tx
);
1429 if (udc
->ep0_request
== req
) {
1430 udc
->ep0_req_completed
= 0;
1431 udc
->ep0_request
= NULL
;
1433 bcm63xx_ep0_complete(udc
, req
, -ESHUTDOWN
);
1437 * bcm63xx_ep0_read_complete - Close out the pending ep0 request; return
1439 * @udc: Reference to the device controller.
1441 static int bcm63xx_ep0_read_complete(struct bcm63xx_udc
*udc
)
1443 struct usb_request
*req
= udc
->ep0_request
;
1445 udc
->ep0_req_completed
= 0;
1446 udc
->ep0_request
= NULL
;
1452 * bcm63xx_ep0_internal_request - Helper function to submit an ep0 request.
1453 * @udc: Reference to the device controller.
1454 * @ch_idx: IUDMA channel number.
1455 * @length: Number of bytes to TX/RX.
1457 * Used for simple transfers performed by the ep0 worker. This will always
1458 * use ep0_ctrl_req / ep0_ctrl_buf.
1460 static void bcm63xx_ep0_internal_request(struct bcm63xx_udc
*udc
, int ch_idx
,
1463 struct usb_request
*req
= &udc
->ep0_ctrl_req
.req
;
1465 req
->buf
= udc
->ep0_ctrl_buf
;
1466 req
->length
= length
;
1467 req
->complete
= NULL
;
1469 bcm63xx_ep0_map_write(udc
, ch_idx
, req
);
1473 * bcm63xx_ep0_do_setup - Parse new SETUP packet and decide how to handle it.
1474 * @udc: Reference to the device controller.
1476 * EP0_IDLE probably shouldn't ever happen. EP0_REQUEUE means we're ready
1477 * for the next packet. Anything else means the transaction requires multiple
1478 * stages of handling.
1480 static enum bcm63xx_ep0_state
bcm63xx_ep0_do_setup(struct bcm63xx_udc
*udc
)
1483 struct usb_ctrlrequest
*ctrl
= (void *)udc
->ep0_ctrl_buf
;
1485 rc
= bcm63xx_ep0_read_complete(udc
);
1488 dev_err(udc
->dev
, "missing SETUP packet\n");
1493 * Handle 0-byte IN STATUS acknowledgement. The hardware doesn't
1494 * ALWAYS deliver these 100% of the time, so if we happen to see one,
1495 * just throw it away.
1500 /* Drop malformed SETUP packets */
1501 if (rc
!= sizeof(*ctrl
)) {
1502 dev_warn_ratelimited(udc
->dev
,
1503 "malformed SETUP packet (%d bytes)\n", rc
);
1507 /* Process new SETUP packet arriving on ep0 */
1508 rc
= bcm63xx_ep0_setup_callback(udc
, ctrl
);
1510 bcm63xx_set_stall(udc
, &udc
->bep
[0], true);
1516 else if (ctrl
->bRequestType
& USB_DIR_IN
)
1517 return EP0_IN_DATA_PHASE_SETUP
;
1519 return EP0_OUT_DATA_PHASE_SETUP
;
1523 * bcm63xx_ep0_do_idle - Check for outstanding requests if ep0 is idle.
1524 * @udc: Reference to the device controller.
1526 * In state EP0_IDLE, the RX descriptor is either pending, or has been
1527 * filled with a SETUP packet from the host. This function handles new
1528 * SETUP packets, control IRQ events (which can generate fake SETUP packets),
1529 * and reset/shutdown events.
1531 * Returns 0 if work was done; -EAGAIN if nothing to do.
1533 static int bcm63xx_ep0_do_idle(struct bcm63xx_udc
*udc
)
1535 if (udc
->ep0_req_reset
) {
1536 udc
->ep0_req_reset
= 0;
1537 } else if (udc
->ep0_req_set_cfg
) {
1538 udc
->ep0_req_set_cfg
= 0;
1539 if (bcm63xx_ep0_spoof_set_cfg(udc
) >= 0)
1540 udc
->ep0state
= EP0_IN_FAKE_STATUS_PHASE
;
1541 } else if (udc
->ep0_req_set_iface
) {
1542 udc
->ep0_req_set_iface
= 0;
1543 if (bcm63xx_ep0_spoof_set_iface(udc
) >= 0)
1544 udc
->ep0state
= EP0_IN_FAKE_STATUS_PHASE
;
1545 } else if (udc
->ep0_req_completed
) {
1546 udc
->ep0state
= bcm63xx_ep0_do_setup(udc
);
1547 return udc
->ep0state
== EP0_IDLE
? -EAGAIN
: 0;
1548 } else if (udc
->ep0_req_shutdown
) {
1549 udc
->ep0_req_shutdown
= 0;
1550 udc
->ep0_req_completed
= 0;
1551 udc
->ep0_request
= NULL
;
1552 iudma_reset_channel(udc
, &udc
->iudma
[IUDMA_EP0_RXCHAN
]);
1553 usb_gadget_unmap_request(&udc
->gadget
,
1554 &udc
->ep0_ctrl_req
.req
, 0);
1556 /* bcm63xx_udc_pullup() is waiting for this */
1558 udc
->ep0state
= EP0_SHUTDOWN
;
1559 } else if (udc
->ep0_reply
) {
1561 * This could happen if a USB RESET shows up during an ep0
1562 * transaction (especially if a laggy driver like gadgetfs
1565 dev_warn(udc
->dev
, "nuking unexpected reply\n");
1566 bcm63xx_ep0_nuke_reply(udc
, 0);
1575 * bcm63xx_ep0_one_round - Handle the current ep0 state.
1576 * @udc: Reference to the device controller.
1578 * Returns 0 if work was done; -EAGAIN if nothing to do.
1580 static int bcm63xx_ep0_one_round(struct bcm63xx_udc
*udc
)
1582 enum bcm63xx_ep0_state ep0state
= udc
->ep0state
;
1583 bool shutdown
= udc
->ep0_req_reset
|| udc
->ep0_req_shutdown
;
1585 switch (udc
->ep0state
) {
1587 /* set up descriptor to receive SETUP packet */
1588 bcm63xx_ep0_internal_request(udc
, IUDMA_EP0_RXCHAN
,
1589 BCM63XX_MAX_CTRL_PKT
);
1590 ep0state
= EP0_IDLE
;
1593 return bcm63xx_ep0_do_idle(udc
);
1594 case EP0_IN_DATA_PHASE_SETUP
:
1596 * Normal case: TX request is in ep0_reply (queued by the
1597 * callback), or will be queued shortly. When it's here,
1598 * send it to the HW and go to EP0_IN_DATA_PHASE_COMPLETE.
1600 * Shutdown case: Stop waiting for the reply. Just
1601 * REQUEUE->IDLE. The gadget driver is NOT expected to
1602 * queue anything else now.
1604 if (udc
->ep0_reply
) {
1605 bcm63xx_ep0_map_write(udc
, IUDMA_EP0_TXCHAN
,
1607 ep0state
= EP0_IN_DATA_PHASE_COMPLETE
;
1608 } else if (shutdown
) {
1609 ep0state
= EP0_REQUEUE
;
1612 case EP0_IN_DATA_PHASE_COMPLETE
: {
1614 * Normal case: TX packet (ep0_reply) is in flight; wait for
1615 * it to finish, then go back to REQUEUE->IDLE.
1617 * Shutdown case: Reset the TX channel, send -ESHUTDOWN
1618 * completion to the gadget driver, then REQUEUE->IDLE.
1620 if (udc
->ep0_req_completed
) {
1621 udc
->ep0_reply
= NULL
;
1622 bcm63xx_ep0_read_complete(udc
);
1624 * the "ack" sometimes gets eaten (see
1625 * bcm63xx_ep0_do_idle)
1627 ep0state
= EP0_REQUEUE
;
1628 } else if (shutdown
) {
1629 iudma_reset_channel(udc
, &udc
->iudma
[IUDMA_EP0_TXCHAN
]);
1630 bcm63xx_ep0_nuke_reply(udc
, 1);
1631 ep0state
= EP0_REQUEUE
;
1635 case EP0_OUT_DATA_PHASE_SETUP
:
1636 /* Similar behavior to EP0_IN_DATA_PHASE_SETUP */
1637 if (udc
->ep0_reply
) {
1638 bcm63xx_ep0_map_write(udc
, IUDMA_EP0_RXCHAN
,
1640 ep0state
= EP0_OUT_DATA_PHASE_COMPLETE
;
1641 } else if (shutdown
) {
1642 ep0state
= EP0_REQUEUE
;
1645 case EP0_OUT_DATA_PHASE_COMPLETE
: {
1646 /* Similar behavior to EP0_IN_DATA_PHASE_COMPLETE */
1647 if (udc
->ep0_req_completed
) {
1648 udc
->ep0_reply
= NULL
;
1649 bcm63xx_ep0_read_complete(udc
);
1651 /* send 0-byte ack to host */
1652 bcm63xx_ep0_internal_request(udc
, IUDMA_EP0_TXCHAN
, 0);
1653 ep0state
= EP0_OUT_STATUS_PHASE
;
1654 } else if (shutdown
) {
1655 iudma_reset_channel(udc
, &udc
->iudma
[IUDMA_EP0_RXCHAN
]);
1656 bcm63xx_ep0_nuke_reply(udc
, 0);
1657 ep0state
= EP0_REQUEUE
;
1661 case EP0_OUT_STATUS_PHASE
:
1663 * Normal case: 0-byte OUT ack packet is in flight; wait
1664 * for it to finish, then go back to REQUEUE->IDLE.
1666 * Shutdown case: just cancel the transmission. Don't bother
1667 * calling the completion, because it originated from this
1668 * function anyway. Then go back to REQUEUE->IDLE.
1670 if (udc
->ep0_req_completed
) {
1671 bcm63xx_ep0_read_complete(udc
);
1672 ep0state
= EP0_REQUEUE
;
1673 } else if (shutdown
) {
1674 iudma_reset_channel(udc
, &udc
->iudma
[IUDMA_EP0_TXCHAN
]);
1675 udc
->ep0_request
= NULL
;
1676 ep0state
= EP0_REQUEUE
;
1679 case EP0_IN_FAKE_STATUS_PHASE
: {
1681 * Normal case: we spoofed a SETUP packet and are now
1682 * waiting for the gadget driver to send a 0-byte reply.
1683 * This doesn't actually get sent to the HW because the
1684 * HW has already sent its own reply. Once we get the
1685 * response, return to IDLE.
1687 * Shutdown case: return to IDLE immediately.
1689 * Note that the ep0 RX descriptor has remained queued
1690 * (and possibly unfilled) during this entire transaction.
1691 * The HW datapath (IUDMA) never even sees SET_CONFIGURATION
1692 * or SET_INTERFACE transactions.
1694 struct usb_request
*r
= udc
->ep0_reply
;
1698 ep0state
= EP0_IDLE
;
1702 bcm63xx_ep0_complete(udc
, r
, 0);
1703 udc
->ep0_reply
= NULL
;
1704 ep0state
= EP0_IDLE
;
1711 if (udc
->ep0state
== ep0state
)
1714 udc
->ep0state
= ep0state
;
1719 * bcm63xx_ep0_process - ep0 worker thread / state machine.
1720 * @w: Workqueue struct.
1722 * bcm63xx_ep0_process is triggered any time an event occurs on ep0. It
1723 * is used to synchronize ep0 events and ensure that both HW and SW events
1724 * occur in a well-defined order. When the ep0 IUDMA queues are idle, it may
1725 * synthesize SET_CONFIGURATION / SET_INTERFACE requests that were consumed
1726 * by the USBD hardware.
1728 * The worker function will continue iterating around the state machine
1729 * until there is nothing left to do. Usually "nothing left to do" means
1730 * that we're waiting for a new event from the hardware.
1732 static void bcm63xx_ep0_process(struct work_struct
*w
)
1734 struct bcm63xx_udc
*udc
= container_of(w
, struct bcm63xx_udc
, ep0_wq
);
1735 spin_lock_irq(&udc
->lock
);
1736 while (bcm63xx_ep0_one_round(udc
) == 0)
1738 spin_unlock_irq(&udc
->lock
);
1741 /***********************************************************************
1742 * Standard UDC gadget operations
1743 ***********************************************************************/
1746 * bcm63xx_udc_get_frame - Read current SOF frame number from the HW.
1747 * @gadget: USB slave device.
1749 static int bcm63xx_udc_get_frame(struct usb_gadget
*gadget
)
1751 struct bcm63xx_udc
*udc
= gadget_to_udc(gadget
);
1753 return (usbd_readl(udc
, USBD_STATUS_REG
) &
1754 USBD_STATUS_SOF_MASK
) >> USBD_STATUS_SOF_SHIFT
;
1758 * bcm63xx_udc_pullup - Enable/disable pullup on D+ line.
1759 * @gadget: USB slave device.
1760 * @is_on: 0 to disable pullup, 1 to enable.
1762 * See notes in bcm63xx_select_pullup().
1764 static int bcm63xx_udc_pullup(struct usb_gadget
*gadget
, int is_on
)
1766 struct bcm63xx_udc
*udc
= gadget_to_udc(gadget
);
1767 unsigned long flags
;
1768 int i
, rc
= -EINVAL
;
1770 spin_lock_irqsave(&udc
->lock
, flags
);
1771 if (is_on
&& udc
->ep0state
== EP0_SHUTDOWN
) {
1772 udc
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1773 udc
->ep0state
= EP0_REQUEUE
;
1774 bcm63xx_fifo_setup(udc
);
1775 bcm63xx_fifo_reset(udc
);
1776 bcm63xx_ep_setup(udc
);
1778 bitmap_zero(&udc
->wedgemap
, BCM63XX_NUM_EP
);
1779 for (i
= 0; i
< BCM63XX_NUM_EP
; i
++)
1780 bcm63xx_set_stall(udc
, &udc
->bep
[i
], false);
1782 bcm63xx_set_ctrl_irqs(udc
, true);
1783 bcm63xx_select_pullup(gadget_to_udc(gadget
), true);
1785 } else if (!is_on
&& udc
->ep0state
!= EP0_SHUTDOWN
) {
1786 bcm63xx_select_pullup(gadget_to_udc(gadget
), false);
1788 udc
->ep0_req_shutdown
= 1;
1789 spin_unlock_irqrestore(&udc
->lock
, flags
);
1792 schedule_work(&udc
->ep0_wq
);
1793 if (udc
->ep0state
== EP0_SHUTDOWN
)
1797 bcm63xx_set_ctrl_irqs(udc
, false);
1798 cancel_work_sync(&udc
->ep0_wq
);
1802 spin_unlock_irqrestore(&udc
->lock
, flags
);
1807 * bcm63xx_udc_start - Start the controller.
1808 * @gadget: USB slave device.
1809 * @driver: Driver for USB slave devices.
1811 static int bcm63xx_udc_start(struct usb_gadget
*gadget
,
1812 struct usb_gadget_driver
*driver
)
1814 struct bcm63xx_udc
*udc
= gadget_to_udc(gadget
);
1815 unsigned long flags
;
1817 if (!driver
|| driver
->max_speed
< USB_SPEED_HIGH
||
1825 spin_lock_irqsave(&udc
->lock
, flags
);
1827 set_clocks(udc
, true);
1828 bcm63xx_fifo_setup(udc
);
1829 bcm63xx_ep_init(udc
);
1830 bcm63xx_ep_setup(udc
);
1831 bcm63xx_fifo_reset(udc
);
1832 bcm63xx_select_phy_mode(udc
, true);
1834 udc
->driver
= driver
;
1835 driver
->driver
.bus
= NULL
;
1836 udc
->gadget
.dev
.of_node
= udc
->dev
->of_node
;
1838 spin_unlock_irqrestore(&udc
->lock
, flags
);
1844 * bcm63xx_udc_stop - Shut down the controller.
1845 * @gadget: USB slave device.
1846 * @driver: Driver for USB slave devices.
1848 static int bcm63xx_udc_stop(struct usb_gadget
*gadget
)
1850 struct bcm63xx_udc
*udc
= gadget_to_udc(gadget
);
1851 unsigned long flags
;
1853 spin_lock_irqsave(&udc
->lock
, flags
);
1858 * If we switch the PHY too abruptly after dropping D+, the host
1859 * will often complain:
1861 * hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
1865 bcm63xx_select_phy_mode(udc
, false);
1866 set_clocks(udc
, false);
1868 spin_unlock_irqrestore(&udc
->lock
, flags
);
1873 static const struct usb_gadget_ops bcm63xx_udc_ops
= {
1874 .get_frame
= bcm63xx_udc_get_frame
,
1875 .pullup
= bcm63xx_udc_pullup
,
1876 .udc_start
= bcm63xx_udc_start
,
1877 .udc_stop
= bcm63xx_udc_stop
,
1880 /***********************************************************************
1882 ***********************************************************************/
1885 * bcm63xx_update_cfg_iface - Read current configuration/interface settings.
1886 * @udc: Reference to the device controller.
1888 * This controller intercepts SET_CONFIGURATION and SET_INTERFACE messages.
1889 * The driver never sees the raw control packets coming in on the ep0
1890 * IUDMA channel, but at least we get an interrupt event to tell us that
1891 * new values are waiting in the USBD_STATUS register.
1893 static void bcm63xx_update_cfg_iface(struct bcm63xx_udc
*udc
)
1895 u32 reg
= usbd_readl(udc
, USBD_STATUS_REG
);
1897 udc
->cfg
= (reg
& USBD_STATUS_CFG_MASK
) >> USBD_STATUS_CFG_SHIFT
;
1898 udc
->iface
= (reg
& USBD_STATUS_INTF_MASK
) >> USBD_STATUS_INTF_SHIFT
;
1899 udc
->alt_iface
= (reg
& USBD_STATUS_ALTINTF_MASK
) >>
1900 USBD_STATUS_ALTINTF_SHIFT
;
1901 bcm63xx_ep_setup(udc
);
1905 * bcm63xx_update_link_speed - Check to see if the link speed has changed.
1906 * @udc: Reference to the device controller.
1908 * The link speed update coincides with a SETUP IRQ. Returns 1 if the
1909 * speed has changed, so that the caller can update the endpoint settings.
1911 static int bcm63xx_update_link_speed(struct bcm63xx_udc
*udc
)
1913 u32 reg
= usbd_readl(udc
, USBD_STATUS_REG
);
1914 enum usb_device_speed oldspeed
= udc
->gadget
.speed
;
1916 switch ((reg
& USBD_STATUS_SPD_MASK
) >> USBD_STATUS_SPD_SHIFT
) {
1917 case BCM63XX_SPD_HIGH
:
1918 udc
->gadget
.speed
= USB_SPEED_HIGH
;
1920 case BCM63XX_SPD_FULL
:
1921 udc
->gadget
.speed
= USB_SPEED_FULL
;
1924 /* this should never happen */
1925 udc
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1927 "received SETUP packet with invalid link speed\n");
1931 if (udc
->gadget
.speed
!= oldspeed
) {
1932 dev_info(udc
->dev
, "link up, %s-speed mode\n",
1933 udc
->gadget
.speed
== USB_SPEED_HIGH
? "high" : "full");
1941 * bcm63xx_update_wedge - Iterate through wedged endpoints.
1942 * @udc: Reference to the device controller.
1943 * @new_status: true to "refresh" wedge status; false to clear it.
1945 * On a SETUP interrupt, we need to manually "refresh" the wedge status
1946 * because the controller hardware is designed to automatically clear
1947 * stalls in response to a CLEAR_FEATURE request from the host.
1949 * On a RESET interrupt, we do want to restore all wedged endpoints.
1951 static void bcm63xx_update_wedge(struct bcm63xx_udc
*udc
, bool new_status
)
1955 for_each_set_bit(i
, &udc
->wedgemap
, BCM63XX_NUM_EP
) {
1956 bcm63xx_set_stall(udc
, &udc
->bep
[i
], new_status
);
1958 clear_bit(i
, &udc
->wedgemap
);
1963 * bcm63xx_udc_ctrl_isr - ISR for control path events (USBD).
1964 * @irq: IRQ number (unused).
1965 * @dev_id: Reference to the device controller.
1967 * This is where we handle link (VBUS) down, USB reset, speed changes,
1968 * SET_CONFIGURATION, and SET_INTERFACE events.
1970 static irqreturn_t
bcm63xx_udc_ctrl_isr(int irq
, void *dev_id
)
1972 struct bcm63xx_udc
*udc
= dev_id
;
1974 bool disconnected
= false, bus_reset
= false;
1976 stat
= usbd_readl(udc
, USBD_EVENT_IRQ_STATUS_REG
) &
1977 usbd_readl(udc
, USBD_EVENT_IRQ_MASK_REG
);
1979 usbd_writel(udc
, stat
, USBD_EVENT_IRQ_STATUS_REG
);
1981 spin_lock(&udc
->lock
);
1982 if (stat
& BIT(USBD_EVENT_IRQ_USB_LINK
)) {
1985 if (!(usbd_readl(udc
, USBD_EVENTS_REG
) &
1986 USBD_EVENTS_USB_LINK_MASK
) &&
1987 udc
->gadget
.speed
!= USB_SPEED_UNKNOWN
)
1988 dev_info(udc
->dev
, "link down\n");
1990 udc
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1991 disconnected
= true;
1993 if (stat
& BIT(USBD_EVENT_IRQ_USB_RESET
)) {
1994 bcm63xx_fifo_setup(udc
);
1995 bcm63xx_fifo_reset(udc
);
1996 bcm63xx_ep_setup(udc
);
1998 bcm63xx_update_wedge(udc
, false);
2000 udc
->ep0_req_reset
= 1;
2001 schedule_work(&udc
->ep0_wq
);
2004 if (stat
& BIT(USBD_EVENT_IRQ_SETUP
)) {
2005 if (bcm63xx_update_link_speed(udc
)) {
2006 bcm63xx_fifo_setup(udc
);
2007 bcm63xx_ep_setup(udc
);
2009 bcm63xx_update_wedge(udc
, true);
2011 if (stat
& BIT(USBD_EVENT_IRQ_SETCFG
)) {
2012 bcm63xx_update_cfg_iface(udc
);
2013 udc
->ep0_req_set_cfg
= 1;
2014 schedule_work(&udc
->ep0_wq
);
2016 if (stat
& BIT(USBD_EVENT_IRQ_SETINTF
)) {
2017 bcm63xx_update_cfg_iface(udc
);
2018 udc
->ep0_req_set_iface
= 1;
2019 schedule_work(&udc
->ep0_wq
);
2021 spin_unlock(&udc
->lock
);
2023 if (disconnected
&& udc
->driver
)
2024 udc
->driver
->disconnect(&udc
->gadget
);
2025 else if (bus_reset
&& udc
->driver
)
2026 usb_gadget_udc_reset(&udc
->gadget
, udc
->driver
);
2032 * bcm63xx_udc_data_isr - ISR for data path events (IUDMA).
2033 * @irq: IRQ number (unused).
2034 * @dev_id: Reference to the IUDMA channel that generated the interrupt.
2036 * For the two ep0 channels, we have special handling that triggers the
2037 * ep0 worker thread. For normal bulk/intr channels, either queue up
2038 * the next buffer descriptor for the transaction (incomplete transaction),
2039 * or invoke the completion callback (complete transactions).
2041 static irqreturn_t
bcm63xx_udc_data_isr(int irq
, void *dev_id
)
2043 struct iudma_ch
*iudma
= dev_id
;
2044 struct bcm63xx_udc
*udc
= iudma
->udc
;
2045 struct bcm63xx_ep
*bep
;
2046 struct usb_request
*req
= NULL
;
2047 struct bcm63xx_req
*breq
= NULL
;
2049 bool is_done
= false;
2051 spin_lock(&udc
->lock
);
2053 usb_dmac_writel(udc
, ENETDMAC_IR_BUFDONE_MASK
,
2054 ENETDMAC_IR_REG
, iudma
->ch_idx
);
2056 rc
= iudma_read(udc
, iudma
);
2058 /* special handling for EP0 RX (0) and TX (1) */
2059 if (iudma
->ch_idx
== IUDMA_EP0_RXCHAN
||
2060 iudma
->ch_idx
== IUDMA_EP0_TXCHAN
) {
2061 req
= udc
->ep0_request
;
2062 breq
= our_req(req
);
2064 /* a single request could require multiple submissions */
2068 if (req
->actual
>= req
->length
|| breq
->bd_bytes
> rc
) {
2069 udc
->ep0_req_completed
= 1;
2071 schedule_work(&udc
->ep0_wq
);
2073 /* "actual" on a ZLP is 1 byte */
2074 req
->actual
= min(req
->actual
, req
->length
);
2076 /* queue up the next BD (same request) */
2077 iudma_write(udc
, iudma
, breq
);
2080 } else if (!list_empty(&bep
->queue
)) {
2081 breq
= list_first_entry(&bep
->queue
, struct bcm63xx_req
, queue
);
2087 if (req
->actual
>= req
->length
|| breq
->bd_bytes
> rc
) {
2089 list_del(&breq
->queue
);
2091 req
->actual
= min(req
->actual
, req
->length
);
2093 if (!list_empty(&bep
->queue
)) {
2094 struct bcm63xx_req
*next
;
2096 next
= list_first_entry(&bep
->queue
,
2097 struct bcm63xx_req
, queue
);
2098 iudma_write(udc
, iudma
, next
);
2101 iudma_write(udc
, iudma
, breq
);
2105 spin_unlock(&udc
->lock
);
2108 usb_gadget_unmap_request(&udc
->gadget
, req
, iudma
->is_tx
);
2110 req
->complete(&bep
->ep
, req
);
2116 /***********************************************************************
2118 ***********************************************************************/
2121 * bcm63xx_usbd_dbg_show - Show USBD controller state.
2122 * @s: seq_file to which the information will be written.
2125 * This file nominally shows up as /sys/kernel/debug/bcm63xx_udc/usbd
2127 static int bcm63xx_usbd_dbg_show(struct seq_file
*s
, void *p
)
2129 struct bcm63xx_udc
*udc
= s
->private;
2134 seq_printf(s
, "ep0 state: %s\n",
2135 bcm63xx_ep0_state_names
[udc
->ep0state
]);
2136 seq_printf(s
, " pending requests: %s%s%s%s%s%s%s\n",
2137 udc
->ep0_req_reset
? "reset " : "",
2138 udc
->ep0_req_set_cfg
? "set_cfg " : "",
2139 udc
->ep0_req_set_iface
? "set_iface " : "",
2140 udc
->ep0_req_shutdown
? "shutdown " : "",
2141 udc
->ep0_request
? "pending " : "",
2142 udc
->ep0_req_completed
? "completed " : "",
2143 udc
->ep0_reply
? "reply " : "");
2144 seq_printf(s
, "cfg: %d; iface: %d; alt_iface: %d\n",
2145 udc
->cfg
, udc
->iface
, udc
->alt_iface
);
2146 seq_printf(s
, "regs:\n");
2147 seq_printf(s
, " control: %08x; straps: %08x; status: %08x\n",
2148 usbd_readl(udc
, USBD_CONTROL_REG
),
2149 usbd_readl(udc
, USBD_STRAPS_REG
),
2150 usbd_readl(udc
, USBD_STATUS_REG
));
2151 seq_printf(s
, " events: %08x; stall: %08x\n",
2152 usbd_readl(udc
, USBD_EVENTS_REG
),
2153 usbd_readl(udc
, USBD_STALL_REG
));
2157 DEFINE_SHOW_ATTRIBUTE(bcm63xx_usbd_dbg
);
2160 * bcm63xx_iudma_dbg_show - Show IUDMA status and descriptors.
2161 * @s: seq_file to which the information will be written.
2164 * This file nominally shows up as /sys/kernel/debug/bcm63xx_udc/iudma
2166 static int bcm63xx_iudma_dbg_show(struct seq_file
*s
, void *p
)
2168 struct bcm63xx_udc
*udc
= s
->private;
2175 for (ch_idx
= 0; ch_idx
< BCM63XX_NUM_IUDMA
; ch_idx
++) {
2176 struct iudma_ch
*iudma
= &udc
->iudma
[ch_idx
];
2177 struct list_head
*pos
;
2179 seq_printf(s
, "IUDMA channel %d -- ", ch_idx
);
2180 switch (iudma_defaults
[ch_idx
].ep_type
) {
2182 seq_printf(s
, "control");
2185 seq_printf(s
, "bulk");
2188 seq_printf(s
, "interrupt");
2191 seq_printf(s
, ch_idx
& 0x01 ? " tx" : " rx");
2192 seq_printf(s
, " [ep%d]:\n",
2193 max_t(int, iudma_defaults
[ch_idx
].ep_num
, 0));
2194 seq_printf(s
, " cfg: %08x; irqstat: %08x; irqmask: %08x; maxburst: %08x\n",
2195 usb_dmac_readl(udc
, ENETDMAC_CHANCFG_REG
, ch_idx
),
2196 usb_dmac_readl(udc
, ENETDMAC_IR_REG
, ch_idx
),
2197 usb_dmac_readl(udc
, ENETDMAC_IRMASK_REG
, ch_idx
),
2198 usb_dmac_readl(udc
, ENETDMAC_MAXBURST_REG
, ch_idx
));
2200 sram2
= usb_dmas_readl(udc
, ENETDMAS_SRAM2_REG
, ch_idx
);
2201 sram3
= usb_dmas_readl(udc
, ENETDMAS_SRAM3_REG
, ch_idx
);
2202 seq_printf(s
, " base: %08x; index: %04x_%04x; desc: %04x_%04x %08x\n",
2203 usb_dmas_readl(udc
, ENETDMAS_RSTART_REG
, ch_idx
),
2204 sram2
>> 16, sram2
& 0xffff,
2205 sram3
>> 16, sram3
& 0xffff,
2206 usb_dmas_readl(udc
, ENETDMAS_SRAM4_REG
, ch_idx
));
2207 seq_printf(s
, " desc: %d/%d used", iudma
->n_bds_used
,
2212 list_for_each(pos
, &iudma
->bep
->queue
)
2214 seq_printf(s
, "; %d queued\n", i
);
2216 seq_printf(s
, "\n");
2219 for (i
= 0; i
< iudma
->n_bds
; i
++) {
2220 struct bcm_enet_desc
*d
= &iudma
->bd_ring
[i
];
2222 seq_printf(s
, " %03x (%02x): len_stat: %04x_%04x; pa %08x",
2224 d
->len_stat
>> 16, d
->len_stat
& 0xffff,
2226 if (d
== iudma
->read_bd
)
2227 seq_printf(s
, " <<RD");
2228 if (d
== iudma
->write_bd
)
2229 seq_printf(s
, " <<WR");
2230 seq_printf(s
, "\n");
2233 seq_printf(s
, "\n");
2238 DEFINE_SHOW_ATTRIBUTE(bcm63xx_iudma_dbg
);
2241 * bcm63xx_udc_init_debugfs - Create debugfs entries.
2242 * @udc: Reference to the device controller.
2244 static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc
*udc
)
2246 struct dentry
*root
;
2248 if (!IS_ENABLED(CONFIG_USB_GADGET_DEBUG_FS
))
2251 root
= debugfs_create_dir(udc
->gadget
.name
, NULL
);
2252 udc
->debugfs_root
= root
;
2254 debugfs_create_file("usbd", 0400, root
, udc
, &bcm63xx_usbd_dbg_fops
);
2255 debugfs_create_file("iudma", 0400, root
, udc
, &bcm63xx_iudma_dbg_fops
);
2259 * bcm63xx_udc_cleanup_debugfs - Remove debugfs entries.
2260 * @udc: Reference to the device controller.
2262 * debugfs_remove() is safe to call with a NULL argument.
2264 static void bcm63xx_udc_cleanup_debugfs(struct bcm63xx_udc
*udc
)
2266 debugfs_remove_recursive(udc
->debugfs_root
);
2269 /***********************************************************************
2271 ***********************************************************************/
2274 * bcm63xx_udc_probe - Initialize a new instance of the UDC.
2275 * @pdev: Platform device struct from the bcm63xx BSP code.
2277 * Note that platform data is required, because pd.port_no varies from chip
2278 * to chip and is used to switch the correct USB port to device mode.
2280 static int bcm63xx_udc_probe(struct platform_device
*pdev
)
2282 struct device
*dev
= &pdev
->dev
;
2283 struct bcm63xx_usbd_platform_data
*pd
= dev_get_platdata(dev
);
2284 struct bcm63xx_udc
*udc
;
2285 struct resource
*res
;
2286 int rc
= -ENOMEM
, i
, irq
;
2288 udc
= devm_kzalloc(dev
, sizeof(*udc
), GFP_KERNEL
);
2292 platform_set_drvdata(pdev
, udc
);
2297 dev_err(dev
, "missing platform data\n");
2301 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2302 udc
->usbd_regs
= devm_ioremap_resource(dev
, res
);
2303 if (IS_ERR(udc
->usbd_regs
))
2304 return PTR_ERR(udc
->usbd_regs
);
2306 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
2307 udc
->iudma_regs
= devm_ioremap_resource(dev
, res
);
2308 if (IS_ERR(udc
->iudma_regs
))
2309 return PTR_ERR(udc
->iudma_regs
);
2311 spin_lock_init(&udc
->lock
);
2312 INIT_WORK(&udc
->ep0_wq
, bcm63xx_ep0_process
);
2314 udc
->gadget
.ops
= &bcm63xx_udc_ops
;
2315 udc
->gadget
.name
= dev_name(dev
);
2317 if (!pd
->use_fullspeed
&& !use_fullspeed
)
2318 udc
->gadget
.max_speed
= USB_SPEED_HIGH
;
2320 udc
->gadget
.max_speed
= USB_SPEED_FULL
;
2322 /* request clocks, allocate buffers, and clear any pending IRQs */
2323 rc
= bcm63xx_init_udc_hw(udc
);
2329 /* IRQ resource #0: control interrupt (VBUS, speed, etc.) */
2330 irq
= platform_get_irq(pdev
, 0);
2332 dev_err(dev
, "missing IRQ resource #0\n");
2335 if (devm_request_irq(dev
, irq
, &bcm63xx_udc_ctrl_isr
, 0,
2336 dev_name(dev
), udc
) < 0)
2337 goto report_request_failure
;
2339 /* IRQ resources #1-6: data interrupts for IUDMA channels 0-5 */
2340 for (i
= 0; i
< BCM63XX_NUM_IUDMA
; i
++) {
2341 irq
= platform_get_irq(pdev
, i
+ 1);
2343 dev_err(dev
, "missing IRQ resource #%d\n", i
+ 1);
2346 if (devm_request_irq(dev
, irq
, &bcm63xx_udc_data_isr
, 0,
2347 dev_name(dev
), &udc
->iudma
[i
]) < 0)
2348 goto report_request_failure
;
2351 bcm63xx_udc_init_debugfs(udc
);
2352 rc
= usb_add_gadget_udc(dev
, &udc
->gadget
);
2356 bcm63xx_udc_cleanup_debugfs(udc
);
2358 bcm63xx_uninit_udc_hw(udc
);
2361 report_request_failure
:
2362 dev_err(dev
, "error requesting IRQ #%d\n", irq
);
2367 * bcm63xx_udc_remove - Remove the device from the system.
2368 * @pdev: Platform device struct from the bcm63xx BSP code.
2370 static int bcm63xx_udc_remove(struct platform_device
*pdev
)
2372 struct bcm63xx_udc
*udc
= platform_get_drvdata(pdev
);
2374 bcm63xx_udc_cleanup_debugfs(udc
);
2375 usb_del_gadget_udc(&udc
->gadget
);
2376 BUG_ON(udc
->driver
);
2378 bcm63xx_uninit_udc_hw(udc
);
2383 static struct platform_driver bcm63xx_udc_driver
= {
2384 .probe
= bcm63xx_udc_probe
,
2385 .remove
= bcm63xx_udc_remove
,
2387 .name
= DRV_MODULE_NAME
,
2390 module_platform_driver(bcm63xx_udc_driver
);
2392 MODULE_DESCRIPTION("BCM63xx USB Peripheral Controller");
2393 MODULE_AUTHOR("Kevin Cernekee <cernekee@gmail.com>");
2394 MODULE_LICENSE("GPL");
2395 MODULE_ALIAS("platform:" DRV_MODULE_NAME
);