xref: /netbsd-src/sys/arch/arm/imx/if_enetreg.h (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /*	$NetBSD: if_enetreg.h,v 1.3 2017/06/09 18:14:59 ryo Exp $	*/
2 
3 /*-
4  * Copyright (c) 2014 Ryo Shimizu <ryo@nerv.org>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
25  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /*
30  * i.MX6,7 10/100/1000-Mbps ethernet MAC (ENET)
31  */
32 
33 #ifndef _ARM_IMX_IF_ENETREG_H_
34 #define _ARM_IMX_IF_ENETREG_H_
35 
36 #include <sys/cdefs.h>
37 
38 #define ENET_EIR			0x00000004
39 # define ENET_EIR_BABR			__BIT(30)
40 # define ENET_EIR_BABT			__BIT(29)
41 # define ENET_EIR_GRA			__BIT(28)
42 # define ENET_EIR_TXF			__BIT(27)
43 # define ENET_EIR_TXB			__BIT(26)
44 # define ENET_EIR_RXF			__BIT(25)
45 # define ENET_EIR_RXB			__BIT(24)
46 # define ENET_EIR_MII			__BIT(23)
47 # define ENET_EIR_EBERR			__BIT(22)
48 # define ENET_EIR_LC			__BIT(21)
49 # define ENET_EIR_RL			__BIT(20)
50 # define ENET_EIR_UN			__BIT(19)
51 # define ENET_EIR_PLR			__BIT(18)
52 # define ENET_EIR_WAKEUP		__BIT(17)
53 # define ENET_EIR_TS_AVAIL		__BIT(16)
54 # define ENET_EIR_TS_TIMER		__BIT(15)
55 # define ENET_EIR_RXFLUSH_2		__BIT(14)	/* imx7 */
56 # define ENET_EIR_RXFLUSH_1		__BIT(13)	/* imx7 */
57 # define ENET_EIR_RXFLUSH_0		__BIT(12)	/* imx7 */
58 # define ENET_EIR_TXF2			__BIT(7)	/* imx7 */
59 # define ENET_EIR_TXB2			__BIT(6)	/* imx7 */
60 # define ENET_EIR_RXF2			__BIT(5)	/* imx7 */
61 # define ENET_EIR_RXB2			__BIT(4)	/* imx7 */
62 # define ENET_EIR_TXF1			__BIT(3)	/* imx7 */
63 # define ENET_EIR_TXB1			__BIT(2)	/* imx7 */
64 # define ENET_EIR_RXF1			__BIT(1)	/* imx7 */
65 # define ENET_EIR_RXB1			__BIT(1)	/* imx7 */
66 #define ENET_EIMR			0x00000008
67 #define ENET_RDAR			0x00000010
68 # define ENET_RDAR_ACTIVE		__BIT(24)
69 #define ENET_TDAR			0x00000014
70 # define ENET_TDAR_ACTIVE		__BIT(24)
71 
72 #define ENET_ECR			0x00000024
73 # define ENET_ECR_SVLANDBL		__BIT(11)	/* imx7 */
74 # define ENET_ECR_VLANUE2ND		__BIT(10)	/* imx7 */
75 # define ENET_ECR_SVLANEN		__BIT(9)	/* imx7 */
76 # define ENET_ECR_DBSWP			__BIT(8)
77 # define ENET_ECR_STOPEN		__BIT(7)
78 # define ENET_ECR_DBGEN			__BIT(6)
79 # define ENET_ECR_SPEED			__BIT(5)
80 # define ENET_ECR_EN1588		__BIT(4)
81 # define ENET_ECR_SLEEP			__BIT(3)
82 # define ENET_ECR_MAGICEN		__BIT(2)
83 # define ENET_ECR_ETHEREN		__BIT(1)
84 # define ENET_ECR_RESET			__BIT(0)
85 #define ENET_MMFR			0x00000040
86 # define ENET_MMFR_ST			0x40000000
87 # define ENET_MMFR_OP_FORCEWRITE	0x00000000
88 # define ENET_MMFR_OP_WRITE		0x10000000
89 # define ENET_MMFR_OP_READ		0x20000000
90 # define ENET_MMFR_OP_FORCEREAD		0x30000000
91 # define ENET_MMFR_TA			0x00020000
92 # define ENET_MMFR_PHY_ADDR(phy)	__SHIFTIN(phy, __BITS(27, 23))
93 # define ENET_MMFR_PHY_REG(reg)		__SHIFTIN(reg, __BITS(22, 18))
94 # define ENET_MMFR_DATAMASK		0x0000ffff
95 #define ENET_MSCR			0x00000044
96 # define ENET_MSCR_HOLDTIME_1CLK	0x00000000
97 # define ENET_MSCR_HOLDTIME_2CLK	0x00000100
98 # define ENET_MSCR_HOLDTIME_3CLK	0x00000200
99 # define ENET_MSCR_HOLDTIME_8CLK	0x00000700
100 # define ENET_MSCR_DIS_PRE		__BIT(7)
101 # define ENET_MSCR_MII_SPEED_25MHZ	__SHIFTIN(4, __BITS(6, 1))
102 # define ENET_MSCR_MII_SPEED_33MHZ	__SHIFTIN(6, __BITS(6, 1))
103 # define ENET_MSCR_MII_SPEED_40MHZ	__SHIFTIN(7, __BITS(6, 1))
104 # define ENET_MSCR_MII_SPEED_50MHZ	__SHIFTIN(9, __BITS(6, 1))
105 # define ENET_MSCR_MII_SPEED_66MHZ	__SHIFTIN(13, __BITS(6, 1))
106 
107 #define ENET_MIBC			0x00000064
108 # define ENET_MIBC_MIB_DIS		__BIT(31)
109 # define ENET_MIBC_MIB_IDLE		__BIT(30)
110 # define ENET_MIBC_MIB_CLEAR		__BIT(29)
111 
112 #define ENET_RCR			0x00000084
113 # define ENET_RCR_GRS			__BIT(31)
114 # define ENET_RCR_NLC			__BIT(30)
115 # define ENET_RCR_MAX_FL(n)		__SHIFTIN(n, __BITS(29, 16))
116 # define ENET_RCR_CFEN			__BIT(15)
117 # define ENET_RCR_CRCFWD		__BIT(14)
118 # define ENET_RCR_PAUFWD		__BIT(13)
119 # define ENET_RCR_PADEN			__BIT(12)
120 # define ENET_RCR_RMII_10T		__BIT(9)
121 # define ENET_RCR_RMII_MODE		__BIT(8)
122 # define ENET_RCR_RGMII_EN		__BIT(6)
123 # define ENET_RCR_FCE			__BIT(5)
124 # define ENET_RCR_BC_REJ		__BIT(4)
125 # define ENET_RCR_PROM			__BIT(3)
126 # define ENET_RCR_MII_MODE		__BIT(2)
127 # define ENET_RCR_DRT			__BIT(1)
128 # define ENET_RCR_LOOP			__BIT(0)
129 
130 #define ENET_TCR			0x000000c4
131 # define ENET_TCR_FDEN			__BIT(2)
132 
133 #define ENET_PALR			0x000000e4
134 #define ENET_PAUR			0x000000e8
135 #define ENET_OPD			0x000000ec
136 
137 #define ENET_TXIC0			0x000000f0	/* imx7 */
138 #define ENET_TXIC1			0x000000f4	/* imx7 */
139 #define ENET_TXIC2			0x000000f8	/* imx7 */
140 #define ENET_RXIC0			0x00000100	/* imx7 */
141 #define ENET_RXIC1			0x00000104	/* imx7 */
142 #define ENET_RXIC2			0x00000108	/* imx7 */
143 
144 #define ENET_IAUR			0x00000118
145 #define ENET_IALR			0x0000011c
146 #define ENET_GAUR			0x00000120
147 #define ENET_GALR			0x00000124
148 #define ENET_TFWR			0x00000144
149 # define ENET_TFWR_STRFWD		__BIT(8)
150 # define ENET_TFWR_FIFO(n)		__SHIFTIN(((n) / 64), __BITS(5, 0))
151 
152 #define ENET_RDSR1			0x00000160	/* imx7 */
153 #define ENET_TDSR1			0x00000164	/* imx7 */
154 #define ENET_MRBR1			0x00000168	/* imx7 */
155 #define ENET_RDSR2			0x0000016c	/* imx7 */
156 #define ENET_TDSR2			0x00000170	/* imx7 */
157 #define ENET_MRBR2			0x00000174	/* imx7 */
158 
159 #define ENET_RDSR			0x00000180
160 #define ENET_TDSR			0x00000184
161 #define ENET_MRBR			0x00000188
162 #define ENET_RSFL			0x00000190
163 #define ENET_RSEM			0x00000194
164 #define ENET_RAEM			0x00000198
165 #define ENET_RAFL			0x0000019c
166 #define ENET_TSEM			0x000001a0
167 #define ENET_TAEM			0x000001a4
168 #define ENET_TAFL			0x000001a8
169 #define ENET_TIPG			0x000001ac
170 #define ENET_FTRL			0x000001b0
171 #define ENET_TACC			0x000001c0
172 # define ENET_TACC_PROCHK		__BIT(4)
173 # define ENET_TACC_IPCHK		__BIT(3)
174 # define ENET_TACC_SHIFT16		__BIT(0)
175 #define ENET_RACC			0x000001c4
176 # define ENET_RACC_SHIFT16		__BIT(7)
177 # define ENET_RACC_LINEDIS		__BIT(6)
178 # define ENET_RACC_PRODIS		__BIT(2)
179 # define ENET_RACC_IPDIS		__BIT(1)
180 # define ENET_RACC_PADREM		__BIT(0)
181 
182 #define ENET_RCMR1			0x000001c8	/* imx7 */
183 #define ENET_RCMR2			0x000001cc	/* imx7 */
184 #define ENET_DMA1CFG			0x000001d8	/* imx7 */
185 #define ENET_DMA2CFG			0x000001dc	/* imx7 */
186 #define ENET_RDAR1			0x000001e0	/* imx7 */
187 #define ENET_TDAR1			0x000001e4	/* imx7 */
188 #define ENET_RDAR2			0x000001e8	/* imx7 */
189 #define ENET_TDAR2			0x000001ec	/* imx7 */
190 #define ENET_QOS			0x000001f0	/* imx7 */
191 
192 /* Statistics counters */
193 #define ENET_RMON_T_DROP		0x00000200
194 #define ENET_RMON_T_PACKETS		0x00000204
195 #define ENET_RMON_T_BC_PKT		0x00000208
196 #define ENET_RMON_T_MC_PKT		0x0000020c
197 #define ENET_RMON_T_CRC_ALIGN		0x00000210
198 #define ENET_RMON_T_UNDERSIZE		0x00000214
199 #define ENET_RMON_T_OVERSIZE		0x00000218
200 #define ENET_RMON_T_FRAG		0x0000021c
201 #define ENET_RMON_T_JAB			0x00000220
202 #define ENET_RMON_T_COL			0x00000224
203 #define ENET_RMON_T_P64			0x00000228
204 #define ENET_RMON_T_P65TO127N		0x0000022c
205 #define ENET_RMON_T_P128TO255N		0x00000230
206 #define ENET_RMON_T_P256TO511		0x00000234
207 #define ENET_RMON_T_P512TO1023		0x00000238
208 #define ENET_RMON_T_P1024TO2047		0x0000023c
209 #define ENET_RMON_T_P_GTE2048		0x00000240
210 #define ENET_RMON_T_OCTETS		0x00000244
211 #define ENET_IEEE_T_DROP		0x00000248
212 #define ENET_IEEE_T_FRAME_OK		0x0000024c
213 #define ENET_IEEE_T_1COL		0x00000250
214 #define ENET_IEEE_T_MCOL		0x00000254
215 #define ENET_IEEE_T_DEF			0x00000258
216 #define ENET_IEEE_T_LCOL		0x0000025c
217 #define ENET_IEEE_T_EXCOL		0x00000260
218 #define ENET_IEEE_T_MACERR		0x00000264
219 #define ENET_IEEE_T_CSERR		0x00000268
220 #define ENET_IEEE_T_SQE			0x0000026c
221 #define ENET_IEEE_T_FDXFC		0x00000270
222 #define ENET_IEEE_T_OCTETS_OK		0x00000274
223 #define ENET_RMON_R_PACKETS		0x00000284
224 #define ENET_RMON_R_BC_PKT		0x00000288
225 #define ENET_RMON_R_MC_PKT		0x0000028c
226 #define ENET_RMON_R_CRC_ALIGN		0x00000290
227 #define ENET_RMON_R_UNDERSIZE		0x00000294
228 #define ENET_RMON_R_OVERSIZE		0x00000298
229 #define ENET_RMON_R_FRAG		0x0000029c
230 #define ENET_RMON_R_JAB			0x000002a0
231 #define ENET_RMON_R_RESVD_0		0x000002a4
232 #define ENET_RMON_R_P64			0x000002a8
233 #define ENET_RMON_R_P65TO127		0x000002ac
234 #define ENET_RMON_R_P128TO255		0x000002b0
235 #define ENET_RMON_R_P256TO511		0x000002b4
236 #define ENET_RMON_R_P512TO1023		0x000002b8
237 #define ENET_RMON_R_P1024TO2047		0x000002bc
238 #define ENET_RMON_R_P_GTE2048		0x000002c0
239 #define ENET_RMON_R_OCTETS		0x000002c4
240 #define ENET_IEEE_R_DROP		0x000002c8
241 #define ENET_IEEE_R_FRAME_OK		0x000002cc
242 #define ENET_IEEE_R_CRC			0x000002d0
243 #define ENET_IEEE_R_ALIGN		0x000002d4
244 #define ENET_IEEE_R_MACERR		0x000002d8
245 #define ENET_IEEE_R_FDXFC		0x000002dc
246 #define ENET_IEEE_R_OCTETS_OK		0x000002e0
247 
248 /* IEEE1588 control */
249 #define ENET_ATCR			0x00000400
250 #define ENET_ATVR			0x00000404
251 #define ENET_ATOFF			0x00000408
252 #define ENET_ATPER			0x0000040c
253 #define ENET_ATCOR			0x00000410
254 #define ENET_ATINC			0x00000414
255 #define ENET_ATSTMP			0x00000418
256 
257 /* Capture/compare block */
258 #define ENET_TGSR			0x00000604
259 #define ENET_TCSR0			0x00000608
260 #define ENET_TCCR0			0x0000060c
261 #define ENET_TCSR1			0x00000610
262 #define ENET_TCCR1			0x00000614
263 #define ENET_TCSR2			0x00000618
264 #define ENET_TCCR2			0x0000061c
265 #define ENET_TCSR3			0x00000620
266 #define ENET_TCCR3			0x00000624
267 
268 #define AIPS_ENET_SIZE			0x00000800
269 
270 /* enhanced transmit buffer descriptor */
271 struct enet_txdesc {
272 	uint32_t tx_flags1_len;
273 #define TXFLAGS1_R			__BIT(31)	/* Ready */
274 #define TXFLAGS1_T1			__BIT(30)	/* TX software owner1 */
275 #define TXFLAGS1_W			__BIT(29)	/* Wrap */
276 #define TXFLAGS1_T2			__BIT(28)	/* TX software owner2 */
277 #define TXFLAGS1_L			__BIT(27)	/* Last in frame */
278 #define TXFLAGS1_TC			__BIT(26)	/* Transmit CRC */
279 #define TXFLAGS1_ABC			__BIT(25)	/* Append bad CRC */
280 #define TXFLAGS1_LEN(n)			((n) & 0xffff)
281 	uint32_t tx_databuf;
282 	uint32_t tx_flags2;
283 #define TXFLAGS2_INT			__BIT(30)	/* Interrupt */
284 #define TXFLAGS2_TS			__BIT(29)	/* Timestamp */
285 #define TXFLAGS2_PINS			__BIT(28)	/* Insert Proto csum */
286 #define TXFLAGS2_IINS			__BIT(27)	/* Insert IP csum */
287 #define TXFLAGS2_TXE			__BIT(15)	/* Transmit error */
288 #define TXFLAGS2_UE			__BIT(13)	/* Underflow error */
289 #define TXFLAGS2_EE			__BIT(12)	/* Excess colls Err */
290 #define TXFLAGS2_FE			__BIT(11)	/* Frame Error */
291 #define TXFLAGS2_LCE			__BIT(10)	/* Late collision Err */
292 #define TXFLAGS2_OE			__BIT(9)	/* Overfow Error */
293 #define TXFLAGS2_TSE			__BIT(8)	/* Timestamp Error */
294 	uint32_t tx__reserved1;
295 	uint32_t tx_flags3;
296 #define TXFLAGS3_BDU			__BIT(31)
297 	uint32_t tx_1588timestamp;
298 	uint32_t tx__reserved2;
299 	uint32_t tx__reserved3;
300 } __packed;
301 
302 /* enhanced receive buffer descriptor */
303 struct enet_rxdesc {
304 	uint32_t rx_flags1_len;
305 #define RXFLAGS1_E			__BIT(31)	/* Empty */
306 #define RXFLAGS1_R1			__BIT(30)	/* RX software owner1 */
307 #define RXFLAGS1_W			__BIT(29)	/* Wrap */
308 #define RXFLAGS1_R2			__BIT(28)	/* RX software owner2 */
309 #define RXFLAGS1_L			__BIT(27)	/* Last in frame */
310 #define RXFLAGS1_M			__BIT(24)	/* Miss */
311 #define RXFLAGS1_BC			__BIT(23)	/* Broadcast */
312 #define RXFLAGS1_MC			__BIT(22)	/* Multicast */
313 #define RXFLAGS1_LG			__BIT(21)	/* Length Violation */
314 #define RXFLAGS1_NO			__BIT(20)	/* Non-Octet aligned  */
315 #define RXFLAGS1_CR			__BIT(18)	/* CRC or frame error */
316 #define RXFLAGS1_OV			__BIT(17)	/* Overrun */
317 #define RXFLAGS1_TR			__BIT(16)	/* Truncated */
318 #define RXFLAGS1_LEN(n)			((n) & 0xffff)
319 	uint32_t rx_databuf;
320 	uint32_t rx_flags2;
321 #define RXFLAGS2_ME			__BIT(31)	/* MAC error */
322 #define RXFLAGS2_PE			__BIT(26)	/* PHY error */
323 #define RXFLAGS2_CE			__BIT(25)	/* Collision */
324 #define RXFLAGS2_UC			__BIT(24)	/* Unicast */
325 #define RXFLAGS2_INT			__BIT(23)	/* RXB/RXF interrupt */
326 #define RXFLAGS2_VPCP			__BITS(15, 31)	/* VLAN prio pts (imx7) */
327 #define RXFLAGS2_ICE			__BIT(5)	/* IP csum error */
328 #define RXFLAGS2_PCR			__BIT(4)	/* Proto csum error */
329 #define RXFLAGS2_VLAN			__BIT(2)	/* VLAN */
330 #define RXFLAGS2_IPV6			__BIT(1)	/* IPv6 frame */
331 #define RXFLAGS2_FRAG			__BIT(0)	/* IPv4 fragment */
332 #if _BYTE_ORDER == _LITTLE_ENDIAN
333 	uint16_t rx_cksum;
334 	uint8_t rx_proto;
335 	uint8_t rx_hl;
336 #else
337 	uint8_t rx_hl;
338 	uint8_t rx_proto;
339 	uint16_t rx_cksum;
340 #endif
341 	uint32_t rx_flags3;
342 #define RXFLAGS3_BDU			__BIT(31)
343 	uint32_t rx_1588timestamp;
344 	uint32_t rx__reserved2;
345 	uint32_t rx__reserved3;
346 } __packed;
347 
348 #endif /* _ARM_IMX_IF_ENETREG_H_ */
349