summaryrefslogtreecommitdiffstats
path: root/drivers/net/davinci_emac.h
blob: db3c57f5911e1b56033a94301d71a8e3b45b1662 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
 *
 * Based on:
 *
 * ----------------------------------------------------------------------------
 *
 * dm644x_emac.h
 *
 * TI DaVinci (DM644X) EMAC peripheral driver header for DV-EVM
 *
 * Copyright (C) 2005 Texas Instruments.
 */

#ifndef _DAVINCI_EMAC_H_
#define _DAVINCI_EMAC_H_

/* PHY mask - set only those phy number bits where phy is/can be connected */
#define EMAC_MDIO_PHY_NUM           1
#define EMAC_MDIO_PHY_MASK          (1 << EMAC_MDIO_PHY_NUM)

/* Ethernet Min/Max packet size */
#define EMAC_MIN_ETHERNET_PKT_SIZE	60
#define EMAC_MAX_ETHERNET_PKT_SIZE	1518
#define EMAC_PKT_ALIGN			18	/* 1518 + 18 = 1536 (packet aligned on 32 byte boundry) */

/* Number of RX packet buffers
 * NOTE: Only 1 buffer supported as of now
 */
#define EMAC_MAX_RX_BUFFERS		10

/***********************************************
 ******** Internally used macros ***************
 ***********************************************/

#define EMAC_CH_TX			1
#define EMAC_CH_RX			0

/* Each descriptor occupies 4 words, lets start RX desc's at 0 and
 * reserve space for 64 descriptors max
 */
#define EMAC_RX_DESC_BASE		0x0
#define EMAC_TX_DESC_BASE		0x1000

/* EMAC Teardown value */
#define EMAC_TEARDOWN_VALUE		0xfffffffc

/* MII Status Register */
#define MII_STATUS_REG			1

/* Number of statistics registers */
#define EMAC_NUM_STATS			36

/* EMAC Descriptor Offsets */
#define EMAC_DESC_NEXT			0x0	/* Pointer to next descriptor in chain */
#define EMAC_DESC_BUFFER		0x4	/* Pointer to data buffer */
#define EMAC_DESC_BUFF_OFF_LEN		0x8	/* Buffer Offset(MSW) and Length(LSW) */
#define EMAC_DESC_PKT_FLAG_LEN		0xc	/* Packet Flags(MSW) and Length(LSW) */
#define EMAC_DESC_SIZE			0x10

/* CPPI bit positions */
#define EMAC_CPPI_SOP_BIT		(0x80000000)
#define EMAC_CPPI_EOP_BIT		(0x40000000)
#define EMAC_CPPI_OWNERSHIP_BIT		(0x20000000)
#define EMAC_CPPI_EOQ_BIT		(0x10000000)
#define EMAC_CPPI_TEARDOWN_COMPLETE_BIT	(0x08000000)
#define EMAC_CPPI_PASS_CRC_BIT		(0x04000000)

#define EMAC_CPPI_RX_ERROR_FRAME	(0x03fc0000)

#define EMAC_MACCONTROL_MIIEN_ENABLE		(0x20)
#define EMAC_MACCONTROL_FULLDUPLEX_ENABLE	(0x1)
#define EMAC_MACCONTROL_GIGABIT_ENABLE		(1 << 7)
#define EMAC_MACCONTROL_GIGFORCE		(1 << 17)
#define EMAC_MACCONTROL_RMIISPEED_100		(1 << 15)

#define EMAC_MAC_ADDR_MATCH		(1 << 19)
#define EMAC_MAC_ADDR_IS_VALID		(1 << 20)

#define EMAC_RXMBPENABLE_RXCAFEN_ENABLE	(0x200000)
#define EMAC_RXMBPENABLE_RXBROADEN	(0x2000)

#define MDIO_CONTROL_IDLE		(0x80000000)
#define MDIO_CONTROL_ENABLE		(0x40000000)
#define MDIO_CONTROL_FAULT_ENABLE	(0x40000)
#define MDIO_CONTROL_FAULT		(0x80000)
#define MDIO_USERACCESS0_GO		(0x80000000)
#define MDIO_USERACCESS0_WRITE_READ	(0x0)
#define MDIO_USERACCESS0_WRITE_WRITE	(0x40000000)
#define MDIO_USERACCESS0_ACK		(0x20000000)

