xref: /dpdk/drivers/net/enetfec/enet_regs.h (revision 7be78d027918dbc846e502780faf94d5acdf5f75)
1b84fdd39SApeksha Gupta /* SPDX-License-Identifier: BSD-3-Clause
2b84fdd39SApeksha Gupta  * Copyright 2020 NXP
3b84fdd39SApeksha Gupta  */
4b84fdd39SApeksha Gupta 
5b84fdd39SApeksha Gupta #ifndef __ENETFEC_REGS_H
6b84fdd39SApeksha Gupta #define __ENETFEC_REGS_H
7b84fdd39SApeksha Gupta 
8b84fdd39SApeksha Gupta /* Ethernet receive use control and status of buffer descriptor
9b84fdd39SApeksha Gupta  */
10b84fdd39SApeksha Gupta #define RX_BD_TR	((ushort)0x0001) /* Truncated */
11b84fdd39SApeksha Gupta #define RX_BD_OV	((ushort)0x0002) /* Over-run */
12b84fdd39SApeksha Gupta #define RX_BD_CR	((ushort)0x0004) /* CRC or Frame error */
13b84fdd39SApeksha Gupta #define RX_BD_SH	((ushort)0x0008) /* Reserved */
14b84fdd39SApeksha Gupta #define RX_BD_NO	((ushort)0x0010) /* Rcvd non-octet aligned frame */
15*7be78d02SJosh Soref #define RX_BD_LG	((ushort)0x0020) /* Rcvd frame length violation */
16b84fdd39SApeksha Gupta #define RX_BD_FIRST	((ushort)0x0400) /* Reserved */
17b84fdd39SApeksha Gupta #define RX_BD_LAST	((ushort)0x0800) /* last buffer in the frame */
18b84fdd39SApeksha Gupta #define RX_BD_INT	0x00800000
19b84fdd39SApeksha Gupta #define RX_BD_ICE	0x00000020
20b84fdd39SApeksha Gupta #define RX_BD_PCR	0x00000010
21b84fdd39SApeksha Gupta 
22b84fdd39SApeksha Gupta /*
23b84fdd39SApeksha Gupta  * 0 The next BD in consecutive location
24b84fdd39SApeksha Gupta  * 1 The next BD in ENETFECn_RDSR.
25b84fdd39SApeksha Gupta  */
26b84fdd39SApeksha Gupta #define RX_BD_WRAP	((ushort)0x2000)
27b84fdd39SApeksha Gupta #define RX_BD_EMPTY	((ushort)0x8000) /* BD is empty */
28b84fdd39SApeksha Gupta #define RX_BD_STATS	((ushort)0x013f) /* All buffer descriptor status bits */
29b84fdd39SApeksha Gupta 
30c75b9c3aSApeksha Gupta /* Ethernet receive use control and status of enhanced buffer descriptor */
31c75b9c3aSApeksha Gupta #define BD_ENETFEC_RX_VLAN	0x00000004
32c75b9c3aSApeksha Gupta 
33c75b9c3aSApeksha Gupta #define RX_FLAG_CSUM_EN		(RX_BD_ICE | RX_BD_PCR)
34c75b9c3aSApeksha Gupta #define RX_FLAG_CSUM_ERR	(RX_BD_ICE | RX_BD_PCR)
35c75b9c3aSApeksha Gupta 
36b84fdd39SApeksha Gupta /* Ethernet transmit use control and status of buffer descriptor */
37b84fdd39SApeksha Gupta #define TX_BD_TC	((ushort)0x0400) /* Transmit CRC */
38b84fdd39SApeksha Gupta #define TX_BD_LAST	((ushort)0x0800) /* Last in frame */
39b84fdd39SApeksha Gupta #define TX_BD_READY	((ushort)0x8000) /* Data is ready */
40b84fdd39SApeksha Gupta #define TX_BD_STATS	((ushort)0x0fff) /* All buffer descriptor status bits */
41b84fdd39SApeksha Gupta #define TX_BD_WRAP	((ushort)0x2000)
42b84fdd39SApeksha Gupta 
43b84fdd39SApeksha Gupta /* Ethernet transmit use control and status of enhanced buffer descriptor */
44b84fdd39SApeksha Gupta #define TX_BD_IINS		0x08000000
45b84fdd39SApeksha Gupta #define TX_BD_PINS		0x10000000
46b84fdd39SApeksha Gupta 
47b84fdd39SApeksha Gupta #define ENETFEC_RD_START(X)	(((X) == 1) ? ENETFEC_RD_START_1 : \
48b84fdd39SApeksha Gupta 				(((X) == 2) ? \
49b84fdd39SApeksha Gupta 				   ENETFEC_RD_START_2 : ENETFEC_RD_START_0))
50b84fdd39SApeksha Gupta #define ENETFEC_TD_START(X)	(((X) == 1) ? ENETFEC_TD_START_1 : \
51b84fdd39SApeksha Gupta 				(((X) == 2) ? \
52b84fdd39SApeksha Gupta 				   ENETFEC_TD_START_2 : ENETFEC_TD_START_0))
53b84fdd39SApeksha Gupta #define ENETFEC_MRB_SIZE(X)	(((X) == 1) ? ENETFEC_MRB_SIZE_1 : \
54b84fdd39SApeksha Gupta 				(((X) == 2) ? \
55b84fdd39SApeksha Gupta 				   ENETFEC_MRB_SIZE_2 : ENETFEC_MRB_SIZE_0))
56b84fdd39SApeksha Gupta 
57b84fdd39SApeksha Gupta #define ENETFEC_ETHEREN		((uint)0x00000002)
58b84fdd39SApeksha Gupta #define ENETFEC_TXC_DLY		((uint)0x00010000)
59b84fdd39SApeksha Gupta #define ENETFEC_RXC_DLY		((uint)0x00020000)
60b84fdd39SApeksha Gupta 
61b84fdd39SApeksha Gupta /* ENETFEC MAC is in controller */
62b84fdd39SApeksha Gupta #define QUIRK_HAS_ENETFEC_MAC	(1 << 0)
63b84fdd39SApeksha Gupta /* GBIT supported in controller */
64b84fdd39SApeksha Gupta #define QUIRK_GBIT		(1 << 3)
65c75b9c3aSApeksha Gupta /* Controller support hardware checksum */
66c75b9c3aSApeksha Gupta #define QUIRK_CSUM		(1 << 5)
67c75b9c3aSApeksha Gupta /* Controller support hardware vlan */
68c75b9c3aSApeksha Gupta #define QUIRK_VLAN		(1 << 6)
69b84fdd39SApeksha Gupta /* RACC register supported by controller */
70b84fdd39SApeksha Gupta #define QUIRK_RACC		(1 << 12)
71b84fdd39SApeksha Gupta /* i.MX8 ENETFEC IP version added the feature to generate the delayed TXC or
72b84fdd39SApeksha Gupta  * RXC. For its implementation, ENETFEC uses synchronized clocks (250MHz) for
73b84fdd39SApeksha Gupta  * generating delay of 2ns.
74b84fdd39SApeksha Gupta  */
75b84fdd39SApeksha Gupta #define QUIRK_SUPPORT_DELAYED_CLKS	(1 << 18)
76b84fdd39SApeksha Gupta 
77b84fdd39SApeksha Gupta #define ENETFEC_EIR	0x004 /* Interrupt event register */
78b84fdd39SApeksha Gupta #define ENETFEC_EIMR	0x008 /* Interrupt mask register */
79b84fdd39SApeksha Gupta #define ENETFEC_RDAR_0	0x010 /* Receive descriptor active register ring0 */
80b84fdd39SApeksha Gupta #define ENETFEC_TDAR_0	0x014 /* Transmit descriptor active register ring0 */
81b84fdd39SApeksha Gupta #define ENETFEC_ECR	0x024 /* Ethernet control register */
82b84fdd39SApeksha Gupta #define ENETFEC_MSCR	0x044 /* MII speed control register */
83b84fdd39SApeksha Gupta #define ENETFEC_MIBC	0x064 /* MIB control and status register */
84b84fdd39SApeksha Gupta #define ENETFEC_RCR	0x084 /* Receive control register */
85b84fdd39SApeksha Gupta #define ENETFEC_TCR	0x0c4 /* Transmit Control register */
86b84fdd39SApeksha Gupta #define ENETFEC_PALR	0x0e4 /* MAC address low 32 bits */
87b84fdd39SApeksha Gupta #define ENETFEC_PAUR	0x0e8 /* MAC address high 16 bits */
88b84fdd39SApeksha Gupta #define ENETFEC_OPD	0x0ec /* Opcode/Pause duration register */
89b84fdd39SApeksha Gupta #define ENETFEC_IAUR	0x118 /* hash table 32 bits high */
90b84fdd39SApeksha Gupta #define ENETFEC_IALR	0x11c /* hash table 32 bits low */
91b84fdd39SApeksha Gupta #define ENETFEC_GAUR	0x120 /* grp hash table 32 bits high */
92b84fdd39SApeksha Gupta #define ENETFEC_GALR	0x124 /* grp hash table 32 bits low */
93b84fdd39SApeksha Gupta #define ENETFEC_TFWR	0x144 /* transmit FIFO water_mark */
94b84fdd39SApeksha Gupta #define ENETFEC_RACC	0x1c4 /* Receive Accelerator function configuration*/
95b84fdd39SApeksha Gupta #define ENETFEC_DMA1CFG	0x1d8 /* DMA class based configuration ring1 */
96b84fdd39SApeksha Gupta #define ENETFEC_DMA2CFG	0x1dc /* DMA class based Configuration ring2 */
97b84fdd39SApeksha Gupta #define ENETFEC_RDAR_1	0x1e0 /* Rx descriptor active register ring1 */
98b84fdd39SApeksha Gupta #define ENETFEC_TDAR_1	0x1e4 /* Tx descriptor active register ring1 */
99b84fdd39SApeksha Gupta #define ENETFEC_RDAR_2	0x1e8 /* Rx descriptor active register ring2 */
100b84fdd39SApeksha Gupta #define ENETFEC_TDAR_2	0x1ec /* Tx descriptor active register ring2 */
101b84fdd39SApeksha Gupta #define ENETFEC_RD_START_1	0x160 /* Receive descriptor ring1 start reg */
102b84fdd39SApeksha Gupta #define ENETFEC_TD_START_1	0x164 /* Transmit descriptor ring1 start reg */
103b84fdd39SApeksha Gupta #define ENETFEC_MRB_SIZE_1	0x168 /* Max receive buffer size reg ring1 */
104b84fdd39SApeksha Gupta #define ENETFEC_RD_START_2	0x16c /* Receive descriptor ring2 start reg */
105b84fdd39SApeksha Gupta #define ENETFEC_TD_START_2	0x170 /* Transmit descriptor ring2 start reg */
106b84fdd39SApeksha Gupta #define ENETFEC_MRB_SIZE_2	0x174 /* Max receive buffer size reg ring2 */
107b84fdd39SApeksha Gupta #define ENETFEC_RD_START_0	0x180 /* Receive descriptor ring0 start reg */
108b84fdd39SApeksha Gupta #define ENETFEC_TD_START_0	0x184 /* Transmit descriptor ring0 start reg */
109b84fdd39SApeksha Gupta #define ENETFEC_MRB_SIZE_0	0x188 /* Max receive buffer size reg ring0*/
110b84fdd39SApeksha Gupta #define ENETFEC_R_FIFO_SFL	0x190 /* Rx FIFO full threshold */
111b84fdd39SApeksha Gupta #define ENETFEC_R_FIFO_SEM	0x194 /* Rx FIFO empty threshold */
112b84fdd39SApeksha Gupta #define ENETFEC_R_FIFO_AEM	0x198 /* Rx FIFO almost empty threshold */
113b84fdd39SApeksha Gupta #define ENETFEC_R_FIFO_AFL	0x19c /* Rx FIFO almost full threshold */
114b84fdd39SApeksha Gupta #define ENETFEC_FRAME_TRL	0x1b0 /* Frame truncation length */
115b84fdd39SApeksha Gupta 
116b84fdd39SApeksha Gupta #endif /*__ENETFEC_REGS_H */
117