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