blob: 2197a50ed2ab814967df57acc73af438f760dda9 [file] [log] [blame]
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001/*
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/delay.h>
12#include <linux/err.h>
13#include <linux/interrupt.h>
14#include <linux/io.h>
15#include <linux/module.h>
16#include <linux/of_device.h>
17#include <linux/platform_device.h>
18#include <linux/pm_runtime.h>
19#include <linux/sizes.h>
20#include <linux/slab.h>
21#include <linux/usb/ch9.h>
22#include <linux/usb/gadget.h>
23
24/* register definitions */
25#define USB3_AXI_INT_STA 0x008
26#define USB3_AXI_INT_ENA 0x00c
27#define USB3_DMA_INT_STA 0x010
28#define USB3_DMA_INT_ENA 0x014
29#define USB3_USB_COM_CON 0x200
30#define USB3_USB20_CON 0x204
31#define USB3_USB30_CON 0x208
32#define USB3_USB_STA 0x210
33#define USB3_DRD_CON 0x218
34#define USB3_USB_INT_STA_1 0x220
35#define USB3_USB_INT_STA_2 0x224
36#define USB3_USB_INT_ENA_1 0x228
37#define USB3_USB_INT_ENA_2 0x22c
38#define USB3_STUP_DAT_0 0x230
39#define USB3_STUP_DAT_1 0x234
40#define USB3_P0_MOD 0x280
41#define USB3_P0_CON 0x288
42#define USB3_P0_STA 0x28c
43#define USB3_P0_INT_STA 0x290
44#define USB3_P0_INT_ENA 0x294
45#define USB3_P0_LNG 0x2a0
46#define USB3_P0_READ 0x2a4
47#define USB3_P0_WRITE 0x2a8
48#define USB3_PIPE_COM 0x2b0
49#define USB3_PN_MOD 0x2c0
50#define USB3_PN_RAMMAP 0x2c4
51#define USB3_PN_CON 0x2c8
52#define USB3_PN_STA 0x2cc
53#define USB3_PN_INT_STA 0x2d0
54#define USB3_PN_INT_ENA 0x2d4
55#define USB3_PN_LNG 0x2e0
56#define USB3_PN_READ 0x2e4
57#define USB3_PN_WRITE 0x2e8
58#define USB3_SSIFCMD 0x340
59
60/* AXI_INT_ENA and AXI_INT_STA */
61#define AXI_INT_DMAINT BIT(31)
62#define AXI_INT_EPCINT BIT(30)
63
64/* LCLKSEL */
65#define LCLKSEL_LSEL BIT(18)
66
67/* USB_COM_CON */
68#define USB_COM_CON_CONF BIT(24)
69#define USB_COM_CON_SPD_MODE BIT(17)
70#define USB_COM_CON_EP0_EN BIT(16)
71#define USB_COM_CON_DEV_ADDR_SHIFT 8
72#define USB_COM_CON_DEV_ADDR_MASK GENMASK(14, USB_COM_CON_DEV_ADDR_SHIFT)
73#define USB_COM_CON_DEV_ADDR(n) (((n) << USB_COM_CON_DEV_ADDR_SHIFT) & \
74 USB_COM_CON_DEV_ADDR_MASK)
75#define USB_COM_CON_RX_DETECTION BIT(1)
76#define USB_COM_CON_PIPE_CLR BIT(0)
77
78/* USB20_CON */
79#define USB20_CON_B2_PUE BIT(31)
80#define USB20_CON_B2_SUSPEND BIT(24)
81#define USB20_CON_B2_CONNECT BIT(17)
82#define USB20_CON_B2_TSTMOD_SHIFT 8
83#define USB20_CON_B2_TSTMOD_MASK GENMASK(10, USB20_CON_B2_TSTMOD_SHIFT)
84#define USB20_CON_B2_TSTMOD(n) (((n) << USB20_CON_B2_TSTMOD_SHIFT) & \
85 USB20_CON_B2_TSTMOD_MASK)
86#define USB20_CON_B2_TSTMOD_EN BIT(0)
87
88/* USB30_CON */
89#define USB30_CON_POW_SEL_SHIFT 24
90#define USB30_CON_POW_SEL_MASK GENMASK(26, USB30_CON_POW_SEL_SHIFT)
91#define USB30_CON_POW_SEL_IN_U3 BIT(26)
92#define USB30_CON_POW_SEL_IN_DISCON 0
93#define USB30_CON_POW_SEL_P2_TO_P0 BIT(25)
94#define USB30_CON_POW_SEL_P0_TO_P3 BIT(24)
95#define USB30_CON_POW_SEL_P0_TO_P2 0
96#define USB30_CON_B3_PLLWAKE BIT(23)
97#define USB30_CON_B3_CONNECT BIT(17)
98#define USB30_CON_B3_HOTRST_CMP BIT(1)
99
100/* USB_STA */
101#define USB_STA_SPEED_MASK (BIT(2) | BIT(1))
102#define USB_STA_SPEED_HS BIT(2)
103#define USB_STA_SPEED_FS BIT(1)
104#define USB_STA_SPEED_SS 0
105#define USB_STA_VBUS_STA BIT(0)
106
107/* DRD_CON */
108#define DRD_CON_PERI_CON BIT(24)
Yoshihiro Shimodab2f1eaa2016-08-23 21:11:13 +0900109#define DRD_CON_VBOUT BIT(0)
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900110
111/* USB_INT_ENA_1 and USB_INT_STA_1 */
112#define USB_INT_1_B3_PLLWKUP BIT(31)
113#define USB_INT_1_B3_LUPSUCS BIT(30)
114#define USB_INT_1_B3_DISABLE BIT(27)
115#define USB_INT_1_B3_WRMRST BIT(21)
116#define USB_INT_1_B3_HOTRST BIT(20)
117#define USB_INT_1_B2_USBRST BIT(12)
118#define USB_INT_1_B2_L1SPND BIT(11)
119#define USB_INT_1_B2_SPND BIT(9)
120#define USB_INT_1_B2_RSUM BIT(8)
121#define USB_INT_1_SPEED BIT(1)
122#define USB_INT_1_VBUS_CNG BIT(0)
123
124/* USB_INT_ENA_2 and USB_INT_STA_2 */
125#define USB_INT_2_PIPE(n) BIT(n)
126
127/* P0_MOD */
128#define P0_MOD_DIR BIT(6)
129
130/* P0_CON and PN_CON */
131#define PX_CON_BYTE_EN_MASK (BIT(10) | BIT(9))
132#define PX_CON_BYTE_EN_SHIFT 9
133#define PX_CON_BYTE_EN_BYTES(n) (((n) << PX_CON_BYTE_EN_SHIFT) & \
134 PX_CON_BYTE_EN_MASK)
135#define PX_CON_SEND BIT(8)
136
137/* P0_CON */
138#define P0_CON_ST_RES_MASK (BIT(27) | BIT(26))
139#define P0_CON_ST_RES_FORCE_STALL BIT(27)
140#define P0_CON_ST_RES_NORMAL BIT(26)
141#define P0_CON_ST_RES_FORCE_NRDY 0
142#define P0_CON_OT_RES_MASK (BIT(25) | BIT(24))
143#define P0_CON_OT_RES_FORCE_STALL BIT(25)
144#define P0_CON_OT_RES_NORMAL BIT(24)
145#define P0_CON_OT_RES_FORCE_NRDY 0
146#define P0_CON_IN_RES_MASK (BIT(17) | BIT(16))
147#define P0_CON_IN_RES_FORCE_STALL BIT(17)
148#define P0_CON_IN_RES_NORMAL BIT(16)
149#define P0_CON_IN_RES_FORCE_NRDY 0
150#define P0_CON_RES_WEN BIT(7)
151#define P0_CON_BCLR BIT(1)
152
153/* P0_STA and PN_STA */
154#define PX_STA_BUFSTS BIT(0)
155
156/* P0_INT_ENA and P0_INT_STA */
157#define P0_INT_STSED BIT(18)
158#define P0_INT_STSST BIT(17)
159#define P0_INT_SETUP BIT(16)
160#define P0_INT_RCVNL BIT(8)
161#define P0_INT_ERDY BIT(7)
162#define P0_INT_FLOW BIT(6)
163#define P0_INT_STALL BIT(2)
164#define P0_INT_NRDY BIT(1)
165#define P0_INT_BFRDY BIT(0)
166#define P0_INT_ALL_BITS (P0_INT_STSED | P0_INT_SETUP | P0_INT_BFRDY)
167
168/* PN_MOD */
169#define PN_MOD_DIR BIT(6)
170#define PN_MOD_TYPE_SHIFT 4
171#define PN_MOD_TYPE_MASK GENMASK(5, PN_MOD_TYPE_SHIFT)
172#define PN_MOD_TYPE(n) (((n) << PN_MOD_TYPE_SHIFT) & \
173 PN_MOD_TYPE_MASK)
174#define PN_MOD_EPNUM_MASK GENMASK(3, 0)
175#define PN_MOD_EPNUM(n) ((n) & PN_MOD_EPNUM_MASK)
176
177/* PN_RAMMAP */
178#define PN_RAMMAP_RAMAREA_SHIFT 29
179#define PN_RAMMAP_RAMAREA_MASK GENMASK(31, PN_RAMMAP_RAMAREA_SHIFT)
180#define PN_RAMMAP_RAMAREA_16KB BIT(31)
181#define PN_RAMMAP_RAMAREA_8KB (BIT(30) | BIT(29))
182#define PN_RAMMAP_RAMAREA_4KB BIT(30)
183#define PN_RAMMAP_RAMAREA_2KB BIT(29)
184#define PN_RAMMAP_RAMAREA_1KB 0
185#define PN_RAMMAP_MPKT_SHIFT 16
186#define PN_RAMMAP_MPKT_MASK GENMASK(26, PN_RAMMAP_MPKT_SHIFT)
187#define PN_RAMMAP_MPKT(n) (((n) << PN_RAMMAP_MPKT_SHIFT) & \
188 PN_RAMMAP_MPKT_MASK)
189#define PN_RAMMAP_RAMIF_SHIFT 14
190#define PN_RAMMAP_RAMIF_MASK GENMASK(15, PN_RAMMAP_RAMIF_SHIFT)
191#define PN_RAMMAP_RAMIF(n) (((n) << PN_RAMMAP_RAMIF_SHIFT) & \
192 PN_RAMMAP_RAMIF_MASK)
193#define PN_RAMMAP_BASEAD_MASK GENMASK(13, 0)
194#define PN_RAMMAP_BASEAD(offs) (((offs) >> 3) & PN_RAMMAP_BASEAD_MASK)
195#define PN_RAMMAP_DATA(area, ramif, basead) ((PN_RAMMAP_##area) | \
196 (PN_RAMMAP_RAMIF(ramif)) | \
197 (PN_RAMMAP_BASEAD(basead)))
198
199/* PN_CON */
200#define PN_CON_EN BIT(31)
201#define PN_CON_DATAIF_EN BIT(30)
202#define PN_CON_RES_MASK (BIT(17) | BIT(16))
203#define PN_CON_RES_FORCE_STALL BIT(17)
204#define PN_CON_RES_NORMAL BIT(16)
205#define PN_CON_RES_FORCE_NRDY 0
206#define PN_CON_LAST BIT(11)
207#define PN_CON_RES_WEN BIT(7)
208#define PN_CON_CLR BIT(0)
209
210/* PN_INT_STA and PN_INT_ENA */
211#define PN_INT_LSTTR BIT(4)
212#define PN_INT_BFRDY BIT(0)
213
214/* USB3_SSIFCMD */
215#define SSIFCMD_URES_U2 BIT(9)
216#define SSIFCMD_URES_U1 BIT(8)
217#define SSIFCMD_UDIR_U2 BIT(7)
218#define SSIFCMD_UDIR_U1 BIT(6)
219#define SSIFCMD_UREQ_U2 BIT(5)
220#define SSIFCMD_UREQ_U1 BIT(4)
221
222#define USB3_EP0_SS_MAX_PACKET_SIZE 512
223#define USB3_EP0_HSFS_MAX_PACKET_SIZE 64
224#define USB3_EP0_BUF_SIZE 8
Yoshihiro Shimodafbe9a142017-11-13 17:59:18 +0900225#define USB3_MAX_NUM_PIPES 6 /* This includes PIPE 0 */
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900226#define USB3_WAIT_US 3
227
228struct renesas_usb3;
229struct renesas_usb3_request {
230 struct usb_request req;
231 struct list_head queue;
232};
233
234#define USB3_EP_NAME_SIZE 8
235struct renesas_usb3_ep {
236 struct usb_ep ep;
237 struct renesas_usb3 *usb3;
238 int num;
239 char ep_name[USB3_EP_NAME_SIZE];
240 struct list_head queue;
241 u32 rammap_val;
242 bool dir_in;
243 bool halt;
244 bool wedge;
245 bool started;
246};
247
248struct renesas_usb3_priv {
249 int ramsize_per_ramif; /* unit = bytes */
250 int num_ramif;
251 int ramsize_per_pipe; /* unit = bytes */
252 bool workaround_for_vbus; /* if true, don't check vbus signal */
253};
254
255struct renesas_usb3 {
256 void __iomem *reg;
257
258 struct usb_gadget gadget;
259 struct usb_gadget_driver *driver;
260
261 struct renesas_usb3_ep *usb3_ep;
262 int num_usb3_eps;
263
264 spinlock_t lock;
265 int disabled_count;
266
267 struct usb_request *ep0_req;
268 u16 test_mode;
269 u8 ep0_buf[USB3_EP0_BUF_SIZE];
270 bool softconnect;
271 bool workaround_for_vbus;
272};
273
274#define gadget_to_renesas_usb3(_gadget) \
275 container_of(_gadget, struct renesas_usb3, gadget)
276#define renesas_usb3_to_gadget(renesas_usb3) (&renesas_usb3->gadget)
277#define usb3_to_dev(_usb3) (_usb3->gadget.dev.parent)
278
279#define usb_ep_to_usb3_ep(_ep) container_of(_ep, struct renesas_usb3_ep, ep)
280#define usb3_ep_to_usb3(_usb3_ep) (_usb3_ep->usb3)
281#define usb_req_to_usb3_req(_req) container_of(_req, \
282 struct renesas_usb3_request, req)
283
284#define usb3_get_ep(usb3, n) ((usb3)->usb3_ep + (n))
285#define usb3_for_each_ep(usb3_ep, usb3, i) \
286 for ((i) = 0, usb3_ep = usb3_get_ep(usb3, (i)); \
287 (i) < (usb3)->num_usb3_eps; \
288 (i)++, usb3_ep = usb3_get_ep(usb3, (i)))
289
290static const char udc_name[] = "renesas_usb3";
291
292static void usb3_write(struct renesas_usb3 *usb3, u32 data, u32 offs)
293{
294 iowrite32(data, usb3->reg + offs);
295}
296
297static u32 usb3_read(struct renesas_usb3 *usb3, u32 offs)
298{
299 return ioread32(usb3->reg + offs);
300}
301
302static void usb3_set_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
303{
304 u32 val = usb3_read(usb3, offs);
305
306 val |= bits;
307 usb3_write(usb3, val, offs);
308}
309
310static void usb3_clear_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
311{
312 u32 val = usb3_read(usb3, offs);
313
314 val &= ~bits;
315 usb3_write(usb3, val, offs);
316}
317
318static int usb3_wait(struct renesas_usb3 *usb3, u32 reg, u32 mask,
319 u32 expected)
320{
321 int i;
322
323 for (i = 0; i < USB3_WAIT_US; i++) {
324 if ((usb3_read(usb3, reg) & mask) == expected)
325 return 0;
326 udelay(1);
327 }
328
329 dev_dbg(usb3_to_dev(usb3), "%s: timed out (%8x, %08x, %08x)\n",
330 __func__, reg, mask, expected);
331
332 return -EBUSY;
333}
334
335static void usb3_enable_irq_1(struct renesas_usb3 *usb3, u32 bits)
336{
337 usb3_set_bit(usb3, bits, USB3_USB_INT_ENA_1);
338}
339
340static void usb3_disable_irq_1(struct renesas_usb3 *usb3, u32 bits)
341{
342 usb3_clear_bit(usb3, bits, USB3_USB_INT_ENA_1);
343}
344
345static void usb3_enable_pipe_irq(struct renesas_usb3 *usb3, int num)
346{
347 usb3_set_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
348}
349
350static void usb3_disable_pipe_irq(struct renesas_usb3 *usb3, int num)
351{
352 usb3_clear_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
353}
354
355static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)
356{
357 /* Set AXI_INT */
358 usb3_write(usb3, ~0, USB3_DMA_INT_STA);
359 usb3_write(usb3, 0, USB3_DMA_INT_ENA);
360 usb3_set_bit(usb3, AXI_INT_DMAINT | AXI_INT_EPCINT, USB3_AXI_INT_ENA);
361}
362
363static void usb3_init_epc_registers(struct renesas_usb3 *usb3)
364{
365 /* FIXME: How to change host / peripheral mode as well? */
366 usb3_set_bit(usb3, DRD_CON_PERI_CON, USB3_DRD_CON);
Yoshihiro Shimodab2f1eaa2016-08-23 21:11:13 +0900367 usb3_clear_bit(usb3, DRD_CON_VBOUT, USB3_DRD_CON);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900368
369 usb3_write(usb3, ~0, USB3_USB_INT_STA_1);
370 usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
371}
372
373static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3)
374{
375 if (!(usb3_read(usb3, USB3_USB20_CON) & USB20_CON_B2_SUSPEND))
376 return true; /* already waked it up */
377
378 usb3_clear_bit(usb3, USB20_CON_B2_SUSPEND, USB3_USB20_CON);
379 usb3_enable_irq_1(usb3, USB_INT_1_B2_RSUM);
380
381 return false;
382}
383
384static void usb3_usb2_pullup(struct renesas_usb3 *usb3, int pullup)
385{
386 u32 bits = USB20_CON_B2_PUE | USB20_CON_B2_CONNECT;
387
388 if (usb3->softconnect && pullup)
389 usb3_set_bit(usb3, bits, USB3_USB20_CON);
390 else
391 usb3_clear_bit(usb3, bits, USB3_USB20_CON);
392}
393
394static void usb3_set_test_mode(struct renesas_usb3 *usb3)
395{
396 u32 val = usb3_read(usb3, USB3_USB20_CON);
397
398 val &= ~USB20_CON_B2_TSTMOD_MASK;
399 val |= USB20_CON_B2_TSTMOD(usb3->test_mode);
400 usb3_write(usb3, val | USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
401 if (!usb3->test_mode)
402 usb3_clear_bit(usb3, USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
403}
404
405static void usb3_start_usb2_connection(struct renesas_usb3 *usb3)
406{
407 usb3->disabled_count++;
408 usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
409 usb3_set_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
410 usb3_usb2_pullup(usb3, 1);
411}
412
413static int usb3_is_usb3_phy_in_u3(struct renesas_usb3 *usb3)
414{
415 return usb3_read(usb3, USB3_USB30_CON) & USB30_CON_POW_SEL_IN_U3;
416}
417
418static bool usb3_wakeup_usb3_phy(struct renesas_usb3 *usb3)
419{
420 if (!usb3_is_usb3_phy_in_u3(usb3))
421 return true; /* already waked it up */
422
423 usb3_set_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
424 usb3_enable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
425
426 return false;
427}
428
429static u16 usb3_feature_get_un_enabled(struct renesas_usb3 *usb3)
430{
431 u32 mask_u2 = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
432 u32 mask_u1 = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
433 u32 val = usb3_read(usb3, USB3_SSIFCMD);
434 u16 ret = 0;
435
436 /* Enables {U2,U1} if the bits of UDIR and UREQ are set to 0 */
437 if (!(val & mask_u2))
438 ret |= 1 << USB_DEV_STAT_U2_ENABLED;
439 if (!(val & mask_u1))
440 ret |= 1 << USB_DEV_STAT_U1_ENABLED;
441
442 return ret;
443}
444
445static void usb3_feature_u2_enable(struct renesas_usb3 *usb3, bool enable)
446{
447 u32 bits = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
448
449 /* Enables U2 if the bits of UDIR and UREQ are set to 0 */
450 if (enable)
451 usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
452 else
453 usb3_set_bit(usb3, bits, USB3_SSIFCMD);
454}
455
456static void usb3_feature_u1_enable(struct renesas_usb3 *usb3, bool enable)
457{
458 u32 bits = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
459
460 /* Enables U1 if the bits of UDIR and UREQ are set to 0 */
461 if (enable)
462 usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
463 else
464 usb3_set_bit(usb3, bits, USB3_SSIFCMD);
465}
466
467static void usb3_start_operation_for_usb3(struct renesas_usb3 *usb3)
468{
469 usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
470 usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
471 usb3_set_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
472}
473
474static void usb3_start_usb3_connection(struct renesas_usb3 *usb3)
475{
476 usb3_start_operation_for_usb3(usb3);
477 usb3_set_bit(usb3, USB_COM_CON_RX_DETECTION, USB3_USB_COM_CON);
478
479 usb3_enable_irq_1(usb3, USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
480 USB_INT_1_SPEED);
481}
482
483static void usb3_stop_usb3_connection(struct renesas_usb3 *usb3)
484{
485 usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
486}
487
488static void usb3_transition_to_default_state(struct renesas_usb3 *usb3,
489 bool is_usb3)
490{
491 usb3_set_bit(usb3, USB_INT_2_PIPE(0), USB3_USB_INT_ENA_2);
492 usb3_write(usb3, P0_INT_ALL_BITS, USB3_P0_INT_STA);
493 usb3_set_bit(usb3, P0_INT_ALL_BITS, USB3_P0_INT_ENA);
494
495 if (is_usb3)
496 usb3_enable_irq_1(usb3, USB_INT_1_B3_WRMRST |
497 USB_INT_1_B3_HOTRST);
498 else
499 usb3_enable_irq_1(usb3, USB_INT_1_B2_SPND |
500 USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
501}
502
503static void usb3_connect(struct renesas_usb3 *usb3)
504{
505 if (usb3_wakeup_usb3_phy(usb3))
506 usb3_start_usb3_connection(usb3);
507}
508
509static void usb3_reset_epc(struct renesas_usb3 *usb3)
510{
511 usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
512 usb3_clear_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
513 usb3_set_bit(usb3, USB_COM_CON_PIPE_CLR, USB3_USB_COM_CON);
514 usb3->test_mode = 0;
515 usb3_set_test_mode(usb3);
516}
517
518static void usb3_disconnect(struct renesas_usb3 *usb3)
519{
520 usb3->disabled_count = 0;
521 usb3_usb2_pullup(usb3, 0);
522 usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
523 usb3_reset_epc(usb3);
524
525 if (usb3->driver)
526 usb3->driver->disconnect(&usb3->gadget);
527}
528
529static void usb3_check_vbus(struct renesas_usb3 *usb3)
530{
531 if (usb3->workaround_for_vbus) {
532 usb3_connect(usb3);
533 } else {
534 if (usb3_read(usb3, USB3_USB_STA) & USB_STA_VBUS_STA)
535 usb3_connect(usb3);
536 else
537 usb3_disconnect(usb3);
538 }
539}
540
541static void renesas_usb3_init_controller(struct renesas_usb3 *usb3)
542{
543 usb3_init_axi_bridge(usb3);
544 usb3_init_epc_registers(usb3);
545
546 usb3_check_vbus(usb3);
547}
548
549static void renesas_usb3_stop_controller(struct renesas_usb3 *usb3)
550{
551 usb3_disconnect(usb3);
552 usb3_write(usb3, 0, USB3_P0_INT_ENA);
553 usb3_write(usb3, 0, USB3_PN_INT_ENA);
554 usb3_write(usb3, 0, USB3_USB_INT_ENA_1);
555 usb3_write(usb3, 0, USB3_USB_INT_ENA_2);
556 usb3_write(usb3, 0, USB3_AXI_INT_ENA);
557}
558
559static void usb3_irq_epc_int_1_pll_wakeup(struct renesas_usb3 *usb3)
560{
561 usb3_disable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
562 usb3_clear_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
563 usb3_start_usb3_connection(usb3);
564}
565
566static void usb3_irq_epc_int_1_linkup_success(struct renesas_usb3 *usb3)
567{
568 usb3_transition_to_default_state(usb3, true);
569}
570
571static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
572{
573 usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM);
574 usb3_start_usb2_connection(usb3);
575 usb3_transition_to_default_state(usb3, false);
576}
577
578static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
579{
580 usb3_stop_usb3_connection(usb3);
581 if (usb3_wakeup_usb2_phy(usb3))
582 usb3_irq_epc_int_1_resume(usb3);
583}
584
585static void usb3_irq_epc_int_1_bus_reset(struct renesas_usb3 *usb3)
586{
587 usb3_reset_epc(usb3);
588 if (usb3->disabled_count < 3)
589 usb3_start_usb3_connection(usb3);
590 else
591 usb3_start_usb2_connection(usb3);
592}
593
594static void usb3_irq_epc_int_1_vbus_change(struct renesas_usb3 *usb3)
595{
596 usb3_check_vbus(usb3);
597}
598
599static void usb3_irq_epc_int_1_hot_reset(struct renesas_usb3 *usb3)
600{
601 usb3_reset_epc(usb3);
602 usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
603
604 /* This bit shall be set within 12ms from the start of HotReset */
605 usb3_set_bit(usb3, USB30_CON_B3_HOTRST_CMP, USB3_USB30_CON);
606}
607
608static void usb3_irq_epc_int_1_warm_reset(struct renesas_usb3 *usb3)
609{
610 usb3_reset_epc(usb3);
611 usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
612
613 usb3_start_operation_for_usb3(usb3);
614 usb3_enable_irq_1(usb3, USB_INT_1_SPEED);
615}
616
617static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
618{
619 u32 speed = usb3_read(usb3, USB3_USB_STA) & USB_STA_SPEED_MASK;
620
621 switch (speed) {
622 case USB_STA_SPEED_SS:
623 usb3->gadget.speed = USB_SPEED_SUPER;
624 break;
625 case USB_STA_SPEED_HS:
626 usb3->gadget.speed = USB_SPEED_HIGH;
627 break;
628 case USB_STA_SPEED_FS:
629 usb3->gadget.speed = USB_SPEED_FULL;
630 break;
631 default:
632 usb3->gadget.speed = USB_SPEED_UNKNOWN;
633 break;
634 }
635}
636
637static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
638{
639 if (int_sta_1 & USB_INT_1_B3_PLLWKUP)
640 usb3_irq_epc_int_1_pll_wakeup(usb3);
641
642 if (int_sta_1 & USB_INT_1_B3_LUPSUCS)
643 usb3_irq_epc_int_1_linkup_success(usb3);
644
645 if (int_sta_1 & USB_INT_1_B3_HOTRST)
646 usb3_irq_epc_int_1_hot_reset(usb3);
647
648 if (int_sta_1 & USB_INT_1_B3_WRMRST)
649 usb3_irq_epc_int_1_warm_reset(usb3);
650
651 if (int_sta_1 & USB_INT_1_B3_DISABLE)
652 usb3_irq_epc_int_1_disable(usb3);
653
654 if (int_sta_1 & USB_INT_1_B2_USBRST)
655 usb3_irq_epc_int_1_bus_reset(usb3);
656
657 if (int_sta_1 & USB_INT_1_B2_RSUM)
658 usb3_irq_epc_int_1_resume(usb3);
659
660 if (int_sta_1 & USB_INT_1_SPEED)
661 usb3_irq_epc_int_1_speed(usb3);
662
663 if (int_sta_1 & USB_INT_1_VBUS_CNG)
664 usb3_irq_epc_int_1_vbus_change(usb3);
665}
666
667static struct renesas_usb3_request *__usb3_get_request(struct renesas_usb3_ep
668 *usb3_ep)
669{
670 return list_first_entry_or_null(&usb3_ep->queue,
671 struct renesas_usb3_request, queue);
672}
673
674static struct renesas_usb3_request *usb3_get_request(struct renesas_usb3_ep
675 *usb3_ep)
676{
677 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
678 struct renesas_usb3_request *usb3_req;
679 unsigned long flags;
680
681 spin_lock_irqsave(&usb3->lock, flags);
682 usb3_req = __usb3_get_request(usb3_ep);
683 spin_unlock_irqrestore(&usb3->lock, flags);
684
685 return usb3_req;
686}
687
Yoshihiro Shimoda2db03a72017-08-02 21:06:35 +0900688static void __usb3_request_done(struct renesas_usb3_ep *usb3_ep,
689 struct renesas_usb3_request *usb3_req,
690 int status)
691{
692 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
693
694 dev_dbg(usb3_to_dev(usb3), "giveback: ep%2d, %u, %u, %d\n",
695 usb3_ep->num, usb3_req->req.length, usb3_req->req.actual,
696 status);
697 usb3_req->req.status = status;
698 usb3_ep->started = false;
699 list_del_init(&usb3_req->queue);
700 spin_unlock(&usb3->lock);
701 usb_gadget_giveback_request(&usb3_ep->ep, &usb3_req->req);
702 spin_lock(&usb3->lock);
703}
704
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900705static void usb3_request_done(struct renesas_usb3_ep *usb3_ep,
706 struct renesas_usb3_request *usb3_req, int status)
707{
708 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
709 unsigned long flags;
710
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900711 spin_lock_irqsave(&usb3->lock, flags);
Yoshihiro Shimoda2db03a72017-08-02 21:06:35 +0900712 __usb3_request_done(usb3_ep, usb3_req, status);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900713 spin_unlock_irqrestore(&usb3->lock, flags);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900714}
715
716static void usb3_irq_epc_pipe0_status_end(struct renesas_usb3 *usb3)
717{
718 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
719 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
720
721 if (usb3_req)
722 usb3_request_done(usb3_ep, usb3_req, 0);
723 if (usb3->test_mode)
724 usb3_set_test_mode(usb3);
725}
726
727static void usb3_get_setup_data(struct renesas_usb3 *usb3,
728 struct usb_ctrlrequest *ctrl)
729{
730 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
731 u32 *data = (u32 *)ctrl;
732
733 *data++ = usb3_read(usb3, USB3_STUP_DAT_0);
734 *data = usb3_read(usb3, USB3_STUP_DAT_1);
735
736 /* update this driver's flag */
737 usb3_ep->dir_in = !!(ctrl->bRequestType & USB_DIR_IN);
738}
739
740static void usb3_set_p0_con_update_res(struct renesas_usb3 *usb3, u32 res)
741{
742 u32 val = usb3_read(usb3, USB3_P0_CON);
743
744 val &= ~(P0_CON_ST_RES_MASK | P0_CON_OT_RES_MASK | P0_CON_IN_RES_MASK);
745 val |= res | P0_CON_RES_WEN;
746 usb3_write(usb3, val, USB3_P0_CON);
747}
748
749static void usb3_set_p0_con_for_ctrl_read_data(struct renesas_usb3 *usb3)
750{
751 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
752 P0_CON_OT_RES_FORCE_STALL |
753 P0_CON_IN_RES_NORMAL);
754}
755
756static void usb3_set_p0_con_for_ctrl_read_status(struct renesas_usb3 *usb3)
757{
758 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
759 P0_CON_OT_RES_FORCE_STALL |
760 P0_CON_IN_RES_NORMAL);
761}
762
763static void usb3_set_p0_con_for_ctrl_write_data(struct renesas_usb3 *usb3)
764{
765 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
766 P0_CON_OT_RES_NORMAL |
767 P0_CON_IN_RES_FORCE_STALL);
768}
769
770static void usb3_set_p0_con_for_ctrl_write_status(struct renesas_usb3 *usb3)
771{
772 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
773 P0_CON_OT_RES_NORMAL |
774 P0_CON_IN_RES_FORCE_STALL);
775}
776
777static void usb3_set_p0_con_for_no_data(struct renesas_usb3 *usb3)
778{
779 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
780 P0_CON_OT_RES_FORCE_STALL |
781 P0_CON_IN_RES_FORCE_STALL);
782}
783
784static void usb3_set_p0_con_stall(struct renesas_usb3 *usb3)
785{
786 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_STALL |
787 P0_CON_OT_RES_FORCE_STALL |
788 P0_CON_IN_RES_FORCE_STALL);
789}
790
791static void usb3_set_p0_con_stop(struct renesas_usb3 *usb3)
792{
793 usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
794 P0_CON_OT_RES_FORCE_NRDY |
795 P0_CON_IN_RES_FORCE_NRDY);
796}
797
798static int usb3_pn_change(struct renesas_usb3 *usb3, int num)
799{
800 if (num == 0 || num > usb3->num_usb3_eps)
801 return -ENXIO;
802
803 usb3_write(usb3, num, USB3_PIPE_COM);
804
805 return 0;
806}
807
808static void usb3_set_pn_con_update_res(struct renesas_usb3 *usb3, u32 res)
809{
810 u32 val = usb3_read(usb3, USB3_PN_CON);
811
812 val &= ~PN_CON_RES_MASK;
813 val |= res & PN_CON_RES_MASK;
814 val |= PN_CON_RES_WEN;
815 usb3_write(usb3, val, USB3_PN_CON);
816}
817
818static void usb3_pn_start(struct renesas_usb3 *usb3)
819{
820 usb3_set_pn_con_update_res(usb3, PN_CON_RES_NORMAL);
821}
822
823static void usb3_pn_stop(struct renesas_usb3 *usb3)
824{
825 usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_NRDY);
826}
827
828static void usb3_pn_stall(struct renesas_usb3 *usb3)
829{
830 usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_STALL);
831}
832
833static int usb3_pn_con_clear(struct renesas_usb3 *usb3)
834{
835 usb3_set_bit(usb3, PN_CON_CLR, USB3_PN_CON);
836
837 return usb3_wait(usb3, USB3_PN_CON, PN_CON_CLR, 0);
838}
839
840static bool usb3_is_transfer_complete(struct renesas_usb3_ep *usb3_ep,
841 struct renesas_usb3_request *usb3_req)
842{
843 struct usb_request *req = &usb3_req->req;
844
845 if ((!req->zero && req->actual == req->length) ||
846 (req->actual % usb3_ep->ep.maxpacket) || (req->length == 0))
847 return true;
848 else
849 return false;
850}
851
852static int usb3_wait_pipe_status(struct renesas_usb3_ep *usb3_ep, u32 mask)
853{
854 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
855 u32 sta_reg = usb3_ep->num ? USB3_PN_STA : USB3_P0_STA;
856
857 return usb3_wait(usb3, sta_reg, mask, mask);
858}
859
860static void usb3_set_px_con_send(struct renesas_usb3_ep *usb3_ep, int bytes,
861 bool last)
862{
863 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
864 u32 con_reg = usb3_ep->num ? USB3_PN_CON : USB3_P0_CON;
865 u32 val = usb3_read(usb3, con_reg);
866
867 val |= PX_CON_SEND | PX_CON_BYTE_EN_BYTES(bytes);
868 val |= (usb3_ep->num && last) ? PN_CON_LAST : 0;
869 usb3_write(usb3, val, con_reg);
870}
871
872static int usb3_write_pipe(struct renesas_usb3_ep *usb3_ep,
873 struct renesas_usb3_request *usb3_req,
874 u32 fifo_reg)
875{
876 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
877 int i;
878 int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
879 usb3_ep->ep.maxpacket);
880 u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
881 u32 tmp = 0;
Yoshihiro Shimodad21653d2017-09-25 17:01:25 +0900882 bool is_last = !len ? true : false;
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900883
884 if (usb3_wait_pipe_status(usb3_ep, PX_STA_BUFSTS) < 0)
885 return -EBUSY;
886
887 /* Update gadget driver parameter */
888 usb3_req->req.actual += len;
889
890 /* Write data to the register */
891 if (len >= 4) {
892 iowrite32_rep(usb3->reg + fifo_reg, buf, len / 4);
893 buf += (len / 4) * 4;
894 len %= 4; /* update len to use usb3_set_pX_con_send() */
895 }
896
897 if (len) {
898 for (i = 0; i < len; i++)
899 tmp |= buf[i] << (8 * i);
900 usb3_write(usb3, tmp, fifo_reg);
901 }
902
Yoshihiro Shimodad21653d2017-09-25 17:01:25 +0900903 if (!is_last)
904 is_last = usb3_is_transfer_complete(usb3_ep, usb3_req);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900905 /* Send the data */
906 usb3_set_px_con_send(usb3_ep, len, is_last);
907
908 return is_last ? 0 : -EAGAIN;
909}
910
911static u32 usb3_get_received_length(struct renesas_usb3_ep *usb3_ep)
912{
913 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
914 u32 lng_reg = usb3_ep->num ? USB3_PN_LNG : USB3_P0_LNG;
915
916 return usb3_read(usb3, lng_reg);
917}
918
919static int usb3_read_pipe(struct renesas_usb3_ep *usb3_ep,
920 struct renesas_usb3_request *usb3_req, u32 fifo_reg)
921{
922 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
923 int i;
924 int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
925 usb3_get_received_length(usb3_ep));
926 u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
927 u32 tmp = 0;
928
929 if (!len)
930 return 0;
931
932 /* Update gadget driver parameter */
933 usb3_req->req.actual += len;
934
935 /* Read data from the register */
936 if (len >= 4) {
937 ioread32_rep(usb3->reg + fifo_reg, buf, len / 4);
938 buf += (len / 4) * 4;
939 len %= 4;
940 }
941
942 if (len) {
943 tmp = usb3_read(usb3, fifo_reg);
944 for (i = 0; i < len; i++)
945 buf[i] = (tmp >> (8 * i)) & 0xff;
946 }
947
948 return usb3_is_transfer_complete(usb3_ep, usb3_req) ? 0 : -EAGAIN;
949}
950
951static void usb3_set_status_stage(struct renesas_usb3_ep *usb3_ep,
952 struct renesas_usb3_request *usb3_req)
953{
954 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
955
956 if (usb3_ep->dir_in) {
957 usb3_set_p0_con_for_ctrl_read_status(usb3);
958 } else {
959 if (!usb3_req->req.length)
960 usb3_set_p0_con_for_no_data(usb3);
961 else
962 usb3_set_p0_con_for_ctrl_write_status(usb3);
963 }
964}
965
966static void usb3_p0_xfer(struct renesas_usb3_ep *usb3_ep,
967 struct renesas_usb3_request *usb3_req)
968{
969 int ret = -EAGAIN;
970
971 if (usb3_ep->dir_in)
972 ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_P0_WRITE);
973 else
974 ret = usb3_read_pipe(usb3_ep, usb3_req, USB3_P0_READ);
975
976 if (!ret)
977 usb3_set_status_stage(usb3_ep, usb3_req);
978}
979
980static void usb3_start_pipe0(struct renesas_usb3_ep *usb3_ep,
981 struct renesas_usb3_request *usb3_req)
982{
983 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
984
985 if (usb3_ep->started)
986 return;
987
988 usb3_ep->started = true;
989
990 if (usb3_ep->dir_in) {
991 usb3_set_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
992 usb3_set_p0_con_for_ctrl_read_data(usb3);
993 } else {
994 usb3_clear_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
Yoshihiro Shimoda25533672017-09-25 17:01:23 +0900995 if (usb3_req->req.length)
996 usb3_set_p0_con_for_ctrl_write_data(usb3);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +0900997 }
998
999 usb3_p0_xfer(usb3_ep, usb3_req);
1000}
1001
1002static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep,
1003 struct renesas_usb3_request *usb3_req)
1004{
1005 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1006 struct renesas_usb3_request *usb3_req_first = usb3_get_request(usb3_ep);
1007 unsigned long flags;
1008 int ret = -EAGAIN;
1009 u32 enable_bits = 0;
1010
1011 if (usb3_ep->halt || usb3_ep->started)
1012 return;
1013 if (usb3_req != usb3_req_first)
1014 return;
1015
1016 spin_lock_irqsave(&usb3->lock, flags);
1017 if (usb3_pn_change(usb3, usb3_ep->num) < 0)
1018 goto out;
1019
1020 usb3_ep->started = true;
1021 usb3_pn_start(usb3);
1022
1023 if (usb3_ep->dir_in) {
1024 ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE);
1025 enable_bits |= PN_INT_LSTTR;
1026 }
1027
1028 if (ret < 0)
1029 enable_bits |= PN_INT_BFRDY;
1030
1031 if (enable_bits) {
1032 usb3_set_bit(usb3, enable_bits, USB3_PN_INT_ENA);
1033 usb3_enable_pipe_irq(usb3, usb3_ep->num);
1034 }
1035out:
1036 spin_unlock_irqrestore(&usb3->lock, flags);
1037}
1038
1039static int renesas_usb3_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
1040 gfp_t gfp_flags)
1041{
1042 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1043 struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
1044 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1045 unsigned long flags;
1046
1047 dev_dbg(usb3_to_dev(usb3), "ep_queue: ep%2d, %u\n", usb3_ep->num,
1048 _req->length);
1049
1050 _req->status = -EINPROGRESS;
1051 _req->actual = 0;
1052 spin_lock_irqsave(&usb3->lock, flags);
1053 list_add_tail(&usb3_req->queue, &usb3_ep->queue);
1054 spin_unlock_irqrestore(&usb3->lock, flags);
1055
1056 if (!usb3_ep->num)
1057 usb3_start_pipe0(usb3_ep, usb3_req);
1058 else
1059 usb3_start_pipen(usb3_ep, usb3_req);
1060
1061 return 0;
1062}
1063
1064static void usb3_set_device_address(struct renesas_usb3 *usb3, u16 addr)
1065{
1066 /* DEV_ADDR bit field is cleared by WarmReset, HotReset and BusReset */
1067 usb3_set_bit(usb3, USB_COM_CON_DEV_ADDR(addr), USB3_USB_COM_CON);
1068}
1069
1070static bool usb3_std_req_set_address(struct renesas_usb3 *usb3,
1071 struct usb_ctrlrequest *ctrl)
1072{
1073 if (ctrl->wValue >= 128)
1074 return true; /* stall */
1075
1076 usb3_set_device_address(usb3, ctrl->wValue);
1077 usb3_set_p0_con_for_no_data(usb3);
1078
1079 return false;
1080}
1081
1082static void usb3_pipe0_internal_xfer(struct renesas_usb3 *usb3,
1083 void *tx_data, size_t len,
1084 void (*complete)(struct usb_ep *ep,
1085 struct usb_request *req))
1086{
1087 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1088
1089 if (tx_data)
1090 memcpy(usb3->ep0_buf, tx_data,
1091 min_t(size_t, len, USB3_EP0_BUF_SIZE));
1092
1093 usb3->ep0_req->buf = &usb3->ep0_buf;
1094 usb3->ep0_req->length = len;
1095 usb3->ep0_req->complete = complete;
1096 renesas_usb3_ep_queue(&usb3_ep->ep, usb3->ep0_req, GFP_ATOMIC);
1097}
1098
1099static void usb3_pipe0_get_status_completion(struct usb_ep *ep,
1100 struct usb_request *req)
1101{
1102}
1103
1104static bool usb3_std_req_get_status(struct renesas_usb3 *usb3,
1105 struct usb_ctrlrequest *ctrl)
1106{
1107 bool stall = false;
1108 struct renesas_usb3_ep *usb3_ep;
1109 int num;
1110 u16 status = 0;
1111
1112 switch (ctrl->bRequestType & USB_RECIP_MASK) {
1113 case USB_RECIP_DEVICE:
1114 if (usb3->gadget.is_selfpowered)
1115 status |= 1 << USB_DEVICE_SELF_POWERED;
1116 if (usb3->gadget.speed == USB_SPEED_SUPER)
1117 status |= usb3_feature_get_un_enabled(usb3);
1118 break;
1119 case USB_RECIP_INTERFACE:
1120 break;
1121 case USB_RECIP_ENDPOINT:
1122 num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
1123 usb3_ep = usb3_get_ep(usb3, num);
1124 if (usb3_ep->halt)
1125 status |= 1 << USB_ENDPOINT_HALT;
1126 break;
1127 default:
1128 stall = true;
1129 break;
1130 }
1131
1132 if (!stall) {
1133 status = cpu_to_le16(status);
1134 dev_dbg(usb3_to_dev(usb3), "get_status: req = %p\n",
1135 usb_req_to_usb3_req(usb3->ep0_req));
1136 usb3_pipe0_internal_xfer(usb3, &status, sizeof(status),
1137 usb3_pipe0_get_status_completion);
1138 }
1139
1140 return stall;
1141}
1142
1143static bool usb3_std_req_feature_device(struct renesas_usb3 *usb3,
1144 struct usb_ctrlrequest *ctrl, bool set)
1145{
1146 bool stall = true;
1147 u16 w_value = le16_to_cpu(ctrl->wValue);
1148
1149 switch (w_value) {
1150 case USB_DEVICE_TEST_MODE:
1151 if (!set)
1152 break;
1153 usb3->test_mode = le16_to_cpu(ctrl->wIndex) >> 8;
1154 stall = false;
1155 break;
1156 case USB_DEVICE_U1_ENABLE:
1157 case USB_DEVICE_U2_ENABLE:
1158 if (usb3->gadget.speed != USB_SPEED_SUPER)
1159 break;
1160 if (w_value == USB_DEVICE_U1_ENABLE)
1161 usb3_feature_u1_enable(usb3, set);
1162 if (w_value == USB_DEVICE_U2_ENABLE)
1163 usb3_feature_u2_enable(usb3, set);
1164 stall = false;
1165 break;
1166 default:
1167 break;
1168 }
1169
1170 return stall;
1171}
1172
1173static int usb3_set_halt_p0(struct renesas_usb3_ep *usb3_ep, bool halt)
1174{
1175 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1176
1177 if (unlikely(usb3_ep->num))
1178 return -EINVAL;
1179
1180 usb3_ep->halt = halt;
1181 if (halt)
1182 usb3_set_p0_con_stall(usb3);
1183 else
1184 usb3_set_p0_con_stop(usb3);
1185
1186 return 0;
1187}
1188
1189static int usb3_set_halt_pn(struct renesas_usb3_ep *usb3_ep, bool halt,
1190 bool is_clear_feature)
1191{
1192 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1193 unsigned long flags;
1194
1195 spin_lock_irqsave(&usb3->lock, flags);
1196 if (!usb3_pn_change(usb3, usb3_ep->num)) {
1197 usb3_ep->halt = halt;
1198 if (halt) {
1199 usb3_pn_stall(usb3);
1200 } else if (!is_clear_feature || !usb3_ep->wedge) {
1201 usb3_pn_con_clear(usb3);
1202 usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
1203 usb3_pn_stop(usb3);
1204 }
1205 }
1206 spin_unlock_irqrestore(&usb3->lock, flags);
1207
1208 return 0;
1209}
1210
1211static int usb3_set_halt(struct renesas_usb3_ep *usb3_ep, bool halt,
1212 bool is_clear_feature)
1213{
1214 int ret = 0;
1215
1216 if (halt && usb3_ep->started)
1217 return -EAGAIN;
1218
1219 if (usb3_ep->num)
1220 ret = usb3_set_halt_pn(usb3_ep, halt, is_clear_feature);
1221 else
1222 ret = usb3_set_halt_p0(usb3_ep, halt);
1223
1224 return ret;
1225}
1226
1227static bool usb3_std_req_feature_endpoint(struct renesas_usb3 *usb3,
1228 struct usb_ctrlrequest *ctrl,
1229 bool set)
1230{
1231 int num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
1232 struct renesas_usb3_ep *usb3_ep;
1233 struct renesas_usb3_request *usb3_req;
1234
1235 if (le16_to_cpu(ctrl->wValue) != USB_ENDPOINT_HALT)
1236 return true; /* stall */
1237
1238 usb3_ep = usb3_get_ep(usb3, num);
1239 usb3_set_halt(usb3_ep, set, true);
1240
1241 /* Restarts a queue if clear feature */
1242 if (!set) {
1243 usb3_ep->started = false;
1244 usb3_req = usb3_get_request(usb3_ep);
1245 if (usb3_req)
1246 usb3_start_pipen(usb3_ep, usb3_req);
1247 }
1248
1249 return false;
1250}
1251
1252static bool usb3_std_req_feature(struct renesas_usb3 *usb3,
1253 struct usb_ctrlrequest *ctrl, bool set)
1254{
1255 bool stall = false;
1256
1257 switch (ctrl->bRequestType & USB_RECIP_MASK) {
1258 case USB_RECIP_DEVICE:
1259 stall = usb3_std_req_feature_device(usb3, ctrl, set);
1260 break;
1261 case USB_RECIP_INTERFACE:
1262 break;
1263 case USB_RECIP_ENDPOINT:
1264 stall = usb3_std_req_feature_endpoint(usb3, ctrl, set);
1265 break;
1266 default:
1267 stall = true;
1268 break;
1269 }
1270
1271 if (!stall)
1272 usb3_set_p0_con_for_no_data(usb3);
1273
1274 return stall;
1275}
1276
1277static void usb3_pipe0_set_sel_completion(struct usb_ep *ep,
1278 struct usb_request *req)
1279{
1280 /* TODO */
1281}
1282
1283static bool usb3_std_req_set_sel(struct renesas_usb3 *usb3,
1284 struct usb_ctrlrequest *ctrl)
1285{
1286 u16 w_length = le16_to_cpu(ctrl->wLength);
1287
1288 if (w_length != 6)
1289 return true; /* stall */
1290
1291 dev_dbg(usb3_to_dev(usb3), "set_sel: req = %p\n",
1292 usb_req_to_usb3_req(usb3->ep0_req));
1293 usb3_pipe0_internal_xfer(usb3, NULL, 6, usb3_pipe0_set_sel_completion);
1294
1295 return false;
1296}
1297
1298static bool usb3_std_req_set_configuration(struct renesas_usb3 *usb3,
1299 struct usb_ctrlrequest *ctrl)
1300{
1301 if (ctrl->wValue > 0)
1302 usb3_set_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
1303 else
1304 usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
1305
1306 return false;
1307}
1308
1309/**
1310 * usb3_handle_standard_request - handle some standard requests
1311 * @usb3: the renesas_usb3 pointer
1312 * @ctrl: a pointer of setup data
1313 *
1314 * Returns true if this function handled a standard request
1315 */
1316static bool usb3_handle_standard_request(struct renesas_usb3 *usb3,
1317 struct usb_ctrlrequest *ctrl)
1318{
1319 bool ret = false;
1320 bool stall = false;
1321
1322 if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
1323 switch (ctrl->bRequest) {
1324 case USB_REQ_SET_ADDRESS:
1325 stall = usb3_std_req_set_address(usb3, ctrl);
1326 ret = true;
1327 break;
1328 case USB_REQ_GET_STATUS:
1329 stall = usb3_std_req_get_status(usb3, ctrl);
1330 ret = true;
1331 break;
1332 case USB_REQ_CLEAR_FEATURE:
1333 stall = usb3_std_req_feature(usb3, ctrl, false);
1334 ret = true;
1335 break;
1336 case USB_REQ_SET_FEATURE:
1337 stall = usb3_std_req_feature(usb3, ctrl, true);
1338 ret = true;
1339 break;
1340 case USB_REQ_SET_SEL:
1341 stall = usb3_std_req_set_sel(usb3, ctrl);
1342 ret = true;
1343 break;
1344 case USB_REQ_SET_ISOCH_DELAY:
1345 /* This hardware doesn't support Isochronous xfer */
1346 stall = true;
1347 ret = true;
1348 break;
1349 case USB_REQ_SET_CONFIGURATION:
1350 usb3_std_req_set_configuration(usb3, ctrl);
1351 break;
1352 default:
1353 break;
1354 }
1355 }
1356
1357 if (stall)
1358 usb3_set_p0_con_stall(usb3);
1359
1360 return ret;
1361}
1362
1363static int usb3_p0_con_clear_buffer(struct renesas_usb3 *usb3)
1364{
1365 usb3_set_bit(usb3, P0_CON_BCLR, USB3_P0_CON);
1366
1367 return usb3_wait(usb3, USB3_P0_CON, P0_CON_BCLR, 0);
1368}
1369
1370static void usb3_irq_epc_pipe0_setup(struct renesas_usb3 *usb3)
1371{
1372 struct usb_ctrlrequest ctrl;
1373 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1374
1375 /* Call giveback function if previous transfer is not completed */
1376 if (usb3_ep->started)
1377 usb3_request_done(usb3_ep, usb3_get_request(usb3_ep),
1378 -ECONNRESET);
1379
1380 usb3_p0_con_clear_buffer(usb3);
1381 usb3_get_setup_data(usb3, &ctrl);
1382 if (!usb3_handle_standard_request(usb3, &ctrl))
1383 if (usb3->driver->setup(&usb3->gadget, &ctrl) < 0)
1384 usb3_set_p0_con_stall(usb3);
1385}
1386
1387static void usb3_irq_epc_pipe0_bfrdy(struct renesas_usb3 *usb3)
1388{
1389 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
1390 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1391
1392 if (!usb3_req)
1393 return;
1394
1395 usb3_p0_xfer(usb3_ep, usb3_req);
1396}
1397
1398static void usb3_irq_epc_pipe0(struct renesas_usb3 *usb3)
1399{
1400 u32 p0_int_sta = usb3_read(usb3, USB3_P0_INT_STA);
1401
1402 p0_int_sta &= usb3_read(usb3, USB3_P0_INT_ENA);
1403 usb3_write(usb3, p0_int_sta, USB3_P0_INT_STA);
1404 if (p0_int_sta & P0_INT_STSED)
1405 usb3_irq_epc_pipe0_status_end(usb3);
1406 if (p0_int_sta & P0_INT_SETUP)
1407 usb3_irq_epc_pipe0_setup(usb3);
1408 if (p0_int_sta & P0_INT_BFRDY)
1409 usb3_irq_epc_pipe0_bfrdy(usb3);
1410}
1411
1412static void usb3_request_done_pipen(struct renesas_usb3 *usb3,
1413 struct renesas_usb3_ep *usb3_ep,
1414 struct renesas_usb3_request *usb3_req,
1415 int status)
1416{
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001417 unsigned long flags;
1418
1419 spin_lock_irqsave(&usb3->lock, flags);
1420 if (usb3_pn_change(usb3, usb3_ep->num))
1421 usb3_pn_stop(usb3);
1422 spin_unlock_irqrestore(&usb3->lock, flags);
1423
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001424 usb3_disable_pipe_irq(usb3, usb3_ep->num);
1425 usb3_request_done(usb3_ep, usb3_req, status);
1426
1427 /* get next usb3_req */
1428 usb3_req = usb3_get_request(usb3_ep);
1429 if (usb3_req)
1430 usb3_start_pipen(usb3_ep, usb3_req);
1431}
1432
1433static void usb3_irq_epc_pipen_lsttr(struct renesas_usb3 *usb3, int num)
1434{
1435 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1436 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1437
1438 if (!usb3_req)
1439 return;
1440
1441 if (usb3_ep->dir_in) {
1442 dev_dbg(usb3_to_dev(usb3), "%s: len = %u, actual = %u\n",
1443 __func__, usb3_req->req.length, usb3_req->req.actual);
1444 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1445 }
1446}
1447
1448static void usb3_irq_epc_pipen_bfrdy(struct renesas_usb3 *usb3, int num)
1449{
1450 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1451 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001452 bool done = false;
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001453
1454 if (!usb3_req)
1455 return;
1456
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001457 spin_lock(&usb3->lock);
1458 if (usb3_pn_change(usb3, num))
1459 goto out;
1460
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001461 if (usb3_ep->dir_in) {
1462 /* Do not stop the IN pipe here to detect LSTTR interrupt */
1463 if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
1464 usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA);
1465 } else {
1466 if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001467 done = true;
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001468 }
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001469
1470out:
1471 /* need to unlock because usb3_request_done_pipen() locks it */
1472 spin_unlock(&usb3->lock);
1473
1474 if (done)
1475 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001476}
1477
1478static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num)
1479{
1480 u32 pn_int_sta;
1481
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001482 spin_lock(&usb3->lock);
1483 if (usb3_pn_change(usb3, num) < 0) {
1484 spin_unlock(&usb3->lock);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001485 return;
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001486 }
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001487
1488 pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA);
1489 pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA);
1490 usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA);
Yoshihiro Shimodacb53a4e2017-04-26 20:50:09 +09001491 spin_unlock(&usb3->lock);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001492 if (pn_int_sta & PN_INT_LSTTR)
1493 usb3_irq_epc_pipen_lsttr(usb3, num);
1494 if (pn_int_sta & PN_INT_BFRDY)
1495 usb3_irq_epc_pipen_bfrdy(usb3, num);
1496}
1497
1498static void usb3_irq_epc_int_2(struct renesas_usb3 *usb3, u32 int_sta_2)
1499{
1500 int i;
1501
1502 for (i = 0; i < usb3->num_usb3_eps; i++) {
1503 if (int_sta_2 & USB_INT_2_PIPE(i)) {
1504 if (!i)
1505 usb3_irq_epc_pipe0(usb3);
1506 else
1507 usb3_irq_epc_pipen(usb3, i);
1508 }
1509 }
1510}
1511
1512static void usb3_irq_epc(struct renesas_usb3 *usb3)
1513{
1514 u32 int_sta_1 = usb3_read(usb3, USB3_USB_INT_STA_1);
1515 u32 int_sta_2 = usb3_read(usb3, USB3_USB_INT_STA_2);
1516
1517 int_sta_1 &= usb3_read(usb3, USB3_USB_INT_ENA_1);
1518 if (int_sta_1) {
1519 usb3_write(usb3, int_sta_1, USB3_USB_INT_STA_1);
1520 usb3_irq_epc_int_1(usb3, int_sta_1);
1521 }
1522
1523 int_sta_2 &= usb3_read(usb3, USB3_USB_INT_ENA_2);
1524 if (int_sta_2)
1525 usb3_irq_epc_int_2(usb3, int_sta_2);
1526}
1527
1528static irqreturn_t renesas_usb3_irq(int irq, void *_usb3)
1529{
1530 struct renesas_usb3 *usb3 = _usb3;
1531 irqreturn_t ret = IRQ_NONE;
1532 u32 axi_int_sta = usb3_read(usb3, USB3_AXI_INT_STA);
1533
1534 if (axi_int_sta & AXI_INT_EPCINT) {
1535 usb3_irq_epc(usb3);
1536 ret = IRQ_HANDLED;
1537 }
1538
1539 return ret;
1540}
1541
1542static void usb3_write_pn_mod(struct renesas_usb3_ep *usb3_ep,
1543 const struct usb_endpoint_descriptor *desc)
1544{
1545 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1546 u32 val = 0;
1547
1548 val |= usb3_ep->dir_in ? PN_MOD_DIR : 0;
1549 val |= PN_MOD_TYPE(usb_endpoint_type(desc));
1550 val |= PN_MOD_EPNUM(usb_endpoint_num(desc));
1551 usb3_write(usb3, val, USB3_PN_MOD);
1552}
1553
1554static u32 usb3_calc_ramarea(int ram_size)
1555{
1556 WARN_ON(ram_size > SZ_16K);
1557
1558 if (ram_size <= SZ_1K)
1559 return PN_RAMMAP_RAMAREA_1KB;
1560 else if (ram_size <= SZ_2K)
1561 return PN_RAMMAP_RAMAREA_2KB;
1562 else if (ram_size <= SZ_4K)
1563 return PN_RAMMAP_RAMAREA_4KB;
1564 else if (ram_size <= SZ_8K)
1565 return PN_RAMMAP_RAMAREA_8KB;
1566 else
1567 return PN_RAMMAP_RAMAREA_16KB;
1568}
1569
1570static u32 usb3_calc_rammap_val(struct renesas_usb3_ep *usb3_ep,
1571 const struct usb_endpoint_descriptor *desc)
1572{
Yoshihiro Shimodadb73b382017-09-25 17:01:24 +09001573 int i;
1574 const u32 max_packet_array[] = {8, 16, 32, 64, 512};
1575 u32 mpkt = PN_RAMMAP_MPKT(1024);
1576
1577 for (i = 0; i < ARRAY_SIZE(max_packet_array); i++) {
1578 if (usb_endpoint_maxp(desc) <= max_packet_array[i])
1579 mpkt = PN_RAMMAP_MPKT(max_packet_array[i]);
1580 }
1581
1582 return usb3_ep->rammap_val | mpkt;
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001583}
1584
1585static int usb3_enable_pipe_n(struct renesas_usb3_ep *usb3_ep,
1586 const struct usb_endpoint_descriptor *desc)
1587{
1588 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1589 unsigned long flags;
1590
1591 usb3_ep->dir_in = usb_endpoint_dir_in(desc);
1592
1593 spin_lock_irqsave(&usb3->lock, flags);
1594 if (!usb3_pn_change(usb3, usb3_ep->num)) {
1595 usb3_write_pn_mod(usb3_ep, desc);
1596 usb3_write(usb3, usb3_calc_rammap_val(usb3_ep, desc),
1597 USB3_PN_RAMMAP);
1598 usb3_pn_con_clear(usb3);
1599 usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
1600 }
1601 spin_unlock_irqrestore(&usb3->lock, flags);
1602
1603 return 0;
1604}
1605
1606static int usb3_disable_pipe_n(struct renesas_usb3_ep *usb3_ep)
1607{
1608 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1609 unsigned long flags;
1610
1611 usb3_ep->halt = false;
1612
1613 spin_lock_irqsave(&usb3->lock, flags);
1614 if (!usb3_pn_change(usb3, usb3_ep->num)) {
1615 usb3_write(usb3, 0, USB3_PN_RAMMAP);
1616 usb3_clear_bit(usb3, PN_CON_EN, USB3_PN_CON);
1617 }
1618 spin_unlock_irqrestore(&usb3->lock, flags);
1619
1620 return 0;
1621}
1622
1623/*------- usb_ep_ops -----------------------------------------------------*/
1624static int renesas_usb3_ep_enable(struct usb_ep *_ep,
1625 const struct usb_endpoint_descriptor *desc)
1626{
1627 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1628
1629 return usb3_enable_pipe_n(usb3_ep, desc);
1630}
1631
1632static int renesas_usb3_ep_disable(struct usb_ep *_ep)
1633{
1634 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1635 struct renesas_usb3_request *usb3_req;
1636
1637 do {
1638 usb3_req = usb3_get_request(usb3_ep);
1639 if (!usb3_req)
1640 break;
1641 usb3_request_done(usb3_ep, usb3_req, -ESHUTDOWN);
1642 } while (1);
1643
1644 return usb3_disable_pipe_n(usb3_ep);
1645}
1646
1647static struct usb_request *__renesas_usb3_ep_alloc_request(gfp_t gfp_flags)
1648{
1649 struct renesas_usb3_request *usb3_req;
1650
1651 usb3_req = kzalloc(sizeof(struct renesas_usb3_request), gfp_flags);
1652 if (!usb3_req)
1653 return NULL;
1654
1655 INIT_LIST_HEAD(&usb3_req->queue);
1656
1657 return &usb3_req->req;
1658}
1659
1660static void __renesas_usb3_ep_free_request(struct usb_request *_req)
1661{
1662 struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
1663
1664 kfree(usb3_req);
1665}
1666
1667static struct usb_request *renesas_usb3_ep_alloc_request(struct usb_ep *_ep,
1668 gfp_t gfp_flags)
1669{
1670 return __renesas_usb3_ep_alloc_request(gfp_flags);
1671}
1672
1673static void renesas_usb3_ep_free_request(struct usb_ep *_ep,
1674 struct usb_request *_req)
1675{
1676 __renesas_usb3_ep_free_request(_req);
1677}
1678
1679static int renesas_usb3_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
1680{
1681 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1682 struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
1683 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1684
1685 dev_dbg(usb3_to_dev(usb3), "ep_dequeue: ep%2d, %u\n", usb3_ep->num,
1686 _req->length);
1687
1688 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, -ECONNRESET);
1689
1690 return 0;
1691}
1692
1693static int renesas_usb3_ep_set_halt(struct usb_ep *_ep, int value)
1694{
1695 return usb3_set_halt(usb_ep_to_usb3_ep(_ep), !!value, false);
1696}
1697
1698static int renesas_usb3_ep_set_wedge(struct usb_ep *_ep)
1699{
1700 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1701
1702 usb3_ep->wedge = true;
1703 return usb3_set_halt(usb3_ep, true, false);
1704}
1705
1706static void renesas_usb3_ep_fifo_flush(struct usb_ep *_ep)
1707{
1708 struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
1709 struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
1710 unsigned long flags;
1711
1712 if (usb3_ep->num) {
1713 spin_lock_irqsave(&usb3->lock, flags);
1714 if (!usb3_pn_change(usb3, usb3_ep->num)) {
1715 usb3_pn_con_clear(usb3);
1716 usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
1717 }
1718 spin_unlock_irqrestore(&usb3->lock, flags);
1719 } else {
1720 usb3_p0_con_clear_buffer(usb3);
1721 }
1722}
1723
1724static struct usb_ep_ops renesas_usb3_ep_ops = {
1725 .enable = renesas_usb3_ep_enable,
1726 .disable = renesas_usb3_ep_disable,
1727
1728 .alloc_request = renesas_usb3_ep_alloc_request,
1729 .free_request = renesas_usb3_ep_free_request,
1730
1731 .queue = renesas_usb3_ep_queue,
1732 .dequeue = renesas_usb3_ep_dequeue,
1733
1734 .set_halt = renesas_usb3_ep_set_halt,
1735 .set_wedge = renesas_usb3_ep_set_wedge,
1736 .fifo_flush = renesas_usb3_ep_fifo_flush,
1737};
1738
1739/*------- usb_gadget_ops -------------------------------------------------*/
1740static int renesas_usb3_start(struct usb_gadget *gadget,
1741 struct usb_gadget_driver *driver)
1742{
1743 struct renesas_usb3 *usb3;
1744
1745 if (!driver || driver->max_speed < USB_SPEED_FULL ||
1746 !driver->setup)
1747 return -EINVAL;
1748
1749 usb3 = gadget_to_renesas_usb3(gadget);
1750
1751 /* hook up the driver */
1752 usb3->driver = driver;
1753
Yoshihiro Shimoda723bd3b2017-04-26 20:50:07 +09001754 pm_runtime_enable(usb3_to_dev(usb3));
1755 pm_runtime_get_sync(usb3_to_dev(usb3));
1756
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001757 renesas_usb3_init_controller(usb3);
1758
1759 return 0;
1760}
1761
1762static int renesas_usb3_stop(struct usb_gadget *gadget)
1763{
1764 struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001765
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001766 usb3->softconnect = false;
1767 usb3->gadget.speed = USB_SPEED_UNKNOWN;
1768 usb3->driver = NULL;
1769 renesas_usb3_stop_controller(usb3);
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001770
Yoshihiro Shimoda723bd3b2017-04-26 20:50:07 +09001771 pm_runtime_put(usb3_to_dev(usb3));
1772 pm_runtime_disable(usb3_to_dev(usb3));
1773
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001774 return 0;
1775}
1776
1777static int renesas_usb3_get_frame(struct usb_gadget *_gadget)
1778{
1779 return -EOPNOTSUPP;
1780}
1781
1782static int renesas_usb3_pullup(struct usb_gadget *gadget, int is_on)
1783{
1784 struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
1785
1786 usb3->softconnect = !!is_on;
1787
1788 return 0;
1789}
1790
1791static int renesas_usb3_set_selfpowered(struct usb_gadget *gadget, int is_self)
1792{
1793 gadget->is_selfpowered = !!is_self;
1794
1795 return 0;
1796}
1797
1798static const struct usb_gadget_ops renesas_usb3_gadget_ops = {
1799 .get_frame = renesas_usb3_get_frame,
1800 .udc_start = renesas_usb3_start,
1801 .udc_stop = renesas_usb3_stop,
1802 .pullup = renesas_usb3_pullup,
1803 .set_selfpowered = renesas_usb3_set_selfpowered,
1804};
1805
1806/*------- platform_driver ------------------------------------------------*/
1807static int renesas_usb3_remove(struct platform_device *pdev)
1808{
1809 struct renesas_usb3 *usb3 = platform_get_drvdata(pdev);
1810
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001811 usb_del_gadget_udc(&usb3->gadget);
1812
1813 __renesas_usb3_ep_free_request(usb3->ep0_req);
1814
1815 return 0;
1816}
1817
1818static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
1819 const struct renesas_usb3_priv *priv)
1820{
1821 struct renesas_usb3_ep *usb3_ep;
1822 int i;
1823
1824 /* calculate num_usb3_eps from renesas_usb3_priv */
1825 usb3->num_usb3_eps = priv->ramsize_per_ramif * priv->num_ramif * 2 /
1826 priv->ramsize_per_pipe + 1;
1827
1828 if (usb3->num_usb3_eps > USB3_MAX_NUM_PIPES)
1829 usb3->num_usb3_eps = USB3_MAX_NUM_PIPES;
1830
1831 usb3->usb3_ep = devm_kzalloc(dev, sizeof(*usb3_ep) * usb3->num_usb3_eps,
1832 GFP_KERNEL);
1833 if (!usb3->usb3_ep)
1834 return -ENOMEM;
1835
1836 dev_dbg(dev, "%s: num_usb3_eps = %d\n", __func__, usb3->num_usb3_eps);
1837 /*
1838 * This driver prepares pipes as the followings:
1839 * - odd pipes = IN pipe
1840 * - even pipes = OUT pipe (except pipe 0)
1841 */
1842 usb3_for_each_ep(usb3_ep, usb3, i) {
1843 snprintf(usb3_ep->ep_name, sizeof(usb3_ep->ep_name), "ep%d", i);
1844 usb3_ep->usb3 = usb3;
1845 usb3_ep->num = i;
1846 usb3_ep->ep.name = usb3_ep->ep_name;
1847 usb3_ep->ep.ops = &renesas_usb3_ep_ops;
1848 INIT_LIST_HEAD(&usb3_ep->queue);
1849 INIT_LIST_HEAD(&usb3_ep->ep.ep_list);
1850 if (!i) {
1851 /* for control pipe */
1852 usb3->gadget.ep0 = &usb3_ep->ep;
1853 usb_ep_set_maxpacket_limit(&usb3_ep->ep,
1854 USB3_EP0_HSFS_MAX_PACKET_SIZE);
1855 usb3_ep->ep.caps.type_control = true;
1856 usb3_ep->ep.caps.dir_in = true;
1857 usb3_ep->ep.caps.dir_out = true;
1858 continue;
1859 }
1860
1861 /* for bulk or interrupt pipe */
1862 usb_ep_set_maxpacket_limit(&usb3_ep->ep, ~0);
1863 list_add_tail(&usb3_ep->ep.ep_list, &usb3->gadget.ep_list);
1864 usb3_ep->ep.caps.type_bulk = true;
1865 usb3_ep->ep.caps.type_int = true;
1866 if (i & 1)
1867 usb3_ep->ep.caps.dir_in = true;
1868 else
1869 usb3_ep->ep.caps.dir_out = true;
1870 }
1871
1872 return 0;
1873}
1874
1875static void renesas_usb3_init_ram(struct renesas_usb3 *usb3, struct device *dev,
1876 const struct renesas_usb3_priv *priv)
1877{
1878 struct renesas_usb3_ep *usb3_ep;
1879 int i;
1880 u32 ramif[2], basead[2]; /* index 0 = for IN pipes */
1881 u32 *cur_ramif, *cur_basead;
1882 u32 val;
1883
1884 memset(ramif, 0, sizeof(ramif));
1885 memset(basead, 0, sizeof(basead));
1886
1887 /*
1888 * This driver prepares pipes as the followings:
1889 * - all pipes = the same size as "ramsize_per_pipe"
1890 * Please refer to the "Method of Specifying RAM Mapping"
1891 */
1892 usb3_for_each_ep(usb3_ep, usb3, i) {
1893 if (!i)
1894 continue; /* out of scope if ep num = 0 */
1895 if (usb3_ep->ep.caps.dir_in) {
1896 cur_ramif = &ramif[0];
1897 cur_basead = &basead[0];
1898 } else {
1899 cur_ramif = &ramif[1];
1900 cur_basead = &basead[1];
1901 }
1902
1903 if (*cur_basead > priv->ramsize_per_ramif)
1904 continue; /* out of memory for IN or OUT pipe */
1905
1906 /* calculate rammap_val */
1907 val = PN_RAMMAP_RAMIF(*cur_ramif);
1908 val |= usb3_calc_ramarea(priv->ramsize_per_pipe);
1909 val |= PN_RAMMAP_BASEAD(*cur_basead);
1910 usb3_ep->rammap_val = val;
1911
1912 dev_dbg(dev, "ep%2d: val = %08x, ramif = %d, base = %x\n",
1913 i, val, *cur_ramif, *cur_basead);
1914
1915 /* update current ramif */
1916 if (*cur_ramif + 1 == priv->num_ramif) {
1917 *cur_ramif = 0;
1918 *cur_basead += priv->ramsize_per_pipe;
1919 } else {
1920 (*cur_ramif)++;
1921 }
1922 }
1923}
1924
1925static const struct renesas_usb3_priv renesas_usb3_priv_r8a7795 = {
1926 .ramsize_per_ramif = SZ_16K,
1927 .num_ramif = 2,
1928 .ramsize_per_pipe = SZ_4K,
1929 .workaround_for_vbus = true,
1930};
1931
1932static const struct of_device_id usb3_of_match[] = {
1933 {
1934 .compatible = "renesas,r8a7795-usb3-peri",
1935 .data = &renesas_usb3_priv_r8a7795,
1936 },
1937 { },
1938};
1939MODULE_DEVICE_TABLE(of, usb3_of_match);
1940
1941static int renesas_usb3_probe(struct platform_device *pdev)
1942{
1943 struct renesas_usb3 *usb3;
1944 struct resource *res;
1945 const struct of_device_id *match;
1946 int irq, ret;
1947 const struct renesas_usb3_priv *priv;
1948
1949 match = of_match_node(usb3_of_match, pdev->dev.of_node);
1950 if (!match)
1951 return -ENODEV;
1952 priv = match->data;
1953
1954 irq = platform_get_irq(pdev, 0);
1955 if (irq < 0)
1956 return -ENODEV;
1957
1958 usb3 = devm_kzalloc(&pdev->dev, sizeof(*usb3), GFP_KERNEL);
1959 if (!usb3)
1960 return -ENOMEM;
1961
1962 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1963 usb3->reg = devm_ioremap_resource(&pdev->dev, res);
1964 if (IS_ERR(usb3->reg))
1965 return PTR_ERR(usb3->reg);
1966
1967 platform_set_drvdata(pdev, usb3);
1968 spin_lock_init(&usb3->lock);
1969
1970 usb3->gadget.ops = &renesas_usb3_gadget_ops;
1971 usb3->gadget.name = udc_name;
1972 usb3->gadget.max_speed = USB_SPEED_SUPER;
1973 INIT_LIST_HEAD(&usb3->gadget.ep_list);
1974 ret = renesas_usb3_init_ep(usb3, &pdev->dev, priv);
1975 if (ret < 0)
1976 return ret;
1977 renesas_usb3_init_ram(usb3, &pdev->dev, priv);
1978
1979 ret = devm_request_irq(&pdev->dev, irq, renesas_usb3_irq, 0,
1980 dev_name(&pdev->dev), usb3);
1981 if (ret < 0)
1982 return ret;
1983
1984 /* for ep0 handling */
1985 usb3->ep0_req = __renesas_usb3_ep_alloc_request(GFP_KERNEL);
1986 if (!usb3->ep0_req)
1987 return -ENOMEM;
1988
1989 ret = usb_add_gadget_udc(&pdev->dev, &usb3->gadget);
1990 if (ret < 0)
1991 goto err_add_udc;
1992
1993 usb3->workaround_for_vbus = priv->workaround_for_vbus;
1994
Yoshihiro Shimoda746bfe62015-12-21 18:40:04 +09001995 dev_info(&pdev->dev, "probed\n");
1996
1997 return 0;
1998
1999err_add_udc:
2000 __renesas_usb3_ep_free_request(usb3->ep0_req);
2001
2002 return ret;
2003}
2004
2005static struct platform_driver renesas_usb3_driver = {
2006 .probe = renesas_usb3_probe,
2007 .remove = renesas_usb3_remove,
2008 .driver = {
2009 .name = (char *)udc_name,
2010 .of_match_table = of_match_ptr(usb3_of_match),
2011 },
2012};
2013module_platform_driver(renesas_usb3_driver);
2014
2015MODULE_DESCRIPTION("Renesas USB3.0 Peripheral driver");
2016MODULE_LICENSE("GPL v2");
2017MODULE_AUTHOR("Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>");
2018MODULE_ALIAS("platform:renesas_usb3");