xref: /rk3399_rockchip-uboot/include/linux/usb/dwc3.h (revision 13194f3b5f51d104bdfdd7ff5a7556136b6dc35c)
1*13194f3bSVivek Gautam /* include/linux/usb/dwc3.h
2*13194f3bSVivek Gautam  *
3*13194f3bSVivek Gautam  * Copyright (c) 2012 Samsung Electronics Co. Ltd
4*13194f3bSVivek Gautam  *
5*13194f3bSVivek Gautam  * Designware SuperSpeed USB 3.0 DRD Controller global and OTG registers
6*13194f3bSVivek Gautam  *
7*13194f3bSVivek Gautam  * SPDX-License-Identifier:	GPL-2.0+
8*13194f3bSVivek Gautam  */
9*13194f3bSVivek Gautam 
10*13194f3bSVivek Gautam #ifndef __DWC3_H_
11*13194f3bSVivek Gautam #define __DWC3_H_
12*13194f3bSVivek Gautam 
13*13194f3bSVivek Gautam /* Global constants */
14*13194f3bSVivek Gautam #define DWC3_ENDPOINTS_NUM			32
15*13194f3bSVivek Gautam 
16*13194f3bSVivek Gautam #define DWC3_EVENT_BUFFERS_SIZE			PAGE_SIZE
17*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_MASK			0xfe
18*13194f3bSVivek Gautam 
19*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_DEV			0
20*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_CARKIT			3
21*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_I2C			4
22*13194f3bSVivek Gautam 
23*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_DISCONNECT		0
24*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_RESET			1
25*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_CONNECT_DONE		2
26*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE	3
27*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_WAKEUP		4
28*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_EOPF			6
29*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_SOF			7
30*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_ERRATIC_ERROR		9
31*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_CMD_CMPL		10
32*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_OVERFLOW		11
33*13194f3bSVivek Gautam 
34*13194f3bSVivek Gautam #define DWC3_GEVNTCOUNT_MASK			0xfffc
35*13194f3bSVivek Gautam #define DWC3_GSNPSID_MASK			0xffff0000
36*13194f3bSVivek Gautam #define DWC3_GSNPSID_SHIFT			16
37*13194f3bSVivek Gautam #define DWC3_GSNPSREV_MASK			0xffff
38*13194f3bSVivek Gautam 
39*13194f3bSVivek Gautam #define DWC3_REVISION_MASK			0xffff
40*13194f3bSVivek Gautam 
41*13194f3bSVivek Gautam #define DWC3_REG_OFFSET				0xC100
42*13194f3bSVivek Gautam 
43*13194f3bSVivek Gautam struct g_event_buffer {
44*13194f3bSVivek Gautam 	u64 g_evntadr;
45*13194f3bSVivek Gautam 	u32 g_evntsiz;
46*13194f3bSVivek Gautam 	u32 g_evntcount;
47*13194f3bSVivek Gautam };
48*13194f3bSVivek Gautam 
49*13194f3bSVivek Gautam struct d_physical_endpoint {
50*13194f3bSVivek Gautam 	u32 d_depcmdpar2;
51*13194f3bSVivek Gautam 	u32 d_depcmdpar1;
52*13194f3bSVivek Gautam 	u32 d_depcmdpar0;
53*13194f3bSVivek Gautam 	u32 d_depcmd;
54*13194f3bSVivek Gautam };
55*13194f3bSVivek Gautam 
56*13194f3bSVivek Gautam struct dwc3 {					/* offset: 0xC100 */
57*13194f3bSVivek Gautam 	u32 g_sbuscfg0;
58*13194f3bSVivek Gautam 	u32 g_sbuscfg1;
59*13194f3bSVivek Gautam 	u32 g_txthrcfg;
60*13194f3bSVivek Gautam 	u32 g_rxthrcfg;
61*13194f3bSVivek Gautam 	u32 g_ctl;
62*13194f3bSVivek Gautam 
63*13194f3bSVivek Gautam 	u32 reserved1;
64*13194f3bSVivek Gautam 
65*13194f3bSVivek Gautam 	u32 g_sts;
66*13194f3bSVivek Gautam 
67*13194f3bSVivek Gautam 	u32 reserved2;
68*13194f3bSVivek Gautam 
69*13194f3bSVivek Gautam 	u32 g_snpsid;
70*13194f3bSVivek Gautam 	u32 g_gpio;
71*13194f3bSVivek Gautam 	u32 g_uid;
72*13194f3bSVivek Gautam 	u32 g_uctl;
73*13194f3bSVivek Gautam 	u64 g_buserraddr;
74*13194f3bSVivek Gautam 	u64 g_prtbimap;
75*13194f3bSVivek Gautam 
76*13194f3bSVivek Gautam 	u32 g_hwparams0;
77*13194f3bSVivek Gautam 	u32 g_hwparams1;
78*13194f3bSVivek Gautam 	u32 g_hwparams2;
79*13194f3bSVivek Gautam 	u32 g_hwparams3;
80*13194f3bSVivek Gautam 	u32 g_hwparams4;
81*13194f3bSVivek Gautam 	u32 g_hwparams5;
82*13194f3bSVivek Gautam 	u32 g_hwparams6;
83*13194f3bSVivek Gautam 	u32 g_hwparams7;
84*13194f3bSVivek Gautam 
85*13194f3bSVivek Gautam 	u32 g_dbgfifospace;
86*13194f3bSVivek Gautam 	u32 g_dbgltssm;
87*13194f3bSVivek Gautam 	u32 g_dbglnmcc;
88*13194f3bSVivek Gautam 	u32 g_dbgbmu;
89*13194f3bSVivek Gautam 	u32 g_dbglspmux;
90*13194f3bSVivek Gautam 	u32 g_dbglsp;
91*13194f3bSVivek Gautam 	u32 g_dbgepinfo0;
92*13194f3bSVivek Gautam 	u32 g_dbgepinfo1;
93*13194f3bSVivek Gautam 
94*13194f3bSVivek Gautam 	u64 g_prtbimap_hs;
95*13194f3bSVivek Gautam 	u64 g_prtbimap_fs;
96*13194f3bSVivek Gautam 
97*13194f3bSVivek Gautam 	u32 reserved3[28];
98*13194f3bSVivek Gautam 
99*13194f3bSVivek Gautam 	u32 g_usb2phycfg[16];
100*13194f3bSVivek Gautam 	u32 g_usb2i2cctl[16];
101*13194f3bSVivek Gautam 	u32 g_usb2phyacc[16];
102*13194f3bSVivek Gautam 	u32 g_usb3pipectl[16];
103*13194f3bSVivek Gautam 
104*13194f3bSVivek Gautam 	u32 g_txfifosiz[32];
105*13194f3bSVivek Gautam 	u32 g_rxfifosiz[32];
106*13194f3bSVivek Gautam 
107*13194f3bSVivek Gautam 	struct g_event_buffer g_evnt_buf[32];
108*13194f3bSVivek Gautam 
109*13194f3bSVivek Gautam 	u32 g_hwparams8;
110*13194f3bSVivek Gautam 
111*13194f3bSVivek Gautam 	u32 reserved4[63];
112*13194f3bSVivek Gautam 
113*13194f3bSVivek Gautam 	u32 d_cfg;
114*13194f3bSVivek Gautam 	u32 d_ctl;
115*13194f3bSVivek Gautam 	u32 d_evten;
116*13194f3bSVivek Gautam 	u32 d_sts;
117*13194f3bSVivek Gautam 	u32 d_gcmdpar;
118*13194f3bSVivek Gautam 	u32 d_gcmd;
119*13194f3bSVivek Gautam 
120*13194f3bSVivek Gautam 	u32 reserved5[2];
121*13194f3bSVivek Gautam 
122*13194f3bSVivek Gautam 	u32 d_alepena;
123*13194f3bSVivek Gautam 
124*13194f3bSVivek Gautam 	u32 reserved6[55];
125*13194f3bSVivek Gautam 
126*13194f3bSVivek Gautam 	struct d_physical_endpoint d_phy_ep_cmd[32];
127*13194f3bSVivek Gautam 
128*13194f3bSVivek Gautam 	u32 reserved7[128];
129*13194f3bSVivek Gautam 
130*13194f3bSVivek Gautam 	u32 o_cfg;
131*13194f3bSVivek Gautam 	u32 o_ctl;
132*13194f3bSVivek Gautam 	u32 o_evt;
133*13194f3bSVivek Gautam 	u32 o_evten;
134*13194f3bSVivek Gautam 	u32 o_sts;
135*13194f3bSVivek Gautam 
136*13194f3bSVivek Gautam 	u32 reserved8[3];
137*13194f3bSVivek Gautam 
138*13194f3bSVivek Gautam 	u32 adp_cfg;
139*13194f3bSVivek Gautam 	u32 adp_ctl;
140*13194f3bSVivek Gautam 	u32 adp_evt;
141*13194f3bSVivek Gautam 	u32 adp_evten;
142*13194f3bSVivek Gautam 
143*13194f3bSVivek Gautam 	u32 bc_cfg;
144*13194f3bSVivek Gautam 
145*13194f3bSVivek Gautam 	u32 reserved9;
146*13194f3bSVivek Gautam 
147*13194f3bSVivek Gautam 	u32 bc_evt;
148*13194f3bSVivek Gautam 	u32 bc_evten;
149*13194f3bSVivek Gautam };
150*13194f3bSVivek Gautam 
151*13194f3bSVivek Gautam /* Global Configuration Register */
152*13194f3bSVivek Gautam #define DWC3_GCTL_PWRDNSCALE(n)			((n) << 19)
153*13194f3bSVivek Gautam #define DWC3_GCTL_U2RSTECN			(1 << 16)
154*13194f3bSVivek Gautam #define DWC3_GCTL_RAMCLKSEL(x)			\
155*13194f3bSVivek Gautam 		(((x) & DWC3_GCTL_CLK_MASK) << 6)
156*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_BUS			(0)
157*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPE			(1)
158*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPEHALF			(2)
159*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_MASK			(3)
160*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP(n)			(((n) & (3 << 12)) >> 12)
161*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAPDIR(n)			((n) << 12)
162*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_HOST			1
163*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_DEVICE			2
164*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_OTG			3
165*13194f3bSVivek Gautam #define DWC3_GCTL_CORESOFTRESET			(1 << 11)
166*13194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN(n)			((n) << 4)
167*13194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN_MASK		DWC3_GCTL_SCALEDOWN(3)
168*13194f3bSVivek Gautam #define DWC3_GCTL_DISSCRAMBLE			(1 << 3)
169*13194f3bSVivek Gautam #define DWC3_GCTL_DSBLCLKGTNG			(1 << 0)
170*13194f3bSVivek Gautam 
171*13194f3bSVivek Gautam /* Global HWPARAMS1 Register */
172*13194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT(n)		(((n) & (3 << 24)) >> 24)
173*13194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_NO		0
174*13194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_CLK		1
175*13194f3bSVivek Gautam 
176*13194f3bSVivek Gautam /* Global USB2 PHY Configuration Register */
177*13194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_PHYSOFTRST		(1 << 31)
178*13194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_SUSPHY			(1 << 6)
179*13194f3bSVivek Gautam 
180*13194f3bSVivek Gautam /* Global USB3 PIPE Control Register */
181*13194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_PHYSOFTRST		(1 << 31)
182*13194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_SUSPHY		(1 << 17)
183*13194f3bSVivek Gautam 
184*13194f3bSVivek Gautam /* Global TX Fifo Size Register */
185*13194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFDEF(n)		((n) & 0xffff)
186*13194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFSTADDR(n)		((n) & 0xffff0000)
187*13194f3bSVivek Gautam 
188*13194f3bSVivek Gautam #endif /* __DWC3_H_ */
189