xref: /openbmc/u-boot/drivers/net/dnet.h (revision 7511835b29f2074ebfa8ea794f0303ec8e49542b)
1*62cbc408SIlya Yanok /*
2*62cbc408SIlya Yanok  * Dave Ethernet Controller driver
3*62cbc408SIlya Yanok  *
4*62cbc408SIlya Yanok  * Copyright (C) 2008 Dave S.r.l. <www.dave.eu>
5*62cbc408SIlya Yanok  *
6*62cbc408SIlya Yanok  * This program is free software; you can redistribute it and/or modify
7*62cbc408SIlya Yanok  * it under the terms of the GNU General Public License version 2 as
8*62cbc408SIlya Yanok  * published by the Free Software Foundation.
9*62cbc408SIlya Yanok  */
10*62cbc408SIlya Yanok 
11*62cbc408SIlya Yanok #ifndef __DRIVERS_DNET_H__
12*62cbc408SIlya Yanok #define __DRIVERS_DNET_H__
13*62cbc408SIlya Yanok 
14*62cbc408SIlya Yanok #define DRIVERNAME "dnet"
15*62cbc408SIlya Yanok 
16*62cbc408SIlya Yanok struct dnet_registers {
17*62cbc408SIlya Yanok 	/* ALL DNET FIFO REGISTERS */
18*62cbc408SIlya Yanok 	u32 RX_LEN_FIFO;
19*62cbc408SIlya Yanok 	u32 RX_DATA_FIFO;
20*62cbc408SIlya Yanok 	u32 TX_LEN_FIFO;
21*62cbc408SIlya Yanok 	u32 TX_DATA_FIFO;
22*62cbc408SIlya Yanok 	u32 pad1[0x3c];
23*62cbc408SIlya Yanok 	/* ALL DNET CONTROL/STATUS REGISTERS */
24*62cbc408SIlya Yanok 	u32 VERCAPS;
25*62cbc408SIlya Yanok 	u32 INTR_SRC;
26*62cbc408SIlya Yanok 	u32 INTR_ENB;
27*62cbc408SIlya Yanok 	u32 RX_STATUS;
28*62cbc408SIlya Yanok 	u32 TX_STATUS;
29*62cbc408SIlya Yanok 	u32 RX_FRAMES_CNT;
30*62cbc408SIlya Yanok 	u32 TX_FRAMES_CNT;
31*62cbc408SIlya Yanok 	u32 RX_FIFO_TH;
32*62cbc408SIlya Yanok 	u32 TX_FIFO_TH;
33*62cbc408SIlya Yanok 	u32 SYS_CTL;
34*62cbc408SIlya Yanok 	u32 PAUSE_TMR;
35*62cbc408SIlya Yanok 	u32 RX_FIFO_WCNT;
36*62cbc408SIlya Yanok 	u32 TX_FIFO_WCNT;
37*62cbc408SIlya Yanok 	u32 pad2[0x33];
38*62cbc408SIlya Yanok 	/* ALL DNET MAC REGISTERS */
39*62cbc408SIlya Yanok 	u32 MACREG_DATA;	/* Mac-Reg Data */
40*62cbc408SIlya Yanok 	u32 MACREG_ADDR;	/* Mac-Reg Addr */
41*62cbc408SIlya Yanok 	u32 pad3[0x3e];
42*62cbc408SIlya Yanok 	/* ALL DNET RX STATISTICS COUNTERS  */
43*62cbc408SIlya Yanok 	u32 RX_PKT_IGNR_CNT;
44*62cbc408SIlya Yanok 	u32 RX_LEN_CHK_ERR_CNT;
45*62cbc408SIlya Yanok 	u32 RX_LNG_FRM_CNT;
46*62cbc408SIlya Yanok 	u32 RX_SHRT_FRM_CNT;
47*62cbc408SIlya Yanok 	u32 RX_IPG_VIOL_CNT;
48*62cbc408SIlya Yanok 	u32 RX_CRC_ERR_CNT;
49*62cbc408SIlya Yanok 	u32 RX_OK_PKT_CNT;
50*62cbc408SIlya Yanok 	u32 RX_CTL_FRM_CNT;
51*62cbc408SIlya Yanok 	u32 RX_PAUSE_FRM_CNT;
52*62cbc408SIlya Yanok 	u32 RX_MULTICAST_CNT;
53*62cbc408SIlya Yanok 	u32 RX_BROADCAST_CNT;
54*62cbc408SIlya Yanok 	u32 RX_VLAN_TAG_CNT;
55*62cbc408SIlya Yanok 	u32 RX_PRE_SHRINK_CNT;
56*62cbc408SIlya Yanok 	u32 RX_DRIB_NIB_CNT;
57*62cbc408SIlya Yanok 	u32 RX_UNSUP_OPCD_CNT;
58*62cbc408SIlya Yanok 	u32 RX_BYTE_CNT;
59*62cbc408SIlya Yanok 	u32 pad4[0x30];
60*62cbc408SIlya Yanok 	/* DNET TX STATISTICS COUNTERS */
61*62cbc408SIlya Yanok 	u32 TX_UNICAST_CNT;
62*62cbc408SIlya Yanok 	u32 TX_PAUSE_FRM_CNT;
63*62cbc408SIlya Yanok 	u32 TX_MULTICAST_CNT;
64*62cbc408SIlya Yanok 	u32 TX_BRDCAST_CNT;
65*62cbc408SIlya Yanok 	u32 TX_VLAN_TAG_CNT;
66*62cbc408SIlya Yanok 	u32 TX_BAD_FCS_CNT;
67*62cbc408SIlya Yanok 	u32 TX_JUMBO_CNT;
68*62cbc408SIlya Yanok 	u32 TX_BYTE_CNT;
69*62cbc408SIlya Yanok };
70*62cbc408SIlya Yanok 
71*62cbc408SIlya Yanok /* SOME INTERNAL MAC-CORE REGISTER */
72*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_REG			0x0
73*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_REG		0x2
74*62cbc408SIlya Yanok #define DNET_INTERNAL_MAX_PKT_SIZE_REG		0x4
75*62cbc408SIlya Yanok #define DNET_INTERNAL_IGP_REG			0x8
76*62cbc408SIlya Yanok #define DNET_INTERNAL_MAC_ADDR_0_REG		0xa
77*62cbc408SIlya Yanok #define DNET_INTERNAL_MAC_ADDR_1_REG		0xc
78*62cbc408SIlya Yanok #define DNET_INTERNAL_MAC_ADDR_2_REG		0xe
79*62cbc408SIlya Yanok #define DNET_INTERNAL_TX_RX_STS_REG		0x12
80*62cbc408SIlya Yanok #define DNET_INTERNAL_GMII_MNG_CTL_REG		0x14
81*62cbc408SIlya Yanok #define DNET_INTERNAL_GMII_MNG_DAT_REG		0x16
82*62cbc408SIlya Yanok 
83*62cbc408SIlya Yanok #define DNET_INTERNAL_GMII_MNG_CMD_FIN		(1 << 14)
84*62cbc408SIlya Yanok 
85*62cbc408SIlya Yanok #define DNET_INTERNAL_WRITE			(1 << 31)
86*62cbc408SIlya Yanok 
87*62cbc408SIlya Yanok /* MAC-CORE REGISTER FIELDS */
88*62cbc408SIlya Yanok 
89*62cbc408SIlya Yanok /* MAC-CORE MODE REGISTER FIELDS */
90*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_GBITEN			(1 << 0)
91*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_FCEN				(1 << 1)
92*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_RXEN				(1 << 2)
93*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_TXEN				(1 << 3)
94*62cbc408SIlya Yanok 
95*62cbc408SIlya Yanok /* MAC-CORE RXTX CONTROL REGISTER FIELDS */
96*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXSHORTFRAME		(1 << 8)
97*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXBROADCAST		(1 << 7)
98*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXMULTICAST		(1 << 4)
99*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXPAUSE		(1 << 3)
100*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_DISTXFCS		(1 << 2)
101*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_DISCFXFCS		(1 << 1)
102*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_ENPROMISC		(1 << 0)
103*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_DROPCONTROL		(1 << 6)
104*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_ENABLEHALFDUP	(1 << 5)
105*62cbc408SIlya Yanok 
106*62cbc408SIlya Yanok /* SYSTEM CONTROL REGISTER FIELDS */
107*62cbc408SIlya Yanok #define DNET_SYS_CTL_IGNORENEXTPKT			(1 << 0)
108*62cbc408SIlya Yanok #define DNET_SYS_CTL_SENDPAUSE				(1 << 2)
109*62cbc408SIlya Yanok #define DNET_SYS_CTL_RXFIFOFLUSH			(1 << 3)
110*62cbc408SIlya Yanok #define DNET_SYS_CTL_TXFIFOFLUSH			(1 << 4)
111*62cbc408SIlya Yanok 
112*62cbc408SIlya Yanok /* TX STATUS REGISTER FIELDS */
113*62cbc408SIlya Yanok #define DNET_TX_STATUS_FIFO_ALMOST_EMPTY		(1 << 2)
114*62cbc408SIlya Yanok #define DNET_TX_STATUS_FIFO_ALMOST_FULL			(1 << 1)
115*62cbc408SIlya Yanok 
116*62cbc408SIlya Yanok /* INTERRUPT SOURCE REGISTER FIELDS */
117*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_PKTSENT			(1 << 0)
118*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_FIFOAF				(1 << 1)
119*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_FIFOAE				(1 << 2)
120*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_DISCFRM			(1 << 3)
121*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_FIFOFULL			(1 << 4)
122*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_CMDFIFOAF			(1 << 8)
123*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_CMDFIFOFF			(1 << 9)
124*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_DATAFIFOFF			(1 << 10)
125*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_SUMMARY			(1 << 16)
126*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_SUMMARY			(1 << 17)
127*62cbc408SIlya Yanok #define DNET_INTR_SRC_PHY				(1 << 19)
128*62cbc408SIlya Yanok 
129*62cbc408SIlya Yanok /* INTERRUPT ENABLE REGISTER FIELDS */
130*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_PKTSENT			(1 << 0)
131*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_FIFOAF				(1 << 1)
132*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_FIFOAE				(1 << 2)
133*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_DISCFRM			(1 << 3)
134*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_FIFOFULL			(1 << 4)
135*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_PKTRDY				(1 << 8)
136*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOAF				(1 << 9)
137*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOERR			(1 << 10)
138*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_ERROR				(1 << 11)
139*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOFULL			(1 << 12)
140*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOAE				(1 << 13)
141*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_SUMMARY			(1 << 16)
142*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_SUMMARY			(1 << 17)
143*62cbc408SIlya Yanok #define DNET_INTR_ENB_GLOBAL_ENABLE			(1 << 18)
144*62cbc408SIlya Yanok 
145*62cbc408SIlya Yanok /*
146*62cbc408SIlya Yanok  * Capabilities. Used by the driver to know the capabilities that
147*62cbc408SIlya Yanok  * the ethernet controller inside the FPGA have.
148*62cbc408SIlya Yanok  */
149*62cbc408SIlya Yanok 
150*62cbc408SIlya Yanok #define DNET_HAS_MDIO		(1 << 0)
151*62cbc408SIlya Yanok #define DNET_HAS_IRQ		(1 << 1)
152*62cbc408SIlya Yanok #define DNET_HAS_GIGABIT	(1 << 2)
153*62cbc408SIlya Yanok #define DNET_HAS_DMA		(1 << 3)
154*62cbc408SIlya Yanok 
155*62cbc408SIlya Yanok #define DNET_HAS_MII		(1 << 4) /* or GMII */
156*62cbc408SIlya Yanok #define DNET_HAS_RMII		(1 << 5) /* or RGMII */
157*62cbc408SIlya Yanok 
158*62cbc408SIlya Yanok #define DNET_CAPS_MASK		0xFFFF
159*62cbc408SIlya Yanok 
160*62cbc408SIlya Yanok #define DNET_FIFO_SIZE		2048 /* 2K x 32 bit */
161*62cbc408SIlya Yanok #define DNET_FIFO_TX_DATA_AF_TH	(DNET_FIFO_SIZE - 384) /* 384 = 1536 / 4 */
162*62cbc408SIlya Yanok #define DNET_FIFO_TX_DATA_AE_TH	(384)
163*62cbc408SIlya Yanok 
164*62cbc408SIlya Yanok #define DNET_FIFO_RX_CMD_AF_TH	(1 << 16) /* just one frame inside the FIFO */
165*62cbc408SIlya Yanok 
166*62cbc408SIlya Yanok #endif
167