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