xref: /OK3568_Linux_fs/kernel/drivers/usb/mtu3/mtu3_hw_regs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * mtu3_hw_regs.h - MediaTek USB3 DRD register and field definitions
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2016 MediaTek Inc.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author: Chunfeng Yun <chunfeng.yun@mediatek.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef _SSUSB_HW_REGS_H_
11*4882a593Smuzhiyun #define _SSUSB_HW_REGS_H_
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /* segment offset of MAC register */
14*4882a593Smuzhiyun #define SSUSB_DEV_BASE		0x0000
15*4882a593Smuzhiyun #define SSUSB_EPCTL_CSR_BASE	0x0800
16*4882a593Smuzhiyun #define SSUSB_USB3_MAC_CSR_BASE	0x1400
17*4882a593Smuzhiyun #define SSUSB_USB3_SYS_CSR_BASE	0x1400
18*4882a593Smuzhiyun #define SSUSB_USB2_CSR_BASE	0x2400
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* IPPC register in Infra */
21*4882a593Smuzhiyun #define SSUSB_SIFSLV_IPPC_BASE	0x0000
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* --------------- SSUSB_DEV REGISTER DEFINITION --------------- */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define U3D_LV1ISR		(SSUSB_DEV_BASE + 0x0000)
26*4882a593Smuzhiyun #define U3D_LV1IER		(SSUSB_DEV_BASE + 0x0004)
27*4882a593Smuzhiyun #define U3D_LV1IESR		(SSUSB_DEV_BASE + 0x0008)
28*4882a593Smuzhiyun #define U3D_LV1IECR		(SSUSB_DEV_BASE + 0x000C)
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define U3D_EPISR		(SSUSB_DEV_BASE + 0x0080)
31*4882a593Smuzhiyun #define U3D_EPIER		(SSUSB_DEV_BASE + 0x0084)
32*4882a593Smuzhiyun #define U3D_EPIESR		(SSUSB_DEV_BASE + 0x0088)
33*4882a593Smuzhiyun #define U3D_EPIECR		(SSUSB_DEV_BASE + 0x008C)
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define U3D_EP0CSR		(SSUSB_DEV_BASE + 0x0100)
36*4882a593Smuzhiyun #define U3D_RXCOUNT0		(SSUSB_DEV_BASE + 0x0108)
37*4882a593Smuzhiyun #define U3D_RESERVED		(SSUSB_DEV_BASE + 0x010C)
38*4882a593Smuzhiyun #define U3D_TX1CSR0		(SSUSB_DEV_BASE + 0x0110)
39*4882a593Smuzhiyun #define U3D_TX1CSR1		(SSUSB_DEV_BASE + 0x0114)
40*4882a593Smuzhiyun #define U3D_TX1CSR2		(SSUSB_DEV_BASE + 0x0118)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #define U3D_RX1CSR0		(SSUSB_DEV_BASE + 0x0210)
43*4882a593Smuzhiyun #define U3D_RX1CSR1		(SSUSB_DEV_BASE + 0x0214)
44*4882a593Smuzhiyun #define U3D_RX1CSR2		(SSUSB_DEV_BASE + 0x0218)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define U3D_FIFO0		(SSUSB_DEV_BASE + 0x0300)
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define U3D_QCR0		(SSUSB_DEV_BASE + 0x0400)
49*4882a593Smuzhiyun #define U3D_QCR1		(SSUSB_DEV_BASE + 0x0404)
50*4882a593Smuzhiyun #define U3D_QCR2		(SSUSB_DEV_BASE + 0x0408)
51*4882a593Smuzhiyun #define U3D_QCR3		(SSUSB_DEV_BASE + 0x040C)
52*4882a593Smuzhiyun #define U3D_QFCR		(SSUSB_DEV_BASE + 0x0428)
53*4882a593Smuzhiyun #define U3D_TXQHIAR1		(SSUSB_DEV_BASE + 0x0484)
54*4882a593Smuzhiyun #define U3D_RXQHIAR1		(SSUSB_DEV_BASE + 0x04C4)
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun #define U3D_TXQCSR1		(SSUSB_DEV_BASE + 0x0510)
57*4882a593Smuzhiyun #define U3D_TXQSAR1		(SSUSB_DEV_BASE + 0x0514)
58*4882a593Smuzhiyun #define U3D_TXQCPR1		(SSUSB_DEV_BASE + 0x0518)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define U3D_RXQCSR1		(SSUSB_DEV_BASE + 0x0610)
61*4882a593Smuzhiyun #define U3D_RXQSAR1		(SSUSB_DEV_BASE + 0x0614)
62*4882a593Smuzhiyun #define U3D_RXQCPR1		(SSUSB_DEV_BASE + 0x0618)
63*4882a593Smuzhiyun #define U3D_RXQLDPR1		(SSUSB_DEV_BASE + 0x061C)
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun #define U3D_QISAR0		(SSUSB_DEV_BASE + 0x0700)
66*4882a593Smuzhiyun #define U3D_QIER0		(SSUSB_DEV_BASE + 0x0704)
67*4882a593Smuzhiyun #define U3D_QIESR0		(SSUSB_DEV_BASE + 0x0708)
68*4882a593Smuzhiyun #define U3D_QIECR0		(SSUSB_DEV_BASE + 0x070C)
69*4882a593Smuzhiyun #define U3D_QISAR1		(SSUSB_DEV_BASE + 0x0710)
70*4882a593Smuzhiyun #define U3D_QIER1		(SSUSB_DEV_BASE + 0x0714)
71*4882a593Smuzhiyun #define U3D_QIESR1		(SSUSB_DEV_BASE + 0x0718)
72*4882a593Smuzhiyun #define U3D_QIECR1		(SSUSB_DEV_BASE + 0x071C)
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #define U3D_TQERRIR0		(SSUSB_DEV_BASE + 0x0780)
75*4882a593Smuzhiyun #define U3D_TQERRIER0		(SSUSB_DEV_BASE + 0x0784)
76*4882a593Smuzhiyun #define U3D_TQERRIESR0		(SSUSB_DEV_BASE + 0x0788)
77*4882a593Smuzhiyun #define U3D_TQERRIECR0		(SSUSB_DEV_BASE + 0x078C)
78*4882a593Smuzhiyun #define U3D_RQERRIR0		(SSUSB_DEV_BASE + 0x07C0)
79*4882a593Smuzhiyun #define U3D_RQERRIER0		(SSUSB_DEV_BASE + 0x07C4)
80*4882a593Smuzhiyun #define U3D_RQERRIESR0		(SSUSB_DEV_BASE + 0x07C8)
81*4882a593Smuzhiyun #define U3D_RQERRIECR0		(SSUSB_DEV_BASE + 0x07CC)
82*4882a593Smuzhiyun #define U3D_RQERRIR1		(SSUSB_DEV_BASE + 0x07D0)
83*4882a593Smuzhiyun #define U3D_RQERRIER1		(SSUSB_DEV_BASE + 0x07D4)
84*4882a593Smuzhiyun #define U3D_RQERRIESR1		(SSUSB_DEV_BASE + 0x07D8)
85*4882a593Smuzhiyun #define U3D_RQERRIECR1		(SSUSB_DEV_BASE + 0x07DC)
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #define U3D_CAP_EP0FFSZ		(SSUSB_DEV_BASE + 0x0C04)
88*4882a593Smuzhiyun #define U3D_CAP_EPNTXFFSZ	(SSUSB_DEV_BASE + 0x0C08)
89*4882a593Smuzhiyun #define U3D_CAP_EPNRXFFSZ	(SSUSB_DEV_BASE + 0x0C0C)
90*4882a593Smuzhiyun #define U3D_CAP_EPINFO		(SSUSB_DEV_BASE + 0x0C10)
91*4882a593Smuzhiyun #define U3D_MISC_CTRL		(SSUSB_DEV_BASE + 0x0C84)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /*---------------- SSUSB_DEV FIELD DEFINITION ---------------*/
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun /* U3D_LV1ISR */
96*4882a593Smuzhiyun #define EP_CTRL_INTR		BIT(5)
97*4882a593Smuzhiyun #define MAC2_INTR		BIT(4)
98*4882a593Smuzhiyun #define DMA_INTR		BIT(3)
99*4882a593Smuzhiyun #define MAC3_INTR		BIT(2)
100*4882a593Smuzhiyun #define QMU_INTR		BIT(1)
101*4882a593Smuzhiyun #define BMU_INTR		BIT(0)
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun /* U3D_LV1IECR */
104*4882a593Smuzhiyun #define LV1IECR_MSK		GENMASK(31, 0)
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /* U3D_EPISR */
107*4882a593Smuzhiyun #define EPRISR(x)		(BIT(16) << (x))
108*4882a593Smuzhiyun #define SETUPENDISR		BIT(16)
109*4882a593Smuzhiyun #define EPTISR(x)		(BIT(0) << (x))
110*4882a593Smuzhiyun #define EP0ISR			BIT(0)
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /* U3D_EP0CSR */
113*4882a593Smuzhiyun #define EP0_SENDSTALL		BIT(25)
114*4882a593Smuzhiyun #define EP0_FIFOFULL		BIT(23)
115*4882a593Smuzhiyun #define EP0_SENTSTALL		BIT(22)
116*4882a593Smuzhiyun #define EP0_DPHTX		BIT(20)
117*4882a593Smuzhiyun #define EP0_DATAEND		BIT(19)
118*4882a593Smuzhiyun #define EP0_TXPKTRDY		BIT(18)
119*4882a593Smuzhiyun #define EP0_SETUPPKTRDY		BIT(17)
120*4882a593Smuzhiyun #define EP0_RXPKTRDY		BIT(16)
121*4882a593Smuzhiyun #define EP0_MAXPKTSZ_MSK	GENMASK(9, 0)
122*4882a593Smuzhiyun #define EP0_MAXPKTSZ(x)		((x) & EP0_MAXPKTSZ_MSK)
123*4882a593Smuzhiyun #define EP0_W1C_BITS	(~(EP0_RXPKTRDY | EP0_SETUPPKTRDY | EP0_SENTSTALL))
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* U3D_TX1CSR0 */
126*4882a593Smuzhiyun #define TX_DMAREQEN		BIT(29)
127*4882a593Smuzhiyun #define TX_FIFOFULL		BIT(25)
128*4882a593Smuzhiyun #define TX_FIFOEMPTY		BIT(24)
129*4882a593Smuzhiyun #define TX_SENTSTALL		BIT(22)
130*4882a593Smuzhiyun #define TX_SENDSTALL		BIT(21)
131*4882a593Smuzhiyun #define TX_TXPKTRDY		BIT(16)
132*4882a593Smuzhiyun #define TX_TXMAXPKTSZ_MSK	GENMASK(10, 0)
133*4882a593Smuzhiyun #define TX_TXMAXPKTSZ(x)	((x) & TX_TXMAXPKTSZ_MSK)
134*4882a593Smuzhiyun #define TX_W1C_BITS		(~(TX_SENTSTALL))
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* U3D_TX1CSR1 */
137*4882a593Smuzhiyun #define TX_MAX_PKT_G2(x)	(((x) & 0xff) << 24)
138*4882a593Smuzhiyun #define TX_MULT_G2(x)		(((x) & 0x7) << 21)
139*4882a593Smuzhiyun #define TX_MULT_OG(x)		(((x) & 0x3) << 22)
140*4882a593Smuzhiyun #define TX_MAX_PKT_OG(x)	(((x) & 0x3f) << 16)
141*4882a593Smuzhiyun #define TX_SLOT(x)		(((x) & 0x3f) << 8)
142*4882a593Smuzhiyun #define TX_TYPE(x)		(((x) & 0x3) << 4)
143*4882a593Smuzhiyun #define TX_SS_BURST(x)		(((x) & 0xf) << 0)
144*4882a593Smuzhiyun #define TX_MULT(g2c, x)		\
145*4882a593Smuzhiyun ({				\
146*4882a593Smuzhiyun 	typeof(x) x_ = (x);	\
147*4882a593Smuzhiyun 	(g2c) ? TX_MULT_G2(x_) : TX_MULT_OG(x_);	\
148*4882a593Smuzhiyun })
149*4882a593Smuzhiyun #define TX_MAX_PKT(g2c, x)	\
150*4882a593Smuzhiyun ({				\
151*4882a593Smuzhiyun 	typeof(x) x_ = (x);	\
152*4882a593Smuzhiyun 	(g2c) ? TX_MAX_PKT_G2(x_) : TX_MAX_PKT_OG(x_);	\
153*4882a593Smuzhiyun })
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /* for TX_TYPE & RX_TYPE */
156*4882a593Smuzhiyun #define TYPE_BULK		(0x0)
157*4882a593Smuzhiyun #define TYPE_INT		(0x1)
158*4882a593Smuzhiyun #define TYPE_ISO		(0x2)
159*4882a593Smuzhiyun #define TYPE_MASK		(0x3)
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun /* U3D_TX1CSR2 */
162*4882a593Smuzhiyun #define TX_BINTERVAL(x)		(((x) & 0xff) << 24)
163*4882a593Smuzhiyun #define TX_FIFOSEGSIZE(x)	(((x) & 0xf) << 16)
164*4882a593Smuzhiyun #define TX_FIFOADDR(x)		(((x) & 0x1fff) << 0)
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /* U3D_RX1CSR0 */
167*4882a593Smuzhiyun #define RX_DMAREQEN		BIT(29)
168*4882a593Smuzhiyun #define RX_SENTSTALL		BIT(22)
169*4882a593Smuzhiyun #define RX_SENDSTALL		BIT(21)
170*4882a593Smuzhiyun #define RX_RXPKTRDY		BIT(16)
171*4882a593Smuzhiyun #define RX_RXMAXPKTSZ_MSK	GENMASK(10, 0)
172*4882a593Smuzhiyun #define RX_RXMAXPKTSZ(x)	((x) & RX_RXMAXPKTSZ_MSK)
173*4882a593Smuzhiyun #define RX_W1C_BITS		(~(RX_SENTSTALL | RX_RXPKTRDY))
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* U3D_RX1CSR1 */
176*4882a593Smuzhiyun #define RX_MAX_PKT_G2(x)	(((x) & 0xff) << 24)
177*4882a593Smuzhiyun #define RX_MULT_G2(x)		(((x) & 0x7) << 21)
178*4882a593Smuzhiyun #define RX_MULT_OG(x)		(((x) & 0x3) << 22)
179*4882a593Smuzhiyun #define RX_MAX_PKT_OG(x)	(((x) & 0x3f) << 16)
180*4882a593Smuzhiyun #define RX_SLOT(x)		(((x) & 0x3f) << 8)
181*4882a593Smuzhiyun #define RX_TYPE(x)		(((x) & 0x3) << 4)
182*4882a593Smuzhiyun #define RX_SS_BURST(x)		(((x) & 0xf) << 0)
183*4882a593Smuzhiyun #define RX_MULT(g2c, x)		\
184*4882a593Smuzhiyun ({				\
185*4882a593Smuzhiyun 	typeof(x) x_ = (x);	\
186*4882a593Smuzhiyun 	(g2c) ? RX_MULT_G2(x_) : RX_MULT_OG(x_);	\
187*4882a593Smuzhiyun })
188*4882a593Smuzhiyun #define RX_MAX_PKT(g2c, x)	\
189*4882a593Smuzhiyun ({				\
190*4882a593Smuzhiyun 	typeof(x) x_ = (x);	\
191*4882a593Smuzhiyun 	(g2c) ? RX_MAX_PKT_G2(x_) : RX_MAX_PKT_OG(x_);	\
192*4882a593Smuzhiyun })
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun /* U3D_RX1CSR2 */
195*4882a593Smuzhiyun #define RX_BINTERVAL(x)		(((x) & 0xff) << 24)
196*4882a593Smuzhiyun #define RX_FIFOSEGSIZE(x)	(((x) & 0xf) << 16)
197*4882a593Smuzhiyun #define RX_FIFOADDR(x)		(((x) & 0x1fff) << 0)
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /* U3D_QCR0 */
200*4882a593Smuzhiyun #define QMU_RX_CS_EN(x)		(BIT(16) << (x))
201*4882a593Smuzhiyun #define QMU_TX_CS_EN(x)		(BIT(0) << (x))
202*4882a593Smuzhiyun #define QMU_CS16B_EN		BIT(0)
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun /* U3D_QCR1 */
205*4882a593Smuzhiyun #define QMU_TX_ZLP(x)		(BIT(0) << (x))
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun /* U3D_QCR3 */
208*4882a593Smuzhiyun #define QMU_RX_COZ(x)		(BIT(16) << (x))
209*4882a593Smuzhiyun #define QMU_RX_ZLP(x)		(BIT(0) << (x))
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun /* U3D_TXQHIAR1 */
212*4882a593Smuzhiyun /* U3D_RXQHIAR1 */
213*4882a593Smuzhiyun #define QMU_LAST_DONE_PTR_HI(x)	(((x) >> 16) & 0xf)
214*4882a593Smuzhiyun #define QMU_CUR_GPD_ADDR_HI(x)	(((x) >> 8) & 0xf)
215*4882a593Smuzhiyun #define QMU_START_ADDR_HI_MSK	GENMASK(3, 0)
216*4882a593Smuzhiyun #define QMU_START_ADDR_HI(x)	(((x) & 0xf) << 0)
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun /* U3D_TXQCSR1 */
219*4882a593Smuzhiyun /* U3D_RXQCSR1 */
220*4882a593Smuzhiyun #define QMU_Q_ACTIVE		BIT(15)
221*4882a593Smuzhiyun #define QMU_Q_STOP		BIT(2)
222*4882a593Smuzhiyun #define QMU_Q_RESUME		BIT(1)
223*4882a593Smuzhiyun #define QMU_Q_START		BIT(0)
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /* U3D_QISAR0, U3D_QIER0, U3D_QIESR0, U3D_QIECR0 */
226*4882a593Smuzhiyun #define QMU_RX_DONE_INT(x)	(BIT(16) << (x))
227*4882a593Smuzhiyun #define QMU_TX_DONE_INT(x)	(BIT(0) << (x))
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun /* U3D_QISAR1, U3D_QIER1, U3D_QIESR1, U3D_QIECR1 */
230*4882a593Smuzhiyun #define RXQ_ZLPERR_INT		BIT(20)
231*4882a593Smuzhiyun #define RXQ_LENERR_INT		BIT(18)
232*4882a593Smuzhiyun #define RXQ_CSERR_INT		BIT(17)
233*4882a593Smuzhiyun #define RXQ_EMPTY_INT		BIT(16)
234*4882a593Smuzhiyun #define TXQ_LENERR_INT		BIT(2)
235*4882a593Smuzhiyun #define TXQ_CSERR_INT		BIT(1)
236*4882a593Smuzhiyun #define TXQ_EMPTY_INT		BIT(0)
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun /* U3D_TQERRIR0, U3D_TQERRIER0, U3D_TQERRIESR0, U3D_TQERRIECR0 */
239*4882a593Smuzhiyun #define QMU_TX_LEN_ERR(x)	(BIT(16) << (x))
240*4882a593Smuzhiyun #define QMU_TX_CS_ERR(x)	(BIT(0) << (x))
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun /* U3D_RQERRIR0, U3D_RQERRIER0, U3D_RQERRIESR0, U3D_RQERRIECR0 */
243*4882a593Smuzhiyun #define QMU_RX_LEN_ERR(x)	(BIT(16) << (x))
244*4882a593Smuzhiyun #define QMU_RX_CS_ERR(x)	(BIT(0) << (x))
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun /* U3D_RQERRIR1, U3D_RQERRIER1, U3D_RQERRIESR1, U3D_RQERRIECR1 */
247*4882a593Smuzhiyun #define QMU_RX_ZLP_ERR(n)	(BIT(16) << (n))
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun /* U3D_CAP_EPINFO */
250*4882a593Smuzhiyun #define CAP_RX_EP_NUM(x)	(((x) >> 8) & 0x1f)
251*4882a593Smuzhiyun #define CAP_TX_EP_NUM(x)	((x) & 0x1f)
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun /* U3D_MISC_CTRL */
254*4882a593Smuzhiyun #define DMA_ADDR_36BIT		BIT(31)
255*4882a593Smuzhiyun #define VBUS_ON			BIT(1)
256*4882a593Smuzhiyun #define VBUS_FRC_EN		BIT(0)
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /*---------------- SSUSB_EPCTL_CSR REGISTER DEFINITION ----------------*/
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun #define U3D_DEVICE_CONF			(SSUSB_EPCTL_CSR_BASE + 0x0000)
262*4882a593Smuzhiyun #define U3D_EP_RST			(SSUSB_EPCTL_CSR_BASE + 0x0004)
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun #define U3D_DEV_LINK_INTR_ENABLE	(SSUSB_EPCTL_CSR_BASE + 0x0050)
265*4882a593Smuzhiyun #define U3D_DEV_LINK_INTR		(SSUSB_EPCTL_CSR_BASE + 0x0054)
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun /*---------------- SSUSB_EPCTL_CSR FIELD DEFINITION ----------------*/
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun /* U3D_DEVICE_CONF */
270*4882a593Smuzhiyun #define DEV_ADDR_MSK		GENMASK(30, 24)
271*4882a593Smuzhiyun #define DEV_ADDR(x)		((0x7f & (x)) << 24)
272*4882a593Smuzhiyun #define HW_USB2_3_SEL		BIT(18)
273*4882a593Smuzhiyun #define SW_USB2_3_SEL_EN	BIT(17)
274*4882a593Smuzhiyun #define SW_USB2_3_SEL		BIT(16)
275*4882a593Smuzhiyun #define SSUSB_DEV_SPEED(x)	((x) & 0x7)
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun /* U3D_EP_RST */
278*4882a593Smuzhiyun #define EP1_IN_RST		BIT(17)
279*4882a593Smuzhiyun #define EP1_OUT_RST		BIT(1)
280*4882a593Smuzhiyun #define EP_RST(is_in, epnum)	(((is_in) ? BIT(16) : BIT(0)) << (epnum))
281*4882a593Smuzhiyun #define EP0_RST			BIT(0)
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun /* U3D_DEV_LINK_INTR_ENABLE */
284*4882a593Smuzhiyun /* U3D_DEV_LINK_INTR */
285*4882a593Smuzhiyun #define SSUSB_DEV_SPEED_CHG_INTR	BIT(0)
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /*---------------- SSUSB_USB3_MAC_CSR REGISTER DEFINITION ----------------*/
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun #define U3D_LTSSM_CTRL		(SSUSB_USB3_MAC_CSR_BASE + 0x0010)
291*4882a593Smuzhiyun #define U3D_USB3_CONFIG		(SSUSB_USB3_MAC_CSR_BASE + 0x001C)
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun #define U3D_LINK_STATE_MACHINE	(SSUSB_USB3_MAC_CSR_BASE + 0x0134)
294*4882a593Smuzhiyun #define U3D_LTSSM_INTR_ENABLE	(SSUSB_USB3_MAC_CSR_BASE + 0x013C)
295*4882a593Smuzhiyun #define U3D_LTSSM_INTR		(SSUSB_USB3_MAC_CSR_BASE + 0x0140)
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun #define U3D_U3U2_SWITCH_CTRL	(SSUSB_USB3_MAC_CSR_BASE + 0x0170)
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /*---------------- SSUSB_USB3_MAC_CSR FIELD DEFINITION ----------------*/
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun /* U3D_LTSSM_CTRL */
302*4882a593Smuzhiyun #define FORCE_POLLING_FAIL	BIT(4)
303*4882a593Smuzhiyun #define FORCE_RXDETECT_FAIL	BIT(3)
304*4882a593Smuzhiyun #define SOFT_U3_EXIT_EN		BIT(2)
305*4882a593Smuzhiyun #define COMPLIANCE_EN		BIT(1)
306*4882a593Smuzhiyun #define U1_GO_U2_EN		BIT(0)
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun /* U3D_USB3_CONFIG */
309*4882a593Smuzhiyun #define USB3_EN			BIT(0)
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun /* U3D_LINK_STATE_MACHINE */
312*4882a593Smuzhiyun #define LTSSM_STATE(x)	((x) & 0x1f)
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun /* U3D_LTSSM_INTR_ENABLE */
315*4882a593Smuzhiyun /* U3D_LTSSM_INTR */
316*4882a593Smuzhiyun #define U3_RESUME_INTR		BIT(18)
317*4882a593Smuzhiyun #define U3_LFPS_TMOUT_INTR	BIT(17)
318*4882a593Smuzhiyun #define VBUS_FALL_INTR		BIT(16)
319*4882a593Smuzhiyun #define VBUS_RISE_INTR		BIT(15)
320*4882a593Smuzhiyun #define RXDET_SUCCESS_INTR	BIT(14)
321*4882a593Smuzhiyun #define EXIT_U3_INTR		BIT(13)
322*4882a593Smuzhiyun #define EXIT_U2_INTR		BIT(12)
323*4882a593Smuzhiyun #define EXIT_U1_INTR		BIT(11)
324*4882a593Smuzhiyun #define ENTER_U3_INTR		BIT(10)
325*4882a593Smuzhiyun #define ENTER_U2_INTR		BIT(9)
326*4882a593Smuzhiyun #define ENTER_U1_INTR		BIT(8)
327*4882a593Smuzhiyun #define ENTER_U0_INTR		BIT(7)
328*4882a593Smuzhiyun #define RECOVERY_INTR		BIT(6)
329*4882a593Smuzhiyun #define WARM_RST_INTR		BIT(5)
330*4882a593Smuzhiyun #define HOT_RST_INTR		BIT(4)
331*4882a593Smuzhiyun #define LOOPBACK_INTR		BIT(3)
332*4882a593Smuzhiyun #define COMPLIANCE_INTR		BIT(2)
333*4882a593Smuzhiyun #define SS_DISABLE_INTR		BIT(1)
334*4882a593Smuzhiyun #define SS_INACTIVE_INTR	BIT(0)
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun /* U3D_U3U2_SWITCH_CTRL */
337*4882a593Smuzhiyun #define SOFTCON_CLR_AUTO_EN	BIT(0)
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun /*---------------- SSUSB_USB3_SYS_CSR REGISTER DEFINITION ----------------*/
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun #define U3D_LINK_UX_INACT_TIMER	(SSUSB_USB3_SYS_CSR_BASE + 0x020C)
342*4882a593Smuzhiyun #define U3D_LINK_POWER_CONTROL	(SSUSB_USB3_SYS_CSR_BASE + 0x0210)
343*4882a593Smuzhiyun #define U3D_LINK_ERR_COUNT	(SSUSB_USB3_SYS_CSR_BASE + 0x0214)
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun /*---------------- SSUSB_USB3_SYS_CSR FIELD DEFINITION ----------------*/
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun /* U3D_LINK_UX_INACT_TIMER */
348*4882a593Smuzhiyun #define DEV_U2_INACT_TIMEOUT_MSK	GENMASK(23, 16)
349*4882a593Smuzhiyun #define DEV_U2_INACT_TIMEOUT_VALUE(x)	(((x) & 0xff) << 16)
350*4882a593Smuzhiyun #define U2_INACT_TIMEOUT_MSK		GENMASK(15, 8)
351*4882a593Smuzhiyun #define U1_INACT_TIMEOUT_MSK		GENMASK(7, 0)
352*4882a593Smuzhiyun #define U1_INACT_TIMEOUT_VALUE(x)	((x) & 0xff)
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun /* U3D_LINK_POWER_CONTROL */
355*4882a593Smuzhiyun #define SW_U2_ACCEPT_ENABLE	BIT(9)
356*4882a593Smuzhiyun #define SW_U1_ACCEPT_ENABLE	BIT(8)
357*4882a593Smuzhiyun #define UX_EXIT			BIT(5)
358*4882a593Smuzhiyun #define LGO_U3			BIT(4)
359*4882a593Smuzhiyun #define LGO_U2			BIT(3)
360*4882a593Smuzhiyun #define LGO_U1			BIT(2)
361*4882a593Smuzhiyun #define SW_U2_REQUEST_ENABLE	BIT(1)
362*4882a593Smuzhiyun #define SW_U1_REQUEST_ENABLE	BIT(0)
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun /* U3D_LINK_ERR_COUNT */
365*4882a593Smuzhiyun #define CLR_LINK_ERR_CNT	BIT(16)
366*4882a593Smuzhiyun #define LINK_ERROR_COUNT	GENMASK(15, 0)
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun /*---------------- SSUSB_USB2_CSR REGISTER DEFINITION ----------------*/
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun #define U3D_POWER_MANAGEMENT		(SSUSB_USB2_CSR_BASE + 0x0004)
371*4882a593Smuzhiyun #define U3D_DEVICE_CONTROL		(SSUSB_USB2_CSR_BASE + 0x000C)
372*4882a593Smuzhiyun #define U3D_USB2_TEST_MODE		(SSUSB_USB2_CSR_BASE + 0x0014)
373*4882a593Smuzhiyun #define U3D_COMMON_USB_INTR_ENABLE	(SSUSB_USB2_CSR_BASE + 0x0018)
374*4882a593Smuzhiyun #define U3D_COMMON_USB_INTR		(SSUSB_USB2_CSR_BASE + 0x001C)
375*4882a593Smuzhiyun #define U3D_LINK_RESET_INFO		(SSUSB_USB2_CSR_BASE + 0x0024)
376*4882a593Smuzhiyun #define U3D_USB20_FRAME_NUM		(SSUSB_USB2_CSR_BASE + 0x003C)
377*4882a593Smuzhiyun #define U3D_USB20_LPM_PARAMETER		(SSUSB_USB2_CSR_BASE + 0x0044)
378*4882a593Smuzhiyun #define U3D_USB20_MISC_CONTROL		(SSUSB_USB2_CSR_BASE + 0x004C)
379*4882a593Smuzhiyun #define U3D_USB20_OPSTATE		(SSUSB_USB2_CSR_BASE + 0x0060)
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /*---------------- SSUSB_USB2_CSR FIELD DEFINITION ----------------*/
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun /* U3D_POWER_MANAGEMENT */
384*4882a593Smuzhiyun #define LPM_BESL_STALL		BIT(14)
385*4882a593Smuzhiyun #define LPM_BESLD_STALL		BIT(13)
386*4882a593Smuzhiyun #define LPM_RWP			BIT(11)
387*4882a593Smuzhiyun #define LPM_HRWE		BIT(10)
388*4882a593Smuzhiyun #define LPM_MODE(x)		(((x) & 0x3) << 8)
389*4882a593Smuzhiyun #define ISO_UPDATE		BIT(7)
390*4882a593Smuzhiyun #define SOFT_CONN		BIT(6)
391*4882a593Smuzhiyun #define HS_ENABLE		BIT(5)
392*4882a593Smuzhiyun #define RESUME			BIT(2)
393*4882a593Smuzhiyun #define SUSPENDM_ENABLE		BIT(0)
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun /* U3D_DEVICE_CONTROL */
396*4882a593Smuzhiyun #define DC_HOSTREQ		BIT(1)
397*4882a593Smuzhiyun #define DC_SESSION		BIT(0)
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun /* U3D_USB2_TEST_MODE */
400*4882a593Smuzhiyun #define U2U3_AUTO_SWITCH	BIT(10)
401*4882a593Smuzhiyun #define LPM_FORCE_STALL		BIT(8)
402*4882a593Smuzhiyun #define FIFO_ACCESS		BIT(6)
403*4882a593Smuzhiyun #define FORCE_FS		BIT(5)
404*4882a593Smuzhiyun #define FORCE_HS		BIT(4)
405*4882a593Smuzhiyun #define TEST_PACKET_MODE	BIT(3)
406*4882a593Smuzhiyun #define TEST_K_MODE		BIT(2)
407*4882a593Smuzhiyun #define TEST_J_MODE		BIT(1)
408*4882a593Smuzhiyun #define TEST_SE0_NAK_MODE	BIT(0)
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun /* U3D_COMMON_USB_INTR_ENABLE */
411*4882a593Smuzhiyun /* U3D_COMMON_USB_INTR */
412*4882a593Smuzhiyun #define LPM_RESUME_INTR		BIT(9)
413*4882a593Smuzhiyun #define LPM_INTR		BIT(8)
414*4882a593Smuzhiyun #define DISCONN_INTR		BIT(5)
415*4882a593Smuzhiyun #define CONN_INTR		BIT(4)
416*4882a593Smuzhiyun #define SOF_INTR		BIT(3)
417*4882a593Smuzhiyun #define RESET_INTR		BIT(2)
418*4882a593Smuzhiyun #define RESUME_INTR		BIT(1)
419*4882a593Smuzhiyun #define SUSPEND_INTR		BIT(0)
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun /* U3D_LINK_RESET_INFO */
422*4882a593Smuzhiyun #define WTCHRP_MSK		GENMASK(19, 16)
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun /* U3D_USB20_LPM_PARAMETER */
425*4882a593Smuzhiyun #define LPM_BESLCK_U3(x)	(((x) & 0xf) << 12)
426*4882a593Smuzhiyun #define LPM_BESLCK(x)		(((x) & 0xf) << 8)
427*4882a593Smuzhiyun #define LPM_BESLDCK(x)		(((x) & 0xf) << 4)
428*4882a593Smuzhiyun #define LPM_BESL		GENMASK(3, 0)
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun /* U3D_USB20_MISC_CONTROL */
431*4882a593Smuzhiyun #define LPM_U3_ACK_EN		BIT(0)
432*4882a593Smuzhiyun 
433*4882a593Smuzhiyun /*---------------- SSUSB_SIFSLV_IPPC REGISTER DEFINITION ----------------*/
434*4882a593Smuzhiyun 
435*4882a593Smuzhiyun #define U3D_SSUSB_IP_PW_CTRL0	(SSUSB_SIFSLV_IPPC_BASE + 0x0000)
436*4882a593Smuzhiyun #define U3D_SSUSB_IP_PW_CTRL1	(SSUSB_SIFSLV_IPPC_BASE + 0x0004)
437*4882a593Smuzhiyun #define U3D_SSUSB_IP_PW_CTRL2	(SSUSB_SIFSLV_IPPC_BASE + 0x0008)
438*4882a593Smuzhiyun #define U3D_SSUSB_IP_PW_CTRL3	(SSUSB_SIFSLV_IPPC_BASE + 0x000C)
439*4882a593Smuzhiyun #define U3D_SSUSB_IP_PW_STS1	(SSUSB_SIFSLV_IPPC_BASE + 0x0010)
440*4882a593Smuzhiyun #define U3D_SSUSB_IP_PW_STS2	(SSUSB_SIFSLV_IPPC_BASE + 0x0014)
441*4882a593Smuzhiyun #define U3D_SSUSB_OTG_STS	(SSUSB_SIFSLV_IPPC_BASE + 0x0018)
442*4882a593Smuzhiyun #define U3D_SSUSB_OTG_STS_CLR	(SSUSB_SIFSLV_IPPC_BASE + 0x001C)
443*4882a593Smuzhiyun #define U3D_SSUSB_IP_XHCI_CAP	(SSUSB_SIFSLV_IPPC_BASE + 0x0024)
444*4882a593Smuzhiyun #define U3D_SSUSB_IP_DEV_CAP	(SSUSB_SIFSLV_IPPC_BASE + 0x0028)
445*4882a593Smuzhiyun #define U3D_SSUSB_OTG_INT_EN	(SSUSB_SIFSLV_IPPC_BASE + 0x002C)
446*4882a593Smuzhiyun #define U3D_SSUSB_U3_CTRL_0P	(SSUSB_SIFSLV_IPPC_BASE + 0x0030)
447*4882a593Smuzhiyun #define U3D_SSUSB_U2_CTRL_0P	(SSUSB_SIFSLV_IPPC_BASE + 0x0050)
448*4882a593Smuzhiyun #define U3D_SSUSB_REF_CK_CTRL	(SSUSB_SIFSLV_IPPC_BASE + 0x008C)
449*4882a593Smuzhiyun #define U3D_SSUSB_DEV_RST_CTRL	(SSUSB_SIFSLV_IPPC_BASE + 0x0098)
450*4882a593Smuzhiyun #define U3D_SSUSB_HW_ID		(SSUSB_SIFSLV_IPPC_BASE + 0x00A0)
451*4882a593Smuzhiyun #define U3D_SSUSB_HW_SUB_ID	(SSUSB_SIFSLV_IPPC_BASE + 0x00A4)
452*4882a593Smuzhiyun #define U3D_SSUSB_IP_TRUNK_VERS	(U3D_SSUSB_HW_SUB_ID)
453*4882a593Smuzhiyun #define U3D_SSUSB_PRB_CTRL0	(SSUSB_SIFSLV_IPPC_BASE + 0x00B0)
454*4882a593Smuzhiyun #define U3D_SSUSB_PRB_CTRL1	(SSUSB_SIFSLV_IPPC_BASE + 0x00B4)
455*4882a593Smuzhiyun #define U3D_SSUSB_PRB_CTRL2	(SSUSB_SIFSLV_IPPC_BASE + 0x00B8)
456*4882a593Smuzhiyun #define U3D_SSUSB_PRB_CTRL3	(SSUSB_SIFSLV_IPPC_BASE + 0x00BC)
457*4882a593Smuzhiyun #define U3D_SSUSB_PRB_CTRL4	(SSUSB_SIFSLV_IPPC_BASE + 0x00C0)
458*4882a593Smuzhiyun #define U3D_SSUSB_PRB_CTRL5	(SSUSB_SIFSLV_IPPC_BASE + 0x00C4)
459*4882a593Smuzhiyun #define U3D_SSUSB_IP_SPARE0	(SSUSB_SIFSLV_IPPC_BASE + 0x00C8)
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun /*---------------- SSUSB_SIFSLV_IPPC FIELD DEFINITION ----------------*/
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun /* U3D_SSUSB_IP_PW_CTRL0 */
464*4882a593Smuzhiyun #define SSUSB_IP_SW_RST			BIT(0)
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun /* U3D_SSUSB_IP_PW_CTRL1 */
467*4882a593Smuzhiyun #define SSUSB_IP_HOST_PDN		BIT(0)
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun /* U3D_SSUSB_IP_PW_CTRL2 */
470*4882a593Smuzhiyun #define SSUSB_IP_DEV_PDN		BIT(0)
471*4882a593Smuzhiyun 
472*4882a593Smuzhiyun /* U3D_SSUSB_IP_PW_CTRL3 */
473*4882a593Smuzhiyun #define SSUSB_IP_PCIE_PDN		BIT(0)
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun /* U3D_SSUSB_IP_PW_STS1 */
476*4882a593Smuzhiyun #define SSUSB_IP_SLEEP_STS		BIT(30)
477*4882a593Smuzhiyun #define SSUSB_U3_MAC_RST_B_STS		BIT(16)
478*4882a593Smuzhiyun #define SSUSB_XHCI_RST_B_STS		BIT(11)
479*4882a593Smuzhiyun #define SSUSB_SYS125_RST_B_STS		BIT(10)
480*4882a593Smuzhiyun #define SSUSB_REF_RST_B_STS		BIT(8)
481*4882a593Smuzhiyun #define SSUSB_SYSPLL_STABLE		BIT(0)
482*4882a593Smuzhiyun 
483*4882a593Smuzhiyun /* U3D_SSUSB_IP_PW_STS2 */
484*4882a593Smuzhiyun #define SSUSB_U2_MAC_SYS_RST_B_STS	BIT(0)
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun /* U3D_SSUSB_OTG_STS */
487*4882a593Smuzhiyun #define SSUSB_VBUS_VALID		BIT(9)
488*4882a593Smuzhiyun 
489*4882a593Smuzhiyun /* U3D_SSUSB_OTG_STS_CLR */
490*4882a593Smuzhiyun #define SSUSB_VBUS_INTR_CLR		BIT(6)
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun /* U3D_SSUSB_IP_XHCI_CAP */
493*4882a593Smuzhiyun #define SSUSB_IP_XHCI_U2_PORT_NUM(x)	(((x) >> 8) & 0xff)
494*4882a593Smuzhiyun #define SSUSB_IP_XHCI_U3_PORT_NUM(x)	((x) & 0xff)
495*4882a593Smuzhiyun 
496*4882a593Smuzhiyun /* U3D_SSUSB_IP_DEV_CAP */
497*4882a593Smuzhiyun #define SSUSB_IP_DEV_U3_PORT_NUM(x)	((x) & 0xff)
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun /* U3D_SSUSB_OTG_INT_EN */
500*4882a593Smuzhiyun #define SSUSB_VBUS_CHG_INT_A_EN		BIT(7)
501*4882a593Smuzhiyun #define SSUSB_VBUS_CHG_INT_B_EN		BIT(6)
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun /* U3D_SSUSB_U3_CTRL_0P */
504*4882a593Smuzhiyun #define SSUSB_U3_PORT_SSP_SPEED	BIT(9)
505*4882a593Smuzhiyun #define SSUSB_U3_PORT_DUAL_MODE	BIT(7)
506*4882a593Smuzhiyun #define SSUSB_U3_PORT_HOST_SEL		BIT(2)
507*4882a593Smuzhiyun #define SSUSB_U3_PORT_PDN		BIT(1)
508*4882a593Smuzhiyun #define SSUSB_U3_PORT_DIS		BIT(0)
509*4882a593Smuzhiyun 
510*4882a593Smuzhiyun /* U3D_SSUSB_U2_CTRL_0P */
511*4882a593Smuzhiyun #define SSUSB_U2_PORT_RG_IDDIG		BIT(12)
512*4882a593Smuzhiyun #define SSUSB_U2_PORT_FORCE_IDDIG	BIT(11)
513*4882a593Smuzhiyun #define SSUSB_U2_PORT_VBUSVALID	BIT(9)
514*4882a593Smuzhiyun #define SSUSB_U2_PORT_OTG_SEL		BIT(7)
515*4882a593Smuzhiyun #define SSUSB_U2_PORT_HOST		BIT(2)
516*4882a593Smuzhiyun #define SSUSB_U2_PORT_PDN		BIT(1)
517*4882a593Smuzhiyun #define SSUSB_U2_PORT_DIS		BIT(0)
518*4882a593Smuzhiyun #define SSUSB_U2_PORT_HOST_SEL	(SSUSB_U2_PORT_VBUSVALID | SSUSB_U2_PORT_HOST)
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun /* U3D_SSUSB_DEV_RST_CTRL */
521*4882a593Smuzhiyun #define SSUSB_DEV_SW_RST		BIT(0)
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun /* U3D_SSUSB_IP_TRUNK_VERS */
524*4882a593Smuzhiyun #define IP_TRUNK_VERS(x)		(((x) >> 16) & 0xffff)
525*4882a593Smuzhiyun 
526*4882a593Smuzhiyun #endif	/* _SSUSB_HW_REGS_H_ */
527