/* Ethernet MAC Registers */
#define EMAC_TXIDVER			0x000
#define EMAC_TXCONTROL			0x004
#define EMAC_TXTEARDOWN			0x008
#define EMAC_RXIDVER			0x010
#define EMAC_RXCONTROL			0x014
#define EMAC_RXTEARDOWN			0x018
#define EMAC_TXINTSTATRAW		0x080
#define EMAC_TXINTSTATMASKED		0x084
#define EMAC_TXINTMASKSET		0x088
#define EMAC_TXINTMASKCLEAR		0x08c
#define EMAC_MACINVECTOR		0x090
#define EMAC_MACEOIVECTOR		0x094
#define EMAC_RXINTSTATRAW		0x0a0
#define EMAC_RXINTSTATMASKED		0x0a4
#define EMAC_RXINTMASKSET		0x0a8
#define EMAC_RXINTMASKCLEAR		0x0ac
#define EMAC_MACINTSTATRAW		0x0b0
#define EMAC_MACINTSTATMASKED		0x0b4
#define EMAC_MACINTMASKSET		0x0b8
#define EMAC_MACINTMASKCLEAR		0x0bc
#define EMAC_RXMBPENABLE		0x100
#define EMAC_RXUNICASTSET		0x104
#define EMAC_RXUNICASTCLEAR		0x108
#define EMAC_RXMAXLEN			0x10c
#define EMAC_RXBUFFEROFFSET		0x110
#define EMAC_RXFILTERLOWTHRESH		0x114
#define EMAC_RX0FLOWTHRESH		0x120
#define EMAC_RX1FLOWTHRESH		0x124
#define EMAC_RX2FLOWTHRESH		0x128
#define EMAC_RX3FLOWTHRESH		0x12c
#define EMAC_RX4FLOWTHRESH		0x130
#define EMAC_RX5FLOWTHRESH		0x134
#define EMAC_RX6FLOWTHRESH		0x138
#define EMAC_RX7FLOWTHRESH		0x13c
#define EMAC_RX0FREEBUFFER		0x140
#define EMAC_RX1FREEBUFFER		0x144
#define EMAC_RX2FREEBUFFER		0x148
#define EMAC_RX3FREEBUFFER		0x14c
#define EMAC_RX4FREEBUFFER		0x150
#define EMAC_RX5FREEBUFFER		0x154
#define EMAC_RX6FREEBUFFER		0x158
#define EMAC_RX7FREEBUFFER		0x15c
#define EMAC_MACCONTROL			0x160
#define EMAC_MACSTATUS			0x164
#define EMAC_EMCONTROL			0x168
#define EMAC_FIFOCONTROL		0x16c
#define EMAC_MACCONFIG			0x170
#define EMAC_SOFTRESET			0x174
#define EMAC_MACSRCADDRLO		0x1d0
#define EMAC_MACSRCADDRHI		0x1d4
#define EMAC_MACHASH1			0x1d8
#define EMAC_MACHASH2			0x1dc
#define EMAC_BOFFTEST			0x1e0
#define EMAC_TPACETEST			0x1e4
#define EMAC_RXPAUSE			0x1e8
#define EMAC_TXPAUSE			0x1ec
#define EMAC_RXGOODFRAMES		0x200
#define EMAC_RXBCASTFRAMES		0x204
#define EMAC_RXMCASTFRAMES		0x208
#define EMAC_RXPAUSEFRAMES		0x20c
#define EMAC_RXCRCERRORS		0x210
#define EMAC_RXALIGNCODEERRORS		0x214
#define EMAC_RXOVERSIZED		0x218
#define EMAC_RXJABBER			0x21c
#define EMAC_RXUNDERSIZED		0x220
#define EMAC_RXFRAGMENTS		0x224
#define EMAC_RXFILTERED			0x228
#define EMAC_RXQOSFILTERED		0x22c
#define EMAC_RXOCTETS			0x230
#define EMAC_TXGOODFRAMES		0x234
#define EMAC_TXBCASTFRAMES		0x238
#define EMAC_TXMCASTFRAMES		0x23c
#define EMAC_TXPAUSEFRAMES		0x240
#define EMAC_TXDEFERRED			0x244
#define EMAC_TXCOLLISION		0x248
#define EMAC_TXSINGLECOLL		0x24c
#define EMAC_TXMULTICOLL		0x250
#define EMAC_TXEXCESSIVECOLL		0x254
#define EMAC_TXLATECOLL			0x258
#define EMAC_TXUNDERRUN			0x25c
#define EMAC_TXCARRIERSENSE		0x260
#define EMAC_TXOCTETS			0x264
#define EMAC_FRAME64			0x268
#define EMAC_FRAME65T127		0x26c
#define EMAC_FRAME128T255		0x270
#define EMAC_FRAME256T511		0x274
#define EMAC_FRAME512T1023		0x278
#define EMAC_FRAME1024TUP		0x27c
#define EMAC_NETOCTETS			0x280
#define EMAC_RXSOFOVERRUNS		0x284
#define EMAC_RXMOFOVERRUNS		0x288
#define EMAC_RXDMAOVERRUNS		0x28c
#define EMAC_MACADDRLO			0x500
#define EMAC_MACADDRHI			0x504
#define EMAC_MACINDEX			0x508
#define EMAC_TX0HDP			0x600
#define EMAC_TX1HDP			0x604
#define EMAC_TX2HDP			0x608
#define EMAC_TX3HDP			0x60c
#define EMAC_TX4HDP			0x610
#define EMAC_TX5HDP			0x614
#define EMAC_TX6HDP			0x618
#define EMAC_TX7HDP			0x61c
#define EMAC_RX0HDP			0x620
#define EMAC_RX1HDP			0x624
#define EMAC_RX2HDP			0x628
#define EMAC_RX3HDP			0x62c
#define EMAC_RX4HDP			0x630
#define EMAC_RX5HDP			0x634
#define EMAC_RX6HDP			0x638
#define EMAC_RX7HDP			0x63c
#define EMAC_TX0CP			0x640
#define EMAC_TX1CP			0x644
#define EMAC_TX2CP			0x648
#define EMAC_TX3CP			0x64c
#define EMAC_TX4CP			0x650
#define EMAC_TX5CP			0x654
#define EMAC_TX6CP			0x658
#define EMAC_TX7CP			0x65c
#define EMAC_RX0CP			0x660
#define EMAC_RX1CP			0x664
#define EMAC_RX2CP			0x668
#define EMAC_RX3CP			0x66c
#define EMAC_RX4CP			0x670
#define EMAC_RX5CP			0x674
#define EMAC_RX6CP			0x678
#define EMAC_RX7CP			0x67c

