xref: /linux/drivers/usb/gadget/udc/renesas_usb3.c (revision 9190d4a263264eabf715f5fc1827da45e3fdc247)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Renesas USB3.0 Peripheral driver (USB gadget)
4  *
5  * Copyright (C) 2015-2017  Renesas Electronics Corporation
6  */
7 
8 #include <linux/debugfs.h>
9 #include <linux/delay.h>
10 #include <linux/dma-mapping.h>
11 #include <linux/err.h>
12 #include <linux/extcon-provider.h>
13 #include <linux/interrupt.h>
14 #include <linux/io.h>
15 #include <linux/module.h>
16 #include <linux/of_device.h>
17 #include <linux/phy/phy.h>
18 #include <linux/platform_device.h>
19 #include <linux/pm_runtime.h>
20 #include <linux/reset.h>
21 #include <linux/sizes.h>
22 #include <linux/slab.h>
23 #include <linux/string.h>
24 #include <linux/sys_soc.h>
25 #include <linux/uaccess.h>
26 #include <linux/usb/ch9.h>
27 #include <linux/usb/gadget.h>
28 #include <linux/usb/of.h>
29 #include <linux/usb/role.h>
30 
31 /* register definitions */
32 #define USB3_AXI_INT_STA	0x008
33 #define USB3_AXI_INT_ENA	0x00c
34 #define USB3_DMA_INT_STA	0x010
35 #define USB3_DMA_INT_ENA	0x014
36 #define USB3_DMA_CH0_CON(n)	(0x030 + ((n) - 1) * 0x10) /* n = 1 to 4 */
37 #define USB3_DMA_CH0_PRD_ADR(n)	(0x034 + ((n) - 1) * 0x10) /* n = 1 to 4 */
38 #define USB3_USB_COM_CON	0x200
39 #define USB3_USB20_CON		0x204
40 #define USB3_USB30_CON		0x208
41 #define USB3_USB_STA		0x210
42 #define USB3_DRD_CON(p)		((p)->is_rzv2m ? 0x400 : 0x218)
43 #define USB3_USB_INT_STA_1	0x220
44 #define USB3_USB_INT_STA_2	0x224
45 #define USB3_USB_INT_ENA_1	0x228
46 #define USB3_USB_INT_ENA_2	0x22c
47 #define USB3_STUP_DAT_0		0x230
48 #define USB3_STUP_DAT_1		0x234
49 #define USB3_USB_OTG_STA(p)	((p)->is_rzv2m ? 0x410 : 0x268)
50 #define USB3_USB_OTG_INT_STA(p)	((p)->is_rzv2m ? 0x414 : 0x26c)
51 #define USB3_USB_OTG_INT_ENA(p)	((p)->is_rzv2m ? 0x418 : 0x270)
52 #define USB3_P0_MOD		0x280
53 #define USB3_P0_CON		0x288
54 #define USB3_P0_STA		0x28c
55 #define USB3_P0_INT_STA		0x290
56 #define USB3_P0_INT_ENA		0x294
57 #define USB3_P0_LNG		0x2a0
58 #define USB3_P0_READ		0x2a4
59 #define USB3_P0_WRITE		0x2a8
60 #define USB3_PIPE_COM		0x2b0
61 #define USB3_PN_MOD		0x2c0
62 #define USB3_PN_RAMMAP		0x2c4
63 #define USB3_PN_CON		0x2c8
64 #define USB3_PN_STA		0x2cc
65 #define USB3_PN_INT_STA		0x2d0
66 #define USB3_PN_INT_ENA		0x2d4
67 #define USB3_PN_LNG		0x2e0
68 #define USB3_PN_READ		0x2e4
69 #define USB3_PN_WRITE		0x2e8
70 #define USB3_SSIFCMD		0x340
71 
72 /* AXI_INT_ENA and AXI_INT_STA */
73 #define AXI_INT_DMAINT		BIT(31)
74 #define AXI_INT_EPCINT		BIT(30)
75 /* PRD's n = from 1 to 4 */
76 #define AXI_INT_PRDEN_CLR_STA_SHIFT(n)	(16 + (n) - 1)
77 #define AXI_INT_PRDERR_STA_SHIFT(n)	(0 + (n) - 1)
78 #define AXI_INT_PRDEN_CLR_STA(n)	(1 << AXI_INT_PRDEN_CLR_STA_SHIFT(n))
79 #define AXI_INT_PRDERR_STA(n)		(1 << AXI_INT_PRDERR_STA_SHIFT(n))
80 
81 /* DMA_INT_ENA and DMA_INT_STA */
82 #define DMA_INT(n)		BIT(n)
83 
84 /* DMA_CH0_CONn */
85 #define DMA_CON_PIPE_DIR	BIT(15)		/* 1: In Transfer */
86 #define DMA_CON_PIPE_NO_SHIFT	8
87 #define DMA_CON_PIPE_NO_MASK	GENMASK(12, DMA_CON_PIPE_NO_SHIFT)
88 #define DMA_COM_PIPE_NO(n)	(((n) << DMA_CON_PIPE_NO_SHIFT) & \
89 					 DMA_CON_PIPE_NO_MASK)
90 #define DMA_CON_PRD_EN		BIT(0)
91 
92 /* LCLKSEL */
93 #define LCLKSEL_LSEL		BIT(18)
94 
95 /* USB_COM_CON */
96 #define USB_COM_CON_CONF		BIT(24)
97 #define USB_COM_CON_PN_WDATAIF_NL	BIT(23)
98 #define USB_COM_CON_PN_RDATAIF_NL	BIT(22)
99 #define USB_COM_CON_PN_LSTTR_PP		BIT(21)
100 #define USB_COM_CON_SPD_MODE		BIT(17)
101 #define USB_COM_CON_EP0_EN		BIT(16)
102 #define USB_COM_CON_DEV_ADDR_SHIFT	8
103 #define USB_COM_CON_DEV_ADDR_MASK	GENMASK(14, USB_COM_CON_DEV_ADDR_SHIFT)
104 #define USB_COM_CON_DEV_ADDR(n)		(((n) << USB_COM_CON_DEV_ADDR_SHIFT) & \
105 					 USB_COM_CON_DEV_ADDR_MASK)
106 #define USB_COM_CON_RX_DETECTION	BIT(1)
107 #define USB_COM_CON_PIPE_CLR		BIT(0)
108 
109 /* USB20_CON */
110 #define USB20_CON_B2_PUE		BIT(31)
111 #define USB20_CON_B2_SUSPEND		BIT(24)
112 #define USB20_CON_B2_CONNECT		BIT(17)
113 #define USB20_CON_B2_TSTMOD_SHIFT	8
114 #define USB20_CON_B2_TSTMOD_MASK	GENMASK(10, USB20_CON_B2_TSTMOD_SHIFT)
115 #define USB20_CON_B2_TSTMOD(n)		(((n) << USB20_CON_B2_TSTMOD_SHIFT) & \
116 					 USB20_CON_B2_TSTMOD_MASK)
117 #define USB20_CON_B2_TSTMOD_EN		BIT(0)
118 
119 /* USB30_CON */
120 #define USB30_CON_POW_SEL_SHIFT		24
121 #define USB30_CON_POW_SEL_MASK		GENMASK(26, USB30_CON_POW_SEL_SHIFT)
122 #define USB30_CON_POW_SEL_IN_U3		BIT(26)
123 #define USB30_CON_POW_SEL_IN_DISCON	0
124 #define USB30_CON_POW_SEL_P2_TO_P0	BIT(25)
125 #define USB30_CON_POW_SEL_P0_TO_P3	BIT(24)
126 #define USB30_CON_POW_SEL_P0_TO_P2	0
127 #define USB30_CON_B3_PLLWAKE		BIT(23)
128 #define USB30_CON_B3_CONNECT		BIT(17)
129 #define USB30_CON_B3_HOTRST_CMP		BIT(1)
130 
131 /* USB_STA */
132 #define USB_STA_SPEED_MASK	(BIT(2) | BIT(1))
133 #define USB_STA_SPEED_HS	BIT(2)
134 #define USB_STA_SPEED_FS	BIT(1)
135 #define USB_STA_SPEED_SS	0
136 #define USB_STA_VBUS_STA	BIT(0)
137 
138 /* DRD_CON */
139 #define DRD_CON_PERI_RST	BIT(31)		/* rzv2m only */
140 #define DRD_CON_HOST_RST	BIT(30)		/* rzv2m only */
141 #define DRD_CON_PERI_CON	BIT(24)
142 #define DRD_CON_VBOUT		BIT(0)
143 
144 /* USB_INT_ENA_1 and USB_INT_STA_1 */
145 #define USB_INT_1_B3_PLLWKUP	BIT(31)
146 #define USB_INT_1_B3_LUPSUCS	BIT(30)
147 #define USB_INT_1_B3_DISABLE	BIT(27)
148 #define USB_INT_1_B3_WRMRST	BIT(21)
149 #define USB_INT_1_B3_HOTRST	BIT(20)
150 #define USB_INT_1_B2_USBRST	BIT(12)
151 #define USB_INT_1_B2_L1SPND	BIT(11)
152 #define USB_INT_1_B2_SPND	BIT(9)
153 #define USB_INT_1_B2_RSUM	BIT(8)
154 #define USB_INT_1_SPEED		BIT(1)
155 #define USB_INT_1_VBUS_CNG	BIT(0)
156 
157 /* USB_INT_ENA_2 and USB_INT_STA_2 */
158 #define USB_INT_2_PIPE(n)	BIT(n)
159 
160 /* USB_OTG_STA, USB_OTG_INT_STA and USB_OTG_INT_ENA */
161 #define USB_OTG_IDMON(p)	((p)->is_rzv2m ? BIT(0) : BIT(4))
162 
163 /* P0_MOD */
164 #define P0_MOD_DIR		BIT(6)
165 
166 /* P0_CON and PN_CON */
167 #define PX_CON_BYTE_EN_MASK		(BIT(10) | BIT(9))
168 #define PX_CON_BYTE_EN_SHIFT		9
169 #define PX_CON_BYTE_EN_BYTES(n)		(((n) << PX_CON_BYTE_EN_SHIFT) & \
170 					 PX_CON_BYTE_EN_MASK)
171 #define PX_CON_SEND			BIT(8)
172 
173 /* P0_CON */
174 #define P0_CON_ST_RES_MASK		(BIT(27) | BIT(26))
175 #define P0_CON_ST_RES_FORCE_STALL	BIT(27)
176 #define P0_CON_ST_RES_NORMAL		BIT(26)
177 #define P0_CON_ST_RES_FORCE_NRDY	0
178 #define P0_CON_OT_RES_MASK		(BIT(25) | BIT(24))
179 #define P0_CON_OT_RES_FORCE_STALL	BIT(25)
180 #define P0_CON_OT_RES_NORMAL		BIT(24)
181 #define P0_CON_OT_RES_FORCE_NRDY	0
182 #define P0_CON_IN_RES_MASK		(BIT(17) | BIT(16))
183 #define P0_CON_IN_RES_FORCE_STALL	BIT(17)
184 #define P0_CON_IN_RES_NORMAL		BIT(16)
185 #define P0_CON_IN_RES_FORCE_NRDY	0
186 #define P0_CON_RES_WEN			BIT(7)
187 #define P0_CON_BCLR			BIT(1)
188 
189 /* P0_STA and PN_STA */
190 #define PX_STA_BUFSTS		BIT(0)
191 
192 /* P0_INT_ENA and P0_INT_STA */
193 #define P0_INT_STSED		BIT(18)
194 #define P0_INT_STSST		BIT(17)
195 #define P0_INT_SETUP		BIT(16)
196 #define P0_INT_RCVNL		BIT(8)
197 #define P0_INT_ERDY		BIT(7)
198 #define P0_INT_FLOW		BIT(6)
199 #define P0_INT_STALL		BIT(2)
200 #define P0_INT_NRDY		BIT(1)
201 #define P0_INT_BFRDY		BIT(0)
202 #define P0_INT_ALL_BITS		(P0_INT_STSED | P0_INT_SETUP | P0_INT_BFRDY)
203 
204 /* PN_MOD */
205 #define PN_MOD_DIR		BIT(6)
206 #define PN_MOD_TYPE_SHIFT	4
207 #define PN_MOD_TYPE_MASK	GENMASK(5, PN_MOD_TYPE_SHIFT)
208 #define PN_MOD_TYPE(n)		(((n) << PN_MOD_TYPE_SHIFT) & \
209 				 PN_MOD_TYPE_MASK)
210 #define PN_MOD_EPNUM_MASK	GENMASK(3, 0)
211 #define PN_MOD_EPNUM(n)		((n) & PN_MOD_EPNUM_MASK)
212 
213 /* PN_RAMMAP */
214 #define PN_RAMMAP_RAMAREA_SHIFT	29
215 #define PN_RAMMAP_RAMAREA_MASK	GENMASK(31, PN_RAMMAP_RAMAREA_SHIFT)
216 #define PN_RAMMAP_RAMAREA_16KB	BIT(31)
217 #define PN_RAMMAP_RAMAREA_8KB	(BIT(30) | BIT(29))
218 #define PN_RAMMAP_RAMAREA_4KB	BIT(30)
219 #define PN_RAMMAP_RAMAREA_2KB	BIT(29)
220 #define PN_RAMMAP_RAMAREA_1KB	0
221 #define PN_RAMMAP_MPKT_SHIFT	16
222 #define PN_RAMMAP_MPKT_MASK	GENMASK(26, PN_RAMMAP_MPKT_SHIFT)
223 #define PN_RAMMAP_MPKT(n)	(((n) << PN_RAMMAP_MPKT_SHIFT) & \
224 				 PN_RAMMAP_MPKT_MASK)
225 #define PN_RAMMAP_RAMIF_SHIFT	14
226 #define PN_RAMMAP_RAMIF_MASK	GENMASK(15, PN_RAMMAP_RAMIF_SHIFT)
227 #define PN_RAMMAP_RAMIF(n)	(((n) << PN_RAMMAP_RAMIF_SHIFT) & \
228 				 PN_RAMMAP_RAMIF_MASK)
229 #define PN_RAMMAP_BASEAD_MASK	GENMASK(13, 0)
230 #define PN_RAMMAP_BASEAD(offs)	(((offs) >> 3) & PN_RAMMAP_BASEAD_MASK)
231 #define PN_RAMMAP_DATA(area, ramif, basead)	((PN_RAMMAP_##area) | \
232 						 (PN_RAMMAP_RAMIF(ramif)) | \
233 						 (PN_RAMMAP_BASEAD(basead)))
234 
235 /* PN_CON */
236 #define PN_CON_EN		BIT(31)
237 #define PN_CON_DATAIF_EN	BIT(30)
238 #define PN_CON_RES_MASK		(BIT(17) | BIT(16))
239 #define PN_CON_RES_FORCE_STALL	BIT(17)
240 #define PN_CON_RES_NORMAL	BIT(16)
241 #define PN_CON_RES_FORCE_NRDY	0
242 #define PN_CON_LAST		BIT(11)
243 #define PN_CON_RES_WEN		BIT(7)
244 #define PN_CON_CLR		BIT(0)
245 
246 /* PN_INT_STA and PN_INT_ENA */
247 #define PN_INT_LSTTR	BIT(4)
248 #define PN_INT_BFRDY	BIT(0)
249 
250 /* USB3_SSIFCMD */
251 #define SSIFCMD_URES_U2		BIT(9)
252 #define SSIFCMD_URES_U1		BIT(8)
253 #define SSIFCMD_UDIR_U2		BIT(7)
254 #define SSIFCMD_UDIR_U1		BIT(6)
255 #define SSIFCMD_UREQ_U2		BIT(5)
256 #define SSIFCMD_UREQ_U1		BIT(4)
257 
258 #define USB3_EP0_SS_MAX_PACKET_SIZE	512
259 #define USB3_EP0_HSFS_MAX_PACKET_SIZE	64
260 #define USB3_EP0_BUF_SIZE		8
261 #define USB3_MAX_NUM_PIPES(p)		((p)->is_rzv2m ? 16 : 6)	/* This includes PIPE 0 */
262 #define USB3_WAIT_US			3
263 #define USB3_DMA_NUM_SETTING_AREA	4
264 /*
265  * To avoid double-meaning of "0" (xferred 65536 bytes or received zlp if
266  * buffer size is 65536), this driver uses the maximum size per a entry is
267  * 32768 bytes.
268  */
269 #define USB3_DMA_MAX_XFER_SIZE		32768
270 #define USB3_DMA_PRD_SIZE		4096
271 
272 struct renesas_usb3;
273 
274 /* Physical Region Descriptor Table */
275 struct renesas_usb3_prd {
276 	u32 word1;
277 #define USB3_PRD1_E		BIT(30)		/* the end of chain */
278 #define USB3_PRD1_U		BIT(29)		/* completion of transfer */
279 #define USB3_PRD1_D		BIT(28)		/* Error occurred */
280 #define USB3_PRD1_INT		BIT(27)		/* Interrupt occurred */
281 #define USB3_PRD1_LST		BIT(26)		/* Last Packet */
282 #define USB3_PRD1_B_INC		BIT(24)
283 #define USB3_PRD1_MPS_8		0
284 #define USB3_PRD1_MPS_16	BIT(21)
285 #define USB3_PRD1_MPS_32	BIT(22)
286 #define USB3_PRD1_MPS_64	(BIT(22) | BIT(21))
287 #define USB3_PRD1_MPS_512	BIT(23)
288 #define USB3_PRD1_MPS_1024	(BIT(23) | BIT(21))
289 #define USB3_PRD1_MPS_RESERVED	(BIT(23) | BIT(22) | BIT(21))
290 #define USB3_PRD1_SIZE_MASK	GENMASK(15, 0)
291 
292 	u32 bap;
293 };
294 #define USB3_DMA_NUM_PRD_ENTRIES	(USB3_DMA_PRD_SIZE / \
295 					  sizeof(struct renesas_usb3_prd))
296 #define USB3_DMA_MAX_XFER_SIZE_ALL_PRDS	(USB3_DMA_PRD_SIZE / \
297 					 sizeof(struct renesas_usb3_prd) * \
298 					 USB3_DMA_MAX_XFER_SIZE)
299 
300 struct renesas_usb3_dma {
301 	struct renesas_usb3_prd *prd;
302 	dma_addr_t prd_dma;
303 	int num;	/* Setting area number (from 1 to 4) */
304 	bool used;
305 };
306 
307 struct renesas_usb3_request {
308 	struct usb_request	req;
309 	struct list_head	queue;
310 };
311 
312 #define USB3_EP_NAME_SIZE	8
313 struct renesas_usb3_ep {
314 	struct usb_ep ep;
315 	struct renesas_usb3 *usb3;
316 	struct renesas_usb3_dma *dma;
317 	int num;
318 	char ep_name[USB3_EP_NAME_SIZE];
319 	struct list_head queue;
320 	u32 rammap_val;
321 	bool dir_in;
322 	bool halt;
323 	bool wedge;
324 	bool started;
325 };
326 
327 struct renesas_usb3_priv {
328 	int ramsize_per_ramif;		/* unit = bytes */
329 	int num_ramif;
330 	int ramsize_per_pipe;		/* unit = bytes */
331 	bool workaround_for_vbus;	/* if true, don't check vbus signal */
332 	bool is_rzv2m;			/* if true, RZ/V2M SoC */
333 };
334 
335 struct renesas_usb3 {
336 	void __iomem *reg;
337 	struct reset_control *drd_rstc;
338 	struct reset_control *usbp_rstc;
339 
340 	struct usb_gadget gadget;
341 	struct usb_gadget_driver *driver;
342 	struct extcon_dev *extcon;
343 	struct work_struct extcon_work;
344 	struct phy *phy;
345 	struct dentry *dentry;
346 
347 	struct usb_role_switch *role_sw;
348 	struct device *host_dev;
349 	struct work_struct role_work;
350 	enum usb_role role;
351 
352 	struct renesas_usb3_ep *usb3_ep;
353 	int num_usb3_eps;
354 
355 	struct renesas_usb3_dma dma[USB3_DMA_NUM_SETTING_AREA];
356 
357 	spinlock_t lock;
358 	int disabled_count;
359 
360 	struct usb_request *ep0_req;
361 
362 	enum usb_role connection_state;
363 	u16 test_mode;
364 	u8 ep0_buf[USB3_EP0_BUF_SIZE];
365 	bool softconnect;
366 	bool workaround_for_vbus;
367 	bool extcon_host;		/* check id and set EXTCON_USB_HOST */
368 	bool extcon_usb;		/* check vbus and set EXTCON_USB */
369 	bool forced_b_device;
370 	bool start_to_connect;
371 	bool role_sw_by_connector;
372 	bool is_rzv2m;
373 };
374 
375 #define gadget_to_renesas_usb3(_gadget)	\
376 		container_of(_gadget, struct renesas_usb3, gadget)
377 #define renesas_usb3_to_gadget(renesas_usb3) (&renesas_usb3->gadget)
378 #define usb3_to_dev(_usb3)	(_usb3->gadget.dev.parent)
379 
380 #define usb_ep_to_usb3_ep(_ep) container_of(_ep, struct renesas_usb3_ep, ep)
381 #define usb3_ep_to_usb3(_usb3_ep) (_usb3_ep->usb3)
382 #define usb_req_to_usb3_req(_req) container_of(_req, \
383 					    struct renesas_usb3_request, req)
384 
385 #define usb3_get_ep(usb3, n) ((usb3)->usb3_ep + (n))
386 #define usb3_for_each_ep(usb3_ep, usb3, i)			\
387 		for ((i) = 0, usb3_ep = usb3_get_ep(usb3, (i));	\
388 		     (i) < (usb3)->num_usb3_eps;		\
389 		     (i)++, usb3_ep = usb3_get_ep(usb3, (i)))
390 
391 #define usb3_get_dma(usb3, i)	(&(usb3)->dma[i])
392 #define usb3_for_each_dma(usb3, dma, i)				\
393 		for ((i) = 0, dma = usb3_get_dma((usb3), (i));	\
394 		     (i) < USB3_DMA_NUM_SETTING_AREA;		\
395 		     (i)++, dma = usb3_get_dma((usb3), (i)))
396 
397 static const char udc_name[] = "renesas_usb3";
398 
399 static bool use_dma = 1;
400 module_param(use_dma, bool, 0644);
401 MODULE_PARM_DESC(use_dma, "use dedicated DMAC");
402 
403 static void usb3_write(struct renesas_usb3 *usb3, u32 data, u32 offs)
404 {
405 	iowrite32(data, usb3->reg + offs);
406 }
407 
408 static u32 usb3_read(struct renesas_usb3 *usb3, u32 offs)
409 {
410 	return ioread32(usb3->reg + offs);
411 }
412 
413 static void usb3_set_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
414 {
415 	u32 val = usb3_read(usb3, offs);
416 
417 	val |= bits;
418 	usb3_write(usb3, val, offs);
419 }
420 
421 static void usb3_clear_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
422 {
423 	u32 val = usb3_read(usb3, offs);
424 
425 	val &= ~bits;
426 	usb3_write(usb3, val, offs);
427 }
428 
429 static int usb3_wait(struct renesas_usb3 *usb3, u32 reg, u32 mask,
430 		     u32 expected)
431 {
432 	int i;
433 
434 	for (i = 0; i < USB3_WAIT_US; i++) {
435 		if ((usb3_read(usb3, reg) & mask) == expected)
436 			return 0;
437 		udelay(1);
438 	}
439 
440 	dev_dbg(usb3_to_dev(usb3), "%s: timed out (%8x, %08x, %08x)\n",
441 		__func__, reg, mask, expected);
442 
443 	return -EBUSY;
444 }
445 
446 static void renesas_usb3_extcon_work(struct work_struct *work)
447 {
448 	struct renesas_usb3 *usb3 = container_of(work, struct renesas_usb3,
449 						 extcon_work);
450 
451 	extcon_set_state_sync(usb3->extcon, EXTCON_USB_HOST, usb3->extcon_host);
452 	extcon_set_state_sync(usb3->extcon, EXTCON_USB, usb3->extcon_usb);
453 }
454 
455 static void usb3_enable_irq_1(struct renesas_usb3 *usb3, u32 bits)
456 {
457 	usb3_set_bit(usb3, bits, USB3_USB_INT_ENA_1);
458 }
459 
460 static void usb3_disable_irq_1(struct renesas_usb3 *usb3, u32 bits)
461 {
462 	usb3_clear_bit(usb3, bits, USB3_USB_INT_ENA_1);
463 }
464 
465 static void usb3_enable_pipe_irq(struct renesas_usb3 *usb3, int num)
466 {
467 	usb3_set_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
468 }
469 
470 static void usb3_disable_pipe_irq(struct renesas_usb3 *usb3, int num)
471 {
472 	usb3_clear_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
473 }
474 
475 static bool usb3_is_host(struct renesas_usb3 *usb3)
476 {
477 	return !(usb3_read(usb3, USB3_DRD_CON(usb3)) & DRD_CON_PERI_CON);
478 }
479 
480 static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)
481 {
482 	/* Set AXI_INT */
483 	usb3_write(usb3, ~0, USB3_DMA_INT_STA);
484 	usb3_write(usb3, 0, USB3_DMA_INT_ENA);
485 	usb3_set_bit(usb3, AXI_INT_DMAINT | AXI_INT_EPCINT, USB3_AXI_INT_ENA);
486 }
487 
488 static void usb3_init_epc_registers(struct renesas_usb3 *usb3)
489 {
490 	usb3_write(usb3, ~0, USB3_USB_INT_STA_1);
491 	if (!usb3->workaround_for_vbus)
492 		usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
493 }
494 
495 static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3)
496 {
497 	if (!(usb3_read(usb3, USB3_USB20_CON) & USB20_CON_B2_SUSPEND))
498 		return true;	/* already waked it up */
499 
500 	usb3_clear_bit(usb3, USB20_CON_B2_SUSPEND, USB3_USB20_CON);
501 	usb3_enable_irq_1(usb3, USB_INT_1_B2_RSUM);
502 
503 	return false;
504 }
505 
506 static void usb3_usb2_pullup(struct renesas_usb3 *usb3, int pullup)
507 {
508 	u32 bits = USB20_CON_B2_PUE | USB20_CON_B2_CONNECT;
509 
510 	if (usb3->softconnect && pullup)
511 		usb3_set_bit(usb3, bits, USB3_USB20_CON);
512 	else
513 		usb3_clear_bit(usb3, bits, USB3_USB20_CON);
514 }
515 
516 static void usb3_set_test_mode(struct renesas_usb3 *usb3)
517 {
518 	u32 val = usb3_read(usb3, USB3_USB20_CON);
519 
520 	val &= ~USB20_CON_B2_TSTMOD_MASK;
521 	val |= USB20_CON_B2_TSTMOD(usb3->test_mode);
522 	usb3_write(usb3, val | USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
523 	if (!usb3->test_mode)
524 		usb3_clear_bit(usb3, USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
525 }
526 
527 static void usb3_start_usb2_connection(struct renesas_usb3 *usb3)
528 {
529 	usb3->disabled_count++;
530 	usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
531 	usb3_set_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
532 	usb3_usb2_pullup(usb3, 1);
533 }
534 
535 static int usb3_is_usb3_phy_in_u3(struct renesas_usb3 *usb3)
536 {
537 	return usb3_read(usb3, USB3_USB30_CON) & USB30_CON_POW_SEL_IN_U3;
538 }
539 
540 static bool usb3_wakeup_usb3_phy(struct renesas_usb3 *usb3)
541 {
542 	if (!usb3_is_usb3_phy_in_u3(usb3))
543 		return true;	/* already waked it up */
544 
545 	usb3_set_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
546 	usb3_enable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
547 
548 	return false;
549 }
550 
551 static u16 usb3_feature_get_un_enabled(struct renesas_usb3 *usb3)
552 {
553 	u32 mask_u2 = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
554 	u32 mask_u1 = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
555 	u32 val = usb3_read(usb3, USB3_SSIFCMD);
556 	u16 ret = 0;
557 
558 	/* Enables {U2,U1} if the bits of UDIR and UREQ are set to 0 */
559 	if (!(val & mask_u2))
560 		ret |= 1 << USB_DEV_STAT_U2_ENABLED;
561 	if (!(val & mask_u1))
562 		ret |= 1 << USB_DEV_STAT_U1_ENABLED;
563 
564 	return ret;
565 }
566 
567 static void usb3_feature_u2_enable(struct renesas_usb3 *usb3, bool enable)
568 {
569 	u32 bits = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
570 
571 	/* Enables U2 if the bits of UDIR and UREQ are set to 0 */
572 	if (enable)
573 		usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
574 	else
575 		usb3_set_bit(usb3, bits, USB3_SSIFCMD);
576 }
577 
578 static void usb3_feature_u1_enable(struct renesas_usb3 *usb3, bool enable)
579 {
580 	u32 bits = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
581 
582 	/* Enables U1 if the bits of UDIR and UREQ are set to 0 */
583 	if (enable)
584 		usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
585 	else
586 		usb3_set_bit(usb3, bits, USB3_SSIFCMD);
587 }
588 
589 static void usb3_start_operation_for_usb3(struct renesas_usb3 *usb3)
590 {
591 	usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
592 	usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
593 	usb3_set_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
594 }
595 
596 static void usb3_start_usb3_connection(struct renesas_usb3 *usb3)
597 {
598 	usb3_start_operation_for_usb3(usb3);
599 	usb3_set_bit(usb3, USB_COM_CON_RX_DETECTION, USB3_USB_COM_CON);
600 
601 	usb3_enable_irq_1(usb3, USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
602 			  USB_INT_1_SPEED);
603 }
604 
605 static void usb3_stop_usb3_connection(struct renesas_usb3 *usb3)
606 {
607 	usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
608 }
609 
610 static void usb3_transition_to_default_state(struct renesas_usb3 *usb3,
611 					     bool is_usb3)
612 {
613 	usb3_set_bit(usb3, USB_INT_2_PIPE(0), USB3_USB_INT_ENA_2);
614 	usb3_write(usb3, P0_INT_ALL_BITS, USB3_P0_INT_STA);
615 	usb3_set_bit(usb3, P0_INT_ALL_BITS, USB3_P0_INT_ENA);
616 
617 	if (is_usb3)
618 		usb3_enable_irq_1(usb3, USB_INT_1_B3_WRMRST |
619 				  USB_INT_1_B3_HOTRST);
620 	else
621 		usb3_enable_irq_1(usb3, USB_INT_1_B2_SPND |
622 				  USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
623 }
624 
625 static void usb3_connect(struct renesas_usb3 *usb3)
626 {
627 	if (usb3_wakeup_usb3_phy(usb3))
628 		usb3_start_usb3_connection(usb3);
629 }
630 
631 static void usb3_reset_epc(struct renesas_usb3 *usb3)
632 {
633 	usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
634 	usb3_clear_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
635 	usb3_set_bit(usb3, USB_COM_CON_PIPE_CLR, USB3_USB_COM_CON);
636 	usb3->test_mode = 0;
637 	usb3_set_test_mode(usb3);
638 }
639 
640 static void usb3_disconnect(struct renesas_usb3 *usb3)
641 {
642 	usb3->disabled_count = 0;
643 	usb3_usb2_pullup(usb3, 0);
644 	usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
645 	usb3_reset_epc(usb3);
646 	usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM | USB_INT_1_B3_PLLWKUP |
647 			   USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
648 			   USB_INT_1_SPEED | USB_INT_1_B3_WRMRST |
649 			   USB_INT_1_B3_HOTRST | USB_INT_1_B2_SPND |
650 			   USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
651 	usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
652 	usb3_init_epc_registers(usb3);
653 
654 	if (usb3->driver)
655 		usb3->driver->disconnect(&usb3->gadget);
656 }
657 
658 static void usb3_check_vbus(struct renesas_usb3 *usb3)
659 {
660 	if (usb3->workaround_for_vbus) {
661 		usb3_connect(usb3);
662 	} else {
663 		usb3->extcon_usb = !!(usb3_read(usb3, USB3_USB_STA) &
664 							USB_STA_VBUS_STA);
665 		if (usb3->extcon_usb)
666 			usb3_connect(usb3);
667 		else
668 			usb3_disconnect(usb3);
669 
670 		schedule_work(&usb3->extcon_work);
671 	}
672 }
673 
674 static void renesas_usb3_role_work(struct work_struct *work)
675 {
676 	struct renesas_usb3 *usb3 =
677 			container_of(work, struct renesas_usb3, role_work);
678 
679 	usb_role_switch_set_role(usb3->role_sw, usb3->role);
680 }
681 
682 static void usb3_set_mode(struct renesas_usb3 *usb3, bool host)
683 {
684 	if (usb3->is_rzv2m) {
685 		if (host) {
686 			usb3_set_bit(usb3, DRD_CON_PERI_RST, USB3_DRD_CON(usb3));
687 			usb3_clear_bit(usb3, DRD_CON_HOST_RST, USB3_DRD_CON(usb3));
688 		} else {
689 			usb3_set_bit(usb3, DRD_CON_HOST_RST, USB3_DRD_CON(usb3));
690 			usb3_clear_bit(usb3, DRD_CON_PERI_RST, USB3_DRD_CON(usb3));
691 		}
692 	}
693 
694 	if (host)
695 		usb3_clear_bit(usb3, DRD_CON_PERI_CON, USB3_DRD_CON(usb3));
696 	else
697 		usb3_set_bit(usb3, DRD_CON_PERI_CON, USB3_DRD_CON(usb3));
698 }
699 
700 static void usb3_set_mode_by_role_sw(struct renesas_usb3 *usb3, bool host)
701 {
702 	if (usb3->role_sw) {
703 		usb3->role = host ? USB_ROLE_HOST : USB_ROLE_DEVICE;
704 		schedule_work(&usb3->role_work);
705 	} else {
706 		usb3_set_mode(usb3, host);
707 	}
708 }
709 
710 static void usb3_vbus_out(struct renesas_usb3 *usb3, bool enable)
711 {
712 	if (enable)
713 		usb3_set_bit(usb3, DRD_CON_VBOUT, USB3_DRD_CON(usb3));
714 	else
715 		usb3_clear_bit(usb3, DRD_CON_VBOUT, USB3_DRD_CON(usb3));
716 }
717 
718 static void usb3_mode_config(struct renesas_usb3 *usb3, bool host, bool a_dev)
719 {
720 	unsigned long flags;
721 
722 	spin_lock_irqsave(&usb3->lock, flags);
723 	if (!usb3->role_sw_by_connector ||
724 	    usb3->connection_state != USB_ROLE_NONE) {
725 		usb3_set_mode_by_role_sw(usb3, host);
726 		usb3_vbus_out(usb3, a_dev);
727 	}
728 	/* for A-Peripheral or forced B-device mode */
729 	if ((!host && a_dev) || usb3->start_to_connect)
730 		usb3_connect(usb3);
731 	spin_unlock_irqrestore(&usb3->lock, flags);
732 }
733 
734 static bool usb3_is_a_device(struct renesas_usb3 *usb3)
735 {
736 	return !(usb3_read(usb3, USB3_USB_OTG_STA(usb3)) & USB_OTG_IDMON(usb3));
737 }
738 
739 static void usb3_check_id(struct renesas_usb3 *usb3)
740 {
741 	usb3->extcon_host = usb3_is_a_device(usb3);
742 
743 	if ((!usb3->role_sw_by_connector && usb3->extcon_host &&
744 	     !usb3->forced_b_device) || usb3->connection_state == USB_ROLE_HOST)
745 		usb3_mode_config(usb3, true, true);
746 	else
747 		usb3_mode_config(usb3, false, false);
748 
749 	schedule_work(&usb3->extcon_work);
750 }
751 
752 static void renesas_usb3_init_controller(struct renesas_usb3 *usb3)
753 {
754 	usb3_init_axi_bridge(usb3);
755 	usb3_init_epc_registers(usb3);
756 	usb3_set_bit(usb3, USB_COM_CON_PN_WDATAIF_NL |
757 		     USB_COM_CON_PN_RDATAIF_NL | USB_COM_CON_PN_LSTTR_PP,
758 		     USB3_USB_COM_CON);
759 	usb3_write(usb3, USB_OTG_IDMON(usb3), USB3_USB_OTG_INT_STA(usb3));
760 	usb3_write(usb3, USB_OTG_IDMON(usb3), USB3_USB_OTG_INT_ENA(usb3));
761 
762 	usb3_check_id(usb3);
763 	usb3_check_vbus(usb3);
764 }
765 
766 static void renesas_usb3_stop_controller(struct renesas_usb3 *usb3)
767 {
768 	usb3_disconnect(usb3);
769 	usb3_write(usb3, 0, USB3_P0_INT_ENA);
770 	usb3_write(usb3, 0, USB3_USB_OTG_INT_ENA(usb3));
771 	usb3_write(usb3, 0, USB3_USB_INT_ENA_1);
772 	usb3_write(usb3, 0, USB3_USB_INT_ENA_2);
773 	usb3_write(usb3, 0, USB3_AXI_INT_ENA);
774 }
775 
776 static void usb3_irq_epc_int_1_pll_wakeup(struct renesas_usb3 *usb3)
777 {
778 	usb3_disable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
779 	usb3_clear_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
780 	usb3_start_usb3_connection(usb3);
781 }
782 
783 static void usb3_irq_epc_int_1_linkup_success(struct renesas_usb3 *usb3)
784 {
785 	usb3_transition_to_default_state(usb3, true);
786 }
787 
788 static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
789 {
790 	usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM);
791 	usb3_start_usb2_connection(usb3);
792 	usb3_transition_to_default_state(usb3, false);
793 }
794 
795 static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3)
796 {
797 	usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND);
798 
799 	if (usb3->gadget.speed != USB_SPEED_UNKNOWN &&
800 	    usb3->gadget.state != USB_STATE_NOTATTACHED) {
801 		if (usb3->driver && usb3->driver->suspend)
802 			usb3->driver->suspend(&usb3->gadget);
803 		usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED);
804 	}
805 }
806 
807 static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
808 {
809 	usb3_stop_usb3_connection(usb3);
810 	if (usb3_wakeup_usb2_phy(usb3))
811 		usb3_irq_epc_int_1_resume(usb3);
812 }
813 
814 static void usb3_irq_epc_int_1_bus_reset(struct renesas_usb3 *usb3)
815 {
816 	usb3_reset_epc(usb3);
817 	if (usb3->disabled_count < 3)
818 		usb3_start_usb3_connection(usb3);
819 	else
820 		usb3_start_usb2_connection(usb3);
821 }
822 
823 static void usb3_irq_epc_int_1_vbus_change(struct renesas_usb3 *usb3)
824 {
825 	usb3_check_vbus(usb3);
826 }
827 
828 static void usb3_irq_epc_int_1_hot_reset(struct renesas_usb3 *usb3)
829 {
830 	usb3_reset_epc(usb3);
831 	usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
832 
833 	/* This bit shall be set within 12ms from the start of HotReset */
834 	usb3_set_bit(usb3, USB30_CON_B3_HOTRST_CMP, USB3_USB30_CON);
835 }
836 
837 static void usb3_irq_epc_int_1_warm_reset(struct renesas_usb3 *usb3)
838 {
839 	usb3_reset_epc(usb3);
840 	usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
841 
842 	usb3_start_operation_for_usb3(usb3);
843 	usb3_enable_irq_1(usb3, USB_INT_1_SPEED);
844 }
845 
846 static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
847 {
848 	u32 speed = usb3_read(usb3, USB3_USB_STA) & USB_STA_SPEED_MASK;
849 
850 	switch (speed) {
851 	case USB_STA_SPEED_SS:
852 		usb3->gadget.speed = USB_SPEED_SUPER;
853 		usb3->gadget.ep0->maxpacket = USB3_EP0_SS_MAX_PACKET_SIZE;
854 		break;
855 	case USB_STA_SPEED_HS:
856 		usb3->gadget.speed = USB_SPEED_HIGH;
857 		usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
858 		break;
859 	case USB_STA_SPEED_FS:
860 		usb3->gadget.speed = USB_SPEED_FULL;
861 		usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
862 		break;
863 	default:
864 		usb3->gadget.speed = USB_SPEED_UNKNOWN;
865 		break;
866 	}
867 }
868 
869 static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
870 {
871 	if (int_sta_1 & USB_INT_1_B3_PLLWKUP)
872 		usb3_irq_epc_int_1_pll_wakeup(usb3);
873 
874 	if (int_sta_1 & USB_INT_1_B3_LUPSUCS)
875 		usb3_irq_epc_int_1_linkup_success(usb3);
876 
877 	if (int_sta_1 & USB_INT_1_B3_HOTRST)
878 		usb3_irq_epc_int_1_hot_reset(usb3);
879 
880 	if (int_sta_1 & USB_INT_1_B3_WRMRST)
881 		usb3_irq_epc_int_1_warm_reset(usb3);
882 
883 	if (int_sta_1 & USB_INT_1_B3_DISABLE)
884 		usb3_irq_epc_int_1_disable(usb3);
885 
886 	if (int_sta_1 & USB_INT_1_B2_USBRST)
887 		usb3_irq_epc_int_1_bus_reset(usb3);
888 
889 	if (int_sta_1 & USB_INT_1_B2_RSUM)
890 		usb3_irq_epc_int_1_resume(usb3);
891 
892 	if (int_sta_1 & USB_INT_1_B2_SPND)
893 		usb3_irq_epc_int_1_suspend(usb3);
894 
895 	if (int_sta_1 & USB_INT_1_SPEED)
896 		usb3_irq_epc_int_1_speed(usb3);
897 
898 	if (int_sta_1 & USB_INT_1_VBUS_CNG)
899 		usb3_irq_epc_int_1_vbus_change(usb3);
900 }
901 
902 static struct renesas_usb3_request *__usb3_get_request(struct renesas_usb3_ep
903 						       *usb3_ep)
904 {
905 	return list_first_entry_or_null(&usb3_ep->queue,
906 					struct renesas_usb3_request, queue);
907 }
908 
909 static struct renesas_usb3_request *usb3_get_request(struct renesas_usb3_ep
910 						     *usb3_ep)
911 {
912 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
913 	struct renesas_usb3_request *usb3_req;
914 	unsigned long flags;
915 
916 	spin_lock_irqsave(&usb3->lock, flags);
917 	usb3_req = __usb3_get_request(usb3_ep);
918 	spin_unlock_irqrestore(&usb3->lock, flags);
919 
920 	return usb3_req;
921 }
922 
923 static void __usb3_request_done(struct renesas_usb3_ep *usb3_ep,
924 				struct renesas_usb3_request *usb3_req,
925 				int status)
926 {
927 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
928 
929 	dev_dbg(usb3_to_dev(usb3), "giveback: ep%2d, %u, %u, %d\n",
930 		usb3_ep->num, usb3_req->req.length, usb3_req->req.actual,
931 		status);
932 	usb3_req->req.status = status;
933 	usb3_ep->started = false;
934 	list_del_init(&usb3_req->queue);
935 	spin_unlock(&usb3->lock);
936 	usb_gadget_giveback_request(&usb3_ep->ep, &usb3_req->req);
937 	spin_lock(&usb3->lock);
938 }
939 
940 static void usb3_request_done(struct renesas_usb3_ep *usb3_ep,
941 			      struct renesas_usb3_request *usb3_req, int status)
942 {
943 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
944 	unsigned long flags;
945 
946 	spin_lock_irqsave(&usb3->lock, flags);
947 	__usb3_request_done(usb3_ep, usb3_req, status);
948 	spin_unlock_irqrestore(&usb3->lock, flags);
949 }
950 
951 static void usb3_irq_epc_pipe0_status_end(struct renesas_usb3 *usb3)
952 {
953 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
954 	struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
955 
956 	if (usb3_req)
957 		usb3_request_done(usb3_ep, usb3_req, 0);
958 	if (usb3->test_mode)
959 		usb3_set_test_mode(usb3);
960 }
961 
962 static void usb3_get_setup_data(struct renesas_usb3 *usb3,
963 				struct usb_ctrlrequest *ctrl)
964 {
965 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
966 	u32 *data = (u32 *)ctrl;
967 
968 	*data++ = usb3_read(usb3, USB3_STUP_DAT_0);
969 	*data = usb3_read(usb3, USB3_STUP_DAT_1);
970 
971 	/* update this driver's flag */
972 	usb3_ep->dir_in = !!(ctrl->bRequestType & USB_DIR_IN);
973 }
974 
975 static void usb3_set_p0_con_update_res(struct renesas_usb3 *usb3, u32 res)
976 {
977 	u32 val = usb3_read(usb3, USB3_P0_CON);
978 
979 	val &= ~(P0_CON_ST_RES_MASK | P0_CON_OT_RES_MASK | P0_CON_IN_RES_MASK);
980 	val |= res | P0_CON_RES_WEN;
981 	usb3_write(usb3, val, USB3_P0_CON);
982 }
983 
984 static void usb3_set_p0_con_for_ctrl_read_data(struct renesas_usb3 *usb3)
985 {
986 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
987 				   P0_CON_OT_RES_FORCE_STALL |
988 				   P0_CON_IN_RES_NORMAL);
989 }
990 
991 static void usb3_set_p0_con_for_ctrl_read_status(struct renesas_usb3 *usb3)
992 {
993 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
994 				   P0_CON_OT_RES_FORCE_STALL |
995 				   P0_CON_IN_RES_NORMAL);
996 }
997 
998 static void usb3_set_p0_con_for_ctrl_write_data(struct renesas_usb3 *usb3)
999 {
1000 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
1001 				   P0_CON_OT_RES_NORMAL |
1002 				   P0_CON_IN_RES_FORCE_STALL);
1003 }
1004 
1005 static void usb3_set_p0_con_for_ctrl_write_status(struct renesas_usb3 *usb3)
1006 {
1007 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
1008 				   P0_CON_OT_RES_NORMAL |
1009 				   P0_CON_IN_RES_FORCE_STALL);
1010 }
1011 
1012 static void usb3_set_p0_con_for_no_data(struct renesas_usb3 *usb3)
1013 {
1014 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
1015 				   P0_CON_OT_RES_FORCE_STALL |
1016 				   P0_CON_IN_RES_FORCE_STALL);
1017 }
1018 
1019 static void usb3_set_p0_con_stall(struct renesas_usb3 *usb3)
1020 {
1021 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_STALL |
1022 				   P0_CON_OT_RES_FORCE_STALL |
1023 				   P0_CON_IN_RES_FORCE_STALL);
1024 }
1025 
1026 static void usb3_set_p0_con_stop(struct renesas_usb3 *usb3)
1027 {
1028 	usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
1029 				   P0_CON_OT_RES_FORCE_NRDY |
1030 				   P0_CON_IN_RES_FORCE_NRDY);
1031 }
1032 
1033 static int usb3_pn_change(struct renesas_usb3 *usb3, int num)
1034 {
1035 	if (num == 0 || num > usb3->num_usb3_eps)
1036 		return -ENXIO;
1037 
1038 	usb3_write(usb3, num, USB3_PIPE_COM);
1039 
1040 	return 0;
1041 }
1042 
1043 static void usb3_set_pn_con_update_res(struct renesas_usb3 *usb3, u32 res)
1044 {
1045 	u32 val = usb3_read(usb3, USB3_PN_CON);
1046 
1047 	val &= ~PN_CON_RES_MASK;
1048 	val |= res & PN_CON_RES_MASK;
1049 	val |= PN_CON_RES_WEN;
1050 	usb3_write(usb3, val, USB3_PN_CON);
1051 }
1052 
1053 static void usb3_pn_start(struct renesas_usb3 *usb3)
1054 {
1055 	usb3_set_pn_con_update_res(usb3, PN_CON_RES_NORMAL);
1056 }
1057 
1058 static void usb3_pn_stop(struct renesas_usb3 *usb3)
1059 {
1060 	usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_NRDY);
1061 }
1062 
1063 static void usb3_pn_stall(struct renesas_usb3 *usb3)
1064 {
1065 	usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_STALL);
1066 }
1067 
1068 static int usb3_pn_con_clear(struct renesas_usb3 *usb3)
1069 {
1070 	usb3_set_bit(usb3, PN_CON_CLR, USB3_PN_CON);
1071 
1072 	return usb3_wait(usb3, USB3_PN_CON, PN_CON_CLR, 0);
1073 }
1074 
1075 static bool usb3_is_transfer_complete(struct renesas_usb3_ep *usb3_ep,
1076 				      struct renesas_usb3_request *usb3_req)
1077 {
1078 	struct usb_request *req = &usb3_req->req;
1079 
1080 	if ((!req->zero && req->actual == req->length) ||
1081 	    (req->actual % usb3_ep->ep.maxpacket) || (req->length == 0))
1082 		return true;
1083 	else
1084 		return false;
1085 }
1086 
1087 static int usb3_wait_pipe_status(struct renesas_usb3_ep *usb3_ep, u32 mask)
1088 {
1089 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1090 	u32 sta_reg = usb3_ep->num ? USB3_PN_STA : USB3_P0_STA;
1091 
1092 	return usb3_wait(usb3, sta_reg, mask, mask);
1093 }
1094 
1095 static void usb3_set_px_con_send(struct renesas_usb3_ep *usb3_ep, int bytes,
1096 				 bool last)
1097 {
1098 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1099 	u32 con_reg = usb3_ep->num ? USB3_PN_CON : USB3_P0_CON;
1100 	u32 val = usb3_read(usb3, con_reg);
1101 
1102 	val |= PX_CON_SEND | PX_CON_BYTE_EN_BYTES(bytes);
1103 	val |= (usb3_ep->num && last) ? PN_CON_LAST : 0;
1104 	usb3_write(usb3, val, con_reg);
1105 }
1106 
1107 static int usb3_write_pipe(struct renesas_usb3_ep *usb3_ep,
1108 			   struct renesas_usb3_request *usb3_req,
1109 			   u32 fifo_reg)
1110 {
1111 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1112 	int i;
1113 	int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
1114 			usb3_ep->ep.maxpacket);
1115 	u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
1116 	u32 tmp = 0;
1117 	bool is_last = !len ? true : false;
1118 
1119 	if (usb3_wait_pipe_status(usb3_ep, PX_STA_BUFSTS) < 0)
1120 		return -EBUSY;
1121 
1122 	/* Update gadget driver parameter */
1123 	usb3_req->req.actual += len;
1124 
1125 	/* Write data to the register */
1126 	if (len >= 4) {
1127 		iowrite32_rep(usb3->reg + fifo_reg, buf, len / 4);
1128 		buf += (len / 4) * 4;
1129 		len %= 4;	/* update len to use usb3_set_pX_con_send() */
1130 	}
1131 
1132 	if (len) {
1133 		for (i = 0; i < len; i++)
1134 			tmp |= buf[i] << (8 * i);
1135 		usb3_write(usb3, tmp, fifo_reg);
1136 	}
1137 
1138 	if (!is_last)
1139 		is_last = usb3_is_transfer_complete(usb3_ep, usb3_req);
1140 	/* Send the data */
1141 	usb3_set_px_con_send(usb3_ep, len, is_last);
1142 
1143 	return is_last ? 0 : -EAGAIN;
1144 }
1145 
1146 static u32 usb3_get_received_length(struct renesas_usb3_ep *usb3_ep)
1147 {
1148 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1149 	u32 lng_reg = usb3_ep->num ? USB3_PN_LNG : USB3_P0_LNG;
1150 
1151 	return usb3_read(usb3, lng_reg);
1152 }
1153 
1154 static int usb3_read_pipe(struct renesas_usb3_ep *usb3_ep,
1155 			  struct renesas_usb3_request *usb3_req, u32 fifo_reg)
1156 {
1157 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1158 	int i;
1159 	int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
1160 			usb3_get_received_length(usb3_ep));
1161 	u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
1162 	u32 tmp = 0;
1163 
1164 	if (!len)
1165 		return 0;
1166 
1167 	/* Update gadget driver parameter */
1168 	usb3_req->req.actual += len;
1169 
1170 	/* Read data from the register */
1171 	if (len >= 4) {
1172 		ioread32_rep(usb3->reg + fifo_reg, buf, len / 4);
1173 		buf += (len / 4) * 4;
1174 		len %= 4;
1175 	}
1176 
1177 	if (len) {
1178 		tmp = usb3_read(usb3, fifo_reg);
1179 		for (i = 0; i < len; i++)
1180 			buf[i] = (tmp >> (8 * i)) & 0xff;
1181 	}
1182 
1183 	return usb3_is_transfer_complete(usb3_ep, usb3_req) ? 0 : -EAGAIN;
1184 }
1185 
1186 static void usb3_set_status_stage(struct renesas_usb3_ep *usb3_ep,
1187 				  struct renesas_usb3_request *usb3_req)
1188 {
1189 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1190 
1191 	if (usb3_ep->dir_in) {
1192 		usb3_set_p0_con_for_ctrl_read_status(usb3);
1193 	} else {
1194 		if (!usb3_req->req.length)
1195 			usb3_set_p0_con_for_no_data(usb3);
1196 		else
1197 			usb3_set_p0_con_for_ctrl_write_status(usb3);
1198 	}
1199 }
1200 
1201 static void usb3_p0_xfer(struct renesas_usb3_ep *usb3_ep,
1202 			 struct renesas_usb3_request *usb3_req)
1203 {
1204 	int ret;
1205 
1206 	if (usb3_ep->dir_in)
1207 		ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_P0_WRITE);
1208 	else
1209 		ret = usb3_read_pipe(usb3_ep, usb3_req, USB3_P0_READ);
1210 
1211 	if (!ret)
1212 		usb3_set_status_stage(usb3_ep, usb3_req);
1213 }
1214 
1215 static void usb3_start_pipe0(struct renesas_usb3_ep *usb3_ep,
1216 			     struct renesas_usb3_request *usb3_req)
1217 {
1218 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1219 
1220 	if (usb3_ep->started)
1221 		return;
1222 
1223 	usb3_ep->started = true;
1224 
1225 	if (usb3_ep->dir_in) {
1226 		usb3_set_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
1227 		usb3_set_p0_con_for_ctrl_read_data(usb3);
1228 	} else {
1229 		usb3_clear_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
1230 		if (usb3_req->req.length)
1231 			usb3_set_p0_con_for_ctrl_write_data(usb3);
1232 	}
1233 
1234 	usb3_p0_xfer(usb3_ep, usb3_req);
1235 }
1236 
1237 static void usb3_enable_dma_pipen(struct renesas_usb3 *usb3)
1238 {
1239 	usb3_set_bit(usb3, PN_CON_DATAIF_EN, USB3_PN_CON);
1240 }
1241 
1242 static void usb3_disable_dma_pipen(struct renesas_usb3 *usb3)
1243 {
1244 	usb3_clear_bit(usb3, PN_CON_DATAIF_EN, USB3_PN_CON);
1245 }
1246 
1247 static void usb3_enable_dma_irq(struct renesas_usb3 *usb3, int num)
1248 {
1249 	usb3_set_bit(usb3, DMA_INT(num), USB3_DMA_INT_ENA);
1250 }
1251 
1252 static void usb3_disable_dma_irq(struct renesas_usb3 *usb3, int num)
1253 {
1254 	usb3_clear_bit(usb3, DMA_INT(num), USB3_DMA_INT_ENA);
1255 }
1256 
1257 static u32 usb3_dma_mps_to_prd_word1(struct renesas_usb3_ep *usb3_ep)
1258 {
1259 	switch (usb3_ep->ep.maxpacket) {
1260 	case 8:
1261 		return USB3_PRD1_MPS_8;
1262 	case 16:
1263 		return USB3_PRD1_MPS_16;
1264 	case 32:
1265 		return USB3_PRD1_MPS_32;
1266 	case 64:
1267 		return USB3_PRD1_MPS_64;
1268 	case 512:
1269 		return USB3_PRD1_MPS_512;
1270 	case 1024:
1271 		return USB3_PRD1_MPS_1024;
1272 	default:
1273 		return USB3_PRD1_MPS_RESERVED;
1274 	}
1275 }
1276 
1277 static bool usb3_dma_get_setting_area(struct renesas_usb3_ep *usb3_ep,
1278 				      struct renesas_usb3_request *usb3_req)
1279 {
1280 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1281 	struct renesas_usb3_dma *dma;
1282 	int i;
1283 	bool ret = false;
1284 
1285 	if (usb3_req->req.length > USB3_DMA_MAX_XFER_SIZE_ALL_PRDS) {
1286 		dev_dbg(usb3_to_dev(usb3), "%s: the length is too big (%d)\n",
1287 			__func__, usb3_req->req.length);
1288 		return false;
1289 	}
1290 
1291 	/* The driver doesn't handle zero-length packet via dmac */
1292 	if (!usb3_req->req.length)
1293 		return false;
1294 
1295 	if (usb3_dma_mps_to_prd_word1(usb3_ep) == USB3_PRD1_MPS_RESERVED)
1296 		return false;
1297 
1298 	usb3_for_each_dma(usb3, dma, i) {
1299 		if (dma->used)
1300 			continue;
1301 
1302 		if (usb_gadget_map_request(&usb3->gadget, &usb3_req->req,
1303 					   usb3_ep->dir_in) < 0)
1304 			break;
1305 
1306 		dma->used = true;
1307 		usb3_ep->dma = dma;
1308 		ret = true;
1309 		break;
1310 	}
1311 
1312 	return ret;
1313 }
1314 
1315 static void usb3_dma_put_setting_area(struct renesas_usb3_ep *usb3_ep,
1316 				      struct renesas_usb3_request *usb3_req)
1317 {
1318 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1319 	int i;
1320 	struct renesas_usb3_dma *dma;
1321 
1322 	usb3_for_each_dma(usb3, dma, i) {
1323 		if (usb3_ep->dma == dma) {
1324 			usb_gadget_unmap_request(&usb3->gadget, &usb3_req->req,
1325 						 usb3_ep->dir_in);
1326 			dma->used = false;
1327 			usb3_ep->dma = NULL;
1328 			break;
1329 		}
1330 	}
1331 }
1332 
1333 static void usb3_dma_fill_prd(struct renesas_usb3_ep *usb3_ep,
1334 			      struct renesas_usb3_request *usb3_req)
1335 {
1336 	struct renesas_usb3_prd *cur_prd = usb3_ep->dma->prd;
1337 	u32 remain = usb3_req->req.length;
1338 	u32 dma = usb3_req->req.dma;
1339 	u32 len;
1340 	int i = 0;
1341 
1342 	do {
1343 		len = min_t(u32, remain, USB3_DMA_MAX_XFER_SIZE) &
1344 			    USB3_PRD1_SIZE_MASK;
1345 		cur_prd->word1 = usb3_dma_mps_to_prd_word1(usb3_ep) |
1346 				 USB3_PRD1_B_INC | len;
1347 		cur_prd->bap = dma;
1348 		remain -= len;
1349 		dma += len;
1350 		if (!remain || (i + 1) < USB3_DMA_NUM_PRD_ENTRIES)
1351 			break;
1352 
1353 		cur_prd++;
1354 		i++;
1355 	} while (1);
1356 
1357 	cur_prd->word1 |= USB3_PRD1_E | USB3_PRD1_INT;
1358 	if (usb3_ep->dir_in)
1359 		cur_prd->word1 |= USB3_PRD1_LST;
1360 }
1361 
1362 static void usb3_dma_kick_prd(struct renesas_usb3_ep *usb3_ep)
1363 {
1364 	struct renesas_usb3_dma *dma = usb3_ep->dma;
1365 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1366 	u32 dma_con = DMA_COM_PIPE_NO(usb3_ep->num) | DMA_CON_PRD_EN;
1367 
1368 	if (usb3_ep->dir_in)
1369 		dma_con |= DMA_CON_PIPE_DIR;
1370 
1371 	wmb();	/* prd entries should be in system memory here */
1372 
1373 	usb3_write(usb3, 1 << usb3_ep->num, USB3_DMA_INT_STA);
1374 	usb3_write(usb3, AXI_INT_PRDEN_CLR_STA(dma->num) |
1375 		   AXI_INT_PRDERR_STA(dma->num), USB3_AXI_INT_STA);
1376 
1377 	usb3_write(usb3, dma->prd_dma, USB3_DMA_CH0_PRD_ADR(dma->num));
1378 	usb3_write(usb3, dma_con, USB3_DMA_CH0_CON(dma->num));
1379 	usb3_enable_dma_irq(usb3, usb3_ep->num);
1380 }
1381 
1382 static void usb3_dma_stop_prd(struct renesas_usb3_ep *usb3_ep)
1383 {
1384 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1385 	struct renesas_usb3_dma *dma = usb3_ep->dma;
1386 
1387 	usb3_disable_dma_irq(usb3, usb3_ep->num);
1388 	usb3_write(usb3, 0, USB3_DMA_CH0_CON(dma->num));
1389 }
1390 
1391 static int usb3_dma_update_status(struct renesas_usb3_ep *usb3_ep,
1392 				  struct renesas_usb3_request *usb3_req)
1393 {
1394 	struct renesas_usb3_prd *cur_prd = usb3_ep->dma->prd;
1395 	struct usb_request *req = &usb3_req->req;
1396 	u32 remain, len;
1397 	int i = 0;
1398 	int status = 0;
1399 
1400 	rmb();	/* The controller updated prd entries */
1401 
1402 	do {
1403 		if (cur_prd->word1 & USB3_PRD1_D)
1404 			status = -EIO;
1405 		if (cur_prd->word1 & USB3_PRD1_E)
1406 			len = req->length % USB3_DMA_MAX_XFER_SIZE;
1407 		else
1408 			len = USB3_DMA_MAX_XFER_SIZE;
1409 		remain = cur_prd->word1 & USB3_PRD1_SIZE_MASK;
1410 		req->actual += len - remain;
1411 
1412 		if (cur_prd->word1 & USB3_PRD1_E ||
1413 		    (i + 1) < USB3_DMA_NUM_PRD_ENTRIES)
1414 			break;
1415 
1416 		cur_prd++;
1417 		i++;
1418 	} while (1);
1419 
1420 	return status;
1421 }
1422 
1423 static bool usb3_dma_try_start(struct renesas_usb3_ep *usb3_ep,
1424 			       struct renesas_usb3_request *usb3_req)
1425 {
1426 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1427 
1428 	if (!use_dma)
1429 		return false;
1430 
1431 	if (usb3_dma_get_setting_area(usb3_ep, usb3_req)) {
1432 		usb3_pn_stop(usb3);
1433 		usb3_enable_dma_pipen(usb3);
1434 		usb3_dma_fill_prd(usb3_ep, usb3_req);
1435 		usb3_dma_kick_prd(usb3_ep);
1436 		usb3_pn_start(usb3);
1437 		return true;
1438 	}
1439 
1440 	return false;
1441 }
1442 
1443 static int usb3_dma_try_stop(struct renesas_usb3_ep *usb3_ep,
1444 			     struct renesas_usb3_request *usb3_req)
1445 {
1446 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1447 	unsigned long flags;
1448 	int status = 0;
1449 
1450 	spin_lock_irqsave(&usb3->lock, flags);
1451 	if (!usb3_ep->dma)
1452 		goto out;
1453 
1454 	if (!usb3_pn_change(usb3, usb3_ep->num))
1455 		usb3_disable_dma_pipen(usb3);
1456 	usb3_dma_stop_prd(usb3_ep);
1457 	status = usb3_dma_update_status(usb3_ep, usb3_req);
1458 	usb3_dma_put_setting_area(usb3_ep, usb3_req);
1459 
1460 out:
1461 	spin_unlock_irqrestore(&usb3->lock, flags);
1462 	return status;
1463 }
1464 
1465 static int renesas_usb3_dma_free_prd(struct renesas_usb3 *usb3,
1466 				     struct device *dev)
1467 {
1468 	int i;
1469 	struct renesas_usb3_dma *dma;
1470 
1471 	usb3_for_each_dma(usb3, dma, i) {
1472 		if (dma->prd) {
1473 			dma_free_coherent(dev, USB3_DMA_PRD_SIZE,
1474 					  dma->prd, dma->prd_dma);
1475 			dma->prd = NULL;
1476 		}
1477 	}
1478 
1479 	return 0;
1480 }
1481 
1482 static int renesas_usb3_dma_alloc_prd(struct renesas_usb3 *usb3,
1483 				      struct device *dev)
1484 {
1485 	int i;
1486 	struct renesas_usb3_dma *dma;
1487 
1488 	if (!use_dma)
1489 		return 0;
1490 
1491 	usb3_for_each_dma(usb3, dma, i) {
1492 		dma->prd = dma_alloc_coherent(dev, USB3_DMA_PRD_SIZE,
1493 					      &dma->prd_dma, GFP_KERNEL);
1494 		if (!dma->prd) {
1495 			renesas_usb3_dma_free_prd(usb3, dev);
1496 			return -ENOMEM;
1497 		}
1498 		dma->num = i + 1;
1499 	}
1500 
1501 	return 0;
1502 }
1503 
1504 static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep,
1505 			     struct renesas_usb3_request *usb3_req)
1506 {
1507 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1508 	struct renesas_usb3_request *usb3_req_first;
1509 	unsigned long flags;
1510 	int ret = -EAGAIN;
1511 	u32 enable_bits = 0;
1512 
1513 	spin_lock_irqsave(&usb3->lock, flags);
1514 	if (usb3_ep->halt || usb3_ep->started)
1515 		goto out;
1516 	usb3_req_first = __usb3_get_request(usb3_ep);
1517 	if (!usb3_req_first || usb3_req != usb3_req_first)
1518 		goto out;
1519 
1520 	if (usb3_pn_change(usb3, usb3_ep->num) < 0)
1521 		goto out;
1522 
1523 	usb3_ep->started = true;
1524 
1525 	if (usb3_dma_try_start(usb3_ep, usb3_req))
1526 		goto out;
1527 
1528 	usb3_pn_start(usb3);
1529 
1530 	if (usb3_ep->dir_in) {
1531 		ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE);
1532 		enable_bits |= PN_INT_LSTTR;
1533 	}
1534 
1535 	if (ret < 0)
1536 		enable_bits |= PN_INT_BFRDY;
1537 
1538 	if (enable_bits) {
1539 		usb3_set_bit(usb3, enable_bits, USB3_PN_INT_ENA);
1540 		usb3_enable_pipe_irq(usb3, usb3_ep->num);
1541 	}
1542 out:
1543 	spin_unlock_irqrestore(&usb3->lock, flags);
1544 }
1545 
1546 static int renesas_usb3_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
1547 				 gfp_t gfp_flags)
1548 {
1549 	struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1550 	struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
1551 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1552 	unsigned long flags;
1553 
1554 	dev_dbg(usb3_to_dev(usb3), "ep_queue: ep%2d, %u\n", usb3_ep->num,
1555 		_req->length);
1556 
1557 	_req->status = -EINPROGRESS;
1558 	_req->actual = 0;
1559 	spin_lock_irqsave(&usb3->lock, flags);
1560 	list_add_tail(&usb3_req->queue, &usb3_ep->queue);
1561 	spin_unlock_irqrestore(&usb3->lock, flags);
1562 
1563 	if (!usb3_ep->num)
1564 		usb3_start_pipe0(usb3_ep, usb3_req);
1565 	else
1566 		usb3_start_pipen(usb3_ep, usb3_req);
1567 
1568 	return 0;
1569 }
1570 
1571 static void usb3_set_device_address(struct renesas_usb3 *usb3, u16 addr)
1572 {
1573 	/* DEV_ADDR bit field is cleared by WarmReset, HotReset and BusReset */
1574 	usb3_set_bit(usb3, USB_COM_CON_DEV_ADDR(addr), USB3_USB_COM_CON);
1575 }
1576 
1577 static bool usb3_std_req_set_address(struct renesas_usb3 *usb3,
1578 				     struct usb_ctrlrequest *ctrl)
1579 {
1580 	if (le16_to_cpu(ctrl->wValue) >= 128)
1581 		return true;	/* stall */
1582 
1583 	usb3_set_device_address(usb3, le16_to_cpu(ctrl->wValue));
1584 	usb3_set_p0_con_for_no_data(usb3);
1585 
1586 	return false;
1587 }
1588 
1589 static void usb3_pipe0_internal_xfer(struct renesas_usb3 *usb3,
1590 				     void *tx_data, size_t len,
1591 				     void (*complete)(struct usb_ep *ep,
1592 						      struct usb_request *req))
1593 {
1594 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1595 
1596 	if (tx_data)
1597 		memcpy(usb3->ep0_buf, tx_data,
1598 		       min_t(size_t, len, USB3_EP0_BUF_SIZE));
1599 
1600 	usb3->ep0_req->buf = &usb3->ep0_buf;
1601 	usb3->ep0_req->length = len;
1602 	usb3->ep0_req->complete = complete;
1603 	renesas_usb3_ep_queue(&usb3_ep->ep, usb3->ep0_req, GFP_ATOMIC);
1604 }
1605 
1606 static void usb3_pipe0_get_status_completion(struct usb_ep *ep,
1607 					     struct usb_request *req)
1608 {
1609 }
1610 
1611 static bool usb3_std_req_get_status(struct renesas_usb3 *usb3,
1612 				    struct usb_ctrlrequest *ctrl)
1613 {
1614 	bool stall = false;
1615 	struct renesas_usb3_ep *usb3_ep;
1616 	int num;
1617 	u16 status = 0;
1618 	__le16 tx_data;
1619 
1620 	switch (ctrl->bRequestType & USB_RECIP_MASK) {
1621 	case USB_RECIP_DEVICE:
1622 		if (usb3->gadget.is_selfpowered)
1623 			status |= 1 << USB_DEVICE_SELF_POWERED;
1624 		if (usb3->gadget.speed == USB_SPEED_SUPER)
1625 			status |= usb3_feature_get_un_enabled(usb3);
1626 		break;
1627 	case USB_RECIP_INTERFACE:
1628 		break;
1629 	case USB_RECIP_ENDPOINT:
1630 		num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
1631 		usb3_ep = usb3_get_ep(usb3, num);
1632 		if (usb3_ep->halt)
1633 			status |= 1 << USB_ENDPOINT_HALT;
1634 		break;
1635 	default:
1636 		stall = true;
1637 		break;
1638 	}
1639 
1640 	if (!stall) {
1641 		tx_data = cpu_to_le16(status);
1642 		dev_dbg(usb3_to_dev(usb3), "get_status: req = %p\n",
1643 			usb_req_to_usb3_req(usb3->ep0_req));
1644 		usb3_pipe0_internal_xfer(usb3, &tx_data, sizeof(tx_data),
1645 					 usb3_pipe0_get_status_completion);
1646 	}
1647 
1648 	return stall;
1649 }
1650 
1651 static bool usb3_std_req_feature_device(struct renesas_usb3 *usb3,
1652 					struct usb_ctrlrequest *ctrl, bool set)
1653 {
1654 	bool stall = true;
1655 	u16 w_value = le16_to_cpu(ctrl->wValue);
1656 
1657 	switch (w_value) {
1658 	case USB_DEVICE_TEST_MODE:
1659 		if (!set)
1660 			break;
1661 		usb3->test_mode = le16_to_cpu(ctrl->wIndex) >> 8;
1662 		stall = false;
1663 		break;
1664 	case USB_DEVICE_U1_ENABLE:
1665 	case USB_DEVICE_U2_ENABLE:
1666 		if (usb3->gadget.speed != USB_SPEED_SUPER)
1667 			break;
1668 		if (w_value == USB_DEVICE_U1_ENABLE)
1669 			usb3_feature_u1_enable(usb3, set);
1670 		if (w_value == USB_DEVICE_U2_ENABLE)
1671 			usb3_feature_u2_enable(usb3, set);
1672 		stall = false;
1673 		break;
1674 	default:
1675 		break;
1676 	}
1677 
1678 	return stall;
1679 }
1680 
1681 static int usb3_set_halt_p0(struct renesas_usb3_ep *usb3_ep, bool halt)
1682 {
1683 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1684 
1685 	if (unlikely(usb3_ep->num))
1686 		return -EINVAL;
1687 
1688 	usb3_ep->halt = halt;
1689 	if (halt)
1690 		usb3_set_p0_con_stall(usb3);
1691 	else
1692 		usb3_set_p0_con_stop(usb3);
1693 
1694 	return 0;
1695 }
1696 
1697 static int usb3_set_halt_pn(struct renesas_usb3_ep *usb3_ep, bool halt,
1698 			    bool is_clear_feature)
1699 {
1700 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1701 	unsigned long flags;
1702 
1703 	spin_lock_irqsave(&usb3->lock, flags);
1704 	if (!usb3_pn_change(usb3, usb3_ep->num)) {
1705 		usb3_ep->halt = halt;
1706 		if (halt) {
1707 			usb3_pn_stall(usb3);
1708 		} else if (!is_clear_feature || !usb3_ep->wedge) {
1709 			usb3_pn_con_clear(usb3);
1710 			usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
1711 			usb3_pn_stop(usb3);
1712 		}
1713 	}
1714 	spin_unlock_irqrestore(&usb3->lock, flags);
1715 
1716 	return 0;
1717 }
1718 
1719 static int usb3_set_halt(struct renesas_usb3_ep *usb3_ep, bool halt,
1720 			 bool is_clear_feature)
1721 {
1722 	int ret = 0;
1723 
1724 	if (halt && usb3_ep->started)
1725 		return -EAGAIN;
1726 
1727 	if (usb3_ep->num)
1728 		ret = usb3_set_halt_pn(usb3_ep, halt, is_clear_feature);
1729 	else
1730 		ret = usb3_set_halt_p0(usb3_ep, halt);
1731 
1732 	return ret;
1733 }
1734 
1735 static bool usb3_std_req_feature_endpoint(struct renesas_usb3 *usb3,
1736 					  struct usb_ctrlrequest *ctrl,
1737 					  bool set)
1738 {
1739 	int num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
1740 	struct renesas_usb3_ep *usb3_ep;
1741 	struct renesas_usb3_request *usb3_req;
1742 
1743 	if (le16_to_cpu(ctrl->wValue) != USB_ENDPOINT_HALT)
1744 		return true;	/* stall */
1745 
1746 	usb3_ep = usb3_get_ep(usb3, num);
1747 	usb3_set_halt(usb3_ep, set, true);
1748 
1749 	/* Restarts a queue if clear feature */
1750 	if (!set) {
1751 		usb3_ep->started = false;
1752 		usb3_req = usb3_get_request(usb3_ep);
1753 		if (usb3_req)
1754 			usb3_start_pipen(usb3_ep, usb3_req);
1755 	}
1756 
1757 	return false;
1758 }
1759 
1760 static bool usb3_std_req_feature(struct renesas_usb3 *usb3,
1761 				 struct usb_ctrlrequest *ctrl, bool set)
1762 {
1763 	bool stall = false;
1764 
1765 	switch (ctrl->bRequestType & USB_RECIP_MASK) {
1766 	case USB_RECIP_DEVICE:
1767 		stall = usb3_std_req_feature_device(usb3, ctrl, set);
1768 		break;
1769 	case USB_RECIP_INTERFACE:
1770 		break;
1771 	case USB_RECIP_ENDPOINT:
1772 		stall = usb3_std_req_feature_endpoint(usb3, ctrl, set);
1773 		break;
1774 	default:
1775 		stall = true;
1776 		break;
1777 	}
1778 
1779 	if (!stall)
1780 		usb3_set_p0_con_for_no_data(usb3);
1781 
1782 	return stall;
1783 }
1784 
1785 static void usb3_pipe0_set_sel_completion(struct usb_ep *ep,
1786 					  struct usb_request *req)
1787 {
1788 	/* TODO */
1789 }
1790 
1791 static bool usb3_std_req_set_sel(struct renesas_usb3 *usb3,
1792 				 struct usb_ctrlrequest *ctrl)
1793 {
1794 	u16 w_length = le16_to_cpu(ctrl->wLength);
1795 
1796 	if (w_length != 6)
1797 		return true;	/* stall */
1798 
1799 	dev_dbg(usb3_to_dev(usb3), "set_sel: req = %p\n",
1800 		usb_req_to_usb3_req(usb3->ep0_req));
1801 	usb3_pipe0_internal_xfer(usb3, NULL, 6, usb3_pipe0_set_sel_completion);
1802 
1803 	return false;
1804 }
1805 
1806 static bool usb3_std_req_set_configuration(struct renesas_usb3 *usb3,
1807 					   struct usb_ctrlrequest *ctrl)
1808 {
1809 	if (le16_to_cpu(ctrl->wValue) > 0)
1810 		usb3_set_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
1811 	else
1812 		usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
1813 
1814 	return false;
1815 }
1816 
1817 /**
1818  * usb3_handle_standard_request - handle some standard requests
1819  * @usb3: the renesas_usb3 pointer
1820  * @ctrl: a pointer of setup data
1821  *
1822  * Returns true if this function handled a standard request
1823  */
1824 static bool usb3_handle_standard_request(struct renesas_usb3 *usb3,
1825 					 struct usb_ctrlrequest *ctrl)
1826 {
1827 	bool ret = false;
1828 	bool stall = false;
1829 
1830 	if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
1831 		switch (ctrl->bRequest) {
1832 		case USB_REQ_SET_ADDRESS:
1833 			stall = usb3_std_req_set_address(usb3, ctrl);
1834 			ret = true;
1835 			break;
1836 		case USB_REQ_GET_STATUS:
1837 			stall = usb3_std_req_get_status(usb3, ctrl);
1838 			ret = true;
1839 			break;
1840 		case USB_REQ_CLEAR_FEATURE:
1841 			stall = usb3_std_req_feature(usb3, ctrl, false);
1842 			ret = true;
1843 			break;
1844 		case USB_REQ_SET_FEATURE:
1845 			stall = usb3_std_req_feature(usb3, ctrl, true);
1846 			ret = true;
1847 			break;
1848 		case USB_REQ_SET_SEL:
1849 			stall = usb3_std_req_set_sel(usb3, ctrl);
1850 			ret = true;
1851 			break;
1852 		case USB_REQ_SET_ISOCH_DELAY:
1853 			/* This hardware doesn't support Isochronous xfer */
1854 			stall = true;
1855 			ret = true;
1856 			break;
1857 		case USB_REQ_SET_CONFIGURATION:
1858 			usb3_std_req_set_configuration(usb3, ctrl);
1859 			break;
1860 		default:
1861 			break;
1862 		}
1863 	}
1864 
1865 	if (stall)
1866 		usb3_set_p0_con_stall(usb3);
1867 
1868 	return ret;
1869 }
1870 
1871 static int usb3_p0_con_clear_buffer(struct renesas_usb3 *usb3)
1872 {
1873 	usb3_set_bit(usb3, P0_CON_BCLR, USB3_P0_CON);
1874 
1875 	return usb3_wait(usb3, USB3_P0_CON, P0_CON_BCLR, 0);
1876 }
1877 
1878 static void usb3_irq_epc_pipe0_setup(struct renesas_usb3 *usb3)
1879 {
1880 	struct usb_ctrlrequest ctrl;
1881 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1882 
1883 	/* Call giveback function if previous transfer is not completed */
1884 	if (usb3_ep->started)
1885 		usb3_request_done(usb3_ep, usb3_get_request(usb3_ep),
1886 				  -ECONNRESET);
1887 
1888 	usb3_p0_con_clear_buffer(usb3);
1889 	usb3_get_setup_data(usb3, &ctrl);
1890 	if (!usb3_handle_standard_request(usb3, &ctrl))
1891 		if (usb3->driver->setup(&usb3->gadget, &ctrl) < 0)
1892 			usb3_set_p0_con_stall(usb3);
1893 }
1894 
1895 static void usb3_irq_epc_pipe0_bfrdy(struct renesas_usb3 *usb3)
1896 {
1897 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1898 	struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1899 
1900 	if (!usb3_req)
1901 		return;
1902 
1903 	usb3_p0_xfer(usb3_ep, usb3_req);
1904 }
1905 
1906 static void usb3_irq_epc_pipe0(struct renesas_usb3 *usb3)
1907 {
1908 	u32 p0_int_sta = usb3_read(usb3, USB3_P0_INT_STA);
1909 
1910 	p0_int_sta &= usb3_read(usb3, USB3_P0_INT_ENA);
1911 	usb3_write(usb3, p0_int_sta, USB3_P0_INT_STA);
1912 	if (p0_int_sta & P0_INT_STSED)
1913 		usb3_irq_epc_pipe0_status_end(usb3);
1914 	if (p0_int_sta & P0_INT_SETUP)
1915 		usb3_irq_epc_pipe0_setup(usb3);
1916 	if (p0_int_sta & P0_INT_BFRDY)
1917 		usb3_irq_epc_pipe0_bfrdy(usb3);
1918 }
1919 
1920 static void usb3_request_done_pipen(struct renesas_usb3 *usb3,
1921 				    struct renesas_usb3_ep *usb3_ep,
1922 				    struct renesas_usb3_request *usb3_req,
1923 				    int status)
1924 {
1925 	unsigned long flags;
1926 
1927 	spin_lock_irqsave(&usb3->lock, flags);
1928 	if (usb3_pn_change(usb3, usb3_ep->num))
1929 		usb3_pn_stop(usb3);
1930 	spin_unlock_irqrestore(&usb3->lock, flags);
1931 
1932 	usb3_disable_pipe_irq(usb3, usb3_ep->num);
1933 	usb3_request_done(usb3_ep, usb3_req, status);
1934 
1935 	/* get next usb3_req */
1936 	usb3_req = usb3_get_request(usb3_ep);
1937 	if (usb3_req)
1938 		usb3_start_pipen(usb3_ep, usb3_req);
1939 }
1940 
1941 static void usb3_irq_epc_pipen_lsttr(struct renesas_usb3 *usb3, int num)
1942 {
1943 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1944 	struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1945 
1946 	if (!usb3_req)
1947 		return;
1948 
1949 	if (usb3_ep->dir_in) {
1950 		dev_dbg(usb3_to_dev(usb3), "%s: len = %u, actual = %u\n",
1951 			__func__, usb3_req->req.length, usb3_req->req.actual);
1952 		usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1953 	}
1954 }
1955 
1956 static void usb3_irq_epc_pipen_bfrdy(struct renesas_usb3 *usb3, int num)
1957 {
1958 	struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1959 	struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1960 	bool done = false;
1961 
1962 	if (!usb3_req)
1963 		return;
1964 
1965 	spin_lock(&usb3->lock);
1966 	if (usb3_pn_change(usb3, num))
1967 		goto out;
1968 
1969 	if (usb3_ep->dir_in) {
1970 		/* Do not stop the IN pipe here to detect LSTTR interrupt */
1971 		if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
1972 			usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA);
1973 	} else {
1974 		if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
1975 			done = true;
1976 	}
1977 
1978 out:
1979 	/* need to unlock because usb3_request_done_pipen() locks it */
1980 	spin_unlock(&usb3->lock);
1981 
1982 	if (done)
1983 		usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1984 }
1985 
1986 static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num)
1987 {
1988 	u32 pn_int_sta;
1989 
1990 	spin_lock(&usb3->lock);
1991 	if (usb3_pn_change(usb3, num) < 0) {
1992 		spin_unlock(&usb3->lock);
1993 		return;
1994 	}
1995 
1996 	pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA);
1997 	pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA);
1998 	usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA);
1999 	spin_unlock(&usb3->lock);
2000 	if (pn_int_sta & PN_INT_LSTTR)
2001 		usb3_irq_epc_pipen_lsttr(usb3, num);
2002 	if (pn_int_sta & PN_INT_BFRDY)
2003 		usb3_irq_epc_pipen_bfrdy(usb3, num);
2004 }
2005 
2006 static void usb3_irq_epc_int_2(struct renesas_usb3 *usb3, u32 int_sta_2)
2007 {
2008 	int i;
2009 
2010 	for (i = 0; i < usb3->num_usb3_eps; i++) {
2011 		if (int_sta_2 & USB_INT_2_PIPE(i)) {
2012 			if (!i)
2013 				usb3_irq_epc_pipe0(usb3);
2014 			else
2015 				usb3_irq_epc_pipen(usb3, i);
2016 		}
2017 	}
2018 }
2019 
2020 static void usb3_irq_idmon_change(struct renesas_usb3 *usb3)
2021 {
2022 	usb3_check_id(usb3);
2023 }
2024 
2025 static void usb3_irq_otg_int(struct renesas_usb3 *usb3)
2026 {
2027 	u32 otg_int_sta = usb3_read(usb3, USB3_USB_OTG_INT_STA(usb3));
2028 
2029 	otg_int_sta &= usb3_read(usb3, USB3_USB_OTG_INT_ENA(usb3));
2030 	if (otg_int_sta)
2031 		usb3_write(usb3, otg_int_sta, USB3_USB_OTG_INT_STA(usb3));
2032 
2033 	if (otg_int_sta & USB_OTG_IDMON(usb3))
2034 		usb3_irq_idmon_change(usb3);
2035 }
2036 
2037 static void usb3_irq_epc(struct renesas_usb3 *usb3)
2038 {
2039 	u32 int_sta_1 = usb3_read(usb3, USB3_USB_INT_STA_1);
2040 	u32 int_sta_2 = usb3_read(usb3, USB3_USB_INT_STA_2);
2041 
2042 	int_sta_1 &= usb3_read(usb3, USB3_USB_INT_ENA_1);
2043 	if (int_sta_1) {
2044 		usb3_write(usb3, int_sta_1, USB3_USB_INT_STA_1);
2045 		usb3_irq_epc_int_1(usb3, int_sta_1);
2046 	}
2047 
2048 	int_sta_2 &= usb3_read(usb3, USB3_USB_INT_ENA_2);
2049 	if (int_sta_2)
2050 		usb3_irq_epc_int_2(usb3, int_sta_2);
2051 
2052 	if (!usb3->is_rzv2m)
2053 		usb3_irq_otg_int(usb3);
2054 }
2055 
2056 static void usb3_irq_dma_int(struct renesas_usb3 *usb3, u32 dma_sta)
2057 {
2058 	struct renesas_usb3_ep *usb3_ep;
2059 	struct renesas_usb3_request *usb3_req;
2060 	int i, status;
2061 
2062 	for (i = 0; i < usb3->num_usb3_eps; i++) {
2063 		if (!(dma_sta & DMA_INT(i)))
2064 			continue;
2065 
2066 		usb3_ep = usb3_get_ep(usb3, i);
2067 		if (!(usb3_read(usb3, USB3_AXI_INT_STA) &
2068 		    AXI_INT_PRDEN_CLR_STA(usb3_ep->dma->num)))
2069 			continue;
2070 
2071 		usb3_req = usb3_get_request(usb3_ep);
2072 		status = usb3_dma_try_stop(usb3_ep, usb3_req);
2073 		usb3_request_done_pipen(usb3, usb3_ep, usb3_req, status);
2074 	}
2075 }
2076 
2077 static void usb3_irq_dma(struct renesas_usb3 *usb3)
2078 {
2079 	u32 dma_sta = usb3_read(usb3, USB3_DMA_INT_STA);
2080 
2081 	dma_sta &= usb3_read(usb3, USB3_DMA_INT_ENA);
2082 	if (dma_sta) {
2083 		usb3_write(usb3, dma_sta, USB3_DMA_INT_STA);
2084 		usb3_irq_dma_int(usb3, dma_sta);
2085 	}
2086 }
2087 
2088 static irqreturn_t renesas_usb3_irq(int irq, void *_usb3)
2089 {
2090 	struct renesas_usb3 *usb3 = _usb3;
2091 	irqreturn_t ret = IRQ_NONE;
2092 	u32 axi_int_sta = usb3_read(usb3, USB3_AXI_INT_STA);
2093 
2094 	if (axi_int_sta & AXI_INT_DMAINT) {
2095 		usb3_irq_dma(usb3);
2096 		ret = IRQ_HANDLED;
2097 	}
2098 
2099 	if (axi_int_sta & AXI_INT_EPCINT) {
2100 		usb3_irq_epc(usb3);
2101 		ret = IRQ_HANDLED;
2102 	}
2103 
2104 	return ret;
2105 }
2106 
2107 static irqreturn_t renesas_usb3_otg_irq(int irq, void *_usb3)
2108 {
2109 	struct renesas_usb3 *usb3 = _usb3;
2110 
2111 	usb3_irq_otg_int(usb3);
2112 
2113 	return IRQ_HANDLED;
2114 }
2115 
2116 static void usb3_write_pn_mod(struct renesas_usb3_ep *usb3_ep,
2117 			      const struct usb_endpoint_descriptor *desc)
2118 {
2119 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2120 	u32 val = 0;
2121 
2122 	val |= usb3_ep->dir_in ? PN_MOD_DIR : 0;
2123 	val |= PN_MOD_TYPE(usb_endpoint_type(desc));
2124 	val |= PN_MOD_EPNUM(usb_endpoint_num(desc));
2125 	usb3_write(usb3, val, USB3_PN_MOD);
2126 }
2127 
2128 static u32 usb3_calc_ramarea(int ram_size)
2129 {
2130 	WARN_ON(ram_size > SZ_16K);
2131 
2132 	if (ram_size <= SZ_1K)
2133 		return PN_RAMMAP_RAMAREA_1KB;
2134 	else if (ram_size <= SZ_2K)
2135 		return PN_RAMMAP_RAMAREA_2KB;
2136 	else if (ram_size <= SZ_4K)
2137 		return PN_RAMMAP_RAMAREA_4KB;
2138 	else if (ram_size <= SZ_8K)
2139 		return PN_RAMMAP_RAMAREA_8KB;
2140 	else
2141 		return PN_RAMMAP_RAMAREA_16KB;
2142 }
2143 
2144 static u32 usb3_calc_rammap_val(struct renesas_usb3_ep *usb3_ep,
2145 				const struct usb_endpoint_descriptor *desc)
2146 {
2147 	int i;
2148 	static const u32 max_packet_array[] = {8, 16, 32, 64, 512};
2149 	u32 mpkt = PN_RAMMAP_MPKT(1024);
2150 
2151 	for (i = 0; i < ARRAY_SIZE(max_packet_array); i++) {
2152 		if (usb_endpoint_maxp(desc) <= max_packet_array[i])
2153 			mpkt = PN_RAMMAP_MPKT(max_packet_array[i]);
2154 	}
2155 
2156 	return usb3_ep->rammap_val | mpkt;
2157 }
2158 
2159 static int usb3_enable_pipe_n(struct renesas_usb3_ep *usb3_ep,
2160 			      const struct usb_endpoint_descriptor *desc)
2161 {
2162 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2163 	unsigned long flags;
2164 
2165 	usb3_ep->dir_in = usb_endpoint_dir_in(desc);
2166 
2167 	spin_lock_irqsave(&usb3->lock, flags);
2168 	if (!usb3_pn_change(usb3, usb3_ep->num)) {
2169 		usb3_write_pn_mod(usb3_ep, desc);
2170 		usb3_write(usb3, usb3_calc_rammap_val(usb3_ep, desc),
2171 			   USB3_PN_RAMMAP);
2172 		usb3_pn_con_clear(usb3);
2173 		usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
2174 	}
2175 	spin_unlock_irqrestore(&usb3->lock, flags);
2176 
2177 	return 0;
2178 }
2179 
2180 static int usb3_disable_pipe_n(struct renesas_usb3_ep *usb3_ep)
2181 {
2182 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2183 	unsigned long flags;
2184 
2185 	usb3_ep->halt = false;
2186 
2187 	spin_lock_irqsave(&usb3->lock, flags);
2188 	if (!usb3_pn_change(usb3, usb3_ep->num)) {
2189 		usb3_write(usb3, 0, USB3_PN_INT_ENA);
2190 		usb3_write(usb3, 0, USB3_PN_RAMMAP);
2191 		usb3_clear_bit(usb3, PN_CON_EN, USB3_PN_CON);
2192 	}
2193 	spin_unlock_irqrestore(&usb3->lock, flags);
2194 
2195 	return 0;
2196 }
2197 
2198 /*------- usb_ep_ops -----------------------------------------------------*/
2199 static int renesas_usb3_ep_enable(struct usb_ep *_ep,
2200 				  const struct usb_endpoint_descriptor *desc)
2201 {
2202 	struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2203 
2204 	return usb3_enable_pipe_n(usb3_ep, desc);
2205 }
2206 
2207 static int renesas_usb3_ep_disable(struct usb_ep *_ep)
2208 {
2209 	struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2210 	struct renesas_usb3_request *usb3_req;
2211 
2212 	do {
2213 		usb3_req = usb3_get_request(usb3_ep);
2214 		if (!usb3_req)
2215 			break;
2216 		usb3_dma_try_stop(usb3_ep, usb3_req);
2217 		usb3_request_done(usb3_ep, usb3_req, -ESHUTDOWN);
2218 	} while (1);
2219 
2220 	return usb3_disable_pipe_n(usb3_ep);
2221 }
2222 
2223 static struct usb_request *__renesas_usb3_ep_alloc_request(gfp_t gfp_flags)
2224 {
2225 	struct renesas_usb3_request *usb3_req;
2226 
2227 	usb3_req = kzalloc(sizeof(struct renesas_usb3_request), gfp_flags);
2228 	if (!usb3_req)
2229 		return NULL;
2230 
2231 	INIT_LIST_HEAD(&usb3_req->queue);
2232 
2233 	return &usb3_req->req;
2234 }
2235 
2236 static void __renesas_usb3_ep_free_request(struct usb_request *_req)
2237 {
2238 	struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
2239 
2240 	kfree(usb3_req);
2241 }
2242 
2243 static struct usb_request *renesas_usb3_ep_alloc_request(struct usb_ep *_ep,
2244 							 gfp_t gfp_flags)
2245 {
2246 	return __renesas_usb3_ep_alloc_request(gfp_flags);
2247 }
2248 
2249 static void renesas_usb3_ep_free_request(struct usb_ep *_ep,
2250 					 struct usb_request *_req)
2251 {
2252 	__renesas_usb3_ep_free_request(_req);
2253 }
2254 
2255 static int renesas_usb3_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
2256 {
2257 	struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2258 	struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
2259 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2260 
2261 	dev_dbg(usb3_to_dev(usb3), "ep_dequeue: ep%2d, %u\n", usb3_ep->num,
2262 		_req->length);
2263 
2264 	usb3_dma_try_stop(usb3_ep, usb3_req);
2265 	usb3_request_done_pipen(usb3, usb3_ep, usb3_req, -ECONNRESET);
2266 
2267 	return 0;
2268 }
2269 
2270 static int renesas_usb3_ep_set_halt(struct usb_ep *_ep, int value)
2271 {
2272 	return usb3_set_halt(usb_ep_to_usb3_ep(_ep), !!value, false);
2273 }
2274 
2275 static int renesas_usb3_ep_set_wedge(struct usb_ep *_ep)
2276 {
2277 	struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2278 
2279 	usb3_ep->wedge = true;
2280 	return usb3_set_halt(usb3_ep, true, false);
2281 }
2282 
2283 static void renesas_usb3_ep_fifo_flush(struct usb_ep *_ep)
2284 {
2285 	struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
2286 	struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
2287 	unsigned long flags;
2288 
2289 	if (usb3_ep->num) {
2290 		spin_lock_irqsave(&usb3->lock, flags);
2291 		if (!usb3_pn_change(usb3, usb3_ep->num)) {
2292 			usb3_pn_con_clear(usb3);
2293 			usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
2294 		}
2295 		spin_unlock_irqrestore(&usb3->lock, flags);
2296 	} else {
2297 		usb3_p0_con_clear_buffer(usb3);
2298 	}
2299 }
2300 
2301 static const struct usb_ep_ops renesas_usb3_ep_ops = {
2302 	.enable		= renesas_usb3_ep_enable,
2303 	.disable	= renesas_usb3_ep_disable,
2304 
2305 	.alloc_request	= renesas_usb3_ep_alloc_request,
2306 	.free_request	= renesas_usb3_ep_free_request,
2307 
2308 	.queue		= renesas_usb3_ep_queue,
2309 	.dequeue	= renesas_usb3_ep_dequeue,
2310 
2311 	.set_halt	= renesas_usb3_ep_set_halt,
2312 	.set_wedge	= renesas_usb3_ep_set_wedge,
2313 	.fifo_flush	= renesas_usb3_ep_fifo_flush,
2314 };
2315 
2316 /*------- usb_gadget_ops -------------------------------------------------*/
2317 static int renesas_usb3_start(struct usb_gadget *gadget,
2318 			      struct usb_gadget_driver *driver)
2319 {
2320 	struct renesas_usb3 *usb3;
2321 
2322 	if (!driver || driver->max_speed < USB_SPEED_FULL ||
2323 	    !driver->setup)
2324 		return -EINVAL;
2325 
2326 	usb3 = gadget_to_renesas_usb3(gadget);
2327 
2328 	/* hook up the driver */
2329 	usb3->driver = driver;
2330 
2331 	if (usb3->phy)
2332 		phy_init(usb3->phy);
2333 
2334 	pm_runtime_get_sync(usb3_to_dev(usb3));
2335 
2336 	renesas_usb3_init_controller(usb3);
2337 
2338 	return 0;
2339 }
2340 
2341 static int renesas_usb3_stop(struct usb_gadget *gadget)
2342 {
2343 	struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
2344 
2345 	usb3->softconnect = false;
2346 	usb3->gadget.speed = USB_SPEED_UNKNOWN;
2347 	usb3->driver = NULL;
2348 	renesas_usb3_stop_controller(usb3);
2349 
2350 	if (usb3->phy)
2351 		phy_exit(usb3->phy);
2352 
2353 	pm_runtime_put(usb3_to_dev(usb3));
2354 
2355 	return 0;
2356 }
2357 
2358 static int renesas_usb3_get_frame(struct usb_gadget *_gadget)
2359 {
2360 	return -EOPNOTSUPP;
2361 }
2362 
2363 static int renesas_usb3_pullup(struct usb_gadget *gadget, int is_on)
2364 {
2365 	struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
2366 
2367 	usb3->softconnect = !!is_on;
2368 
2369 	return 0;
2370 }
2371 
2372 static int renesas_usb3_set_selfpowered(struct usb_gadget *gadget, int is_self)
2373 {
2374 	gadget->is_selfpowered = !!is_self;
2375 
2376 	return 0;
2377 }
2378 
2379 static const struct usb_gadget_ops renesas_usb3_gadget_ops = {
2380 	.get_frame		= renesas_usb3_get_frame,
2381 	.udc_start		= renesas_usb3_start,
2382 	.udc_stop		= renesas_usb3_stop,
2383 	.pullup			= renesas_usb3_pullup,
2384 	.set_selfpowered	= renesas_usb3_set_selfpowered,
2385 };
2386 
2387 static enum usb_role renesas_usb3_role_switch_get(struct usb_role_switch *sw)
2388 {
2389 	struct renesas_usb3 *usb3 = usb_role_switch_get_drvdata(sw);
2390 	enum usb_role cur_role;
2391 
2392 	pm_runtime_get_sync(usb3_to_dev(usb3));
2393 	cur_role = usb3_is_host(usb3) ? USB_ROLE_HOST : USB_ROLE_DEVICE;
2394 	pm_runtime_put(usb3_to_dev(usb3));
2395 
2396 	return cur_role;
2397 }
2398 
2399 static void handle_ext_role_switch_states(struct device *dev,
2400 					    enum usb_role role)
2401 {
2402 	struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
2403 	struct device *host = usb3->host_dev;
2404 	enum usb_role cur_role = renesas_usb3_role_switch_get(usb3->role_sw);
2405 
2406 	switch (role) {
2407 	case USB_ROLE_NONE:
2408 		usb3->connection_state = USB_ROLE_NONE;
2409 		if (cur_role == USB_ROLE_HOST)
2410 			device_release_driver(host);
2411 		if (usb3->driver)
2412 			usb3_disconnect(usb3);
2413 		usb3_vbus_out(usb3, false);
2414 		break;
2415 	case USB_ROLE_DEVICE:
2416 		if (usb3->connection_state == USB_ROLE_NONE) {
2417 			usb3->connection_state = USB_ROLE_DEVICE;
2418 			usb3_set_mode(usb3, false);
2419 			if (usb3->driver)
2420 				usb3_connect(usb3);
2421 		} else if (cur_role == USB_ROLE_HOST)  {
2422 			device_release_driver(host);
2423 			usb3_set_mode(usb3, false);
2424 			if (usb3->driver)
2425 				usb3_connect(usb3);
2426 		}
2427 		usb3_vbus_out(usb3, false);
2428 		break;
2429 	case USB_ROLE_HOST:
2430 		if (usb3->connection_state == USB_ROLE_NONE) {
2431 			if (usb3->driver)
2432 				usb3_disconnect(usb3);
2433 
2434 			usb3->connection_state = USB_ROLE_HOST;
2435 			usb3_set_mode(usb3, true);
2436 			usb3_vbus_out(usb3, true);
2437 			if (device_attach(host) < 0)
2438 				dev_err(dev, "device_attach(host) failed\n");
2439 		} else if (cur_role == USB_ROLE_DEVICE) {
2440 			usb3_disconnect(usb3);
2441 			/* Must set the mode before device_attach of the host */
2442 			usb3_set_mode(usb3, true);
2443 			/* This device_attach() might sleep */
2444 			if (device_attach(host) < 0)
2445 				dev_err(dev, "device_attach(host) failed\n");
2446 		}
2447 		break;
2448 	default:
2449 		break;
2450 	}
2451 }
2452 
2453 static void handle_role_switch_states(struct device *dev,
2454 					    enum usb_role role)
2455 {
2456 	struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
2457 	struct device *host = usb3->host_dev;
2458 	enum usb_role cur_role = renesas_usb3_role_switch_get(usb3->role_sw);
2459 
2460 	if (cur_role == USB_ROLE_HOST && role == USB_ROLE_DEVICE) {
2461 		device_release_driver(host);
2462 		usb3_set_mode(usb3, false);
2463 	} else if (cur_role == USB_ROLE_DEVICE && role == USB_ROLE_HOST) {
2464 		/* Must set the mode before device_attach of the host */
2465 		usb3_set_mode(usb3, true);
2466 		/* This device_attach() might sleep */
2467 		if (device_attach(host) < 0)
2468 			dev_err(dev, "device_attach(host) failed\n");
2469 	}
2470 }
2471 
2472 static int renesas_usb3_role_switch_set(struct usb_role_switch *sw,
2473 					enum usb_role role)
2474 {
2475 	struct renesas_usb3 *usb3 = usb_role_switch_get_drvdata(sw);
2476 
2477 	pm_runtime_get_sync(usb3_to_dev(usb3));
2478 
2479 	if (usb3->role_sw_by_connector)
2480 		handle_ext_role_switch_states(usb3_to_dev(usb3), role);
2481 	else
2482 		handle_role_switch_states(usb3_to_dev(usb3), role);
2483 
2484 	pm_runtime_put(usb3_to_dev(usb3));
2485 
2486 	return 0;
2487 }
2488 
2489 static ssize_t role_store(struct device *dev, struct device_attribute *attr,
2490 			  const char *buf, size_t count)
2491 {
2492 	struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
2493 	bool new_mode_is_host;
2494 
2495 	if (!usb3->driver)
2496 		return -ENODEV;
2497 
2498 	if (usb3->forced_b_device)
2499 		return -EBUSY;
2500 
2501 	if (sysfs_streq(buf, "host"))
2502 		new_mode_is_host = true;
2503 	else if (sysfs_streq(buf, "peripheral"))
2504 		new_mode_is_host = false;
2505 	else
2506 		return -EINVAL;
2507 
2508 	if (new_mode_is_host == usb3_is_host(usb3))
2509 		return -EINVAL;
2510 
2511 	usb3_mode_config(usb3, new_mode_is_host, usb3_is_a_device(usb3));
2512 
2513 	return count;
2514 }
2515 
2516 static ssize_t role_show(struct device *dev, struct device_attribute *attr,
2517 			 char *buf)
2518 {
2519 	struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
2520 
2521 	if (!usb3->driver)
2522 		return -ENODEV;
2523 
2524 	return sprintf(buf, "%s\n", usb3_is_host(usb3) ? "host" : "peripheral");
2525 }
2526 static DEVICE_ATTR_RW(role);
2527 
2528 static int renesas_usb3_b_device_show(struct seq_file *s, void *unused)
2529 {
2530 	struct renesas_usb3 *usb3 = s->private;
2531 
2532 	seq_printf(s, "%d\n", usb3->forced_b_device);
2533 
2534 	return 0;
2535 }
2536 
2537 static int renesas_usb3_b_device_open(struct inode *inode, struct file *file)
2538 {
2539 	return single_open(file, renesas_usb3_b_device_show, inode->i_private);
2540 }
2541 
2542 static ssize_t renesas_usb3_b_device_write(struct file *file,
2543 					   const char __user *ubuf,
2544 					   size_t count, loff_t *ppos)
2545 {
2546 	struct seq_file *s = file->private_data;
2547 	struct renesas_usb3 *usb3 = s->private;
2548 	char buf[32];
2549 
2550 	if (!usb3->driver)
2551 		return -ENODEV;
2552 
2553 	if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
2554 		return -EFAULT;
2555 
2556 	usb3->start_to_connect = false;
2557 	if (usb3->workaround_for_vbus && usb3->forced_b_device &&
2558 	    !strncmp(buf, "2", 1))
2559 		usb3->start_to_connect = true;
2560 	else if (!strncmp(buf, "1", 1))
2561 		usb3->forced_b_device = true;
2562 	else
2563 		usb3->forced_b_device = false;
2564 
2565 	if (usb3->workaround_for_vbus)
2566 		usb3_disconnect(usb3);
2567 
2568 	/* Let this driver call usb3_connect() if needed */
2569 	usb3_check_id(usb3);
2570 
2571 	return count;
2572 }
2573 
2574 static const struct file_operations renesas_usb3_b_device_fops = {
2575 	.open = renesas_usb3_b_device_open,
2576 	.write = renesas_usb3_b_device_write,
2577 	.read = seq_read,
2578 	.llseek = seq_lseek,
2579 	.release = single_release,
2580 };
2581 
2582 static void renesas_usb3_debugfs_init(struct renesas_usb3 *usb3,
2583 				      struct device *dev)
2584 {
2585 	usb3->dentry = debugfs_create_dir(dev_name(dev), usb_debug_root);
2586 
2587 	debugfs_create_file("b_device", 0644, usb3->dentry, usb3,
2588 			    &renesas_usb3_b_device_fops);
2589 }
2590 
2591 /*------- platform_driver ------------------------------------------------*/
2592 static int renesas_usb3_remove(struct platform_device *pdev)
2593 {
2594 	struct renesas_usb3 *usb3 = platform_get_drvdata(pdev);
2595 
2596 	debugfs_remove_recursive(usb3->dentry);
2597 	device_remove_file(&pdev->dev, &dev_attr_role);
2598 
2599 	usb_role_switch_unregister(usb3->role_sw);
2600 
2601 	usb_del_gadget_udc(&usb3->gadget);
2602 	reset_control_assert(usb3->usbp_rstc);
2603 	reset_control_assert(usb3->drd_rstc);
2604 	renesas_usb3_dma_free_prd(usb3, &pdev->dev);
2605 
2606 	__renesas_usb3_ep_free_request(usb3->ep0_req);
2607 	pm_runtime_disable(&pdev->dev);
2608 
2609 	return 0;
2610 }
2611 
2612 static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
2613 				const struct renesas_usb3_priv *priv)
2614 {
2615 	struct renesas_usb3_ep *usb3_ep;
2616 	int i;
2617 
2618 	/* calculate num_usb3_eps from renesas_usb3_priv */
2619 	usb3->num_usb3_eps = priv->ramsize_per_ramif * priv->num_ramif * 2 /
2620 			     priv->ramsize_per_pipe + 1;
2621 
2622 	if (usb3->num_usb3_eps > USB3_MAX_NUM_PIPES(usb3))
2623 		usb3->num_usb3_eps = USB3_MAX_NUM_PIPES(usb3);
2624 
2625 	usb3->usb3_ep = devm_kcalloc(dev,
2626 				     usb3->num_usb3_eps, sizeof(*usb3_ep),
2627 				     GFP_KERNEL);
2628 	if (!usb3->usb3_ep)
2629 		return -ENOMEM;
2630 
2631 	dev_dbg(dev, "%s: num_usb3_eps = %d\n", __func__, usb3->num_usb3_eps);
2632 	/*
2633 	 * This driver prepares pipes as follows:
2634 	 *  - odd pipes = IN pipe
2635 	 *  - even pipes = OUT pipe (except pipe 0)
2636 	 */
2637 	usb3_for_each_ep(usb3_ep, usb3, i) {
2638 		snprintf(usb3_ep->ep_name, sizeof(usb3_ep->ep_name), "ep%d", i);
2639 		usb3_ep->usb3 = usb3;
2640 		usb3_ep->num = i;
2641 		usb3_ep->ep.name = usb3_ep->ep_name;
2642 		usb3_ep->ep.ops = &renesas_usb3_ep_ops;
2643 		INIT_LIST_HEAD(&usb3_ep->queue);
2644 		INIT_LIST_HEAD(&usb3_ep->ep.ep_list);
2645 		if (!i) {
2646 			/* for control pipe */
2647 			usb3->gadget.ep0 = &usb3_ep->ep;
2648 			usb_ep_set_maxpacket_limit(&usb3_ep->ep,
2649 						USB3_EP0_SS_MAX_PACKET_SIZE);
2650 			usb3_ep->ep.caps.type_control = true;
2651 			usb3_ep->ep.caps.dir_in = true;
2652 			usb3_ep->ep.caps.dir_out = true;
2653 			continue;
2654 		}
2655 
2656 		/* for bulk or interrupt pipe */
2657 		usb_ep_set_maxpacket_limit(&usb3_ep->ep, ~0);
2658 		list_add_tail(&usb3_ep->ep.ep_list, &usb3->gadget.ep_list);
2659 		usb3_ep->ep.caps.type_bulk = true;
2660 		usb3_ep->ep.caps.type_int = true;
2661 		if (i & 1)
2662 			usb3_ep->ep.caps.dir_in = true;
2663 		else
2664 			usb3_ep->ep.caps.dir_out = true;
2665 	}
2666 
2667 	return 0;
2668 }
2669 
2670 static void renesas_usb3_init_ram(struct renesas_usb3 *usb3, struct device *dev,
2671 				  const struct renesas_usb3_priv *priv)
2672 {
2673 	struct renesas_usb3_ep *usb3_ep;
2674 	int i;
2675 	u32 ramif[2], basead[2];	/* index 0 = for IN pipes */
2676 	u32 *cur_ramif, *cur_basead;
2677 	u32 val;
2678 
2679 	memset(ramif, 0, sizeof(ramif));
2680 	memset(basead, 0, sizeof(basead));
2681 
2682 	/*
2683 	 * This driver prepares pipes as follows:
2684 	 *  - all pipes = the same size as "ramsize_per_pipe"
2685 	 * Please refer to the "Method of Specifying RAM Mapping"
2686 	 */
2687 	usb3_for_each_ep(usb3_ep, usb3, i) {
2688 		if (!i)
2689 			continue;	/* out of scope if ep num = 0 */
2690 		if (usb3_ep->ep.caps.dir_in) {
2691 			cur_ramif = &ramif[0];
2692 			cur_basead = &basead[0];
2693 		} else {
2694 			cur_ramif = &ramif[1];
2695 			cur_basead = &basead[1];
2696 		}
2697 
2698 		if (*cur_basead > priv->ramsize_per_ramif)
2699 			continue;	/* out of memory for IN or OUT pipe */
2700 
2701 		/* calculate rammap_val */
2702 		val = PN_RAMMAP_RAMIF(*cur_ramif);
2703 		val |= usb3_calc_ramarea(priv->ramsize_per_pipe);
2704 		val |= PN_RAMMAP_BASEAD(*cur_basead);
2705 		usb3_ep->rammap_val = val;
2706 
2707 		dev_dbg(dev, "ep%2d: val = %08x, ramif = %d, base = %x\n",
2708 			i, val, *cur_ramif, *cur_basead);
2709 
2710 		/* update current ramif */
2711 		if (*cur_ramif + 1 == priv->num_ramif) {
2712 			*cur_ramif = 0;
2713 			*cur_basead += priv->ramsize_per_pipe;
2714 		} else {
2715 			(*cur_ramif)++;
2716 		}
2717 	}
2718 }
2719 
2720 static const struct renesas_usb3_priv renesas_usb3_priv_r8a7795_es1 = {
2721 	.ramsize_per_ramif = SZ_16K,
2722 	.num_ramif = 2,
2723 	.ramsize_per_pipe = SZ_4K,
2724 	.workaround_for_vbus = true,
2725 };
2726 
2727 static const struct renesas_usb3_priv renesas_usb3_priv_gen3 = {
2728 	.ramsize_per_ramif = SZ_16K,
2729 	.num_ramif = 4,
2730 	.ramsize_per_pipe = SZ_4K,
2731 };
2732 
2733 static const struct renesas_usb3_priv renesas_usb3_priv_r8a77990 = {
2734 	.ramsize_per_ramif = SZ_16K,
2735 	.num_ramif = 4,
2736 	.ramsize_per_pipe = SZ_4K,
2737 	.workaround_for_vbus = true,
2738 };
2739 
2740 static const struct renesas_usb3_priv renesas_usb3_priv_rzv2m = {
2741 	.ramsize_per_ramif = SZ_16K,
2742 	.num_ramif = 1,
2743 	.ramsize_per_pipe = SZ_4K,
2744 	.is_rzv2m = true,
2745 };
2746 
2747 static const struct of_device_id usb3_of_match[] = {
2748 	{
2749 		.compatible = "renesas,r8a774c0-usb3-peri",
2750 		.data = &renesas_usb3_priv_r8a77990,
2751 	}, {
2752 		.compatible = "renesas,r8a7795-usb3-peri",
2753 		.data = &renesas_usb3_priv_gen3,
2754 	}, {
2755 		.compatible = "renesas,r8a77990-usb3-peri",
2756 		.data = &renesas_usb3_priv_r8a77990,
2757 	}, {
2758 		.compatible = "renesas,rzv2m-usb3-peri",
2759 		.data = &renesas_usb3_priv_rzv2m,
2760 	}, {
2761 		.compatible = "renesas,rcar-gen3-usb3-peri",
2762 		.data = &renesas_usb3_priv_gen3,
2763 	},
2764 	{ },
2765 };
2766 MODULE_DEVICE_TABLE(of, usb3_of_match);
2767 
2768 static const struct soc_device_attribute renesas_usb3_quirks_match[] = {
2769 	{
2770 		.soc_id = "r8a7795", .revision = "ES1.*",
2771 		.data = &renesas_usb3_priv_r8a7795_es1,
2772 	},
2773 	{ /* sentinel */ }
2774 };
2775 
2776 static const unsigned int renesas_usb3_cable[] = {
2777 	EXTCON_USB,
2778 	EXTCON_USB_HOST,
2779 	EXTCON_NONE,
2780 };
2781 
2782 static struct usb_role_switch_desc renesas_usb3_role_switch_desc = {
2783 	.set = renesas_usb3_role_switch_set,
2784 	.get = renesas_usb3_role_switch_get,
2785 	.allow_userspace_control = true,
2786 };
2787 
2788 static int renesas_usb3_probe(struct platform_device *pdev)
2789 {
2790 	struct renesas_usb3 *usb3;
2791 	int irq, drd_irq, ret;
2792 	const struct renesas_usb3_priv *priv;
2793 	const struct soc_device_attribute *attr;
2794 
2795 	attr = soc_device_match(renesas_usb3_quirks_match);
2796 	if (attr)
2797 		priv = attr->data;
2798 	else
2799 		priv = of_device_get_match_data(&pdev->dev);
2800 
2801 	irq = platform_get_irq(pdev, 0);
2802 	if (irq < 0)
2803 		return irq;
2804 
2805 	if (priv->is_rzv2m) {
2806 		drd_irq = platform_get_irq_byname(pdev, "drd");
2807 		if (drd_irq < 0)
2808 			return drd_irq;
2809 	}
2810 
2811 	usb3 = devm_kzalloc(&pdev->dev, sizeof(*usb3), GFP_KERNEL);
2812 	if (!usb3)
2813 		return -ENOMEM;
2814 
2815 	usb3->is_rzv2m = priv->is_rzv2m;
2816 
2817 	usb3->reg = devm_platform_ioremap_resource(pdev, 0);
2818 	if (IS_ERR(usb3->reg))
2819 		return PTR_ERR(usb3->reg);
2820 
2821 	platform_set_drvdata(pdev, usb3);
2822 	spin_lock_init(&usb3->lock);
2823 
2824 	usb3->gadget.ops = &renesas_usb3_gadget_ops;
2825 	usb3->gadget.name = udc_name;
2826 	usb3->gadget.max_speed = USB_SPEED_SUPER;
2827 	INIT_LIST_HEAD(&usb3->gadget.ep_list);
2828 	ret = renesas_usb3_init_ep(usb3, &pdev->dev, priv);
2829 	if (ret < 0)
2830 		return ret;
2831 	renesas_usb3_init_ram(usb3, &pdev->dev, priv);
2832 
2833 	ret = devm_request_irq(&pdev->dev, irq, renesas_usb3_irq, 0,
2834 			       dev_name(&pdev->dev), usb3);
2835 	if (ret < 0)
2836 		return ret;
2837 
2838 	if (usb3->is_rzv2m) {
2839 		ret = devm_request_irq(&pdev->dev, drd_irq,
2840 				       renesas_usb3_otg_irq, 0,
2841 				       dev_name(&pdev->dev), usb3);
2842 		if (ret < 0)
2843 			return ret;
2844 	}
2845 
2846 	INIT_WORK(&usb3->extcon_work, renesas_usb3_extcon_work);
2847 	usb3->extcon = devm_extcon_dev_allocate(&pdev->dev, renesas_usb3_cable);
2848 	if (IS_ERR(usb3->extcon))
2849 		return PTR_ERR(usb3->extcon);
2850 
2851 	ret = devm_extcon_dev_register(&pdev->dev, usb3->extcon);
2852 	if (ret < 0) {
2853 		dev_err(&pdev->dev, "Failed to register extcon\n");
2854 		return ret;
2855 	}
2856 
2857 	/* for ep0 handling */
2858 	usb3->ep0_req = __renesas_usb3_ep_alloc_request(GFP_KERNEL);
2859 	if (!usb3->ep0_req)
2860 		return -ENOMEM;
2861 
2862 	ret = renesas_usb3_dma_alloc_prd(usb3, &pdev->dev);
2863 	if (ret < 0)
2864 		goto err_alloc_prd;
2865 
2866 	/*
2867 	 * This is optional. So, if this driver cannot get a phy,
2868 	 * this driver will not handle a phy anymore.
2869 	 */
2870 	usb3->phy = devm_phy_optional_get(&pdev->dev, "usb");
2871 	if (IS_ERR(usb3->phy)) {
2872 		ret = PTR_ERR(usb3->phy);
2873 		goto err_add_udc;
2874 	}
2875 
2876 	usb3->drd_rstc = devm_reset_control_get_optional_shared(&pdev->dev,
2877 								"drd_reset");
2878 	if (IS_ERR(usb3->drd_rstc)) {
2879 		ret = PTR_ERR(usb3->drd_rstc);
2880 		goto err_add_udc;
2881 	}
2882 
2883 	usb3->usbp_rstc = devm_reset_control_get_optional_shared(&pdev->dev,
2884 								 "aresetn_p");
2885 	if (IS_ERR(usb3->usbp_rstc)) {
2886 		ret = PTR_ERR(usb3->usbp_rstc);
2887 		goto err_add_udc;
2888 	}
2889 
2890 	reset_control_deassert(usb3->drd_rstc);
2891 	reset_control_deassert(usb3->usbp_rstc);
2892 
2893 	pm_runtime_enable(&pdev->dev);
2894 	ret = usb_add_gadget_udc(&pdev->dev, &usb3->gadget);
2895 	if (ret < 0)
2896 		goto err_reset;
2897 
2898 	ret = device_create_file(&pdev->dev, &dev_attr_role);
2899 	if (ret < 0)
2900 		goto err_dev_create;
2901 
2902 	if (device_property_read_bool(&pdev->dev, "usb-role-switch")) {
2903 		usb3->role_sw_by_connector = true;
2904 		renesas_usb3_role_switch_desc.fwnode = dev_fwnode(&pdev->dev);
2905 	}
2906 
2907 	renesas_usb3_role_switch_desc.driver_data = usb3;
2908 
2909 	INIT_WORK(&usb3->role_work, renesas_usb3_role_work);
2910 	usb3->role_sw = usb_role_switch_register(&pdev->dev,
2911 					&renesas_usb3_role_switch_desc);
2912 	if (!IS_ERR(usb3->role_sw)) {
2913 		usb3->host_dev = usb_of_get_companion_dev(&pdev->dev);
2914 		if (!usb3->host_dev) {
2915 			/* If not found, this driver will not use a role sw */
2916 			usb_role_switch_unregister(usb3->role_sw);
2917 			usb3->role_sw = NULL;
2918 		}
2919 	} else {
2920 		usb3->role_sw = NULL;
2921 	}
2922 
2923 	usb3->workaround_for_vbus = priv->workaround_for_vbus;
2924 
2925 	renesas_usb3_debugfs_init(usb3, &pdev->dev);
2926 
2927 	dev_info(&pdev->dev, "probed%s\n", usb3->phy ? " with phy" : "");
2928 
2929 	return 0;
2930 
2931 err_dev_create:
2932 	usb_del_gadget_udc(&usb3->gadget);
2933 
2934 err_reset:
2935 	reset_control_assert(usb3->usbp_rstc);
2936 	reset_control_assert(usb3->drd_rstc);
2937 
2938 err_add_udc:
2939 	renesas_usb3_dma_free_prd(usb3, &pdev->dev);
2940 
2941 err_alloc_prd:
2942 	__renesas_usb3_ep_free_request(usb3->ep0_req);
2943 
2944 	return ret;
2945 }
2946 
2947 #ifdef CONFIG_PM_SLEEP
2948 static int renesas_usb3_suspend(struct device *dev)
2949 {
2950 	struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
2951 
2952 	/* Not started */
2953 	if (!usb3->driver)
2954 		return 0;
2955 
2956 	renesas_usb3_stop_controller(usb3);
2957 	if (usb3->phy)
2958 		phy_exit(usb3->phy);
2959 	pm_runtime_put(dev);
2960 
2961 	return 0;
2962 }
2963 
2964 static int renesas_usb3_resume(struct device *dev)
2965 {
2966 	struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
2967 
2968 	/* Not started */
2969 	if (!usb3->driver)
2970 		return 0;
2971 
2972 	if (usb3->phy)
2973 		phy_init(usb3->phy);
2974 	pm_runtime_get_sync(dev);
2975 	renesas_usb3_init_controller(usb3);
2976 
2977 	return 0;
2978 }
2979 #endif
2980 
2981 static SIMPLE_DEV_PM_OPS(renesas_usb3_pm_ops, renesas_usb3_suspend,
2982 			renesas_usb3_resume);
2983 
2984 static struct platform_driver renesas_usb3_driver = {
2985 	.probe		= renesas_usb3_probe,
2986 	.remove		= renesas_usb3_remove,
2987 	.driver		= {
2988 		.name =	udc_name,
2989 		.pm		= &renesas_usb3_pm_ops,
2990 		.of_match_table = of_match_ptr(usb3_of_match),
2991 	},
2992 };
2993 module_platform_driver(renesas_usb3_driver);
2994 
2995 MODULE_DESCRIPTION("Renesas USB3.0 Peripheral driver");
2996 MODULE_LICENSE("GPL v2");
2997 MODULE_AUTHOR("Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>");
2998 MODULE_ALIAS("platform:renesas_usb3");
2999