1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Renesas USBF USB Function driver
4  *
5  * Copyright 2022 Schneider Electric
6  * Author: Herve Codina <herve.codina@bootlin.com>
7  */
8 
9 #include <linux/delay.h>
10 #include <linux/dma-mapping.h>
11 #include <linux/interrupt.h>
12 #include <linux/iopoll.h>
13 #include <linux/kernel.h>
14 #include <linux/kfifo.h>
15 #include <linux/module.h>
16 #include <linux/of_address.h>
17 #include <linux/of_irq.h>
18 #include <linux/of_platform.h>
19 #include <linux/pm_runtime.h>
20 #include <linux/types.h>
21 #include <linux/usb/composite.h>
22 #include <linux/usb/gadget.h>
23 #include <linux/usb/role.h>
24 
25 #define USBF_NUM_ENDPOINTS	16
26 #define USBF_EP0_MAX_PCKT_SIZE	64
27 
28 /* EPC registers */
29 #define USBF_REG_USB_CONTROL	0x000
30 #define     USBF_USB_PUE2		BIT(2)
31 #define     USBF_USB_CONNECTB		BIT(3)
32 #define     USBF_USB_DEFAULT		BIT(4)
33 #define     USBF_USB_CONF		BIT(5)
34 #define     USBF_USB_SUSPEND		BIT(6)
35 #define     USBF_USB_RSUM_IN		BIT(7)
36 #define     USBF_USB_SOF_RCV		BIT(8)
37 #define     USBF_USB_FORCEFS		BIT(9)
38 #define     USBF_USB_INT_SEL		BIT(10)
39 #define     USBF_USB_SOF_CLK_MODE	BIT(11)
40 
41 #define USBF_REG_USB_STATUS	0x004
42 #define     USBF_USB_RSUM_OUT		BIT(1)
43 #define     USBF_USB_SPND_OUT		BIT(2)
44 #define     USBF_USB_USB_RST		BIT(3)
45 #define     USBF_USB_DEFAULT_ST		BIT(4)
46 #define     USBF_USB_CONF_ST		BIT(5)
47 #define     USBF_USB_SPEED_MODE		BIT(6)
48 #define     USBF_USB_SOF_DELAY_STATUS	BIT(31)
49 
50 #define USBF_REG_USB_ADDRESS	0x008
51 #define     USBF_USB_SOF_STATUS		BIT(15)
52 #define     USBF_USB_SET_USB_ADDR(_a)	((_a) << 16)
53 #define     USBF_USB_GET_FRAME(_r)	((_r) & 0x7FF)
54 
55 #define USBF_REG_SETUP_DATA0	0x018
56 #define USBF_REG_SETUP_DATA1	0x01C
57 #define USBF_REG_USB_INT_STA	0x020
58 #define     USBF_USB_RSUM_INT		BIT(1)
59 #define     USBF_USB_SPND_INT		BIT(2)
60 #define     USBF_USB_USB_RST_INT	BIT(3)
61 #define     USBF_USB_SOF_INT		BIT(4)
62 #define     USBF_USB_SOF_ERROR_INT	BIT(5)
63 #define     USBF_USB_SPEED_MODE_INT	BIT(6)
64 #define     USBF_USB_EPN_INT(_n)	(BIT(8) << (_n)) /* n=0..15 */
65 
66 #define USBF_REG_USB_INT_ENA	0x024
67 #define     USBF_USB_RSUM_EN		BIT(1)
68 #define     USBF_USB_SPND_EN		BIT(2)
69 #define     USBF_USB_USB_RST_EN		BIT(3)
70 #define     USBF_USB_SOF_EN		BIT(4)
71 #define     USBF_USB_SOF_ERROR_EN	BIT(5)
72 #define     USBF_USB_SPEED_MODE_EN	BIT(6)
73 #define     USBF_USB_EPN_EN(_n)		(BIT(8) << (_n)) /* n=0..15 */
74 
75 #define USBF_BASE_EP0		0x028
76 /* EP0 registers offsets from Base + USBF_BASE_EP0 (EP0 regs area) */
77 #define     USBF_REG_EP0_CONTROL	0x00
78 #define         USBF_EP0_ONAK			BIT(0)
79 #define         USBF_EP0_INAK			BIT(1)
80 #define         USBF_EP0_STL			BIT(2)
81 #define         USBF_EP0_PERR_NAK_CLR		BIT(3)
82 #define         USBF_EP0_INAK_EN		BIT(4)
83 #define         USBF_EP0_DW_MASK		(0x3 << 5)
84 #define         USBF_EP0_DW(_s)			((_s) << 5)
85 #define         USBF_EP0_DEND			BIT(7)
86 #define         USBF_EP0_BCLR			BIT(8)
87 #define         USBF_EP0_PIDCLR			BIT(9)
88 #define         USBF_EP0_AUTO			BIT(16)
89 #define         USBF_EP0_OVERSEL		BIT(17)
90 #define         USBF_EP0_STGSEL			BIT(18)
91 
92 #define     USBF_REG_EP0_STATUS		0x04
93 #define         USBF_EP0_SETUP_INT		BIT(0)
94 #define         USBF_EP0_STG_START_INT		BIT(1)
95 #define         USBF_EP0_STG_END_INT		BIT(2)
96 #define         USBF_EP0_STALL_INT		BIT(3)
97 #define         USBF_EP0_IN_INT			BIT(4)
98 #define         USBF_EP0_OUT_INT		BIT(5)
99 #define         USBF_EP0_OUT_OR_INT		BIT(6)
100 #define         USBF_EP0_OUT_NULL_INT		BIT(7)
101 #define         USBF_EP0_IN_EMPTY		BIT(8)
102 #define         USBF_EP0_IN_FULL		BIT(9)
103 #define         USBF_EP0_IN_DATA		BIT(10)
104 #define         USBF_EP0_IN_NAK_INT		BIT(11)
105 #define         USBF_EP0_OUT_EMPTY		BIT(12)
106 #define         USBF_EP0_OUT_FULL		BIT(13)
107 #define         USBF_EP0_OUT_NULL		BIT(14)
108 #define         USBF_EP0_OUT_NAK_INT		BIT(15)
109 #define         USBF_EP0_PERR_NAK_INT		BIT(16)
110 #define         USBF_EP0_PERR_NAK		BIT(17)
111 #define         USBF_EP0_PID			BIT(18)
112 
113 #define     USBF_REG_EP0_INT_ENA	0x08
114 #define         USBF_EP0_SETUP_EN		BIT(0)
115 #define         USBF_EP0_STG_START_EN		BIT(1)
116 #define         USBF_EP0_STG_END_EN		BIT(2)
117 #define         USBF_EP0_STALL_EN		BIT(3)
118 #define         USBF_EP0_IN_EN			BIT(4)
119 #define         USBF_EP0_OUT_EN			BIT(5)
120 #define         USBF_EP0_OUT_OR_EN		BIT(6)
121 #define         USBF_EP0_OUT_NULL_EN		BIT(7)
122 #define         USBF_EP0_IN_NAK_EN		BIT(11)
123 #define         USBF_EP0_OUT_NAK_EN		BIT(15)
124 #define         USBF_EP0_PERR_NAK_EN		BIT(16)
125 
126 #define     USBF_REG_EP0_LENGTH		0x0C
127 #define         USBF_EP0_LDATA			(0x7FF << 0)
128 #define     USBF_REG_EP0_READ		0x10
129 #define     USBF_REG_EP0_WRITE		0x14
130 
131 #define USBF_BASE_EPN(_n)	(0x040 + (_n) * 0x020)
132 /* EPn registers offsets from Base + USBF_BASE_EPN(n-1). n=1..15 */
133 #define     USBF_REG_EPN_CONTROL	0x000
134 #define         USBF_EPN_ONAK			BIT(0)
135 #define         USBF_EPN_OSTL			BIT(2)
136 #define         USBF_EPN_ISTL			BIT(3)
137 #define         USBF_EPN_OSTL_EN		BIT(4)
138 #define         USBF_EPN_DW_MASK		(0x3 << 5)
139 #define         USBF_EPN_DW(_s)			((_s) << 5)
140 #define         USBF_EPN_DEND			BIT(7)
141 #define         USBF_EPN_CBCLR			BIT(8)
142 #define         USBF_EPN_BCLR			BIT(9)
143 #define         USBF_EPN_OPIDCLR		BIT(10)
144 #define         USBF_EPN_IPIDCLR		BIT(11)
145 #define         USBF_EPN_AUTO			BIT(16)
146 #define         USBF_EPN_OVERSEL		BIT(17)
147 #define         USBF_EPN_MODE_MASK		(0x3 << 24)
148 #define         USBF_EPN_MODE_BULK		(0x0 << 24)
149 #define         USBF_EPN_MODE_INTR		(0x1 << 24)
150 #define         USBF_EPN_MODE_ISO		(0x2 << 24)
151 #define         USBF_EPN_DIR0			BIT(26)
152 #define         USBF_EPN_BUF_TYPE_DOUBLE	BIT(30)
153 #define         USBF_EPN_EN			BIT(31)
154 
155 #define     USBF_REG_EPN_STATUS		0x004
156 #define         USBF_EPN_IN_EMPTY		BIT(0)
157 #define         USBF_EPN_IN_FULL		BIT(1)
158 #define         USBF_EPN_IN_DATA		BIT(2)
159 #define         USBF_EPN_IN_INT			BIT(3)
160 #define         USBF_EPN_IN_STALL_INT		BIT(4)
161 #define         USBF_EPN_IN_NAK_ERR_INT		BIT(5)
162 #define         USBF_EPN_IN_END_INT		BIT(7)
163 #define         USBF_EPN_IPID			BIT(10)
164 #define         USBF_EPN_OUT_EMPTY		BIT(16)
165 #define         USBF_EPN_OUT_FULL		BIT(17)
166 #define         USBF_EPN_OUT_NULL_INT		BIT(18)
167 #define         USBF_EPN_OUT_INT		BIT(19)
168 #define         USBF_EPN_OUT_STALL_INT		BIT(20)
169 #define         USBF_EPN_OUT_NAK_ERR_INT	BIT(21)
170 #define         USBF_EPN_OUT_OR_INT		BIT(22)
171 #define         USBF_EPN_OUT_END_INT		BIT(23)
172 #define         USBF_EPN_ISO_CRC		BIT(24)
173 #define         USBF_EPN_ISO_OR			BIT(26)
174 #define         USBF_EPN_OUT_NOTKN		BIT(27)
175 #define         USBF_EPN_ISO_OPID		BIT(28)
176 #define         USBF_EPN_ISO_PIDERR		BIT(29)
177 
178 #define     USBF_REG_EPN_INT_ENA	0x008
179 #define         USBF_EPN_IN_EN			BIT(3)
180 #define         USBF_EPN_IN_STALL_EN		BIT(4)
181 #define         USBF_EPN_IN_NAK_ERR_EN		BIT(5)
182 #define         USBF_EPN_IN_END_EN		BIT(7)
183 #define         USBF_EPN_OUT_NULL_EN		BIT(18)
184 #define         USBF_EPN_OUT_EN			BIT(19)
185 #define         USBF_EPN_OUT_STALL_EN		BIT(20)
186 #define         USBF_EPN_OUT_NAK_ERR_EN		BIT(21)
187 #define         USBF_EPN_OUT_OR_EN		BIT(22)
188 #define         USBF_EPN_OUT_END_EN		BIT(23)
189 
190 #define     USBF_REG_EPN_DMA_CTRL	0x00C
191 #define         USBF_EPN_DMAMODE0		BIT(0)
192 #define         USBF_EPN_DMA_EN			BIT(4)
193 #define         USBF_EPN_STOP_SET		BIT(8)
194 #define         USBF_EPN_BURST_SET		BIT(9)
195 #define         USBF_EPN_DEND_SET		BIT(10)
196 #define         USBF_EPN_STOP_MODE		BIT(11)
197 
198 #define     USBF_REG_EPN_PCKT_ADRS	0x010
199 #define         USBF_EPN_MPKT(_l)		((_l) << 0)
200 #define         USBF_EPN_BASEAD(_a)		((_a) << 16)
201 
202 #define     USBF_REG_EPN_LEN_DCNT	0x014
203 #define         USBF_EPN_GET_LDATA(_r)		((_r) & 0x7FF)
204 #define         USBF_EPN_SET_DMACNT(_c)		((_c) << 16)
205 #define         USBF_EPN_GET_DMACNT(_r)		(((_r) >> 16) & 0x1ff)
206 
207 #define     USBF_REG_EPN_READ		0x018
208 #define     USBF_REG_EPN_WRITE		0x01C
209 
210 /* AHB-EPC Bridge registers */
211 #define USBF_REG_AHBSCTR	0x1000
212 #define USBF_REG_AHBMCTR	0x1004
213 #define     USBF_SYS_WBURST_TYPE	BIT(2)
214 #define     USBF_SYS_ARBITER_CTR	BIT(31)
215 
216 #define USBF_REG_AHBBINT	0x1008
217 #define     USBF_SYS_ERR_MASTER		 (0x0F << 0)
218 #define     USBF_SYS_SBUS_ERRINT0	 BIT(4)
219 #define     USBF_SYS_SBUS_ERRINT1	 BIT(5)
220 #define     USBF_SYS_MBUS_ERRINT	 BIT(6)
221 #define     USBF_SYS_VBUS_INT		 BIT(13)
222 #define     USBF_SYS_DMA_ENDINT_EPN(_n)	 (BIT(16) << (_n)) /* _n=1..15 */
223 
224 #define USBF_REG_AHBBINTEN	0x100C
225 #define     USBF_SYS_SBUS_ERRINT0EN	  BIT(4)
226 #define     USBF_SYS_SBUS_ERRINT1EN	  BIT(5)
227 #define     USBF_SYS_MBUS_ERRINTEN	  BIT(6)
228 #define     USBF_SYS_VBUS_INTEN		  BIT(13)
229 #define     USBF_SYS_DMA_ENDINTEN_EPN(_n) (BIT(16) << (_n)) /* _n=1..15 */
230 
231 #define USBF_REG_EPCTR		0x1010
232 #define     USBF_SYS_EPC_RST		BIT(0)
233 #define     USBF_SYS_PLL_RST		BIT(2)
234 #define     USBF_SYS_PLL_LOCK		BIT(4)
235 #define     USBF_SYS_PLL_RESUME		BIT(5)
236 #define     USBF_SYS_VBUS_LEVEL		BIT(8)
237 #define     USBF_SYS_DIRPD		BIT(12)
238 
239 #define USBF_REG_USBSSVER	0x1020
240 #define USBF_REG_USBSSCONF	0x1024
241 #define    USBF_SYS_DMA_AVAILABLE(_n)	(BIT(0) << (_n)) /* _n=0..15 */
242 #define    USBF_SYS_EP_AVAILABLE(_n)	(BIT(16) << (_n)) /* _n=0..15 */
243 
244 #define USBF_BASE_DMA_EPN(_n)	(0x1110 + (_n) * 0x010)
245 /* EPn DMA registers offsets from Base USBF_BASE_DMA_EPN(n-1). n=1..15*/
246 #define     USBF_REG_DMA_EPN_DCR1	0x00
247 #define         USBF_SYS_EPN_REQEN		BIT(0)
248 #define         USBF_SYS_EPN_DIR0		BIT(1)
249 #define         USBF_SYS_EPN_SET_DMACNT(_c)	((_c) << 16)
250 #define         USBF_SYS_EPN_GET_DMACNT(_r)	(((_r) >> 16) & 0x0FF)
251 
252 #define     USBF_REG_DMA_EPN_DCR2	0x04
253 #define         USBF_SYS_EPN_MPKT(_s)		((_s) << 0)
254 #define         USBF_SYS_EPN_LMPKT(_l)		((_l) << 16)
255 
256 #define     USBF_REG_DMA_EPN_TADR	0x08
257 
258 /* USB request */
259 struct usbf_req {
260 	struct usb_request	req;
261 	struct list_head	queue;
262 	unsigned int		is_zero_sent : 1;
263 	unsigned int		is_mapped : 1;
264 	enum {
265 		USBF_XFER_START,
266 		USBF_XFER_WAIT_DMA,
267 		USBF_XFER_SEND_NULL,
268 		USBF_XFER_WAIT_END,
269 		USBF_XFER_WAIT_DMA_SHORT,
270 		USBF_XFER_WAIT_BRIDGE,
271 	}			xfer_step;
272 	size_t			dma_size;
273 };
274 
275 /* USB Endpoint */
276 struct usbf_ep {
277 	struct usb_ep		ep;
278 	char			name[32];
279 	struct list_head	queue;
280 	unsigned int		is_processing : 1;
281 	unsigned int		is_in : 1;
282 	struct			usbf_udc *udc;
283 	void __iomem		*regs;
284 	void __iomem		*dma_regs;
285 	unsigned int		id : 8;
286 	unsigned int		disabled : 1;
287 	unsigned int		is_wedged : 1;
288 	unsigned int		delayed_status : 1;
289 	u32			status;
290 	void			(*bridge_on_dma_end)(struct usbf_ep *ep);
291 };
292 
293 enum usbf_ep0state {
294 	EP0_IDLE,
295 	EP0_IN_DATA_PHASE,
296 	EP0_OUT_DATA_PHASE,
297 	EP0_OUT_STATUS_START_PHASE,
298 	EP0_OUT_STATUS_PHASE,
299 	EP0_OUT_STATUS_END_PHASE,
300 	EP0_IN_STATUS_START_PHASE,
301 	EP0_IN_STATUS_PHASE,
302 	EP0_IN_STATUS_END_PHASE,
303 };
304 
305 struct usbf_udc {
306 	struct usb_gadget		gadget;
307 	struct usb_gadget_driver	*driver;
308 	struct device			*dev;
309 	void __iomem			*regs;
310 	spinlock_t			lock;
311 	bool				is_remote_wakeup;
312 	bool				is_usb_suspended;
313 	struct usbf_ep			ep[USBF_NUM_ENDPOINTS];
314 	/* for EP0 control messages */
315 	enum usbf_ep0state		ep0state;
316 	struct usbf_req			setup_reply;
317 	u8				ep0_buf[USBF_EP0_MAX_PCKT_SIZE];
318 };
319 
320 struct usbf_ep_info {
321 	const char		*name;
322 	struct usb_ep_caps	caps;
323 	u16			base_addr;
324 	unsigned int		is_double : 1;
325 	u16			maxpacket_limit;
326 };
327 
328 #define USBF_SINGLE_BUFFER 0
329 #define USBF_DOUBLE_BUFFER 1
330 #define USBF_EP_INFO(_name, _caps, _base_addr, _is_double, _maxpacket_limit)  \
331 	{                                                                     \
332 		.name            = _name,                                     \
333 		.caps            = _caps,                                     \
334 		.base_addr       = _base_addr,                                \
335 		.is_double       = _is_double,                                \
336 		.maxpacket_limit = _maxpacket_limit,                          \
337 	}
338 
339 /* This table is computed from the recommended values provided in the SOC
340  * datasheet. The buffer type (single/double) and the endpoint type cannot
341  * be changed. The mapping in internal RAM (base_addr and number of words)
342  * for each endpoints depends on the max packet size and the buffer type.
343  */
344 static const struct usbf_ep_info usbf_ep_info[USBF_NUM_ENDPOINTS] = {
345 	/* ep0: buf @0x0000 64 bytes, fixed 32 words */
346 	[0] = USBF_EP_INFO("ep0-ctrl",
347 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL,
348 				       USB_EP_CAPS_DIR_ALL),
349 			   0x0000, USBF_SINGLE_BUFFER, USBF_EP0_MAX_PCKT_SIZE),
350 	/* ep1: buf @0x0020, 2 buffers 512 bytes -> (512 * 2 / 4) words */
351 	[1] = USBF_EP_INFO("ep1-bulk",
352 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK,
353 				       USB_EP_CAPS_DIR_ALL),
354 			   0x0020, USBF_DOUBLE_BUFFER, 512),
355 	/* ep2: buf @0x0120, 2 buffers 512 bytes -> (512 * 2 / 4) words */
356 	[2] = USBF_EP_INFO("ep2-bulk",
357 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK,
358 				       USB_EP_CAPS_DIR_ALL),
359 			   0x0120, USBF_DOUBLE_BUFFER, 512),
360 	/* ep3: buf @0x0220, 1 buffer 512 bytes -> (512 * 2 / 4) words */
361 	[3] = USBF_EP_INFO("ep3-bulk",
362 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK,
363 				       USB_EP_CAPS_DIR_ALL),
364 			   0x0220, USBF_SINGLE_BUFFER, 512),
365 	/* ep4: buf @0x02A0, 1 buffer 512 bytes -> (512 * 1 / 4) words */
366 	[4] = USBF_EP_INFO("ep4-bulk",
367 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK,
368 				       USB_EP_CAPS_DIR_ALL),
369 			   0x02A0, USBF_SINGLE_BUFFER, 512),
370 	/* ep5: buf @0x0320, 1 buffer 512 bytes -> (512 * 2 / 4) words */
371 	[5] = USBF_EP_INFO("ep5-bulk",
372 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK,
373 				       USB_EP_CAPS_DIR_ALL),
374 			   0x0320, USBF_SINGLE_BUFFER, 512),
375 	/* ep6: buf @0x03A0, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */
376 	[6] = USBF_EP_INFO("ep6-int",
377 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_INT,
378 				       USB_EP_CAPS_DIR_ALL),
379 			   0x03A0, USBF_SINGLE_BUFFER, 1024),
380 	/* ep7: buf @0x04A0, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */
381 	[7] = USBF_EP_INFO("ep7-int",
382 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_INT,
383 				       USB_EP_CAPS_DIR_ALL),
384 			   0x04A0, USBF_SINGLE_BUFFER, 1024),
385 	/* ep8: buf @0x0520, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */
386 	[8] = USBF_EP_INFO("ep8-int",
387 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_INT,
388 				       USB_EP_CAPS_DIR_ALL),
389 			   0x0520, USBF_SINGLE_BUFFER, 1024),
390 	/* ep9: buf @0x0620, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */
391 	[9] = USBF_EP_INFO("ep9-int",
392 			   USB_EP_CAPS(USB_EP_CAPS_TYPE_INT,
393 				       USB_EP_CAPS_DIR_ALL),
394 			   0x0620, USBF_SINGLE_BUFFER, 1024),
395 	/* ep10: buf @0x0720, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */
396 	[10] = USBF_EP_INFO("ep10-iso",
397 			    USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO,
398 					USB_EP_CAPS_DIR_ALL),
399 			    0x0720, USBF_DOUBLE_BUFFER, 1024),
400 	/* ep11: buf @0x0920, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */
401 	[11] = USBF_EP_INFO("ep11-iso",
402 			    USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO,
403 					USB_EP_CAPS_DIR_ALL),
404 			    0x0920, USBF_DOUBLE_BUFFER, 1024),
405 	/* ep12: buf @0x0B20, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */
406 	[12] = USBF_EP_INFO("ep12-iso",
407 			    USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO,
408 					USB_EP_CAPS_DIR_ALL),
409 			    0x0B20, USBF_DOUBLE_BUFFER, 1024),
410 	/* ep13: buf @0x0D20, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */
411 	[13] = USBF_EP_INFO("ep13-iso",
412 			    USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO,
413 					USB_EP_CAPS_DIR_ALL),
414 			    0x0D20, USBF_DOUBLE_BUFFER, 1024),
415 	/* ep14: buf @0x0F20, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */
416 	[14] = USBF_EP_INFO("ep14-iso",
417 			    USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO,
418 					USB_EP_CAPS_DIR_ALL),
419 			    0x0F20, USBF_DOUBLE_BUFFER, 1024),
420 	/* ep15: buf @0x1120, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */
421 	[15] = USBF_EP_INFO("ep15-iso",
422 			    USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO,
423 					USB_EP_CAPS_DIR_ALL),
424 			    0x1120, USBF_DOUBLE_BUFFER, 1024),
425 };
426 
427 static inline u32 usbf_reg_readl(struct usbf_udc *udc, uint offset)
428 {
429 	return readl(udc->regs + offset);
430 }
431 
432 static inline void usbf_reg_writel(struct usbf_udc *udc, uint offset, u32 val)
433 {
434 	writel(val, udc->regs + offset);
435 }
436 
437 static inline void usbf_reg_bitset(struct usbf_udc *udc, uint offset, u32 set)
438 {
439 	u32 tmp;
440 
441 	tmp = usbf_reg_readl(udc, offset);
442 	tmp |= set;
443 	usbf_reg_writel(udc, offset, tmp);
444 }
445 
446 static inline void usbf_reg_bitclr(struct usbf_udc *udc, uint offset, u32 clr)
447 {
448 	u32 tmp;
449 
450 	tmp = usbf_reg_readl(udc, offset);
451 	tmp &= ~clr;
452 	usbf_reg_writel(udc, offset, tmp);
453 }
454 
455 static inline void usbf_reg_clrset(struct usbf_udc *udc, uint offset,
456 				   u32 clr, u32 set)
457 {
458 	u32 tmp;
459 
460 	tmp = usbf_reg_readl(udc, offset);
461 	tmp &= ~clr;
462 	tmp |= set;
463 	usbf_reg_writel(udc, offset, tmp);
464 }
465 
466 static inline u32 usbf_ep_reg_readl(struct usbf_ep *ep, uint offset)
467 {
468 	return readl(ep->regs + offset);
469 }
470 
471 static inline void usbf_ep_reg_read_rep(struct usbf_ep *ep, uint offset,
472 				       void *dst, uint count)
473 {
474 	readsl(ep->regs + offset, dst, count);
475 }
476 
477 static inline void usbf_ep_reg_writel(struct usbf_ep *ep, uint offset, u32 val)
478 {
479 	writel(val, ep->regs + offset);
480 }
481 
482 static inline void usbf_ep_reg_write_rep(struct usbf_ep *ep, uint offset,
483 					 const void *src, uint count)
484 {
485 	writesl(ep->regs + offset, src, count);
486 }
487 
488 static inline void usbf_ep_reg_bitset(struct usbf_ep *ep, uint offset, u32 set)
489 {
490 	u32 tmp;
491 
492 	tmp = usbf_ep_reg_readl(ep, offset);
493 	tmp |= set;
494 	usbf_ep_reg_writel(ep, offset, tmp);
495 }
496 
497 static inline void usbf_ep_reg_bitclr(struct usbf_ep *ep, uint offset, u32 clr)
498 {
499 	u32 tmp;
500 
501 	tmp = usbf_ep_reg_readl(ep, offset);
502 	tmp &= ~clr;
503 	usbf_ep_reg_writel(ep, offset, tmp);
504 }
505 
506 static inline void usbf_ep_reg_clrset(struct usbf_ep *ep, uint offset,
507 				      u32 clr, u32 set)
508 {
509 	u32 tmp;
510 
511 	tmp = usbf_ep_reg_readl(ep, offset);
512 	tmp &= ~clr;
513 	tmp |= set;
514 	usbf_ep_reg_writel(ep, offset, tmp);
515 }
516 
517 static inline u32 usbf_ep_dma_reg_readl(struct usbf_ep *ep, uint offset)
518 {
519 	return readl(ep->dma_regs + offset);
520 }
521 
522 static inline void usbf_ep_dma_reg_writel(struct usbf_ep *ep, uint offset,
523 					  u32 val)
524 {
525 	writel(val, ep->dma_regs + offset);
526 }
527 
528 static inline void usbf_ep_dma_reg_bitset(struct usbf_ep *ep, uint offset,
529 					  u32 set)
530 {
531 	u32 tmp;
532 
533 	tmp = usbf_ep_dma_reg_readl(ep, offset);
534 	tmp |= set;
535 	usbf_ep_dma_reg_writel(ep, offset, tmp);
536 }
537 
538 static inline void usbf_ep_dma_reg_bitclr(struct usbf_ep *ep, uint offset,
539 					  u32 clr)
540 {
541 	u32 tmp;
542 
543 	tmp = usbf_ep_dma_reg_readl(ep, offset);
544 	tmp &= ~clr;
545 	usbf_ep_dma_reg_writel(ep, offset, tmp);
546 }
547 
548 static void usbf_ep0_send_null(struct usbf_ep *ep0, bool is_data1)
549 {
550 	u32 set;
551 
552 	set = USBF_EP0_DEND;
553 	if (is_data1)
554 		set |= USBF_EP0_PIDCLR;
555 
556 	usbf_ep_reg_bitset(ep0, USBF_REG_EP0_CONTROL, set);
557 }
558 
559 static int usbf_ep0_pio_in(struct usbf_ep *ep0, struct usbf_req *req)
560 {
561 	unsigned int left;
562 	unsigned int nb;
563 	const void *buf;
564 	u32 ctrl;
565 	u32 last;
566 
567 	left = req->req.length - req->req.actual;
568 
569 	if (left == 0) {
570 		if (!req->is_zero_sent) {
571 			if (req->req.length == 0) {
572 				dev_dbg(ep0->udc->dev, "ep0 send null\n");
573 				usbf_ep0_send_null(ep0, false);
574 				req->is_zero_sent = 1;
575 				return -EINPROGRESS;
576 			}
577 			if ((req->req.actual % ep0->ep.maxpacket) == 0) {
578 				if (req->req.zero) {
579 					dev_dbg(ep0->udc->dev, "ep0 send null\n");
580 					usbf_ep0_send_null(ep0, false);
581 					req->is_zero_sent = 1;
582 					return -EINPROGRESS;
583 				}
584 			}
585 		}
586 		return 0;
587 	}
588 
589 	if (left > ep0->ep.maxpacket)
590 		left = ep0->ep.maxpacket;
591 
592 	buf = req->req.buf;
593 	buf += req->req.actual;
594 
595 	nb = left / sizeof(u32);
596 	if (nb) {
597 		usbf_ep_reg_write_rep(ep0, USBF_REG_EP0_WRITE, buf, nb);
598 		buf += (nb * sizeof(u32));
599 		req->req.actual += (nb * sizeof(u32));
600 		left -= (nb * sizeof(u32));
601 	}
602 	ctrl = usbf_ep_reg_readl(ep0, USBF_REG_EP0_CONTROL);
603 	ctrl &= ~USBF_EP0_DW_MASK;
604 	if (left) {
605 		memcpy(&last, buf, left);
606 		usbf_ep_reg_writel(ep0, USBF_REG_EP0_WRITE, last);
607 		ctrl |= USBF_EP0_DW(left);
608 		req->req.actual += left;
609 	}
610 	usbf_ep_reg_writel(ep0, USBF_REG_EP0_CONTROL, ctrl | USBF_EP0_DEND);
611 
612 	dev_dbg(ep0->udc->dev, "ep0 send %u/%u\n",
613 		req->req.actual, req->req.length);
614 
615 	return -EINPROGRESS;
616 }
617 
618 static int usbf_ep0_pio_out(struct usbf_ep *ep0, struct usbf_req *req)
619 {
620 	int req_status = 0;
621 	unsigned int count;
622 	unsigned int recv;
623 	unsigned int left;
624 	unsigned int nb;
625 	void *buf;
626 	u32 last;
627 
628 	if (ep0->status & USBF_EP0_OUT_INT) {
629 		recv = usbf_ep_reg_readl(ep0, USBF_REG_EP0_LENGTH) & USBF_EP0_LDATA;
630 		count = recv;
631 
632 		buf = req->req.buf;
633 		buf += req->req.actual;
634 
635 		left = req->req.length - req->req.actual;
636 
637 		dev_dbg(ep0->udc->dev, "ep0 recv %u, left %u\n", count, left);
638 
639 		if (left > ep0->ep.maxpacket)
640 			left = ep0->ep.maxpacket;
641 
642 		if (count > left) {
643 			req_status = -EOVERFLOW;
644 			count = left;
645 		}
646 
647 		if (count) {
648 			nb = count / sizeof(u32);
649 			if (nb) {
650 				usbf_ep_reg_read_rep(ep0, USBF_REG_EP0_READ,
651 					buf, nb);
652 				buf += (nb * sizeof(u32));
653 				req->req.actual += (nb * sizeof(u32));
654 				count -= (nb * sizeof(u32));
655 			}
656 			if (count) {
657 				last = usbf_ep_reg_readl(ep0, USBF_REG_EP0_READ);
658 				memcpy(buf, &last, count);
659 				req->req.actual += count;
660 			}
661 		}
662 		dev_dbg(ep0->udc->dev, "ep0 recv %u/%u\n",
663 			req->req.actual, req->req.length);
664 
665 		if (req_status) {
666 			dev_dbg(ep0->udc->dev, "ep0 req.status=%d\n", req_status);
667 			req->req.status = req_status;
668 			return 0;
669 		}
670 
671 		if (recv < ep0->ep.maxpacket) {
672 			dev_dbg(ep0->udc->dev, "ep0 short packet\n");
673 			/* This is a short packet -> It is the end */
674 			req->req.status = 0;
675 			return 0;
676 		}
677 
678 		/* The Data stage of a control transfer from an endpoint to the
679 		 * host is complete when the endpoint does one of the following:
680 		 * - Has transferred exactly the expected amount of data
681 		 * - Transfers a packet with a payload size less than
682 		 *   wMaxPacketSize or transfers a zero-length packet
683 		 */
684 		if (req->req.actual == req->req.length) {
685 			req->req.status = 0;
686 			return 0;
687 		}
688 	}
689 
690 	if (ep0->status & USBF_EP0_OUT_NULL_INT) {
691 		/* NULL packet received */
692 		dev_dbg(ep0->udc->dev, "ep0 null packet\n");
693 		if (req->req.actual != req->req.length) {
694 			req->req.status = req->req.short_not_ok ?
695 					  -EREMOTEIO : 0;
696 		} else {
697 			req->req.status = 0;
698 		}
699 		return 0;
700 	}
701 
702 	return -EINPROGRESS;
703 }
704 
705 static void usbf_ep0_fifo_flush(struct usbf_ep *ep0)
706 {
707 	u32 sts;
708 	int ret;
709 
710 	usbf_ep_reg_bitset(ep0, USBF_REG_EP0_CONTROL, USBF_EP0_BCLR);
711 
712 	ret = readl_poll_timeout_atomic(ep0->regs + USBF_REG_EP0_STATUS, sts,
713 		(sts & (USBF_EP0_IN_DATA | USBF_EP0_IN_EMPTY)) == USBF_EP0_IN_EMPTY,
714 		0,  10000);
715 	if (ret)
716 		dev_err(ep0->udc->dev, "ep0 flush fifo timed out\n");
717 
718 }
719 
720 static void usbf_epn_send_null(struct usbf_ep *epn)
721 {
722 	usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, USBF_EPN_DEND);
723 }
724 
725 static void usbf_epn_send_residue(struct usbf_ep *epn, const void *buf,
726 				  unsigned int size)
727 {
728 	u32 tmp;
729 
730 	memcpy(&tmp, buf, size);
731 	usbf_ep_reg_writel(epn, USBF_REG_EPN_WRITE, tmp);
732 
733 	usbf_ep_reg_clrset(epn, USBF_REG_EPN_CONTROL,
734 				USBF_EPN_DW_MASK,
735 				USBF_EPN_DW(size) | USBF_EPN_DEND);
736 }
737 
738 static int usbf_epn_pio_in(struct usbf_ep *epn, struct usbf_req *req)
739 {
740 	unsigned int left;
741 	unsigned int nb;
742 	const void *buf;
743 
744 	left = req->req.length - req->req.actual;
745 
746 	if (left == 0) {
747 		if (!req->is_zero_sent) {
748 			if (req->req.length == 0) {
749 				dev_dbg(epn->udc->dev, "ep%u send_null\n", epn->id);
750 				usbf_epn_send_null(epn);
751 				req->is_zero_sent = 1;
752 				return -EINPROGRESS;
753 			}
754 			if ((req->req.actual % epn->ep.maxpacket) == 0) {
755 				if (req->req.zero) {
756 					dev_dbg(epn->udc->dev, "ep%u send_null\n",
757 						epn->id);
758 					usbf_epn_send_null(epn);
759 					req->is_zero_sent = 1;
760 					return -EINPROGRESS;
761 				}
762 			}
763 		}
764 		return 0;
765 	}
766 
767 	if (left > epn->ep.maxpacket)
768 		left = epn->ep.maxpacket;
769 
770 	buf = req->req.buf;
771 	buf += req->req.actual;
772 
773 	nb = left / sizeof(u32);
774 	if (nb) {
775 		usbf_ep_reg_write_rep(epn, USBF_REG_EPN_WRITE, buf, nb);
776 		buf += (nb * sizeof(u32));
777 		req->req.actual += (nb * sizeof(u32));
778 		left -= (nb * sizeof(u32));
779 	}
780 
781 	if (left) {
782 		usbf_epn_send_residue(epn, buf, left);
783 		req->req.actual += left;
784 	} else {
785 		usbf_ep_reg_clrset(epn, USBF_REG_EPN_CONTROL,
786 					USBF_EPN_DW_MASK,
787 					USBF_EPN_DEND);
788 	}
789 
790 	dev_dbg(epn->udc->dev, "ep%u send %u/%u\n", epn->id, req->req.actual,
791 		req->req.length);
792 
793 	return -EINPROGRESS;
794 }
795 
796 static void usbf_epn_enable_in_end_int(struct usbf_ep *epn)
797 {
798 	usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_IN_END_EN);
799 }
800 
801 static int usbf_epn_dma_in(struct usbf_ep *epn, struct usbf_req *req)
802 {
803 	unsigned int left;
804 	u32 npkt;
805 	u32 lastpkt;
806 	int ret;
807 
808 	if (!IS_ALIGNED((uintptr_t)req->req.buf, 4)) {
809 		dev_dbg(epn->udc->dev, "ep%u buf unaligned -> fallback pio\n",
810 			epn->id);
811 		return usbf_epn_pio_in(epn, req);
812 	}
813 
814 	left = req->req.length - req->req.actual;
815 
816 	switch (req->xfer_step) {
817 	default:
818 	case USBF_XFER_START:
819 		if (left == 0) {
820 			dev_dbg(epn->udc->dev, "ep%u send null\n", epn->id);
821 			usbf_epn_send_null(epn);
822 			req->xfer_step = USBF_XFER_WAIT_END;
823 			break;
824 		}
825 		if (left < 4) {
826 			dev_dbg(epn->udc->dev, "ep%u send residue %u\n", epn->id,
827 				left);
828 			usbf_epn_send_residue(epn,
829 				req->req.buf + req->req.actual, left);
830 			req->req.actual += left;
831 			req->xfer_step = USBF_XFER_WAIT_END;
832 			break;
833 		}
834 
835 		ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 1);
836 		if (ret < 0) {
837 			dev_err(epn->udc->dev, "usb_gadget_map_request failed (%d)\n",
838 				ret);
839 			return ret;
840 		}
841 		req->is_mapped = 1;
842 
843 		npkt = DIV_ROUND_UP(left, epn->ep.maxpacket);
844 		lastpkt = (left % epn->ep.maxpacket);
845 		if (lastpkt == 0)
846 			lastpkt = epn->ep.maxpacket;
847 		lastpkt &= ~0x3; /* DMA is done on 32bit units */
848 
849 		usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR2,
850 			USBF_SYS_EPN_MPKT(epn->ep.maxpacket) | USBF_SYS_EPN_LMPKT(lastpkt));
851 		usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_TADR,
852 			req->req.dma);
853 		usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1,
854 			USBF_SYS_EPN_SET_DMACNT(npkt));
855 		usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1,
856 			USBF_SYS_EPN_REQEN);
857 
858 		usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, USBF_EPN_SET_DMACNT(npkt));
859 
860 		usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO);
861 
862 		/* The end of DMA transfer at the USBF level needs to be handle
863 		 * after the detection of the end of DMA transfer at the brige
864 		 * level.
865 		 * To force this sequence, EPN_IN_END_EN will be set by the
866 		 * detection of the end of transfer at bridge level (ie. bridge
867 		 * interrupt).
868 		 */
869 		usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA,
870 			USBF_EPN_IN_EN | USBF_EPN_IN_END_EN);
871 		epn->bridge_on_dma_end = usbf_epn_enable_in_end_int;
872 
873 		/* Clear any pending IN_END interrupt */
874 		usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(u32)USBF_EPN_IN_END_INT);
875 
876 		usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL,
877 			USBF_EPN_BURST_SET | USBF_EPN_DMAMODE0);
878 		usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL,
879 			USBF_EPN_DMA_EN);
880 
881 		req->dma_size = (npkt - 1) * epn->ep.maxpacket + lastpkt;
882 
883 		dev_dbg(epn->udc->dev, "ep%u dma xfer %zu\n", epn->id,
884 			req->dma_size);
885 
886 		req->xfer_step = USBF_XFER_WAIT_DMA;
887 		break;
888 
889 	case USBF_XFER_WAIT_DMA:
890 		if (!(epn->status & USBF_EPN_IN_END_INT)) {
891 			dev_dbg(epn->udc->dev, "ep%u dma not done\n", epn->id);
892 			break;
893 		}
894 		dev_dbg(epn->udc->dev, "ep%u dma done\n", epn->id);
895 
896 		usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 1);
897 		req->is_mapped = 0;
898 
899 		usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO);
900 
901 		usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA,
902 			USBF_EPN_IN_END_EN,
903 			USBF_EPN_IN_EN);
904 
905 		req->req.actual += req->dma_size;
906 
907 		left = req->req.length - req->req.actual;
908 		if (left) {
909 			usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(u32)USBF_EPN_IN_INT);
910 
911 			dev_dbg(epn->udc->dev, "ep%u send residue %u\n", epn->id,
912 				left);
913 			usbf_epn_send_residue(epn,
914 				req->req.buf + req->req.actual, left);
915 			req->req.actual += left;
916 			req->xfer_step = USBF_XFER_WAIT_END;
917 			break;
918 		}
919 
920 		if (req->req.actual % epn->ep.maxpacket) {
921 			/* last packet was a short packet. Tell the hardware to
922 			 * send it right now.
923 			 */
924 			dev_dbg(epn->udc->dev, "ep%u send short\n", epn->id);
925 			usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS,
926 				~(u32)USBF_EPN_IN_INT);
927 			usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL,
928 				USBF_EPN_DEND);
929 
930 			req->xfer_step = USBF_XFER_WAIT_END;
931 			break;
932 		}
933 
934 		/* Last packet size was a maxpacket size
935 		 * Send null packet if needed
936 		 */
937 		if (req->req.zero) {
938 			req->xfer_step = USBF_XFER_SEND_NULL;
939 			break;
940 		}
941 
942 		/* No more action to do. Wait for the end of the USB transfer */
943 		req->xfer_step = USBF_XFER_WAIT_END;
944 		break;
945 
946 	case USBF_XFER_SEND_NULL:
947 		dev_dbg(epn->udc->dev, "ep%u send null\n", epn->id);
948 		usbf_epn_send_null(epn);
949 		req->xfer_step = USBF_XFER_WAIT_END;
950 		break;
951 
952 	case USBF_XFER_WAIT_END:
953 		if (!(epn->status & USBF_EPN_IN_INT)) {
954 			dev_dbg(epn->udc->dev, "ep%u end not done\n", epn->id);
955 			break;
956 		}
957 		dev_dbg(epn->udc->dev, "ep%u send done %u/%u\n", epn->id,
958 			req->req.actual, req->req.length);
959 		req->xfer_step = USBF_XFER_START;
960 		return 0;
961 	}
962 
963 	return -EINPROGRESS;
964 }
965 
966 static void usbf_epn_recv_residue(struct usbf_ep *epn, void *buf,
967 				  unsigned int size)
968 {
969 	u32 last;
970 
971 	last = usbf_ep_reg_readl(epn, USBF_REG_EPN_READ);
972 	memcpy(buf, &last, size);
973 }
974 
975 static int usbf_epn_pio_out(struct usbf_ep *epn, struct usbf_req *req)
976 {
977 	int req_status = 0;
978 	unsigned int count;
979 	unsigned int recv;
980 	unsigned int left;
981 	unsigned int nb;
982 	void *buf;
983 
984 	if (epn->status & USBF_EPN_OUT_INT) {
985 		recv = USBF_EPN_GET_LDATA(
986 			usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT));
987 		count = recv;
988 
989 		buf = req->req.buf;
990 		buf += req->req.actual;
991 
992 		left = req->req.length - req->req.actual;
993 
994 		dev_dbg(epn->udc->dev, "ep%u recv %u, left %u, mpkt %u\n", epn->id,
995 			recv, left, epn->ep.maxpacket);
996 
997 		if (left > epn->ep.maxpacket)
998 			left = epn->ep.maxpacket;
999 
1000 		if (count > left) {
1001 			req_status = -EOVERFLOW;
1002 			count = left;
1003 		}
1004 
1005 		if (count) {
1006 			nb = count / sizeof(u32);
1007 			if (nb) {
1008 				usbf_ep_reg_read_rep(epn, USBF_REG_EPN_READ,
1009 					buf, nb);
1010 				buf += (nb * sizeof(u32));
1011 				req->req.actual += (nb * sizeof(u32));
1012 				count -= (nb * sizeof(u32));
1013 			}
1014 			if (count) {
1015 				usbf_epn_recv_residue(epn, buf, count);
1016 				req->req.actual += count;
1017 			}
1018 		}
1019 		dev_dbg(epn->udc->dev, "ep%u recv %u/%u\n", epn->id,
1020 			req->req.actual, req->req.length);
1021 
1022 		if (req_status) {
1023 			dev_dbg(epn->udc->dev, "ep%u req.status=%d\n", epn->id,
1024 				req_status);
1025 			req->req.status = req_status;
1026 			return 0;
1027 		}
1028 
1029 		if (recv < epn->ep.maxpacket) {
1030 			dev_dbg(epn->udc->dev, "ep%u short packet\n", epn->id);
1031 			/* This is a short packet -> It is the end */
1032 			req->req.status = 0;
1033 			return 0;
1034 		}
1035 
1036 		/* Request full -> complete */
1037 		if (req->req.actual == req->req.length) {
1038 			req->req.status = 0;
1039 			return 0;
1040 		}
1041 	}
1042 
1043 	if (epn->status & USBF_EPN_OUT_NULL_INT) {
1044 		/* NULL packet received */
1045 		dev_dbg(epn->udc->dev, "ep%u null packet\n", epn->id);
1046 		if (req->req.actual != req->req.length) {
1047 			req->req.status = req->req.short_not_ok ?
1048 					  -EREMOTEIO : 0;
1049 		} else {
1050 			req->req.status = 0;
1051 		}
1052 		return 0;
1053 	}
1054 
1055 	return -EINPROGRESS;
1056 }
1057 
1058 static void usbf_epn_enable_out_end_int(struct usbf_ep *epn)
1059 {
1060 	usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_OUT_END_EN);
1061 }
1062 
1063 static void usbf_epn_process_queue(struct usbf_ep *epn);
1064 
1065 static void usbf_epn_dma_out_send_dma(struct usbf_ep *epn, dma_addr_t addr, u32 npkt, bool is_short)
1066 {
1067 	usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR2, USBF_SYS_EPN_MPKT(epn->ep.maxpacket));
1068 	usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_TADR, addr);
1069 
1070 	if (is_short) {
1071 		usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1,
1072 				USBF_SYS_EPN_SET_DMACNT(1) | USBF_SYS_EPN_DIR0);
1073 		usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1,
1074 				USBF_SYS_EPN_REQEN);
1075 
1076 		usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT,
1077 				USBF_EPN_SET_DMACNT(0));
1078 
1079 		/* The end of DMA transfer at the USBF level needs to be handled
1080 		 * after the detection of the end of DMA transfer at the brige
1081 		 * level.
1082 		 * To force this sequence, enabling the OUT_END interrupt will
1083 		 * be donee by the detection of the end of transfer at bridge
1084 		 * level (ie. bridge interrupt).
1085 		 */
1086 		usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA,
1087 			USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN | USBF_EPN_OUT_END_EN);
1088 		epn->bridge_on_dma_end = usbf_epn_enable_out_end_int;
1089 
1090 		/* Clear any pending OUT_END interrupt */
1091 		usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS,
1092 			~(u32)USBF_EPN_OUT_END_INT);
1093 
1094 		usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL,
1095 			USBF_EPN_STOP_MODE | USBF_EPN_STOP_SET | USBF_EPN_DMAMODE0);
1096 		usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL,
1097 			USBF_EPN_DMA_EN);
1098 		return;
1099 	}
1100 
1101 	usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1,
1102 		USBF_SYS_EPN_SET_DMACNT(npkt) | USBF_SYS_EPN_DIR0);
1103 	usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1,
1104 		USBF_SYS_EPN_REQEN);
1105 
1106 	usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT,
1107 		USBF_EPN_SET_DMACNT(npkt));
1108 
1109 	/* Here, the bridge may or may not generate an interrupt to signal the
1110 	 * end of DMA transfer.
1111 	 * Keep only OUT_END interrupt and let handle the bridge later during
1112 	 * the OUT_END processing.
1113 	 */
1114 	usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA,
1115 		USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN,
1116 		USBF_EPN_OUT_END_EN);
1117 
1118 	/* Disable bridge interrupt. It will be renabled later */
1119 	usbf_reg_bitclr(epn->udc, USBF_REG_AHBBINTEN,
1120 		USBF_SYS_DMA_ENDINTEN_EPN(epn->id));
1121 
1122 	/* Clear any pending DMA_END interrupt at bridge level */
1123 	usbf_reg_writel(epn->udc, USBF_REG_AHBBINT,
1124 		USBF_SYS_DMA_ENDINT_EPN(epn->id));
1125 
1126 	/* Clear any pending OUT_END interrupt */
1127 	usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS,
1128 		~(u32)USBF_EPN_OUT_END_INT);
1129 
1130 	usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL,
1131 		USBF_EPN_STOP_MODE | USBF_EPN_STOP_SET | USBF_EPN_DMAMODE0 | USBF_EPN_BURST_SET);
1132 	usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL,
1133 		USBF_EPN_DMA_EN);
1134 }
1135 
1136 static size_t usbf_epn_dma_out_complete_dma(struct usbf_ep *epn, bool is_short)
1137 {
1138 	u32 dmacnt;
1139 	u32 tmp;
1140 	int ret;
1141 
1142 	/* Restore interrupt mask */
1143 	usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA,
1144 		USBF_EPN_OUT_END_EN,
1145 		USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN);
1146 
1147 	if (is_short) {
1148 		/* Nothing more to do when the DMA was for a short packet */
1149 		return 0;
1150 	}
1151 
1152 	/* Enable the bridge interrupt */
1153 	usbf_reg_bitset(epn->udc, USBF_REG_AHBBINTEN,
1154 		USBF_SYS_DMA_ENDINTEN_EPN(epn->id));
1155 
1156 	tmp = usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT);
1157 	dmacnt = USBF_EPN_GET_DMACNT(tmp);
1158 
1159 	if (dmacnt) {
1160 		/* Some packet were not received (halted by a short or a null
1161 		 * packet.
1162 		 * The bridge never raises an interrupt in this case.
1163 		 * Wait for the end of transfer at bridge level
1164 		 */
1165 		ret = readl_poll_timeout_atomic(
1166 			epn->dma_regs + USBF_REG_DMA_EPN_DCR1,
1167 			tmp, (USBF_SYS_EPN_GET_DMACNT(tmp) == dmacnt),
1168 			0,  10000);
1169 		if (ret) {
1170 			dev_err(epn->udc->dev, "ep%u wait bridge timed out\n",
1171 				epn->id);
1172 		}
1173 
1174 		usbf_ep_dma_reg_bitclr(epn, USBF_REG_DMA_EPN_DCR1,
1175 			USBF_SYS_EPN_REQEN);
1176 
1177 		/* The dmacnt value tells how many packet were not transferred
1178 		 * from the maximum number of packet we set for the DMA transfer.
1179 		 * Compute the left DMA size based on this value.
1180 		 */
1181 		return dmacnt * epn->ep.maxpacket;
1182 	}
1183 
1184 	return 0;
1185 }
1186 
1187 static int usbf_epn_dma_out(struct usbf_ep *epn, struct usbf_req *req)
1188 {
1189 	unsigned int dma_left;
1190 	unsigned int count;
1191 	unsigned int recv;
1192 	unsigned int left;
1193 	u32 npkt;
1194 	int ret;
1195 
1196 	if (!IS_ALIGNED((uintptr_t)req->req.buf, 4)) {
1197 		dev_dbg(epn->udc->dev, "ep%u buf unaligned -> fallback pio\n",
1198 			epn->id);
1199 		return usbf_epn_pio_out(epn, req);
1200 	}
1201 
1202 	switch (req->xfer_step) {
1203 	default:
1204 	case USBF_XFER_START:
1205 		if (epn->status & USBF_EPN_OUT_NULL_INT) {
1206 			dev_dbg(epn->udc->dev, "ep%u null packet\n", epn->id);
1207 			if (req->req.actual != req->req.length) {
1208 				req->req.status = req->req.short_not_ok ?
1209 					-EREMOTEIO : 0;
1210 			} else {
1211 				req->req.status = 0;
1212 			}
1213 			return 0;
1214 		}
1215 
1216 		if (!(epn->status & USBF_EPN_OUT_INT)) {
1217 			dev_dbg(epn->udc->dev, "ep%u OUT_INT not set -> spurious\n",
1218 				epn->id);
1219 			break;
1220 		}
1221 
1222 		recv = USBF_EPN_GET_LDATA(
1223 			usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT));
1224 		if (!recv) {
1225 			dev_dbg(epn->udc->dev, "ep%u recv = 0 -> spurious\n",
1226 				epn->id);
1227 			break;
1228 		}
1229 
1230 		left = req->req.length - req->req.actual;
1231 
1232 		dev_dbg(epn->udc->dev, "ep%u recv %u, left %u, mpkt %u\n", epn->id,
1233 			recv, left, epn->ep.maxpacket);
1234 
1235 		if (recv > left) {
1236 			dev_err(epn->udc->dev, "ep%u overflow (%u/%u)\n",
1237 				epn->id, recv, left);
1238 			req->req.status = -EOVERFLOW;
1239 			return -EOVERFLOW;
1240 		}
1241 
1242 		if (recv < epn->ep.maxpacket) {
1243 			/* Short packet received */
1244 			dev_dbg(epn->udc->dev, "ep%u short packet\n", epn->id);
1245 			if (recv <= 3) {
1246 				usbf_epn_recv_residue(epn,
1247 					req->req.buf + req->req.actual, recv);
1248 				req->req.actual += recv;
1249 
1250 				dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n",
1251 					epn->id, req->req.actual, req->req.length);
1252 
1253 				req->xfer_step = USBF_XFER_START;
1254 				return 0;
1255 			}
1256 
1257 			ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0);
1258 			if (ret < 0) {
1259 				dev_err(epn->udc->dev, "map request failed (%d)\n",
1260 					ret);
1261 				return ret;
1262 			}
1263 			req->is_mapped = 1;
1264 
1265 			usbf_epn_dma_out_send_dma(epn,
1266 				req->req.dma + req->req.actual,
1267 				1, true);
1268 			req->dma_size = recv & ~0x3;
1269 
1270 			dev_dbg(epn->udc->dev, "ep%u dma short xfer %zu\n", epn->id,
1271 				req->dma_size);
1272 
1273 			req->xfer_step = USBF_XFER_WAIT_DMA_SHORT;
1274 			break;
1275 		}
1276 
1277 		ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0);
1278 		if (ret < 0) {
1279 			dev_err(epn->udc->dev, "map request failed (%d)\n",
1280 				ret);
1281 			return ret;
1282 		}
1283 		req->is_mapped = 1;
1284 
1285 		/* Use the maximum DMA size according to the request buffer.
1286 		 * We will adjust the received size later at the end of the DMA
1287 		 * transfer with the left size computed from
1288 		 * usbf_epn_dma_out_complete_dma().
1289 		 */
1290 		npkt = left / epn->ep.maxpacket;
1291 		usbf_epn_dma_out_send_dma(epn,
1292 				req->req.dma + req->req.actual,
1293 				npkt, false);
1294 		req->dma_size = npkt * epn->ep.maxpacket;
1295 
1296 		dev_dbg(epn->udc->dev, "ep%u dma xfer %zu (%u)\n", epn->id,
1297 			req->dma_size, npkt);
1298 
1299 		req->xfer_step = USBF_XFER_WAIT_DMA;
1300 		break;
1301 
1302 	case USBF_XFER_WAIT_DMA_SHORT:
1303 		if (!(epn->status & USBF_EPN_OUT_END_INT)) {
1304 			dev_dbg(epn->udc->dev, "ep%u dma short not done\n", epn->id);
1305 			break;
1306 		}
1307 		dev_dbg(epn->udc->dev, "ep%u dma short done\n", epn->id);
1308 
1309 		usbf_epn_dma_out_complete_dma(epn, true);
1310 
1311 		usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0);
1312 		req->is_mapped = 0;
1313 
1314 		req->req.actual += req->dma_size;
1315 
1316 		recv = USBF_EPN_GET_LDATA(
1317 			usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT));
1318 
1319 		count = recv & 0x3;
1320 		if (count) {
1321 			dev_dbg(epn->udc->dev, "ep%u recv residue %u\n", epn->id,
1322 				count);
1323 			usbf_epn_recv_residue(epn,
1324 				req->req.buf + req->req.actual, count);
1325 			req->req.actual += count;
1326 		}
1327 
1328 		dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id,
1329 			req->req.actual, req->req.length);
1330 
1331 		req->xfer_step = USBF_XFER_START;
1332 		return 0;
1333 
1334 	case USBF_XFER_WAIT_DMA:
1335 		if (!(epn->status & USBF_EPN_OUT_END_INT)) {
1336 			dev_dbg(epn->udc->dev, "ep%u dma not done\n", epn->id);
1337 			break;
1338 		}
1339 		dev_dbg(epn->udc->dev, "ep%u dma done\n", epn->id);
1340 
1341 		dma_left = usbf_epn_dma_out_complete_dma(epn, false);
1342 		if (dma_left) {
1343 			/* Adjust the final DMA size with */
1344 			count = req->dma_size - dma_left;
1345 
1346 			dev_dbg(epn->udc->dev, "ep%u dma xfer done %u\n", epn->id,
1347 				count);
1348 
1349 			req->req.actual += count;
1350 
1351 			if (epn->status & USBF_EPN_OUT_NULL_INT) {
1352 				/* DMA was stopped by a null packet reception */
1353 				dev_dbg(epn->udc->dev, "ep%u dma stopped by null pckt\n",
1354 					epn->id);
1355 				usb_gadget_unmap_request(&epn->udc->gadget,
1356 							 &req->req, 0);
1357 				req->is_mapped = 0;
1358 
1359 				usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS,
1360 					~(u32)USBF_EPN_OUT_NULL_INT);
1361 
1362 				if (req->req.actual != req->req.length) {
1363 					req->req.status = req->req.short_not_ok ?
1364 						  -EREMOTEIO : 0;
1365 				} else {
1366 					req->req.status = 0;
1367 				}
1368 				dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n",
1369 					epn->id, req->req.actual, req->req.length);
1370 				req->xfer_step = USBF_XFER_START;
1371 				return 0;
1372 			}
1373 
1374 			recv = USBF_EPN_GET_LDATA(
1375 				usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT));
1376 			left = req->req.length - req->req.actual;
1377 			if (recv > left) {
1378 				dev_err(epn->udc->dev,
1379 					"ep%u overflow (%u/%u)\n", epn->id,
1380 					recv, left);
1381 				req->req.status = -EOVERFLOW;
1382 				usb_gadget_unmap_request(&epn->udc->gadget,
1383 							 &req->req, 0);
1384 				req->is_mapped = 0;
1385 
1386 				req->xfer_step = USBF_XFER_START;
1387 				return -EOVERFLOW;
1388 			}
1389 
1390 			if (recv > 3) {
1391 				usbf_epn_dma_out_send_dma(epn,
1392 					req->req.dma + req->req.actual,
1393 					1, true);
1394 				req->dma_size = recv & ~0x3;
1395 
1396 				dev_dbg(epn->udc->dev, "ep%u dma short xfer %zu\n",
1397 					epn->id, req->dma_size);
1398 
1399 				req->xfer_step = USBF_XFER_WAIT_DMA_SHORT;
1400 				break;
1401 			}
1402 
1403 			usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0);
1404 			req->is_mapped = 0;
1405 
1406 			count = recv & 0x3;
1407 			if (count) {
1408 				dev_dbg(epn->udc->dev, "ep%u recv residue %u\n",
1409 					epn->id, count);
1410 				usbf_epn_recv_residue(epn,
1411 					req->req.buf + req->req.actual, count);
1412 				req->req.actual += count;
1413 			}
1414 
1415 			dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id,
1416 				req->req.actual, req->req.length);
1417 
1418 			req->xfer_step = USBF_XFER_START;
1419 			return 0;
1420 		}
1421 
1422 		/* Process queue at bridge interrupt only */
1423 		usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA,
1424 			USBF_EPN_OUT_END_EN | USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN);
1425 		epn->status = 0;
1426 		epn->bridge_on_dma_end = usbf_epn_process_queue;
1427 
1428 		req->xfer_step = USBF_XFER_WAIT_BRIDGE;
1429 		break;
1430 
1431 	case USBF_XFER_WAIT_BRIDGE:
1432 		dev_dbg(epn->udc->dev, "ep%u bridge transfers done\n", epn->id);
1433 
1434 		/* Restore interrupt mask */
1435 		usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA,
1436 			USBF_EPN_OUT_END_EN,
1437 			USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN);
1438 
1439 		usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0);
1440 		req->is_mapped = 0;
1441 
1442 		req->req.actual += req->dma_size;
1443 
1444 		req->xfer_step = USBF_XFER_START;
1445 		left = req->req.length - req->req.actual;
1446 		if (!left) {
1447 			/* No more data can be added to the buffer */
1448 			dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id,
1449 				req->req.actual, req->req.length);
1450 			return 0;
1451 		}
1452 		dev_dbg(epn->udc->dev, "ep%u recv done %u/%u, wait more data\n",
1453 			epn->id, req->req.actual, req->req.length);
1454 		break;
1455 	}
1456 
1457 	return -EINPROGRESS;
1458 }
1459 
1460 static void usbf_epn_dma_stop(struct usbf_ep *epn)
1461 {
1462 	usbf_ep_dma_reg_bitclr(epn, USBF_REG_DMA_EPN_DCR1, USBF_SYS_EPN_REQEN);
1463 
1464 	/* In the datasheet:
1465 	 *   If EP[m]_REQEN = 0b is set during DMA transfer, AHB-EPC stops DMA
1466 	 *   after 1 packet transfer completed.
1467 	 *   Therefore, wait sufficient time for ensuring DMA transfer
1468 	 *   completion. The WAIT time depends on the system, especially AHB
1469 	 *   bus activity
1470 	 * So arbitrary 10ms would be sufficient.
1471 	 */
1472 	mdelay(10);
1473 
1474 	usbf_ep_reg_bitclr(epn, USBF_REG_EPN_DMA_CTRL, USBF_EPN_DMA_EN);
1475 }
1476 
1477 static void usbf_epn_dma_abort(struct usbf_ep *epn,  struct usbf_req *req)
1478 {
1479 	dev_dbg(epn->udc->dev, "ep%u %s dma abort\n", epn->id,
1480 		epn->is_in ? "in" : "out");
1481 
1482 	epn->bridge_on_dma_end = NULL;
1483 
1484 	usbf_epn_dma_stop(epn);
1485 
1486 	usb_gadget_unmap_request(&epn->udc->gadget, &req->req,
1487 				 epn->is_in ? 1 : 0);
1488 	req->is_mapped = 0;
1489 
1490 	usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO);
1491 
1492 	if (epn->is_in) {
1493 		usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA,
1494 			USBF_EPN_IN_END_EN,
1495 			USBF_EPN_IN_EN);
1496 	} else {
1497 		usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA,
1498 			USBF_EPN_OUT_END_EN,
1499 			USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN);
1500 	}
1501 
1502 	/* As dma is stopped, be sure that no DMA interrupt are pending */
1503 	usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS,
1504 		USBF_EPN_IN_END_INT | USBF_EPN_OUT_END_INT);
1505 
1506 	usbf_reg_writel(epn->udc, USBF_REG_AHBBINT, USBF_SYS_DMA_ENDINT_EPN(epn->id));
1507 
1508 	/* Enable DMA interrupt the bridge level */
1509 	usbf_reg_bitset(epn->udc, USBF_REG_AHBBINTEN,
1510 		USBF_SYS_DMA_ENDINTEN_EPN(epn->id));
1511 
1512 	/* Reset transfer step */
1513 	req->xfer_step = USBF_XFER_START;
1514 }
1515 
1516 static void usbf_epn_fifo_flush(struct usbf_ep *epn)
1517 {
1518 	u32 ctrl;
1519 	u32 sts;
1520 	int ret;
1521 
1522 	dev_dbg(epn->udc->dev, "ep%u %s fifo flush\n", epn->id,
1523 		epn->is_in ? "in" : "out");
1524 
1525 	ctrl = usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL);
1526 	usbf_ep_reg_writel(epn, USBF_REG_EPN_CONTROL, ctrl | USBF_EPN_BCLR);
1527 
1528 	if (ctrl & USBF_EPN_DIR0)
1529 		return;
1530 
1531 	ret = readl_poll_timeout_atomic(epn->regs + USBF_REG_EPN_STATUS, sts,
1532 		(sts & (USBF_EPN_IN_DATA | USBF_EPN_IN_EMPTY)) == USBF_EPN_IN_EMPTY,
1533 		0,  10000);
1534 	if (ret)
1535 		dev_err(epn->udc->dev, "ep%u flush fifo timed out\n", epn->id);
1536 }
1537 
1538 static void usbf_ep_req_done(struct usbf_ep *ep, struct usbf_req *req,
1539 			     int status)
1540 {
1541 	list_del_init(&req->queue);
1542 
1543 	if (status) {
1544 		req->req.status = status;
1545 	} else {
1546 		if (req->req.status == -EINPROGRESS)
1547 			req->req.status = status;
1548 	}
1549 
1550 	dev_dbg(ep->udc->dev, "ep%u %s req done length %u/%u, status=%d\n", ep->id,
1551 		ep->is_in ? "in" : "out",
1552 		req->req.actual, req->req.length, req->req.status);
1553 
1554 	if (req->is_mapped)
1555 		usbf_epn_dma_abort(ep, req);
1556 
1557 	spin_unlock(&ep->udc->lock);
1558 	usb_gadget_giveback_request(&ep->ep, &req->req);
1559 	spin_lock(&ep->udc->lock);
1560 }
1561 
1562 static void usbf_ep_nuke(struct usbf_ep *ep, int status)
1563 {
1564 	struct usbf_req *req;
1565 
1566 	dev_dbg(ep->udc->dev, "ep%u %s nuke status %d\n", ep->id,
1567 		ep->is_in ? "in" : "out",
1568 		status);
1569 
1570 	while (!list_empty(&ep->queue)) {
1571 		req = list_first_entry(&ep->queue, struct usbf_req, queue);
1572 		usbf_ep_req_done(ep, req, status);
1573 	}
1574 
1575 	if (ep->id == 0)
1576 		usbf_ep0_fifo_flush(ep);
1577 	else
1578 		usbf_epn_fifo_flush(ep);
1579 }
1580 
1581 static bool usbf_ep_is_stalled(struct usbf_ep *ep)
1582 {
1583 	u32 ctrl;
1584 
1585 	if (ep->id == 0) {
1586 		ctrl = usbf_ep_reg_readl(ep, USBF_REG_EP0_CONTROL);
1587 		return (ctrl & USBF_EP0_STL) ? true : false;
1588 	}
1589 
1590 	ctrl = usbf_ep_reg_readl(ep, USBF_REG_EPN_CONTROL);
1591 	if (ep->is_in)
1592 		return (ctrl & USBF_EPN_ISTL) ? true : false;
1593 
1594 	return (ctrl & USBF_EPN_OSTL) ? true : false;
1595 }
1596 
1597 static int usbf_epn_start_queue(struct usbf_ep *epn)
1598 {
1599 	struct usbf_req *req;
1600 	int ret;
1601 
1602 	if (usbf_ep_is_stalled(epn))
1603 		return 0;
1604 
1605 	req = list_first_entry_or_null(&epn->queue, struct usbf_req, queue);
1606 
1607 	if (epn->is_in) {
1608 		if (req && !epn->is_processing) {
1609 			ret = epn->dma_regs ?
1610 				usbf_epn_dma_in(epn, req) :
1611 				usbf_epn_pio_in(epn, req);
1612 			if (ret != -EINPROGRESS) {
1613 				dev_err(epn->udc->dev,
1614 					"queued next request not in progress\n");
1615 					/* The request cannot be completed (ie
1616 					 * ret == 0) on the first call.
1617 					 * stall and nuke the endpoint
1618 					 */
1619 				return ret ? ret : -EIO;
1620 			}
1621 		}
1622 	} else {
1623 		if (req) {
1624 			/* Clear ONAK to accept OUT tokens */
1625 			usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL,
1626 				USBF_EPN_ONAK);
1627 
1628 			/* Enable interrupts */
1629 			usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA,
1630 				USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT);
1631 		} else {
1632 			/* Disable incoming data and interrupt.
1633 			 * They will be enable on next usb_eb_queue call
1634 			 */
1635 			usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL,
1636 				USBF_EPN_ONAK);
1637 			usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA,
1638 				USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT);
1639 		}
1640 	}
1641 	return 0;
1642 }
1643 
1644 static int usbf_ep_process_queue(struct usbf_ep *ep)
1645 {
1646 	int (*usbf_ep_xfer)(struct usbf_ep *ep, struct usbf_req *req);
1647 	struct usbf_req *req;
1648 	int is_processing;
1649 	int ret;
1650 
1651 	if (ep->is_in) {
1652 		usbf_ep_xfer = usbf_ep0_pio_in;
1653 		if (ep->id) {
1654 			usbf_ep_xfer = ep->dma_regs ?
1655 					usbf_epn_dma_in : usbf_epn_pio_in;
1656 		}
1657 	} else {
1658 		usbf_ep_xfer = usbf_ep0_pio_out;
1659 		if (ep->id) {
1660 			usbf_ep_xfer = ep->dma_regs ?
1661 					usbf_epn_dma_out : usbf_epn_pio_out;
1662 		}
1663 	}
1664 
1665 	req = list_first_entry_or_null(&ep->queue, struct usbf_req, queue);
1666 	if (!req) {
1667 		dev_err(ep->udc->dev,
1668 			"no request available for ep%u %s process\n", ep->id,
1669 			ep->is_in ? "in" : "out");
1670 		return -ENOENT;
1671 	}
1672 
1673 	do {
1674 		/* Were going to read the FIFO for this current request.
1675 		 * NAK any other incoming data to avoid a race condition if no
1676 		 * more request are available.
1677 		 */
1678 		if (!ep->is_in && ep->id != 0) {
1679 			usbf_ep_reg_bitset(ep, USBF_REG_EPN_CONTROL,
1680 				USBF_EPN_ONAK);
1681 		}
1682 
1683 		ret = usbf_ep_xfer(ep, req);
1684 		if (ret == -EINPROGRESS) {
1685 			if (!ep->is_in && ep->id != 0) {
1686 				/* The current request needs more data.
1687 				 * Allow incoming data
1688 				 */
1689 				usbf_ep_reg_bitclr(ep, USBF_REG_EPN_CONTROL,
1690 					USBF_EPN_ONAK);
1691 			}
1692 			return ret;
1693 		}
1694 
1695 		is_processing = ep->is_processing;
1696 		ep->is_processing = 1;
1697 		usbf_ep_req_done(ep, req, ret);
1698 		ep->is_processing = is_processing;
1699 
1700 		if (ret) {
1701 			/* An error was detected during the request transfer.
1702 			 * Any pending DMA transfers were aborted by the
1703 			 * usbf_ep_req_done() call.
1704 			 * It's time to flush the fifo
1705 			 */
1706 			if (ep->id == 0)
1707 				usbf_ep0_fifo_flush(ep);
1708 			else
1709 				usbf_epn_fifo_flush(ep);
1710 		}
1711 
1712 		req = list_first_entry_or_null(&ep->queue, struct usbf_req,
1713 					       queue);
1714 
1715 		if (ep->is_in)
1716 			continue;
1717 
1718 		if (ep->id != 0) {
1719 			if (req) {
1720 				/* An other request is available.
1721 				 * Allow incoming data
1722 				 */
1723 				usbf_ep_reg_bitclr(ep, USBF_REG_EPN_CONTROL,
1724 					USBF_EPN_ONAK);
1725 			} else {
1726 				/* No request queued. Disable interrupts.
1727 				 * They will be enabled on usb_ep_queue
1728 				 */
1729 				usbf_ep_reg_bitclr(ep, USBF_REG_EPN_INT_ENA,
1730 					USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT);
1731 			}
1732 		}
1733 		/* Do not recall usbf_ep_xfer() */
1734 		return req ? -EINPROGRESS : 0;
1735 
1736 	} while (req);
1737 
1738 	return 0;
1739 }
1740 
1741 static void usbf_ep_stall(struct usbf_ep *ep, bool stall)
1742 {
1743 	struct usbf_req *first;
1744 
1745 	dev_dbg(ep->udc->dev, "ep%u %s %s\n", ep->id,
1746 		ep->is_in ? "in" : "out",
1747 		stall ? "stall" : "unstall");
1748 
1749 	if (ep->id == 0) {
1750 		if (stall)
1751 			usbf_ep_reg_bitset(ep, USBF_REG_EP0_CONTROL, USBF_EP0_STL);
1752 		else
1753 			usbf_ep_reg_bitclr(ep, USBF_REG_EP0_CONTROL, USBF_EP0_STL);
1754 		return;
1755 	}
1756 
1757 	if (stall) {
1758 		if (ep->is_in)
1759 			usbf_ep_reg_bitset(ep, USBF_REG_EPN_CONTROL,
1760 				USBF_EPN_ISTL);
1761 		else
1762 			usbf_ep_reg_bitset(ep, USBF_REG_EPN_CONTROL,
1763 				USBF_EPN_OSTL | USBF_EPN_OSTL_EN);
1764 	} else {
1765 		first = list_first_entry_or_null(&ep->queue, struct usbf_req, queue);
1766 		if (first && first->is_mapped) {
1767 			/* This can appear if the host halts an endpoint using
1768 			 * SET_FEATURE and then un-halts the endpoint
1769 			 */
1770 			usbf_epn_dma_abort(ep, first);
1771 		}
1772 		usbf_epn_fifo_flush(ep);
1773 		if (ep->is_in) {
1774 			usbf_ep_reg_clrset(ep, USBF_REG_EPN_CONTROL,
1775 				USBF_EPN_ISTL,
1776 				USBF_EPN_IPIDCLR);
1777 		} else {
1778 			usbf_ep_reg_clrset(ep, USBF_REG_EPN_CONTROL,
1779 				USBF_EPN_OSTL,
1780 				USBF_EPN_OSTL_EN | USBF_EPN_OPIDCLR);
1781 		}
1782 		usbf_epn_start_queue(ep);
1783 	}
1784 }
1785 
1786 static void usbf_ep0_enable(struct usbf_ep *ep0)
1787 {
1788 	usbf_ep_reg_writel(ep0, USBF_REG_EP0_CONTROL, USBF_EP0_INAK_EN | USBF_EP0_BCLR);
1789 
1790 	usbf_ep_reg_writel(ep0, USBF_REG_EP0_INT_ENA,
1791 		USBF_EP0_SETUP_EN | USBF_EP0_STG_START_EN | USBF_EP0_STG_END_EN |
1792 		USBF_EP0_OUT_EN | USBF_EP0_OUT_NULL_EN | USBF_EP0_IN_EN);
1793 
1794 	ep0->udc->ep0state = EP0_IDLE;
1795 	ep0->disabled = 0;
1796 
1797 	/* enable interrupts for the ep0 */
1798 	usbf_reg_bitset(ep0->udc, USBF_REG_USB_INT_ENA, USBF_USB_EPN_EN(0));
1799 }
1800 
1801 static int usbf_epn_enable(struct usbf_ep *epn)
1802 {
1803 	u32 base_addr;
1804 	u32 ctrl;
1805 
1806 	base_addr = usbf_ep_info[epn->id].base_addr;
1807 	usbf_ep_reg_writel(epn, USBF_REG_EPN_PCKT_ADRS,
1808 		USBF_EPN_BASEAD(base_addr) | USBF_EPN_MPKT(epn->ep.maxpacket));
1809 
1810 	/* OUT transfer interrupt are enabled during usb_ep_queue */
1811 	if (epn->is_in) {
1812 		/* Will be changed in DMA processing */
1813 		usbf_ep_reg_writel(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_IN_EN);
1814 	}
1815 
1816 	/* Clear, set endpoint direction, set IN/OUT STL, and enable
1817 	 * Send NAK for Data out as request are not queued yet
1818 	 */
1819 	ctrl = USBF_EPN_EN | USBF_EPN_BCLR;
1820 	if (epn->is_in)
1821 		ctrl |= USBF_EPN_OSTL | USBF_EPN_OSTL_EN;
1822 	else
1823 		ctrl |= USBF_EPN_DIR0 | USBF_EPN_ISTL | USBF_EPN_OSTL_EN | USBF_EPN_ONAK;
1824 	usbf_ep_reg_writel(epn, USBF_REG_EPN_CONTROL, ctrl);
1825 
1826 	return 0;
1827 }
1828 
1829 static int usbf_ep_enable(struct usb_ep *_ep,
1830 			  const struct usb_endpoint_descriptor *desc)
1831 {
1832 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
1833 	struct usbf_udc *udc = ep->udc;
1834 	unsigned long flags;
1835 	int ret;
1836 
1837 	if (ep->id == 0)
1838 		return -EINVAL;
1839 
1840 	if (!desc || desc->bDescriptorType != USB_DT_ENDPOINT)
1841 		return -EINVAL;
1842 
1843 	dev_dbg(ep->udc->dev, "ep%u %s mpkts %d\n", ep->id,
1844 		usb_endpoint_dir_in(desc) ? "in" : "out",
1845 		usb_endpoint_maxp(desc));
1846 
1847 	spin_lock_irqsave(&ep->udc->lock, flags);
1848 	ep->is_in = usb_endpoint_dir_in(desc);
1849 	ep->ep.maxpacket = usb_endpoint_maxp(desc);
1850 
1851 	ret = usbf_epn_enable(ep);
1852 	if (ret)
1853 		goto end;
1854 
1855 	ep->disabled = 0;
1856 
1857 	/* enable interrupts for this endpoint */
1858 	usbf_reg_bitset(udc, USBF_REG_USB_INT_ENA, USBF_USB_EPN_EN(ep->id));
1859 
1860 	/* enable DMA interrupt at bridge level if DMA is used */
1861 	if (ep->dma_regs) {
1862 		ep->bridge_on_dma_end = NULL;
1863 		usbf_reg_bitset(udc, USBF_REG_AHBBINTEN,
1864 			USBF_SYS_DMA_ENDINTEN_EPN(ep->id));
1865 	}
1866 
1867 	ret = 0;
1868 end:
1869 	spin_unlock_irqrestore(&ep->udc->lock, flags);
1870 	return ret;
1871 }
1872 
1873 static int usbf_epn_disable(struct usbf_ep *epn)
1874 {
1875 	/* Disable interrupts */
1876 	usbf_ep_reg_writel(epn, USBF_REG_EPN_INT_ENA, 0);
1877 
1878 	/* Disable endpoint */
1879 	usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_EN);
1880 
1881 	/* remove anything that was pending */
1882 	usbf_ep_nuke(epn, -ESHUTDOWN);
1883 
1884 	return 0;
1885 }
1886 
1887 static int usbf_ep_disable(struct usb_ep *_ep)
1888 {
1889 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
1890 	struct usbf_udc *udc = ep->udc;
1891 	unsigned long flags;
1892 	int ret;
1893 
1894 	if (ep->id == 0)
1895 		return -EINVAL;
1896 
1897 	dev_dbg(ep->udc->dev, "ep%u %s mpkts %d\n", ep->id,
1898 		ep->is_in ? "in" : "out", ep->ep.maxpacket);
1899 
1900 	spin_lock_irqsave(&ep->udc->lock, flags);
1901 	ep->disabled = 1;
1902 	/* Disable DMA interrupt */
1903 	if (ep->dma_regs) {
1904 		usbf_reg_bitclr(udc, USBF_REG_AHBBINTEN,
1905 			USBF_SYS_DMA_ENDINTEN_EPN(ep->id));
1906 		ep->bridge_on_dma_end = NULL;
1907 	}
1908 	/* disable interrupts for this endpoint */
1909 	usbf_reg_bitclr(udc, USBF_REG_USB_INT_ENA, USBF_USB_EPN_EN(ep->id));
1910 	/* and the endpoint itself */
1911 	ret = usbf_epn_disable(ep);
1912 	spin_unlock_irqrestore(&ep->udc->lock, flags);
1913 
1914 	return ret;
1915 }
1916 
1917 static int usbf_ep0_queue(struct usbf_ep *ep0, struct usbf_req *req,
1918 			  gfp_t gfp_flags)
1919 {
1920 	int ret;
1921 
1922 	req->req.actual = 0;
1923 	req->req.status = -EINPROGRESS;
1924 	req->is_zero_sent = 0;
1925 
1926 	list_add_tail(&req->queue, &ep0->queue);
1927 
1928 	if (ep0->udc->ep0state == EP0_IN_STATUS_START_PHASE)
1929 		return 0;
1930 
1931 	if (!ep0->is_in)
1932 		return 0;
1933 
1934 	if (ep0->udc->ep0state == EP0_IN_STATUS_PHASE) {
1935 		if (req->req.length) {
1936 			dev_err(ep0->udc->dev,
1937 				"request lng %u for ep0 in status phase\n",
1938 				req->req.length);
1939 			return -EINVAL;
1940 		}
1941 		ep0->delayed_status = 0;
1942 	}
1943 	if (!ep0->is_processing) {
1944 		ret = usbf_ep0_pio_in(ep0, req);
1945 		if (ret != -EINPROGRESS) {
1946 			dev_err(ep0->udc->dev,
1947 				"queued request not in progress\n");
1948 			/* The request cannot be completed (ie
1949 			 * ret == 0) on the first call
1950 			 */
1951 			return ret ? ret : -EIO;
1952 		}
1953 	}
1954 
1955 	return 0;
1956 }
1957 
1958 static int usbf_epn_queue(struct usbf_ep *ep, struct usbf_req *req,
1959 			  gfp_t gfp_flags)
1960 {
1961 	int was_empty;
1962 	int ret;
1963 
1964 	if (ep->disabled) {
1965 		dev_err(ep->udc->dev, "ep%u request queue while disable\n",
1966 			ep->id);
1967 		return -ESHUTDOWN;
1968 	}
1969 
1970 	req->req.actual = 0;
1971 	req->req.status = -EINPROGRESS;
1972 	req->is_zero_sent = 0;
1973 	req->xfer_step = USBF_XFER_START;
1974 
1975 	was_empty = list_empty(&ep->queue);
1976 	list_add_tail(&req->queue, &ep->queue);
1977 	if (was_empty) {
1978 		ret = usbf_epn_start_queue(ep);
1979 		if (ret)
1980 			return ret;
1981 	}
1982 	return 0;
1983 }
1984 
1985 static int usbf_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
1986 			 gfp_t gfp_flags)
1987 {
1988 	struct usbf_req *req = container_of(_req, struct usbf_req, req);
1989 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
1990 	struct usbf_udc *udc = ep->udc;
1991 	unsigned long flags;
1992 	int ret;
1993 
1994 	if (!_req || !_req->buf)
1995 		return -EINVAL;
1996 
1997 	if (!udc || !udc->driver)
1998 		return -EINVAL;
1999 
2000 	dev_dbg(ep->udc->dev, "ep%u %s req queue length %u, zero %u, short_not_ok %u\n",
2001 		ep->id, ep->is_in ? "in" : "out",
2002 		req->req.length, req->req.zero, req->req.short_not_ok);
2003 
2004 	spin_lock_irqsave(&ep->udc->lock, flags);
2005 	if (ep->id == 0)
2006 		ret = usbf_ep0_queue(ep, req, gfp_flags);
2007 	else
2008 		ret = usbf_epn_queue(ep, req, gfp_flags);
2009 	spin_unlock_irqrestore(&ep->udc->lock, flags);
2010 	return ret;
2011 }
2012 
2013 static int usbf_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
2014 {
2015 	struct usbf_req *req = container_of(_req, struct usbf_req, req);
2016 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
2017 	unsigned long flags;
2018 	int is_processing;
2019 	int first;
2020 	int ret;
2021 
2022 	spin_lock_irqsave(&ep->udc->lock, flags);
2023 
2024 	dev_dbg(ep->udc->dev, "ep%u %s req dequeue length %u/%u\n",
2025 		ep->id, ep->is_in ? "in" : "out",
2026 		req->req.actual, req->req.length);
2027 
2028 	first = list_is_first(&req->queue, &ep->queue);
2029 
2030 	/* Complete the request but avoid any operation that could be done
2031 	 * if a new request is queued during the request completion
2032 	 */
2033 	is_processing = ep->is_processing;
2034 	ep->is_processing = 1;
2035 	usbf_ep_req_done(ep, req, -ECONNRESET);
2036 	ep->is_processing = is_processing;
2037 
2038 	if (first) {
2039 		/* The first item in the list was dequeued.
2040 		 * This item could already be submitted to the hardware.
2041 		 * So, flush the fifo
2042 		 */
2043 		if (ep->id)
2044 			usbf_epn_fifo_flush(ep);
2045 		else
2046 			usbf_ep0_fifo_flush(ep);
2047 	}
2048 
2049 	if (ep->id == 0) {
2050 		/* We dequeue a request on ep0. On this endpoint, we can have
2051 		 * 1 request related to the data stage and/or 1 request
2052 		 * related to the status stage.
2053 		 * We dequeue one of them and so the USB control transaction
2054 		 * is no more coherent. The simple way to be consistent after
2055 		 * dequeuing is to stall and nuke the endpoint and wait the
2056 		 * next SETUP packet.
2057 		 */
2058 		usbf_ep_stall(ep, true);
2059 		usbf_ep_nuke(ep, -ECONNRESET);
2060 		ep->udc->ep0state = EP0_IDLE;
2061 		goto end;
2062 	}
2063 
2064 	if (!first)
2065 		goto end;
2066 
2067 	ret = usbf_epn_start_queue(ep);
2068 	if (ret) {
2069 		usbf_ep_stall(ep, true);
2070 		usbf_ep_nuke(ep, -EIO);
2071 	}
2072 end:
2073 	spin_unlock_irqrestore(&ep->udc->lock, flags);
2074 	return 0;
2075 }
2076 
2077 static struct usb_request *usbf_ep_alloc_request(struct usb_ep *_ep,
2078 						 gfp_t gfp_flags)
2079 {
2080 	struct usbf_req *req;
2081 
2082 	if (!_ep)
2083 		return NULL;
2084 
2085 	req = kzalloc(sizeof(*req), gfp_flags);
2086 	if (!req)
2087 		return NULL;
2088 
2089 	INIT_LIST_HEAD(&req->queue);
2090 
2091 	return &req->req;
2092 }
2093 
2094 static void usbf_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
2095 {
2096 	struct usbf_req *req;
2097 	unsigned long flags;
2098 	struct usbf_ep *ep;
2099 
2100 	if (!_ep || !_req)
2101 		return;
2102 
2103 	req = container_of(_req, struct usbf_req, req);
2104 	ep = container_of(_ep, struct usbf_ep, ep);
2105 
2106 	spin_lock_irqsave(&ep->udc->lock, flags);
2107 	list_del_init(&req->queue);
2108 	spin_unlock_irqrestore(&ep->udc->lock, flags);
2109 	kfree(req);
2110 }
2111 
2112 static int usbf_ep_set_halt(struct usb_ep *_ep, int halt)
2113 {
2114 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
2115 	unsigned long flags;
2116 	int ret;
2117 
2118 	if (ep->id == 0)
2119 		return -EINVAL;
2120 
2121 	spin_lock_irqsave(&ep->udc->lock, flags);
2122 
2123 	if (!list_empty(&ep->queue)) {
2124 		ret = -EAGAIN;
2125 		goto end;
2126 	}
2127 
2128 	usbf_ep_stall(ep, halt);
2129 	if (!halt)
2130 		ep->is_wedged = 0;
2131 
2132 	ret = 0;
2133 end:
2134 	spin_unlock_irqrestore(&ep->udc->lock, flags);
2135 
2136 	return ret;
2137 }
2138 
2139 static int usbf_ep_set_wedge(struct usb_ep *_ep)
2140 {
2141 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
2142 	unsigned long flags;
2143 	int ret;
2144 
2145 	if (ep->id == 0)
2146 		return -EINVAL;
2147 
2148 	spin_lock_irqsave(&ep->udc->lock, flags);
2149 	if (!list_empty(&ep->queue)) {
2150 		ret = -EAGAIN;
2151 		goto end;
2152 	}
2153 	usbf_ep_stall(ep, 1);
2154 	ep->is_wedged = 1;
2155 
2156 	ret = 0;
2157 end:
2158 	spin_unlock_irqrestore(&ep->udc->lock, flags);
2159 	return ret;
2160 }
2161 
2162 static struct usb_ep_ops usbf_ep_ops = {
2163 	.enable = usbf_ep_enable,
2164 	.disable = usbf_ep_disable,
2165 	.queue = usbf_ep_queue,
2166 	.dequeue = usbf_ep_dequeue,
2167 	.set_halt = usbf_ep_set_halt,
2168 	.set_wedge = usbf_ep_set_wedge,
2169 	.alloc_request = usbf_ep_alloc_request,
2170 	.free_request = usbf_ep_free_request,
2171 };
2172 
2173 static void usbf_ep0_req_complete(struct usb_ep *_ep, struct usb_request *_req)
2174 {
2175 }
2176 
2177 static void usbf_ep0_fill_req(struct usbf_ep *ep0, struct usbf_req *req,
2178 			      void *buf, unsigned int length,
2179 			      void (*complete)(struct usb_ep *_ep,
2180 					       struct usb_request *_req))
2181 {
2182 	if (buf && length)
2183 		memcpy(ep0->udc->ep0_buf, buf, length);
2184 
2185 	req->req.buf = ep0->udc->ep0_buf;
2186 	req->req.length = length;
2187 	req->req.dma = 0;
2188 	req->req.zero = true;
2189 	req->req.complete = complete ? complete : usbf_ep0_req_complete;
2190 	req->req.status = -EINPROGRESS;
2191 	req->req.context = NULL;
2192 	req->req.actual = 0;
2193 }
2194 
2195 static struct usbf_ep *usbf_get_ep_by_addr(struct usbf_udc *udc, u8 address)
2196 {
2197 	struct usbf_ep *ep;
2198 	unsigned int i;
2199 
2200 	if ((address & USB_ENDPOINT_NUMBER_MASK) == 0)
2201 		return &udc->ep[0];
2202 
2203 	for (i = 1; i < ARRAY_SIZE(udc->ep); i++) {
2204 		ep = &udc->ep[i];
2205 
2206 		if (!ep->ep.desc)
2207 			continue;
2208 
2209 		if (ep->ep.desc->bEndpointAddress == address)
2210 			return ep;
2211 	}
2212 
2213 	return NULL;
2214 }
2215 
2216 static int usbf_req_delegate(struct usbf_udc *udc,
2217 			     const struct usb_ctrlrequest *ctrlrequest)
2218 {
2219 	int ret;
2220 
2221 	spin_unlock(&udc->lock);
2222 	ret = udc->driver->setup(&udc->gadget, ctrlrequest);
2223 	spin_lock(&udc->lock);
2224 	if (ret < 0) {
2225 		dev_dbg(udc->dev, "udc driver setup failed %d\n", ret);
2226 		return ret;
2227 	}
2228 	if (ret == USB_GADGET_DELAYED_STATUS) {
2229 		dev_dbg(udc->dev, "delayed status set\n");
2230 		udc->ep[0].delayed_status = 1;
2231 		return 0;
2232 	}
2233 	return ret;
2234 }
2235 
2236 static int usbf_req_get_status(struct usbf_udc *udc,
2237 			       const struct usb_ctrlrequest *ctrlrequest)
2238 {
2239 	struct usbf_ep *ep;
2240 	u16 status_data;
2241 	u16 wLength;
2242 	u16 wValue;
2243 	u16 wIndex;
2244 
2245 	wValue  = le16_to_cpu(ctrlrequest->wValue);
2246 	wLength = le16_to_cpu(ctrlrequest->wLength);
2247 	wIndex  = le16_to_cpu(ctrlrequest->wIndex);
2248 
2249 	switch (ctrlrequest->bRequestType) {
2250 	case USB_DIR_IN | USB_RECIP_DEVICE | USB_TYPE_STANDARD:
2251 		if ((wValue != 0) || (wIndex != 0) || (wLength != 2))
2252 			goto delegate;
2253 
2254 		status_data = 0;
2255 		if (udc->gadget.is_selfpowered)
2256 			status_data |= BIT(USB_DEVICE_SELF_POWERED);
2257 
2258 		if (udc->is_remote_wakeup)
2259 			status_data |= BIT(USB_DEVICE_REMOTE_WAKEUP);
2260 
2261 		break;
2262 
2263 	case USB_DIR_IN | USB_RECIP_ENDPOINT | USB_TYPE_STANDARD:
2264 		if ((wValue != 0) || (wLength != 2))
2265 			goto delegate;
2266 
2267 		ep = usbf_get_ep_by_addr(udc, wIndex);
2268 		if (!ep)
2269 			return -EINVAL;
2270 
2271 		status_data = 0;
2272 		if (usbf_ep_is_stalled(ep))
2273 			status_data |= cpu_to_le16(1);
2274 		break;
2275 
2276 	case USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_STANDARD:
2277 		if ((wValue != 0) || (wLength != 2))
2278 			goto delegate;
2279 		status_data = 0;
2280 		break;
2281 
2282 	default:
2283 		goto delegate;
2284 	}
2285 
2286 	usbf_ep0_fill_req(&udc->ep[0], &udc->setup_reply, &status_data,
2287 			  sizeof(status_data), NULL);
2288 	usbf_ep0_queue(&udc->ep[0], &udc->setup_reply, GFP_ATOMIC);
2289 
2290 	return 0;
2291 
2292 delegate:
2293 	return usbf_req_delegate(udc, ctrlrequest);
2294 }
2295 
2296 static int usbf_req_clear_set_feature(struct usbf_udc *udc,
2297 				      const struct usb_ctrlrequest *ctrlrequest,
2298 				      bool is_set)
2299 {
2300 	struct usbf_ep *ep;
2301 	u16 wLength;
2302 	u16 wValue;
2303 	u16 wIndex;
2304 
2305 	wValue  = le16_to_cpu(ctrlrequest->wValue);
2306 	wLength = le16_to_cpu(ctrlrequest->wLength);
2307 	wIndex  = le16_to_cpu(ctrlrequest->wIndex);
2308 
2309 	switch (ctrlrequest->bRequestType) {
2310 	case USB_DIR_OUT | USB_RECIP_DEVICE:
2311 		if ((wIndex != 0) || (wLength != 0))
2312 			goto delegate;
2313 
2314 		if (wValue != cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP))
2315 			goto delegate;
2316 
2317 		udc->is_remote_wakeup = is_set;
2318 		break;
2319 
2320 	case USB_DIR_OUT | USB_RECIP_ENDPOINT:
2321 		if (wLength != 0)
2322 			goto delegate;
2323 
2324 		ep = usbf_get_ep_by_addr(udc, wIndex);
2325 		if (!ep)
2326 			return -EINVAL;
2327 
2328 		if ((ep->id == 0) && is_set) {
2329 			/* Endpoint 0 cannot be halted (stalled)
2330 			 * Returning an error code leads to a STALL on this ep0
2331 			 * but keep the automate in a consistent state.
2332 			 */
2333 			return -EINVAL;
2334 		}
2335 		if (ep->is_wedged && !is_set) {
2336 			/* Ignore CLEAR_FEATURE(HALT ENDPOINT) when the
2337 			 * endpoint is wedged
2338 			 */
2339 			break;
2340 		}
2341 		usbf_ep_stall(ep, is_set);
2342 		break;
2343 
2344 	default:
2345 		goto delegate;
2346 	}
2347 
2348 	return 0;
2349 
2350 delegate:
2351 	return usbf_req_delegate(udc, ctrlrequest);
2352 }
2353 
2354 static void usbf_ep0_req_set_address_complete(struct usb_ep *_ep,
2355 					      struct usb_request *_req)
2356 {
2357 	struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep);
2358 
2359 	/* The status phase of the SET_ADDRESS request is completed ... */
2360 	if (_req->status == 0) {
2361 		/* ... without any errors -> Signaled the state to the core. */
2362 		usb_gadget_set_state(&ep->udc->gadget, USB_STATE_ADDRESS);
2363 	}
2364 
2365 	/* In case of request failure, there is no need to revert the address
2366 	 * value set to the hardware as the hardware will take care of the
2367 	 * value only if the status stage is completed normally.
2368 	 */
2369 }
2370 
2371 static int usbf_req_set_address(struct usbf_udc *udc,
2372 				const struct usb_ctrlrequest *ctrlrequest)
2373 {
2374 	u16 wLength;
2375 	u16 wValue;
2376 	u16 wIndex;
2377 	u32 addr;
2378 
2379 	wValue  = le16_to_cpu(ctrlrequest->wValue);
2380 	wLength = le16_to_cpu(ctrlrequest->wLength);
2381 	wIndex  = le16_to_cpu(ctrlrequest->wIndex);
2382 
2383 	if (ctrlrequest->bRequestType != (USB_DIR_OUT | USB_RECIP_DEVICE))
2384 		goto delegate;
2385 
2386 	if ((wIndex != 0) || (wLength != 0) || (wValue > 127))
2387 		return -EINVAL;
2388 
2389 	addr = wValue;
2390 	/* The hardware will take care of this USB address after the status
2391 	 * stage of the SET_ADDRESS request is completed normally.
2392 	 * It is safe to write it now
2393 	 */
2394 	usbf_reg_writel(udc, USBF_REG_USB_ADDRESS, USBF_USB_SET_USB_ADDR(addr));
2395 
2396 	/* Queued the status request */
2397 	usbf_ep0_fill_req(&udc->ep[0], &udc->setup_reply, NULL, 0,
2398 			  usbf_ep0_req_set_address_complete);
2399 	usbf_ep0_queue(&udc->ep[0], &udc->setup_reply, GFP_ATOMIC);
2400 
2401 	return 0;
2402 
2403 delegate:
2404 	return usbf_req_delegate(udc, ctrlrequest);
2405 }
2406 
2407 static int usbf_req_set_configuration(struct usbf_udc *udc,
2408 				      const struct usb_ctrlrequest *ctrlrequest)
2409 {
2410 	u16 wLength;
2411 	u16 wValue;
2412 	u16 wIndex;
2413 	int ret;
2414 
2415 	ret = usbf_req_delegate(udc, ctrlrequest);
2416 	if (ret)
2417 		return ret;
2418 
2419 	wValue  = le16_to_cpu(ctrlrequest->wValue);
2420 	wLength = le16_to_cpu(ctrlrequest->wLength);
2421 	wIndex  = le16_to_cpu(ctrlrequest->wIndex);
2422 
2423 	if ((ctrlrequest->bRequestType != (USB_DIR_OUT | USB_RECIP_DEVICE)) ||
2424 	    (wIndex != 0) || (wLength != 0)) {
2425 		/* No error detected by driver->setup() but it is not an USB2.0
2426 		 * Ch9 SET_CONFIGURATION.
2427 		 * Nothing more to do
2428 		 */
2429 		return 0;
2430 	}
2431 
2432 	if (wValue & 0x00FF) {
2433 		usbf_reg_bitset(udc, USBF_REG_USB_CONTROL, USBF_USB_CONF);
2434 	} else {
2435 		usbf_reg_bitclr(udc, USBF_REG_USB_CONTROL, USBF_USB_CONF);
2436 		/* Go back to Address State */
2437 		spin_unlock(&udc->lock);
2438 		usb_gadget_set_state(&udc->gadget, USB_STATE_ADDRESS);
2439 		spin_lock(&udc->lock);
2440 	}
2441 
2442 	return 0;
2443 }
2444 
2445 static int usbf_handle_ep0_setup(struct usbf_ep *ep0)
2446 {
2447 	union {
2448 		struct usb_ctrlrequest ctrlreq;
2449 		u32 raw[2];
2450 	} crq;
2451 	struct usbf_udc *udc = ep0->udc;
2452 	int ret;
2453 
2454 	/* Read setup data (ie the USB control request) */
2455 	crq.raw[0] = usbf_reg_readl(udc, USBF_REG_SETUP_DATA0);
2456 	crq.raw[1] = usbf_reg_readl(udc, USBF_REG_SETUP_DATA1);
2457 
2458 	dev_dbg(ep0->udc->dev,
2459 		"ep0 req%02x.%02x, wValue 0x%04x, wIndex 0x%04x, wLength 0x%04x\n",
2460 		crq.ctrlreq.bRequestType, crq.ctrlreq.bRequest,
2461 		crq.ctrlreq.wValue, crq.ctrlreq.wIndex, crq.ctrlreq.wLength);
2462 
2463 	/* Set current EP0 state according to the received request */
2464 	if (crq.ctrlreq.wLength) {
2465 		if (crq.ctrlreq.bRequestType & USB_DIR_IN) {
2466 			udc->ep0state = EP0_IN_DATA_PHASE;
2467 			usbf_ep_reg_clrset(ep0, USBF_REG_EP0_CONTROL,
2468 				USBF_EP0_INAK,
2469 				USBF_EP0_INAK_EN);
2470 			ep0->is_in = 1;
2471 		} else {
2472 			udc->ep0state = EP0_OUT_DATA_PHASE;
2473 			usbf_ep_reg_bitclr(ep0, USBF_REG_EP0_CONTROL,
2474 				USBF_EP0_ONAK);
2475 			ep0->is_in = 0;
2476 		}
2477 	} else {
2478 		udc->ep0state = EP0_IN_STATUS_START_PHASE;
2479 		ep0->is_in = 1;
2480 	}
2481 
2482 	/* We starts a new control transfer -> Clear the delayed status flag */
2483 	ep0->delayed_status = 0;
2484 
2485 	if ((crq.ctrlreq.bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD) {
2486 		/* This is not a USB standard request -> delelate */
2487 		goto delegate;
2488 	}
2489 
2490 	switch (crq.ctrlreq.bRequest) {
2491 	case USB_REQ_GET_STATUS:
2492 		ret = usbf_req_get_status(udc, &crq.ctrlreq);
2493 		break;
2494 
2495 	case USB_REQ_CLEAR_FEATURE:
2496 		ret = usbf_req_clear_set_feature(udc, &crq.ctrlreq, false);
2497 		break;
2498 
2499 	case USB_REQ_SET_FEATURE:
2500 		ret = usbf_req_clear_set_feature(udc, &crq.ctrlreq, true);
2501 		break;
2502 
2503 	case USB_REQ_SET_ADDRESS:
2504 		ret = usbf_req_set_address(udc, &crq.ctrlreq);
2505 		break;
2506 
2507 	case USB_REQ_SET_CONFIGURATION:
2508 		ret = usbf_req_set_configuration(udc, &crq.ctrlreq);
2509 		break;
2510 
2511 	default:
2512 		goto delegate;
2513 	}
2514 
2515 	return ret;
2516 
2517 delegate:
2518 	return usbf_req_delegate(udc, &crq.ctrlreq);
2519 }
2520 
2521 static int usbf_handle_ep0_data_status(struct usbf_ep *ep0,
2522 				  const char *ep0state_name,
2523 				  enum usbf_ep0state next_ep0state)
2524 {
2525 	struct usbf_udc *udc = ep0->udc;
2526 	int ret;
2527 
2528 	ret = usbf_ep_process_queue(ep0);
2529 	switch (ret) {
2530 	case -ENOENT:
2531 		dev_err(udc->dev,
2532 			"no request available for ep0 %s phase\n",
2533 			ep0state_name);
2534 		break;
2535 	case -EINPROGRESS:
2536 		/* More data needs to be processed */
2537 		ret = 0;
2538 		break;
2539 	case 0:
2540 		/* All requests in the queue are processed */
2541 		udc->ep0state = next_ep0state;
2542 		break;
2543 	default:
2544 		dev_err(udc->dev,
2545 			"process queue failed for ep0 %s phase (%d)\n",
2546 			ep0state_name, ret);
2547 		break;
2548 	}
2549 	return ret;
2550 }
2551 
2552 static int usbf_handle_ep0_out_status_start(struct usbf_ep *ep0)
2553 {
2554 	struct usbf_udc *udc = ep0->udc;
2555 	struct usbf_req *req;
2556 
2557 	usbf_ep_reg_clrset(ep0, USBF_REG_EP0_CONTROL,
2558 				USBF_EP0_ONAK,
2559 				USBF_EP0_PIDCLR);
2560 	ep0->is_in = 0;
2561 
2562 	req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue);
2563 	if (!req) {
2564 		usbf_ep0_fill_req(ep0, &udc->setup_reply, NULL, 0, NULL);
2565 		usbf_ep0_queue(ep0, &udc->setup_reply, GFP_ATOMIC);
2566 	} else {
2567 		if (req->req.length) {
2568 			dev_err(udc->dev,
2569 				"queued request length %u for ep0 out status phase\n",
2570 				req->req.length);
2571 		}
2572 	}
2573 	udc->ep0state = EP0_OUT_STATUS_PHASE;
2574 	return 0;
2575 }
2576 
2577 static int usbf_handle_ep0_in_status_start(struct usbf_ep *ep0)
2578 {
2579 	struct usbf_udc *udc = ep0->udc;
2580 	struct usbf_req *req;
2581 	int ret;
2582 
2583 	usbf_ep_reg_clrset(ep0, USBF_REG_EP0_CONTROL,
2584 				USBF_EP0_INAK,
2585 				USBF_EP0_INAK_EN | USBF_EP0_PIDCLR);
2586 	ep0->is_in = 1;
2587 
2588 	/* Queue request for status if needed */
2589 	req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue);
2590 	if (!req) {
2591 		if (ep0->delayed_status) {
2592 			dev_dbg(ep0->udc->dev,
2593 				"EP0_IN_STATUS_START_PHASE ep0->delayed_status set\n");
2594 			udc->ep0state = EP0_IN_STATUS_PHASE;
2595 			return 0;
2596 		}
2597 
2598 		usbf_ep0_fill_req(ep0, &udc->setup_reply, NULL,
2599 			  0, NULL);
2600 		usbf_ep0_queue(ep0, &udc->setup_reply,
2601 			       GFP_ATOMIC);
2602 
2603 		req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue);
2604 	} else {
2605 		if (req->req.length) {
2606 			dev_err(udc->dev,
2607 				"queued request length %u for ep0 in status phase\n",
2608 				req->req.length);
2609 		}
2610 	}
2611 
2612 	ret = usbf_ep0_pio_in(ep0, req);
2613 	if (ret != -EINPROGRESS) {
2614 		usbf_ep_req_done(ep0, req, ret);
2615 		udc->ep0state = EP0_IN_STATUS_END_PHASE;
2616 		return 0;
2617 	}
2618 
2619 	udc->ep0state = EP0_IN_STATUS_PHASE;
2620 	return 0;
2621 }
2622 
2623 static void usbf_ep0_interrupt(struct usbf_ep *ep0)
2624 {
2625 	struct usbf_udc *udc = ep0->udc;
2626 	u32 sts, prev_sts;
2627 	int prev_ep0state;
2628 	int ret;
2629 
2630 	ep0->status = usbf_ep_reg_readl(ep0, USBF_REG_EP0_STATUS);
2631 	usbf_ep_reg_writel(ep0, USBF_REG_EP0_STATUS, ~ep0->status);
2632 
2633 	dev_dbg(ep0->udc->dev, "ep0 status=0x%08x, enable=%08x\n, ctrl=0x%08x\n",
2634 		ep0->status,
2635 		usbf_ep_reg_readl(ep0, USBF_REG_EP0_INT_ENA),
2636 		usbf_ep_reg_readl(ep0, USBF_REG_EP0_CONTROL));
2637 
2638 	sts = ep0->status & (USBF_EP0_SETUP_INT | USBF_EP0_IN_INT | USBF_EP0_OUT_INT |
2639 			     USBF_EP0_OUT_NULL_INT | USBF_EP0_STG_START_INT |
2640 			     USBF_EP0_STG_END_INT);
2641 
2642 	ret = 0;
2643 	do {
2644 		dev_dbg(ep0->udc->dev, "udc->ep0state=%d\n", udc->ep0state);
2645 
2646 		prev_sts = sts;
2647 		prev_ep0state = udc->ep0state;
2648 		switch (udc->ep0state) {
2649 		case EP0_IDLE:
2650 			if (!(sts & USBF_EP0_SETUP_INT))
2651 				break;
2652 
2653 			sts &= ~USBF_EP0_SETUP_INT;
2654 			dev_dbg(ep0->udc->dev, "ep0 handle setup\n");
2655 			ret = usbf_handle_ep0_setup(ep0);
2656 			break;
2657 
2658 		case EP0_IN_DATA_PHASE:
2659 			if (!(sts & USBF_EP0_IN_INT))
2660 				break;
2661 
2662 			sts &= ~USBF_EP0_IN_INT;
2663 			dev_dbg(ep0->udc->dev, "ep0 handle in data phase\n");
2664 			ret = usbf_handle_ep0_data_status(ep0,
2665 				"in data", EP0_OUT_STATUS_START_PHASE);
2666 			break;
2667 
2668 		case EP0_OUT_STATUS_START_PHASE:
2669 			if (!(sts & USBF_EP0_STG_START_INT))
2670 				break;
2671 
2672 			sts &= ~USBF_EP0_STG_START_INT;
2673 			dev_dbg(ep0->udc->dev, "ep0 handle out status start phase\n");
2674 			ret = usbf_handle_ep0_out_status_start(ep0);
2675 			break;
2676 
2677 		case EP0_OUT_STATUS_PHASE:
2678 			if (!(sts & (USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT)))
2679 				break;
2680 
2681 			sts &= ~(USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT);
2682 			dev_dbg(ep0->udc->dev, "ep0 handle out status phase\n");
2683 			ret = usbf_handle_ep0_data_status(ep0,
2684 				"out status",
2685 				EP0_OUT_STATUS_END_PHASE);
2686 			break;
2687 
2688 		case EP0_OUT_STATUS_END_PHASE:
2689 			if (!(sts & (USBF_EP0_STG_END_INT | USBF_EP0_SETUP_INT)))
2690 				break;
2691 
2692 			sts &= ~USBF_EP0_STG_END_INT;
2693 			dev_dbg(ep0->udc->dev, "ep0 handle out status end phase\n");
2694 			udc->ep0state = EP0_IDLE;
2695 			break;
2696 
2697 		case EP0_OUT_DATA_PHASE:
2698 			if (!(sts & (USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT)))
2699 				break;
2700 
2701 			sts &= ~(USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT);
2702 			dev_dbg(ep0->udc->dev, "ep0 handle out data phase\n");
2703 			ret = usbf_handle_ep0_data_status(ep0,
2704 				"out data", EP0_IN_STATUS_START_PHASE);
2705 			break;
2706 
2707 		case EP0_IN_STATUS_START_PHASE:
2708 			if (!(sts & USBF_EP0_STG_START_INT))
2709 				break;
2710 
2711 			sts &= ~USBF_EP0_STG_START_INT;
2712 			dev_dbg(ep0->udc->dev, "ep0 handle in status start phase\n");
2713 			ret = usbf_handle_ep0_in_status_start(ep0);
2714 			break;
2715 
2716 		case EP0_IN_STATUS_PHASE:
2717 			if (!(sts & USBF_EP0_IN_INT))
2718 				break;
2719 
2720 			sts &= ~USBF_EP0_IN_INT;
2721 			dev_dbg(ep0->udc->dev, "ep0 handle in status phase\n");
2722 			ret = usbf_handle_ep0_data_status(ep0,
2723 				"in status", EP0_IN_STATUS_END_PHASE);
2724 			break;
2725 
2726 		case EP0_IN_STATUS_END_PHASE:
2727 			if (!(sts & (USBF_EP0_STG_END_INT | USBF_EP0_SETUP_INT)))
2728 				break;
2729 
2730 			sts &= ~USBF_EP0_STG_END_INT;
2731 			dev_dbg(ep0->udc->dev, "ep0 handle in status end\n");
2732 			udc->ep0state = EP0_IDLE;
2733 			break;
2734 
2735 		default:
2736 			udc->ep0state = EP0_IDLE;
2737 			break;
2738 		}
2739 
2740 		if (ret) {
2741 			dev_dbg(ep0->udc->dev, "ep0 failed (%d)\n", ret);
2742 			/* Failure -> stall.
2743 			 * This stall state will be automatically cleared when
2744 			 * the IP receives the next SETUP packet
2745 			 */
2746 			usbf_ep_stall(ep0, true);
2747 
2748 			/* Remove anything that was pending */
2749 			usbf_ep_nuke(ep0, -EPROTO);
2750 
2751 			udc->ep0state = EP0_IDLE;
2752 			break;
2753 		}
2754 
2755 	} while ((prev_ep0state != udc->ep0state) || (prev_sts != sts));
2756 
2757 	dev_dbg(ep0->udc->dev, "ep0 done udc->ep0state=%d, status=0x%08x. next=0x%08x\n",
2758 		udc->ep0state, sts,
2759 		usbf_ep_reg_readl(ep0, USBF_REG_EP0_STATUS));
2760 }
2761 
2762 static void usbf_epn_process_queue(struct usbf_ep *epn)
2763 {
2764 	int ret;
2765 
2766 	ret = usbf_ep_process_queue(epn);
2767 	switch (ret) {
2768 	case -ENOENT:
2769 		dev_warn(epn->udc->dev, "ep%u %s, no request available\n",
2770 			epn->id, epn->is_in ? "in" : "out");
2771 		break;
2772 	case -EINPROGRESS:
2773 		/* More data needs to be processed */
2774 		ret = 0;
2775 		break;
2776 	case 0:
2777 		/* All requests in the queue are processed */
2778 		break;
2779 	default:
2780 		dev_err(epn->udc->dev, "ep%u %s, process queue failed (%d)\n",
2781 			epn->id, epn->is_in ? "in" : "out", ret);
2782 		break;
2783 	}
2784 
2785 	if (ret) {
2786 		dev_dbg(epn->udc->dev, "ep%u %s failed (%d)\n", epn->id,
2787 			epn->is_in ? "in" : "out", ret);
2788 		usbf_ep_stall(epn, true);
2789 		usbf_ep_nuke(epn, ret);
2790 	}
2791 }
2792 
2793 static void usbf_epn_interrupt(struct usbf_ep *epn)
2794 {
2795 	u32 sts;
2796 	u32 ena;
2797 
2798 	epn->status = usbf_ep_reg_readl(epn, USBF_REG_EPN_STATUS);
2799 	ena = usbf_ep_reg_readl(epn, USBF_REG_EPN_INT_ENA);
2800 	usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(epn->status & ena));
2801 
2802 	dev_dbg(epn->udc->dev, "ep%u %s status=0x%08x, enable=%08x\n, ctrl=0x%08x\n",
2803 		epn->id, epn->is_in ? "in" : "out", epn->status, ena,
2804 		usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL));
2805 
2806 	if (epn->disabled) {
2807 		dev_warn(epn->udc->dev, "ep%u %s, interrupt while disabled\n",
2808 			epn->id, epn->is_in ? "in" : "out");
2809 		return;
2810 	}
2811 
2812 	sts = epn->status & ena;
2813 
2814 	if (sts & (USBF_EPN_IN_END_INT | USBF_EPN_IN_INT)) {
2815 		sts &= ~(USBF_EPN_IN_END_INT | USBF_EPN_IN_INT);
2816 		dev_dbg(epn->udc->dev, "ep%u %s process queue (in interrupts)\n",
2817 			epn->id, epn->is_in ? "in" : "out");
2818 		usbf_epn_process_queue(epn);
2819 	}
2820 
2821 	if (sts & (USBF_EPN_OUT_END_INT | USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT)) {
2822 		sts &= ~(USBF_EPN_OUT_END_INT | USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT);
2823 		dev_dbg(epn->udc->dev, "ep%u %s process queue (out interrupts)\n",
2824 			epn->id, epn->is_in ? "in" : "out");
2825 		usbf_epn_process_queue(epn);
2826 	}
2827 
2828 	dev_dbg(epn->udc->dev, "ep%u %s done status=0x%08x. next=0x%08x\n",
2829 		epn->id, epn->is_in ? "in" : "out",
2830 		sts, usbf_ep_reg_readl(epn, USBF_REG_EPN_STATUS));
2831 }
2832 
2833 static void usbf_ep_reset(struct usbf_ep *ep)
2834 {
2835 	ep->status = 0;
2836 	/* Remove anything that was pending */
2837 	usbf_ep_nuke(ep, -ESHUTDOWN);
2838 }
2839 
2840 static void usbf_reset(struct usbf_udc *udc)
2841 {
2842 	int i;
2843 
2844 	for (i = 0; i < ARRAY_SIZE(udc->ep); i++) {
2845 		if (udc->ep[i].disabled)
2846 			continue;
2847 
2848 		usbf_ep_reset(&udc->ep[i]);
2849 	}
2850 
2851 	if (usbf_reg_readl(udc, USBF_REG_USB_STATUS) & USBF_USB_SPEED_MODE)
2852 		udc->gadget.speed = USB_SPEED_HIGH;
2853 	else
2854 		udc->gadget.speed = USB_SPEED_FULL;
2855 
2856 	/* Remote wakeup feature must be disabled on USB bus reset */
2857 	udc->is_remote_wakeup = false;
2858 
2859 	/* Enable endpoint zero */
2860 	usbf_ep0_enable(&udc->ep[0]);
2861 
2862 	if (udc->driver) {
2863 		/* Signal the reset */
2864 		spin_unlock(&udc->lock);
2865 		usb_gadget_udc_reset(&udc->gadget, udc->driver);
2866 		spin_lock(&udc->lock);
2867 	}
2868 }
2869 
2870 static void usbf_driver_suspend(struct usbf_udc *udc)
2871 {
2872 	if (udc->is_usb_suspended) {
2873 		dev_dbg(udc->dev, "already suspended\n");
2874 		return;
2875 	}
2876 
2877 	dev_dbg(udc->dev, "do usb suspend\n");
2878 	udc->is_usb_suspended = true;
2879 
2880 	if (udc->driver && udc->driver->suspend) {
2881 		spin_unlock(&udc->lock);
2882 		udc->driver->suspend(&udc->gadget);
2883 		spin_lock(&udc->lock);
2884 
2885 		/* The datasheet tells to set the USB_CONTROL register SUSPEND
2886 		 * bit when the USB bus suspend is detected.
2887 		 * This bit stops the clocks (clocks for EPC, SIE, USBPHY) but
2888 		 * these clocks seems not used only by the USB device. Some
2889 		 * UARTs can be lost ...
2890 		 * So, do not set the USB_CONTROL register SUSPEND bit.
2891 		 */
2892 	}
2893 }
2894 
2895 static void usbf_driver_resume(struct usbf_udc *udc)
2896 {
2897 	if (!udc->is_usb_suspended)
2898 		return;
2899 
2900 	dev_dbg(udc->dev, "do usb resume\n");
2901 	udc->is_usb_suspended = false;
2902 
2903 	if (udc->driver && udc->driver->resume) {
2904 		spin_unlock(&udc->lock);
2905 		udc->driver->resume(&udc->gadget);
2906 		spin_lock(&udc->lock);
2907 	}
2908 }
2909 
2910 static irqreturn_t usbf_epc_irq(int irq, void *_udc)
2911 {
2912 	struct usbf_udc *udc = (struct usbf_udc *)_udc;
2913 	unsigned long flags;
2914 	struct usbf_ep *ep;
2915 	u32 int_sts;
2916 	u32 int_en;
2917 	int i;
2918 
2919 	spin_lock_irqsave(&udc->lock, flags);
2920 
2921 	int_en = usbf_reg_readl(udc, USBF_REG_USB_INT_ENA);
2922 	int_sts = usbf_reg_readl(udc, USBF_REG_USB_INT_STA) & int_en;
2923 	usbf_reg_writel(udc, USBF_REG_USB_INT_STA, ~int_sts);
2924 
2925 	dev_dbg(udc->dev, "int_sts=0x%08x\n", int_sts);
2926 
2927 	if (int_sts & USBF_USB_RSUM_INT) {
2928 		dev_dbg(udc->dev, "handle resume\n");
2929 		usbf_driver_resume(udc);
2930 	}
2931 
2932 	if (int_sts & USBF_USB_USB_RST_INT) {
2933 		dev_dbg(udc->dev, "handle bus reset\n");
2934 		usbf_driver_resume(udc);
2935 		usbf_reset(udc);
2936 	}
2937 
2938 	if (int_sts & USBF_USB_SPEED_MODE_INT) {
2939 		if (usbf_reg_readl(udc, USBF_REG_USB_STATUS) & USBF_USB_SPEED_MODE)
2940 			udc->gadget.speed = USB_SPEED_HIGH;
2941 		else
2942 			udc->gadget.speed = USB_SPEED_FULL;
2943 		dev_dbg(udc->dev, "handle speed change (%s)\n",
2944 			udc->gadget.speed == USB_SPEED_HIGH ? "High" : "Full");
2945 	}
2946 
2947 	if (int_sts & USBF_USB_EPN_INT(0)) {
2948 		usbf_driver_resume(udc);
2949 		usbf_ep0_interrupt(&udc->ep[0]);
2950 	}
2951 
2952 	for (i = 1; i < ARRAY_SIZE(udc->ep); i++) {
2953 		ep = &udc->ep[i];
2954 
2955 		if (int_sts & USBF_USB_EPN_INT(i)) {
2956 			usbf_driver_resume(udc);
2957 			usbf_epn_interrupt(ep);
2958 		}
2959 	}
2960 
2961 	if (int_sts & USBF_USB_SPND_INT) {
2962 		dev_dbg(udc->dev, "handle suspend\n");
2963 		usbf_driver_suspend(udc);
2964 	}
2965 
2966 	spin_unlock_irqrestore(&udc->lock, flags);
2967 
2968 	return IRQ_HANDLED;
2969 }
2970 
2971 static irqreturn_t usbf_ahb_epc_irq(int irq, void *_udc)
2972 {
2973 	struct usbf_udc *udc = (struct usbf_udc *)_udc;
2974 	unsigned long flags;
2975 	struct usbf_ep *epn;
2976 	u32 sysbint;
2977 	void (*ep_action)(struct usbf_ep *epn);
2978 	int i;
2979 
2980 	spin_lock_irqsave(&udc->lock, flags);
2981 
2982 	/* Read and ack interrupts */
2983 	sysbint = usbf_reg_readl(udc, USBF_REG_AHBBINT);
2984 	usbf_reg_writel(udc, USBF_REG_AHBBINT, sysbint);
2985 
2986 	if ((sysbint & USBF_SYS_VBUS_INT) == USBF_SYS_VBUS_INT) {
2987 		if (usbf_reg_readl(udc, USBF_REG_EPCTR) & USBF_SYS_VBUS_LEVEL) {
2988 			dev_dbg(udc->dev, "handle vbus (1)\n");
2989 			spin_unlock(&udc->lock);
2990 			usb_udc_vbus_handler(&udc->gadget, true);
2991 			usb_gadget_set_state(&udc->gadget, USB_STATE_POWERED);
2992 			spin_lock(&udc->lock);
2993 		} else {
2994 			dev_dbg(udc->dev, "handle vbus (0)\n");
2995 			udc->is_usb_suspended = false;
2996 			spin_unlock(&udc->lock);
2997 			usb_udc_vbus_handler(&udc->gadget, false);
2998 			usb_gadget_set_state(&udc->gadget,
2999 					     USB_STATE_NOTATTACHED);
3000 			spin_lock(&udc->lock);
3001 		}
3002 	}
3003 
3004 	for (i = 1; i < ARRAY_SIZE(udc->ep); i++) {
3005 		if (sysbint & USBF_SYS_DMA_ENDINT_EPN(i)) {
3006 			epn = &udc->ep[i];
3007 			dev_dbg(epn->udc->dev,
3008 				"ep%u handle DMA complete. action=%ps\n",
3009 				epn->id, epn->bridge_on_dma_end);
3010 			ep_action = epn->bridge_on_dma_end;
3011 			if (ep_action) {
3012 				epn->bridge_on_dma_end = NULL;
3013 				ep_action(epn);
3014 			}
3015 		}
3016 	}
3017 
3018 	spin_unlock_irqrestore(&udc->lock, flags);
3019 
3020 	return IRQ_HANDLED;
3021 }
3022 
3023 static int usbf_udc_start(struct usb_gadget *gadget,
3024 			  struct usb_gadget_driver *driver)
3025 {
3026 	struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget);
3027 	unsigned long flags;
3028 
3029 	dev_info(udc->dev, "start (driver '%s')\n", driver->driver.name);
3030 
3031 	spin_lock_irqsave(&udc->lock, flags);
3032 
3033 	/* hook up the driver */
3034 	udc->driver = driver;
3035 
3036 	/* Enable VBUS interrupt */
3037 	usbf_reg_writel(udc, USBF_REG_AHBBINTEN, USBF_SYS_VBUS_INTEN);
3038 
3039 	spin_unlock_irqrestore(&udc->lock, flags);
3040 
3041 	return 0;
3042 }
3043 
3044 static int usbf_udc_stop(struct usb_gadget *gadget)
3045 {
3046 	struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget);
3047 	unsigned long flags;
3048 
3049 	spin_lock_irqsave(&udc->lock, flags);
3050 
3051 	/* Disable VBUS interrupt */
3052 	usbf_reg_writel(udc, USBF_REG_AHBBINTEN, 0);
3053 
3054 	udc->driver = NULL;
3055 
3056 	spin_unlock_irqrestore(&udc->lock, flags);
3057 
3058 	dev_info(udc->dev, "stopped\n");
3059 
3060 	return 0;
3061 }
3062 
3063 static int usbf_get_frame(struct usb_gadget *gadget)
3064 {
3065 	struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget);
3066 
3067 	return USBF_USB_GET_FRAME(usbf_reg_readl(udc, USBF_REG_USB_ADDRESS));
3068 }
3069 
3070 static void usbf_attach(struct usbf_udc *udc)
3071 {
3072 	/* Enable USB signal to Function PHY
3073 	 * D+ signal Pull-up
3074 	 * Disable endpoint 0, it will be automatically enable when a USB reset
3075 	 * is received.
3076 	 * Disable the other endpoints
3077 	 */
3078 	usbf_reg_clrset(udc, USBF_REG_USB_CONTROL,
3079 		USBF_USB_CONNECTB | USBF_USB_DEFAULT | USBF_USB_CONF,
3080 		USBF_USB_PUE2);
3081 
3082 	/* Enable reset and mode change interrupts */
3083 	usbf_reg_bitset(udc, USBF_REG_USB_INT_ENA,
3084 		USBF_USB_USB_RST_EN | USBF_USB_SPEED_MODE_EN | USBF_USB_RSUM_EN | USBF_USB_SPND_EN);
3085 }
3086 
3087 static void usbf_detach(struct usbf_udc *udc)
3088 {
3089 	int i;
3090 
3091 	/* Disable interrupts */
3092 	usbf_reg_writel(udc, USBF_REG_USB_INT_ENA, 0);
3093 
3094 	for (i = 0; i < ARRAY_SIZE(udc->ep); i++) {
3095 		if (udc->ep[i].disabled)
3096 			continue;
3097 
3098 		usbf_ep_reset(&udc->ep[i]);
3099 	}
3100 
3101 	/* Disable USB signal to Function PHY
3102 	 * Do not Pull-up D+ signal
3103 	 * Disable endpoint 0
3104 	 * Disable the other endpoints
3105 	 */
3106 	usbf_reg_clrset(udc, USBF_REG_USB_CONTROL,
3107 		USBF_USB_PUE2 | USBF_USB_DEFAULT | USBF_USB_CONF,
3108 		USBF_USB_CONNECTB);
3109 }
3110 
3111 static int usbf_pullup(struct usb_gadget *gadget, int is_on)
3112 {
3113 	struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget);
3114 	unsigned long flags;
3115 
3116 	dev_dbg(udc->dev, "pullup %d\n", is_on);
3117 
3118 	spin_lock_irqsave(&udc->lock, flags);
3119 	if (is_on)
3120 		usbf_attach(udc);
3121 	else
3122 		usbf_detach(udc);
3123 	spin_unlock_irqrestore(&udc->lock, flags);
3124 
3125 	return 0;
3126 }
3127 
3128 static int usbf_udc_set_selfpowered(struct usb_gadget *gadget,
3129 				    int is_selfpowered)
3130 {
3131 	struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget);
3132 	unsigned long flags;
3133 
3134 	spin_lock_irqsave(&udc->lock, flags);
3135 	gadget->is_selfpowered = (is_selfpowered != 0);
3136 	spin_unlock_irqrestore(&udc->lock, flags);
3137 
3138 	return 0;
3139 }
3140 
3141 static int usbf_udc_wakeup(struct usb_gadget *gadget)
3142 {
3143 	struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget);
3144 	unsigned long flags;
3145 	int ret;
3146 
3147 	spin_lock_irqsave(&udc->lock, flags);
3148 
3149 	if (!udc->is_remote_wakeup) {
3150 		dev_dbg(udc->dev, "remote wakeup not allowed\n");
3151 		ret = -EINVAL;
3152 		goto end;
3153 	}
3154 
3155 	dev_dbg(udc->dev, "do wakeup\n");
3156 
3157 	/* Send the resume signal */
3158 	usbf_reg_bitset(udc, USBF_REG_USB_CONTROL, USBF_USB_RSUM_IN);
3159 	usbf_reg_bitclr(udc, USBF_REG_USB_CONTROL, USBF_USB_RSUM_IN);
3160 
3161 	ret = 0;
3162 end:
3163 	spin_unlock_irqrestore(&udc->lock, flags);
3164 	return ret;
3165 }
3166 
3167 static struct usb_gadget_ops usbf_gadget_ops = {
3168 	.get_frame = usbf_get_frame,
3169 	.pullup = usbf_pullup,
3170 	.udc_start = usbf_udc_start,
3171 	.udc_stop = usbf_udc_stop,
3172 	.set_selfpowered = usbf_udc_set_selfpowered,
3173 	.wakeup = usbf_udc_wakeup,
3174 };
3175 
3176 static int usbf_epn_check(struct usbf_ep *epn)
3177 {
3178 	const char *type_txt;
3179 	const char *buf_txt;
3180 	int ret = 0;
3181 	u32 ctrl;
3182 
3183 	ctrl = usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL);
3184 
3185 	switch (ctrl & USBF_EPN_MODE_MASK) {
3186 	case USBF_EPN_MODE_BULK:
3187 		type_txt = "bulk";
3188 		if (epn->ep.caps.type_control || epn->ep.caps.type_iso ||
3189 		    !epn->ep.caps.type_bulk || epn->ep.caps.type_int) {
3190 			dev_err(epn->udc->dev,
3191 				"ep%u caps mismatch, bulk expected\n", epn->id);
3192 			ret = -EINVAL;
3193 		}
3194 		break;
3195 	case USBF_EPN_MODE_INTR:
3196 		type_txt = "intr";
3197 		if (epn->ep.caps.type_control || epn->ep.caps.type_iso ||
3198 		    epn->ep.caps.type_bulk || !epn->ep.caps.type_int) {
3199 			dev_err(epn->udc->dev,
3200 				"ep%u caps mismatch, int expected\n", epn->id);
3201 			ret = -EINVAL;
3202 		}
3203 		break;
3204 	case USBF_EPN_MODE_ISO:
3205 		type_txt = "iso";
3206 		if (epn->ep.caps.type_control || !epn->ep.caps.type_iso ||
3207 		    epn->ep.caps.type_bulk || epn->ep.caps.type_int) {
3208 			dev_err(epn->udc->dev,
3209 				"ep%u caps mismatch, iso expected\n", epn->id);
3210 			ret = -EINVAL;
3211 		}
3212 		break;
3213 	default:
3214 		type_txt = "unknown";
3215 		dev_err(epn->udc->dev, "ep%u unknown type\n", epn->id);
3216 		ret = -EINVAL;
3217 		break;
3218 	}
3219 
3220 	if (ctrl & USBF_EPN_BUF_TYPE_DOUBLE) {
3221 		buf_txt = "double";
3222 		if (!usbf_ep_info[epn->id].is_double) {
3223 			dev_err(epn->udc->dev,
3224 				"ep%u buffer mismatch, double expected\n",
3225 				epn->id);
3226 			ret = -EINVAL;
3227 		}
3228 	} else {
3229 		buf_txt = "single";
3230 		if (usbf_ep_info[epn->id].is_double) {
3231 			dev_err(epn->udc->dev,
3232 				"ep%u buffer mismatch, single expected\n",
3233 				epn->id);
3234 			ret = -EINVAL;
3235 		}
3236 	}
3237 
3238 	dev_dbg(epn->udc->dev, "ep%u (%s) %s, %s buffer %u, checked %s\n",
3239 		 epn->id, epn->ep.name, type_txt, buf_txt,
3240 		 epn->ep.maxpacket_limit, ret ? "failed" : "ok");
3241 
3242 	return ret;
3243 }
3244 
3245 static int usbf_probe(struct platform_device *pdev)
3246 {
3247 	struct device *dev = &pdev->dev;
3248 	struct usbf_udc *udc;
3249 	struct usbf_ep *ep;
3250 	unsigned int i;
3251 	int irq;
3252 	int ret;
3253 
3254 	udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL);
3255 	if (!udc)
3256 		return -ENOMEM;
3257 	platform_set_drvdata(pdev, udc);
3258 
3259 	udc->dev = dev;
3260 	spin_lock_init(&udc->lock);
3261 
3262 	udc->regs = devm_platform_ioremap_resource(pdev, 0);
3263 	if (IS_ERR(udc->regs))
3264 		return PTR_ERR(udc->regs);
3265 
3266 	devm_pm_runtime_enable(&pdev->dev);
3267 	ret = pm_runtime_resume_and_get(&pdev->dev);
3268 	if (ret < 0)
3269 		return ret;
3270 
3271 	dev_info(dev, "USBF version: %08x\n",
3272 		usbf_reg_readl(udc, USBF_REG_USBSSVER));
3273 
3274 	/* Resetting the PLL is handled via the clock driver as it has common
3275 	 * registers with USB Host
3276 	 */
3277 	usbf_reg_bitclr(udc, USBF_REG_EPCTR, USBF_SYS_EPC_RST);
3278 
3279 	/* modify in register gadget process */
3280 	udc->gadget.speed = USB_SPEED_FULL;
3281 	udc->gadget.max_speed = USB_SPEED_HIGH;
3282 	udc->gadget.ops = &usbf_gadget_ops;
3283 
3284 	udc->gadget.name = dev->driver->name;
3285 	udc->gadget.dev.parent = dev;
3286 	udc->gadget.ep0 = &udc->ep[0].ep;
3287 
3288 	/* The hardware DMA controller needs dma addresses aligned on 32bit.
3289 	 * A fallback to pio is done if DMA addresses are not aligned.
3290 	 */
3291 	udc->gadget.quirk_avoids_skb_reserve = 1;
3292 
3293 	INIT_LIST_HEAD(&udc->gadget.ep_list);
3294 	/* we have a canned request structure to allow sending packets as reply
3295 	 * to get_status requests
3296 	 */
3297 	INIT_LIST_HEAD(&udc->setup_reply.queue);
3298 
3299 	for (i = 0; i < ARRAY_SIZE(udc->ep); i++) {
3300 		ep = &udc->ep[i];
3301 
3302 		if (!(usbf_reg_readl(udc, USBF_REG_USBSSCONF) &
3303 		      USBF_SYS_EP_AVAILABLE(i))) {
3304 			continue;
3305 		}
3306 
3307 		INIT_LIST_HEAD(&ep->queue);
3308 
3309 		ep->id = i;
3310 		ep->disabled = 1;
3311 		ep->udc = udc;
3312 		ep->ep.ops = &usbf_ep_ops;
3313 		ep->ep.name = usbf_ep_info[i].name;
3314 		ep->ep.caps = usbf_ep_info[i].caps;
3315 		usb_ep_set_maxpacket_limit(&ep->ep,
3316 					   usbf_ep_info[i].maxpacket_limit);
3317 
3318 		if (ep->id == 0) {
3319 			ep->regs = ep->udc->regs + USBF_BASE_EP0;
3320 		} else {
3321 			ep->regs = ep->udc->regs + USBF_BASE_EPN(ep->id - 1);
3322 			ret = usbf_epn_check(ep);
3323 			if (ret)
3324 				return ret;
3325 			if (usbf_reg_readl(udc, USBF_REG_USBSSCONF) &
3326 			    USBF_SYS_DMA_AVAILABLE(i)) {
3327 				ep->dma_regs = ep->udc->regs +
3328 					       USBF_BASE_DMA_EPN(ep->id - 1);
3329 			}
3330 			list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
3331 		}
3332 	}
3333 
3334 	irq = platform_get_irq(pdev, 0);
3335 	if (irq < 0)
3336 		return irq;
3337 	ret = devm_request_irq(dev, irq, usbf_epc_irq, 0, "usbf-epc", udc);
3338 	if (ret) {
3339 		dev_err(dev, "cannot request irq %d err %d\n", irq, ret);
3340 		return ret;
3341 	}
3342 
3343 	irq = platform_get_irq(pdev, 1);
3344 	if (irq < 0)
3345 		return irq;
3346 	ret = devm_request_irq(dev, irq, usbf_ahb_epc_irq, 0, "usbf-ahb-epc", udc);
3347 	if (ret) {
3348 		dev_err(dev, "cannot request irq %d err %d\n", irq, ret);
3349 		return ret;
3350 	}
3351 
3352 	usbf_reg_bitset(udc, USBF_REG_AHBMCTR, USBF_SYS_WBURST_TYPE);
3353 
3354 	usbf_reg_bitset(udc, USBF_REG_USB_CONTROL,
3355 		USBF_USB_INT_SEL | USBF_USB_SOF_RCV | USBF_USB_SOF_CLK_MODE);
3356 
3357 	ret = usb_add_gadget_udc(dev, &udc->gadget);
3358 	if (ret)
3359 		return ret;
3360 
3361 	return 0;
3362 }
3363 
3364 static int usbf_remove(struct platform_device *pdev)
3365 {
3366 	struct usbf_udc *udc = platform_get_drvdata(pdev);
3367 
3368 	usb_del_gadget_udc(&udc->gadget);
3369 
3370 	pm_runtime_put(&pdev->dev);
3371 
3372 	return 0;
3373 }
3374 
3375 static const struct of_device_id usbf_match[] = {
3376 	{ .compatible = "renesas,rzn1-usbf" },
3377 	{} /* sentinel */
3378 };
3379 MODULE_DEVICE_TABLE(of, usbf_match);
3380 
3381 static struct platform_driver udc_driver = {
3382 	.driver = {
3383 		.name = "usbf_renesas",
3384 		.owner = THIS_MODULE,
3385 		.of_match_table = usbf_match,
3386 	},
3387 	.probe          = usbf_probe,
3388 	.remove         = usbf_remove,
3389 };
3390 
3391 module_platform_driver(udc_driver);
3392 
3393 MODULE_AUTHOR("Herve Codina <herve.codina@bootlin.com>");
3394 MODULE_DESCRIPTION("Renesas R-Car Gen3 & RZ/N1 USB Function driver");
3395 MODULE_LICENSE("GPL");
3396