/* EMAC Wrapper Registers */
#define EMAC_EWRAP_IDVER		0x00
#define EMAC_EWRAP_SOFTRESET		0x04
#define EMAC_EWRAP_INTCTRL		0x0c
#define EMAC_EWRAP_C0RXTHRESHEN		0x10
#define EMAC_EWRAP_C0RXEN		0x14
#define EMAC_EWRAP_C0TXEN		0x18
#define EMAC_EWRAP_C0MISCEN		0x1c
#define EMAC_EWRAP_C1RXTHRESHEN		0x20
#define EMAC_EWRAP_C1RXEN		0x24
#define EMAC_EWRAP_C1TXEN		0x28
#define EMAC_EWRAP_C1MISCEN		0x2c
#define EMAC_EWRAP_C2RXTHRESHEN		0x30
#define EMAC_EWRAP_C2RXEN		0x34
#define EMAC_EWRAP_C2TXEN		0x38
#define EMAC_EWRAP_C2MISCEN		0x3c
#define EMAC_EWRAP_C0RXTHRESHSTAT	0x40
#define EMAC_EWRAP_C0RXSTAT		0x44
#define EMAC_EWRAP_C0TXSTAT		0x48
#define EMAC_EWRAP_C0MISCSTAT		0x4c
#define EMAC_EWRAP_C1RXTHRESHSTAT	0x50
#define EMAC_EWRAP_C1RXSTAT		0x54
#define EMAC_EWRAP_C1TXSTAT		0x58
#define EMAC_EWRAP_C1MISCSTAT		0x5c
#define EMAC_EWRAP_C2RXTHRESHSTAT	0x60
#define EMAC_EWRAP_C2RXSTAT		0x64
#define EMAC_EWRAP_C2TXSTAT		0x68
#define EMAC_EWRAP_C2MISCSTAT		0x6c
#define EMAC_EWRAP_C0RXIMAX		0x70
#define EMAC_EWRAP_C0TXIMAX		0x74
#define EMAC_EWRAP_C1RXIMAX		0x78
#define EMAC_EWRAP_C1TXIMAX		0x7c
#define EMAC_EWRAP_C2RXIMAX		0x80
#define EMAC_EWRAP_C2TXIMAX		0x84

/* EMAC MDIO Registers */
#define EMAC_MDIO_VERSION		0x00
#define EMAC_MDIO_CONTROL		0x04
#define EMAC_MDIO_ALIVE			0x08
#define EMAC_MDIO_LINK			0x0c
#define EMAC_MDIO_LINKINTRAW		0x10
#define EMAC_MDIO_LINKINTMASKED		0x14
#define EMAC_MDIO_USERINTRAW		0x20
#define EMAC_MDIO_USERINTMASKED		0x24
#define EMAC_MDIO_USERINTMASKSET	0x28
#define EMAC_MDIO_USERINTMASKCLEAR	0x2c
#define EMAC_MDIO_USERACCESS0		0x80
#define EMAC_MDIO_USERPHYSEL0		0x84
#define EMAC_MDIO_USERACCESS1		0x88
#define EMAC_MDIO_USERPHYSEL1		0x8c

#endif  /* _DAVINCI_EMAC_H_ */