1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef __DRIVERS_USB_DWC3_CORE_H
20#define __DRIVERS_USB_DWC3_CORE_H
21
22#include <linux/device.h>
23#include <linux/spinlock.h>
24#include <linux/ioport.h>
25#include <linux/list.h>
26#include <linux/bitops.h>
27#include <linux/dma-mapping.h>
28#include <linux/mm.h>
29#include <linux/debugfs.h>
30#include <linux/wait.h>
31#include <linux/workqueue.h>
32
33#include <linux/usb/ch9.h>
34#include <linux/usb/gadget.h>
35#include <linux/usb/otg.h>
36#include <linux/ulpi/interface.h>
37
38#include <linux/phy/phy.h>
39
40#define DWC3_MSG_MAX 500
41
42
43#define DWC3_PULL_UP_TIMEOUT 500
44#define DWC3_BOUNCE_SIZE 1024
45#define DWC3_EP0_SETUP_SIZE 512
46#define DWC3_ENDPOINTS_NUM 32
47#define DWC3_XHCI_RESOURCES_NUM 2
48
49#define DWC3_SCRATCHBUF_SIZE 4096
50#define DWC3_EVENT_BUFFERS_SIZE 4096
51#define DWC3_EVENT_TYPE_MASK 0xfe
52
53#define DWC3_EVENT_TYPE_DEV 0
54#define DWC3_EVENT_TYPE_CARKIT 3
55#define DWC3_EVENT_TYPE_I2C 4
56
57#define DWC3_DEVICE_EVENT_DISCONNECT 0
58#define DWC3_DEVICE_EVENT_RESET 1
59#define DWC3_DEVICE_EVENT_CONNECT_DONE 2
60#define DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE 3
61#define DWC3_DEVICE_EVENT_WAKEUP 4
62#define DWC3_DEVICE_EVENT_HIBER_REQ 5
63#define DWC3_DEVICE_EVENT_EOPF 6
64#define DWC3_DEVICE_EVENT_SOF 7
65#define DWC3_DEVICE_EVENT_ERRATIC_ERROR 9
66#define DWC3_DEVICE_EVENT_CMD_CMPL 10
67#define DWC3_DEVICE_EVENT_OVERFLOW 11
68
69#define DWC3_GEVNTCOUNT_MASK 0xfffc
70#define DWC3_GEVNTCOUNT_EHB BIT(31)
71#define DWC3_GSNPSID_MASK 0xffff0000
72#define DWC3_GSNPSREV_MASK 0xffff
73
74
75#define DWC3_XHCI_REGS_START 0x0
76#define DWC3_XHCI_REGS_END 0x7fff
77#define DWC3_GLOBALS_REGS_START 0xc100
78#define DWC3_GLOBALS_REGS_END 0xc6ff
79#define DWC3_DEVICE_REGS_START 0xc700
80#define DWC3_DEVICE_REGS_END 0xcbff
81#define DWC3_OTG_REGS_START 0xcc00
82#define DWC3_OTG_REGS_END 0xccff
83
84
85#define DWC3_GSBUSCFG0 0xc100
86#define DWC3_GSBUSCFG1 0xc104
87#define DWC3_GTXTHRCFG 0xc108
88#define DWC3_GRXTHRCFG 0xc10c
89#define DWC3_GCTL 0xc110
90#define DWC3_GEVTEN 0xc114
91#define DWC3_GSTS 0xc118
92#define DWC3_GUCTL1 0xc11c
93#define DWC3_GSNPSID 0xc120
94#define DWC3_GGPIO 0xc124
95#define DWC3_GUID 0xc128
96#define DWC3_GUCTL 0xc12c
97#define DWC3_GBUSERRADDR0 0xc130
98#define DWC3_GBUSERRADDR1 0xc134
99#define DWC3_GPRTBIMAP0 0xc138
100#define DWC3_GPRTBIMAP1 0xc13c
101#define DWC3_GHWPARAMS0 0xc140
102#define DWC3_GHWPARAMS1 0xc144
103#define DWC3_GHWPARAMS2 0xc148
104#define DWC3_GHWPARAMS3 0xc14c
105#define DWC3_GHWPARAMS4 0xc150
106#define DWC3_GHWPARAMS5 0xc154
107#define DWC3_GHWPARAMS6 0xc158
108#define DWC3_GHWPARAMS7 0xc15c
109#define DWC3_GDBGFIFOSPACE 0xc160
110#define DWC3_GDBGLTSSM 0xc164
111#define DWC3_GPRTBIMAP_HS0 0xc180
112#define DWC3_GPRTBIMAP_HS1 0xc184
113#define DWC3_GPRTBIMAP_FS0 0xc188
114#define DWC3_GPRTBIMAP_FS1 0xc18c
115#define DWC3_GUCTL2 0xc19c
116
117#define DWC3_VER_NUMBER 0xc1a0
118#define DWC3_VER_TYPE 0xc1a4
119
120#define DWC3_GUSB2PHYCFG(n) (0xc200 + ((n) * 0x04))
121#define DWC3_GUSB2I2CCTL(n) (0xc240 + ((n) * 0x04))
122
123#define DWC3_GUSB2PHYACC(n) (0xc280 + ((n) * 0x04))
124
125#define DWC3_GUSB3PIPECTL(n) (0xc2c0 + ((n) * 0x04))
126
127#define DWC3_GTXFIFOSIZ(n) (0xc300 + ((n) * 0x04))
128#define DWC3_GRXFIFOSIZ(n) (0xc380 + ((n) * 0x04))
129
130#define DWC3_GEVNTADRLO(n) (0xc400 + ((n) * 0x10))
131#define DWC3_GEVNTADRHI(n) (0xc404 + ((n) * 0x10))
132#define DWC3_GEVNTSIZ(n) (0xc408 + ((n) * 0x10))
133#define DWC3_GEVNTCOUNT(n) (0xc40c + ((n) * 0x10))
134
135#define DWC3_GHWPARAMS8 0xc600
136#define DWC3_GFLADJ 0xc630
137
138
139#define DWC3_DCFG 0xc700
140#define DWC3_DCTL 0xc704
141#define DWC3_DEVTEN 0xc708
142#define DWC3_DSTS 0xc70c
143#define DWC3_DGCMDPAR 0xc710
144#define DWC3_DGCMD 0xc714
145#define DWC3_DALEPENA 0xc720
146
147#define DWC3_DEP_BASE(n) (0xc800 + ((n) * 0x10))
148#define DWC3_DEPCMDPAR2 0x00
149#define DWC3_DEPCMDPAR1 0x04
150#define DWC3_DEPCMDPAR0 0x08
151#define DWC3_DEPCMD 0x0c
152
153#define DWC3_DEV_IMOD(n) (0xca00 + ((n) * 0x4))
154
155
156#define DWC3_OCFG 0xcc00
157#define DWC3_OCTL 0xcc04
158#define DWC3_OEVT 0xcc08
159#define DWC3_OEVTEN 0xcc0C
160#define DWC3_OSTS 0xcc10
161
162
163
164
165#define DWC3_GSTS_CUR_MODE (1 << 0)
166
167
168#define DWC3_GDBGFIFOSPACE_NUM(n) ((n) & 0x1f)
169#define DWC3_GDBGFIFOSPACE_TYPE(n) (((n) << 5) & 0x1e0)
170#define DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(n) (((n) >> 16) & 0xffff)
171
172#define DWC3_TXFIFOQ 1
173#define DWC3_RXFIFOQ 3
174#define DWC3_TXREQQ 5
175#define DWC3_RXREQQ 7
176#define DWC3_RXINFOQ 9
177#define DWC3_DESCFETCHQ 13
178#define DWC3_EVENTQ 15
179
180
181#define DWC3_GSBUSCFG0_DATRDREQINFO (0xf << 28)
182#define DWC3_GSBUSCFG0_DESRDREQINFO (0xf << 24)
183#define DWC3_GSBUSCFG0_DATWRREQINFO (0xf << 20)
184#define DWC3_GSBUSCFG0_DESWRREQINFO (0xf << 16)
185
186
187#define DWC3_GRXTHRCFG_MAXRXBURSTSIZE(n) (((n) & 0x1f) << 19)
188#define DWC3_GRXTHRCFG_RXPKTCNT(n) (((n) & 0xf) << 24)
189#define DWC3_GRXTHRCFG_PKTCNTSEL BIT(29)
190
191
192#define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19)
193#define DWC3_GCTL_U2RSTECN BIT(16)
194#define DWC3_GCTL_RAMCLKSEL(x) (((x) & DWC3_GCTL_CLK_MASK) << 6)
195#define DWC3_GCTL_CLK_BUS (0)
196#define DWC3_GCTL_CLK_PIPE (1)
197#define DWC3_GCTL_CLK_PIPEHALF (2)
198#define DWC3_GCTL_CLK_MASK (3)
199
200#define DWC3_GCTL_PRTCAP(n) (((n) & (3 << 12)) >> 12)
201#define DWC3_GCTL_PRTCAPDIR(n) ((n) << 12)
202#define DWC3_GCTL_PRTCAP_HOST 1
203#define DWC3_GCTL_PRTCAP_DEVICE 2
204#define DWC3_GCTL_PRTCAP_OTG 3
205
206#define DWC3_GCTL_CORESOFTRESET BIT(11)
207#define DWC3_GCTL_SOFITPSYNC BIT(10)
208#define DWC3_GCTL_SCALEDOWN(n) ((n) << 4)
209#define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3)
210#define DWC3_GCTL_DISSCRAMBLE BIT(3)
211#define DWC3_GCTL_U2EXIT_LFPS BIT(2)
212#define DWC3_GCTL_GBLHIBERNATIONEN BIT(1)
213#define DWC3_GCTL_DSBLCLKGTNG BIT(0)
214
215
216#define DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS BIT(28)
217#define DWC3_GUCTL1_DEV_L1_EXIT_BY_HW BIT(24)
218
219
220#define DWC3_GUSB2PHYCFG_PHYSOFTRST BIT(31)
221#define DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS BIT(30)
222#define DWC3_GUSB2PHYCFG_SUSPHY BIT(6)
223#define DWC3_GUSB2PHYCFG_ULPI_UTMI BIT(4)
224#define DWC3_GUSB2PHYCFG_ENBLSLPM BIT(8)
225#define DWC3_GUSB2PHYCFG_PHYIF(n) (n << 3)
226#define DWC3_GUSB2PHYCFG_PHYIF_MASK DWC3_GUSB2PHYCFG_PHYIF(1)
227#define DWC3_GUSB2PHYCFG_USBTRDTIM(n) (n << 10)
228#define DWC3_GUSB2PHYCFG_USBTRDTIM_MASK DWC3_GUSB2PHYCFG_USBTRDTIM(0xf)
229#define USBTRDTIM_UTMI_8_BIT 9
230#define USBTRDTIM_UTMI_16_BIT 5
231#define UTMI_PHYIF_16_BIT 1
232#define UTMI_PHYIF_8_BIT 0
233
234
235#define DWC3_GUSB2PHYACC_NEWREGREQ BIT(25)
236#define DWC3_GUSB2PHYACC_BUSY BIT(23)
237#define DWC3_GUSB2PHYACC_WRITE BIT(22)
238#define DWC3_GUSB2PHYACC_ADDR(n) (n << 16)
239#define DWC3_GUSB2PHYACC_EXTEND_ADDR(n) (n << 8)
240#define DWC3_GUSB2PHYACC_DATA(n) (n & 0xff)
241
242
243#define DWC3_GUSB3PIPECTL_PHYSOFTRST BIT(31)
244#define DWC3_GUSB3PIPECTL_U2SSINP3OK BIT(29)
245#define DWC3_GUSB3PIPECTL_DISRXDETINP3 BIT(28)
246#define DWC3_GUSB3PIPECTL_UX_EXIT_PX BIT(27)
247#define DWC3_GUSB3PIPECTL_REQP1P2P3 BIT(24)
248#define DWC3_GUSB3PIPECTL_DEP1P2P3(n) ((n) << 19)
249#define DWC3_GUSB3PIPECTL_DEP1P2P3_MASK DWC3_GUSB3PIPECTL_DEP1P2P3(7)
250#define DWC3_GUSB3PIPECTL_DEP1P2P3_EN DWC3_GUSB3PIPECTL_DEP1P2P3(1)
251#define DWC3_GUSB3PIPECTL_DEPOCHANGE BIT(18)
252#define DWC3_GUSB3PIPECTL_SUSPHY BIT(17)
253#define DWC3_GUSB3PIPECTL_LFPSFILT BIT(9)
254#define DWC3_GUSB3PIPECTL_RX_DETOPOLL BIT(8)
255#define DWC3_GUSB3PIPECTL_TX_DEEPH_MASK DWC3_GUSB3PIPECTL_TX_DEEPH(3)
256#define DWC3_GUSB3PIPECTL_TX_DEEPH(n) ((n) << 1)
257
258
259#define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff)
260#define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000)
261
262
263#define DWC3_GEVNTSIZ_INTMASK BIT(31)
264#define DWC3_GEVNTSIZ_SIZE(n) ((n) & 0xffff)
265
266
267#define DWC3_GHWPARAMS0_MODE(n) ((n) & 0x3)
268#define DWC3_GHWPARAMS0_MODE_GADGET 0
269#define DWC3_GHWPARAMS0_MODE_HOST 1
270#define DWC3_GHWPARAMS0_MODE_DRD 2
271#define DWC3_GHWPARAMS0_MBUS_TYPE(n) (((n) >> 3) & 0x7)
272#define DWC3_GHWPARAMS0_SBUS_TYPE(n) (((n) >> 6) & 0x3)
273#define DWC3_GHWPARAMS0_MDWIDTH(n) (((n) >> 8) & 0xff)
274#define DWC3_GHWPARAMS0_SDWIDTH(n) (((n) >> 16) & 0xff)
275#define DWC3_GHWPARAMS0_AWIDTH(n) (((n) >> 24) & 0xff)
276
277
278#define DWC3_GHWPARAMS1_EN_PWROPT(n) (((n) & (3 << 24)) >> 24)
279#define DWC3_GHWPARAMS1_EN_PWROPT_NO 0
280#define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1
281#define DWC3_GHWPARAMS1_EN_PWROPT_HIB 2
282#define DWC3_GHWPARAMS1_PWROPT(n) ((n) << 24)
283#define DWC3_GHWPARAMS1_PWROPT_MASK DWC3_GHWPARAMS1_PWROPT(3)
284
285
286#define DWC3_GHWPARAMS3_SSPHY_IFC(n) ((n) & 3)
287#define DWC3_GHWPARAMS3_SSPHY_IFC_DIS 0
288#define DWC3_GHWPARAMS3_SSPHY_IFC_GEN1 1
289#define DWC3_GHWPARAMS3_SSPHY_IFC_GEN2 2
290#define DWC3_GHWPARAMS3_HSPHY_IFC(n) (((n) & (3 << 2)) >> 2)
291#define DWC3_GHWPARAMS3_HSPHY_IFC_DIS 0
292#define DWC3_GHWPARAMS3_HSPHY_IFC_UTMI 1
293#define DWC3_GHWPARAMS3_HSPHY_IFC_ULPI 2
294#define DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI 3
295#define DWC3_GHWPARAMS3_FSPHY_IFC(n) (((n) & (3 << 4)) >> 4)
296#define DWC3_GHWPARAMS3_FSPHY_IFC_DIS 0
297#define DWC3_GHWPARAMS3_FSPHY_IFC_ENA 1
298
299
300#define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n) (((n) & (0x0f << 13)) >> 13)
301#define DWC3_MAX_HIBER_SCRATCHBUFS 15
302
303
304#define DWC3_GHWPARAMS6_EN_FPGA BIT(7)
305
306
307#define DWC3_GHWPARAMS7_RAM1_DEPTH(n) ((n) & 0xffff)
308#define DWC3_GHWPARAMS7_RAM2_DEPTH(n) (((n) >> 16) & 0xffff)
309
310
311#define DWC3_GFLADJ_30MHZ_SDBND_SEL BIT(7)
312#define DWC3_GFLADJ_30MHZ_MASK 0x3f
313#define DWC3_GFLADJ_REFCLK_FLADJ (0x3fff << 8)
314
315
316#define DWC3_GUCTL1_RESUME_QUIRK (1 << 10)
317#define DWC3_GUCTL1_IPD_QUIRK (1 << 9)
318
319
320#define DWC3_GUCTL2_RST_ACTBITLATER BIT(14)
321
322
323#define DWC3_DCFG_DEVADDR(addr) ((addr) << 3)
324#define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f)
325
326#define DWC3_DCFG_SPEED_MASK (7 << 0)
327#define DWC3_DCFG_SUPERSPEED_PLUS (5 << 0)
328#define DWC3_DCFG_SUPERSPEED (4 << 0)
329#define DWC3_DCFG_HIGHSPEED (0 << 0)
330#define DWC3_DCFG_FULLSPEED BIT(0)
331#define DWC3_DCFG_LOWSPEED (2 << 0)
332
333#define DWC3_DCFG_NUMP_SHIFT 17
334#define DWC3_DCFG_NUMP(n) (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f)
335#define DWC3_DCFG_NUMP_MASK (0x1f << DWC3_DCFG_NUMP_SHIFT)
336#define DWC3_DCFG_LPM_CAP BIT(22)
337
338
339#define DWC3_DCTL_RUN_STOP BIT(31)
340#define DWC3_DCTL_CSFTRST BIT(30)
341#define DWC3_DCTL_LSFTRST BIT(29)
342
343#define DWC3_DCTL_HIRD_THRES_MASK (0x1f << 24)
344#define DWC3_DCTL_HIRD_THRES(n) ((n) << 24)
345
346#define DWC3_DCTL_APPL1RES BIT(23)
347
348
349#define DWC3_DCTL_TRGTULST_MASK (0x0f << 17)
350#define DWC3_DCTL_TRGTULST(n) ((n) << 17)
351#define DWC3_DCTL_TRGTULST_U2 (DWC3_DCTL_TRGTULST(2))
352#define DWC3_DCTL_TRGTULST_U3 (DWC3_DCTL_TRGTULST(3))
353#define DWC3_DCTL_TRGTULST_SS_DIS (DWC3_DCTL_TRGTULST(4))
354#define DWC3_DCTL_TRGTULST_RX_DET (DWC3_DCTL_TRGTULST(5))
355#define DWC3_DCTL_TRGTULST_SS_INACT (DWC3_DCTL_TRGTULST(6))
356
357
358#define DWC3_DCTL_LPM_ERRATA_MASK DWC3_DCTL_LPM_ERRATA(0xf)
359#define DWC3_DCTL_LPM_ERRATA(n) ((n) << 20)
360
361#define DWC3_DCTL_KEEP_CONNECT BIT(19)
362#define DWC3_DCTL_L1_HIBER_EN BIT(18)
363#define DWC3_DCTL_CRS BIT(17)
364#define DWC3_DCTL_CSS BIT(16)
365
366#define DWC3_DCTL_INITU2ENA BIT(12)
367#define DWC3_DCTL_ACCEPTU2ENA BIT(11)
368#define DWC3_DCTL_INITU1ENA BIT(10)
369#define DWC3_DCTL_ACCEPTU1ENA BIT(9)
370#define DWC3_DCTL_TSTCTRL_MASK (0xf << 1)
371
372#define DWC3_DCTL_ULSTCHNGREQ_MASK (0x0f << 5)
373#define DWC3_DCTL_ULSTCHNGREQ(n) (((n) << 5) & DWC3_DCTL_ULSTCHNGREQ_MASK)
374
375#define DWC3_DCTL_ULSTCHNG_NO_ACTION (DWC3_DCTL_ULSTCHNGREQ(0))
376#define DWC3_DCTL_ULSTCHNG_SS_DISABLED (DWC3_DCTL_ULSTCHNGREQ(4))
377#define DWC3_DCTL_ULSTCHNG_RX_DETECT (DWC3_DCTL_ULSTCHNGREQ(5))
378#define DWC3_DCTL_ULSTCHNG_SS_INACTIVE (DWC3_DCTL_ULSTCHNGREQ(6))
379#define DWC3_DCTL_ULSTCHNG_RECOVERY (DWC3_DCTL_ULSTCHNGREQ(8))
380#define DWC3_DCTL_ULSTCHNG_COMPLIANCE (DWC3_DCTL_ULSTCHNGREQ(10))
381#define DWC3_DCTL_ULSTCHNG_LOOPBACK (DWC3_DCTL_ULSTCHNGREQ(11))
382
383
384#define DWC3_DEVTEN_VNDRDEVTSTRCVEDEN BIT(12)
385#define DWC3_DEVTEN_EVNTOVERFLOWEN BIT(11)
386#define DWC3_DEVTEN_CMDCMPLTEN BIT(10)
387#define DWC3_DEVTEN_ERRTICERREN BIT(9)
388#define DWC3_DEVTEN_SOFEN BIT(7)
389#define DWC3_DEVTEN_EOPFEN BIT(6)
390#define DWC3_DEVTEN_HIBERNATIONREQEVTEN BIT(5)
391#define DWC3_DEVTEN_WKUPEVTEN BIT(4)
392#define DWC3_DEVTEN_ULSTCNGEN BIT(3)
393#define DWC3_DEVTEN_CONNECTDONEEN BIT(2)
394#define DWC3_DEVTEN_USBRSTEN BIT(1)
395#define DWC3_DEVTEN_DISCONNEVTEN BIT(0)
396
397
398#define DWC3_DSTS_DCNRD BIT(29)
399#define DWC3_DSTS_SRE BIT(28)
400
401
402#define DWC3_DSTS_PWRUPREQ BIT(24)
403
404
405#define DWC3_DSTS_RSS BIT(25)
406#define DWC3_DSTS_SSS BIT(24)
407
408#define DWC3_DSTS_COREIDLE BIT(23)
409#define DWC3_DSTS_DEVCTRLHLT BIT(22)
410
411#define DWC3_DSTS_USBLNKST_MASK (0x0f << 18)
412#define DWC3_DSTS_USBLNKST(n) (((n) & DWC3_DSTS_USBLNKST_MASK) >> 18)
413
414#define DWC3_DSTS_RXFIFOEMPTY BIT(17)
415
416#define DWC3_DSTS_SOFFN_MASK (0x3fff << 3)
417#define DWC3_DSTS_SOFFN(n) (((n) & DWC3_DSTS_SOFFN_MASK) >> 3)
418
419#define DWC3_DSTS_CONNECTSPD (7 << 0)
420
421#define DWC3_DSTS_SUPERSPEED_PLUS (5 << 0)
422#define DWC3_DSTS_SUPERSPEED (4 << 0)
423#define DWC3_DSTS_HIGHSPEED (0 << 0)
424#define DWC3_DSTS_FULLSPEED BIT(0)
425#define DWC3_DSTS_LOWSPEED (2 << 0)
426
427
428#define DWC3_DGCMD_SET_LMP 0x01
429#define DWC3_DGCMD_SET_PERIODIC_PAR 0x02
430#define DWC3_DGCMD_XMIT_FUNCTION 0x03
431
432
433#define DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO 0x04
434#define DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI 0x05
435
436#define DWC3_DGCMD_SELECTED_FIFO_FLUSH 0x09
437#define DWC3_DGCMD_ALL_FIFO_FLUSH 0x0a
438#define DWC3_DGCMD_SET_ENDPOINT_NRDY 0x0c
439#define DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK 0x10
440
441#define DWC3_DGCMD_STATUS(n) (((n) >> 12) & 0x0F)
442#define DWC3_DGCMD_CMDACT BIT(10)
443#define DWC3_DGCMD_CMDIOC BIT(8)
444
445
446#define DWC3_DGCMDPAR_FORCE_LINKPM_ACCEPT BIT(0)
447#define DWC3_DGCMDPAR_FIFO_NUM(n) ((n) << 0)
448#define DWC3_DGCMDPAR_RX_FIFO (0 << 5)
449#define DWC3_DGCMDPAR_TX_FIFO BIT(5)
450#define DWC3_DGCMDPAR_LOOPBACK_DIS (0 << 0)
451#define DWC3_DGCMDPAR_LOOPBACK_ENA BIT(0)
452
453
454#define DWC3_DEPCMD_PARAM_SHIFT 16
455#define DWC3_DEPCMD_PARAM(x) ((x) << DWC3_DEPCMD_PARAM_SHIFT)
456#define DWC3_DEPCMD_GET_RSC_IDX(x) (((x) >> DWC3_DEPCMD_PARAM_SHIFT) & 0x7f)
457#define DWC3_DEPCMD_STATUS(x) (((x) >> 12) & 0x0F)
458#define DWC3_DEPCMD_HIPRI_FORCERM BIT(11)
459#define DWC3_DEPCMD_CLEARPENDIN BIT(11)
460#define DWC3_DEPCMD_CMDACT BIT(10)
461#define DWC3_DEPCMD_CMDIOC BIT(8)
462
463#define DWC3_DEPCMD_DEPSTARTCFG (0x09 << 0)
464#define DWC3_DEPCMD_ENDTRANSFER (0x08 << 0)
465#define DWC3_DEPCMD_UPDATETRANSFER (0x07 << 0)
466#define DWC3_DEPCMD_STARTTRANSFER (0x06 << 0)
467#define DWC3_DEPCMD_CLEARSTALL (0x05 << 0)
468#define DWC3_DEPCMD_SETSTALL (0x04 << 0)
469
470#define DWC3_DEPCMD_GETSEQNUMBER (0x03 << 0)
471
472#define DWC3_DEPCMD_GETEPSTATE (0x03 << 0)
473#define DWC3_DEPCMD_SETTRANSFRESOURCE (0x02 << 0)
474#define DWC3_DEPCMD_SETEPCONFIG (0x01 << 0)
475
476#define DWC3_DEPCMD_CMD(x) ((x) & 0xf)
477
478
479#define DWC3_DALEPENA_EP(n) BIT(n)
480
481#define DWC3_DEPCMD_TYPE_CONTROL 0
482#define DWC3_DEPCMD_TYPE_ISOC 1
483#define DWC3_DEPCMD_TYPE_BULK 2
484#define DWC3_DEPCMD_TYPE_INTR 3
485
486#define DWC3_DEV_IMOD_COUNT_SHIFT 16
487#define DWC3_DEV_IMOD_COUNT_MASK (0xffff << 16)
488#define DWC3_DEV_IMOD_INTERVAL_SHIFT 0
489#define DWC3_DEV_IMOD_INTERVAL_MASK (0xffff << 0)
490
491
492
493struct dwc3_trb;
494
495
496
497
498
499
500
501
502
503
504
505
506struct dwc3_event_buffer {
507 void *buf;
508 void *cache;
509 unsigned length;
510 unsigned int lpos;
511 unsigned int count;
512 unsigned int flags;
513
514#define DWC3_EVENT_PENDING BIT(0)
515
516 dma_addr_t dma;
517
518 struct dwc3 *dwc;
519};
520
521#define DWC3_EP_FLAG_STALLED BIT(0)
522#define DWC3_EP_FLAG_WEDGED BIT(1)
523
524#define DWC3_EP_DIRECTION_TX true
525#define DWC3_EP_DIRECTION_RX false
526
527#define DWC3_TRB_NUM 256
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554struct dwc3_ep {
555 struct usb_ep endpoint;
556 struct list_head pending_list;
557 struct list_head started_list;
558
559 wait_queue_head_t wait_end_transfer;
560
561 spinlock_t lock;
562 void __iomem *regs;
563
564 struct dwc3_trb *trb_pool;
565 dma_addr_t trb_pool_dma;
566 struct dwc3 *dwc;
567
568 u32 saved_state;
569 unsigned flags;
570#define DWC3_EP_ENABLED BIT(0)
571#define DWC3_EP_STALL BIT(1)
572#define DWC3_EP_WEDGE BIT(2)
573#define DWC3_EP_BUSY BIT(4)
574#define DWC3_EP_PENDING_REQUEST BIT(5)
575#define DWC3_EP_MISSED_ISOC BIT(6)
576#define DWC3_EP_END_TRANSFER_PENDING BIT(7)
577#define DWC3_EP_TRANSFER_STARTED BIT(8)
578
579
580#define DWC3_EP0_DIR_IN BIT(31)
581
582
583
584
585
586
587
588
589
590
591 u8 trb_enqueue;
592 u8 trb_dequeue;
593
594 u8 number;
595 u8 type;
596 u8 resource_index;
597 u32 allocated_requests;
598 u32 queued_requests;
599 u32 interval;
600
601 char name[20];
602
603 unsigned direction:1;
604 unsigned stream_capable:1;
605#define STREAM_TIMEOUT 50
606 struct timer_list stream_timeout_timer;
607};
608
609enum dwc3_phy {
610 DWC3_PHY_UNKNOWN = 0,
611 DWC3_PHY_USB3,
612 DWC3_PHY_USB2,
613};
614
615enum dwc3_ep0_next {
616 DWC3_EP0_UNKNOWN = 0,
617 DWC3_EP0_COMPLETE,
618 DWC3_EP0_NRDY_DATA,
619 DWC3_EP0_NRDY_STATUS,
620};
621
622enum dwc3_ep0_state {
623 EP0_UNCONNECTED = 0,
624 EP0_SETUP_PHASE,
625 EP0_DATA_PHASE,
626 EP0_STATUS_PHASE,
627};
628
629enum dwc3_link_state {
630
631 DWC3_LINK_STATE_U0 = 0x00,
632 DWC3_LINK_STATE_U1 = 0x01,
633 DWC3_LINK_STATE_U2 = 0x02,
634 DWC3_LINK_STATE_U3 = 0x03,
635 DWC3_LINK_STATE_SS_DIS = 0x04,
636 DWC3_LINK_STATE_RX_DET = 0x05,
637 DWC3_LINK_STATE_SS_INACT = 0x06,
638 DWC3_LINK_STATE_POLL = 0x07,
639 DWC3_LINK_STATE_RECOV = 0x08,
640 DWC3_LINK_STATE_HRESET = 0x09,
641 DWC3_LINK_STATE_CMPLY = 0x0a,
642 DWC3_LINK_STATE_LPBK = 0x0b,
643 DWC3_LINK_STATE_RESET = 0x0e,
644 DWC3_LINK_STATE_RESUME = 0x0f,
645 DWC3_LINK_STATE_MASK = 0x0f,
646};
647
648
649#define DWC3_TRB_SIZE_MASK (0x00ffffff)
650#define DWC3_TRB_SIZE_LENGTH(n) ((n) & DWC3_TRB_SIZE_MASK)
651#define DWC3_TRB_SIZE_PCM1(n) (((n) & 0x03) << 24)
652#define DWC3_TRB_SIZE_TRBSTS(n) (((n) & (0x0f << 28)) >> 28)
653
654#define DWC3_TRBSTS_OK 0
655#define DWC3_TRBSTS_MISSED_ISOC 1
656#define DWC3_TRBSTS_SETUP_PENDING 2
657#define DWC3_TRB_STS_XFER_IN_PROG 4
658
659
660#define DWC3_TRB_CTRL_HWO BIT(0)
661#define DWC3_TRB_CTRL_LST BIT(1)
662#define DWC3_TRB_CTRL_CHN BIT(2)
663#define DWC3_TRB_CTRL_CSP BIT(3)
664#define DWC3_TRB_CTRL_TRBCTL(n) (((n) & 0x3f) << 4)
665#define DWC3_TRB_CTRL_ISP_IMI BIT(10)
666#define DWC3_TRB_CTRL_IOC BIT(11)
667#define DWC3_TRB_CTRL_SID_SOFN(n) (((n) & 0xffff) << 14)
668
669#define DWC3_TRBCTL_TYPE(n) ((n) & (0x3f << 4))
670#define DWC3_TRBCTL_NORMAL DWC3_TRB_CTRL_TRBCTL(1)
671#define DWC3_TRBCTL_CONTROL_SETUP DWC3_TRB_CTRL_TRBCTL(2)
672#define DWC3_TRBCTL_CONTROL_STATUS2 DWC3_TRB_CTRL_TRBCTL(3)
673#define DWC3_TRBCTL_CONTROL_STATUS3 DWC3_TRB_CTRL_TRBCTL(4)
674#define DWC3_TRBCTL_CONTROL_DATA DWC3_TRB_CTRL_TRBCTL(5)
675#define DWC3_TRBCTL_ISOCHRONOUS_FIRST DWC3_TRB_CTRL_TRBCTL(6)
676#define DWC3_TRBCTL_ISOCHRONOUS DWC3_TRB_CTRL_TRBCTL(7)
677#define DWC3_TRBCTL_LINK_TRB DWC3_TRB_CTRL_TRBCTL(8)
678
679
680
681
682
683
684
685
686struct dwc3_trb {
687 u32 bpl;
688 u32 bph;
689 u32 size;
690 u32 ctrl;
691} __packed;
692
693
694
695
696
697
698
699
700
701
702
703
704
705struct dwc3_hwparams {
706 u32 hwparams0;
707 u32 hwparams1;
708 u32 hwparams2;
709 u32 hwparams3;
710 u32 hwparams4;
711 u32 hwparams5;
712 u32 hwparams6;
713 u32 hwparams7;
714 u32 hwparams8;
715};
716
717
718#define DWC3_MODE(n) ((n) & 0x7)
719
720#define DWC3_MDWIDTH(n) (((n) & 0xff00) >> 8)
721
722
723#define DWC3_NUM_INT(n) (((n) & (0x3f << 15)) >> 15)
724
725
726#define DWC3_NUM_IN_EPS_MASK (0x1f << 18)
727#define DWC3_NUM_EPS_MASK (0x3f << 12)
728#define DWC3_NUM_EPS(p) (((p)->hwparams3 & \
729 (DWC3_NUM_EPS_MASK)) >> 12)
730#define DWC3_NUM_IN_EPS(p) (((p)->hwparams3 & \
731 (DWC3_NUM_IN_EPS_MASK)) >> 18)
732
733
734#define DWC3_RAM1_DEPTH(n) ((n) & 0xffff)
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753struct dwc3_request {
754 struct usb_request request;
755 struct list_head list;
756 struct dwc3_ep *dep;
757 struct scatterlist *sg;
758 struct scatterlist *sg_to_start;
759
760 unsigned num_pending_sgs;
761 unsigned int num_queued_sgs;
762 u8 first_trb_index;
763 unsigned remaining;
764 u8 epnum;
765 struct dwc3_trb *trb;
766 dma_addr_t trb_dma;
767
768 unsigned unaligned:1;
769 unsigned direction:1;
770 unsigned mapped:1;
771 unsigned started:1;
772 unsigned zero:1;
773};
774
775
776
777
778
779struct dwc3_scratchpad_array {
780 __le64 dma_adr[DWC3_MAX_HIBER_SCRATCHBUFS];
781};
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903struct dwc3 {
904 struct work_struct drd_work;
905 struct dwc3_trb *ep0_trb;
906 void *bounce;
907 void *scratchbuf;
908 u8 *setup_buf;
909 dma_addr_t ep0_trb_addr;
910 dma_addr_t bounce_addr;
911 dma_addr_t scratch_addr;
912 struct dwc3_request ep0_usb_req;
913 struct completion ep0_in_setup;
914
915
916 spinlock_t lock;
917
918 struct device *dev;
919 struct device *sysdev;
920
921 struct platform_device *xhci;
922 struct resource xhci_resources[DWC3_XHCI_RESOURCES_NUM];
923
924 struct dwc3_event_buffer *ev_buf;
925 struct dwc3_ep *eps[DWC3_ENDPOINTS_NUM];
926
927 struct usb_gadget gadget;
928 struct usb_gadget_driver *gadget_driver;
929
930 struct dwc3_otg *otg;
931
932 struct usb_phy *usb2_phy;
933 struct usb_phy *usb3_phy;
934
935 struct phy *usb2_generic_phy;
936 struct phy *usb3_generic_phy;
937
938 struct ulpi *ulpi;
939
940 void __iomem *regs;
941 size_t regs_size;
942
943 enum usb_dr_mode dr_mode;
944 u32 current_dr_role;
945 u32 desired_dr_role;
946 struct extcon_dev *edev;
947 struct notifier_block edev_nb;
948 enum usb_phy_interface hsphy_mode;
949
950 u32 fladj;
951 bool refclk_fladj;
952 u32 irq_gadget;
953 u32 nr_scratch;
954 u32 u1u2;
955 u32 maximum_speed;
956
957
958
959
960
961
962
963
964 u32 revision;
965
966#define DWC3_REVISION_173A 0x5533173a
967#define DWC3_REVISION_175A 0x5533175a
968#define DWC3_REVISION_180A 0x5533180a
969#define DWC3_REVISION_183A 0x5533183a
970#define DWC3_REVISION_185A 0x5533185a
971#define DWC3_REVISION_187A 0x5533187a
972#define DWC3_REVISION_188A 0x5533188a
973#define DWC3_REVISION_190A 0x5533190a
974#define DWC3_REVISION_194A 0x5533194a
975#define DWC3_REVISION_200A 0x5533200a
976#define DWC3_REVISION_202A 0x5533202a
977#define DWC3_REVISION_210A 0x5533210a
978#define DWC3_REVISION_220A 0x5533220a
979#define DWC3_REVISION_230A 0x5533230a
980#define DWC3_REVISION_240A 0x5533240a
981#define DWC3_REVISION_250A 0x5533250a
982#define DWC3_REVISION_260A 0x5533260a
983#define DWC3_REVISION_270A 0x5533270a
984#define DWC3_REVISION_280A 0x5533280a
985#define DWC3_REVISION_290A 0x5533290a
986#define DWC3_REVISION_300A 0x5533300a
987#define DWC3_REVISION_310A 0x5533310a
988
989
990
991
992
993#define DWC3_REVISION_IS_DWC31 0x80000000
994#define DWC3_USB31_REVISION_110A (0x3131302a | DWC3_REVISION_IS_DWC31)
995#define DWC3_USB31_REVISION_120A (0x3132302a | DWC3_REVISION_IS_DWC31)
996
997 enum dwc3_ep0_next ep0_next_event;
998 enum dwc3_ep0_state ep0state;
999 enum dwc3_link_state link_state;
1000
1001 u16 isoch_delay;
1002 u16 u2sel;
1003 u16 u2pel;
1004 u8 u1sel;
1005 u8 u1pel;
1006
1007 u8 speed;
1008
1009 u8 num_eps;
1010
1011 struct dwc3_hwparams hwparams;
1012 struct dentry *root;
1013 struct debugfs_regset32 *regset;
1014
1015 u8 test_mode;
1016 u8 test_mode_nr;
1017 u8 lpm_nyet_threshold;
1018 u8 hird_threshold;
1019
1020 const char *hsphy_interface;
1021
1022 unsigned connected:1;
1023 unsigned delayed_status:1;
1024 unsigned ep0_bounced:1;
1025 unsigned ep0_expect_in:1;
1026 unsigned has_hibernation:1;
1027 unsigned sysdev_is_parent:1;
1028 unsigned has_lpm_erratum:1;
1029 unsigned is_utmi_l1_suspend:1;
1030 unsigned is_fpga:1;
1031 unsigned pending_events:1;
1032 unsigned pullups_connected:1;
1033 unsigned setup_packet_pending:1;
1034 unsigned three_stage_setup:1;
1035 unsigned usb3_lpm_capable:1;
1036 unsigned remote_wakeup:1;
1037
1038 unsigned disable_scramble_quirk:1;
1039 unsigned u2exit_lfps_quirk:1;
1040 unsigned u2ss_inp3_quirk:1;
1041 unsigned req_p1p2p3_quirk:1;
1042 unsigned del_p1p2p3_quirk:1;
1043 unsigned del_phy_power_chg_quirk:1;
1044 unsigned lfps_filter_quirk:1;
1045 unsigned rx_detect_poll_quirk:1;
1046 unsigned dis_u3_susphy_quirk:1;
1047 unsigned dis_u2_susphy_quirk:1;
1048 unsigned dis_enblslpm_quirk:1;
1049 unsigned dis_rxdet_inp3_quirk:1;
1050 unsigned dis_u2_freeclk_exists_quirk:1;
1051 unsigned dis_del_phy_power_chg_quirk:1;
1052 unsigned enable_guctl1_resume_quirk:1;
1053 unsigned enable_guctl1_ipd_quirk:1;
1054 unsigned dis_tx_ipgap_linecheck_quirk:1;
1055
1056 unsigned tx_de_emphasis_quirk:1;
1057 unsigned tx_de_emphasis:2;
1058 unsigned is_hibernated:1;
1059
1060 u16 imod_interval;
1061 bool is_d3;
1062 u32 *saved_regs;
1063 u32 irq_wakeup;
1064 bool force_hiber_wake;
1065};
1066
1067#define work_to_dwc(w) (container_of((w), struct dwc3, drd_work))
1068
1069
1070
1071struct dwc3_event_type {
1072 u32 is_devspec:1;
1073 u32 type:7;
1074 u32 reserved8_31:24;
1075} __packed;
1076
1077#define DWC3_DEPEVT_XFERCOMPLETE 0x01
1078#define DWC3_DEPEVT_XFERINPROGRESS 0x02
1079#define DWC3_DEPEVT_XFERNOTREADY 0x03
1080#define DWC3_DEPEVT_RXTXFIFOEVT 0x04
1081#define DWC3_DEPEVT_STREAMEVT 0x06
1082#define DWC3_DEPEVT_EPCMDCMPLT 0x07
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103struct dwc3_event_depevt {
1104 u32 one_bit:1;
1105 u32 endpoint_number:5;
1106 u32 endpoint_event:4;
1107 u32 reserved11_10:2;
1108 u32 status:4;
1109
1110
1111#define DEPEVT_STATUS_TRANSFER_ACTIVE BIT(3)
1112
1113
1114#define DEPEVT_STATUS_BUSERR BIT(0)
1115#define DEPEVT_STATUS_SHORT BIT(1)
1116#define DEPEVT_STATUS_IOC BIT(2)
1117#define DEPEVT_STATUS_LST BIT(3)
1118
1119
1120#define DEPEVT_STREAMEVT_FOUND 1
1121#define DEPEVT_STREAMEVT_NOTFOUND 2
1122
1123
1124#define DEPEVT_STATUS_CONTROL_DATA 1
1125#define DEPEVT_STATUS_CONTROL_STATUS 2
1126#define DEPEVT_STATUS_CONTROL_PHASE(n) ((n) & 3)
1127
1128
1129#define DEPEVT_TRANSFER_NO_RESOURCE 1
1130#define DEPEVT_TRANSFER_BUS_EXPIRY 2
1131
1132 u32 parameters:16;
1133
1134
1135#define DEPEVT_PARAMETER_CMD(n) (((n) & (0xf << 8)) >> 8)
1136} __packed;
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160struct dwc3_event_devt {
1161 u32 one_bit:1;
1162 u32 device_event:7;
1163 u32 type:4;
1164 u32 reserved15_12:4;
1165 u32 event_info:9;
1166 u32 reserved31_25:7;
1167} __packed;
1168
1169
1170
1171
1172
1173
1174
1175
1176struct dwc3_event_gevt {
1177 u32 one_bit:1;
1178 u32 device_event:7;
1179 u32 phy_port_number:4;
1180 u32 reserved31_12:20;
1181} __packed;
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191union dwc3_event {
1192 u32 raw;
1193 struct dwc3_event_type type;
1194 struct dwc3_event_depevt depevt;
1195 struct dwc3_event_devt devt;
1196 struct dwc3_event_gevt gevt;
1197};
1198
1199
1200
1201
1202
1203
1204
1205
1206struct dwc3_gadget_ep_cmd_params {
1207 u32 param2;
1208 u32 param1;
1209 u32 param0;
1210};
1211
1212
1213
1214
1215
1216#define DWC3_HAS_PERIPHERAL BIT(0)
1217#define DWC3_HAS_XHCI BIT(1)
1218#define DWC3_HAS_OTG BIT(3)
1219
1220
1221void dwc3_set_mode(struct dwc3 *dwc, u32 mode);
1222u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type);
1223
1224
1225static inline bool dwc3_is_usb3(struct dwc3 *dwc)
1226{
1227 return !(dwc->revision & DWC3_REVISION_IS_DWC31);
1228}
1229
1230
1231static inline bool dwc3_is_usb31(struct dwc3 *dwc)
1232{
1233 return !!(dwc->revision & DWC3_REVISION_IS_DWC31);
1234}
1235
1236#if IS_ENABLED(CONFIG_USB_DWC3_OF_SIMPLE)
1237int dwc3_enable_hw_coherency(struct device *dev);
1238void dwc3_set_phydata(struct device *dev, struct phy *phy);
1239void dwc3_simple_wakeup_capable(struct device *dev, bool wakeup);
1240void dwc3_set_simple_data(struct dwc3 *dwc);
1241void dwc3_simple_check_quirks(struct dwc3 *dwc);
1242int dwc3_set_usb_core_power(struct dwc3 *dwc, bool on);
1243#else
1244static inline int dwc3_enable_hw_coherency(struct device *dev)
1245{ return 1; }
1246static inline void dwc3_set_phydata(struct device *dev, struct phy *phy)
1247{ ; }
1248void dwc3_simple_wakeup_capable(struct device *dev, bool wakeup)
1249{ ; }
1250void dwc3_set_simple_data(struct dwc3 *dwc)
1251{ ; }
1252void dwc3_simple_check_quirks(struct dwc3 *dwc)
1253{ ; }
1254int dwc3_set_usb_core_power(struct dwc3 *dwc, bool on)
1255{ ; }
1256#endif
1257
1258bool dwc3_has_imod(struct dwc3 *dwc);
1259
1260#if IS_ENABLED(CONFIG_USB_DWC3_HOST) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)\
1261 || IS_ENABLED(CONFIG_USB_DWC3_OTG)
1262int dwc3_host_init(struct dwc3 *dwc);
1263void dwc3_host_exit(struct dwc3 *dwc);
1264#else
1265static inline int dwc3_host_init(struct dwc3 *dwc)
1266{ return 0; }
1267static inline void dwc3_host_exit(struct dwc3 *dwc)
1268{ }
1269#endif
1270
1271#if IS_ENABLED(CONFIG_USB_DWC3_GADGET) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)\
1272 || IS_ENABLED(CONFIG_USB_DWC3_OTG)
1273int dwc3_gadget_init(struct dwc3 *dwc);
1274void dwc3_gadget_exit(struct dwc3 *dwc);
1275int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode);
1276int dwc3_gadget_get_link_state(struct dwc3 *dwc);
1277int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state);
1278int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd,
1279 struct dwc3_gadget_ep_cmd_params *params);
1280int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param);
1281int dwc3_core_init(struct dwc3 *dwc);
1282#else
1283static inline int dwc3_gadget_init(struct dwc3 *dwc)
1284{ return 0; }
1285static inline void dwc3_gadget_exit(struct dwc3 *dwc)
1286{ }
1287static inline int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode)
1288{ return 0; }
1289static inline int dwc3_gadget_get_link_state(struct dwc3 *dwc)
1290{ return 0; }
1291static inline int dwc3_gadget_set_link_state(struct dwc3 *dwc,
1292 enum dwc3_link_state state)
1293{ return 0; }
1294
1295static inline int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd,
1296 struct dwc3_gadget_ep_cmd_params *params)
1297{ return 0; }
1298static inline int dwc3_send_gadget_generic_command(struct dwc3 *dwc,
1299 int cmd, u32 param)
1300{ return 0; }
1301#endif
1302
1303#if IS_ENABLED(CONFIG_USB_DWC3_OTG)
1304int dwc3_otg_init(struct dwc3 *dwc);
1305#else
1306static inline int dwc3_otg_init(struct dwc3 *dwc)
1307{ return 0; }
1308#endif
1309
1310#if IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
1311int dwc3_drd_init(struct dwc3 *dwc);
1312void dwc3_drd_exit(struct dwc3 *dwc);
1313#else
1314static inline int dwc3_drd_init(struct dwc3 *dwc)
1315{ return 0; }
1316static inline void dwc3_drd_exit(struct dwc3 *dwc)
1317{ }
1318#endif
1319
1320
1321#if !IS_ENABLED(CONFIG_USB_DWC3_HOST)
1322int dwc3_gadget_suspend(struct dwc3 *dwc);
1323int dwc3_gadget_resume(struct dwc3 *dwc);
1324void dwc3_gadget_process_pending_events(struct dwc3 *dwc);
1325#else
1326static inline int dwc3_gadget_suspend(struct dwc3 *dwc)
1327{
1328 return 0;
1329}
1330
1331static inline int dwc3_gadget_resume(struct dwc3 *dwc)
1332{
1333 return 0;
1334}
1335
1336static inline void dwc3_gadget_process_pending_events(struct dwc3 *dwc)
1337{
1338}
1339#endif
1340
1341#if IS_ENABLED(CONFIG_USB_DWC3_ULPI)
1342int dwc3_ulpi_init(struct dwc3 *dwc);
1343void dwc3_ulpi_exit(struct dwc3 *dwc);
1344#else
1345static inline int dwc3_ulpi_init(struct dwc3 *dwc)
1346{ return 0; }
1347static inline void dwc3_ulpi_exit(struct dwc3 *dwc)
1348{ }
1349#endif
1350
1351int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length);
1352void dwc3_free_event_buffers(struct dwc3 *dwc);
1353int dwc3_event_buffers_setup(struct dwc3 *dwc);
1354
1355#endif
1356