hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
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
/*
 * Copyright 2009-2011 Freescale Semiconductor, Inc.
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#ifndef __DTSEC_H__
#define __DTSEC_H__
 
#include <asm/types.h>
 
struct dtsec {
   u32    tsec_id;    /* controller ID and version */
   u32    tsec_id2;    /* controller ID and configuration */
   u32    ievent;        /* interrupt event */
   u32    imask;        /* interrupt mask */
   u32    res0;
   u32    ecntrl;        /* ethernet control and configuration */
   u32    ptv;        /* pause time value */
   u32    tbipa;        /* TBI PHY address */
   u32    res1[8];
   u32    tctrl;        /* Transmit control register */
   u32    res2[3];
   u32    rctrl;        /* Receive control register */
   u32    res3[11];
   u32    igaddr[8];    /* Individual group address */
   u32    gaddr[8];    /* group address */
   u32    res4[16];
   u32    maccfg1;    /* MAC configuration register 1 */
   u32    maccfg2;    /* MAC configuration register 2 */
   u32    ipgifg;        /* inter-packet/inter-frame gap */
   u32    hafdup;        /* half-duplex control */
   u32    maxfrm;        /* Maximum frame size */
   u32    res5[3];
   u32    miimcfg;    /* MII management configuration */
   u32    miimcom;    /* MII management command */
   u32    miimadd;    /* MII management address */
   u32    miimcon;    /* MII management control */
   u32    miimstat;    /* MII management status */
   u32    miimind;    /* MII management indicator */
   u32    res6;
   u32    ifstat;        /* Interface status */
   u32    macstnaddr1;    /* MAC station address 1 */
   u32    macstnaddr2;    /* MAC station address 2 */
   u32    res7[46];
   /* transmit and receive counter */
   u32    tr64;        /* Tx and Rx 64 bytes frame */
   u32    tr127;        /* Tx and Rx 65 to 127 bytes frame */
   u32    tr255;        /* Tx and Rx 128 to 255 bytes frame */
   u32    tr511;        /* Tx and Rx 256 to 511 bytes frame */
   u32    tr1k;        /* Tx and Rx 512 to 1023 bytes frame */
   u32    trmax;        /* Tx and Rx 1024 to 1518 bytes frame */
   u32    trmgv;        /* Tx and Rx 1519 to 1522 good VLAN frame */
   /* receive counters */
   u32    rbyt;        /* Receive byte counter */
   u32    rpkt;        /* Receive packet counter */
   u32    rfcs;        /* Receive FCS error */
   u32    rmca;        /* Receive multicast packet */
   u32    rbca;        /* Receive broadcast packet */
   u32    rxcf;        /* Receive control frame */
   u32    rxpf;        /* Receive pause frame */
   u32    rxuo;        /* Receive unknown OP code */
   u32    raln;        /* Receive alignment error */
   u32    rflr;        /* Receive frame length error */
   u32    rcde;        /* Receive code error */
   u32    rcse;        /* Receive carrier sense error */
   u32    rund;        /* Receive undersize packet */
   u32    rovr;        /* Receive oversize packet */
   u32    rfrg;        /* Receive fragments counter */
   u32    rjbr;        /* Receive jabber counter */
   u32    rdrp;        /* Receive drop counter */
   /* transmit counters */
   u32    tbyt;        /* Transmit byte counter */
   u32    tpkt;        /* Transmit packet */
   u32    tmca;        /* Transmit multicast packet */
   u32    tbca;        /* Transmit broadcast packet */
   u32    txpf;        /* Transmit pause control frame */
   u32    tdfr;        /* Transmit deferral packet */
   u32    tedf;        /* Transmit excessive deferral pkt */
   u32    tscl;        /* Transmit single collision pkt */
   u32    tmcl;        /* Transmit multiple collision pkt */
   u32    tlcl;        /* Transmit late collision pkt */
   u32    txcl;        /* Transmit excessive collision */
   u32    tncl;        /* Transmit total collision */
   u32    res8;
   u32    tdrp;        /* Transmit drop frame */
   u32    tjbr;        /* Transmit jabber frame */
   u32    tfcs;        /* Transmit FCS error */
   u32    txcf;        /* Transmit control frame */
   u32    tovr;        /* Transmit oversize frame */
   u32    tund;        /* Transmit undersize frame */
   u32    tfrg;        /* Transmit fragments frame */
   /* counter controls */
   u32    car1;        /* carry register 1 */
   u32    car2;        /* carry register 2 */
   u32    cam1;        /* carry register 1 mask */
   u32    cam2;        /* carry register 2 mask */
   u32    res9[80];
};
 
 
/* TBI register addresses */
#define TBI_CR            0x00
#define TBI_SR            0x01
#define TBI_ANA            0x04
#define TBI_ANLPBPA        0x05
#define TBI_ANEX        0x06
#define TBI_TBICON        0x11
 
