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