xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac4.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * DWMAC4 Header file.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2015  STMicroelectronics Ltd
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author: Alexandre Torgue <alexandre.torgue@st.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __DWMAC4_H__
11*4882a593Smuzhiyun #define __DWMAC4_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include "common.h"
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /*  MAC registers */
16*4882a593Smuzhiyun #define GMAC_CONFIG			0x00000000
17*4882a593Smuzhiyun #define GMAC_EXT_CONFIG			0x00000004
18*4882a593Smuzhiyun #define GMAC_PACKET_FILTER		0x00000008
19*4882a593Smuzhiyun #define GMAC_HASH_TAB(x)		(0x10 + (x) * 4)
20*4882a593Smuzhiyun #define GMAC_VLAN_TAG			0x00000050
21*4882a593Smuzhiyun #define GMAC_VLAN_TAG_DATA		0x00000054
22*4882a593Smuzhiyun #define GMAC_VLAN_HASH_TABLE		0x00000058
23*4882a593Smuzhiyun #define GMAC_RX_FLOW_CTRL		0x00000090
24*4882a593Smuzhiyun #define GMAC_VLAN_INCL			0x00000060
25*4882a593Smuzhiyun #define GMAC_QX_TX_FLOW_CTRL(x)		(0x70 + x * 4)
26*4882a593Smuzhiyun #define GMAC_TXQ_PRTY_MAP0		0x98
27*4882a593Smuzhiyun #define GMAC_TXQ_PRTY_MAP1		0x9C
28*4882a593Smuzhiyun #define GMAC_RXQ_CTRL0			0x000000a0
29*4882a593Smuzhiyun #define GMAC_RXQ_CTRL1			0x000000a4
30*4882a593Smuzhiyun #define GMAC_RXQ_CTRL2			0x000000a8
31*4882a593Smuzhiyun #define GMAC_RXQ_CTRL3			0x000000ac
32*4882a593Smuzhiyun #define GMAC_INT_STATUS			0x000000b0
33*4882a593Smuzhiyun #define GMAC_INT_EN			0x000000b4
34*4882a593Smuzhiyun #define GMAC_1US_TIC_COUNTER		0x000000dc
35*4882a593Smuzhiyun #define GMAC_PCS_BASE			0x000000e0
36*4882a593Smuzhiyun #define GMAC_PHYIF_CONTROL_STATUS	0x000000f8
37*4882a593Smuzhiyun #define GMAC_PMT			0x000000c0
38*4882a593Smuzhiyun #define GMAC_DEBUG			0x00000114
39*4882a593Smuzhiyun #define GMAC_HW_FEATURE0		0x0000011c
40*4882a593Smuzhiyun #define GMAC_HW_FEATURE1		0x00000120
41*4882a593Smuzhiyun #define GMAC_HW_FEATURE2		0x00000124
42*4882a593Smuzhiyun #define GMAC_HW_FEATURE3		0x00000128
43*4882a593Smuzhiyun #define GMAC_MDIO_ADDR			0x00000200
44*4882a593Smuzhiyun #define GMAC_MDIO_DATA			0x00000204
45*4882a593Smuzhiyun #define GMAC_ARP_ADDR			0x00000210
46*4882a593Smuzhiyun #define GMAC_ADDR_HIGH(reg)		(0x300 + reg * 8)
47*4882a593Smuzhiyun #define GMAC_ADDR_LOW(reg)		(0x304 + reg * 8)
48*4882a593Smuzhiyun #define GMAC_L3L4_CTRL(reg)		(0x900 + (reg) * 0x30)
49*4882a593Smuzhiyun #define GMAC_L4_ADDR(reg)		(0x904 + (reg) * 0x30)
50*4882a593Smuzhiyun #define GMAC_L3_ADDR0(reg)		(0x910 + (reg) * 0x30)
51*4882a593Smuzhiyun #define GMAC_L3_ADDR1(reg)		(0x914 + (reg) * 0x30)
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /* RX Queues Routing */
54*4882a593Smuzhiyun #define GMAC_RXQCTRL_AVCPQ_MASK		GENMASK(2, 0)
55*4882a593Smuzhiyun #define GMAC_RXQCTRL_AVCPQ_SHIFT	0
56*4882a593Smuzhiyun #define GMAC_RXQCTRL_PTPQ_MASK		GENMASK(6, 4)
57*4882a593Smuzhiyun #define GMAC_RXQCTRL_PTPQ_SHIFT		4
58*4882a593Smuzhiyun #define GMAC_RXQCTRL_DCBCPQ_MASK	GENMASK(10, 8)
59*4882a593Smuzhiyun #define GMAC_RXQCTRL_DCBCPQ_SHIFT	8
60*4882a593Smuzhiyun #define GMAC_RXQCTRL_UPQ_MASK		GENMASK(14, 12)
61*4882a593Smuzhiyun #define GMAC_RXQCTRL_UPQ_SHIFT		12
62*4882a593Smuzhiyun #define GMAC_RXQCTRL_MCBCQ_MASK		GENMASK(18, 16)
63*4882a593Smuzhiyun #define GMAC_RXQCTRL_MCBCQ_SHIFT	16
64*4882a593Smuzhiyun #define GMAC_RXQCTRL_MCBCQEN		BIT(20)
65*4882a593Smuzhiyun #define GMAC_RXQCTRL_MCBCQEN_SHIFT	20
66*4882a593Smuzhiyun #define GMAC_RXQCTRL_TACPQE		BIT(21)
67*4882a593Smuzhiyun #define GMAC_RXQCTRL_TACPQE_SHIFT	21
68*4882a593Smuzhiyun #define GMAC_RXQCTRL_FPRQ		GENMASK(26, 24)
69*4882a593Smuzhiyun #define GMAC_RXQCTRL_FPRQ_SHIFT		24
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun /* MAC Packet Filtering */
72*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_PR		BIT(0)
73*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_HMC		BIT(2)
74*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_PM		BIT(4)
75*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_PCF		BIT(7)
76*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_HPF		BIT(10)
77*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_VTFE		BIT(16)
78*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_IPFE		BIT(20)
79*4882a593Smuzhiyun #define GMAC_PACKET_FILTER_RA		BIT(31)
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #define GMAC_MAX_PERFECT_ADDRESSES	128
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun /* MAC VLAN */
84*4882a593Smuzhiyun #define GMAC_VLAN_EDVLP			BIT(26)
85*4882a593Smuzhiyun #define GMAC_VLAN_VTHM			BIT(25)
86*4882a593Smuzhiyun #define GMAC_VLAN_DOVLTC		BIT(20)
87*4882a593Smuzhiyun #define GMAC_VLAN_ESVL			BIT(18)
88*4882a593Smuzhiyun #define GMAC_VLAN_ETV			BIT(16)
89*4882a593Smuzhiyun #define GMAC_VLAN_VID			GENMASK(15, 0)
90*4882a593Smuzhiyun #define GMAC_VLAN_VLTI			BIT(20)
91*4882a593Smuzhiyun #define GMAC_VLAN_CSVL			BIT(19)
92*4882a593Smuzhiyun #define GMAC_VLAN_VLC			GENMASK(17, 16)
93*4882a593Smuzhiyun #define GMAC_VLAN_VLC_SHIFT		16
94*4882a593Smuzhiyun #define GMAC_VLAN_VLHT			GENMASK(15, 0)
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /* MAC VLAN Tag */
97*4882a593Smuzhiyun #define GMAC_VLAN_TAG_VID		GENMASK(15, 0)
98*4882a593Smuzhiyun #define GMAC_VLAN_TAG_ETV		BIT(16)
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* MAC VLAN Tag Control */
101*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_OB		BIT(0)
102*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_CT		BIT(1)
103*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_OFS_MASK	GENMASK(6, 2)
104*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_OFS_SHIFT	2
105*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_EVLS_MASK	GENMASK(22, 21)
106*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_EVLS_SHIFT	21
107*4882a593Smuzhiyun #define GMAC_VLAN_TAG_CTRL_EVLRXS	BIT(24)
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define GMAC_VLAN_TAG_STRIP_NONE	(0x0 << GMAC_VLAN_TAG_CTRL_EVLS_SHIFT)
110*4882a593Smuzhiyun #define GMAC_VLAN_TAG_STRIP_PASS	(0x1 << GMAC_VLAN_TAG_CTRL_EVLS_SHIFT)
111*4882a593Smuzhiyun #define GMAC_VLAN_TAG_STRIP_FAIL	(0x2 << GMAC_VLAN_TAG_CTRL_EVLS_SHIFT)
112*4882a593Smuzhiyun #define GMAC_VLAN_TAG_STRIP_ALL		(0x3 << GMAC_VLAN_TAG_CTRL_EVLS_SHIFT)
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /* MAC VLAN Tag Data/Filter */
115*4882a593Smuzhiyun #define GMAC_VLAN_TAG_DATA_VID		GENMASK(15, 0)
116*4882a593Smuzhiyun #define GMAC_VLAN_TAG_DATA_VEN		BIT(16)
117*4882a593Smuzhiyun #define GMAC_VLAN_TAG_DATA_ETV		BIT(17)
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* MAC RX Queue Enable */
120*4882a593Smuzhiyun #define GMAC_RX_QUEUE_CLEAR(queue)	~(GENMASK(1, 0) << ((queue) * 2))
121*4882a593Smuzhiyun #define GMAC_RX_AV_QUEUE_ENABLE(queue)	BIT((queue) * 2)
122*4882a593Smuzhiyun #define GMAC_RX_DCB_QUEUE_ENABLE(queue)	BIT(((queue) * 2) + 1)
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* MAC Flow Control RX */
125*4882a593Smuzhiyun #define GMAC_RX_FLOW_CTRL_RFE		BIT(0)
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /* RX Queues Priorities */
128*4882a593Smuzhiyun #define GMAC_RXQCTRL_PSRQX_MASK(x)	GENMASK(7 + ((x) * 8), 0 + ((x) * 8))
129*4882a593Smuzhiyun #define GMAC_RXQCTRL_PSRQX_SHIFT(x)	((x) * 8)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun /* TX Queues Priorities */
132*4882a593Smuzhiyun #define GMAC_TXQCTRL_PSTQX_MASK(x)	GENMASK(7 + ((x) * 8), 0 + ((x) * 8))
133*4882a593Smuzhiyun #define GMAC_TXQCTRL_PSTQX_SHIFT(x)	((x) * 8)
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun /* MAC Flow Control TX */
136*4882a593Smuzhiyun #define GMAC_TX_FLOW_CTRL_TFE		BIT(1)
137*4882a593Smuzhiyun #define GMAC_TX_FLOW_CTRL_PT_SHIFT	16
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun /*  MAC Interrupt bitmap*/
140*4882a593Smuzhiyun #define GMAC_INT_RGSMIIS		BIT(0)
141*4882a593Smuzhiyun #define GMAC_INT_PCS_LINK		BIT(1)
142*4882a593Smuzhiyun #define GMAC_INT_PCS_ANE		BIT(2)
143*4882a593Smuzhiyun #define GMAC_INT_PCS_PHYIS		BIT(3)
144*4882a593Smuzhiyun #define GMAC_INT_PMT_EN			BIT(4)
145*4882a593Smuzhiyun #define GMAC_INT_LPI_EN			BIT(5)
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #define	GMAC_PCS_IRQ_DEFAULT	(GMAC_INT_RGSMIIS | GMAC_INT_PCS_LINK |	\
148*4882a593Smuzhiyun 				 GMAC_INT_PCS_ANE)
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #define	GMAC_INT_DEFAULT_ENABLE	(GMAC_INT_PMT_EN | GMAC_INT_LPI_EN)
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun enum dwmac4_irq_status {
153*4882a593Smuzhiyun 	time_stamp_irq = 0x00001000,
154*4882a593Smuzhiyun 	mmc_rx_csum_offload_irq = 0x00000800,
155*4882a593Smuzhiyun 	mmc_tx_irq = 0x00000400,
156*4882a593Smuzhiyun 	mmc_rx_irq = 0x00000200,
157*4882a593Smuzhiyun 	mmc_irq = 0x00000100,
158*4882a593Smuzhiyun 	lpi_irq = 0x00000020,
159*4882a593Smuzhiyun 	pmt_irq = 0x00000010,
160*4882a593Smuzhiyun };
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun /* MAC PMT bitmap */
163*4882a593Smuzhiyun enum power_event {
164*4882a593Smuzhiyun 	pointer_reset =	0x80000000,
165*4882a593Smuzhiyun 	global_unicast = 0x00000200,
166*4882a593Smuzhiyun 	wake_up_rx_frame = 0x00000040,
167*4882a593Smuzhiyun 	magic_frame = 0x00000020,
168*4882a593Smuzhiyun 	wake_up_frame_en = 0x00000004,
169*4882a593Smuzhiyun 	magic_pkt_en = 0x00000002,
170*4882a593Smuzhiyun 	power_down = 0x00000001,
171*4882a593Smuzhiyun };
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun /* Energy Efficient Ethernet (EEE) for GMAC4
174*4882a593Smuzhiyun  *
175*4882a593Smuzhiyun  * LPI status, timer and control register offset
176*4882a593Smuzhiyun  */
177*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS	0xd0
178*4882a593Smuzhiyun #define GMAC4_LPI_TIMER_CTRL	0xd4
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /* LPI control and status defines */
181*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_LPITCSE	BIT(21)	/* LPI Tx Clock Stop Enable */
182*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_LPITXA	BIT(19)	/* Enable LPI TX Automate */
183*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_PLS	BIT(17) /* PHY Link Status */
184*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_LPIEN	BIT(16)	/* LPI Enable */
185*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_RLPIEX	BIT(3) /* Receive LPI Exit */
186*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_RLPIEN	BIT(2) /* Receive LPI Entry */
187*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_TLPIEX	BIT(1) /* Transmit LPI Exit */
188*4882a593Smuzhiyun #define GMAC4_LPI_CTRL_STATUS_TLPIEN	BIT(0) /* Transmit LPI Entry */
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun /* MAC Debug bitmap */
191*4882a593Smuzhiyun #define GMAC_DEBUG_TFCSTS_MASK		GENMASK(18, 17)
192*4882a593Smuzhiyun #define GMAC_DEBUG_TFCSTS_SHIFT		17
193*4882a593Smuzhiyun #define GMAC_DEBUG_TFCSTS_IDLE		0
194*4882a593Smuzhiyun #define GMAC_DEBUG_TFCSTS_WAIT		1
195*4882a593Smuzhiyun #define GMAC_DEBUG_TFCSTS_GEN_PAUSE	2
196*4882a593Smuzhiyun #define GMAC_DEBUG_TFCSTS_XFER		3
197*4882a593Smuzhiyun #define GMAC_DEBUG_TPESTS		BIT(16)
198*4882a593Smuzhiyun #define GMAC_DEBUG_RFCFCSTS_MASK	GENMASK(2, 1)
199*4882a593Smuzhiyun #define GMAC_DEBUG_RFCFCSTS_SHIFT	1
200*4882a593Smuzhiyun #define GMAC_DEBUG_RPESTS		BIT(0)
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun /* MAC config */
203*4882a593Smuzhiyun #define GMAC_CONFIG_ARPEN		BIT(31)
204*4882a593Smuzhiyun #define GMAC_CONFIG_SARC		GENMASK(30, 28)
205*4882a593Smuzhiyun #define GMAC_CONFIG_SARC_SHIFT		28
206*4882a593Smuzhiyun #define GMAC_CONFIG_IPC			BIT(27)
207*4882a593Smuzhiyun #define GMAC_CONFIG_IPG			GENMASK(26, 24)
208*4882a593Smuzhiyun #define GMAC_CONFIG_IPG_SHIFT		24
209*4882a593Smuzhiyun #define GMAC_CONFIG_2K			BIT(22)
210*4882a593Smuzhiyun #define GMAC_CONFIG_ACS			BIT(20)
211*4882a593Smuzhiyun #define GMAC_CONFIG_BE			BIT(18)
212*4882a593Smuzhiyun #define GMAC_CONFIG_JD			BIT(17)
213*4882a593Smuzhiyun #define GMAC_CONFIG_JE			BIT(16)
214*4882a593Smuzhiyun #define GMAC_CONFIG_PS			BIT(15)
215*4882a593Smuzhiyun #define GMAC_CONFIG_FES			BIT(14)
216*4882a593Smuzhiyun #define GMAC_CONFIG_FES_SHIFT		14
217*4882a593Smuzhiyun #define GMAC_CONFIG_DM			BIT(13)
218*4882a593Smuzhiyun #define GMAC_CONFIG_LM			BIT(12)
219*4882a593Smuzhiyun #define GMAC_CONFIG_DCRS		BIT(9)
220*4882a593Smuzhiyun #define GMAC_CONFIG_TE			BIT(1)
221*4882a593Smuzhiyun #define GMAC_CONFIG_RE			BIT(0)
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun /* MAC extended config */
224*4882a593Smuzhiyun #define GMAC_CONFIG_EIPG		GENMASK(29, 25)
225*4882a593Smuzhiyun #define GMAC_CONFIG_EIPG_SHIFT		25
226*4882a593Smuzhiyun #define GMAC_CONFIG_EIPG_EN		BIT(24)
227*4882a593Smuzhiyun #define GMAC_CONFIG_HDSMS		GENMASK(22, 20)
228*4882a593Smuzhiyun #define GMAC_CONFIG_HDSMS_SHIFT		20
229*4882a593Smuzhiyun #define GMAC_CONFIG_HDSMS_256		(0x2 << GMAC_CONFIG_HDSMS_SHIFT)
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /* MAC HW features0 bitmap */
232*4882a593Smuzhiyun #define GMAC_HW_FEAT_SAVLANINS		BIT(27)
233*4882a593Smuzhiyun #define GMAC_HW_FEAT_ADDMAC		BIT(18)
234*4882a593Smuzhiyun #define GMAC_HW_FEAT_RXCOESEL		BIT(16)
235*4882a593Smuzhiyun #define GMAC_HW_FEAT_TXCOSEL		BIT(14)
236*4882a593Smuzhiyun #define GMAC_HW_FEAT_EEESEL		BIT(13)
237*4882a593Smuzhiyun #define GMAC_HW_FEAT_TSSEL		BIT(12)
238*4882a593Smuzhiyun #define GMAC_HW_FEAT_ARPOFFSEL		BIT(9)
239*4882a593Smuzhiyun #define GMAC_HW_FEAT_MMCSEL		BIT(8)
240*4882a593Smuzhiyun #define GMAC_HW_FEAT_MGKSEL		BIT(7)
241*4882a593Smuzhiyun #define GMAC_HW_FEAT_RWKSEL		BIT(6)
242*4882a593Smuzhiyun #define GMAC_HW_FEAT_SMASEL		BIT(5)
243*4882a593Smuzhiyun #define GMAC_HW_FEAT_VLHASH		BIT(4)
244*4882a593Smuzhiyun #define GMAC_HW_FEAT_PCSSEL		BIT(3)
245*4882a593Smuzhiyun #define GMAC_HW_FEAT_HDSEL		BIT(2)
246*4882a593Smuzhiyun #define GMAC_HW_FEAT_GMIISEL		BIT(1)
247*4882a593Smuzhiyun #define GMAC_HW_FEAT_MIISEL		BIT(0)
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun /* MAC HW features1 bitmap */
250*4882a593Smuzhiyun #define GMAC_HW_FEAT_L3L4FNUM		GENMASK(30, 27)
251*4882a593Smuzhiyun #define GMAC_HW_HASH_TB_SZ		GENMASK(25, 24)
252*4882a593Smuzhiyun #define GMAC_HW_FEAT_AVSEL		BIT(20)
253*4882a593Smuzhiyun #define GMAC_HW_TSOEN			BIT(18)
254*4882a593Smuzhiyun #define GMAC_HW_FEAT_SPHEN		BIT(17)
255*4882a593Smuzhiyun #define GMAC_HW_ADDR64			GENMASK(15, 14)
256*4882a593Smuzhiyun #define GMAC_HW_TXFIFOSIZE		GENMASK(10, 6)
257*4882a593Smuzhiyun #define GMAC_HW_RXFIFOSIZE		GENMASK(4, 0)
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /* MAC HW features2 bitmap */
260*4882a593Smuzhiyun #define GMAC_HW_FEAT_PPSOUTNUM		GENMASK(26, 24)
261*4882a593Smuzhiyun #define GMAC_HW_FEAT_TXCHCNT		GENMASK(21, 18)
262*4882a593Smuzhiyun #define GMAC_HW_FEAT_RXCHCNT		GENMASK(15, 12)
263*4882a593Smuzhiyun #define GMAC_HW_FEAT_TXQCNT		GENMASK(9, 6)
264*4882a593Smuzhiyun #define GMAC_HW_FEAT_RXQCNT		GENMASK(3, 0)
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun /* MAC HW features3 bitmap */
267*4882a593Smuzhiyun #define GMAC_HW_FEAT_ASP		GENMASK(29, 28)
268*4882a593Smuzhiyun #define GMAC_HW_FEAT_TBSSEL		BIT(27)
269*4882a593Smuzhiyun #define GMAC_HW_FEAT_FPESEL		BIT(26)
270*4882a593Smuzhiyun #define GMAC_HW_FEAT_ESTWID		GENMASK(21, 20)
271*4882a593Smuzhiyun #define GMAC_HW_FEAT_ESTDEP		GENMASK(19, 17)
272*4882a593Smuzhiyun #define GMAC_HW_FEAT_ESTSEL		BIT(16)
273*4882a593Smuzhiyun #define GMAC_HW_FEAT_FRPES		GENMASK(14, 13)
274*4882a593Smuzhiyun #define GMAC_HW_FEAT_FRPBS		GENMASK(12, 11)
275*4882a593Smuzhiyun #define GMAC_HW_FEAT_FRPSEL		BIT(10)
276*4882a593Smuzhiyun #define GMAC_HW_FEAT_DVLAN		BIT(5)
277*4882a593Smuzhiyun #define GMAC_HW_FEAT_NRVF		GENMASK(2, 0)
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun /* MAC HW ADDR regs */
280*4882a593Smuzhiyun #define GMAC_HI_DCS			GENMASK(18, 16)
281*4882a593Smuzhiyun #define GMAC_HI_DCS_SHIFT		16
282*4882a593Smuzhiyun #define GMAC_HI_REG_AE			BIT(31)
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun /* L3/L4 Filters regs */
285*4882a593Smuzhiyun #define GMAC_L4DPIM0			BIT(21)
286*4882a593Smuzhiyun #define GMAC_L4DPM0			BIT(20)
287*4882a593Smuzhiyun #define GMAC_L4SPIM0			BIT(19)
288*4882a593Smuzhiyun #define GMAC_L4SPM0			BIT(18)
289*4882a593Smuzhiyun #define GMAC_L4PEN0			BIT(16)
290*4882a593Smuzhiyun #define GMAC_L3DAIM0			BIT(5)
291*4882a593Smuzhiyun #define GMAC_L3DAM0			BIT(4)
292*4882a593Smuzhiyun #define GMAC_L3SAIM0			BIT(3)
293*4882a593Smuzhiyun #define GMAC_L3SAM0			BIT(2)
294*4882a593Smuzhiyun #define GMAC_L3PEN0			BIT(0)
295*4882a593Smuzhiyun #define GMAC_L4DP0			GENMASK(31, 16)
296*4882a593Smuzhiyun #define GMAC_L4DP0_SHIFT		16
297*4882a593Smuzhiyun #define GMAC_L4SP0			GENMASK(15, 0)
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /*  MTL registers */
300*4882a593Smuzhiyun #define MTL_OPERATION_MODE		0x00000c00
301*4882a593Smuzhiyun #define MTL_FRPE			BIT(15)
302*4882a593Smuzhiyun #define MTL_OPERATION_SCHALG_MASK	GENMASK(6, 5)
303*4882a593Smuzhiyun #define MTL_OPERATION_SCHALG_WRR	(0x0 << 5)
304*4882a593Smuzhiyun #define MTL_OPERATION_SCHALG_WFQ	(0x1 << 5)
305*4882a593Smuzhiyun #define MTL_OPERATION_SCHALG_DWRR	(0x2 << 5)
306*4882a593Smuzhiyun #define MTL_OPERATION_SCHALG_SP		(0x3 << 5)
307*4882a593Smuzhiyun #define MTL_OPERATION_RAA		BIT(2)
308*4882a593Smuzhiyun #define MTL_OPERATION_RAA_SP		(0x0 << 2)
309*4882a593Smuzhiyun #define MTL_OPERATION_RAA_WSP		(0x1 << 2)
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun #define MTL_INT_STATUS			0x00000c20
312*4882a593Smuzhiyun #define MTL_INT_QX(x)			BIT(x)
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun #define MTL_RXQ_DMA_MAP0		0x00000c30 /* queue 0 to 3 */
315*4882a593Smuzhiyun #define MTL_RXQ_DMA_MAP1		0x00000c34 /* queue 4 to 7 */
316*4882a593Smuzhiyun #define MTL_RXQ_DMA_Q04MDMACH_MASK	GENMASK(3, 0)
317*4882a593Smuzhiyun #define MTL_RXQ_DMA_Q04MDMACH(x)	((x) << 0)
318*4882a593Smuzhiyun #define MTL_RXQ_DMA_QXMDMACH_MASK(x)	GENMASK(11 + (8 * ((x) - 1)), 8 * (x))
319*4882a593Smuzhiyun #define MTL_RXQ_DMA_QXMDMACH(chan, q)	((chan) << (8 * (q)))
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun #define MTL_CHAN_BASE_ADDR		0x00000d00
322*4882a593Smuzhiyun #define MTL_CHAN_BASE_OFFSET		0x40
323*4882a593Smuzhiyun #define MTL_CHANX_BASE_ADDR(x)		(MTL_CHAN_BASE_ADDR + \
324*4882a593Smuzhiyun 					(x * MTL_CHAN_BASE_OFFSET))
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun #define MTL_CHAN_TX_OP_MODE(x)		MTL_CHANX_BASE_ADDR(x)
327*4882a593Smuzhiyun #define MTL_CHAN_TX_DEBUG(x)		(MTL_CHANX_BASE_ADDR(x) + 0x8)
328*4882a593Smuzhiyun #define MTL_CHAN_INT_CTRL(x)		(MTL_CHANX_BASE_ADDR(x) + 0x2c)
329*4882a593Smuzhiyun #define MTL_CHAN_RX_OP_MODE(x)		(MTL_CHANX_BASE_ADDR(x) + 0x30)
330*4882a593Smuzhiyun #define MTL_CHAN_RX_DEBUG(x)		(MTL_CHANX_BASE_ADDR(x) + 0x38)
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun #define MTL_OP_MODE_RSF			BIT(5)
333*4882a593Smuzhiyun #define MTL_OP_MODE_TXQEN_MASK		GENMASK(3, 2)
334*4882a593Smuzhiyun #define MTL_OP_MODE_TXQEN_AV		BIT(2)
335*4882a593Smuzhiyun #define MTL_OP_MODE_TXQEN		BIT(3)
336*4882a593Smuzhiyun #define MTL_OP_MODE_TSF			BIT(1)
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun #define MTL_OP_MODE_TQS_MASK		GENMASK(24, 16)
339*4882a593Smuzhiyun #define MTL_OP_MODE_TQS_SHIFT		16
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_MASK		0x70
342*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_SHIFT		4
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_32		0
345*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_64		(1 << MTL_OP_MODE_TTC_SHIFT)
346*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_96		(2 << MTL_OP_MODE_TTC_SHIFT)
347*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_128		(3 << MTL_OP_MODE_TTC_SHIFT)
348*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_192		(4 << MTL_OP_MODE_TTC_SHIFT)
349*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_256		(5 << MTL_OP_MODE_TTC_SHIFT)
350*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_384		(6 << MTL_OP_MODE_TTC_SHIFT)
351*4882a593Smuzhiyun #define MTL_OP_MODE_TTC_512		(7 << MTL_OP_MODE_TTC_SHIFT)
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun #define MTL_OP_MODE_RQS_MASK		GENMASK(29, 20)
354*4882a593Smuzhiyun #define MTL_OP_MODE_RQS_SHIFT		20
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun #define MTL_OP_MODE_RFD_MASK		GENMASK(19, 14)
357*4882a593Smuzhiyun #define MTL_OP_MODE_RFD_SHIFT		14
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun #define MTL_OP_MODE_RFA_MASK		GENMASK(13, 8)
360*4882a593Smuzhiyun #define MTL_OP_MODE_RFA_SHIFT		8
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun #define MTL_OP_MODE_EHFC		BIT(7)
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun #define MTL_OP_MODE_RTC_MASK		0x18
365*4882a593Smuzhiyun #define MTL_OP_MODE_RTC_SHIFT		3
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun #define MTL_OP_MODE_RTC_32		(1 << MTL_OP_MODE_RTC_SHIFT)
368*4882a593Smuzhiyun #define MTL_OP_MODE_RTC_64		0
369*4882a593Smuzhiyun #define MTL_OP_MODE_RTC_96		(2 << MTL_OP_MODE_RTC_SHIFT)
370*4882a593Smuzhiyun #define MTL_OP_MODE_RTC_128		(3 << MTL_OP_MODE_RTC_SHIFT)
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun /* MTL ETS Control register */
373*4882a593Smuzhiyun #define MTL_ETS_CTRL_BASE_ADDR		0x00000d10
374*4882a593Smuzhiyun #define MTL_ETS_CTRL_BASE_OFFSET	0x40
375*4882a593Smuzhiyun #define MTL_ETSX_CTRL_BASE_ADDR(x)	(MTL_ETS_CTRL_BASE_ADDR + \
376*4882a593Smuzhiyun 					((x) * MTL_ETS_CTRL_BASE_OFFSET))
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun #define MTL_ETS_CTRL_CC			BIT(3)
379*4882a593Smuzhiyun #define MTL_ETS_CTRL_AVALG		BIT(2)
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /* MTL Queue Quantum Weight */
382*4882a593Smuzhiyun #define MTL_TXQ_WEIGHT_BASE_ADDR	0x00000d18
383*4882a593Smuzhiyun #define MTL_TXQ_WEIGHT_BASE_OFFSET	0x40
384*4882a593Smuzhiyun #define MTL_TXQX_WEIGHT_BASE_ADDR(x)	(MTL_TXQ_WEIGHT_BASE_ADDR + \
385*4882a593Smuzhiyun 					((x) * MTL_TXQ_WEIGHT_BASE_OFFSET))
386*4882a593Smuzhiyun #define MTL_TXQ_WEIGHT_ISCQW_MASK	GENMASK(20, 0)
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun /* MTL sendSlopeCredit register */
389*4882a593Smuzhiyun #define MTL_SEND_SLP_CRED_BASE_ADDR	0x00000d1c
390*4882a593Smuzhiyun #define MTL_SEND_SLP_CRED_OFFSET	0x40
391*4882a593Smuzhiyun #define MTL_SEND_SLP_CREDX_BASE_ADDR(x)	(MTL_SEND_SLP_CRED_BASE_ADDR + \
392*4882a593Smuzhiyun 					((x) * MTL_SEND_SLP_CRED_OFFSET))
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun #define MTL_SEND_SLP_CRED_SSC_MASK	GENMASK(13, 0)
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun /* MTL hiCredit register */
397*4882a593Smuzhiyun #define MTL_HIGH_CRED_BASE_ADDR		0x00000d20
398*4882a593Smuzhiyun #define MTL_HIGH_CRED_OFFSET		0x40
399*4882a593Smuzhiyun #define MTL_HIGH_CREDX_BASE_ADDR(x)	(MTL_HIGH_CRED_BASE_ADDR + \
400*4882a593Smuzhiyun 					((x) * MTL_HIGH_CRED_OFFSET))
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun #define MTL_HIGH_CRED_HC_MASK		GENMASK(28, 0)
403*4882a593Smuzhiyun 
404*4882a593Smuzhiyun /* MTL loCredit register */
405*4882a593Smuzhiyun #define MTL_LOW_CRED_BASE_ADDR		0x00000d24
406*4882a593Smuzhiyun #define MTL_LOW_CRED_OFFSET		0x40
407*4882a593Smuzhiyun #define MTL_LOW_CREDX_BASE_ADDR(x)	(MTL_LOW_CRED_BASE_ADDR + \
408*4882a593Smuzhiyun 					((x) * MTL_LOW_CRED_OFFSET))
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun #define MTL_HIGH_CRED_LC_MASK		GENMASK(28, 0)
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun /*  MTL debug */
413*4882a593Smuzhiyun #define MTL_DEBUG_TXSTSFSTS		BIT(5)
414*4882a593Smuzhiyun #define MTL_DEBUG_TXFSTS		BIT(4)
415*4882a593Smuzhiyun #define MTL_DEBUG_TWCSTS		BIT(3)
416*4882a593Smuzhiyun 
417*4882a593Smuzhiyun /* MTL debug: Tx FIFO Read Controller Status */
418*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_MASK		GENMASK(2, 1)
419*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_SHIFT		1
420*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_IDLE		0
421*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_READ		1
422*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_TXW		2
423*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_WRITE		3
424*4882a593Smuzhiyun #define MTL_DEBUG_TXPAUSED		BIT(0)
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun /* MAC debug: GMII or MII Transmit Protocol Engine Status */
427*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_MASK		GENMASK(5, 4)
428*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_SHIFT		4
429*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_EMPTY		0
430*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_BT		1
431*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_AT		2
432*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_FULL		3
433*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_MASK		GENMASK(2, 1)
434*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_SHIFT		1
435*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_IDLE		0
436*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_RDATA		1
437*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_RSTAT		2
438*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_FLUSH		3
439*4882a593Smuzhiyun #define MTL_DEBUG_RWCSTS		BIT(0)
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun /*  MTL interrupt */
442*4882a593Smuzhiyun #define MTL_RX_OVERFLOW_INT_EN		BIT(24)
443*4882a593Smuzhiyun #define MTL_RX_OVERFLOW_INT		BIT(16)
444*4882a593Smuzhiyun 
445*4882a593Smuzhiyun /* Default operating mode of the MAC */
446*4882a593Smuzhiyun #define GMAC_CORE_INIT (GMAC_CONFIG_JD | GMAC_CONFIG_PS | \
447*4882a593Smuzhiyun 			GMAC_CONFIG_BE | GMAC_CONFIG_DCRS | \
448*4882a593Smuzhiyun 			GMAC_CONFIG_JE)
449*4882a593Smuzhiyun 
450*4882a593Smuzhiyun /* To dump the core regs excluding  the Address Registers */
451*4882a593Smuzhiyun #define	GMAC_REG_NUM	132
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun /*  MTL debug */
454*4882a593Smuzhiyun #define MTL_DEBUG_TXSTSFSTS		BIT(5)
455*4882a593Smuzhiyun #define MTL_DEBUG_TXFSTS		BIT(4)
456*4882a593Smuzhiyun #define MTL_DEBUG_TWCSTS		BIT(3)
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun /* MTL debug: Tx FIFO Read Controller Status */
459*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_MASK		GENMASK(2, 1)
460*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_SHIFT		1
461*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_IDLE		0
462*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_READ		1
463*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_TXW		2
464*4882a593Smuzhiyun #define MTL_DEBUG_TRCSTS_WRITE		3
465*4882a593Smuzhiyun #define MTL_DEBUG_TXPAUSED		BIT(0)
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun /* MAC debug: GMII or MII Transmit Protocol Engine Status */
468*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_MASK		GENMASK(5, 4)
469*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_SHIFT		4
470*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_EMPTY		0
471*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_BT		1
472*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_AT		2
473*4882a593Smuzhiyun #define MTL_DEBUG_RXFSTS_FULL		3
474*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_MASK		GENMASK(2, 1)
475*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_SHIFT		1
476*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_IDLE		0
477*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_RDATA		1
478*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_RSTAT		2
479*4882a593Smuzhiyun #define MTL_DEBUG_RRCSTS_FLUSH		3
480*4882a593Smuzhiyun #define MTL_DEBUG_RWCSTS		BIT(0)
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun /* SGMII/RGMII status register */
483*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_TC		BIT(0)
484*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_LUD		BIT(1)
485*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_SMIDRXS		BIT(4)
486*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_LNKMOD		BIT(16)
487*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_SPEED		GENMASK(18, 17)
488*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_SPEED_SHIFT	17
489*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_LNKSTS		BIT(19)
490*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_JABTO		BIT(20)
491*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_FALSECARDET	BIT(21)
492*4882a593Smuzhiyun /* LNKMOD */
493*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_LNKMOD_MASK	0x1
494*4882a593Smuzhiyun /* LNKSPEED */
495*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_SPEED_125		0x2
496*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_SPEED_25		0x1
497*4882a593Smuzhiyun #define GMAC_PHYIF_CTRLSTATUS_SPEED_2_5		0x0
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun extern const struct stmmac_dma_ops dwmac4_dma_ops;
500*4882a593Smuzhiyun extern const struct stmmac_dma_ops dwmac410_dma_ops;
501*4882a593Smuzhiyun #endif /* __DWMAC4_H__ */
502