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