/* TBI MDIO register bit fields*/
#define TBICON_CLK_SELECT    0x0020
#define TBIANA_ASYMMETRIC_PAUSE 0x0100
#define TBIANA_SYMMETRIC_PAUSE  0x0080
#define TBIANA_HALF_DUPLEX    0x0040
#define TBIANA_FULL_DUPLEX    0x0020
#define TBICR_PHY_RESET        0x8000
#define TBICR_ANEG_ENABLE    0x1000
#define TBICR_RESTART_ANEG    0x0200
#define TBICR_FULL_DUPLEX    0x0100
#define TBICR_SPEED1_SET    0x0040
 
/* IEVENT - interrupt events register */
#define IEVENT_BABR    0x80000000 /* Babbling receive error */
#define IEVENT_RXC    0x40000000 /* pause control frame received */
#define IEVENT_MSRO    0x04000000 /* MIB counter overflow */
#define IEVENT_GTSC    0x02000000 /* Graceful transmit stop complete */
#define IEVENT_BABT    0x01000000 /* Babbling transmit error */
#define IEVENT_TXC    0x00800000 /* control frame transmitted */
#define IEVENT_TXE    0x00400000 /* Transmit channel error */
#define IEVENT_LC    0x00040000 /* Late collision occurred */
#define IEVENT_CRL    0x00020000 /* Collision retry exceed limit */
#define IEVENT_XFUN    0x00010000 /* Transmit FIFO underrun */
#define IEVENT_ABRT    0x00008000 /* Transmit packet abort */
#define IEVENT_MMRD    0x00000400 /* MII management read complete */
#define IEVENT_MMWR    0x00000200 /* MII management write complete */
#define IEVENT_GRSC    0x00000100 /* Graceful stop complete */
#define IEVENT_TDPE    0x00000002 /* Internal data parity error on Tx */
#define IEVENT_RDPE    0x00000001 /* Internal data parity error on Rx */
 
#define IEVENT_CLEAR_ALL    0xffffffff
 
/* IMASK - interrupt mask register */
#define IMASK_BREN    0x80000000 /* Babbling receive enable */
#define IMASK_RXCEN    0x40000000 /* receive control enable */
#define IMASK_MSROEN    0x04000000 /* MIB counter overflow enable */
#define IMASK_GTSCEN    0x02000000 /* Graceful Tx stop complete enable */
#define IMASK_BTEN    0x01000000 /* Babbling transmit error enable */
#define IMASK_TXCEN    0x00800000 /* control frame transmitted enable */
#define IMASK_TXEEN    0x00400000 /* Transmit channel error enable */
#define IMASK_LCEN    0x00040000 /* Late collision interrupt enable */
#define IMASK_CRLEN    0x00020000 /* Collision retry exceed limit */
#define IMASK_XFUNEN    0x00010000 /* Transmit FIFO underrun enable */
#define IMASK_ABRTEN    0x00008000 /* Transmit packet abort enable */
#define IMASK_MMRDEN    0x00000400 /* MII management read complete enable */
#define IMASK_MMWREN    0x00000200 /* MII management write complete enable */
#define IMASK_GRSCEN    0x00000100 /* Graceful stop complete interrupt enable */
#define IMASK_TDPEEN    0x00000002 /* Internal data parity error on Tx enable */
#define IMASK_RDPEEN    0x00000001 /* Internal data parity error on Rx enable */
 
#define IMASK_MASK_ALL    0x00000000
 
/* ECNTRL - ethernet control register */
#define ECNTRL_CFG_RO    0x80000000 /* GMIIM, RPM, R100M, SGMIIM bits are RO */
#define ECNTRL_CLRCNT    0x00004000 /* clear all statistics */
#define ECNTRL_AUTOZ    0x00002000 /* auto zero MIB counter */
#define ECNTRL_STEN    0x00001000 /* enable internal counters to update */
#define ECNTRL_GMIIM    0x00000040 /* 1- GMII or RGMII interface mode */
#define ECNTRL_TBIM    0x00000020 /* 1- Ten-bit interface mode */
#define ECNTRL_RPM    0x00000010 /* 1- RGMII reduced-pin mode */
#define ECNTRL_R100M    0x00000008 /* 1- RGMII 100 Mbps, SGMII 100 Mbps
                     0- RGMII 10 Mbps, SGMII 10 Mbps */
