]>
git.ipfire.org Git - people/ms/u-boot.git/blob - include/asm-arm/arch-davinci/emac_defs.h
2 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
6 * ----------------------------------------------------------------------------
10 * TI DaVinci (DM644X) EMAC peripheral driver header for DV-EVM
12 * Copyright (C) 2005 Texas Instruments.
14 * ----------------------------------------------------------------------------
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 * ----------------------------------------------------------------------------
32 * ver. 1.0: Sep 2005, TI PSP Team - Created EMAC version for uBoot.
36 #ifndef _DM644X_EMAC_H_
37 #define _DM644X_EMAC_H_
39 #include <asm/arch/hardware.h>
41 #define EMAC_BASE_ADDR (0x01c80000)
42 #define EMAC_WRAPPER_BASE_ADDR (0x01c81000)
43 #define EMAC_WRAPPER_RAM_ADDR (0x01c82000)
44 #define EMAC_MDIO_BASE_ADDR (0x01c84000)
46 /* MDIO module input frequency */
47 #define EMAC_MDIO_BUS_FREQ 99000000 /* PLL/6 - 99 MHz */
48 /* MDIO clock output frequency */
49 #define EMAC_MDIO_CLOCK_FREQ 2000000 /* 2.0 MHz */
51 /* Ethernet Min/Max packet size */
52 #define EMAC_MIN_ETHERNET_PKT_SIZE 60
53 #define EMAC_MAX_ETHERNET_PKT_SIZE 1518
54 #define EMAC_PKT_ALIGN 18 /* 1518 + 18 = 1536 (packet aligned on 32 byte boundry) */
56 /* Number of RX packet buffers
57 * NOTE: Only 1 buffer supported as of now
59 #define EMAC_MAX_RX_BUFFERS 10
62 /***********************************************
63 ******** Internally used macros ***************
64 ***********************************************/
69 /* Each descriptor occupies 4 words, lets start RX desc's at 0 and
70 * reserve space for 64 descriptors max
72 #define EMAC_RX_DESC_BASE 0x0
73 #define EMAC_TX_DESC_BASE 0x1000
75 /* EMAC Teardown value */
76 #define EMAC_TEARDOWN_VALUE 0xfffffffc
78 /* MII Status Register */
79 #define MII_STATUS_REG 1
81 /* Number of statistics registers */
82 #define EMAC_NUM_STATS 36
86 typedef volatile struct _emac_desc
88 u_int32_t next
; /* Pointer to next descriptor in chain */
89 u_int8_t
*buffer
; /* Pointer to data buffer */
90 u_int32_t buff_off_len
; /* Buffer Offset(MSW) and Length(LSW) */
91 u_int32_t pkt_flag_len
; /* Packet Flags(MSW) and Length(LSW) */
94 /* CPPI bit positions */
95 #define EMAC_CPPI_SOP_BIT (0x80000000)
96 #define EMAC_CPPI_EOP_BIT (0x40000000)
97 #define EMAC_CPPI_OWNERSHIP_BIT (0x20000000)
98 #define EMAC_CPPI_EOQ_BIT (0x10000000)
99 #define EMAC_CPPI_TEARDOWN_COMPLETE_BIT (0x08000000)
100 #define EMAC_CPPI_PASS_CRC_BIT (0x04000000)
102 #define EMAC_CPPI_RX_ERROR_FRAME (0x03fc0000)
104 #define EMAC_MACCONTROL_MIIEN_ENABLE (0x20)
105 #define EMAC_MACCONTROL_FULLDUPLEX_ENABLE (0x1)
107 #define EMAC_RXMBPENABLE_RXCAFEN_ENABLE (0x200000)
108 #define EMAC_RXMBPENABLE_RXBROADEN (0x2000)
111 #define MDIO_CONTROL_IDLE (0x80000000)
112 #define MDIO_CONTROL_ENABLE (0x40000000)
113 #define MDIO_CONTROL_FAULT_ENABLE (0x40000)
114 #define MDIO_CONTROL_FAULT (0x80000)
115 #define MDIO_USERACCESS0_GO (0x80000000)
116 #define MDIO_USERACCESS0_WRITE_READ (0x0)
117 #define MDIO_USERACCESS0_WRITE_WRITE (0x40000000)
118 #define MDIO_USERACCESS0_ACK (0x20000000)
120 /* Ethernet MAC Registers Structure */
131 dv_reg TXINTSTATMASKED
;
133 dv_reg TXINTMASKCLEAR
;
137 dv_reg RXINTSTATMASKED
;
139 dv_reg RXINTMASKCLEAR
;
140 dv_reg MACINTSTATRAW
;
141 dv_reg MACINTSTATMASKED
;
142 dv_reg MACINTMASKSET
;
143 dv_reg MACINTMASKCLEAR
;
147 dv_reg RXUNICASTCLEAR
;
149 dv_reg RXBUFFEROFFSET
;
150 dv_reg RXFILTERLOWTHRESH
;
152 dv_reg RX0FLOWTHRESH
;
153 dv_reg RX1FLOWTHRESH
;
154 dv_reg RX2FLOWTHRESH
;
155 dv_reg RX3FLOWTHRESH
;
156 dv_reg RX4FLOWTHRESH
;
157 dv_reg RX5FLOWTHRESH
;
158 dv_reg RX6FLOWTHRESH
;
159 dv_reg RX7FLOWTHRESH
;
160 dv_reg RX0FREEBUFFER
;
161 dv_reg RX1FREEBUFFER
;
162 dv_reg RX2FREEBUFFER
;
163 dv_reg RX3FREEBUFFER
;
164 dv_reg RX4FREEBUFFER
;
165 dv_reg RX5FREEBUFFER
;
166 dv_reg RX6FREEBUFFER
;
167 dv_reg RX7FREEBUFFER
;
185 dv_reg RXBCASTFRAMES
;
186 dv_reg RXMCASTFRAMES
;
187 dv_reg RXPAUSEFRAMES
;
189 dv_reg RXALIGNCODEERRORS
;
195 dv_reg RXQOSFILTERED
;
198 dv_reg TXBCASTFRAMES
;
199 dv_reg TXMCASTFRAMES
;
200 dv_reg TXPAUSEFRAMES
;
205 dv_reg TXEXCESSIVECOLL
;
208 dv_reg TXCARRIERSENSE
;
214 dv_reg FRAME512T1023
;
217 dv_reg RXSOFOVERRUNS
;
218 dv_reg RXMOFOVERRUNS
;
219 dv_reg RXDMAOVERRUNS
;
259 /* EMAC Wrapper Registers Structure */
261 u_int8_t RSVD0
[4100];
267 /* EMAC MDIO Registers Structure */
274 dv_reg LINKINTMASKED
;
277 dv_reg USERINTMASKED
;
278 dv_reg USERINTMASKSET
;
279 dv_reg USERINTMASKCLEAR
;
287 int dm644x_eth_phy_read(u_int8_t phy_addr
, u_int8_t reg_num
, u_int16_t
*data
);
288 int dm644x_eth_phy_write(u_int8_t phy_addr
, u_int8_t reg_num
, u_int16_t data
);
293 int (*init
)(int phy_addr
);
294 int (*is_phy_connected
)(int phy_addr
);
295 int (*get_link_speed
)(int phy_addr
);
296 int (*auto_negotiate
)(int phy_addr
);
299 #define PHY_LXT972 (0x001378e2)
300 int lxt972_is_phy_connected(int phy_addr
);
301 int lxt972_get_link_speed(int phy_addr
);
302 int lxt972_init_phy(int phy_addr
);
303 int lxt972_auto_negotiate(int phy_addr
);
305 #define PHY_DP83848 (0x20005c90)
306 int dp83848_is_phy_connected(int phy_addr
);
307 int dp83848_get_link_speed(int phy_addr
);
308 int dp83848_init_phy(int phy_addr
);
309 int dp83848_auto_negotiate(int phy_addr
);
311 #endif /* _DM644X_EMAC_H_ */