summaryrefslogtreecommitdiff
path: root/arch/arm/cpu/ixp/npe/include/IxEthMii_p.h
blob: 104b65c1f0418c31a23d4ab852631e9b58b472f3 (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
/**
 * @file IxEthMii_p.h
 *
 * @author Intel Corporation
 * @date 
 *
 * @brief  MII Header file
 *
 * Design Notes:
 *
 * 
 * @par
 * IXP400 SW Release version 2.0
 * 
 * -- Copyright Notice --
 * 
 * @par
 * Copyright 2001-2005, Intel Corporation.
 * All rights reserved.
 * 
 * @par
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the Intel Corporation nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 * 
 * @par
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * 
 * @par
 * -- End of Copyright Notice --
 */

#ifndef IxEthMii_p_H
#define IxEthMii_p_H


/* MII definitions - these have been verified against the LXT971 and
 LXT972 PHYs*/

#define IX_ETH_MII_MAX_REG_NUM  0x20  /* max number of registers */

#define IX_ETH_MII_CTRL_REG     0x0	/* Control Register */
#define IX_ETH_MII_STAT_REG	0x1	/* Status Register */
#define IX_ETH_MII_PHY_ID1_REG  0x2	/* PHY identifier 1 Register */
#define IX_ETH_MII_PHY_ID2_REG  0x3	/* PHY identifier 2 Register */
#define IX_ETH_MII_AN_ADS_REG   0x4	/* Auto-Negotiation 	  */
					/* Advertisement Register */
#define IX_ETH_MII_AN_PRTN_REG  0x5	/* Auto-Negotiation 	    */
					/* partner ability Register */
#define IX_ETH_MII_AN_EXP_REG   0x6	/* Auto-Negotiation   */
					/* Expansion Register */
#define IX_ETH_MII_AN_NEXT_REG  0x7	/* Auto-Negotiation 	       */
					/* next-page transmit Register */

#define IX_ETH_MII_STAT2_REG    0x11    /* Status Register 2*/


/* MII control register bit  */

#define IX_ETH_MII_CR_COLL_TEST  0x0080  /* collision test */
#define IX_ETH_MII_CR_FDX	 0x0100  /* FDX =1, half duplex =0 */
#define IX_ETH_MII_CR_RESTART    0x0200  /* restart auto negotiation */
#define IX_ETH_MII_CR_ISOLATE    0x0400  /* isolate PHY from MII */
#define IX_ETH_MII_CR_POWER_DOWN 0x0800  /* power down */
#define IX_ETH_MII_CR_AUTO_EN    0x1000  /* auto-negotiation enable */
#define IX_ETH_MII_CR_100	 0x2000  /* 0 = 10mb, 1 = 100mb */
#define IX_ETH_MII_CR_LOOPBACK   0x4000  /* 0 = normal, 1 = loopback */
#define IX_ETH_MII_CR_RESET	 0x8000  /* 0 = normal, 1 = PHY reset */
#define IX_ETH_MII_CR_NORM_EN    0x0000  /* just enable the PHY */
#define IX_ETH_MII_CR_DEF_0_MASK 0xca7f  /* they must return zero */
#define IX_ETH_MII_CR_RES_MASK   0x007f  /* reserved bits, return zero */

/* MII Status register bit definitions */

#define IX_ETH_MII_SR_LINK_STATUS   0x0004 /* link Status -- 1 = link */
#define IX_ETH_MII_SR_AUTO_SEL      0x0008 /* auto speed select capable */
#define IX_ETH_MII_SR_REMOTE_FAULT  0x0010 /* Remote fault detect */
#define IX_ETH_MII_SR_AUTO_NEG      0x0020 /* auto negotiation complete */
#define IX_ETH_MII_SR_10T_HALF_DPX  0x0800 /* 10BaseT HD capable */
#define IX_ETH_MII_SR_10T_FULL_DPX  0x1000 /* 10BaseT FD capable */
#define IX_ETH_MII_SR_TX_HALF_DPX   0x2000 /* TX HD capable */
#define IX_ETH_MII_SR_TX_FULL_DPX   0x4000 /* TX FD capable */
#define IX_ETH_MII_SR_T4            0x8000 /* T4 capable */
#define IX_ETH_MII_SR_ABIL_MASK     0xff80 /* abilities mask */
#define IX_ETH_MII_SR_EXT_CAP       0x0001 /* extended capabilities */


/* LXT971/2 Status 2 register bit definitions */
#define IX_ETH_MII_SR2_100          0x4000
#define IX_ETH_MII_SR2_TX           0x2000
#define IX_ETH_MII_SR2_RX           0x1000
#define IX_ETH_MII_SR2_COL          0x0800
#define IX_ETH_MII_SR2_LINK         0x0400
#define IX_ETH_MII_SR2_FD           0x0200
#define IX_ETH_MII_SR2_AUTO         0x0100
#define IX_ETH_MII_SR2_AUTO_CMPLT   0x0080
#define IX_ETH_MII_SR2_POLARITY     0x0020
#define IX_ETH_MII_SR2_PAUSE        0x0010
#define IX_ETH_MII_SR2_ERROR        0x0008

/* MII Link Code word  bit definitions */

#define IX_ETH_MII_BP_FAULT	0x2000       	/* remote fault */
#define IX_ETH_MII_BP_ACK	0x4000       	/* acknowledge */
#define IX_ETH_MII_BP_NP	0x8000       	/* nexp page is supported */

/* MII Next Page bit definitions */

#define IX_ETH_MII_NP_TOGGLE 0x0800       	/* toggle bit */
#define IX_ETH_MII_NP_ACK2	 0x1000       	/* acknowledge two */
#define IX_ETH_MII_NP_MSG	 0x2000       	/* message page */
#define IX_ETH_MII_NP_ACK1	 0x4000       	/* acknowledge one */
#define IX_ETH_MII_NP_NP	 0x8000       	/* nexp page will follow */

/* MII Expansion Register bit definitions */

#define IX_ETH_MII_EXP_FAULT    0x0010  /* parallel detection fault */
#define IX_ETH_MII_EXP_PRTN_NP  0x0008  /* link partner next-page able */
#define IX_ETH_MII_EXP_LOC_NP   0x0004  /* local PHY next-page able */
#define IX_ETH_MII_EXP_PR	    0x0002  /* full page received */
#define IX_ETH_MII_EXP_PRT_AN   0x0001  /* link partner auto neg able */

/* technology ability field bit definitions */

#define IX_ETH_MII_TECH_10BASE_T	  0x0020  /* 10Base-T */
#define IX_ETH_MII_TECH_10BASE_FD	  0x0040  /* 10Base-T Full Duplex */
#define IX_ETH_MII_TECH_100BASE_TX	  0x0080  /* 100Base-TX */
#define IX_ETH_MII_TECH_100BASE_TX_FD 0x0100  /* 100Base-TX Full Duplex */

#define IX_ETH_MII_TECH_100BASE_T4	0x0200	/* 100Base-T4 */
#define IX_ETH_MII_ADS_TECH_MASK	0x1fe0	/* technology abilities mask */
#define IX_ETH_MII_TECH_MASK	IX_ETH_MII_ADS_TECH_MASK
#define IX_ETH_MII_ADS_SEL_MASK	0x001f	/* selector field mask */

#define IX_ETH_MII_AN_FAIL     0x10    /* auto-negotiation fail */
#define IX_ETH_MII_STAT_FAIL   0x20    /* errors in the status register */
#define IX_ETH_MII_PHY_NO_ABLE 0x40    /* the PHY lacks some abilities */

/* Definitions for MII access routines*/

#define IX_ETH_MII_GO                  BIT(31)
#define IX_ETH_MII_WRITE               BIT(26)
#define IX_ETH_MII_TIMEOUT_10TH_SECS       (5)    
#define IX_ETH_MII_10TH_SEC_IN_MILLIS    (100)              
#define IX_ETH_MII_READ_FAIL           BIT(31)

/* When we reset the PHY we delay for 2 seconds to allow the reset to 
   complete*/
#define IX_ETH_MII_RESET_DELAY_MS  (2000)     
#define IX_ETH_MII_RESET_POLL_MS     (50)

#define IX_ETH_MII_REG_SHL    16
#define IX_ETH_MII_ADDR_SHL   21

/* supported PHYs */
#define IX_ETH_MII_LXT971_PHY_ID	0x001378E0
#define IX_ETH_MII_LXT972_PHY_ID	0x001378E2
#define IX_ETH_MII_LXT973_PHY_ID	0x00137A10
#define IX_ETH_MII_LXT973A3_PHY_ID	0x00137A11
#define IX_ETH_MII_KS8995_PHY_ID	0x00221450
#define IX_ETH_MII_LXT9785_PHY_ID	0x001378FF	


#define IX_ETH_MII_INVALID_PHY_ID 0x00000000
#define IX_ETH_MII_UNKNOWN_PHY_ID 0xffffffff

#endif  /*IxEthAccMii_p_H*/