#define ECNTRL_SGMIIM    0x00000002 /* 1- SGMII interface mode */
#define ECNTRL_TBIM    0x00000020 /* 1- TBI Interface mode (for SGMII) */
 
#define ECNTRL_DEFAULT    (ECNTRL_TBIM | ECNTRL_R100M | ECNTRL_SGMIIM)
 
/* TCTRL - Transmit control register */
#define TCTRL_THDF    0x00000800 /* Transmit half-duplex flow control */
#define TCTRL_TTSE    0x00000040 /* Transmit time-stamp enable */
#define TCTRL_GTS    0x00000020 /* Graceful transmit stop */
#define TCTRL_RFC_PAUSE    0x00000010 /* Receive flow control pause frame */
 
/* RCTRL - Receive control register */
#define RCTRL_PAL_MASK    0x001f0000 /* packet alignment padding length */
#define RCTRL_PAL_SHIFT    16
#define RCTRL_CFA    0x00008000 /* control frame accept enable */
#define RCTRL_GHTX    0x00000800 /* group address hash table extend */
#define RCTRL_RTSE    0x00000040 /* receive 1588 time-stamp enable */
#define RCTRL_GRS    0x00000020 /* graceful receive stop */
#define RCTRL_BC_REJ    0x00000010 /* broadcast frame reject */
#define RCTRL_BC_MPROM    0x00000008 /* all multicast/broadcast frames received */
#define RCTRL_RSF    0x00000004 /* receive short frame(17~63 bytes) enable */
#define RCTRL_EMEN    0x00000002 /* Exact match MAC address enable */
#define RCTRL_UPROM    0x00000001 /* all unicast frame received */
 
/* MACCFG1 - MAC configuration 1 register */
#define MACCFG1_SOFT_RST    0x80000000 /* place the MAC in reset */
#define MACCFG1_RST_RXMAC    0x00080000 /* reset receive MAC control block */
#define MACCFG1_RST_TXMAC    0x00040000 /* reet transmit MAC control block */
#define MACCFG1_RST_RXFUN    0x00020000 /* reset receive function block */
#define MACCFG1_RST_TXFUN    0x00010000 /* reset transmit function block */
#define MACCFG1_LOOPBACK    0x00000100 /* MAC loopback */
#define MACCFG1_RX_FLOW        0x00000020 /* Receive flow */
#define MACCFG1_TX_FLOW        0x00000010 /* Transmit flow */
#define MACCFG1_SYNC_RXEN    0x00000008 /* Frame reception enabled */
#define MACCFG1_RX_EN        0x00000004 /* Rx enable */
#define MACCFG1_SYNC_TXEN    0x00000002 /* Frame transmission is enabled */
#define MACCFG1_TX_EN        0x00000001 /* Tx enable */
#define MACCFG1_RXTX_EN        (MACCFG1_RX_EN | MACCFG1_TX_EN)
 
/* MACCFG2 - MAC configuration 2 register */
#define MACCFG2_PRE_LEN_MASK    0x0000f000 /* preamble length */
#define MACCFG2_PRE_LEN(x)    ((x << 12) & MACCFG2_PRE_LEN_MASK)
#define MACCFG2_IF_MODE_MASK    0x00000300
#define MACCFG2_IF_MODE_NIBBLE    0x00000100 /* MII, 10/100 Mbps MII/RMII */
#define MACCFG2_IF_MODE_BYTE    0x00000200 /* GMII/TBI, 1000 GMII/TBI */
#define MACCFG2_PRE_RX_EN    0x00000080 /* receive preamble enable */
#define MACCFG2_PRE_TX_EN    0x00000040 /* tx preable enable */
#define MACCFG2_HUGE_FRAME    0x00000020 /* >= max frame len enable */
#define MACCFG2_LEN_CHECK    0x00000010 /* MAC check frame's length Rx */
#define MACCFG2_MAG_EN        0x00000008 /* magic packet enable */
#define MACCFG2_PAD_CRC        0x00000004 /* pad and append CRC */
#define MACCFG2_CRC_EN        0x00000002 /* MAC appends a CRC on all frames */
#define MACCFG2_FULL_DUPLEX    0x00000001 /* Full deplex mode */
 
struct fsl_enet_mac;
 
void init_dtsec(struct fsl_enet_mac *mac, void *base, void *phyregs,
       int max_rx_len);
 
#endif