blob: 36bdb6fd74305ae1a88756e1859c8c3a1707a42b [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#ifndef __DWC3_REG_H__
2#define __DWC3_REG_H__
3
4/* Global constants */
5#define DWC3_EP0_BOUNCE_SIZE 512
6#define DWC3_ENDPOINTS_NUM 32
7#define DWC3_XHCI_RESOURCES_NUM 2
8
9#define DWC3_SCRATCHBUF_SIZE 4096 /* each buffer is assumed to be 4KiB */
10#define DWC3_EVENT_SIZE 4 /* bytes */
11#define DWC3_EVENT_MAX_NUM 64 /* 2 events/endpoint */
12#define DWC3_EVENT_BUFFERS_SIZE (DWC3_EVENT_SIZE * DWC3_EVENT_MAX_NUM)
13#define DWC3_EVENT_TYPE_MASK 0xfe
14
15#define DWC3_EVENT_TYPE_DEV 0
16#define DWC3_EVENT_TYPE_CARKIT 3
17#define DWC3_EVENT_TYPE_I2C 4
18
19#define DWC3_DEVICE_EVENT_DISCONNECT 0
20#define DWC3_DEVICE_EVENT_RESET 1
21#define DWC3_DEVICE_EVENT_CONNECT_DONE 2
22#define DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE 3
23#define DWC3_DEVICE_EVENT_WAKEUP 4
24#define DWC3_DEVICE_EVENT_HIBER_REQ 5
25#define DWC3_DEVICE_EVENT_EOPF 6
26#define DWC3_DEVICE_EVENT_SOF 7
27#define DWC3_DEVICE_EVENT_ERRATIC_ERROR 9
28#define DWC3_DEVICE_EVENT_CMD_CMPL 10
29#define DWC3_DEVICE_EVENT_OVERFLOW 11
30
31#define DWC3_GEVNTCOUNT_MASK 0xfffc
32#define DWC3_GSNPSID_MASK 0xffff0000
33#define DWC3_GSNPSREV_MASK 0xffff
34
35/* DWC3 registers memory space boundries */
36#define DWC3_XHCI_REGS_START 0x0
37#define DWC3_XHCI_REGS_END 0x7fff
38#define DWC3_GLOBALS_REGS_START 0xc100
39#define DWC3_GLOBALS_REGS_END 0xc6ff
40#define DWC3_DEVICE_REGS_START 0xc700
41#define DWC3_DEVICE_REGS_END 0xcbff
42#define DWC3_OTG_REGS_START 0xcc00
43#define DWC3_OTG_REGS_END 0xccff
44
45/* Global Registers */
46#define DWC3_GSBUSCFG0 0xc100
47#define DWC3_GSBUSCFG1 0xc104
48#define DWC3_GTXTHRCFG 0xc108
49#define DWC3_GRXTHRCFG 0xc10c
50#define DWC3_GCTL 0xc110
51#define DWC3_GEVTEN 0xc114
52#define DWC3_GSTS 0xc118
53#define DWC3_GUCTL1 0xc11c
54#define DWC3_GSNPSID 0xc120
55#define DWC3_GGPIO 0xc124
56#define DWC3_GUID 0xc128
57#define DWC3_GUCTL 0xc12c
58#define DWC3_GBUSERRADDR0 0xc130
59#define DWC3_GBUSERRADDR1 0xc134
60#define DWC3_GPRTBIMAP0 0xc138
61#define DWC3_GPRTBIMAP1 0xc13c
62#define DWC3_GHWPARAMS0 0xc140
63#define DWC3_GHWPARAMS1 0xc144
64#define DWC3_GHWPARAMS2 0xc148
65#define DWC3_GHWPARAMS3 0xc14c
66#define DWC3_GHWPARAMS4 0xc150
67#define DWC3_GHWPARAMS5 0xc154
68#define DWC3_GHWPARAMS6 0xc158
69#define DWC3_GHWPARAMS7 0xc15c
70#define DWC3_GDBGFIFOSPACE 0xc160
71#define DWC3_GDBGLTSSM 0xc164
72#define DWC3_GPRTBIMAP_HS0 0xc180
73#define DWC3_GPRTBIMAP_HS1 0xc184
74#define DWC3_GPRTBIMAP_FS0 0xc188
75#define DWC3_GPRTBIMAP_FS1 0xc18c
76
77#define DWC3_GUSB2PHYCFG(n) (0xc200 + (n * 0x04))
78#define DWC3_GUSB2I2CCTL(n) (0xc240 + (n * 0x04))
79
80#define DWC3_GUSB2PHYACC(n) (0xc280 + (n * 0x04))
81
82#define DWC3_GUSB3PIPECTL(n) (0xc2c0 + (n * 0x04))
83
84#define DWC3_GTXFIFOSIZ(n) (0xc300 + (n * 0x04))
85#define DWC3_GRXFIFOSIZ(n) (0xc380 + (n * 0x04))
86
87#define DWC3_GEVNTADRLO(n) (0xc400 + (n * 0x10))
88#define DWC3_GEVNTADRHI(n) (0xc404 + (n * 0x10))
89#define DWC3_GEVNTSIZ(n) (0xc408 + (n * 0x10))
90#define DWC3_GEVNTCOUNT(n) (0xc40c + (n * 0x10))
91
92#define DWC3_GHWPARAMS8 0xc600
93
94/* Device Registers */
95#define DWC3_DCFG 0xc700
96#define DWC3_DCTL 0xc704
97#define DWC3_DEVTEN 0xc708
98#define DWC3_DSTS 0xc70c
99#define DWC3_DGCMDPAR 0xc710
100#define DWC3_DGCMD 0xc714
101#define DWC3_DALEPENA 0xc720
102#define DWC3_DEPCMDPAR2(n) (0xc800 + (n * 0x10))
103#define DWC3_DEPCMDPAR1(n) (0xc804 + (n * 0x10))
104#define DWC3_DEPCMDPAR0(n) (0xc808 + (n * 0x10))
105#define DWC3_DEPCMD(n) (0xc80c + (n * 0x10))
106
107/* OTG Registers */
108#define DWC3_OCFG 0xcc00
109#define DWC3_OCTL 0xcc04
110#define DWC3_OEVT 0xcc08
111#define DWC3_OEVTEN 0xcc0C
112#define DWC3_OSTS 0xcc10
113
114/* Bit fields */
115
116/* Global Configuration Register */
117#define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19)
118#define DWC3_GCTL_U2RSTECN (1 << 16)
119#define DWC3_GCTL_RAMCLKSEL(x) (((x) & DWC3_GCTL_CLK_MASK) << 6)
120#define DWC3_GCTL_CLK_BUS (0)
121#define DWC3_GCTL_CLK_PIPE (1)
122#define DWC3_GCTL_CLK_PIPEHALF (2)
123#define DWC3_GCTL_CLK_MASK (3)
124
125#define DWC3_GCTL_PRTCAP(n) (((n) & (3 << 12)) >> 12)
126#define DWC3_GCTL_PRTCAPDIR(n) ((n) << 12)
127#define DWC3_GCTL_PRTCAP_HOST 1
128#define DWC3_GCTL_PRTCAP_DEVICE 2
129#define DWC3_GCTL_PRTCAP_OTG 3
130
131#define DWC3_GCTL_CORESOFTRESET (1 << 11)
132#define DWC3_GCTL_SOFITPSYNC (1 << 10)
133#define DWC3_GCTL_SCALEDOWN(n) ((n) << 4)
134#define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3)
135#define DWC3_GCTL_DISSCRAMBLE (1 << 3)
136#define DWC3_GCTL_U2EXIT_LFPS (1 << 2)
137#define DWC3_GCTL_GBLHIBERNATIONEN (1 << 1)
138#define DWC3_GCTL_DSBLCLKGTNG (1 << 0)
139
140/* Global User Control Register */
141#define DWC3_GUCTL_HSTINAUTORETRY BIT(14)
142
143/* Global User Control 1 Register */
144#define DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS BIT(28)
145#define DWC3_GUCTL1_DEV_L1_EXIT_BY_HW BIT(24)
146
147/* Global USB2 PHY Configuration Register */
148#define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31)
149#define DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS (1 << 30)
150#define DWC3_GUSB2PHYCFG_ULPI_UTMI (1 << 4)
151#define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6)
152#define DWC3_GUSB2PHYCFG_ENBLSLPM (1 << 8)
153#define DWC3_GUSB2PHYCFG_PHYIF(n) ((n) << 3)
154#define DWC3_GUSB2PHYCFG_PHYIF_MASK DWC3_GUSB2PHYCFG_PHYIF(1)
155#define DWC3_GUSB2PHYCFG_USBTRDTIM(n) ((n) << 10)
156#define DWC3_GUSB2PHYCFG_USBTRDTIM_MASK DWC3_GUSB2PHYCFG_USBTRDTIM(0xf)
157#define USBTRDTIM_UTMI_8_BIT 9
158#define USBTRDTIM_UTMI_16_BIT 5
159#define UTMI_PHYIF_16_BIT 1
160#define UTMI_PHYIF_8_BIT 0
161
162/* Global USB3 PIPE Control Register */
163#define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31)
164#define DWC3_GUSB3PIPECTL_U2SSINP3OK (1 << 29)
165#define DWC3_GUSB3PIPECTL_REQP1P2P3 (1 << 24)
166#define DWC3_GUSB3PIPECTL_DEP1P2P3(n) ((n) << 19)
167#define DWC3_GUSB3PIPECTL_DEP1P2P3_MASK DWC3_GUSB3PIPECTL_DEP1P2P3(7)
168#define DWC3_GUSB3PIPECTL_DEP1P2P3_EN DWC3_GUSB3PIPECTL_DEP1P2P3(1)
169#define DWC3_GUSB3PIPECTL_DEPOCHANGE (1 << 18)
170#define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17)
171#define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9)
172#define DWC3_GUSB3PIPECTL_RX_DETOPOLL (1 << 8)
173#define DWC3_GUSB3PIPECTL_TX_DEEPH_MASK DWC3_GUSB3PIPECTL_TX_DEEPH(3)
174#define DWC3_GUSB3PIPECTL_TX_DEEPH(n) ((n) << 1)
175
176/* Global TX Fifo Size Register */
177#define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff)
178#define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000)
179
180/* Global Event Size Registers */
181#define DWC3_GEVNTSIZ_INTMASK (1 << 31)
182#define DWC3_GEVNTSIZ_SIZE(n) ((n) & 0xffff)
183
184/* Global HWPARAMS1 Register */
185#define DWC3_GHWPARAMS1_EN_PWROPT(n) (((n) & (3 << 24)) >> 24)
186#define DWC3_GHWPARAMS1_EN_PWROPT_NO 0
187#define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1
188#define DWC3_GHWPARAMS1_EN_PWROPT_HIB 2
189#define DWC3_GHWPARAMS1_PWROPT(n) ((n) << 24)
190#define DWC3_GHWPARAMS1_PWROPT_MASK DWC3_GHWPARAMS1_PWROPT(3)
191
192/* Global HWPARAMS3 Register */
193#define DWC3_GHWPARAMS3_SSPHY_IFC(n) ((n) & 3)
194#define DWC3_GHWPARAMS3_SSPHY_IFC_DIS 0
195#define DWC3_GHWPARAMS3_SSPHY_IFC_ENA 1
196#define DWC3_GHWPARAMS3_HSPHY_IFC(n) (((n) & (3 << 2)) >> 2)
197#define DWC3_GHWPARAMS3_HSPHY_IFC_DIS 0
198#define DWC3_GHWPARAMS3_HSPHY_IFC_UTMI 1
199#define DWC3_GHWPARAMS3_HSPHY_IFC_ULPI 2
200#define DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI 3
201#define DWC3_GHWPARAMS3_FSPHY_IFC(n) (((n) & (3 << 4)) >> 4)
202#define DWC3_GHWPARAMS3_FSPHY_IFC_DIS 0
203#define DWC3_GHWPARAMS3_FSPHY_IFC_ENA 1
204
205/* Global HWPARAMS4 Register */
206#define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n) (((n) & (0x0f << 13)) >> 13)
207#define DWC3_MAX_HIBER_SCRATCHBUFS 15
208
209/* Global HWPARAMS6 Register */
210#define DWC3_GHWPARAMS6_EN_FPGA (1 << 7)
211
212/* Device Configuration Register */
213#define DWC3_DCFG_DEVADDR(addr) ((addr) << 3)
214#define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f)
215
216#define DWC3_DCFG_SPEED_MASK (7 << 0)
217#define DWC3_DCFG_SUPERSPEED (4 << 0)
218#define DWC3_DCFG_HIGHSPEED (0 << 0)
219#define DWC3_DCFG_FULLSPEED2 (1 << 0)
220#define DWC3_DCFG_LOWSPEED (2 << 0)
221#define DWC3_DCFG_FULLSPEED1 (3 << 0)
222
223#define DWC3_DCFG_LPM_CAP (1 << 22)
224
225/* Device Control Register */
226#define DWC3_DCTL_RUN_STOP (1 << 31)
227#define DWC3_DCTL_CSFTRST (1 << 30)
228#define DWC3_DCTL_LSFTRST (1 << 29)
229
230#define DWC3_DCTL_HIRD_THRES_MASK (0x1f << 24)
231#define DWC3_DCTL_HIRD_THRES(n) ((n) << 24)
232
233#define DWC3_DCTL_APPL1RES (1 << 23)
234
235/* These apply for core versions 1.87a and earlier */
236#define DWC3_DCTL_TRGTULST_MASK (0x0f << 17)
237#define DWC3_DCTL_TRGTULST(n) ((n) << 17)
238#define DWC3_DCTL_TRGTULST_U2 (DWC3_DCTL_TRGTULST(2))
239#define DWC3_DCTL_TRGTULST_U3 (DWC3_DCTL_TRGTULST(3))
240#define DWC3_DCTL_TRGTULST_SS_DIS (DWC3_DCTL_TRGTULST(4))
241#define DWC3_DCTL_TRGTULST_RX_DET (DWC3_DCTL_TRGTULST(5))
242#define DWC3_DCTL_TRGTULST_SS_INACT (DWC3_DCTL_TRGTULST(6))
243
244/* These apply for core versions 1.94a and later */
245#define DWC3_DCTL_LPM_ERRATA_MASK DWC3_DCTL_LPM_ERRATA(0xf)
246#define DWC3_DCTL_LPM_ERRATA(n) ((n) << 20)
247
248#define DWC3_DCTL_KEEP_CONNECT (1 << 19)
249#define DWC3_DCTL_L1_HIBER_EN (1 << 18)
250#define DWC3_DCTL_CRS (1 << 17)
251#define DWC3_DCTL_CSS (1 << 16)
252
253#define DWC3_DCTL_INITU2ENA (1 << 12)
254#define DWC3_DCTL_ACCEPTU2ENA (1 << 11)
255#define DWC3_DCTL_INITU1ENA (1 << 10)
256#define DWC3_DCTL_ACCEPTU1ENA (1 << 9)
257#define DWC3_DCTL_TSTCTRL_MASK (0xf << 1)
258
259#define DWC3_DCTL_ULSTCHNGREQ_MASK (0x0f << 5)
260#define DWC3_DCTL_ULSTCHNGREQ(n) (((n) << 5) & DWC3_DCTL_ULSTCHNGREQ_MASK)
261
262#define DWC3_DCTL_ULSTCHNG_NO_ACTION (DWC3_DCTL_ULSTCHNGREQ(0))
263#define DWC3_DCTL_ULSTCHNG_SS_DISABLED (DWC3_DCTL_ULSTCHNGREQ(4))
264#define DWC3_DCTL_ULSTCHNG_RX_DETECT (DWC3_DCTL_ULSTCHNGREQ(5))
265#define DWC3_DCTL_ULSTCHNG_SS_INACTIVE (DWC3_DCTL_ULSTCHNGREQ(6))
266#define DWC3_DCTL_ULSTCHNG_RECOVERY (DWC3_DCTL_ULSTCHNGREQ(8))
267#define DWC3_DCTL_ULSTCHNG_COMPLIANCE (DWC3_DCTL_ULSTCHNGREQ(10))
268#define DWC3_DCTL_ULSTCHNG_LOOPBACK (DWC3_DCTL_ULSTCHNGREQ(11))
269
270/* Device Event Enable Register */
271#define DWC3_DEVTEN_VNDRDEVTSTRCVEDEN (1 << 12)
272#define DWC3_DEVTEN_EVNTOVERFLOWEN (1 << 11)
273#define DWC3_DEVTEN_CMDCMPLTEN (1 << 10)
274#define DWC3_DEVTEN_ERRTICERREN (1 << 9)
275#define DWC3_DEVTEN_SOFEN (1 << 7)
276#define DWC3_DEVTEN_EOPFEN (1 << 6)
277#define DWC3_DEVTEN_HIBERNATIONREQEVTEN (1 << 5)
278#define DWC3_DEVTEN_WKUPEVTEN (1 << 4)
279#define DWC3_DEVTEN_ULSTCNGEN (1 << 3)
280#define DWC3_DEVTEN_CONNECTDONEEN (1 << 2)
281#define DWC3_DEVTEN_USBRSTEN (1 << 1)
282#define DWC3_DEVTEN_DISCONNEVTEN (1 << 0)
283
284/* Device Status Register */
285#define DWC3_DSTS_DCNRD (1 << 29)
286
287/* This applies for core versions 1.87a and earlier */
288#define DWC3_DSTS_PWRUPREQ (1 << 24)
289
290/* These apply for core versions 1.94a and later */
291#define DWC3_DSTS_RSS (1 << 25)
292#define DWC3_DSTS_SSS (1 << 24)
293
294#define DWC3_DSTS_COREIDLE (1 << 23)
295#define DWC3_DSTS_DEVCTRLHLT (1 << 22)
296
297#define DWC3_DSTS_USBLNKST_MASK (0x0f << 18)
298#define DWC3_DSTS_USBLNKST(n) (((n) & DWC3_DSTS_USBLNKST_MASK) >> 18)
299
300#define DWC3_DSTS_RXFIFOEMPTY (1 << 17)
301
302#define DWC3_DSTS_SOFFN_MASK (0x3fff << 3)
303#define DWC3_DSTS_SOFFN(n) (((n) & DWC3_DSTS_SOFFN_MASK) >> 3)
304
305#define DWC3_DSTS_CONNECTSPD (7 << 0)
306
307#define DWC3_DSTS_SUPERSPEED (4 << 0)
308#define DWC3_DSTS_HIGHSPEED (0 << 0)
309#define DWC3_DSTS_FULLSPEED2 (1 << 0)
310#define DWC3_DSTS_LOWSPEED (2 << 0)
311#define DWC3_DSTS_FULLSPEED1 (3 << 0)
312
313/* Device Generic Command Register */
314#define DWC3_DGCMD_SET_LMP 0x01
315#define DWC3_DGCMD_SET_PERIODIC_PAR 0x02
316#define DWC3_DGCMD_XMIT_FUNCTION 0x03
317
318/* These apply for core versions 1.94a and later */
319#define DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO 0x04
320#define DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI 0x05
321
322#define DWC3_DGCMD_SELECTED_FIFO_FLUSH 0x09
323#define DWC3_DGCMD_ALL_FIFO_FLUSH 0x0a
324#define DWC3_DGCMD_SET_ENDPOINT_NRDY 0x0c
325#define DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK 0x10
326
327#define DWC3_DGCMD_STATUS(n) (((n) >> 15) & 1)
328#define DWC3_DGCMD_CMDACT (1 << 10)
329#define DWC3_DGCMD_CMDIOC (1 << 8)
330
331/* Device Generic Command Parameter Register */
332#define DWC3_DGCMDPAR_FORCE_LINKPM_ACCEPT (1 << 0)
333#define DWC3_DGCMDPAR_FIFO_NUM(n) ((n) << 0)
334#define DWC3_DGCMDPAR_RX_FIFO (0 << 5)
335#define DWC3_DGCMDPAR_TX_FIFO (1 << 5)
336#define DWC3_DGCMDPAR_LOOPBACK_DIS (0 << 0)
337#define DWC3_DGCMDPAR_LOOPBACK_ENA (1 << 0)
338
339/* Device Endpoint Command Register */
340#define DWC3_DEPCMD_PARAM_SHIFT 16
341#define DWC3_DEPCMD_PARAM(x) ((x) << DWC3_DEPCMD_PARAM_SHIFT)
342#define DWC3_DEPCMD_GET_RSC_IDX(x) (((x) >> DWC3_DEPCMD_PARAM_SHIFT) & 0x7f)
343#define DWC3_DEPCMD_STATUS(x) (((x) >> 15) & 1)
344#define DWC3_DEPCMD_HIPRI_FORCERM (1 << 11)
345#define DWC3_DEPCMD_CMDACT (1 << 10)
346#define DWC3_DEPCMD_CMDIOC (1 << 8)
347
348#define DWC3_DEPCMD_DEPSTARTCFG (0x09 << 0)
349#define DWC3_DEPCMD_ENDTRANSFER (0x08 << 0)
350#define DWC3_DEPCMD_UPDATETRANSFER (0x07 << 0)
351#define DWC3_DEPCMD_STARTTRANSFER (0x06 << 0)
352#define DWC3_DEPCMD_CLEARSTALL (0x05 << 0)
353#define DWC3_DEPCMD_SETSTALL (0x04 << 0)
354/* This applies for core versions 1.90a and earlier */
355#define DWC3_DEPCMD_GETSEQNUMBER (0x03 << 0)
356/* This applies for core versions 1.94a and later */
357#define DWC3_DEPCMD_GETEPSTATE (0x03 << 0)
358#define DWC3_DEPCMD_SETTRANSFRESOURCE (0x02 << 0)
359#define DWC3_DEPCMD_SETEPCONFIG (0x01 << 0)
360
361/* The EP number goes 0..31 so ep0 is always out and ep1 is always in */
362#define DWC3_DALEPENA_EP(n) (1 << n)
363
364#define DWC3_DEPCMD_TYPE_CONTROL 0
365#define DWC3_DEPCMD_TYPE_ISOC 1
366#define DWC3_DEPCMD_TYPE_BULK 2
367#define DWC3_DEPCMD_TYPE_INTR 3
368#endif