1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2024, Kongyang Liu <seashell11234455@gmail.com>
4  *
5  */
6 
7 #ifndef __DWC2_CORE_H_
8 #define __DWC2_CORE_H_
9 
10 #include <linux/bitops.h>
11 
12 struct dwc2_global_regs {
13 	u32 gotgctl;	/* 0x000 */
14 	u32 gotgint;
15 	u32 gahbcfg;
16 	u32 gusbcfg;
17 	u32 grstctl;	/* 0x010 */
18 	u32 gintsts;
19 	u32 gintmsk;
20 	u32 grxstsr;
21 	u32 grxstsp;	/* 0x020 */
22 	u32 grxfsiz;
23 	u32 gnptxfsiz;
24 	u32 gnptxsts;
25 	u32 gi2cctl;	/* 0x030 */
26 	u32 gpvndctl;
27 	u32 ggpio;
28 	u32 guid;
29 	u32 gsnpsid;	/* 0x040 */
30 	u32 ghwcfg1;
31 	u32 ghwcfg2;
32 	u32 ghwcfg3;
33 	u32 ghwcfg4;	/* 0x050 */
34 	u32 glpmcfg;
35 	u32 gpwrdn;
36 	u32 gdfifocfg;
37 	u32 gadpctl;	/* 0x060 */
38 	u32 grefclk;
39 	u32 gintmsk2;
40 	u32 gintsts2;
41 	u8  _pad_from_0x70_to_0x100[0x100 - 0x70];
42 	u32 hptxfsiz;	/* 0x100 */
43 	u32 dptxfsizn[15];
44 	u8  _pad_from_0x140_to_0x400[0x400 - 0x140];
45 };
46 
47 struct dwc2_hc_regs {
48 	u32 hcchar;	/* 0x500 + 0x20 * ch */
49 	u32 hcsplt;
50 	u32 hcint;
51 	u32 hcintmsk;
52 	u32 hctsiz;
53 	u32 hcdma;
54 	u32 reserved;
55 	u32 hcdmab;
56 };
57 
58 struct dwc2_host_regs {
59 	u32 hcfg;	/* 0x400 */
60 	u32 hfir;
61 	u32 hfnum;
62 	u32 _pad_0x40c;
63 	u32 hptxsts;	/* 0x410 */
64 	u32 haint;
65 	u32 haintmsk;
66 	u32 hflbaddr;
67 	u8  _pad_from_0x420_to_0x440[0x440 - 0x420];
68 	u32 hprt0;	/* 0x440 */
69 	u8  _pad_from_0x444_to_0x500[0x500 - 0x444];
70 	struct dwc2_hc_regs hc[16];	/* 0x500 */
71 	u8  _pad_from_0x700_to_0x800[0x800 - 0x700];
72 };
73 
74 /* Device Logical IN Endpoint-Specific Registers */
75 struct dwc2_dev_in_endp {
76 	u32 diepctl;	/* 0x900 + 0x20 * ep */
77 	u32 reserved0;
78 	u32 diepint;
79 	u32 reserved1;
80 	u32 dieptsiz;
81 	u32 diepdma;
82 	u32 reserved2;
83 	u32 diepdmab;
84 };
85 
86 /* Device Logical OUT Endpoint-Specific Registers */
87 struct dwc2_dev_out_endp {
88 	u32 doepctl;	/* 0xB00 + 0x20 * ep */
89 	u32 reserved0;
90 	u32 doepint;
91 	u32 reserved1;
92 	u32 doeptsiz;
93 	u32 doepdma;
94 	u32 reserved2;
95 	u32 doepdmab;
96 };
97 
98 struct dwc2_device_regs {
99 	u32 dcfg;	/* 0x800 */
100 	u32 dctl;
101 	u32 dsts;
102 	u32 _pad_0x80c;
103 	u32 diepmsk;	/* 0x810 */
104 	u32 doepmsk;
105 	u32 daint;
106 	u32 daintmsk;
107 	u32 dtknqr1;	/* 0x820 */
108 	u32 dtknqr2;
109 	u32 dvbusdis;
110 	u32 dvbuspulse;
111 	u32 dtknqr3;	/* 0x830 */
112 	u32 dtknqr4;
113 	u8  _pad_from_0x838_to_0x900[0x900 - 0x838];
114 	struct dwc2_dev_in_endp  in_endp[16];	/* 0x900 */
115 	struct dwc2_dev_out_endp out_endp[16];	/* 0xB00 */
116 };
117 
118 struct dwc2_core_regs {
119 	struct dwc2_global_regs  global_regs;	/* 0x000 */
120 	struct dwc2_host_regs    host_regs;	/* 0x400 */
121 	struct dwc2_device_regs  device_regs;	/* 0x800 */
122 	u8  _pad_from_0xd00_to_0xe00[0xe00 - 0xd00];
123 	u32 pcgcctl;				/* 0xe00 */
124 	u8  _pad_from_0xe04_to_0x1000[0x1000 - 0xe04];
125 	u8  ep_fifo[16][0x1000];		/* 0x1000 */
126 };
127 
128 int dwc2_core_reset(struct dwc2_core_regs *regs);
129 int dwc2_flush_tx_fifo(struct dwc2_core_regs *regs, const int num);
130 int dwc2_flush_rx_fifo(struct dwc2_core_regs *regs);
131 
132 /* Core Global Register */
133 #define GOTGCTL_CHIRPEN				BIT(27)
134 #define GOTGCTL_MULT_VALID_BC_MASK		GENMASK(26, 22)
135 #define GOTGCTL_CURMODE_HOST			BIT(21)
136 #define GOTGCTL_OTGVER				BIT(20)
137 #define GOTGCTL_BSESVLD				BIT(19)
138 #define GOTGCTL_ASESVLD				BIT(18)
139 #define GOTGCTL_DBNC_SHORT			BIT(17)
140 #define GOTGCTL_CONID_B				BIT(16)
141 #define GOTGCTL_DBNCE_FLTR_BYPASS		BIT(15)
142 #define GOTGCTL_DEVHNPEN			BIT(11)
143 #define GOTGCTL_HSTSETHNPEN			BIT(10)
144 #define GOTGCTL_HNPREQ				BIT(9)
145 #define GOTGCTL_HSTNEGSCS			BIT(8)
146 #define GOTGCTL_BVALOVAL			BIT(7)
147 #define GOTGCTL_BVALOEN				BIT(6)
148 #define GOTGCTL_AVALOVAL			BIT(5)
149 #define GOTGCTL_AVALOEN				BIT(4)
150 #define GOTGCTL_VBVALOVAL			BIT(3)
151 #define GOTGCTL_VBVALOEN			BIT(2)
152 #define GOTGCTL_SESREQ				BIT(1)
153 #define GOTGCTL_SESREQSCS			BIT(0)
154 
155 #define GOTGINT_DBNCE_DONE			BIT(19)
156 #define GOTGINT_A_DEV_TOUT_CHG			BIT(18)
157 #define GOTGINT_HST_NEG_DET			BIT(17)
158 #define GOTGINT_HST_NEG_SUC_STS_CHNG		BIT(9)
159 #define GOTGINT_SES_REQ_SUC_STS_CHNG		BIT(8)
160 #define GOTGINT_SES_END_DET			BIT(2)
161 
162 #define GAHBCFG_AHB_SINGLE			BIT(23)
163 #define GAHBCFG_NOTI_ALL_DMA_WRIT		BIT(22)
164 #define GAHBCFG_REM_MEM_SUPP			BIT(21)
165 #define GAHBCFG_P_TXF_EMP_LVL			BIT(8)
166 #define GAHBCFG_NP_TXF_EMP_LVL			BIT(7)
167 #define GAHBCFG_DMA_EN				BIT(5)
168 #define GAHBCFG_HBSTLEN_MASK			GENMASK(4, 1)
169 #define GAHBCFG_HBSTLEN_SINGLE			0
170 #define GAHBCFG_HBSTLEN_INCR			1
171 #define GAHBCFG_HBSTLEN_INCR4			3
172 #define GAHBCFG_HBSTLEN_INCR8			5
173 #define GAHBCFG_HBSTLEN_INCR16			7
174 #define GAHBCFG_GLBL_INTR_EN			BIT(0)
175 #define GAHBCFG_CTRL_MASK			(GAHBCFG_P_TXF_EMP_LVL | \
176 						 GAHBCFG_NP_TXF_EMP_LVL | \
177 						 GAHBCFG_DMA_EN | \
178 						 GAHBCFG_GLBL_INTR_EN)
179 
180 #define GUSBCFG_FORCEDEVMODE			BIT(30)
181 #define GUSBCFG_FORCEHOSTMODE			BIT(29)
182 #define GUSBCFG_TXENDDELAY			BIT(28)
183 #define GUSBCFG_ICTRAFFICPULLREMOVE		BIT(27)
184 #define GUSBCFG_ICUSBCAP			BIT(26)
185 #define GUSBCFG_ULPI_INT_PROT_DIS		BIT(25)
186 #define GUSBCFG_INDICATORPASSTHROUGH		BIT(24)
187 #define GUSBCFG_INDICATORCOMPLEMENT		BIT(23)
188 #define GUSBCFG_TERMSELDLPULSE			BIT(22)
189 #define GUSBCFG_ULPI_INT_VBUS_IND		BIT(21)
190 #define GUSBCFG_ULPI_EXT_VBUS_DRV		BIT(20)
191 #define GUSBCFG_ULPI_CLK_SUSP_M			BIT(19)
192 #define GUSBCFG_ULPI_AUTO_RES			BIT(18)
193 #define GUSBCFG_ULPI_FS_LS			BIT(17)
194 #define GUSBCFG_OTG_UTMI_FS_SEL			BIT(16)
195 #define GUSBCFG_PHY_LP_CLK_SEL			BIT(15)
196 #define GUSBCFG_USBTRDTIM_MASK			GENMASK(14, 10)
197 #define GUSBCFG_HNPCAP				BIT(9)
198 #define GUSBCFG_SRPCAP				BIT(8)
199 #define GUSBCFG_DDRSEL				BIT(7)
200 #define GUSBCFG_PHYSEL				BIT(6)
201 #define GUSBCFG_FSINTF				BIT(5)
202 #define GUSBCFG_ULPI_UTMI_SEL			BIT(4)
203 #define GUSBCFG_PHYIF16				BIT(3)
204 #define GUSBCFG_TOUTCAL_MASK			GENMASK(2, 0)
205 
206 #define GRSTCTL_AHBIDLE				BIT(31)
207 #define GRSTCTL_DMAREQ				BIT(30)
208 #define GRSTCTL_CSFTRST_DONE			BIT(29)
209 #define GRSTCTL_TXFNUM_MASK			GENMASK(10, 6)
210 #define GRSTCTL_TXFFLSH				BIT(5)
211 #define GRSTCTL_RXFFLSH				BIT(4)
212 #define GRSTCTL_IN_TKNQ_FLSH			BIT(3)
213 #define GRSTCTL_FRMCNTRRST			BIT(2)
214 #define GRSTCTL_HSFTRST				BIT(1)
215 #define GRSTCTL_CSFTRST				BIT(0)
216 #define GRSTCTL_TXFNUM_ALL			0x10
217 
218 #define GINTSTS_WKUPINT				BIT(31)
219 #define GINTSTS_SESSREQINT			BIT(30)
220 #define GINTSTS_DISCONNINT			BIT(29)
221 #define GINTSTS_CONIDSTSCHNG			BIT(28)
222 #define GINTSTS_LPMTRANRCVD			BIT(27)
223 #define GINTSTS_PTXFEMP				BIT(26)
224 #define GINTSTS_HCHINT				BIT(25)
225 #define GINTSTS_PRTINT				BIT(24)
226 #define GINTSTS_RESETDET			BIT(23)
227 #define GINTSTS_FET_SUSP			BIT(22)
228 #define GINTSTS_INCOMPL_IP			BIT(21)
229 #define GINTSTS_INCOMPL_SOOUT			BIT(21)
230 #define GINTSTS_INCOMPL_SOIN			BIT(20)
231 #define GINTSTS_OEPINT				BIT(19)
232 #define GINTSTS_IEPINT				BIT(18)
233 #define GINTSTS_EPMIS				BIT(17)
234 #define GINTSTS_RESTOREDONE			BIT(16)
235 #define GINTSTS_EOPF				BIT(15)
236 #define GINTSTS_ISOUTDROP			BIT(14)
237 #define GINTSTS_ENUMDONE			BIT(13)
238 #define GINTSTS_USBRST				BIT(12)
239 #define GINTSTS_USBSUSP				BIT(11)
240 #define GINTSTS_ERLYSUSP			BIT(10)
241 #define GINTSTS_I2CINT				BIT(9)
242 #define GINTSTS_ULPI_CK_INT			BIT(8)
243 #define GINTSTS_GOUTNAKEFF			BIT(7)
244 #define GINTSTS_GINNAKEFF			BIT(6)
245 #define GINTSTS_NPTXFEMP			BIT(5)
246 #define GINTSTS_RXFLVL				BIT(4)
247 #define GINTSTS_SOF				BIT(3)
248 #define GINTSTS_OTGINT				BIT(2)
249 #define GINTSTS_MODEMIS				BIT(1)
250 #define GINTSTS_CURMODE_HOST			BIT(0)
251 
252 #define GRXSTS_FN_MASK				GENMASK(31, 25)
253 #define GRXSTS_PKTSTS_MASK			GENMASK(20, 17)
254 #define GRXSTS_PKTSTS_GLOBALOUTNAK		1
255 #define GRXSTS_PKTSTS_OUTRX			2
256 #define GRXSTS_PKTSTS_HCHIN			2
257 #define GRXSTS_PKTSTS_OUTDONE			3
258 #define GRXSTS_PKTSTS_HCHIN_XFER_COMP		3
259 #define GRXSTS_PKTSTS_SETUPDONE			4
260 #define GRXSTS_PKTSTS_DATATOGGLEERR		5
261 #define GRXSTS_PKTSTS_SETUPRX			6
262 #define GRXSTS_PKTSTS_HCHHALTED			7
263 #define GRXSTS_DPID_MASK			GENMASK(16, 15)
264 #define GRXSTS_BYTECNT_MASK			GENMASK(14, 4)
265 #define GRXSTS_HCHNUM_MASK			GENMASK(3, 0)
266 
267 #define GRXFSIZ_DEPTH_MASK			GENMASK(15, 0)
268 
269 #define GI2CCTL_BSYDNE				BIT(31)
270 #define GI2CCTL_RW				BIT(30)
271 #define GI2CCTL_I2CDATSE0			BIT(28)
272 #define GI2CCTL_I2CDEVADDR_MASK			GENMASK(27, 26)
273 #define GI2CCTL_I2CSUSPCTL			BIT(25)
274 #define GI2CCTL_ACK				BIT(24)
275 #define GI2CCTL_I2CEN				BIT(23)
276 #define GI2CCTL_ADDR_MASK			GENMASK(22, 16)
277 #define GI2CCTL_REGADDR_MASK			GENMASK(15, 8)
278 #define GI2CCTL_RWDATA_MASK			GENMASK(7, 0)
279 
280 #define GGPIO_STM32_OTG_GCCFG_IDEN		BIT(22)
281 #define GGPIO_STM32_OTG_GCCFG_VBDEN		BIT(21)
282 #define GGPIO_STM32_OTG_GCCFG_PWRDWN		BIT(16)
283 
284 #define GSNPSID_ID_MASK				GENMASK(31, 16)
285 #define GSNPSID_OTG_ID				0x4f54
286 #define GSNPSID_VER_MASK			GENMASK(15, 0)
287 
288 #define GHWCFG2_OTG_ENABLE_IC_USB		BIT(31)
289 #define GHWCFG2_DEV_TOKEN_Q_DEPTH_MASK		GENMASK(30, 26)
290 #define GHWCFG2_HOST_PERIO_TX_Q_DEPTH_MASK	GENMASK(25, 24)
291 #define GHWCFG2_NONPERIO_TX_Q_DEPTH_MASK	GENMASK(23, 22)
292 #define GHWCFG2_MULTI_PROC_INT			BIT(20)
293 #define GHWCFG2_DYNAMIC_FIFO			BIT(19)
294 #define GHWCFG2_PERIO_EP_SUPPORTED		BIT(18)
295 #define GHWCFG2_NUM_HOST_CHAN_MASK		GENMASK(17, 14)
296 #define GHWCFG2_NUM_DEV_EP_MASK			GENMASK(13, 10)
297 #define GHWCFG2_FS_PHY_TYPE_MASK		GENMASK(9, 8)
298 #define GHWCFG2_FS_PHY_TYPE_NOT_SUPPORTED	0
299 #define GHWCFG2_FS_PHY_TYPE_DEDICATED		1
300 #define GHWCFG2_FS_PHY_TYPE_SHARED_UTMI		2
301 #define GHWCFG2_FS_PHY_TYPE_SHARED_ULPI		3
302 #define GHWCFG2_HS_PHY_TYPE_MASK		GENMASK(7, 6)
303 #define GHWCFG2_HS_PHY_TYPE_NOT_SUPPORTED	0
304 #define GHWCFG2_HS_PHY_TYPE_UTMI		1
305 #define GHWCFG2_HS_PHY_TYPE_ULPI		2
306 #define GHWCFG2_HS_PHY_TYPE_UTMI_ULPI		3
307 #define GHWCFG2_POINT2POINT			BIT(5)
308 #define GHWCFG2_ARCHITECTURE_MASK		GENMASK(4, 3)
309 #define GHWCFG2_SLAVE_ONLY_ARCH			0
310 #define GHWCFG2_EXT_DMA_ARCH			1
311 #define GHWCFG2_INT_DMA_ARCH			2
312 #define GHWCFG2_OP_MODE_MASK			GENMASK(2, 0)
313 #define GHWCFG2_OP_MODE_HNP_SRP_CAPABLE		0
314 #define GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE	1
315 #define GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE	2
316 #define GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE	3
317 #define GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE	4
318 #define GHWCFG2_OP_MODE_SRP_CAPABLE_HOST	5
319 #define GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST	6
320 #define GHWCFG2_OP_MODE_UNDEFINED		7
321 
322 #define GHWCFG4_DESC_DMA_DYN			BIT(31)
323 #define GHWCFG4_DESC_DMA			BIT(30)
324 #define GHWCFG4_NUM_IN_EPS_MASK			GENMASK(29, 26)
325 #define GHWCFG4_DED_FIFO_EN			BIT(25)
326 #define GHWCFG4_SESSION_END_FILT_EN		BIT(24)
327 #define GHWCFG4_B_VALID_FILT_EN			BIT(23)
328 #define GHWCFG4_A_VALID_FILT_EN			BIT(22)
329 #define GHWCFG4_VBUS_VALID_FILT_EN		BIT(21)
330 #define GHWCFG4_IDDIG_FILT_EN			BIT(20)
331 #define GHWCFG4_NUM_DEV_MODE_CTRL_EP_MASK	GENMASK(19, 16)
332 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK	GENMASK(15, 14)
333 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_8		0
334 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_16		1
335 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_8_OR_16	2
336 #define GHWCFG4_ACG_SUPPORTED			BIT(12)
337 #define GHWCFG4_IPG_ISOC_SUPPORTED		BIT(11)
338 #define GHWCFG4_SERVICE_INTERVAL_SUPPORTED      BIT(10)
339 #define GHWCFG4_XHIBER				BIT(7)
340 #define GHWCFG4_HIBER				BIT(6)
341 #define GHWCFG4_MIN_AHB_FREQ			BIT(5)
342 #define GHWCFG4_POWER_OPTIMIZ			BIT(4)
343 #define GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK	GENMASK(3, 0)
344 
345 #define FIFOSIZE_DEPTH_MASK			GENMASK(31, 16)
346 #define FIFOSIZE_STARTADDR_MASK			GENMASK(15, 0)
347 
348 /* Host Register */
349 #define HCFG_MODECHTIMEN			BIT(31)
350 #define HCFG_PERSCHEDENA			BIT(26)
351 #define HCFG_FRLISTEN_MASK			GENMASK(25, 24)
352 #define HCFG_FRLISTEN_8				0
353 #define HCFG_FRLISTEN_16			1
354 #define HCFG_FRLISTEN_32			2
355 #define HCFG_FRLISTEN_64			3
356 #define HCFG_DESCDMA				BIT(23)
357 #define HCFG_RESVALID_MASK			GENMASK(15, 8)
358 #define HCFG_ENA32KHZ				BIT(7)
359 #define HCFG_FSLSSUPP				BIT(2)
360 #define HCFG_FSLSPCLKSEL_MASK			GENMASK(2, 0)
361 #define HCFG_FSLSPCLKSEL_30_60_MHZ		0
362 #define HCFG_FSLSPCLKSEL_48_MHZ			1
363 #define HCFG_FSLSPCLKSEL_6_MHZ			2
364 
365 #define HFNUM_FRREM_MASK			GENMASK(31, 16)
366 #define HFNUM_FRNUM_MASK			GENMASK(15, 0)
367 
368 #define HPRT0_SPD_MASK				GENMASK(18, 17)
369 #define HPRT0_SPD_HIGH_SPEED			0
370 #define HPRT0_SPD_FULL_SPEED			1
371 #define HPRT0_SPD_LOW_SPEED			2
372 #define HPRT0_TSTCTL_MASK			GENMASK(16, 13)
373 #define HPRT0_PWR				BIT(12)
374 #define HPRT0_LNSTS_MASK			GENMASK(11, 10)
375 #define HPRT0_RST				BIT(8)
376 #define HPRT0_SUSP				BIT(7)
377 #define HPRT0_RES				BIT(6)
378 #define HPRT0_OVRCURRCHG			BIT(5)
379 #define HPRT0_OVRCURRACT			BIT(4)
380 #define HPRT0_ENACHG				BIT(3)
381 #define HPRT0_ENA				BIT(2)
382 #define HPRT0_CONNDET				BIT(1)
383 #define HPRT0_CONNSTS				BIT(0)
384 #define HPRT0_W1C_MASK				(HPRT0_CONNDET | \
385 						 HPRT0_ENA | \
386 						 HPRT0_ENACHG | \
387 						 HPRT0_OVRCURRCHG)
388 
389 #define HCCHAR_CHENA				BIT(31)
390 #define HCCHAR_CHDIS				BIT(30)
391 #define HCCHAR_ODDFRM				BIT(29)
392 #define HCCHAR_DEVADDR_MASK			GENMASK(28, 22)
393 #define HCCHAR_MULTICNT_MASK			GENMASK(21, 20)
394 #define HCCHAR_EPTYPE_MASK			GENMASK(19, 18)
395 #define HCCHAR_EPTYPE_CONTROL			0
396 #define HCCHAR_EPTYPE_ISOC			1
397 #define HCCHAR_EPTYPE_BULK			2
398 #define HCCHAR_EPTYPE_INTR			3
399 #define HCCHAR_LSPDDEV				BIT(17)
400 #define HCCHAR_EPDIR				BIT(15)
401 #define HCCHAR_EPNUM_MASK			GENMASK(14, 11)
402 #define HCCHAR_MPS_MASK				GENMASK(10, 0)
403 
404 #define HCSPLT_SPLTENA				BIT(31)
405 #define HCSPLT_COMPSPLT				BIT(16)
406 #define HCSPLT_XACTPOS_MASK			GENMASK(15, 14)
407 #define HCSPLT_XACTPOS_MID			0
408 #define HCSPLT_XACTPOS_END			1
409 #define HCSPLT_XACTPOS_BEGIN			2
410 #define HCSPLT_XACTPOS_ALL			3
411 #define HCSPLT_HUBADDR_MASK			GENMASK(13, 7)
412 #define HCSPLT_PRTADDR_MASK			GENMASK(6, 0)
413 
414 #define HCINTMSK_FRM_LIST_ROLL			BIT(13)
415 #define HCINTMSK_XCS_XACT			BIT(12)
416 #define HCINTMSK_BNA				BIT(11)
417 #define HCINTMSK_DATATGLERR			BIT(10)
418 #define HCINTMSK_FRMOVRUN			BIT(9)
419 #define HCINTMSK_BBLERR				BIT(8)
420 #define HCINTMSK_XACTERR			BIT(7)
421 #define HCINTMSK_NYET				BIT(6)
422 #define HCINTMSK_ACK				BIT(5)
423 #define HCINTMSK_NAK				BIT(4)
424 #define HCINTMSK_STALL				BIT(3)
425 #define HCINTMSK_AHBERR				BIT(2)
426 #define HCINTMSK_CHHLTD				BIT(1)
427 #define HCINTMSK_XFERCOMPL			BIT(0)
428 
429 #define TSIZ_DOPNG				BIT(31)
430 #define TSIZ_SC_MC_PID_MASK			GENMASK(30, 29)
431 #define TSIZ_SC_MC_PID_DATA0			0
432 #define TSIZ_SC_MC_PID_DATA2			1
433 #define TSIZ_SC_MC_PID_DATA1			2
434 #define TSIZ_SC_MC_PID_MDATA			3
435 #define TSIZ_SC_MC_PID_SETUP			3
436 #define TSIZ_PKTCNT_MASK			GENMASK(28, 19)
437 #define TSIZ_NTD_MASK				GENMASK(15, 8)
438 #define TSIZ_SCHINFO_MASK			GENMASK(7, 0)
439 #define TSIZ_XFERSIZE_MASK			GENMASK(18, 0)
440 
441 /* Device Mode Register */
442 #define DCFG_DESCDMA_EN				BIT(23)
443 #define DCFG_EPMISCNT_MASK			GENMASK(22, 18)
444 #define DCFG_IPG_ISOC_SUPPORDED			BIT(17)
445 #define DCFG_PERFRINT_MASK			GENMASK(12, 11)
446 #define DCFG_DEVADDR_MASK			GENMASK(10, 4)
447 #define DCFG_NZ_STS_OUT_HSHK			BIT(2)
448 #define DCFG_DEVSPD_MASK			GENMASK(1, 0)
449 #define DCFG_DEVSPD_HS				0
450 #define DCFG_DEVSPD_FS				1
451 #define DCFG_DEVSPD_LS				2
452 #define DCFG_DEVSPD_FS48			3
453 
454 #define DCTL_SERVICE_INTERVAL_SUPPORTED		BIT(19)
455 #define DCTL_PWRONPRGDONE			BIT(11)
456 #define DCTL_CGOUTNAK				BIT(10)
457 #define DCTL_SGOUTNAK				BIT(9)
458 #define DCTL_CGNPINNAK				BIT(8)
459 #define DCTL_SGNPINNAK				BIT(7)
460 #define DCTL_TSTCTL_MASK			GENMASK(6, 4)
461 #define DCTL_GOUTNAKSTS				BIT(3)
462 #define DCTL_GNPINNAKSTS			BIT(2)
463 #define DCTL_SFTDISCON				BIT(1)
464 #define DCTL_RMTWKUPSIG				BIT(0)
465 
466 #define DSTS_SOFFN_MASK				GENMASK(21, 8)
467 #define DSTS_ERRATICERR				BIT(3)
468 #define DSTS_ENUMSPD_MASK			GENMASK(2, 1)
469 #define DSTS_ENUMSPD_HS				0
470 #define DSTS_ENUMSPD_FS				1
471 #define DSTS_ENUMSPD_LS				2
472 #define DSTS_ENUMSPD_FS48			3
473 #define DSTS_SUSPSTS				BIT(0)
474 
475 #define DIEPMSK_NAKMSK				BIT(13)
476 #define DIEPMSK_BNAININTRMSK			BIT(9)
477 #define DIEPMSK_TXFIFOUNDRNMSK			BIT(8)
478 #define DIEPMSK_TXFIFOEMPTY			BIT(7)
479 #define DIEPMSK_INEPNAKEFFMSK			BIT(6)
480 #define DIEPMSK_INTKNEPMISMSK			BIT(5)
481 #define DIEPMSK_INTKNTXFEMPMSK			BIT(4)
482 #define DIEPMSK_TIMEOUTMSK			BIT(3)
483 #define DIEPMSK_AHBERRMSK			BIT(2)
484 #define DIEPMSK_EPDISBLDMSK			BIT(1)
485 #define DIEPMSK_XFERCOMPLMSK			BIT(0)
486 
487 #define DOEPMSK_BNAMSK				BIT(9)
488 #define DOEPMSK_BACK2BACKSETUP			BIT(6)
489 #define DOEPMSK_STSPHSERCVDMSK			BIT(5)
490 #define DOEPMSK_OUTTKNEPDISMSK			BIT(4)
491 #define DOEPMSK_SETUPMSK			BIT(3)
492 #define DOEPMSK_AHBERRMSK			BIT(2)
493 #define DOEPMSK_EPDISBLDMSK			BIT(1)
494 #define DOEPMSK_XFERCOMPLMSK			BIT(0)
495 
496 #define DAINT_OUTEP_MASK			GENMASK(31, 16)
497 #define DAINT_INEP_MASK				GENMASK(15, 0)
498 
499 #define D0EPCTL_MPS_MASK			GENMASK(1, 0)
500 #define D0EPCTL_MPS_64				0
501 #define D0EPCTL_MPS_32				1
502 #define D0EPCTL_MPS_16				2
503 #define D0EPCTL_MPS_8				3
504 
505 #define DXEPCTL_EPENA				BIT(31)
506 #define DXEPCTL_EPDIS				BIT(30)
507 #define DXEPCTL_SETD1PID			BIT(29)
508 #define DXEPCTL_SETODDFR			BIT(29)
509 #define DXEPCTL_SETD0PID			BIT(28)
510 #define DXEPCTL_SETEVENFR			BIT(28)
511 #define DXEPCTL_SNAK				BIT(27)
512 #define DXEPCTL_CNAK				BIT(26)
513 #define DXEPCTL_TXFNUM_MASK			GENMASK(25, 22)
514 #define DXEPCTL_STALL				BIT(21)
515 #define DXEPCTL_SNP				BIT(20)
516 #define DXEPCTL_EPTYPE_MASK			GENMASK(19, 18)
517 #define DXEPCTL_EPTYPE_CONTROL			0
518 #define DXEPCTL_EPTYPE_ISO			1
519 #define DXEPCTL_EPTYPE_BULK			2
520 #define DXEPCTL_EPTYPE_INTERRUPT		3
521 #define DXEPCTL_NAKSTS				BIT(17)
522 #define DXEPCTL_DPID				BIT(16)
523 #define DXEPCTL_EOFRNUM				BIT(16)
524 #define DXEPCTL_USBACTEP			BIT(15)
525 #define DXEPCTL_NEXTEP_MASK			GENMASK(14, 11)
526 #define DXEPCTL_MPS_MASK			GENMASK(10, 0)
527 
528 #define DXEPINT_SETUP_RCVD			BIT(15)
529 #define DXEPINT_NYETINTRPT			BIT(14)
530 #define DXEPINT_NAKINTRPT			BIT(13)
531 #define DXEPINT_BBLEERRINTRPT			BIT(12)
532 #define DXEPINT_PKTDRPSTS			BIT(11)
533 #define DXEPINT_BNAINTR				BIT(9)
534 #define DXEPINT_TXFIFOUNDRN			BIT(8)
535 #define DXEPINT_OUTPKTERR			BIT(8)
536 #define DXEPINT_TXFEMP				BIT(7)
537 #define DXEPINT_INEPNAKEFF			BIT(6)
538 #define DXEPINT_BACK2BACKSETUP			BIT(6)
539 #define DXEPINT_INTKNEPMIS			BIT(5)
540 #define DXEPINT_STSPHSERCVD			BIT(5)
541 #define DXEPINT_INTKNTXFEMP			BIT(4)
542 #define DXEPINT_OUTTKNEPDIS			BIT(4)
543 #define DXEPINT_TIMEOUT				BIT(3)
544 #define DXEPINT_SETUP				BIT(3)
545 #define DXEPINT_AHBERR				BIT(2)
546 #define DXEPINT_EPDISBLD			BIT(1)
547 #define DXEPINT_XFERCOMPL			BIT(0)
548 
549 #define DIEPTSIZ0_PKTCNT_MASK			GENMASK(20, 19)
550 #define DIEPTSIZ0_XFERSIZE_MASK			GENMASK(6, 0)
551 
552 #define DOEPTSIZ0_SUPCNT_MASK			GENMASK(30, 29)
553 #define DOEPTSIZ0_PKTCNT			BIT(19)
554 #define DOEPTSIZ0_XFERSIZE_MASK			GENMASK(6, 0)
555 
556 #define DXEPTSIZ_MC_MASK			GENMASK(30, 29)
557 #define DXEPTSIZ_PKTCNT_MASK			GENMASK(28, 19)
558 #define DXEPTSIZ_XFERSIZE_MASK			GENMASK(18, 0)
559 
560 #endif /* __DWC2_CORE_H_ */
561