xref: /OK3568_Linux_fs/u-boot/include/tsec.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *  tsec.h
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  *  Driver for the Motorola Triple Speed Ethernet Controller
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright 2004, 2007, 2009, 2011, 2013 Freescale Semiconductor, Inc.
7*4882a593Smuzhiyun  * (C) Copyright 2003, Motorola, Inc.
8*4882a593Smuzhiyun  * maintained by Xianghua Xiao (x.xiao@motorola.com)
9*4882a593Smuzhiyun  * author Andy Fleming
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #ifndef __TSEC_H
15*4882a593Smuzhiyun #define __TSEC_H
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include <net.h>
18*4882a593Smuzhiyun #include <config.h>
19*4882a593Smuzhiyun #include <phy.h>
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #ifndef CONFIG_DM_ETH
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #ifdef CONFIG_ARCH_LS1021A
24*4882a593Smuzhiyun #define TSEC_SIZE		0x40000
25*4882a593Smuzhiyun #define TSEC_MDIO_OFFSET	0x40000
26*4882a593Smuzhiyun #else
27*4882a593Smuzhiyun #define TSEC_SIZE 		0x01000
28*4882a593Smuzhiyun #define TSEC_MDIO_OFFSET	0x01000
29*4882a593Smuzhiyun #endif
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define CONFIG_SYS_MDIO_BASE_ADDR (MDIO_BASE_ADDR + 0x520)
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define TSEC_GET_REGS(num, offset) \
34*4882a593Smuzhiyun 	(struct tsec __iomem *)\
35*4882a593Smuzhiyun 	(TSEC_BASE_ADDR + (((num) - 1) * (offset)))
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define TSEC_GET_REGS_BASE(num) \
38*4882a593Smuzhiyun 	TSEC_GET_REGS((num), TSEC_SIZE)
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define TSEC_GET_MDIO_REGS(num, offset) \
41*4882a593Smuzhiyun 	(struct tsec_mii_mng __iomem *)\
42*4882a593Smuzhiyun 	(CONFIG_SYS_MDIO_BASE_ADDR  + ((num) - 1) * (offset))
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #define TSEC_GET_MDIO_REGS_BASE(num) \
45*4882a593Smuzhiyun 	TSEC_GET_MDIO_REGS((num), TSEC_MDIO_OFFSET)
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun #define DEFAULT_MII_NAME "FSL_MDIO"
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #define STD_TSEC_INFO(num) \
50*4882a593Smuzhiyun {			\
51*4882a593Smuzhiyun 	.regs = TSEC_GET_REGS_BASE(num), \
52*4882a593Smuzhiyun 	.miiregs_sgmii = TSEC_GET_MDIO_REGS_BASE(num), \
53*4882a593Smuzhiyun 	.devname = CONFIG_TSEC##num##_NAME, \
54*4882a593Smuzhiyun 	.phyaddr = TSEC##num##_PHY_ADDR, \
55*4882a593Smuzhiyun 	.flags = TSEC##num##_FLAGS, \
56*4882a593Smuzhiyun 	.mii_devname = DEFAULT_MII_NAME \
57*4882a593Smuzhiyun }
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define SET_STD_TSEC_INFO(x, num) \
60*4882a593Smuzhiyun {			\
61*4882a593Smuzhiyun 	x.regs = TSEC_GET_REGS_BASE(num); \
62*4882a593Smuzhiyun 	x.miiregs_sgmii = TSEC_GET_MDIO_REGS_BASE(num); \
63*4882a593Smuzhiyun 	x.devname = CONFIG_TSEC##num##_NAME; \
64*4882a593Smuzhiyun 	x.phyaddr = TSEC##num##_PHY_ADDR; \
65*4882a593Smuzhiyun 	x.flags = TSEC##num##_FLAGS;\
66*4882a593Smuzhiyun 	x.mii_devname = DEFAULT_MII_NAME;\
67*4882a593Smuzhiyun }
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #endif /* CONFIG_DM_ETH */
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #define MAC_ADDR_LEN		6
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* #define TSEC_TIMEOUT	1000000 */
74*4882a593Smuzhiyun #define TSEC_TIMEOUT		1000
75*4882a593Smuzhiyun #define TOUT_LOOP		1000000
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun /* TBI register addresses */
78*4882a593Smuzhiyun #define TBI_CR			0x00
79*4882a593Smuzhiyun #define TBI_SR			0x01
80*4882a593Smuzhiyun #define TBI_ANA			0x04
81*4882a593Smuzhiyun #define TBI_ANLPBPA		0x05
82*4882a593Smuzhiyun #define TBI_ANEX		0x06
83*4882a593Smuzhiyun #define TBI_TBICON		0x11
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /* TBI MDIO register bit fields*/
86*4882a593Smuzhiyun #define TBICON_CLK_SELECT	0x0020
87*4882a593Smuzhiyun #define TBIANA_ASYMMETRIC_PAUSE	0x0100
88*4882a593Smuzhiyun #define TBIANA_SYMMETRIC_PAUSE	0x0080
89*4882a593Smuzhiyun #define TBIANA_HALF_DUPLEX	0x0040
90*4882a593Smuzhiyun #define TBIANA_FULL_DUPLEX	0x0020
91*4882a593Smuzhiyun #define TBICR_PHY_RESET		0x8000
92*4882a593Smuzhiyun #define TBICR_ANEG_ENABLE	0x1000
93*4882a593Smuzhiyun #define TBICR_RESTART_ANEG	0x0200
94*4882a593Smuzhiyun #define TBICR_FULL_DUPLEX	0x0100
95*4882a593Smuzhiyun #define TBICR_SPEED1_SET	0x0040
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /* MAC register bits */
98*4882a593Smuzhiyun #define MACCFG1_SOFT_RESET	0x80000000
99*4882a593Smuzhiyun #define MACCFG1_RESET_RX_MC	0x00080000
100*4882a593Smuzhiyun #define MACCFG1_RESET_TX_MC	0x00040000
101*4882a593Smuzhiyun #define MACCFG1_RESET_RX_FUN	0x00020000
102*4882a593Smuzhiyun #define MACCFG1_RESET_TX_FUN	0x00010000
103*4882a593Smuzhiyun #define MACCFG1_LOOPBACK	0x00000100
104*4882a593Smuzhiyun #define MACCFG1_RX_FLOW		0x00000020
105*4882a593Smuzhiyun #define MACCFG1_TX_FLOW		0x00000010
106*4882a593Smuzhiyun #define MACCFG1_SYNCD_RX_EN	0x00000008
107*4882a593Smuzhiyun #define MACCFG1_RX_EN		0x00000004
108*4882a593Smuzhiyun #define MACCFG1_SYNCD_TX_EN	0x00000002
109*4882a593Smuzhiyun #define MACCFG1_TX_EN		0x00000001
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define MACCFG2_INIT_SETTINGS	0x00007205
112*4882a593Smuzhiyun #define MACCFG2_FULL_DUPLEX	0x00000001
113*4882a593Smuzhiyun #define MACCFG2_IF		0x00000300
114*4882a593Smuzhiyun #define MACCFG2_GMII		0x00000200
115*4882a593Smuzhiyun #define MACCFG2_MII		0x00000100
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #define ECNTRL_INIT_SETTINGS	0x00001000
118*4882a593Smuzhiyun #define ECNTRL_TBI_MODE		0x00000020
119*4882a593Smuzhiyun #define ECNTRL_REDUCED_MODE	0x00000010
120*4882a593Smuzhiyun #define ECNTRL_R100		0x00000008
121*4882a593Smuzhiyun #define ECNTRL_REDUCED_MII_MODE	0x00000004
122*4882a593Smuzhiyun #define ECNTRL_SGMII_MODE	0x00000002
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun #ifndef CONFIG_SYS_TBIPA_VALUE
125*4882a593Smuzhiyun # define CONFIG_SYS_TBIPA_VALUE	0x1f
126*4882a593Smuzhiyun #endif
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define MRBLR_INIT_SETTINGS	PKTSIZE_ALIGN
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define MINFLR_INIT_SETTINGS	0x00000040
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #define DMACTRL_INIT_SETTINGS	0x000000c3
133*4882a593Smuzhiyun #define DMACTRL_GRS		0x00000010
134*4882a593Smuzhiyun #define DMACTRL_GTS		0x00000008
135*4882a593Smuzhiyun #define DMACTRL_LE		0x00008000
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #define TSTAT_CLEAR_THALT	0x80000000
138*4882a593Smuzhiyun #define RSTAT_CLEAR_RHALT	0x00800000
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun #define IEVENT_INIT_CLEAR	0xffffffff
141*4882a593Smuzhiyun #define IEVENT_BABR		0x80000000
142*4882a593Smuzhiyun #define IEVENT_RXC		0x40000000
143*4882a593Smuzhiyun #define IEVENT_BSY		0x20000000
144*4882a593Smuzhiyun #define IEVENT_EBERR		0x10000000
145*4882a593Smuzhiyun #define IEVENT_MSRO		0x04000000
146*4882a593Smuzhiyun #define IEVENT_GTSC		0x02000000
147*4882a593Smuzhiyun #define IEVENT_BABT		0x01000000
148*4882a593Smuzhiyun #define IEVENT_TXC		0x00800000
149*4882a593Smuzhiyun #define IEVENT_TXE		0x00400000
150*4882a593Smuzhiyun #define IEVENT_TXB		0x00200000
151*4882a593Smuzhiyun #define IEVENT_TXF		0x00100000
152*4882a593Smuzhiyun #define IEVENT_IE		0x00080000
153*4882a593Smuzhiyun #define IEVENT_LC		0x00040000
154*4882a593Smuzhiyun #define IEVENT_CRL		0x00020000
155*4882a593Smuzhiyun #define IEVENT_XFUN		0x00010000
156*4882a593Smuzhiyun #define IEVENT_RXB0		0x00008000
157*4882a593Smuzhiyun #define IEVENT_GRSC		0x00000100
158*4882a593Smuzhiyun #define IEVENT_RXF0		0x00000080
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun #define IMASK_INIT_CLEAR	0x00000000
161*4882a593Smuzhiyun #define IMASK_TXEEN		0x00400000
162*4882a593Smuzhiyun #define IMASK_TXBEN		0x00200000
163*4882a593Smuzhiyun #define IMASK_TXFEN		0x00100000
164*4882a593Smuzhiyun #define IMASK_RXFEN0		0x00000080
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /* Default Attribute fields */
167*4882a593Smuzhiyun #define ATTR_INIT_SETTINGS	0x000000c0
168*4882a593Smuzhiyun #define ATTRELI_INIT_SETTINGS	0x00000000
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /* TxBD status field bits */
171*4882a593Smuzhiyun #define TXBD_READY		0x8000
172*4882a593Smuzhiyun #define TXBD_PADCRC		0x4000
173*4882a593Smuzhiyun #define TXBD_WRAP		0x2000
174*4882a593Smuzhiyun #define TXBD_INTERRUPT		0x1000
175*4882a593Smuzhiyun #define TXBD_LAST		0x0800
176*4882a593Smuzhiyun #define TXBD_CRC		0x0400
177*4882a593Smuzhiyun #define TXBD_DEF		0x0200
178*4882a593Smuzhiyun #define TXBD_HUGEFRAME		0x0080
179*4882a593Smuzhiyun #define TXBD_LATECOLLISION	0x0080
180*4882a593Smuzhiyun #define TXBD_RETRYLIMIT		0x0040
181*4882a593Smuzhiyun #define TXBD_RETRYCOUNTMASK	0x003c
182*4882a593Smuzhiyun #define TXBD_UNDERRUN		0x0002
183*4882a593Smuzhiyun #define TXBD_STATS		0x03ff
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /* RxBD status field bits */
186*4882a593Smuzhiyun #define RXBD_EMPTY		0x8000
187*4882a593Smuzhiyun #define RXBD_RO1		0x4000
188*4882a593Smuzhiyun #define RXBD_WRAP		0x2000
189*4882a593Smuzhiyun #define RXBD_INTERRUPT		0x1000
190*4882a593Smuzhiyun #define RXBD_LAST		0x0800
191*4882a593Smuzhiyun #define RXBD_FIRST		0x0400
192*4882a593Smuzhiyun #define RXBD_MISS		0x0100
193*4882a593Smuzhiyun #define RXBD_BROADCAST		0x0080
194*4882a593Smuzhiyun #define RXBD_MULTICAST		0x0040
195*4882a593Smuzhiyun #define RXBD_LARGE		0x0020
196*4882a593Smuzhiyun #define RXBD_NONOCTET		0x0010
197*4882a593Smuzhiyun #define RXBD_SHORT		0x0008
198*4882a593Smuzhiyun #define RXBD_CRCERR		0x0004
199*4882a593Smuzhiyun #define RXBD_OVERRUN		0x0002
200*4882a593Smuzhiyun #define RXBD_TRUNCATED		0x0001
201*4882a593Smuzhiyun #define RXBD_STATS		0x003f
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun struct txbd8 {
204*4882a593Smuzhiyun 	uint16_t status;	/* Status Fields */
205*4882a593Smuzhiyun 	uint16_t length;	/* Buffer length */
206*4882a593Smuzhiyun 	uint32_t bufptr;	/* Buffer Pointer */
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun struct rxbd8 {
210*4882a593Smuzhiyun 	uint16_t status;	/* Status Fields */
211*4882a593Smuzhiyun 	uint16_t length;	/* Buffer Length */
212*4882a593Smuzhiyun 	uint32_t bufptr;	/* Buffer Pointer */
213*4882a593Smuzhiyun };
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun struct tsec_rmon_mib {
216*4882a593Smuzhiyun 	/* Transmit and Receive Counters */
217*4882a593Smuzhiyun 	u32	tr64;		/* Tx/Rx 64-byte Frame Counter */
218*4882a593Smuzhiyun 	u32	tr127;		/* Tx/Rx 65-127 byte Frame Counter */
219*4882a593Smuzhiyun 	u32	tr255;		/* Tx/Rx 128-255 byte Frame Counter */
220*4882a593Smuzhiyun 	u32	tr511;		/* Tx/Rx 256-511 byte Frame Counter */
221*4882a593Smuzhiyun 	u32	tr1k;		/* Tx/Rx 512-1023 byte Frame Counter */
222*4882a593Smuzhiyun 	u32	trmax;		/* Tx/Rx 1024-1518 byte Frame Counter */
223*4882a593Smuzhiyun 	u32	trmgv;		/* Tx/Rx 1519-1522 byte Good VLAN Frame */
224*4882a593Smuzhiyun 	/* Receive Counters */
225*4882a593Smuzhiyun 	u32	rbyt;		/* Receive Byte Counter */
226*4882a593Smuzhiyun 	u32	rpkt;		/* Receive Packet Counter */
227*4882a593Smuzhiyun 	u32	rfcs;		/* Receive FCS Error Counter */
228*4882a593Smuzhiyun 	u32	rmca;		/* Receive Multicast Packet (Counter) */
229*4882a593Smuzhiyun 	u32	rbca;		/* Receive Broadcast Packet */
230*4882a593Smuzhiyun 	u32	rxcf;		/* Receive Control Frame Packet */
231*4882a593Smuzhiyun 	u32	rxpf;		/* Receive Pause Frame Packet */
232*4882a593Smuzhiyun 	u32	rxuo;		/* Receive Unknown OP Code */
233*4882a593Smuzhiyun 	u32	raln;		/* Receive Alignment Error */
234*4882a593Smuzhiyun 	u32	rflr;		/* Receive Frame Length Error */
235*4882a593Smuzhiyun 	u32	rcde;		/* Receive Code Error */
236*4882a593Smuzhiyun 	u32	rcse;		/* Receive Carrier Sense Error */
237*4882a593Smuzhiyun 	u32	rund;		/* Receive Undersize Packet */
238*4882a593Smuzhiyun 	u32	rovr;		/* Receive Oversize Packet */
239*4882a593Smuzhiyun 	u32	rfrg;		/* Receive Fragments */
240*4882a593Smuzhiyun 	u32	rjbr;		/* Receive Jabber */
241*4882a593Smuzhiyun 	u32	rdrp;		/* Receive Drop */
242*4882a593Smuzhiyun 	/* Transmit Counters */
243*4882a593Smuzhiyun 	u32	tbyt;		/* Transmit Byte Counter */
244*4882a593Smuzhiyun 	u32	tpkt;		/* Transmit Packet */
245*4882a593Smuzhiyun 	u32	tmca;		/* Transmit Multicast Packet */
246*4882a593Smuzhiyun 	u32	tbca;		/* Transmit Broadcast Packet */
247*4882a593Smuzhiyun 	u32	txpf;		/* Transmit Pause Control Frame */
248*4882a593Smuzhiyun 	u32	tdfr;		/* Transmit Deferral Packet */
249*4882a593Smuzhiyun 	u32	tedf;		/* Transmit Excessive Deferral Packet */
250*4882a593Smuzhiyun 	u32	tscl;		/* Transmit Single Collision Packet */
251*4882a593Smuzhiyun 	/* (0x2_n700) */
252*4882a593Smuzhiyun 	u32	tmcl;		/* Transmit Multiple Collision Packet */
253*4882a593Smuzhiyun 	u32	tlcl;		/* Transmit Late Collision Packet */
254*4882a593Smuzhiyun 	u32	txcl;		/* Transmit Excessive Collision Packet */
255*4882a593Smuzhiyun 	u32	tncl;		/* Transmit Total Collision */
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun 	u32	res2;
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun 	u32	tdrp;		/* Transmit Drop Frame */
260*4882a593Smuzhiyun 	u32	tjbr;		/* Transmit Jabber Frame */
261*4882a593Smuzhiyun 	u32	tfcs;		/* Transmit FCS Error */
262*4882a593Smuzhiyun 	u32	txcf;		/* Transmit Control Frame */
263*4882a593Smuzhiyun 	u32	tovr;		/* Transmit Oversize Frame */
264*4882a593Smuzhiyun 	u32	tund;		/* Transmit Undersize Frame */
265*4882a593Smuzhiyun 	u32	tfrg;		/* Transmit Fragments Frame */
266*4882a593Smuzhiyun 	/* General Registers */
267*4882a593Smuzhiyun 	u32	car1;		/* Carry Register One */
268*4882a593Smuzhiyun 	u32	car2;		/* Carry Register Two */
269*4882a593Smuzhiyun 	u32	cam1;		/* Carry Register One Mask */
270*4882a593Smuzhiyun 	u32	cam2;		/* Carry Register Two Mask */
271*4882a593Smuzhiyun };
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun struct tsec_hash_regs {
274*4882a593Smuzhiyun 	u32	iaddr0;		/* Individual Address Register 0 */
275*4882a593Smuzhiyun 	u32	iaddr1;		/* Individual Address Register 1 */
276*4882a593Smuzhiyun 	u32	iaddr2;		/* Individual Address Register 2 */
277*4882a593Smuzhiyun 	u32	iaddr3;		/* Individual Address Register 3 */
278*4882a593Smuzhiyun 	u32	iaddr4;		/* Individual Address Register 4 */
279*4882a593Smuzhiyun 	u32	iaddr5;		/* Individual Address Register 5 */
280*4882a593Smuzhiyun 	u32	iaddr6;		/* Individual Address Register 6 */
281*4882a593Smuzhiyun 	u32	iaddr7;		/* Individual Address Register 7 */
282*4882a593Smuzhiyun 	u32	res1[24];
283*4882a593Smuzhiyun 	u32	gaddr0;		/* Group Address Register 0 */
284*4882a593Smuzhiyun 	u32	gaddr1;		/* Group Address Register 1 */
285*4882a593Smuzhiyun 	u32	gaddr2;		/* Group Address Register 2 */
286*4882a593Smuzhiyun 	u32	gaddr3;		/* Group Address Register 3 */
287*4882a593Smuzhiyun 	u32	gaddr4;		/* Group Address Register 4 */
288*4882a593Smuzhiyun 	u32	gaddr5;		/* Group Address Register 5 */
289*4882a593Smuzhiyun 	u32	gaddr6;		/* Group Address Register 6 */
290*4882a593Smuzhiyun 	u32	gaddr7;		/* Group Address Register 7 */
291*4882a593Smuzhiyun 	u32	res2[24];
292*4882a593Smuzhiyun };
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun struct tsec {
295*4882a593Smuzhiyun 	/* General Control and Status Registers (0x2_n000) */
296*4882a593Smuzhiyun 	u32	res000[4];
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	u32	ievent;		/* Interrupt Event */
299*4882a593Smuzhiyun 	u32	imask;		/* Interrupt Mask */
300*4882a593Smuzhiyun 	u32	edis;		/* Error Disabled */
301*4882a593Smuzhiyun 	u32	res01c;
302*4882a593Smuzhiyun 	u32	ecntrl;		/* Ethernet Control */
303*4882a593Smuzhiyun 	u32	minflr;		/* Minimum Frame Length */
304*4882a593Smuzhiyun 	u32	ptv;		/* Pause Time Value */
305*4882a593Smuzhiyun 	u32	dmactrl;	/* DMA Control */
306*4882a593Smuzhiyun 	u32	tbipa;		/* TBI PHY Address */
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun 	u32	res034[3];
309*4882a593Smuzhiyun 	u32	res040[48];
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun 	/* Transmit Control and Status Registers (0x2_n100) */
312*4882a593Smuzhiyun 	u32	tctrl;		/* Transmit Control */
313*4882a593Smuzhiyun 	u32	tstat;		/* Transmit Status */
314*4882a593Smuzhiyun 	u32	res108;
315*4882a593Smuzhiyun 	u32	tbdlen;		/* Tx BD Data Length */
316*4882a593Smuzhiyun 	u32	res110[5];
317*4882a593Smuzhiyun 	u32	ctbptr;		/* Current TxBD Pointer */
318*4882a593Smuzhiyun 	u32	res128[23];
319*4882a593Smuzhiyun 	u32	tbptr;		/* TxBD Pointer */
320*4882a593Smuzhiyun 	u32	res188[30];
321*4882a593Smuzhiyun 	/* (0x2_n200) */
322*4882a593Smuzhiyun 	u32	res200;
323*4882a593Smuzhiyun 	u32	tbase;		/* TxBD Base Address */
324*4882a593Smuzhiyun 	u32	res208[42];
325*4882a593Smuzhiyun 	u32	ostbd;		/* Out of Sequence TxBD */
326*4882a593Smuzhiyun 	u32	ostbdp;		/* Out of Sequence Tx Data Buffer Pointer */
327*4882a593Smuzhiyun 	u32	res2b8[18];
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun 	/* Receive Control and Status Registers (0x2_n300) */
330*4882a593Smuzhiyun 	u32	rctrl;		/* Receive Control */
331*4882a593Smuzhiyun 	u32	rstat;		/* Receive Status */
332*4882a593Smuzhiyun 	u32	res308;
333*4882a593Smuzhiyun 	u32	rbdlen;		/* RxBD Data Length */
334*4882a593Smuzhiyun 	u32	res310[4];
335*4882a593Smuzhiyun 	u32	res320;
336*4882a593Smuzhiyun 	u32	crbptr;		/* Current Receive Buffer Pointer */
337*4882a593Smuzhiyun 	u32	res328[6];
338*4882a593Smuzhiyun 	u32	mrblr;		/* Maximum Receive Buffer Length */
339*4882a593Smuzhiyun 	u32	res344[16];
340*4882a593Smuzhiyun 	u32	rbptr;		/* RxBD Pointer */
341*4882a593Smuzhiyun 	u32	res388[30];
342*4882a593Smuzhiyun 	/* (0x2_n400) */
343*4882a593Smuzhiyun 	u32	res400;
344*4882a593Smuzhiyun 	u32	rbase;		/* RxBD Base Address */
345*4882a593Smuzhiyun 	u32	res408[62];
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun 	/* MAC Registers (0x2_n500) */
348*4882a593Smuzhiyun 	u32	maccfg1;	/* MAC Configuration #1 */
349*4882a593Smuzhiyun 	u32	maccfg2;	/* MAC Configuration #2 */
350*4882a593Smuzhiyun 	u32	ipgifg;		/* Inter Packet Gap/Inter Frame Gap */
351*4882a593Smuzhiyun 	u32	hafdup;		/* Half-duplex */
352*4882a593Smuzhiyun 	u32	maxfrm;		/* Maximum Frame */
353*4882a593Smuzhiyun 	u32	res514;
354*4882a593Smuzhiyun 	u32	res518;
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun 	u32	res51c;
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun 	u32	resmdio[6];
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun 	u32	res538;
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun 	u32	ifstat;		/* Interface Status */
363*4882a593Smuzhiyun 	u32	macstnaddr1;	/* Station Address, part 1 */
364*4882a593Smuzhiyun 	u32	macstnaddr2;	/* Station Address, part 2 */
365*4882a593Smuzhiyun 	u32	res548[46];
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun 	/* (0x2_n600) */
368*4882a593Smuzhiyun 	u32	res600[32];
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun 	/* RMON MIB Registers (0x2_n680-0x2_n73c) */
371*4882a593Smuzhiyun 	struct tsec_rmon_mib	rmon;
372*4882a593Smuzhiyun 	u32	res740[48];
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun 	/* Hash Function Registers (0x2_n800) */
375*4882a593Smuzhiyun 	struct tsec_hash_regs	hash;
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun 	u32	res900[128];
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun 	/* Pattern Registers (0x2_nb00) */
380*4882a593Smuzhiyun 	u32	resb00[62];
381*4882a593Smuzhiyun 	u32	attr; /* Default Attribute Register */
382*4882a593Smuzhiyun 	u32	attreli; /* Default Attribute Extract Length and Index */
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	/* TSEC Future Expansion Space (0x2_nc00-0x2_nffc) */
385*4882a593Smuzhiyun 	u32	resc00[256];
386*4882a593Smuzhiyun };
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun #define TSEC_GIGABIT	(1 << 0)
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun /* These flags currently only have meaning if we're using the eTSEC */
391*4882a593Smuzhiyun #define TSEC_REDUCED	(1 << 1)	/* MAC-PHY interface uses RGMII */
392*4882a593Smuzhiyun #define TSEC_SGMII	(1 << 2)	/* MAC-PHY interface uses SGMII */
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun #define TX_BUF_CNT	2
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun struct tsec_private {
397*4882a593Smuzhiyun 	struct txbd8 __iomem txbd[TX_BUF_CNT];
398*4882a593Smuzhiyun 	struct rxbd8 __iomem rxbd[PKTBUFSRX];
399*4882a593Smuzhiyun 	struct tsec __iomem *regs;
400*4882a593Smuzhiyun 	struct tsec_mii_mng __iomem *phyregs_sgmii;
401*4882a593Smuzhiyun 	struct phy_device *phydev;
402*4882a593Smuzhiyun 	phy_interface_t interface;
403*4882a593Smuzhiyun 	struct mii_dev *bus;
404*4882a593Smuzhiyun 	uint phyaddr;
405*4882a593Smuzhiyun 	uint tbiaddr;
406*4882a593Smuzhiyun 	char mii_devname[16];
407*4882a593Smuzhiyun 	u32 flags;
408*4882a593Smuzhiyun 	uint rx_idx;	/* index of the current RX buffer */
409*4882a593Smuzhiyun 	uint tx_idx;	/* index of the current TX buffer */
410*4882a593Smuzhiyun #ifndef CONFIG_DM_ETH
411*4882a593Smuzhiyun 	struct eth_device *dev;
412*4882a593Smuzhiyun #else
413*4882a593Smuzhiyun 	struct udevice *dev;
414*4882a593Smuzhiyun #endif
415*4882a593Smuzhiyun };
416*4882a593Smuzhiyun 
417*4882a593Smuzhiyun struct tsec_info_struct {
418*4882a593Smuzhiyun 	struct tsec __iomem *regs;
419*4882a593Smuzhiyun 	struct tsec_mii_mng __iomem *miiregs_sgmii;
420*4882a593Smuzhiyun 	char *devname;
421*4882a593Smuzhiyun 	char *mii_devname;
422*4882a593Smuzhiyun 	phy_interface_t interface;
423*4882a593Smuzhiyun 	unsigned int phyaddr;
424*4882a593Smuzhiyun 	u32 flags;
425*4882a593Smuzhiyun };
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun #ifndef CONFIG_DM_ETH
428*4882a593Smuzhiyun int tsec_standard_init(bd_t *bis);
429*4882a593Smuzhiyun int tsec_eth_init(bd_t *bis, struct tsec_info_struct *tsec_info, int num);
430*4882a593Smuzhiyun #endif
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun #endif /* __TSEC_H */
433