tg3: Fix missed MSI workaround
[linux-2.6-block.git] / drivers / net / ethernet / broadcom / tg3.c
CommitLineData
1da177e4
LT
1/*
2 * tg3.c: Broadcom Tigon3 ethernet driver.
3 *
4 * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com)
5 * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com)
6 * Copyright (C) 2004 Sun Microsystems Inc.
b86fb2cf 7 * Copyright (C) 2005-2011 Broadcom Corporation.
1da177e4
LT
8 *
9 * Firmware is:
49cabf49
MC
10 * Derived from proprietary unpublished source code,
11 * Copyright (C) 2000-2003 Broadcom Corporation.
12 *
13 * Permission is hereby granted for the distribution of this firmware
14 * data in hexadecimal or equivalent format, provided this copyright
15 * notice is accompanying it.
1da177e4
LT
16 */
17
1da177e4
LT
18
19#include <linux/module.h>
20#include <linux/moduleparam.h>
6867c843 21#include <linux/stringify.h>
1da177e4
LT
22#include <linux/kernel.h>
23#include <linux/types.h>
24#include <linux/compiler.h>
25#include <linux/slab.h>
26#include <linux/delay.h>
14c85021 27#include <linux/in.h>
1da177e4 28#include <linux/init.h>
a6b7a407 29#include <linux/interrupt.h>
1da177e4
LT
30#include <linux/ioport.h>
31#include <linux/pci.h>
32#include <linux/netdevice.h>
33#include <linux/etherdevice.h>
34#include <linux/skbuff.h>
35#include <linux/ethtool.h>
3110f5f5 36#include <linux/mdio.h>
1da177e4 37#include <linux/mii.h>
158d7abd 38#include <linux/phy.h>
a9daf367 39#include <linux/brcmphy.h>
1da177e4
LT
40#include <linux/if_vlan.h>
41#include <linux/ip.h>
42#include <linux/tcp.h>
43#include <linux/workqueue.h>
61487480 44#include <linux/prefetch.h>
f9a5f7d3 45#include <linux/dma-mapping.h>
077f849d 46#include <linux/firmware.h>
1da177e4
LT
47
48#include <net/checksum.h>
c9bdd4b5 49#include <net/ip.h>
1da177e4
LT
50
51#include <asm/system.h>
27fd9de8 52#include <linux/io.h>
1da177e4 53#include <asm/byteorder.h>
27fd9de8 54#include <linux/uaccess.h>
1da177e4 55
49b6e95f 56#ifdef CONFIG_SPARC
1da177e4 57#include <asm/idprom.h>
49b6e95f 58#include <asm/prom.h>
1da177e4
LT
59#endif
60
63532394
MC
61#define BAR_0 0
62#define BAR_2 2
63
1da177e4
LT
64#include "tg3.h"
65
63c3a66f
JP
66/* Functions & macros to verify TG3_FLAGS types */
67
68static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
69{
70 return test_bit(flag, bits);
71}
72
73static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
74{
75 set_bit(flag, bits);
76}
77
78static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
79{
80 clear_bit(flag, bits);
81}
82
83#define tg3_flag(tp, flag) \
84 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
85#define tg3_flag_set(tp, flag) \
86 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
87#define tg3_flag_clear(tp, flag) \
88 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
89
1da177e4 90#define DRV_MODULE_NAME "tg3"
6867c843 91#define TG3_MAJ_NUM 3
eaa36660 92#define TG3_MIN_NUM 120
6867c843
MC
93#define DRV_MODULE_VERSION \
94 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
eaa36660 95#define DRV_MODULE_RELDATE "August 18, 2011"
1da177e4 96
1da177e4
LT
97#define TG3_DEF_RX_MODE 0
98#define TG3_DEF_TX_MODE 0
99#define TG3_DEF_MSG_ENABLE \
100 (NETIF_MSG_DRV | \
101 NETIF_MSG_PROBE | \
102 NETIF_MSG_LINK | \
103 NETIF_MSG_TIMER | \
104 NETIF_MSG_IFDOWN | \
105 NETIF_MSG_IFUP | \
106 NETIF_MSG_RX_ERR | \
107 NETIF_MSG_TX_ERR)
108
520b2756
MC
109#define TG3_GRC_LCLCTL_PWRSW_DELAY 100
110
1da177e4
LT
111/* length of time before we decide the hardware is borked,
112 * and dev->tx_timeout() should be called to fix the problem
113 */
63c3a66f 114
1da177e4
LT
115#define TG3_TX_TIMEOUT (5 * HZ)
116
117/* hardware minimum and maximum for a single frame's data payload */
118#define TG3_MIN_MTU 60
119#define TG3_MAX_MTU(tp) \
63c3a66f 120 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
1da177e4
LT
121
122/* These numbers seem to be hard coded in the NIC firmware somehow.
123 * You can't change the ring sizes, but you can change where you place
124 * them in the NIC onboard memory.
125 */
7cb32cf2 126#define TG3_RX_STD_RING_SIZE(tp) \
63c3a66f 127 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
de9f5230 128 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
1da177e4 129#define TG3_DEF_RX_RING_PENDING 200
7cb32cf2 130#define TG3_RX_JMB_RING_SIZE(tp) \
63c3a66f 131 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
de9f5230 132 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
1da177e4 133#define TG3_DEF_RX_JUMBO_RING_PENDING 100
c6cdf436 134#define TG3_RSS_INDIR_TBL_SIZE 128
1da177e4
LT
135
136/* Do not place this n-ring entries value into the tp struct itself,
137 * we really want to expose these constants to GCC so that modulo et
138 * al. operations are done with shifts and masks instead of with
139 * hw multiply/modulo instructions. Another solution would be to
140 * replace things like '% foo' with '& (foo - 1)'.
141 */
1da177e4
LT
142
143#define TG3_TX_RING_SIZE 512
144#define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1)
145
2c49a44d
MC
146#define TG3_RX_STD_RING_BYTES(tp) \
147 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
148#define TG3_RX_JMB_RING_BYTES(tp) \
149 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
150#define TG3_RX_RCB_RING_BYTES(tp) \
7cb32cf2 151 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
1da177e4
LT
152#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
153 TG3_TX_RING_SIZE)
1da177e4
LT
154#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
155
287be12e
MC
156#define TG3_DMA_BYTE_ENAB 64
157
158#define TG3_RX_STD_DMA_SZ 1536
159#define TG3_RX_JMB_DMA_SZ 9046
160
161#define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB)
162
163#define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
164#define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
1da177e4 165
2c49a44d
MC
166#define TG3_RX_STD_BUFF_RING_SIZE(tp) \
167 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
2b2cdb65 168
2c49a44d
MC
169#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
170 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
2b2cdb65 171
d2757fc4
MC
172/* Due to a hardware bug, the 5701 can only DMA to memory addresses
173 * that are at least dword aligned when used in PCIX mode. The driver
174 * works around this bug by double copying the packet. This workaround
175 * is built into the normal double copy length check for efficiency.
176 *
177 * However, the double copy is only necessary on those architectures
178 * where unaligned memory accesses are inefficient. For those architectures
179 * where unaligned memory accesses incur little penalty, we can reintegrate
180 * the 5701 in the normal rx path. Doing so saves a device structure
181 * dereference by hardcoding the double copy threshold in place.
182 */
183#define TG3_RX_COPY_THRESHOLD 256
184#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
185 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD
186#else
187 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh)
188#endif
189
1da177e4 190/* minimum number of free TX descriptors required to wake up TX process */
f3f3f27e 191#define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4)
e31aa987 192#define TG3_TX_BD_DMA_MAX 4096
1da177e4 193
ad829268
MC
194#define TG3_RAW_IP_ALIGN 2
195
c6cdf436
MC
196#define TG3_FW_UPDATE_TIMEOUT_SEC 5
197
077f849d
JSR
198#define FIRMWARE_TG3 "tigon/tg3.bin"
199#define FIRMWARE_TG3TSO "tigon/tg3_tso.bin"
200#define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin"
201
1da177e4 202static char version[] __devinitdata =
05dbe005 203 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
1da177e4
LT
204
205MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
206MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
207MODULE_LICENSE("GPL");
208MODULE_VERSION(DRV_MODULE_VERSION);
077f849d
JSR
209MODULE_FIRMWARE(FIRMWARE_TG3);
210MODULE_FIRMWARE(FIRMWARE_TG3TSO);
211MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
212
1da177e4
LT
213static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
214module_param(tg3_debug, int, 0);
215MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
216
a3aa1884 217static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
13185217
HK
218 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
219 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
220 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
221 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
222 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
223 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
224 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
225 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
226 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
227 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
228 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
229 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
230 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
231 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
232 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
233 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
234 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
235 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
236 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
237 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
238 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
13185217 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
126a3368 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
13185217 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
13185217
HK
243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
126a3368 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
13185217
HK
255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
676917d4 258 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
13185217
HK
259 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
262 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
b5d3772c
MC
266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
d30cdd28
MC
268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
6c7af27c 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
9936bcf6
MC
271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
c88e668b
MC
273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
2befdcea
MC
275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
321d32a0
MC
277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)},
5e7ccf20 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
5001e2f6
MC
281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
b0f75221
MC
283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)},
288 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)},
302b500b 289 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
ba1f3c76 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
13185217
HK
291 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
292 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
293 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
294 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
295 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
296 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
297 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
1dcb14d9 298 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
13185217 299 {}
1da177e4
LT
300};
301
302MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
303
50da859d 304static const struct {
1da177e4 305 const char string[ETH_GSTRING_LEN];
48fa55a0 306} ethtool_stats_keys[] = {
1da177e4
LT
307 { "rx_octets" },
308 { "rx_fragments" },
309 { "rx_ucast_packets" },
310 { "rx_mcast_packets" },
311 { "rx_bcast_packets" },
312 { "rx_fcs_errors" },
313 { "rx_align_errors" },
314 { "rx_xon_pause_rcvd" },
315 { "rx_xoff_pause_rcvd" },
316 { "rx_mac_ctrl_rcvd" },
317 { "rx_xoff_entered" },
318 { "rx_frame_too_long_errors" },
319 { "rx_jabbers" },
320 { "rx_undersize_packets" },
321 { "rx_in_length_errors" },
322 { "rx_out_length_errors" },
323 { "rx_64_or_less_octet_packets" },
324 { "rx_65_to_127_octet_packets" },
325 { "rx_128_to_255_octet_packets" },
326 { "rx_256_to_511_octet_packets" },
327 { "rx_512_to_1023_octet_packets" },
328 { "rx_1024_to_1522_octet_packets" },
329 { "rx_1523_to_2047_octet_packets" },
330 { "rx_2048_to_4095_octet_packets" },
331 { "rx_4096_to_8191_octet_packets" },
332 { "rx_8192_to_9022_octet_packets" },
333
334 { "tx_octets" },
335 { "tx_collisions" },
336
337 { "tx_xon_sent" },
338 { "tx_xoff_sent" },
339 { "tx_flow_control" },
340 { "tx_mac_errors" },
341 { "tx_single_collisions" },
342 { "tx_mult_collisions" },
343 { "tx_deferred" },
344 { "tx_excessive_collisions" },
345 { "tx_late_collisions" },
346 { "tx_collide_2times" },
347 { "tx_collide_3times" },
348 { "tx_collide_4times" },
349 { "tx_collide_5times" },
350 { "tx_collide_6times" },
351 { "tx_collide_7times" },
352 { "tx_collide_8times" },
353 { "tx_collide_9times" },
354 { "tx_collide_10times" },
355 { "tx_collide_11times" },
356 { "tx_collide_12times" },
357 { "tx_collide_13times" },
358 { "tx_collide_14times" },
359 { "tx_collide_15times" },
360 { "tx_ucast_packets" },
361 { "tx_mcast_packets" },
362 { "tx_bcast_packets" },
363 { "tx_carrier_sense_errors" },
364 { "tx_discards" },
365 { "tx_errors" },
366
367 { "dma_writeq_full" },
368 { "dma_write_prioq_full" },
369 { "rxbds_empty" },
370 { "rx_discards" },
371 { "rx_errors" },
372 { "rx_threshold_hit" },
373
374 { "dma_readq_full" },
375 { "dma_read_prioq_full" },
376 { "tx_comp_queue_full" },
377
378 { "ring_set_send_prod_index" },
379 { "ring_status_update" },
380 { "nic_irqs" },
381 { "nic_avoided_irqs" },
4452d099
MC
382 { "nic_tx_threshold_hit" },
383
384 { "mbuf_lwm_thresh_hit" },
1da177e4
LT
385};
386
48fa55a0
MC
387#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys)
388
389
50da859d 390static const struct {
4cafd3f5 391 const char string[ETH_GSTRING_LEN];
48fa55a0 392} ethtool_test_keys[] = {
28a45957
MC
393 { "nvram test (online) " },
394 { "link test (online) " },
395 { "register test (offline)" },
396 { "memory test (offline)" },
397 { "mac loopback test (offline)" },
398 { "phy loopback test (offline)" },
941ec90f 399 { "ext loopback test (offline)" },
28a45957 400 { "interrupt test (offline)" },
4cafd3f5
MC
401};
402
48fa55a0
MC
403#define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys)
404
405
b401e9e2
MC
406static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
407{
408 writel(val, tp->regs + off);
409}
410
411static u32 tg3_read32(struct tg3 *tp, u32 off)
412{
de6f31eb 413 return readl(tp->regs + off);
b401e9e2
MC
414}
415
0d3031d9
MC
416static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
417{
418 writel(val, tp->aperegs + off);
419}
420
421static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
422{
de6f31eb 423 return readl(tp->aperegs + off);
0d3031d9
MC
424}
425
1da177e4
LT
426static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
427{
6892914f
MC
428 unsigned long flags;
429
430 spin_lock_irqsave(&tp->indirect_lock, flags);
1ee582d8
MC
431 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
432 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
6892914f 433 spin_unlock_irqrestore(&tp->indirect_lock, flags);
1ee582d8
MC
434}
435
436static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
437{
438 writel(val, tp->regs + off);
439 readl(tp->regs + off);
1da177e4
LT
440}
441
6892914f 442static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
1da177e4 443{
6892914f
MC
444 unsigned long flags;
445 u32 val;
446
447 spin_lock_irqsave(&tp->indirect_lock, flags);
448 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
449 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
450 spin_unlock_irqrestore(&tp->indirect_lock, flags);
451 return val;
452}
453
454static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
455{
456 unsigned long flags;
457
458 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
459 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
460 TG3_64BIT_REG_LOW, val);
461 return;
462 }
66711e66 463 if (off == TG3_RX_STD_PROD_IDX_REG) {
6892914f
MC
464 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
465 TG3_64BIT_REG_LOW, val);
466 return;
1da177e4 467 }
6892914f
MC
468
469 spin_lock_irqsave(&tp->indirect_lock, flags);
470 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
471 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
472 spin_unlock_irqrestore(&tp->indirect_lock, flags);
473
474 /* In indirect mode when disabling interrupts, we also need
475 * to clear the interrupt bit in the GRC local ctrl register.
476 */
477 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
478 (val == 0x1)) {
479 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
480 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
481 }
482}
483
484static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
485{
486 unsigned long flags;
487 u32 val;
488
489 spin_lock_irqsave(&tp->indirect_lock, flags);
490 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
491 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
492 spin_unlock_irqrestore(&tp->indirect_lock, flags);
493 return val;
494}
495
b401e9e2
MC
496/* usec_wait specifies the wait time in usec when writing to certain registers
497 * where it is unsafe to read back the register without some delay.
498 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
499 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
500 */
501static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
6892914f 502{
63c3a66f 503 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
b401e9e2
MC
504 /* Non-posted methods */
505 tp->write32(tp, off, val);
506 else {
507 /* Posted method */
508 tg3_write32(tp, off, val);
509 if (usec_wait)
510 udelay(usec_wait);
511 tp->read32(tp, off);
512 }
513 /* Wait again after the read for the posted method to guarantee that
514 * the wait time is met.
515 */
516 if (usec_wait)
517 udelay(usec_wait);
1da177e4
LT
518}
519
09ee929c
MC
520static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
521{
522 tp->write32_mbox(tp, off, val);
63c3a66f 523 if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND))
6892914f 524 tp->read32_mbox(tp, off);
09ee929c
MC
525}
526
20094930 527static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
1da177e4
LT
528{
529 void __iomem *mbox = tp->regs + off;
530 writel(val, mbox);
63c3a66f 531 if (tg3_flag(tp, TXD_MBOX_HWBUG))
1da177e4 532 writel(val, mbox);
63c3a66f 533 if (tg3_flag(tp, MBOX_WRITE_REORDER))
1da177e4
LT
534 readl(mbox);
535}
536
b5d3772c
MC
537static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
538{
de6f31eb 539 return readl(tp->regs + off + GRCMBOX_BASE);
b5d3772c
MC
540}
541
542static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
543{
544 writel(val, tp->regs + off + GRCMBOX_BASE);
545}
546
c6cdf436 547#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
09ee929c 548#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
c6cdf436
MC
549#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
550#define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val)
551#define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
20094930 552
c6cdf436
MC
553#define tw32(reg, val) tp->write32(tp, reg, val)
554#define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0)
555#define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us))
556#define tr32(reg) tp->read32(tp, reg)
1da177e4
LT
557
558static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
559{
6892914f
MC
560 unsigned long flags;
561
6ff6f81d 562 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
b5d3772c
MC
563 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
564 return;
565
6892914f 566 spin_lock_irqsave(&tp->indirect_lock, flags);
63c3a66f 567 if (tg3_flag(tp, SRAM_USE_CONFIG)) {
bbadf503
MC
568 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
569 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
1da177e4 570
bbadf503
MC
571 /* Always leave this as zero. */
572 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
573 } else {
574 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
575 tw32_f(TG3PCI_MEM_WIN_DATA, val);
28fbef78 576
bbadf503
MC
577 /* Always leave this as zero. */
578 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
579 }
580 spin_unlock_irqrestore(&tp->indirect_lock, flags);
758a6139
DM
581}
582
1da177e4
LT
583static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
584{
6892914f
MC
585 unsigned long flags;
586
6ff6f81d 587 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
b5d3772c
MC
588 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
589 *val = 0;
590 return;
591 }
592
6892914f 593 spin_lock_irqsave(&tp->indirect_lock, flags);
63c3a66f 594 if (tg3_flag(tp, SRAM_USE_CONFIG)) {
bbadf503
MC
595 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
596 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
1da177e4 597
bbadf503
MC
598 /* Always leave this as zero. */
599 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
600 } else {
601 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
602 *val = tr32(TG3PCI_MEM_WIN_DATA);
603
604 /* Always leave this as zero. */
605 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
606 }
6892914f 607 spin_unlock_irqrestore(&tp->indirect_lock, flags);
1da177e4
LT
608}
609
0d3031d9
MC
610static void tg3_ape_lock_init(struct tg3 *tp)
611{
612 int i;
6f5c8f83 613 u32 regbase, bit;
f92d9dc1
MC
614
615 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
616 regbase = TG3_APE_LOCK_GRANT;
617 else
618 regbase = TG3_APE_PER_LOCK_GRANT;
0d3031d9
MC
619
620 /* Make sure the driver hasn't any stale locks. */
6f5c8f83
MC
621 for (i = 0; i < 8; i++) {
622 if (i == TG3_APE_LOCK_GPIO)
623 continue;
f92d9dc1 624 tg3_ape_write32(tp, regbase + 4 * i, APE_LOCK_GRANT_DRIVER);
6f5c8f83
MC
625 }
626
627 /* Clear the correct bit of the GPIO lock too. */
628 if (!tp->pci_fn)
629 bit = APE_LOCK_GRANT_DRIVER;
630 else
631 bit = 1 << tp->pci_fn;
632
633 tg3_ape_write32(tp, regbase + 4 * TG3_APE_LOCK_GPIO, bit);
0d3031d9
MC
634}
635
636static int tg3_ape_lock(struct tg3 *tp, int locknum)
637{
638 int i, off;
639 int ret = 0;
6f5c8f83 640 u32 status, req, gnt, bit;
0d3031d9 641
63c3a66f 642 if (!tg3_flag(tp, ENABLE_APE))
0d3031d9
MC
643 return 0;
644
645 switch (locknum) {
6f5c8f83
MC
646 case TG3_APE_LOCK_GPIO:
647 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
648 return 0;
33f401ae
MC
649 case TG3_APE_LOCK_GRC:
650 case TG3_APE_LOCK_MEM:
651 break;
652 default:
653 return -EINVAL;
0d3031d9
MC
654 }
655
f92d9dc1
MC
656 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
657 req = TG3_APE_LOCK_REQ;
658 gnt = TG3_APE_LOCK_GRANT;
659 } else {
660 req = TG3_APE_PER_LOCK_REQ;
661 gnt = TG3_APE_PER_LOCK_GRANT;
662 }
663
0d3031d9
MC
664 off = 4 * locknum;
665
6f5c8f83
MC
666 if (locknum != TG3_APE_LOCK_GPIO || !tp->pci_fn)
667 bit = APE_LOCK_REQ_DRIVER;
668 else
669 bit = 1 << tp->pci_fn;
670
671 tg3_ape_write32(tp, req + off, bit);
0d3031d9
MC
672
673 /* Wait for up to 1 millisecond to acquire lock. */
674 for (i = 0; i < 100; i++) {
f92d9dc1 675 status = tg3_ape_read32(tp, gnt + off);
6f5c8f83 676 if (status == bit)
0d3031d9
MC
677 break;
678 udelay(10);
679 }
680
6f5c8f83 681 if (status != bit) {
0d3031d9 682 /* Revoke the lock request. */
6f5c8f83 683 tg3_ape_write32(tp, gnt + off, bit);
0d3031d9
MC
684 ret = -EBUSY;
685 }
686
687 return ret;
688}
689
690static void tg3_ape_unlock(struct tg3 *tp, int locknum)
691{
6f5c8f83 692 u32 gnt, bit;
0d3031d9 693
63c3a66f 694 if (!tg3_flag(tp, ENABLE_APE))
0d3031d9
MC
695 return;
696
697 switch (locknum) {
6f5c8f83
MC
698 case TG3_APE_LOCK_GPIO:
699 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
700 return;
33f401ae
MC
701 case TG3_APE_LOCK_GRC:
702 case TG3_APE_LOCK_MEM:
703 break;
704 default:
705 return;
0d3031d9
MC
706 }
707
f92d9dc1
MC
708 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
709 gnt = TG3_APE_LOCK_GRANT;
710 else
711 gnt = TG3_APE_PER_LOCK_GRANT;
712
6f5c8f83
MC
713 if (locknum != TG3_APE_LOCK_GPIO || !tp->pci_fn)
714 bit = APE_LOCK_GRANT_DRIVER;
715 else
716 bit = 1 << tp->pci_fn;
717
718 tg3_ape_write32(tp, gnt + 4 * locknum, bit);
0d3031d9
MC
719}
720
1da177e4
LT
721static void tg3_disable_ints(struct tg3 *tp)
722{
89aeb3bc
MC
723 int i;
724
1da177e4
LT
725 tw32(TG3PCI_MISC_HOST_CTRL,
726 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
89aeb3bc
MC
727 for (i = 0; i < tp->irq_max; i++)
728 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
1da177e4
LT
729}
730
1da177e4
LT
731static void tg3_enable_ints(struct tg3 *tp)
732{
89aeb3bc 733 int i;
89aeb3bc 734
bbe832c0
MC
735 tp->irq_sync = 0;
736 wmb();
737
1da177e4
LT
738 tw32(TG3PCI_MISC_HOST_CTRL,
739 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
89aeb3bc 740
f89f38b8 741 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
89aeb3bc
MC
742 for (i = 0; i < tp->irq_cnt; i++) {
743 struct tg3_napi *tnapi = &tp->napi[i];
c6cdf436 744
898a56f8 745 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
63c3a66f 746 if (tg3_flag(tp, 1SHOT_MSI))
89aeb3bc 747 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
f19af9c2 748
f89f38b8 749 tp->coal_now |= tnapi->coal_now;
89aeb3bc 750 }
f19af9c2
MC
751
752 /* Force an initial interrupt */
63c3a66f 753 if (!tg3_flag(tp, TAGGED_STATUS) &&
f19af9c2
MC
754 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
755 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
756 else
f89f38b8
MC
757 tw32(HOSTCC_MODE, tp->coal_now);
758
759 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1da177e4
LT
760}
761
17375d25 762static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
04237ddd 763{
17375d25 764 struct tg3 *tp = tnapi->tp;
898a56f8 765 struct tg3_hw_status *sblk = tnapi->hw_status;
04237ddd
MC
766 unsigned int work_exists = 0;
767
768 /* check for phy events */
63c3a66f 769 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
04237ddd
MC
770 if (sblk->status & SD_STATUS_LINK_CHG)
771 work_exists = 1;
772 }
773 /* check for RX/TX work to do */
f3f3f27e 774 if (sblk->idx[0].tx_consumer != tnapi->tx_cons ||
8d9d7cfc 775 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
04237ddd
MC
776 work_exists = 1;
777
778 return work_exists;
779}
780
17375d25 781/* tg3_int_reenable
04237ddd
MC
782 * similar to tg3_enable_ints, but it accurately determines whether there
783 * is new work pending and can return without flushing the PIO write
6aa20a22 784 * which reenables interrupts
1da177e4 785 */
17375d25 786static void tg3_int_reenable(struct tg3_napi *tnapi)
1da177e4 787{
17375d25
MC
788 struct tg3 *tp = tnapi->tp;
789
898a56f8 790 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1da177e4
LT
791 mmiowb();
792
fac9b83e
DM
793 /* When doing tagged status, this work check is unnecessary.
794 * The last_tag we write above tells the chip which piece of
795 * work we've completed.
796 */
63c3a66f 797 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
04237ddd 798 tw32(HOSTCC_MODE, tp->coalesce_mode |
fd2ce37f 799 HOSTCC_MODE_ENABLE | tnapi->coal_now);
1da177e4
LT
800}
801
1da177e4
LT
802static void tg3_switch_clocks(struct tg3 *tp)
803{
f6eb9b1f 804 u32 clock_ctrl;
1da177e4
LT
805 u32 orig_clock_ctrl;
806
63c3a66f 807 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
4cf78e4f
MC
808 return;
809
f6eb9b1f
MC
810 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
811
1da177e4
LT
812 orig_clock_ctrl = clock_ctrl;
813 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
814 CLOCK_CTRL_CLKRUN_OENABLE |
815 0x1f);
816 tp->pci_clock_ctrl = clock_ctrl;
817
63c3a66f 818 if (tg3_flag(tp, 5705_PLUS)) {
1da177e4 819 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
b401e9e2
MC
820 tw32_wait_f(TG3PCI_CLOCK_CTRL,
821 clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1da177e4
LT
822 }
823 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
b401e9e2
MC
824 tw32_wait_f(TG3PCI_CLOCK_CTRL,
825 clock_ctrl |
826 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
827 40);
828 tw32_wait_f(TG3PCI_CLOCK_CTRL,
829 clock_ctrl | (CLOCK_CTRL_ALTCLK),
830 40);
1da177e4 831 }
b401e9e2 832 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1da177e4
LT
833}
834
835#define PHY_BUSY_LOOPS 5000
836
837static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
838{
839 u32 frame_val;
840 unsigned int loops;
841 int ret;
842
843 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
844 tw32_f(MAC_MI_MODE,
845 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
846 udelay(80);
847 }
848
849 *val = 0x0;
850
882e9793 851 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1da177e4
LT
852 MI_COM_PHY_ADDR_MASK);
853 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
854 MI_COM_REG_ADDR_MASK);
855 frame_val |= (MI_COM_CMD_READ | MI_COM_START);
6aa20a22 856
1da177e4
LT
857 tw32_f(MAC_MI_COM, frame_val);
858
859 loops = PHY_BUSY_LOOPS;
860 while (loops != 0) {
861 udelay(10);
862 frame_val = tr32(MAC_MI_COM);
863
864 if ((frame_val & MI_COM_BUSY) == 0) {
865 udelay(5);
866 frame_val = tr32(MAC_MI_COM);
867 break;
868 }
869 loops -= 1;
870 }
871
872 ret = -EBUSY;
873 if (loops != 0) {
874 *val = frame_val & MI_COM_DATA_MASK;
875 ret = 0;
876 }
877
878 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
879 tw32_f(MAC_MI_MODE, tp->mi_mode);
880 udelay(80);
881 }
882
883 return ret;
884}
885
886static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
887{
888 u32 frame_val;
889 unsigned int loops;
890 int ret;
891
f07e9af3 892 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
221c5637 893 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
b5d3772c
MC
894 return 0;
895
1da177e4
LT
896 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
897 tw32_f(MAC_MI_MODE,
898 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
899 udelay(80);
900 }
901
882e9793 902 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1da177e4
LT
903 MI_COM_PHY_ADDR_MASK);
904 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
905 MI_COM_REG_ADDR_MASK);
906 frame_val |= (val & MI_COM_DATA_MASK);
907 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
6aa20a22 908
1da177e4
LT
909 tw32_f(MAC_MI_COM, frame_val);
910
911 loops = PHY_BUSY_LOOPS;
912 while (loops != 0) {
913 udelay(10);
914 frame_val = tr32(MAC_MI_COM);
915 if ((frame_val & MI_COM_BUSY) == 0) {
916 udelay(5);
917 frame_val = tr32(MAC_MI_COM);
918 break;
919 }
920 loops -= 1;
921 }
922
923 ret = -EBUSY;
924 if (loops != 0)
925 ret = 0;
926
927 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
928 tw32_f(MAC_MI_MODE, tp->mi_mode);
929 udelay(80);
930 }
931
932 return ret;
933}
934
b0988c15
MC
935static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
936{
937 int err;
938
939 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
940 if (err)
941 goto done;
942
943 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
944 if (err)
945 goto done;
946
947 err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
948 MII_TG3_MMD_CTRL_DATA_NOINC | devad);
949 if (err)
950 goto done;
951
952 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
953
954done:
955 return err;
956}
957
958static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
959{
960 int err;
961
962 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
963 if (err)
964 goto done;
965
966 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
967 if (err)
968 goto done;
969
970 err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
971 MII_TG3_MMD_CTRL_DATA_NOINC | devad);
972 if (err)
973 goto done;
974
975 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
976
977done:
978 return err;
979}
980
981static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
982{
983 int err;
984
985 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
986 if (!err)
987 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
988
989 return err;
990}
991
992static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
993{
994 int err;
995
996 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
997 if (!err)
998 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
999
1000 return err;
1001}
1002
15ee95c3
MC
1003static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1004{
1005 int err;
1006
1007 err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1008 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1009 MII_TG3_AUXCTL_SHDWSEL_MISC);
1010 if (!err)
1011 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1012
1013 return err;
1014}
1015
b4bd2929
MC
1016static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1017{
1018 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1019 set |= MII_TG3_AUXCTL_MISC_WREN;
1020
1021 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1022}
1023
1d36ba45
MC
1024#define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \
1025 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1026 MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \
1027 MII_TG3_AUXCTL_ACTL_TX_6DB)
1028
1029#define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \
1030 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1031 MII_TG3_AUXCTL_ACTL_TX_6DB);
1032
95e2869a
MC
1033static int tg3_bmcr_reset(struct tg3 *tp)
1034{
1035 u32 phy_control;
1036 int limit, err;
1037
1038 /* OK, reset it, and poll the BMCR_RESET bit until it
1039 * clears or we time out.
1040 */
1041 phy_control = BMCR_RESET;
1042 err = tg3_writephy(tp, MII_BMCR, phy_control);
1043 if (err != 0)
1044 return -EBUSY;
1045
1046 limit = 5000;
1047 while (limit--) {
1048 err = tg3_readphy(tp, MII_BMCR, &phy_control);
1049 if (err != 0)
1050 return -EBUSY;
1051
1052 if ((phy_control & BMCR_RESET) == 0) {
1053 udelay(40);
1054 break;
1055 }
1056 udelay(10);
1057 }
d4675b52 1058 if (limit < 0)
95e2869a
MC
1059 return -EBUSY;
1060
1061 return 0;
1062}
1063
158d7abd
MC
1064static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1065{
3d16543d 1066 struct tg3 *tp = bp->priv;
158d7abd
MC
1067 u32 val;
1068
24bb4fb6 1069 spin_lock_bh(&tp->lock);
158d7abd
MC
1070
1071 if (tg3_readphy(tp, reg, &val))
24bb4fb6
MC
1072 val = -EIO;
1073
1074 spin_unlock_bh(&tp->lock);
158d7abd
MC
1075
1076 return val;
1077}
1078
1079static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1080{
3d16543d 1081 struct tg3 *tp = bp->priv;
24bb4fb6 1082 u32 ret = 0;
158d7abd 1083
24bb4fb6 1084 spin_lock_bh(&tp->lock);
158d7abd
MC
1085
1086 if (tg3_writephy(tp, reg, val))
24bb4fb6 1087 ret = -EIO;
158d7abd 1088
24bb4fb6
MC
1089 spin_unlock_bh(&tp->lock);
1090
1091 return ret;
158d7abd
MC
1092}
1093
1094static int tg3_mdio_reset(struct mii_bus *bp)
1095{
1096 return 0;
1097}
1098
9c61d6bc 1099static void tg3_mdio_config_5785(struct tg3 *tp)
a9daf367
MC
1100{
1101 u32 val;
fcb389df 1102 struct phy_device *phydev;
a9daf367 1103
3f0e3ad7 1104 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
fcb389df 1105 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
6a443a0f
MC
1106 case PHY_ID_BCM50610:
1107 case PHY_ID_BCM50610M:
fcb389df
MC
1108 val = MAC_PHYCFG2_50610_LED_MODES;
1109 break;
6a443a0f 1110 case PHY_ID_BCMAC131:
fcb389df
MC
1111 val = MAC_PHYCFG2_AC131_LED_MODES;
1112 break;
6a443a0f 1113 case PHY_ID_RTL8211C:
fcb389df
MC
1114 val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1115 break;
6a443a0f 1116 case PHY_ID_RTL8201E:
fcb389df
MC
1117 val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1118 break;
1119 default:
a9daf367 1120 return;
fcb389df
MC
1121 }
1122
1123 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1124 tw32(MAC_PHYCFG2, val);
1125
1126 val = tr32(MAC_PHYCFG1);
bb85fbb6
MC
1127 val &= ~(MAC_PHYCFG1_RGMII_INT |
1128 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1129 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
fcb389df
MC
1130 tw32(MAC_PHYCFG1, val);
1131
1132 return;
1133 }
1134
63c3a66f 1135 if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
fcb389df
MC
1136 val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1137 MAC_PHYCFG2_FMODE_MASK_MASK |
1138 MAC_PHYCFG2_GMODE_MASK_MASK |
1139 MAC_PHYCFG2_ACT_MASK_MASK |
1140 MAC_PHYCFG2_QUAL_MASK_MASK |
1141 MAC_PHYCFG2_INBAND_ENABLE;
1142
1143 tw32(MAC_PHYCFG2, val);
a9daf367 1144
bb85fbb6
MC
1145 val = tr32(MAC_PHYCFG1);
1146 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1147 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
63c3a66f
JP
1148 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1149 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
a9daf367 1150 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
63c3a66f 1151 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
a9daf367
MC
1152 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1153 }
bb85fbb6
MC
1154 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1155 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1156 tw32(MAC_PHYCFG1, val);
a9daf367 1157
a9daf367
MC
1158 val = tr32(MAC_EXT_RGMII_MODE);
1159 val &= ~(MAC_RGMII_MODE_RX_INT_B |
1160 MAC_RGMII_MODE_RX_QUALITY |
1161 MAC_RGMII_MODE_RX_ACTIVITY |
1162 MAC_RGMII_MODE_RX_ENG_DET |
1163 MAC_RGMII_MODE_TX_ENABLE |
1164 MAC_RGMII_MODE_TX_LOWPWR |
1165 MAC_RGMII_MODE_TX_RESET);
63c3a66f
JP
1166 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1167 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
a9daf367
MC
1168 val |= MAC_RGMII_MODE_RX_INT_B |
1169 MAC_RGMII_MODE_RX_QUALITY |
1170 MAC_RGMII_MODE_RX_ACTIVITY |
1171 MAC_RGMII_MODE_RX_ENG_DET;
63c3a66f 1172 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
a9daf367
MC
1173 val |= MAC_RGMII_MODE_TX_ENABLE |
1174 MAC_RGMII_MODE_TX_LOWPWR |
1175 MAC_RGMII_MODE_TX_RESET;
1176 }
1177 tw32(MAC_EXT_RGMII_MODE, val);
1178}
1179
158d7abd
MC
1180static void tg3_mdio_start(struct tg3 *tp)
1181{
158d7abd
MC
1182 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1183 tw32_f(MAC_MI_MODE, tp->mi_mode);
1184 udelay(80);
a9daf367 1185
63c3a66f 1186 if (tg3_flag(tp, MDIOBUS_INITED) &&
9ea4818d
MC
1187 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1188 tg3_mdio_config_5785(tp);
1189}
1190
1191static int tg3_mdio_init(struct tg3 *tp)
1192{
1193 int i;
1194 u32 reg;
1195 struct phy_device *phydev;
1196
63c3a66f 1197 if (tg3_flag(tp, 5717_PLUS)) {
9c7df915 1198 u32 is_serdes;
882e9793 1199
69f11c99 1200 tp->phy_addr = tp->pci_fn + 1;
882e9793 1201
d1ec96af
MC
1202 if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0)
1203 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1204 else
1205 is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1206 TG3_CPMU_PHY_STRAP_IS_SERDES;
882e9793
MC
1207 if (is_serdes)
1208 tp->phy_addr += 7;
1209 } else
3f0e3ad7 1210 tp->phy_addr = TG3_PHY_MII_ADDR;
882e9793 1211
158d7abd
MC
1212 tg3_mdio_start(tp);
1213
63c3a66f 1214 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
158d7abd
MC
1215 return 0;
1216
298cf9be
LB
1217 tp->mdio_bus = mdiobus_alloc();
1218 if (tp->mdio_bus == NULL)
1219 return -ENOMEM;
158d7abd 1220
298cf9be
LB
1221 tp->mdio_bus->name = "tg3 mdio bus";
1222 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
158d7abd 1223 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
298cf9be
LB
1224 tp->mdio_bus->priv = tp;
1225 tp->mdio_bus->parent = &tp->pdev->dev;
1226 tp->mdio_bus->read = &tg3_mdio_read;
1227 tp->mdio_bus->write = &tg3_mdio_write;
1228 tp->mdio_bus->reset = &tg3_mdio_reset;
3f0e3ad7 1229 tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
298cf9be 1230 tp->mdio_bus->irq = &tp->mdio_irq[0];
158d7abd
MC
1231
1232 for (i = 0; i < PHY_MAX_ADDR; i++)
298cf9be 1233 tp->mdio_bus->irq[i] = PHY_POLL;
158d7abd
MC
1234
1235 /* The bus registration will look for all the PHYs on the mdio bus.
1236 * Unfortunately, it does not ensure the PHY is powered up before
1237 * accessing the PHY ID registers. A chip reset is the
1238 * quickest way to bring the device back to an operational state..
1239 */
1240 if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1241 tg3_bmcr_reset(tp);
1242
298cf9be 1243 i = mdiobus_register(tp->mdio_bus);
a9daf367 1244 if (i) {
ab96b241 1245 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
9c61d6bc 1246 mdiobus_free(tp->mdio_bus);
a9daf367
MC
1247 return i;
1248 }
158d7abd 1249
3f0e3ad7 1250 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
a9daf367 1251
9c61d6bc 1252 if (!phydev || !phydev->drv) {
ab96b241 1253 dev_warn(&tp->pdev->dev, "No PHY devices\n");
9c61d6bc
MC
1254 mdiobus_unregister(tp->mdio_bus);
1255 mdiobus_free(tp->mdio_bus);
1256 return -ENODEV;
1257 }
1258
1259 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
6a443a0f 1260 case PHY_ID_BCM57780:
321d32a0 1261 phydev->interface = PHY_INTERFACE_MODE_GMII;
c704dc23 1262 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
321d32a0 1263 break;
6a443a0f
MC
1264 case PHY_ID_BCM50610:
1265 case PHY_ID_BCM50610M:
32e5a8d6 1266 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
c704dc23 1267 PHY_BRCM_RX_REFCLK_UNUSED |
52fae083 1268 PHY_BRCM_DIS_TXCRXC_NOENRGY |
c704dc23 1269 PHY_BRCM_AUTO_PWRDWN_ENABLE;
63c3a66f 1270 if (tg3_flag(tp, RGMII_INBAND_DISABLE))
a9daf367 1271 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
63c3a66f 1272 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
a9daf367 1273 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
63c3a66f 1274 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
a9daf367 1275 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
fcb389df 1276 /* fallthru */
6a443a0f 1277 case PHY_ID_RTL8211C:
fcb389df 1278 phydev->interface = PHY_INTERFACE_MODE_RGMII;
a9daf367 1279 break;
6a443a0f
MC
1280 case PHY_ID_RTL8201E:
1281 case PHY_ID_BCMAC131:
a9daf367 1282 phydev->interface = PHY_INTERFACE_MODE_MII;
cdd4e09d 1283 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
f07e9af3 1284 tp->phy_flags |= TG3_PHYFLG_IS_FET;
a9daf367
MC
1285 break;
1286 }
1287
63c3a66f 1288 tg3_flag_set(tp, MDIOBUS_INITED);
9c61d6bc
MC
1289
1290 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1291 tg3_mdio_config_5785(tp);
a9daf367
MC
1292
1293 return 0;
158d7abd
MC
1294}
1295
1296static void tg3_mdio_fini(struct tg3 *tp)
1297{
63c3a66f
JP
1298 if (tg3_flag(tp, MDIOBUS_INITED)) {
1299 tg3_flag_clear(tp, MDIOBUS_INITED);
298cf9be
LB
1300 mdiobus_unregister(tp->mdio_bus);
1301 mdiobus_free(tp->mdio_bus);
158d7abd
MC
1302 }
1303}
1304
4ba526ce
MC
1305/* tp->lock is held. */
1306static inline void tg3_generate_fw_event(struct tg3 *tp)
1307{
1308 u32 val;
1309
1310 val = tr32(GRC_RX_CPU_EVENT);
1311 val |= GRC_RX_CPU_DRIVER_EVENT;
1312 tw32_f(GRC_RX_CPU_EVENT, val);
1313
1314 tp->last_event_jiffies = jiffies;
1315}
1316
1317#define TG3_FW_EVENT_TIMEOUT_USEC 2500
1318
95e2869a
MC
1319/* tp->lock is held. */
1320static void tg3_wait_for_event_ack(struct tg3 *tp)
1321{
1322 int i;
4ba526ce
MC
1323 unsigned int delay_cnt;
1324 long time_remain;
1325
1326 /* If enough time has passed, no wait is necessary. */
1327 time_remain = (long)(tp->last_event_jiffies + 1 +
1328 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1329 (long)jiffies;
1330 if (time_remain < 0)
1331 return;
1332
1333 /* Check if we can shorten the wait time. */
1334 delay_cnt = jiffies_to_usecs(time_remain);
1335 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1336 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1337 delay_cnt = (delay_cnt >> 3) + 1;
95e2869a 1338
4ba526ce 1339 for (i = 0; i < delay_cnt; i++) {
95e2869a
MC
1340 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1341 break;
4ba526ce 1342 udelay(8);
95e2869a
MC
1343 }
1344}
1345
1346/* tp->lock is held. */
1347static void tg3_ump_link_report(struct tg3 *tp)
1348{
1349 u32 reg;
1350 u32 val;
1351
63c3a66f 1352 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
95e2869a
MC
1353 return;
1354
1355 tg3_wait_for_event_ack(tp);
1356
1357 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1358
1359 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1360
1361 val = 0;
1362 if (!tg3_readphy(tp, MII_BMCR, &reg))
1363 val = reg << 16;
1364 if (!tg3_readphy(tp, MII_BMSR, &reg))
1365 val |= (reg & 0xffff);
1366 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, val);
1367
1368 val = 0;
1369 if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1370 val = reg << 16;
1371 if (!tg3_readphy(tp, MII_LPA, &reg))
1372 val |= (reg & 0xffff);
1373 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 4, val);
1374
1375 val = 0;
f07e9af3 1376 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
95e2869a
MC
1377 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1378 val = reg << 16;
1379 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1380 val |= (reg & 0xffff);
1381 }
1382 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 8, val);
1383
1384 if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1385 val = reg << 16;
1386 else
1387 val = 0;
1388 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 12, val);
1389
4ba526ce 1390 tg3_generate_fw_event(tp);
95e2869a
MC
1391}
1392
1393static void tg3_link_report(struct tg3 *tp)
1394{
1395 if (!netif_carrier_ok(tp->dev)) {
05dbe005 1396 netif_info(tp, link, tp->dev, "Link is down\n");
95e2869a
MC
1397 tg3_ump_link_report(tp);
1398 } else if (netif_msg_link(tp)) {
05dbe005
JP
1399 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1400 (tp->link_config.active_speed == SPEED_1000 ?
1401 1000 :
1402 (tp->link_config.active_speed == SPEED_100 ?
1403 100 : 10)),
1404 (tp->link_config.active_duplex == DUPLEX_FULL ?
1405 "full" : "half"));
1406
1407 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1408 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1409 "on" : "off",
1410 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1411 "on" : "off");
47007831
MC
1412
1413 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1414 netdev_info(tp->dev, "EEE is %s\n",
1415 tp->setlpicnt ? "enabled" : "disabled");
1416
95e2869a
MC
1417 tg3_ump_link_report(tp);
1418 }
1419}
1420
1421static u16 tg3_advert_flowctrl_1000T(u8 flow_ctrl)
1422{
1423 u16 miireg;
1424
e18ce346 1425 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
95e2869a 1426 miireg = ADVERTISE_PAUSE_CAP;
e18ce346 1427 else if (flow_ctrl & FLOW_CTRL_TX)
95e2869a 1428 miireg = ADVERTISE_PAUSE_ASYM;
e18ce346 1429 else if (flow_ctrl & FLOW_CTRL_RX)
95e2869a
MC
1430 miireg = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
1431 else
1432 miireg = 0;
1433
1434 return miireg;
1435}
1436
1437static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1438{
1439 u16 miireg;
1440
e18ce346 1441 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
95e2869a 1442 miireg = ADVERTISE_1000XPAUSE;
e18ce346 1443 else if (flow_ctrl & FLOW_CTRL_TX)
95e2869a 1444 miireg = ADVERTISE_1000XPSE_ASYM;
e18ce346 1445 else if (flow_ctrl & FLOW_CTRL_RX)
95e2869a
MC
1446 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1447 else
1448 miireg = 0;
1449
1450 return miireg;
1451}
1452
95e2869a
MC
1453static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1454{
1455 u8 cap = 0;
1456
1457 if (lcladv & ADVERTISE_1000XPAUSE) {
1458 if (lcladv & ADVERTISE_1000XPSE_ASYM) {
1459 if (rmtadv & LPA_1000XPAUSE)
e18ce346 1460 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
95e2869a 1461 else if (rmtadv & LPA_1000XPAUSE_ASYM)
e18ce346 1462 cap = FLOW_CTRL_RX;
95e2869a
MC
1463 } else {
1464 if (rmtadv & LPA_1000XPAUSE)
e18ce346 1465 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
95e2869a
MC
1466 }
1467 } else if (lcladv & ADVERTISE_1000XPSE_ASYM) {
1468 if ((rmtadv & LPA_1000XPAUSE) && (rmtadv & LPA_1000XPAUSE_ASYM))
e18ce346 1469 cap = FLOW_CTRL_TX;
95e2869a
MC
1470 }
1471
1472 return cap;
1473}
1474
f51f3562 1475static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
95e2869a 1476{
b02fd9e3 1477 u8 autoneg;
f51f3562 1478 u8 flowctrl = 0;
95e2869a
MC
1479 u32 old_rx_mode = tp->rx_mode;
1480 u32 old_tx_mode = tp->tx_mode;
1481
63c3a66f 1482 if (tg3_flag(tp, USE_PHYLIB))
3f0e3ad7 1483 autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
b02fd9e3
MC
1484 else
1485 autoneg = tp->link_config.autoneg;
1486
63c3a66f 1487 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
f07e9af3 1488 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
f51f3562 1489 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
95e2869a 1490 else
bc02ff95 1491 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
f51f3562
MC
1492 } else
1493 flowctrl = tp->link_config.flowctrl;
95e2869a 1494
f51f3562 1495 tp->link_config.active_flowctrl = flowctrl;
95e2869a 1496
e18ce346 1497 if (flowctrl & FLOW_CTRL_RX)
95e2869a
MC
1498 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1499 else
1500 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1501
f51f3562 1502 if (old_rx_mode != tp->rx_mode)
95e2869a 1503 tw32_f(MAC_RX_MODE, tp->rx_mode);
95e2869a 1504
e18ce346 1505 if (flowctrl & FLOW_CTRL_TX)
95e2869a
MC
1506 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1507 else
1508 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1509
f51f3562 1510 if (old_tx_mode != tp->tx_mode)
95e2869a 1511 tw32_f(MAC_TX_MODE, tp->tx_mode);
95e2869a
MC
1512}
1513
b02fd9e3
MC
1514static void tg3_adjust_link(struct net_device *dev)
1515{
1516 u8 oldflowctrl, linkmesg = 0;
1517 u32 mac_mode, lcl_adv, rmt_adv;
1518 struct tg3 *tp = netdev_priv(dev);
3f0e3ad7 1519 struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
b02fd9e3 1520
24bb4fb6 1521 spin_lock_bh(&tp->lock);
b02fd9e3
MC
1522
1523 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
1524 MAC_MODE_HALF_DUPLEX);
1525
1526 oldflowctrl = tp->link_config.active_flowctrl;
1527
1528 if (phydev->link) {
1529 lcl_adv = 0;
1530 rmt_adv = 0;
1531
1532 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
1533 mac_mode |= MAC_MODE_PORT_MODE_MII;
c3df0748
MC
1534 else if (phydev->speed == SPEED_1000 ||
1535 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785)
b02fd9e3 1536 mac_mode |= MAC_MODE_PORT_MODE_GMII;
c3df0748
MC
1537 else
1538 mac_mode |= MAC_MODE_PORT_MODE_MII;
b02fd9e3
MC
1539
1540 if (phydev->duplex == DUPLEX_HALF)
1541 mac_mode |= MAC_MODE_HALF_DUPLEX;
1542 else {
1543 lcl_adv = tg3_advert_flowctrl_1000T(
1544 tp->link_config.flowctrl);
1545
1546 if (phydev->pause)
1547 rmt_adv = LPA_PAUSE_CAP;
1548 if (phydev->asym_pause)
1549 rmt_adv |= LPA_PAUSE_ASYM;
1550 }
1551
1552 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1553 } else
1554 mac_mode |= MAC_MODE_PORT_MODE_GMII;
1555
1556 if (mac_mode != tp->mac_mode) {
1557 tp->mac_mode = mac_mode;
1558 tw32_f(MAC_MODE, tp->mac_mode);
1559 udelay(40);
1560 }
1561
fcb389df
MC
1562 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
1563 if (phydev->speed == SPEED_10)
1564 tw32(MAC_MI_STAT,
1565 MAC_MI_STAT_10MBPS_MODE |
1566 MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1567 else
1568 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1569 }
1570
b02fd9e3
MC
1571 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
1572 tw32(MAC_TX_LENGTHS,
1573 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1574 (6 << TX_LENGTHS_IPG_SHIFT) |
1575 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
1576 else
1577 tw32(MAC_TX_LENGTHS,
1578 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1579 (6 << TX_LENGTHS_IPG_SHIFT) |
1580 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
1581
1582 if ((phydev->link && tp->link_config.active_speed == SPEED_INVALID) ||
1583 (!phydev->link && tp->link_config.active_speed != SPEED_INVALID) ||
1584 phydev->speed != tp->link_config.active_speed ||
1585 phydev->duplex != tp->link_config.active_duplex ||
1586 oldflowctrl != tp->link_config.active_flowctrl)
c6cdf436 1587 linkmesg = 1;
b02fd9e3
MC
1588
1589 tp->link_config.active_speed = phydev->speed;
1590 tp->link_config.active_duplex = phydev->duplex;
1591
24bb4fb6 1592 spin_unlock_bh(&tp->lock);
b02fd9e3
MC
1593
1594 if (linkmesg)
1595 tg3_link_report(tp);
1596}
1597
1598static int tg3_phy_init(struct tg3 *tp)
1599{
1600 struct phy_device *phydev;
1601
f07e9af3 1602 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
b02fd9e3
MC
1603 return 0;
1604
1605 /* Bring the PHY back to a known state. */
1606 tg3_bmcr_reset(tp);
1607
3f0e3ad7 1608 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
b02fd9e3
MC
1609
1610 /* Attach the MAC to the PHY. */
fb28ad35 1611 phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link,
a9daf367 1612 phydev->dev_flags, phydev->interface);
b02fd9e3 1613 if (IS_ERR(phydev)) {
ab96b241 1614 dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
b02fd9e3
MC
1615 return PTR_ERR(phydev);
1616 }
1617
b02fd9e3 1618 /* Mask with MAC supported features. */
9c61d6bc
MC
1619 switch (phydev->interface) {
1620 case PHY_INTERFACE_MODE_GMII:
1621 case PHY_INTERFACE_MODE_RGMII:
f07e9af3 1622 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
321d32a0
MC
1623 phydev->supported &= (PHY_GBIT_FEATURES |
1624 SUPPORTED_Pause |
1625 SUPPORTED_Asym_Pause);
1626 break;
1627 }
1628 /* fallthru */
9c61d6bc
MC
1629 case PHY_INTERFACE_MODE_MII:
1630 phydev->supported &= (PHY_BASIC_FEATURES |
1631 SUPPORTED_Pause |
1632 SUPPORTED_Asym_Pause);
1633 break;
1634 default:
3f0e3ad7 1635 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
9c61d6bc
MC
1636 return -EINVAL;
1637 }
1638
f07e9af3 1639 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
b02fd9e3
MC
1640
1641 phydev->advertising = phydev->supported;
1642
b02fd9e3
MC
1643 return 0;
1644}
1645
1646static void tg3_phy_start(struct tg3 *tp)
1647{
1648 struct phy_device *phydev;
1649
f07e9af3 1650 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
b02fd9e3
MC
1651 return;
1652
3f0e3ad7 1653 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
b02fd9e3 1654
80096068
MC
1655 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
1656 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
b02fd9e3
MC
1657 phydev->speed = tp->link_config.orig_speed;
1658 phydev->duplex = tp->link_config.orig_duplex;
1659 phydev->autoneg = tp->link_config.orig_autoneg;
1660 phydev->advertising = tp->link_config.orig_advertising;
1661 }
1662
1663 phy_start(phydev);
1664
1665 phy_start_aneg(phydev);
1666}
1667
1668static void tg3_phy_stop(struct tg3 *tp)
1669{
f07e9af3 1670 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
b02fd9e3
MC
1671 return;
1672
3f0e3ad7 1673 phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
b02fd9e3
MC
1674}
1675
1676static void tg3_phy_fini(struct tg3 *tp)
1677{
f07e9af3 1678 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
3f0e3ad7 1679 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
f07e9af3 1680 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
b02fd9e3
MC
1681 }
1682}
1683
941ec90f
MC
1684static int tg3_phy_set_extloopbk(struct tg3 *tp)
1685{
1686 int err;
1687 u32 val;
1688
1689 if (tp->phy_flags & TG3_PHYFLG_IS_FET)
1690 return 0;
1691
1692 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
1693 /* Cannot do read-modify-write on 5401 */
1694 err = tg3_phy_auxctl_write(tp,
1695 MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1696 MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
1697 0x4c20);
1698 goto done;
1699 }
1700
1701 err = tg3_phy_auxctl_read(tp,
1702 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1703 if (err)
1704 return err;
1705
1706 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
1707 err = tg3_phy_auxctl_write(tp,
1708 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
1709
1710done:
1711 return err;
1712}
1713
7f97a4bd
MC
1714static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
1715{
1716 u32 phytest;
1717
1718 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
1719 u32 phy;
1720
1721 tg3_writephy(tp, MII_TG3_FET_TEST,
1722 phytest | MII_TG3_FET_SHADOW_EN);
1723 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
1724 if (enable)
1725 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
1726 else
1727 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
1728 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
1729 }
1730 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
1731 }
1732}
1733
6833c043
MC
1734static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
1735{
1736 u32 reg;
1737
63c3a66f
JP
1738 if (!tg3_flag(tp, 5705_PLUS) ||
1739 (tg3_flag(tp, 5717_PLUS) &&
f07e9af3 1740 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
6833c043
MC
1741 return;
1742
f07e9af3 1743 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
7f97a4bd
MC
1744 tg3_phy_fet_toggle_apd(tp, enable);
1745 return;
1746 }
1747
6833c043
MC
1748 reg = MII_TG3_MISC_SHDW_WREN |
1749 MII_TG3_MISC_SHDW_SCR5_SEL |
1750 MII_TG3_MISC_SHDW_SCR5_LPED |
1751 MII_TG3_MISC_SHDW_SCR5_DLPTLM |
1752 MII_TG3_MISC_SHDW_SCR5_SDTL |
1753 MII_TG3_MISC_SHDW_SCR5_C125OE;
1754 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable)
1755 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
1756
1757 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
1758
1759
1760 reg = MII_TG3_MISC_SHDW_WREN |
1761 MII_TG3_MISC_SHDW_APD_SEL |
1762 MII_TG3_MISC_SHDW_APD_WKTM_84MS;
1763 if (enable)
1764 reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
1765
1766 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
1767}
1768
9ef8ca99
MC
1769static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
1770{
1771 u32 phy;
1772
63c3a66f 1773 if (!tg3_flag(tp, 5705_PLUS) ||
f07e9af3 1774 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
9ef8ca99
MC
1775 return;
1776
f07e9af3 1777 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
9ef8ca99
MC
1778 u32 ephy;
1779
535ef6e1
MC
1780 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
1781 u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
1782
1783 tg3_writephy(tp, MII_TG3_FET_TEST,
1784 ephy | MII_TG3_FET_SHADOW_EN);
1785 if (!tg3_readphy(tp, reg, &phy)) {
9ef8ca99 1786 if (enable)
535ef6e1 1787 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
9ef8ca99 1788 else
535ef6e1
MC
1789 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
1790 tg3_writephy(tp, reg, phy);
9ef8ca99 1791 }
535ef6e1 1792 tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
9ef8ca99
MC
1793 }
1794 } else {
15ee95c3
MC
1795 int ret;
1796
1797 ret = tg3_phy_auxctl_read(tp,
1798 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
1799 if (!ret) {
9ef8ca99
MC
1800 if (enable)
1801 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
1802 else
1803 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
b4bd2929
MC
1804 tg3_phy_auxctl_write(tp,
1805 MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
9ef8ca99
MC
1806 }
1807 }
1808}
1809
1da177e4
LT
1810static void tg3_phy_set_wirespeed(struct tg3 *tp)
1811{
15ee95c3 1812 int ret;
1da177e4
LT
1813 u32 val;
1814
f07e9af3 1815 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
1da177e4
LT
1816 return;
1817
15ee95c3
MC
1818 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
1819 if (!ret)
b4bd2929
MC
1820 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
1821 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
1da177e4
LT
1822}
1823
b2a5c19c
MC
1824static void tg3_phy_apply_otp(struct tg3 *tp)
1825{
1826 u32 otp, phy;
1827
1828 if (!tp->phy_otp)
1829 return;
1830
1831 otp = tp->phy_otp;
1832
1d36ba45
MC
1833 if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp))
1834 return;
b2a5c19c
MC
1835
1836 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
1837 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
1838 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
1839
1840 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
1841 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
1842 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
1843
1844 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
1845 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
1846 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
1847
1848 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
1849 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
1850
1851 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
1852 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
1853
1854 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
1855 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
1856 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
1857
1d36ba45 1858 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
b2a5c19c
MC
1859}
1860
52b02d04
MC
1861static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
1862{
1863 u32 val;
1864
1865 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
1866 return;
1867
1868 tp->setlpicnt = 0;
1869
1870 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
1871 current_link_up == 1 &&
a6b68dab
MC
1872 tp->link_config.active_duplex == DUPLEX_FULL &&
1873 (tp->link_config.active_speed == SPEED_100 ||
1874 tp->link_config.active_speed == SPEED_1000)) {
52b02d04
MC
1875 u32 eeectl;
1876
1877 if (tp->link_config.active_speed == SPEED_1000)
1878 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
1879 else
1880 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
1881
1882 tw32(TG3_CPMU_EEE_CTRL, eeectl);
1883
3110f5f5
MC
1884 tg3_phy_cl45_read(tp, MDIO_MMD_AN,
1885 TG3_CL45_D7_EEERES_STAT, &val);
52b02d04 1886
b0c5943f
MC
1887 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
1888 val == TG3_CL45_D7_EEERES_STAT_LP_100TX)
52b02d04
MC
1889 tp->setlpicnt = 2;
1890 }
1891
1892 if (!tp->setlpicnt) {
b715ce94
MC
1893 if (current_link_up == 1 &&
1894 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
1895 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
1896 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
1897 }
1898
52b02d04
MC
1899 val = tr32(TG3_CPMU_EEE_MODE);
1900 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
1901 }
1902}
1903
b0c5943f
MC
1904static void tg3_phy_eee_enable(struct tg3 *tp)
1905{
1906 u32 val;
1907
1908 if (tp->link_config.active_speed == SPEED_1000 &&
1909 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
1910 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
1911 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) &&
1912 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
b715ce94
MC
1913 val = MII_TG3_DSP_TAP26_ALNOKO |
1914 MII_TG3_DSP_TAP26_RMRXSTO;
1915 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
b0c5943f
MC
1916 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
1917 }
1918
1919 val = tr32(TG3_CPMU_EEE_MODE);
1920 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
1921}
1922
1da177e4
LT
1923static int tg3_wait_macro_done(struct tg3 *tp)
1924{
1925 int limit = 100;
1926
1927 while (limit--) {
1928 u32 tmp32;
1929
f08aa1a8 1930 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
1da177e4
LT
1931 if ((tmp32 & 0x1000) == 0)
1932 break;
1933 }
1934 }
d4675b52 1935 if (limit < 0)
1da177e4
LT
1936 return -EBUSY;
1937
1938 return 0;
1939}
1940
1941static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
1942{
1943 static const u32 test_pat[4][6] = {
1944 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
1945 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
1946 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
1947 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
1948 };
1949 int chan;
1950
1951 for (chan = 0; chan < 4; chan++) {
1952 int i;
1953
1954 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
1955 (chan * 0x2000) | 0x0200);
f08aa1a8 1956 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
1da177e4
LT
1957
1958 for (i = 0; i < 6; i++)
1959 tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
1960 test_pat[chan][i]);
1961
f08aa1a8 1962 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
1da177e4
LT
1963 if (tg3_wait_macro_done(tp)) {
1964 *resetp = 1;
1965 return -EBUSY;
1966 }
1967
1968 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
1969 (chan * 0x2000) | 0x0200);
f08aa1a8 1970 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
1da177e4
LT
1971 if (tg3_wait_macro_done(tp)) {
1972 *resetp = 1;
1973 return -EBUSY;
1974 }
1975
f08aa1a8 1976 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
1da177e4
LT
1977 if (tg3_wait_macro_done(tp)) {
1978 *resetp = 1;
1979 return -EBUSY;
1980 }
1981
1982 for (i = 0; i < 6; i += 2) {
1983 u32 low, high;
1984
1985 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
1986 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
1987 tg3_wait_macro_done(tp)) {
1988 *resetp = 1;
1989 return -EBUSY;
1990 }
1991 low &= 0x7fff;
1992 high &= 0x000f;
1993 if (low != test_pat[chan][i] ||
1994 high != test_pat[chan][i+1]) {
1995 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
1996 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
1997 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
1998
1999 return -EBUSY;
2000 }
2001 }
2002 }
2003
2004 return 0;
2005}
2006
2007static int tg3_phy_reset_chanpat(struct tg3 *tp)
2008{
2009 int chan;
2010
2011 for (chan = 0; chan < 4; chan++) {
2012 int i;
2013
2014 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2015 (chan * 0x2000) | 0x0200);
f08aa1a8 2016 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
1da177e4
LT
2017 for (i = 0; i < 6; i++)
2018 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
f08aa1a8 2019 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
1da177e4
LT
2020 if (tg3_wait_macro_done(tp))
2021 return -EBUSY;
2022 }
2023
2024 return 0;
2025}
2026
2027static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2028{
2029 u32 reg32, phy9_orig;
2030 int retries, do_phy_reset, err;
2031
2032 retries = 10;
2033 do_phy_reset = 1;
2034 do {
2035 if (do_phy_reset) {
2036 err = tg3_bmcr_reset(tp);
2037 if (err)
2038 return err;
2039 do_phy_reset = 0;
2040 }
2041
2042 /* Disable transmitter and interrupt. */
2043 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2044 continue;
2045
2046 reg32 |= 0x3000;
2047 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2048
2049 /* Set full-duplex, 1000 mbps. */
2050 tg3_writephy(tp, MII_BMCR,
221c5637 2051 BMCR_FULLDPLX | BMCR_SPEED1000);
1da177e4
LT
2052
2053 /* Set to master mode. */
221c5637 2054 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
1da177e4
LT
2055 continue;
2056
221c5637
MC
2057 tg3_writephy(tp, MII_CTRL1000,
2058 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
1da177e4 2059
1d36ba45
MC
2060 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
2061 if (err)
2062 return err;
1da177e4
LT
2063
2064 /* Block the PHY control access. */
6ee7c0a0 2065 tg3_phydsp_write(tp, 0x8005, 0x0800);
1da177e4
LT
2066
2067 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2068 if (!err)
2069 break;
2070 } while (--retries);
2071
2072 err = tg3_phy_reset_chanpat(tp);
2073 if (err)
2074 return err;
2075
6ee7c0a0 2076 tg3_phydsp_write(tp, 0x8005, 0x0000);
1da177e4
LT
2077
2078 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
f08aa1a8 2079 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
1da177e4 2080
1d36ba45 2081 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
1da177e4 2082
221c5637 2083 tg3_writephy(tp, MII_CTRL1000, phy9_orig);
1da177e4
LT
2084
2085 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2086 reg32 &= ~0x3000;
2087 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2088 } else if (!err)
2089 err = -EBUSY;
2090
2091 return err;
2092}
2093
2094/* This will reset the tigon3 PHY if there is no valid
2095 * link unless the FORCE argument is non-zero.
2096 */
2097static int tg3_phy_reset(struct tg3 *tp)
2098{
f833c4c1 2099 u32 val, cpmuctrl;
1da177e4
LT
2100 int err;
2101
60189ddf 2102 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
60189ddf
MC
2103 val = tr32(GRC_MISC_CFG);
2104 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2105 udelay(40);
2106 }
f833c4c1
MC
2107 err = tg3_readphy(tp, MII_BMSR, &val);
2108 err |= tg3_readphy(tp, MII_BMSR, &val);
1da177e4
LT
2109 if (err != 0)
2110 return -EBUSY;
2111
c8e1e82b
MC
2112 if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
2113 netif_carrier_off(tp->dev);
2114 tg3_link_report(tp);
2115 }
2116
1da177e4
LT
2117 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2118 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2119 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
2120 err = tg3_phy_reset_5703_4_5(tp);
2121 if (err)
2122 return err;
2123 goto out;
2124 }
2125
b2a5c19c
MC
2126 cpmuctrl = 0;
2127 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
2128 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
2129 cpmuctrl = tr32(TG3_CPMU_CTRL);
2130 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2131 tw32(TG3_CPMU_CTRL,
2132 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2133 }
2134
1da177e4
LT
2135 err = tg3_bmcr_reset(tp);
2136 if (err)
2137 return err;
2138
b2a5c19c 2139 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
f833c4c1
MC
2140 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2141 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
b2a5c19c
MC
2142
2143 tw32(TG3_CPMU_CTRL, cpmuctrl);
2144 }
2145
bcb37f6c
MC
2146 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2147 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
ce057f01
MC
2148 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2149 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2150 CPMU_LSPD_1000MB_MACCLK_12_5) {
2151 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2152 udelay(40);
2153 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2154 }
2155 }
2156
63c3a66f 2157 if (tg3_flag(tp, 5717_PLUS) &&
f07e9af3 2158 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
ecf1410b
MC
2159 return 0;
2160
b2a5c19c
MC
2161 tg3_phy_apply_otp(tp);
2162
f07e9af3 2163 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
6833c043
MC
2164 tg3_phy_toggle_apd(tp, true);
2165 else
2166 tg3_phy_toggle_apd(tp, false);
2167
1da177e4 2168out:
1d36ba45
MC
2169 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2170 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
6ee7c0a0
MC
2171 tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2172 tg3_phydsp_write(tp, 0x000a, 0x0323);
1d36ba45 2173 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
1da177e4 2174 }
1d36ba45 2175
f07e9af3 2176 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
f08aa1a8
MC
2177 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2178 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
1da177e4 2179 }
1d36ba45 2180
f07e9af3 2181 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
1d36ba45
MC
2182 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2183 tg3_phydsp_write(tp, 0x000a, 0x310b);
2184 tg3_phydsp_write(tp, 0x201f, 0x9506);
2185 tg3_phydsp_write(tp, 0x401f, 0x14e2);
2186 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2187 }
f07e9af3 2188 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
1d36ba45
MC
2189 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2190 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2191 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2192 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2193 tg3_writephy(tp, MII_TG3_TEST1,
2194 MII_TG3_TEST1_TRIM_EN | 0x4);
2195 } else
2196 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2197
2198 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2199 }
c424cb24 2200 }
1d36ba45 2201
1da177e4
LT
2202 /* Set Extended packet length bit (bit 14) on all chips that */
2203 /* support jumbo frames */
79eb6904 2204 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
1da177e4 2205 /* Cannot do read-modify-write on 5401 */
b4bd2929 2206 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
63c3a66f 2207 } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
1da177e4 2208 /* Set bit 14 with read-modify-write to preserve other bits */
15ee95c3
MC
2209 err = tg3_phy_auxctl_read(tp,
2210 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2211 if (!err)
b4bd2929
MC
2212 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2213 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
1da177e4
LT
2214 }
2215
2216 /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2217 * jumbo frames transmission.
2218 */
63c3a66f 2219 if (tg3_flag(tp, JUMBO_CAPABLE)) {
f833c4c1 2220 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
c6cdf436 2221 tg3_writephy(tp, MII_TG3_EXT_CTRL,
f833c4c1 2222 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
1da177e4
LT
2223 }
2224
715116a1 2225 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
715116a1 2226 /* adjust output voltage */
535ef6e1 2227 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
715116a1
MC
2228 }
2229
9ef8ca99 2230 tg3_phy_toggle_automdix(tp, 1);
1da177e4
LT
2231 tg3_phy_set_wirespeed(tp);
2232 return 0;
2233}
2234
3a1e19d3
MC
2235#define TG3_GPIO_MSG_DRVR_PRES 0x00000001
2236#define TG3_GPIO_MSG_NEED_VAUX 0x00000002
2237#define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \
2238 TG3_GPIO_MSG_NEED_VAUX)
2239#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2240 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2241 (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2242 (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2243 (TG3_GPIO_MSG_DRVR_PRES << 12))
2244
2245#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2246 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2247 (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2248 (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2249 (TG3_GPIO_MSG_NEED_VAUX << 12))
2250
2251static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2252{
2253 u32 status, shift;
2254
2255 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2256 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2257 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2258 else
2259 status = tr32(TG3_CPMU_DRV_STATUS);
2260
2261 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2262 status &= ~(TG3_GPIO_MSG_MASK << shift);
2263 status |= (newstat << shift);
2264
2265 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2266 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2267 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2268 else
2269 tw32(TG3_CPMU_DRV_STATUS, status);
2270
2271 return status >> TG3_APE_GPIO_MSG_SHIFT;
2272}
2273
520b2756
MC
2274static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2275{
2276 if (!tg3_flag(tp, IS_NIC))
2277 return 0;
2278
3a1e19d3
MC
2279 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2280 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2281 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2282 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2283 return -EIO;
520b2756 2284
3a1e19d3
MC
2285 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2286
2287 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2288 TG3_GRC_LCLCTL_PWRSW_DELAY);
2289
2290 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2291 } else {
2292 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2293 TG3_GRC_LCLCTL_PWRSW_DELAY);
2294 }
6f5c8f83 2295
520b2756
MC
2296 return 0;
2297}
2298
2299static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2300{
2301 u32 grc_local_ctrl;
2302
2303 if (!tg3_flag(tp, IS_NIC) ||
2304 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2305 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)
2306 return;
2307
2308 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2309
2310 tw32_wait_f(GRC_LOCAL_CTRL,
2311 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2312 TG3_GRC_LCLCTL_PWRSW_DELAY);
2313
2314 tw32_wait_f(GRC_LOCAL_CTRL,
2315 grc_local_ctrl,
2316 TG3_GRC_LCLCTL_PWRSW_DELAY);
2317
2318 tw32_wait_f(GRC_LOCAL_CTRL,
2319 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2320 TG3_GRC_LCLCTL_PWRSW_DELAY);
2321}
2322
2323static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2324{
2325 if (!tg3_flag(tp, IS_NIC))
2326 return;
2327
2328 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2329 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2330 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2331 (GRC_LCLCTRL_GPIO_OE0 |
2332 GRC_LCLCTRL_GPIO_OE1 |
2333 GRC_LCLCTRL_GPIO_OE2 |
2334 GRC_LCLCTRL_GPIO_OUTPUT0 |
2335 GRC_LCLCTRL_GPIO_OUTPUT1),
2336 TG3_GRC_LCLCTL_PWRSW_DELAY);
2337 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2338 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2339 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2340 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2341 GRC_LCLCTRL_GPIO_OE1 |
2342 GRC_LCLCTRL_GPIO_OE2 |
2343 GRC_LCLCTRL_GPIO_OUTPUT0 |
2344 GRC_LCLCTRL_GPIO_OUTPUT1 |
2345 tp->grc_local_ctrl;
2346 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2347 TG3_GRC_LCLCTL_PWRSW_DELAY);
2348
2349 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2350 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2351 TG3_GRC_LCLCTL_PWRSW_DELAY);
2352
2353 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2354 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2355 TG3_GRC_LCLCTL_PWRSW_DELAY);
2356 } else {
2357 u32 no_gpio2;
2358 u32 grc_local_ctrl = 0;
2359
2360 /* Workaround to prevent overdrawing Amps. */
2361 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2362 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2363 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2364 grc_local_ctrl,
2365 TG3_GRC_LCLCTL_PWRSW_DELAY);
2366 }
2367
2368 /* On 5753 and variants, GPIO2 cannot be used. */
2369 no_gpio2 = tp->nic_sram_data_cfg &
2370 NIC_SRAM_DATA_CFG_NO_GPIO2;
2371
2372 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2373 GRC_LCLCTRL_GPIO_OE1 |
2374 GRC_LCLCTRL_GPIO_OE2 |
2375 GRC_LCLCTRL_GPIO_OUTPUT1 |
2376 GRC_LCLCTRL_GPIO_OUTPUT2;
2377 if (no_gpio2) {
2378 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2379 GRC_LCLCTRL_GPIO_OUTPUT2);
2380 }
2381 tw32_wait_f(GRC_LOCAL_CTRL,
2382 tp->grc_local_ctrl | grc_local_ctrl,
2383 TG3_GRC_LCLCTL_PWRSW_DELAY);
2384
2385 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2386
2387 tw32_wait_f(GRC_LOCAL_CTRL,
2388 tp->grc_local_ctrl | grc_local_ctrl,
2389 TG3_GRC_LCLCTL_PWRSW_DELAY);
2390
2391 if (!no_gpio2) {
2392 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2393 tw32_wait_f(GRC_LOCAL_CTRL,
2394 tp->grc_local_ctrl | grc_local_ctrl,
2395 TG3_GRC_LCLCTL_PWRSW_DELAY);
2396 }
2397 }
3a1e19d3
MC
2398}
2399
cd0d7228 2400static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
3a1e19d3
MC
2401{
2402 u32 msg = 0;
2403
2404 /* Serialize power state transitions */
2405 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2406 return;
2407
cd0d7228 2408 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
3a1e19d3
MC
2409 msg = TG3_GPIO_MSG_NEED_VAUX;
2410
2411 msg = tg3_set_function_status(tp, msg);
2412
2413 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2414 goto done;
6f5c8f83 2415
3a1e19d3
MC
2416 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2417 tg3_pwrsrc_switch_to_vaux(tp);
2418 else
2419 tg3_pwrsrc_die_with_vmain(tp);
2420
2421done:
6f5c8f83 2422 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
520b2756
MC
2423}
2424
cd0d7228 2425static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
1da177e4 2426{
683644b7 2427 bool need_vaux = false;
1da177e4 2428
334355aa 2429 /* The GPIOs do something completely different on 57765. */
63c3a66f 2430 if (!tg3_flag(tp, IS_NIC) ||
334355aa 2431 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
1da177e4
LT
2432 return;
2433
3a1e19d3
MC
2434 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2435 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2436 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
cd0d7228
MC
2437 tg3_frob_aux_power_5717(tp, include_wol ?
2438 tg3_flag(tp, WOL_ENABLE) != 0 : 0);
3a1e19d3
MC
2439 return;
2440 }
2441
2442 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
8c2dc7e1
MC
2443 struct net_device *dev_peer;
2444
2445 dev_peer = pci_get_drvdata(tp->pdev_peer);
683644b7 2446
bc1c7567 2447 /* remove_one() may have been run on the peer. */
683644b7
MC
2448 if (dev_peer) {
2449 struct tg3 *tp_peer = netdev_priv(dev_peer);
2450
63c3a66f 2451 if (tg3_flag(tp_peer, INIT_COMPLETE))
683644b7
MC
2452 return;
2453
cd0d7228 2454 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
63c3a66f 2455 tg3_flag(tp_peer, ENABLE_ASF))
683644b7
MC
2456 need_vaux = true;
2457 }
1da177e4
LT
2458 }
2459
cd0d7228
MC
2460 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2461 tg3_flag(tp, ENABLE_ASF))
683644b7
MC
2462 need_vaux = true;
2463
520b2756
MC
2464 if (need_vaux)
2465 tg3_pwrsrc_switch_to_vaux(tp);
2466 else
2467 tg3_pwrsrc_die_with_vmain(tp);
1da177e4
LT
2468}
2469
e8f3f6ca
MC
2470static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
2471{
2472 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
2473 return 1;
79eb6904 2474 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
e8f3f6ca
MC
2475 if (speed != SPEED_10)
2476 return 1;
2477 } else if (speed == SPEED_10)
2478 return 1;
2479
2480 return 0;
2481}
2482
1da177e4
LT
2483static int tg3_setup_phy(struct tg3 *, int);
2484
2485#define RESET_KIND_SHUTDOWN 0
2486#define RESET_KIND_INIT 1
2487#define RESET_KIND_SUSPEND 2
2488
2489static void tg3_write_sig_post_reset(struct tg3 *, int);
2490static int tg3_halt_cpu(struct tg3 *, u32);
2491
0a459aac 2492static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
15c3b696 2493{
ce057f01
MC
2494 u32 val;
2495
f07e9af3 2496 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
5129724a
MC
2497 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
2498 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2499 u32 serdes_cfg = tr32(MAC_SERDES_CFG);
2500
2501 sg_dig_ctrl |=
2502 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
2503 tw32(SG_DIG_CTRL, sg_dig_ctrl);
2504 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
2505 }
3f7045c1 2506 return;
5129724a 2507 }
3f7045c1 2508
60189ddf 2509 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
60189ddf
MC
2510 tg3_bmcr_reset(tp);
2511 val = tr32(GRC_MISC_CFG);
2512 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
2513 udelay(40);
2514 return;
f07e9af3 2515 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
0e5f784c
MC
2516 u32 phytest;
2517 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2518 u32 phy;
2519
2520 tg3_writephy(tp, MII_ADVERTISE, 0);
2521 tg3_writephy(tp, MII_BMCR,
2522 BMCR_ANENABLE | BMCR_ANRESTART);
2523
2524 tg3_writephy(tp, MII_TG3_FET_TEST,
2525 phytest | MII_TG3_FET_SHADOW_EN);
2526 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
2527 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
2528 tg3_writephy(tp,
2529 MII_TG3_FET_SHDW_AUXMODE4,
2530 phy);
2531 }
2532 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2533 }
2534 return;
0a459aac 2535 } else if (do_low_power) {
715116a1
MC
2536 tg3_writephy(tp, MII_TG3_EXT_CTRL,
2537 MII_TG3_EXT_CTRL_FORCE_LED_OFF);
0a459aac 2538
b4bd2929
MC
2539 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
2540 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
2541 MII_TG3_AUXCTL_PCTL_VREG_11V;
2542 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
715116a1 2543 }
3f7045c1 2544
15c3b696
MC
2545 /* The PHY should not be powered down on some chips because
2546 * of bugs.
2547 */
2548 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2549 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2550 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
f07e9af3 2551 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
15c3b696 2552 return;
ce057f01 2553
bcb37f6c
MC
2554 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2555 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
ce057f01
MC
2556 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2557 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2558 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
2559 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2560 }
2561
15c3b696
MC
2562 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
2563}
2564
ffbcfed4
MC
2565/* tp->lock is held. */
2566static int tg3_nvram_lock(struct tg3 *tp)
2567{
63c3a66f 2568 if (tg3_flag(tp, NVRAM)) {
ffbcfed4
MC
2569 int i;
2570
2571 if (tp->nvram_lock_cnt == 0) {
2572 tw32(NVRAM_SWARB, SWARB_REQ_SET1);
2573 for (i = 0; i < 8000; i++) {
2574 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
2575 break;
2576 udelay(20);
2577 }
2578 if (i == 8000) {
2579 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
2580 return -ENODEV;
2581 }
2582 }
2583 tp->nvram_lock_cnt++;
2584 }
2585 return 0;
2586}
2587
2588/* tp->lock is held. */
2589static void tg3_nvram_unlock(struct tg3 *tp)
2590{
63c3a66f 2591 if (tg3_flag(tp, NVRAM)) {
ffbcfed4
MC
2592 if (tp->nvram_lock_cnt > 0)
2593 tp->nvram_lock_cnt--;
2594 if (tp->nvram_lock_cnt == 0)
2595 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
2596 }
2597}
2598
2599/* tp->lock is held. */
2600static void tg3_enable_nvram_access(struct tg3 *tp)
2601{
63c3a66f 2602 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
ffbcfed4
MC
2603 u32 nvaccess = tr32(NVRAM_ACCESS);
2604
2605 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
2606 }
2607}
2608
2609/* tp->lock is held. */
2610static void tg3_disable_nvram_access(struct tg3 *tp)
2611{
63c3a66f 2612 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
ffbcfed4
MC
2613 u32 nvaccess = tr32(NVRAM_ACCESS);
2614
2615 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
2616 }
2617}
2618
2619static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
2620 u32 offset, u32 *val)
2621{
2622 u32 tmp;
2623 int i;
2624
2625 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
2626 return -EINVAL;
2627
2628 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
2629 EEPROM_ADDR_DEVID_MASK |
2630 EEPROM_ADDR_READ);
2631 tw32(GRC_EEPROM_ADDR,
2632 tmp |
2633 (0 << EEPROM_ADDR_DEVID_SHIFT) |
2634 ((offset << EEPROM_ADDR_ADDR_SHIFT) &
2635 EEPROM_ADDR_ADDR_MASK) |
2636 EEPROM_ADDR_READ | EEPROM_ADDR_START);
2637
2638 for (i = 0; i < 1000; i++) {
2639 tmp = tr32(GRC_EEPROM_ADDR);
2640
2641 if (tmp & EEPROM_ADDR_COMPLETE)
2642 break;
2643 msleep(1);
2644 }
2645 if (!(tmp & EEPROM_ADDR_COMPLETE))
2646 return -EBUSY;
2647
62cedd11
MC
2648 tmp = tr32(GRC_EEPROM_DATA);
2649
2650 /*
2651 * The data will always be opposite the native endian
2652 * format. Perform a blind byteswap to compensate.
2653 */
2654 *val = swab32(tmp);
2655
ffbcfed4
MC
2656 return 0;
2657}
2658
2659#define NVRAM_CMD_TIMEOUT 10000
2660
2661static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
2662{
2663 int i;
2664
2665 tw32(NVRAM_CMD, nvram_cmd);
2666 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
2667 udelay(10);
2668 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
2669 udelay(10);
2670 break;
2671 }
2672 }
2673
2674 if (i == NVRAM_CMD_TIMEOUT)
2675 return -EBUSY;
2676
2677 return 0;
2678}
2679
2680static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
2681{
63c3a66f
JP
2682 if (tg3_flag(tp, NVRAM) &&
2683 tg3_flag(tp, NVRAM_BUFFERED) &&
2684 tg3_flag(tp, FLASH) &&
2685 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
ffbcfed4
MC
2686 (tp->nvram_jedecnum == JEDEC_ATMEL))
2687
2688 addr = ((addr / tp->nvram_pagesize) <<
2689 ATMEL_AT45DB0X1B_PAGE_POS) +
2690 (addr % tp->nvram_pagesize);
2691
2692 return addr;
2693}
2694
2695static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
2696{
63c3a66f
JP
2697 if (tg3_flag(tp, NVRAM) &&
2698 tg3_flag(tp, NVRAM_BUFFERED) &&
2699 tg3_flag(tp, FLASH) &&
2700 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
ffbcfed4
MC
2701 (tp->nvram_jedecnum == JEDEC_ATMEL))
2702
2703 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
2704 tp->nvram_pagesize) +
2705 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
2706
2707 return addr;
2708}
2709
e4f34110
MC
2710/* NOTE: Data read in from NVRAM is byteswapped according to
2711 * the byteswapping settings for all other register accesses.
2712 * tg3 devices are BE devices, so on a BE machine, the data
2713 * returned will be exactly as it is seen in NVRAM. On a LE
2714 * machine, the 32-bit value will be byteswapped.
2715 */
ffbcfed4
MC
2716static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
2717{
2718 int ret;
2719
63c3a66f 2720 if (!tg3_flag(tp, NVRAM))
ffbcfed4
MC
2721 return tg3_nvram_read_using_eeprom(tp, offset, val);
2722
2723 offset = tg3_nvram_phys_addr(tp, offset);
2724
2725 if (offset > NVRAM_ADDR_MSK)
2726 return -EINVAL;
2727
2728 ret = tg3_nvram_lock(tp);
2729 if (ret)
2730 return ret;
2731
2732 tg3_enable_nvram_access(tp);
2733
2734 tw32(NVRAM_ADDR, offset);
2735 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
2736 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
2737
2738 if (ret == 0)
e4f34110 2739 *val = tr32(NVRAM_RDDATA);
ffbcfed4
MC
2740
2741 tg3_disable_nvram_access(tp);
2742
2743 tg3_nvram_unlock(tp);
2744
2745 return ret;
2746}
2747
a9dc529d
MC
2748/* Ensures NVRAM data is in bytestream format. */
2749static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
ffbcfed4
MC
2750{
2751 u32 v;
a9dc529d 2752 int res = tg3_nvram_read(tp, offset, &v);
ffbcfed4 2753 if (!res)
a9dc529d 2754 *val = cpu_to_be32(v);
ffbcfed4
MC
2755 return res;
2756}
2757
3f007891
MC
2758/* tp->lock is held. */
2759static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
2760{
2761 u32 addr_high, addr_low;
2762 int i;
2763
2764 addr_high = ((tp->dev->dev_addr[0] << 8) |
2765 tp->dev->dev_addr[1]);
2766 addr_low = ((tp->dev->dev_addr[2] << 24) |
2767 (tp->dev->dev_addr[3] << 16) |
2768 (tp->dev->dev_addr[4] << 8) |
2769 (tp->dev->dev_addr[5] << 0));
2770 for (i = 0; i < 4; i++) {
2771 if (i == 1 && skip_mac_1)
2772 continue;
2773 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
2774 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
2775 }
2776
2777 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2778 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
2779 for (i = 0; i < 12; i++) {
2780 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
2781 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
2782 }
2783 }
2784
2785 addr_high = (tp->dev->dev_addr[0] +
2786 tp->dev->dev_addr[1] +
2787 tp->dev->dev_addr[2] +
2788 tp->dev->dev_addr[3] +
2789 tp->dev->dev_addr[4] +
2790 tp->dev->dev_addr[5]) &
2791 TX_BACKOFF_SEED_MASK;
2792 tw32(MAC_TX_BACKOFF_SEED, addr_high);
2793}
2794
c866b7ea 2795static void tg3_enable_register_access(struct tg3 *tp)
1da177e4 2796{
c866b7ea
RW
2797 /*
2798 * Make sure register accesses (indirect or otherwise) will function
2799 * correctly.
1da177e4
LT
2800 */
2801 pci_write_config_dword(tp->pdev,
c866b7ea
RW
2802 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
2803}
1da177e4 2804
c866b7ea
RW
2805static int tg3_power_up(struct tg3 *tp)
2806{
bed9829f 2807 int err;
8c6bda1a 2808
bed9829f 2809 tg3_enable_register_access(tp);
1da177e4 2810
bed9829f
MC
2811 err = pci_set_power_state(tp->pdev, PCI_D0);
2812 if (!err) {
2813 /* Switch out of Vaux if it is a NIC */
2814 tg3_pwrsrc_switch_to_vmain(tp);
2815 } else {
2816 netdev_err(tp->dev, "Transition to D0 failed\n");
2817 }
1da177e4 2818
bed9829f 2819 return err;
c866b7ea 2820}
1da177e4 2821
c866b7ea
RW
2822static int tg3_power_down_prepare(struct tg3 *tp)
2823{
2824 u32 misc_host_ctrl;
2825 bool device_should_wake, do_low_power;
2826
2827 tg3_enable_register_access(tp);
5e7dfd0f
MC
2828
2829 /* Restore the CLKREQ setting. */
63c3a66f 2830 if (tg3_flag(tp, CLKREQ_BUG)) {
5e7dfd0f
MC
2831 u16 lnkctl;
2832
2833 pci_read_config_word(tp->pdev,
708ebb3a 2834 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
5e7dfd0f
MC
2835 &lnkctl);
2836 lnkctl |= PCI_EXP_LNKCTL_CLKREQ_EN;
2837 pci_write_config_word(tp->pdev,
708ebb3a 2838 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
5e7dfd0f
MC
2839 lnkctl);
2840 }
2841
1da177e4
LT
2842 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
2843 tw32(TG3PCI_MISC_HOST_CTRL,
2844 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
2845
c866b7ea 2846 device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
63c3a66f 2847 tg3_flag(tp, WOL_ENABLE);
05ac4cb7 2848
63c3a66f 2849 if (tg3_flag(tp, USE_PHYLIB)) {
0a459aac 2850 do_low_power = false;
f07e9af3 2851 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
80096068 2852 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
b02fd9e3 2853 struct phy_device *phydev;
0a459aac 2854 u32 phyid, advertising;
b02fd9e3 2855
3f0e3ad7 2856 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
b02fd9e3 2857
80096068 2858 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
b02fd9e3
MC
2859
2860 tp->link_config.orig_speed = phydev->speed;
2861 tp->link_config.orig_duplex = phydev->duplex;
2862 tp->link_config.orig_autoneg = phydev->autoneg;
2863 tp->link_config.orig_advertising = phydev->advertising;
2864
2865 advertising = ADVERTISED_TP |
2866 ADVERTISED_Pause |
2867 ADVERTISED_Autoneg |
2868 ADVERTISED_10baseT_Half;
2869
63c3a66f
JP
2870 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
2871 if (tg3_flag(tp, WOL_SPEED_100MB))
b02fd9e3
MC
2872 advertising |=
2873 ADVERTISED_100baseT_Half |
2874 ADVERTISED_100baseT_Full |
2875 ADVERTISED_10baseT_Full;
2876 else
2877 advertising |= ADVERTISED_10baseT_Full;
2878 }
2879
2880 phydev->advertising = advertising;
2881
2882 phy_start_aneg(phydev);
0a459aac
MC
2883
2884 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
6a443a0f
MC
2885 if (phyid != PHY_ID_BCMAC131) {
2886 phyid &= PHY_BCM_OUI_MASK;
2887 if (phyid == PHY_BCM_OUI_1 ||
2888 phyid == PHY_BCM_OUI_2 ||
2889 phyid == PHY_BCM_OUI_3)
0a459aac
MC
2890 do_low_power = true;
2891 }
b02fd9e3 2892 }
dd477003 2893 } else {
2023276e 2894 do_low_power = true;
0a459aac 2895
80096068
MC
2896 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
2897 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
dd477003
MC
2898 tp->link_config.orig_speed = tp->link_config.speed;
2899 tp->link_config.orig_duplex = tp->link_config.duplex;
2900 tp->link_config.orig_autoneg = tp->link_config.autoneg;
2901 }
1da177e4 2902
f07e9af3 2903 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
dd477003
MC
2904 tp->link_config.speed = SPEED_10;
2905 tp->link_config.duplex = DUPLEX_HALF;
2906 tp->link_config.autoneg = AUTONEG_ENABLE;
2907 tg3_setup_phy(tp, 0);
2908 }
1da177e4
LT
2909 }
2910
b5d3772c
MC
2911 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2912 u32 val;
2913
2914 val = tr32(GRC_VCPU_EXT_CTRL);
2915 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
63c3a66f 2916 } else if (!tg3_flag(tp, ENABLE_ASF)) {
6921d201
MC
2917 int i;
2918 u32 val;
2919
2920 for (i = 0; i < 200; i++) {
2921 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
2922 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
2923 break;
2924 msleep(1);
2925 }
2926 }
63c3a66f 2927 if (tg3_flag(tp, WOL_CAP))
a85feb8c
GZ
2928 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
2929 WOL_DRV_STATE_SHUTDOWN |
2930 WOL_DRV_WOL |
2931 WOL_SET_MAGIC_PKT);
6921d201 2932
05ac4cb7 2933 if (device_should_wake) {
1da177e4
LT
2934 u32 mac_mode;
2935
f07e9af3 2936 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
b4bd2929
MC
2937 if (do_low_power &&
2938 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
2939 tg3_phy_auxctl_write(tp,
2940 MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
2941 MII_TG3_AUXCTL_PCTL_WOL_EN |
2942 MII_TG3_AUXCTL_PCTL_100TX_LPWR |
2943 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
dd477003
MC
2944 udelay(40);
2945 }
1da177e4 2946
f07e9af3 2947 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3f7045c1
MC
2948 mac_mode = MAC_MODE_PORT_MODE_GMII;
2949 else
2950 mac_mode = MAC_MODE_PORT_MODE_MII;
1da177e4 2951
e8f3f6ca
MC
2952 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
2953 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
2954 ASIC_REV_5700) {
63c3a66f 2955 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
e8f3f6ca
MC
2956 SPEED_100 : SPEED_10;
2957 if (tg3_5700_link_polarity(tp, speed))
2958 mac_mode |= MAC_MODE_LINK_POLARITY;
2959 else
2960 mac_mode &= ~MAC_MODE_LINK_POLARITY;
2961 }
1da177e4
LT
2962 } else {
2963 mac_mode = MAC_MODE_PORT_MODE_TBI;
2964 }
2965
63c3a66f 2966 if (!tg3_flag(tp, 5750_PLUS))
1da177e4
LT
2967 tw32(MAC_LED_CTRL, tp->led_ctrl);
2968
05ac4cb7 2969 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
63c3a66f
JP
2970 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
2971 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
05ac4cb7 2972 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
1da177e4 2973
63c3a66f 2974 if (tg3_flag(tp, ENABLE_APE))
d2394e6b
MC
2975 mac_mode |= MAC_MODE_APE_TX_EN |
2976 MAC_MODE_APE_RX_EN |
2977 MAC_MODE_TDE_ENABLE;
3bda1258 2978
1da177e4
LT
2979 tw32_f(MAC_MODE, mac_mode);
2980 udelay(100);
2981
2982 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
2983 udelay(10);
2984 }
2985
63c3a66f 2986 if (!tg3_flag(tp, WOL_SPEED_100MB) &&
1da177e4
LT
2987 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2988 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
2989 u32 base_val;
2990
2991 base_val = tp->pci_clock_ctrl;
2992 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
2993 CLOCK_CTRL_TXCLK_DISABLE);
2994
b401e9e2
MC
2995 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
2996 CLOCK_CTRL_PWRDOWN_PLL133, 40);
63c3a66f
JP
2997 } else if (tg3_flag(tp, 5780_CLASS) ||
2998 tg3_flag(tp, CPMU_PRESENT) ||
6ff6f81d 2999 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
4cf78e4f 3000 /* do nothing */
63c3a66f 3001 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
1da177e4
LT
3002 u32 newbits1, newbits2;
3003
3004 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3005 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3006 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
3007 CLOCK_CTRL_TXCLK_DISABLE |
3008 CLOCK_CTRL_ALTCLK);
3009 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
63c3a66f 3010 } else if (tg3_flag(tp, 5705_PLUS)) {
1da177e4
LT
3011 newbits1 = CLOCK_CTRL_625_CORE;
3012 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
3013 } else {
3014 newbits1 = CLOCK_CTRL_ALTCLK;
3015 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3016 }
3017
b401e9e2
MC
3018 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
3019 40);
1da177e4 3020
b401e9e2
MC
3021 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
3022 40);
1da177e4 3023
63c3a66f 3024 if (!tg3_flag(tp, 5705_PLUS)) {
1da177e4
LT
3025 u32 newbits3;
3026
3027 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3028 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3029 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
3030 CLOCK_CTRL_TXCLK_DISABLE |
3031 CLOCK_CTRL_44MHZ_CORE);
3032 } else {
3033 newbits3 = CLOCK_CTRL_44MHZ_CORE;
3034 }
3035
b401e9e2
MC
3036 tw32_wait_f(TG3PCI_CLOCK_CTRL,
3037 tp->pci_clock_ctrl | newbits3, 40);
1da177e4
LT
3038 }
3039 }
3040
63c3a66f 3041 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
0a459aac 3042 tg3_power_down_phy(tp, do_low_power);
6921d201 3043
cd0d7228 3044 tg3_frob_aux_power(tp, true);
1da177e4
LT
3045
3046 /* Workaround for unstable PLL clock */
3047 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
3048 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
3049 u32 val = tr32(0x7d00);
3050
3051 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
3052 tw32(0x7d00, val);
63c3a66f 3053 if (!tg3_flag(tp, ENABLE_ASF)) {
ec41c7df
MC
3054 int err;
3055
3056 err = tg3_nvram_lock(tp);
1da177e4 3057 tg3_halt_cpu(tp, RX_CPU_BASE);
ec41c7df
MC
3058 if (!err)
3059 tg3_nvram_unlock(tp);
6921d201 3060 }
1da177e4
LT
3061 }
3062
bbadf503
MC
3063 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
3064
c866b7ea
RW
3065 return 0;
3066}
12dac075 3067
c866b7ea
RW
3068static void tg3_power_down(struct tg3 *tp)
3069{
3070 tg3_power_down_prepare(tp);
1da177e4 3071
63c3a66f 3072 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
c866b7ea 3073 pci_set_power_state(tp->pdev, PCI_D3hot);
1da177e4
LT
3074}
3075
1da177e4
LT
3076static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
3077{
3078 switch (val & MII_TG3_AUX_STAT_SPDMASK) {
3079 case MII_TG3_AUX_STAT_10HALF:
3080 *speed = SPEED_10;
3081 *duplex = DUPLEX_HALF;
3082 break;
3083
3084 case MII_TG3_AUX_STAT_10FULL:
3085 *speed = SPEED_10;
3086 *duplex = DUPLEX_FULL;
3087 break;
3088
3089 case MII_TG3_AUX_STAT_100HALF:
3090 *speed = SPEED_100;
3091 *duplex = DUPLEX_HALF;
3092 break;
3093
3094 case MII_TG3_AUX_STAT_100FULL:
3095 *speed = SPEED_100;
3096 *duplex = DUPLEX_FULL;
3097 break;
3098
3099 case MII_TG3_AUX_STAT_1000HALF:
3100 *speed = SPEED_1000;
3101 *duplex = DUPLEX_HALF;
3102 break;
3103
3104 case MII_TG3_AUX_STAT_1000FULL:
3105 *speed = SPEED_1000;
3106 *duplex = DUPLEX_FULL;
3107 break;
3108
3109 default:
f07e9af3 3110 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
715116a1
MC
3111 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
3112 SPEED_10;
3113 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
3114 DUPLEX_HALF;
3115 break;
3116 }
1da177e4
LT
3117 *speed = SPEED_INVALID;
3118 *duplex = DUPLEX_INVALID;
3119 break;
855e1111 3120 }
1da177e4
LT
3121}
3122
42b64a45 3123static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
1da177e4 3124{
42b64a45
MC
3125 int err = 0;
3126 u32 val, new_adv;
1da177e4 3127
42b64a45
MC
3128 new_adv = ADVERTISE_CSMA;
3129 if (advertise & ADVERTISED_10baseT_Half)
3130 new_adv |= ADVERTISE_10HALF;
3131 if (advertise & ADVERTISED_10baseT_Full)
3132 new_adv |= ADVERTISE_10FULL;
3133 if (advertise & ADVERTISED_100baseT_Half)
3134 new_adv |= ADVERTISE_100HALF;
3135 if (advertise & ADVERTISED_100baseT_Full)
3136 new_adv |= ADVERTISE_100FULL;
1da177e4 3137
42b64a45 3138 new_adv |= tg3_advert_flowctrl_1000T(flowctrl);
1da177e4 3139
42b64a45
MC
3140 err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
3141 if (err)
3142 goto done;
ba4d07a8 3143
42b64a45
MC
3144 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
3145 goto done;
1da177e4 3146
42b64a45
MC
3147 new_adv = 0;
3148 if (advertise & ADVERTISED_1000baseT_Half)
221c5637 3149 new_adv |= ADVERTISE_1000HALF;
42b64a45 3150 if (advertise & ADVERTISED_1000baseT_Full)
221c5637 3151 new_adv |= ADVERTISE_1000FULL;
ba4d07a8 3152
42b64a45
MC
3153 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
3154 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
221c5637 3155 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
ba4d07a8 3156
221c5637 3157 err = tg3_writephy(tp, MII_CTRL1000, new_adv);
42b64a45
MC
3158 if (err)
3159 goto done;
1da177e4 3160
42b64a45
MC
3161 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
3162 goto done;
52b02d04 3163
42b64a45
MC
3164 tw32(TG3_CPMU_EEE_MODE,
3165 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
52b02d04 3166
42b64a45
MC
3167 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
3168 if (!err) {
3169 u32 err2;
52b02d04 3170
b715ce94
MC
3171 val = 0;
3172 /* Advertise 100-BaseTX EEE ability */
3173 if (advertise & ADVERTISED_100baseT_Full)
3174 val |= MDIO_AN_EEE_ADV_100TX;
3175 /* Advertise 1000-BaseT EEE ability */
3176 if (advertise & ADVERTISED_1000baseT_Full)
3177 val |= MDIO_AN_EEE_ADV_1000T;
3178 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
3179 if (err)
3180 val = 0;
3181
21a00ab2
MC
3182 switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
3183 case ASIC_REV_5717:
3184 case ASIC_REV_57765:
21a00ab2 3185 case ASIC_REV_5719:
b715ce94
MC
3186 /* If we advertised any eee advertisements above... */
3187 if (val)
3188 val = MII_TG3_DSP_TAP26_ALNOKO |
3189 MII_TG3_DSP_TAP26_RMRXSTO |
3190 MII_TG3_DSP_TAP26_OPCSINPT;
21a00ab2 3191 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
be671947
MC
3192 /* Fall through */
3193 case ASIC_REV_5720:
3194 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
3195 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
3196 MII_TG3_DSP_CH34TP2_HIBW01);
21a00ab2 3197 }
52b02d04 3198
42b64a45
MC
3199 err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
3200 if (!err)
3201 err = err2;
3202 }
3203
3204done:
3205 return err;
3206}
3207
3208static void tg3_phy_copper_begin(struct tg3 *tp)
3209{
3210 u32 new_adv;
3211 int i;
3212
3213 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
3214 new_adv = ADVERTISED_10baseT_Half |
3215 ADVERTISED_10baseT_Full;
3216 if (tg3_flag(tp, WOL_SPEED_100MB))
3217 new_adv |= ADVERTISED_100baseT_Half |
3218 ADVERTISED_100baseT_Full;
3219
3220 tg3_phy_autoneg_cfg(tp, new_adv,
3221 FLOW_CTRL_TX | FLOW_CTRL_RX);
3222 } else if (tp->link_config.speed == SPEED_INVALID) {
3223 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
3224 tp->link_config.advertising &=
3225 ~(ADVERTISED_1000baseT_Half |
3226 ADVERTISED_1000baseT_Full);
3227
3228 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
3229 tp->link_config.flowctrl);
3230 } else {
3231 /* Asking for a specific link mode. */
3232 if (tp->link_config.speed == SPEED_1000) {
3233 if (tp->link_config.duplex == DUPLEX_FULL)
3234 new_adv = ADVERTISED_1000baseT_Full;
3235 else
3236 new_adv = ADVERTISED_1000baseT_Half;
3237 } else if (tp->link_config.speed == SPEED_100) {
3238 if (tp->link_config.duplex == DUPLEX_FULL)
3239 new_adv = ADVERTISED_100baseT_Full;
3240 else
3241 new_adv = ADVERTISED_100baseT_Half;
3242 } else {
3243 if (tp->link_config.duplex == DUPLEX_FULL)
3244 new_adv = ADVERTISED_10baseT_Full;
3245 else
3246 new_adv = ADVERTISED_10baseT_Half;
52b02d04 3247 }
52b02d04 3248
42b64a45
MC
3249 tg3_phy_autoneg_cfg(tp, new_adv,
3250 tp->link_config.flowctrl);
52b02d04
MC
3251 }
3252
1da177e4
LT
3253 if (tp->link_config.autoneg == AUTONEG_DISABLE &&
3254 tp->link_config.speed != SPEED_INVALID) {
3255 u32 bmcr, orig_bmcr;
3256
3257 tp->link_config.active_speed = tp->link_config.speed;
3258 tp->link_config.active_duplex = tp->link_config.duplex;
3259
3260 bmcr = 0;
3261 switch (tp->link_config.speed) {
3262 default:
3263 case SPEED_10:
3264 break;
3265
3266 case SPEED_100:
3267 bmcr |= BMCR_SPEED100;
3268 break;
3269
3270 case SPEED_1000:
221c5637 3271 bmcr |= BMCR_SPEED1000;
1da177e4 3272 break;
855e1111 3273 }
1da177e4
LT
3274
3275 if (tp->link_config.duplex == DUPLEX_FULL)
3276 bmcr |= BMCR_FULLDPLX;
3277
3278 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
3279 (bmcr != orig_bmcr)) {
3280 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
3281 for (i = 0; i < 1500; i++) {
3282 u32 tmp;
3283
3284 udelay(10);
3285 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
3286 tg3_readphy(tp, MII_BMSR, &tmp))
3287 continue;
3288 if (!(tmp & BMSR_LSTATUS)) {
3289 udelay(40);
3290 break;
3291 }
3292 }
3293 tg3_writephy(tp, MII_BMCR, bmcr);
3294 udelay(40);
3295 }
3296 } else {
3297 tg3_writephy(tp, MII_BMCR,
3298 BMCR_ANENABLE | BMCR_ANRESTART);
3299 }
3300}
3301
3302static int tg3_init_5401phy_dsp(struct tg3 *tp)
3303{
3304 int err;
3305
3306 /* Turn off tap power management. */
3307 /* Set Extended packet length bit */
b4bd2929 3308 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
1da177e4 3309
6ee7c0a0
MC
3310 err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
3311 err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
3312 err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
3313 err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
3314 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
1da177e4
LT
3315
3316 udelay(40);
3317
3318 return err;
3319}
3320
3600d918 3321static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask)
1da177e4 3322{
3600d918
MC
3323 u32 adv_reg, all_mask = 0;
3324
3325 if (mask & ADVERTISED_10baseT_Half)
3326 all_mask |= ADVERTISE_10HALF;
3327 if (mask & ADVERTISED_10baseT_Full)
3328 all_mask |= ADVERTISE_10FULL;
3329 if (mask & ADVERTISED_100baseT_Half)
3330 all_mask |= ADVERTISE_100HALF;
3331 if (mask & ADVERTISED_100baseT_Full)
3332 all_mask |= ADVERTISE_100FULL;
1da177e4
LT
3333
3334 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
3335 return 0;
3336
b99d2a57 3337 if ((adv_reg & ADVERTISE_ALL) != all_mask)
1da177e4 3338 return 0;
b99d2a57 3339
f07e9af3 3340 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
1da177e4
LT
3341 u32 tg3_ctrl;
3342
3600d918
MC
3343 all_mask = 0;
3344 if (mask & ADVERTISED_1000baseT_Half)
3345 all_mask |= ADVERTISE_1000HALF;
3346 if (mask & ADVERTISED_1000baseT_Full)
3347 all_mask |= ADVERTISE_1000FULL;
3348
221c5637 3349 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
1da177e4
LT
3350 return 0;
3351
b99d2a57
MC
3352 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
3353 if (tg3_ctrl != all_mask)
1da177e4
LT
3354 return 0;
3355 }
3356 return 1;
3357}
3358
ef167e27
MC
3359static int tg3_adv_1000T_flowctrl_ok(struct tg3 *tp, u32 *lcladv, u32 *rmtadv)
3360{
3361 u32 curadv, reqadv;
3362
3363 if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
3364 return 1;
3365
3366 curadv = *lcladv & (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
3367 reqadv = tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
3368
3369 if (tp->link_config.active_duplex == DUPLEX_FULL) {
3370 if (curadv != reqadv)
3371 return 0;
3372
63c3a66f 3373 if (tg3_flag(tp, PAUSE_AUTONEG))
ef167e27
MC
3374 tg3_readphy(tp, MII_LPA, rmtadv);
3375 } else {
3376 /* Reprogram the advertisement register, even if it
3377 * does not affect the current link. If the link
3378 * gets renegotiated in the future, we can save an
3379 * additional renegotiation cycle by advertising
3380 * it correctly in the first place.
3381 */
3382 if (curadv != reqadv) {
3383 *lcladv &= ~(ADVERTISE_PAUSE_CAP |
3384 ADVERTISE_PAUSE_ASYM);
3385 tg3_writephy(tp, MII_ADVERTISE, *lcladv | reqadv);
3386 }
3387 }
3388
3389 return 1;
3390}
3391
1da177e4
LT
3392static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
3393{
3394 int current_link_up;
f833c4c1 3395 u32 bmsr, val;
ef167e27 3396 u32 lcl_adv, rmt_adv;
1da177e4
LT
3397 u16 current_speed;
3398 u8 current_duplex;
3399 int i, err;
3400
3401 tw32(MAC_EVENT, 0);
3402
3403 tw32_f(MAC_STATUS,
3404 (MAC_STATUS_SYNC_CHANGED |
3405 MAC_STATUS_CFG_CHANGED |
3406 MAC_STATUS_MI_COMPLETION |
3407 MAC_STATUS_LNKSTATE_CHANGED));
3408 udelay(40);
3409
8ef21428
MC
3410 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
3411 tw32_f(MAC_MI_MODE,
3412 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
3413 udelay(80);
3414 }
1da177e4 3415
b4bd2929 3416 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
1da177e4
LT
3417
3418 /* Some third-party PHYs need to be reset on link going
3419 * down.
3420 */
3421 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
3422 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
3423 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
3424 netif_carrier_ok(tp->dev)) {
3425 tg3_readphy(tp, MII_BMSR, &bmsr);
3426 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
3427 !(bmsr & BMSR_LSTATUS))
3428 force_reset = 1;
3429 }
3430 if (force_reset)
3431 tg3_phy_reset(tp);
3432
79eb6904 3433 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
1da177e4
LT
3434 tg3_readphy(tp, MII_BMSR, &bmsr);
3435 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
63c3a66f 3436 !tg3_flag(tp, INIT_COMPLETE))
1da177e4
LT
3437 bmsr = 0;
3438
3439 if (!(bmsr & BMSR_LSTATUS)) {
3440 err = tg3_init_5401phy_dsp(tp);
3441 if (err)
3442 return err;
3443
3444 tg3_readphy(tp, MII_BMSR, &bmsr);
3445 for (i = 0; i < 1000; i++) {
3446 udelay(10);
3447 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
3448 (bmsr & BMSR_LSTATUS)) {
3449 udelay(40);
3450 break;
3451 }
3452 }
3453
79eb6904
MC
3454 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
3455 TG3_PHY_REV_BCM5401_B0 &&
1da177e4
LT
3456 !(bmsr & BMSR_LSTATUS) &&
3457 tp->link_config.active_speed == SPEED_1000) {
3458 err = tg3_phy_reset(tp);
3459 if (!err)
3460 err = tg3_init_5401phy_dsp(tp);
3461 if (err)
3462 return err;
3463 }
3464 }
3465 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
3466 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
3467 /* 5701 {A0,B0} CRC bug workaround */
3468 tg3_writephy(tp, 0x15, 0x0a75);
f08aa1a8
MC
3469 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
3470 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
3471 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
1da177e4
LT
3472 }
3473
3474 /* Clear pending interrupts... */
f833c4c1
MC
3475 tg3_readphy(tp, MII_TG3_ISTAT, &val);
3476 tg3_readphy(tp, MII_TG3_ISTAT, &val);
1da177e4 3477
f07e9af3 3478 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
1da177e4 3479 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
f07e9af3 3480 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
1da177e4
LT
3481 tg3_writephy(tp, MII_TG3_IMASK, ~0);
3482
3483 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3484 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3485 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
3486 tg3_writephy(tp, MII_TG3_EXT_CTRL,
3487 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
3488 else
3489 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
3490 }
3491
3492 current_link_up = 0;
3493 current_speed = SPEED_INVALID;
3494 current_duplex = DUPLEX_INVALID;
3495
f07e9af3 3496 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
15ee95c3
MC
3497 err = tg3_phy_auxctl_read(tp,
3498 MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
3499 &val);
3500 if (!err && !(val & (1 << 10))) {
b4bd2929
MC
3501 tg3_phy_auxctl_write(tp,
3502 MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
3503 val | (1 << 10));
1da177e4
LT
3504 goto relink;
3505 }
3506 }
3507
3508 bmsr = 0;
3509 for (i = 0; i < 100; i++) {
3510 tg3_readphy(tp, MII_BMSR, &bmsr);
3511 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
3512 (bmsr & BMSR_LSTATUS))
3513 break;
3514 udelay(40);
3515 }
3516
3517 if (bmsr & BMSR_LSTATUS) {
3518 u32 aux_stat, bmcr;
3519
3520 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
3521 for (i = 0; i < 2000; i++) {
3522 udelay(10);
3523 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
3524 aux_stat)
3525 break;
3526 }
3527
3528 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
3529 &current_speed,
3530 &current_duplex);
3531
3532 bmcr = 0;
3533 for (i = 0; i < 200; i++) {
3534 tg3_readphy(tp, MII_BMCR, &bmcr);
3535 if (tg3_readphy(tp, MII_BMCR, &bmcr))
3536 continue;
3537 if (bmcr && bmcr != 0x7fff)
3538 break;
3539 udelay(10);
3540 }
3541
ef167e27
MC
3542 lcl_adv = 0;
3543 rmt_adv = 0;
1da177e4 3544
ef167e27
MC
3545 tp->link_config.active_speed = current_speed;
3546 tp->link_config.active_duplex = current_duplex;
3547
3548 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
3549 if ((bmcr & BMCR_ANENABLE) &&
3550 tg3_copper_is_advertising_all(tp,
3551 tp->link_config.advertising)) {
3552 if (tg3_adv_1000T_flowctrl_ok(tp, &lcl_adv,
3553 &rmt_adv))
3554 current_link_up = 1;
1da177e4
LT
3555 }
3556 } else {
3557 if (!(bmcr & BMCR_ANENABLE) &&
3558 tp->link_config.speed == current_speed &&
ef167e27
MC
3559 tp->link_config.duplex == current_duplex &&
3560 tp->link_config.flowctrl ==
3561 tp->link_config.active_flowctrl) {
1da177e4 3562 current_link_up = 1;
1da177e4
LT
3563 }
3564 }
3565
ef167e27
MC
3566 if (current_link_up == 1 &&
3567 tp->link_config.active_duplex == DUPLEX_FULL)
3568 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1da177e4
LT
3569 }
3570
1da177e4 3571relink:
80096068 3572 if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
1da177e4
LT
3573 tg3_phy_copper_begin(tp);
3574
f833c4c1 3575 tg3_readphy(tp, MII_BMSR, &bmsr);
06c03c02
MB
3576 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
3577 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
1da177e4
LT
3578 current_link_up = 1;
3579 }
3580
3581 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
3582 if (current_link_up == 1) {
3583 if (tp->link_config.active_speed == SPEED_100 ||
3584 tp->link_config.active_speed == SPEED_10)
3585 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
3586 else
3587 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
f07e9af3 3588 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
7f97a4bd
MC
3589 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
3590 else
1da177e4
LT
3591 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
3592
3593 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
3594 if (tp->link_config.active_duplex == DUPLEX_HALF)
3595 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
3596
1da177e4 3597 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
e8f3f6ca
MC
3598 if (current_link_up == 1 &&
3599 tg3_5700_link_polarity(tp, tp->link_config.active_speed))
1da177e4 3600 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
e8f3f6ca
MC
3601 else
3602 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
1da177e4
LT
3603 }
3604
3605 /* ??? Without this setting Netgear GA302T PHY does not
3606 * ??? send/receive packets...
3607 */
79eb6904 3608 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
1da177e4
LT
3609 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
3610 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
3611 tw32_f(MAC_MI_MODE, tp->mi_mode);
3612 udelay(80);
3613 }
3614
3615 tw32_f(MAC_MODE, tp->mac_mode);
3616 udelay(40);
3617
52b02d04
MC
3618 tg3_phy_eee_adjust(tp, current_link_up);
3619
63c3a66f 3620 if (tg3_flag(tp, USE_LINKCHG_REG)) {
1da177e4
LT
3621 /* Polled via timer. */
3622 tw32_f(MAC_EVENT, 0);
3623 } else {
3624 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3625 }
3626 udelay(40);
3627
3628 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
3629 current_link_up == 1 &&
3630 tp->link_config.active_speed == SPEED_1000 &&
63c3a66f 3631 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
1da177e4
LT
3632 udelay(120);
3633 tw32_f(MAC_STATUS,
3634 (MAC_STATUS_SYNC_CHANGED |
3635 MAC_STATUS_CFG_CHANGED));
3636 udelay(40);
3637 tg3_write_mem(tp,
3638 NIC_SRAM_FIRMWARE_MBOX,
3639 NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
3640 }
3641
5e7dfd0f 3642 /* Prevent send BD corruption. */
63c3a66f 3643 if (tg3_flag(tp, CLKREQ_BUG)) {
5e7dfd0f
MC
3644 u16 oldlnkctl, newlnkctl;
3645
3646 pci_read_config_word(tp->pdev,
708ebb3a 3647 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
5e7dfd0f
MC
3648 &oldlnkctl);
3649 if (tp->link_config.active_speed == SPEED_100 ||
3650 tp->link_config.active_speed == SPEED_10)
3651 newlnkctl = oldlnkctl & ~PCI_EXP_LNKCTL_CLKREQ_EN;
3652 else
3653 newlnkctl = oldlnkctl | PCI_EXP_LNKCTL_CLKREQ_EN;
3654 if (newlnkctl != oldlnkctl)
3655 pci_write_config_word(tp->pdev,
708ebb3a 3656 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
5e7dfd0f
MC
3657 newlnkctl);
3658 }
3659
1da177e4
LT
3660 if (current_link_up != netif_carrier_ok(tp->dev)) {
3661 if (current_link_up)
3662 netif_carrier_on(tp->dev);
3663 else
3664 netif_carrier_off(tp->dev);
3665 tg3_link_report(tp);
3666 }
3667
3668 return 0;
3669}
3670
3671struct tg3_fiber_aneginfo {
3672 int state;
3673#define ANEG_STATE_UNKNOWN 0
3674#define ANEG_STATE_AN_ENABLE 1
3675#define ANEG_STATE_RESTART_INIT 2
3676#define ANEG_STATE_RESTART 3
3677#define ANEG_STATE_DISABLE_LINK_OK 4
3678#define ANEG_STATE_ABILITY_DETECT_INIT 5
3679#define ANEG_STATE_ABILITY_DETECT 6
3680#define ANEG_STATE_ACK_DETECT_INIT 7
3681#define ANEG_STATE_ACK_DETECT 8
3682#define ANEG_STATE_COMPLETE_ACK_INIT 9
3683#define ANEG_STATE_COMPLETE_ACK 10
3684#define ANEG_STATE_IDLE_DETECT_INIT 11
3685#define ANEG_STATE_IDLE_DETECT 12
3686#define ANEG_STATE_LINK_OK 13
3687#define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14
3688#define ANEG_STATE_NEXT_PAGE_WAIT 15
3689
3690 u32 flags;
3691#define MR_AN_ENABLE 0x00000001
3692#define MR_RESTART_AN 0x00000002
3693#define MR_AN_COMPLETE 0x00000004
3694#define MR_PAGE_RX 0x00000008
3695#define MR_NP_LOADED 0x00000010
3696#define MR_TOGGLE_TX 0x00000020
3697#define MR_LP_ADV_FULL_DUPLEX 0x00000040
3698#define MR_LP_ADV_HALF_DUPLEX 0x00000080
3699#define MR_LP_ADV_SYM_PAUSE 0x00000100
3700#define MR_LP_ADV_ASYM_PAUSE 0x00000200
3701#define MR_LP_ADV_REMOTE_FAULT1 0x00000400
3702#define MR_LP_ADV_REMOTE_FAULT2 0x00000800
3703#define MR_LP_ADV_NEXT_PAGE 0x00001000
3704#define MR_TOGGLE_RX 0x00002000
3705#define MR_NP_RX 0x00004000
3706
3707#define MR_LINK_OK 0x80000000
3708
3709 unsigned long link_time, cur_time;
3710
3711 u32 ability_match_cfg;
3712 int ability_match_count;
3713
3714 char ability_match, idle_match, ack_match;
3715
3716 u32 txconfig, rxconfig;
3717#define ANEG_CFG_NP 0x00000080
3718#define ANEG_CFG_ACK 0x00000040
3719#define ANEG_CFG_RF2 0x00000020
3720#define ANEG_CFG_RF1 0x00000010
3721#define ANEG_CFG_PS2 0x00000001
3722#define ANEG_CFG_PS1 0x00008000
3723#define ANEG_CFG_HD 0x00004000
3724#define ANEG_CFG_FD 0x00002000
3725#define ANEG_CFG_INVAL 0x00001f06
3726
3727};
3728#define ANEG_OK 0
3729#define ANEG_DONE 1
3730#define ANEG_TIMER_ENAB 2
3731#define ANEG_FAILED -1
3732
3733#define ANEG_STATE_SETTLE_TIME 10000
3734
3735static int tg3_fiber_aneg_smachine(struct tg3 *tp,
3736 struct tg3_fiber_aneginfo *ap)
3737{
5be73b47 3738 u16 flowctrl;
1da177e4
LT
3739 unsigned long delta;
3740 u32 rx_cfg_reg;
3741 int ret;
3742
3743 if (ap->state == ANEG_STATE_UNKNOWN) {
3744 ap->rxconfig = 0;
3745 ap->link_time = 0;
3746 ap->cur_time = 0;
3747 ap->ability_match_cfg = 0;
3748 ap->ability_match_count = 0;
3749 ap->ability_match = 0;
3750 ap->idle_match = 0;
3751 ap->ack_match = 0;
3752 }
3753 ap->cur_time++;
3754
3755 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
3756 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
3757
3758 if (rx_cfg_reg != ap->ability_match_cfg) {
3759 ap->ability_match_cfg = rx_cfg_reg;
3760 ap->ability_match = 0;
3761 ap->ability_match_count = 0;
3762 } else {
3763 if (++ap->ability_match_count > 1) {
3764 ap->ability_match = 1;
3765 ap->ability_match_cfg = rx_cfg_reg;
3766 }
3767 }
3768 if (rx_cfg_reg & ANEG_CFG_ACK)
3769 ap->ack_match = 1;
3770 else
3771 ap->ack_match = 0;
3772
3773 ap->idle_match = 0;
3774 } else {
3775 ap->idle_match = 1;
3776 ap->ability_match_cfg = 0;
3777 ap->ability_match_count = 0;
3778 ap->ability_match = 0;
3779 ap->ack_match = 0;
3780
3781 rx_cfg_reg = 0;
3782 }
3783
3784 ap->rxconfig = rx_cfg_reg;
3785 ret = ANEG_OK;
3786
33f401ae 3787 switch (ap->state) {
1da177e4
LT
3788 case ANEG_STATE_UNKNOWN:
3789 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
3790 ap->state = ANEG_STATE_AN_ENABLE;
3791
3792 /* fallthru */
3793 case ANEG_STATE_AN_ENABLE:
3794 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
3795 if (ap->flags & MR_AN_ENABLE) {
3796 ap->link_time = 0;
3797 ap->cur_time = 0;
3798 ap->ability_match_cfg = 0;
3799 ap->ability_match_count = 0;
3800 ap->ability_match = 0;
3801 ap->idle_match = 0;
3802 ap->ack_match = 0;
3803
3804 ap->state = ANEG_STATE_RESTART_INIT;
3805 } else {
3806 ap->state = ANEG_STATE_DISABLE_LINK_OK;
3807 }
3808 break;
3809
3810 case ANEG_STATE_RESTART_INIT:
3811 ap->link_time = ap->cur_time;
3812 ap->flags &= ~(MR_NP_LOADED);
3813 ap->txconfig = 0;
3814 tw32(MAC_TX_AUTO_NEG, 0);
3815 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
3816 tw32_f(MAC_MODE, tp->mac_mode);
3817 udelay(40);
3818
3819 ret = ANEG_TIMER_ENAB;
3820 ap->state = ANEG_STATE_RESTART;
3821
3822 /* fallthru */
3823 case ANEG_STATE_RESTART:
3824 delta = ap->cur_time - ap->link_time;
859a5887 3825 if (delta > ANEG_STATE_SETTLE_TIME)
1da177e4 3826 ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
859a5887 3827 else
1da177e4 3828 ret = ANEG_TIMER_ENAB;
1da177e4
LT
3829 break;
3830
3831 case ANEG_STATE_DISABLE_LINK_OK:
3832 ret = ANEG_DONE;
3833 break;
3834
3835 case ANEG_STATE_ABILITY_DETECT_INIT:
3836 ap->flags &= ~(MR_TOGGLE_TX);
5be73b47
MC
3837 ap->txconfig = ANEG_CFG_FD;
3838 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
3839 if (flowctrl & ADVERTISE_1000XPAUSE)
3840 ap->txconfig |= ANEG_CFG_PS1;
3841 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
3842 ap->txconfig |= ANEG_CFG_PS2;
1da177e4
LT
3843 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
3844 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
3845 tw32_f(MAC_MODE, tp->mac_mode);
3846 udelay(40);
3847
3848 ap->state = ANEG_STATE_ABILITY_DETECT;
3849 break;
3850
3851 case ANEG_STATE_ABILITY_DETECT:
859a5887 3852 if (ap->ability_match != 0 && ap->rxconfig != 0)
1da177e4 3853 ap->state = ANEG_STATE_ACK_DETECT_INIT;
1da177e4
LT
3854 break;
3855
3856 case ANEG_STATE_ACK_DETECT_INIT:
3857 ap->txconfig |= ANEG_CFG_ACK;
3858 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
3859 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
3860 tw32_f(MAC_MODE, tp->mac_mode);
3861 udelay(40);
3862
3863 ap->state = ANEG_STATE_ACK_DETECT;
3864
3865 /* fallthru */
3866 case ANEG_STATE_ACK_DETECT:
3867 if (ap->ack_match != 0) {
3868 if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
3869 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
3870 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
3871 } else {
3872 ap->state = ANEG_STATE_AN_ENABLE;
3873 }
3874 } else if (ap->ability_match != 0 &&
3875 ap->rxconfig == 0) {
3876 ap->state = ANEG_STATE_AN_ENABLE;
3877 }
3878 break;
3879
3880 case ANEG_STATE_COMPLETE_ACK_INIT:
3881 if (ap->rxconfig & ANEG_CFG_INVAL) {
3882 ret = ANEG_FAILED;
3883 break;
3884 }
3885 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
3886 MR_LP_ADV_HALF_DUPLEX |
3887 MR_LP_ADV_SYM_PAUSE |
3888 MR_LP_ADV_ASYM_PAUSE |
3889 MR_LP_ADV_REMOTE_FAULT1 |
3890 MR_LP_ADV_REMOTE_FAULT2 |
3891 MR_LP_ADV_NEXT_PAGE |
3892 MR_TOGGLE_RX |
3893 MR_NP_RX);
3894 if (ap->rxconfig & ANEG_CFG_FD)
3895 ap->flags |= MR_LP_ADV_FULL_DUPLEX;
3896 if (ap->rxconfig & ANEG_CFG_HD)
3897 ap->flags |= MR_LP_ADV_HALF_DUPLEX;
3898 if (ap->rxconfig & ANEG_CFG_PS1)
3899 ap->flags |= MR_LP_ADV_SYM_PAUSE;
3900 if (ap->rxconfig & ANEG_CFG_PS2)
3901 ap->flags |= MR_LP_ADV_ASYM_PAUSE;
3902 if (ap->rxconfig & ANEG_CFG_RF1)
3903 ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
3904 if (ap->rxconfig & ANEG_CFG_RF2)
3905 ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
3906 if (ap->rxconfig & ANEG_CFG_NP)
3907 ap->flags |= MR_LP_ADV_NEXT_PAGE;
3908
3909 ap->link_time = ap->cur_time;
3910
3911 ap->flags ^= (MR_TOGGLE_TX);
3912 if (ap->rxconfig & 0x0008)
3913 ap->flags |= MR_TOGGLE_RX;
3914 if (ap->rxconfig & ANEG_CFG_NP)
3915 ap->flags |= MR_NP_RX;
3916 ap->flags |= MR_PAGE_RX;
3917
3918 ap->state = ANEG_STATE_COMPLETE_ACK;
3919 ret = ANEG_TIMER_ENAB;
3920 break;
3921
3922 case ANEG_STATE_COMPLETE_ACK:
3923 if (ap->ability_match != 0 &&
3924 ap->rxconfig == 0) {
3925 ap->state = ANEG_STATE_AN_ENABLE;
3926 break;
3927 }
3928 delta = ap->cur_time - ap->link_time;
3929 if (delta > ANEG_STATE_SETTLE_TIME) {
3930 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
3931 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
3932 } else {
3933 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
3934 !(ap->flags & MR_NP_RX)) {
3935 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
3936 } else {
3937 ret = ANEG_FAILED;
3938 }
3939 }
3940 }
3941 break;
3942
3943 case ANEG_STATE_IDLE_DETECT_INIT:
3944 ap->link_time = ap->cur_time;
3945 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
3946 tw32_f(MAC_MODE, tp->mac_mode);
3947 udelay(40);
3948
3949 ap->state = ANEG_STATE_IDLE_DETECT;
3950 ret = ANEG_TIMER_ENAB;
3951 break;
3952
3953 case ANEG_STATE_IDLE_DETECT:
3954 if (ap->ability_match != 0 &&
3955 ap->rxconfig == 0) {
3956 ap->state = ANEG_STATE_AN_ENABLE;
3957 break;
3958 }
3959 delta = ap->cur_time - ap->link_time;
3960 if (delta > ANEG_STATE_SETTLE_TIME) {
3961 /* XXX another gem from the Broadcom driver :( */
3962 ap->state = ANEG_STATE_LINK_OK;
3963 }
3964 break;
3965
3966 case ANEG_STATE_LINK_OK:
3967 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
3968 ret = ANEG_DONE;
3969 break;
3970
3971 case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
3972 /* ??? unimplemented */
3973 break;
3974
3975 case ANEG_STATE_NEXT_PAGE_WAIT:
3976 /* ??? unimplemented */
3977 break;
3978
3979 default:
3980 ret = ANEG_FAILED;
3981 break;
855e1111 3982 }
1da177e4
LT
3983
3984 return ret;
3985}
3986
5be73b47 3987static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
1da177e4
LT
3988{
3989 int res = 0;
3990 struct tg3_fiber_aneginfo aninfo;
3991 int status = ANEG_FAILED;
3992 unsigned int tick;
3993 u32 tmp;
3994
3995 tw32_f(MAC_TX_AUTO_NEG, 0);
3996
3997 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
3998 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
3999 udelay(40);
4000
4001 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
4002 udelay(40);
4003
4004 memset(&aninfo, 0, sizeof(aninfo));
4005 aninfo.flags |= MR_AN_ENABLE;
4006 aninfo.state = ANEG_STATE_UNKNOWN;
4007 aninfo.cur_time = 0;
4008 tick = 0;
4009 while (++tick < 195000) {
4010 status = tg3_fiber_aneg_smachine(tp, &aninfo);
4011 if (status == ANEG_DONE || status == ANEG_FAILED)
4012 break;
4013
4014 udelay(1);
4015 }
4016
4017 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4018 tw32_f(MAC_MODE, tp->mac_mode);
4019 udelay(40);
4020
5be73b47
MC
4021 *txflags = aninfo.txconfig;
4022 *rxflags = aninfo.flags;
1da177e4
LT
4023
4024 if (status == ANEG_DONE &&
4025 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
4026 MR_LP_ADV_FULL_DUPLEX)))
4027 res = 1;
4028
4029 return res;
4030}
4031
4032static void tg3_init_bcm8002(struct tg3 *tp)
4033{
4034 u32 mac_status = tr32(MAC_STATUS);
4035 int i;
4036
4037 /* Reset when initting first time or we have a link. */
63c3a66f 4038 if (tg3_flag(tp, INIT_COMPLETE) &&
1da177e4
LT
4039 !(mac_status & MAC_STATUS_PCS_SYNCED))
4040 return;
4041
4042 /* Set PLL lock range. */
4043 tg3_writephy(tp, 0x16, 0x8007);
4044
4045 /* SW reset */
4046 tg3_writephy(tp, MII_BMCR, BMCR_RESET);
4047
4048 /* Wait for reset to complete. */
4049 /* XXX schedule_timeout() ... */
4050 for (i = 0; i < 500; i++)
4051 udelay(10);
4052
4053 /* Config mode; select PMA/Ch 1 regs. */
4054 tg3_writephy(tp, 0x10, 0x8411);
4055
4056 /* Enable auto-lock and comdet, select txclk for tx. */
4057 tg3_writephy(tp, 0x11, 0x0a10);
4058
4059 tg3_writephy(tp, 0x18, 0x00a0);
4060 tg3_writephy(tp, 0x16, 0x41ff);
4061
4062 /* Assert and deassert POR. */
4063 tg3_writephy(tp, 0x13, 0x0400);
4064 udelay(40);
4065 tg3_writephy(tp, 0x13, 0x0000);
4066
4067 tg3_writephy(tp, 0x11, 0x0a50);
4068 udelay(40);
4069 tg3_writephy(tp, 0x11, 0x0a10);
4070
4071 /* Wait for signal to stabilize */
4072 /* XXX schedule_timeout() ... */
4073 for (i = 0; i < 15000; i++)
4074 udelay(10);
4075
4076 /* Deselect the channel register so we can read the PHYID
4077 * later.
4078 */
4079 tg3_writephy(tp, 0x10, 0x8011);
4080}
4081
4082static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
4083{
82cd3d11 4084 u16 flowctrl;
1da177e4
LT
4085 u32 sg_dig_ctrl, sg_dig_status;
4086 u32 serdes_cfg, expected_sg_dig_ctrl;
4087 int workaround, port_a;
4088 int current_link_up;
4089
4090 serdes_cfg = 0;
4091 expected_sg_dig_ctrl = 0;
4092 workaround = 0;
4093 port_a = 1;
4094 current_link_up = 0;
4095
4096 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
4097 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
4098 workaround = 1;
4099 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
4100 port_a = 0;
4101
4102 /* preserve bits 0-11,13,14 for signal pre-emphasis */
4103 /* preserve bits 20-23 for voltage regulator */
4104 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
4105 }
4106
4107 sg_dig_ctrl = tr32(SG_DIG_CTRL);
4108
4109 if (tp->link_config.autoneg != AUTONEG_ENABLE) {
c98f6e3b 4110 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
1da177e4
LT
4111 if (workaround) {
4112 u32 val = serdes_cfg;
4113
4114 if (port_a)
4115 val |= 0xc010000;
4116 else
4117 val |= 0x4010000;
4118 tw32_f(MAC_SERDES_CFG, val);
4119 }
c98f6e3b
MC
4120
4121 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
1da177e4
LT
4122 }
4123 if (mac_status & MAC_STATUS_PCS_SYNCED) {
4124 tg3_setup_flow_control(tp, 0, 0);
4125 current_link_up = 1;
4126 }
4127 goto out;
4128 }
4129
4130 /* Want auto-negotiation. */
c98f6e3b 4131 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
1da177e4 4132
82cd3d11
MC
4133 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4134 if (flowctrl & ADVERTISE_1000XPAUSE)
4135 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
4136 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4137 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
1da177e4
LT
4138
4139 if (sg_dig_ctrl != expected_sg_dig_ctrl) {
f07e9af3 4140 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
3d3ebe74
MC
4141 tp->serdes_counter &&
4142 ((mac_status & (MAC_STATUS_PCS_SYNCED |
4143 MAC_STATUS_RCVD_CFG)) ==
4144 MAC_STATUS_PCS_SYNCED)) {
4145 tp->serdes_counter--;
4146 current_link_up = 1;
4147 goto out;
4148 }
4149restart_autoneg:
1da177e4
LT
4150 if (workaround)
4151 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
c98f6e3b 4152 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
1da177e4
LT
4153 udelay(5);
4154 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
4155
3d3ebe74 4156 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
f07e9af3 4157 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
1da177e4
LT
4158 } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
4159 MAC_STATUS_SIGNAL_DET)) {
3d3ebe74 4160 sg_dig_status = tr32(SG_DIG_STATUS);
1da177e4
LT
4161 mac_status = tr32(MAC_STATUS);
4162
c98f6e3b 4163 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
1da177e4 4164 (mac_status & MAC_STATUS_PCS_SYNCED)) {
82cd3d11
MC
4165 u32 local_adv = 0, remote_adv = 0;
4166
4167 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
4168 local_adv |= ADVERTISE_1000XPAUSE;
4169 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
4170 local_adv |= ADVERTISE_1000XPSE_ASYM;
1da177e4 4171
c98f6e3b 4172 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
82cd3d11 4173 remote_adv |= LPA_1000XPAUSE;
c98f6e3b 4174 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
82cd3d11 4175 remote_adv |= LPA_1000XPAUSE_ASYM;
1da177e4
LT
4176
4177 tg3_setup_flow_control(tp, local_adv, remote_adv);
4178 current_link_up = 1;
3d3ebe74 4179 tp->serdes_counter = 0;
f07e9af3 4180 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
c98f6e3b 4181 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
3d3ebe74
MC
4182 if (tp->serdes_counter)
4183 tp->serdes_counter--;
1da177e4
LT
4184 else {
4185 if (workaround) {
4186 u32 val = serdes_cfg;
4187
4188 if (port_a)
4189 val |= 0xc010000;
4190 else
4191 val |= 0x4010000;
4192
4193 tw32_f(MAC_SERDES_CFG, val);
4194 }
4195
c98f6e3b 4196 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
1da177e4
LT
4197 udelay(40);
4198
4199 /* Link parallel detection - link is up */
4200 /* only if we have PCS_SYNC and not */
4201 /* receiving config code words */
4202 mac_status = tr32(MAC_STATUS);
4203 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
4204 !(mac_status & MAC_STATUS_RCVD_CFG)) {
4205 tg3_setup_flow_control(tp, 0, 0);
4206 current_link_up = 1;
f07e9af3
MC
4207 tp->phy_flags |=
4208 TG3_PHYFLG_PARALLEL_DETECT;
3d3ebe74
MC
4209 tp->serdes_counter =
4210 SERDES_PARALLEL_DET_TIMEOUT;
4211 } else
4212 goto restart_autoneg;
1da177e4
LT
4213 }
4214 }
3d3ebe74
MC
4215 } else {
4216 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
f07e9af3 4217 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
1da177e4
LT
4218 }
4219
4220out:
4221 return current_link_up;
4222}
4223
4224static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
4225{
4226 int current_link_up = 0;
4227
5cf64b8a 4228 if (!(mac_status & MAC_STATUS_PCS_SYNCED))
1da177e4 4229 goto out;
1da177e4
LT
4230
4231 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5be73b47 4232 u32 txflags, rxflags;
1da177e4 4233 int i;
6aa20a22 4234
5be73b47
MC
4235 if (fiber_autoneg(tp, &txflags, &rxflags)) {
4236 u32 local_adv = 0, remote_adv = 0;
1da177e4 4237
5be73b47
MC
4238 if (txflags & ANEG_CFG_PS1)
4239 local_adv |= ADVERTISE_1000XPAUSE;
4240 if (txflags & ANEG_CFG_PS2)
4241 local_adv |= ADVERTISE_1000XPSE_ASYM;
4242
4243 if (rxflags & MR_LP_ADV_SYM_PAUSE)
4244 remote_adv |= LPA_1000XPAUSE;
4245 if (rxflags & MR_LP_ADV_ASYM_PAUSE)
4246 remote_adv |= LPA_1000XPAUSE_ASYM;
1da177e4
LT
4247
4248 tg3_setup_flow_control(tp, local_adv, remote_adv);
4249
1da177e4
LT
4250 current_link_up = 1;
4251 }
4252 for (i = 0; i < 30; i++) {
4253 udelay(20);
4254 tw32_f(MAC_STATUS,
4255 (MAC_STATUS_SYNC_CHANGED |
4256 MAC_STATUS_CFG_CHANGED));
4257 udelay(40);
4258 if ((tr32(MAC_STATUS) &
4259 (MAC_STATUS_SYNC_CHANGED |
4260 MAC_STATUS_CFG_CHANGED)) == 0)
4261 break;
4262 }
4263
4264 mac_status = tr32(MAC_STATUS);
4265 if (current_link_up == 0 &&
4266 (mac_status & MAC_STATUS_PCS_SYNCED) &&
4267 !(mac_status & MAC_STATUS_RCVD_CFG))
4268 current_link_up = 1;
4269 } else {
5be73b47
MC
4270 tg3_setup_flow_control(tp, 0, 0);
4271
1da177e4
LT
4272 /* Forcing 1000FD link up. */
4273 current_link_up = 1;
1da177e4
LT
4274
4275 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
4276 udelay(40);
e8f3f6ca
MC
4277
4278 tw32_f(MAC_MODE, tp->mac_mode);
4279 udelay(40);
1da177e4
LT
4280 }
4281
4282out:
4283 return current_link_up;
4284}
4285
4286static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
4287{
4288 u32 orig_pause_cfg;
4289 u16 orig_active_speed;
4290 u8 orig_active_duplex;
4291 u32 mac_status;
4292 int current_link_up;
4293 int i;
4294
8d018621 4295 orig_pause_cfg = tp->link_config.active_flowctrl;
1da177e4
LT
4296 orig_active_speed = tp->link_config.active_speed;
4297 orig_active_duplex = tp->link_config.active_duplex;
4298
63c3a66f 4299 if (!tg3_flag(tp, HW_AUTONEG) &&
1da177e4 4300 netif_carrier_ok(tp->dev) &&
63c3a66f 4301 tg3_flag(tp, INIT_COMPLETE)) {
1da177e4
LT
4302 mac_status = tr32(MAC_STATUS);
4303 mac_status &= (MAC_STATUS_PCS_SYNCED |
4304 MAC_STATUS_SIGNAL_DET |
4305 MAC_STATUS_CFG_CHANGED |
4306 MAC_STATUS_RCVD_CFG);
4307 if (mac_status == (MAC_STATUS_PCS_SYNCED |
4308 MAC_STATUS_SIGNAL_DET)) {
4309 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
4310 MAC_STATUS_CFG_CHANGED));
4311 return 0;
4312 }
4313 }
4314
4315 tw32_f(MAC_TX_AUTO_NEG, 0);
4316
4317 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
4318 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
4319 tw32_f(MAC_MODE, tp->mac_mode);
4320 udelay(40);
4321
79eb6904 4322 if (tp->phy_id == TG3_PHY_ID_BCM8002)
1da177e4
LT
4323 tg3_init_bcm8002(tp);
4324
4325 /* Enable link change event even when serdes polling. */
4326 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
4327 udelay(40);
4328
4329 current_link_up = 0;
4330 mac_status = tr32(MAC_STATUS);
4331
63c3a66f 4332 if (tg3_flag(tp, HW_AUTONEG))
1da177e4
LT
4333 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
4334 else
4335 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
4336
898a56f8 4337 tp->napi[0].hw_status->status =
1da177e4 4338 (SD_STATUS_UPDATED |
898a56f8 4339 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
1da177e4
LT
4340
4341 for (i = 0; i < 100; i++) {
4342 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
4343 MAC_STATUS_CFG_CHANGED));
4344 udelay(5);
4345 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
3d3ebe74
MC
4346 MAC_STATUS_CFG_CHANGED |
4347 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
1da177e4
LT
4348 break;
4349 }
4350
4351 mac_status = tr32(MAC_STATUS);
4352 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
4353 current_link_up = 0;
3d3ebe74
MC
4354 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
4355 tp->serdes_counter == 0) {
1da177e4
LT
4356 tw32_f(MAC_MODE, (tp->mac_mode |
4357 MAC_MODE_SEND_CONFIGS));
4358 udelay(1);
4359 tw32_f(MAC_MODE, tp->mac_mode);
4360 }
4361 }
4362
4363 if (current_link_up == 1) {
4364 tp->link_config.active_speed = SPEED_1000;
4365 tp->link_config.active_duplex = DUPLEX_FULL;
4366 tw32(MAC_LED_CTRL, (tp->led_ctrl |
4367 LED_CTRL_LNKLED_OVERRIDE |
4368 LED_CTRL_1000MBPS_ON));
4369 } else {
4370 tp->link_config.active_speed = SPEED_INVALID;
4371 tp->link_config.active_duplex = DUPLEX_INVALID;
4372 tw32(MAC_LED_CTRL, (tp->led_ctrl |
4373 LED_CTRL_LNKLED_OVERRIDE |
4374 LED_CTRL_TRAFFIC_OVERRIDE));
4375 }
4376
4377 if (current_link_up != netif_carrier_ok(tp->dev)) {
4378 if (current_link_up)
4379 netif_carrier_on(tp->dev);
4380 else
4381 netif_carrier_off(tp->dev);
4382 tg3_link_report(tp);
4383 } else {
8d018621 4384 u32 now_pause_cfg = tp->link_config.active_flowctrl;
1da177e4
LT
4385 if (orig_pause_cfg != now_pause_cfg ||
4386 orig_active_speed != tp->link_config.active_speed ||
4387 orig_active_duplex != tp->link_config.active_duplex)
4388 tg3_link_report(tp);
4389 }
4390
4391 return 0;
4392}
4393
747e8f8b
MC
4394static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
4395{
4396 int current_link_up, err = 0;
4397 u32 bmsr, bmcr;
4398 u16 current_speed;
4399 u8 current_duplex;
ef167e27 4400 u32 local_adv, remote_adv;
747e8f8b
MC
4401
4402 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4403 tw32_f(MAC_MODE, tp->mac_mode);
4404 udelay(40);
4405
4406 tw32(MAC_EVENT, 0);
4407
4408 tw32_f(MAC_STATUS,
4409 (MAC_STATUS_SYNC_CHANGED |
4410 MAC_STATUS_CFG_CHANGED |
4411 MAC_STATUS_MI_COMPLETION |
4412 MAC_STATUS_LNKSTATE_CHANGED));
4413 udelay(40);
4414
4415 if (force_reset)
4416 tg3_phy_reset(tp);
4417
4418 current_link_up = 0;
4419 current_speed = SPEED_INVALID;
4420 current_duplex = DUPLEX_INVALID;
4421
4422 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
4423 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
d4d2c558
MC
4424 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
4425 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
4426 bmsr |= BMSR_LSTATUS;
4427 else
4428 bmsr &= ~BMSR_LSTATUS;
4429 }
747e8f8b
MC
4430
4431 err |= tg3_readphy(tp, MII_BMCR, &bmcr);
4432
4433 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
f07e9af3 4434 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
747e8f8b
MC
4435 /* do nothing, just check for link up at the end */
4436 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4437 u32 adv, new_adv;
4438
4439 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
4440 new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
4441 ADVERTISE_1000XPAUSE |
4442 ADVERTISE_1000XPSE_ASYM |
4443 ADVERTISE_SLCT);
4444
ba4d07a8 4445 new_adv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
747e8f8b
MC
4446
4447 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
4448 new_adv |= ADVERTISE_1000XHALF;
4449 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
4450 new_adv |= ADVERTISE_1000XFULL;
4451
4452 if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) {
4453 tg3_writephy(tp, MII_ADVERTISE, new_adv);
4454 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
4455 tg3_writephy(tp, MII_BMCR, bmcr);
4456
4457 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3d3ebe74 4458 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
f07e9af3 4459 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
747e8f8b
MC
4460
4461 return err;
4462 }
4463 } else {
4464 u32 new_bmcr;
4465
4466 bmcr &= ~BMCR_SPEED1000;
4467 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
4468
4469 if (tp->link_config.duplex == DUPLEX_FULL)
4470 new_bmcr |= BMCR_FULLDPLX;
4471
4472 if (new_bmcr != bmcr) {
4473 /* BMCR_SPEED1000 is a reserved bit that needs
4474 * to be set on write.
4475 */
4476 new_bmcr |= BMCR_SPEED1000;
4477
4478 /* Force a linkdown */
4479 if (netif_carrier_ok(tp->dev)) {
4480 u32 adv;
4481
4482 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
4483 adv &= ~(ADVERTISE_1000XFULL |
4484 ADVERTISE_1000XHALF |
4485 ADVERTISE_SLCT);
4486 tg3_writephy(tp, MII_ADVERTISE, adv);
4487 tg3_writephy(tp, MII_BMCR, bmcr |
4488 BMCR_ANRESTART |
4489 BMCR_ANENABLE);
4490 udelay(10);
4491 netif_carrier_off(tp->dev);
4492 }
4493 tg3_writephy(tp, MII_BMCR, new_bmcr);
4494 bmcr = new_bmcr;
4495 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
4496 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
d4d2c558
MC
4497 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
4498 ASIC_REV_5714) {
4499 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
4500 bmsr |= BMSR_LSTATUS;
4501 else
4502 bmsr &= ~BMSR_LSTATUS;
4503 }
f07e9af3 4504 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
747e8f8b
MC
4505 }
4506 }
4507
4508 if (bmsr & BMSR_LSTATUS) {
4509 current_speed = SPEED_1000;
4510 current_link_up = 1;
4511 if (bmcr & BMCR_FULLDPLX)
4512 current_duplex = DUPLEX_FULL;
4513 else
4514 current_duplex = DUPLEX_HALF;
4515
ef167e27
MC
4516 local_adv = 0;
4517 remote_adv = 0;
4518
747e8f8b 4519 if (bmcr & BMCR_ANENABLE) {
ef167e27 4520 u32 common;
747e8f8b
MC
4521
4522 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
4523 err |= tg3_readphy(tp, MII_LPA, &remote_adv);
4524 common = local_adv & remote_adv;
4525 if (common & (ADVERTISE_1000XHALF |
4526 ADVERTISE_1000XFULL)) {
4527 if (common & ADVERTISE_1000XFULL)
4528 current_duplex = DUPLEX_FULL;
4529 else
4530 current_duplex = DUPLEX_HALF;
63c3a66f 4531 } else if (!tg3_flag(tp, 5780_CLASS)) {
57d8b880 4532 /* Link is up via parallel detect */
859a5887 4533 } else {
747e8f8b 4534 current_link_up = 0;
859a5887 4535 }
747e8f8b
MC
4536 }
4537 }
4538
ef167e27
MC
4539 if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
4540 tg3_setup_flow_control(tp, local_adv, remote_adv);
4541
747e8f8b
MC
4542 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
4543 if (tp->link_config.active_duplex == DUPLEX_HALF)
4544 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
4545
4546 tw32_f(MAC_MODE, tp->mac_mode);
4547 udelay(40);
4548
4549 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
4550
4551 tp->link_config.active_speed = current_speed;
4552 tp->link_config.active_duplex = current_duplex;
4553
4554 if (current_link_up != netif_carrier_ok(tp->dev)) {
4555 if (current_link_up)
4556 netif_carrier_on(tp->dev);
4557 else {
4558 netif_carrier_off(tp->dev);
f07e9af3 4559 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
747e8f8b
MC
4560 }
4561 tg3_link_report(tp);
4562 }
4563 return err;
4564}
4565
4566static void tg3_serdes_parallel_detect(struct tg3 *tp)
4567{
3d3ebe74 4568 if (tp->serdes_counter) {
747e8f8b 4569 /* Give autoneg time to complete. */
3d3ebe74 4570 tp->serdes_counter--;
747e8f8b
MC
4571 return;
4572 }
c6cdf436 4573
747e8f8b
MC
4574 if (!netif_carrier_ok(tp->dev) &&
4575 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
4576 u32 bmcr;
4577
4578 tg3_readphy(tp, MII_BMCR, &bmcr);
4579 if (bmcr & BMCR_ANENABLE) {
4580 u32 phy1, phy2;
4581
4582 /* Select shadow register 0x1f */
f08aa1a8
MC
4583 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
4584 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
747e8f8b
MC
4585
4586 /* Select expansion interrupt status register */
f08aa1a8
MC
4587 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
4588 MII_TG3_DSP_EXP1_INT_STAT);
4589 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
4590 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
747e8f8b
MC
4591
4592 if ((phy1 & 0x10) && !(phy2 & 0x20)) {
4593 /* We have signal detect and not receiving
4594 * config code words, link is up by parallel
4595 * detection.
4596 */
4597
4598 bmcr &= ~BMCR_ANENABLE;
4599 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
4600 tg3_writephy(tp, MII_BMCR, bmcr);
f07e9af3 4601 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
747e8f8b
MC
4602 }
4603 }
859a5887
MC
4604 } else if (netif_carrier_ok(tp->dev) &&
4605 (tp->link_config.autoneg == AUTONEG_ENABLE) &&
f07e9af3 4606 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
747e8f8b
MC
4607 u32 phy2;
4608
4609 /* Select expansion interrupt status register */
f08aa1a8
MC
4610 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
4611 MII_TG3_DSP_EXP1_INT_STAT);
4612 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
747e8f8b
MC
4613 if (phy2 & 0x20) {
4614 u32 bmcr;
4615
4616 /* Config code words received, turn on autoneg. */
4617 tg3_readphy(tp, MII_BMCR, &bmcr);
4618 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
4619
f07e9af3 4620 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
747e8f8b
MC
4621
4622 }
4623 }
4624}
4625
1da177e4
LT
4626static int tg3_setup_phy(struct tg3 *tp, int force_reset)
4627{
f2096f94 4628 u32 val;
1da177e4
LT
4629 int err;
4630
f07e9af3 4631 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
1da177e4 4632 err = tg3_setup_fiber_phy(tp, force_reset);
f07e9af3 4633 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
747e8f8b 4634 err = tg3_setup_fiber_mii_phy(tp, force_reset);
859a5887 4635 else
1da177e4 4636 err = tg3_setup_copper_phy(tp, force_reset);
1da177e4 4637
bcb37f6c 4638 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
f2096f94 4639 u32 scale;
aa6c91fe
MC
4640
4641 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
4642 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
4643 scale = 65;
4644 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
4645 scale = 6;
4646 else
4647 scale = 12;
4648
4649 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
4650 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
4651 tw32(GRC_MISC_CFG, val);
4652 }
4653
f2096f94
MC
4654 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
4655 (6 << TX_LENGTHS_IPG_SHIFT);
4656 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
4657 val |= tr32(MAC_TX_LENGTHS) &
4658 (TX_LENGTHS_JMB_FRM_LEN_MSK |
4659 TX_LENGTHS_CNT_DWN_VAL_MSK);
4660
1da177e4
LT
4661 if (tp->link_config.active_speed == SPEED_1000 &&
4662 tp->link_config.active_duplex == DUPLEX_HALF)
f2096f94
MC
4663 tw32(MAC_TX_LENGTHS, val |
4664 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
1da177e4 4665 else
f2096f94
MC
4666 tw32(MAC_TX_LENGTHS, val |
4667 (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
1da177e4 4668
63c3a66f 4669 if (!tg3_flag(tp, 5705_PLUS)) {
1da177e4
LT
4670 if (netif_carrier_ok(tp->dev)) {
4671 tw32(HOSTCC_STAT_COAL_TICKS,
15f9850d 4672 tp->coal.stats_block_coalesce_usecs);
1da177e4
LT
4673 } else {
4674 tw32(HOSTCC_STAT_COAL_TICKS, 0);
4675 }
4676 }
4677
63c3a66f 4678 if (tg3_flag(tp, ASPM_WORKAROUND)) {
f2096f94 4679 val = tr32(PCIE_PWR_MGMT_THRESH);
8ed5d97e
MC
4680 if (!netif_carrier_ok(tp->dev))
4681 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
4682 tp->pwrmgmt_thresh;
4683 else
4684 val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
4685 tw32(PCIE_PWR_MGMT_THRESH, val);
4686 }
4687
1da177e4
LT
4688 return err;
4689}
4690
66cfd1bd
MC
4691static inline int tg3_irq_sync(struct tg3 *tp)
4692{
4693 return tp->irq_sync;
4694}
4695
97bd8e49
MC
4696static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
4697{
4698 int i;
4699
4700 dst = (u32 *)((u8 *)dst + off);
4701 for (i = 0; i < len; i += sizeof(u32))
4702 *dst++ = tr32(off + i);
4703}
4704
4705static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
4706{
4707 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
4708 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
4709 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
4710 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
4711 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
4712 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
4713 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
4714 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
4715 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
4716 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
4717 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
4718 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
4719 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
4720 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
4721 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
4722 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
4723 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
4724 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
4725 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
4726
63c3a66f 4727 if (tg3_flag(tp, SUPPORT_MSIX))
97bd8e49
MC
4728 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
4729
4730 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
4731 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
4732 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
4733 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
4734 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
4735 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
4736 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
4737 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
4738
63c3a66f 4739 if (!tg3_flag(tp, 5705_PLUS)) {
97bd8e49
MC
4740 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
4741 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
4742 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
4743 }
4744
4745 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
4746 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
4747 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
4748 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
4749 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
4750
63c3a66f 4751 if (tg3_flag(tp, NVRAM))
97bd8e49
MC
4752 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
4753}
4754
4755static void tg3_dump_state(struct tg3 *tp)
4756{
4757 int i;
4758 u32 *regs;
4759
4760 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
4761 if (!regs) {
4762 netdev_err(tp->dev, "Failed allocating register dump buffer\n");
4763 return;
4764 }
4765
63c3a66f 4766 if (tg3_flag(tp, PCI_EXPRESS)) {
97bd8e49
MC
4767 /* Read up to but not including private PCI registers */
4768 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
4769 regs[i / sizeof(u32)] = tr32(i);
4770 } else
4771 tg3_dump_legacy_regs(tp, regs);
4772
4773 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
4774 if (!regs[i + 0] && !regs[i + 1] &&
4775 !regs[i + 2] && !regs[i + 3])
4776 continue;
4777
4778 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
4779 i * 4,
4780 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
4781 }
4782
4783 kfree(regs);
4784
4785 for (i = 0; i < tp->irq_cnt; i++) {
4786 struct tg3_napi *tnapi = &tp->napi[i];
4787
4788 /* SW status block */
4789 netdev_err(tp->dev,
4790 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
4791 i,
4792 tnapi->hw_status->status,
4793 tnapi->hw_status->status_tag,
4794 tnapi->hw_status->rx_jumbo_consumer,
4795 tnapi->hw_status->rx_consumer,
4796 tnapi->hw_status->rx_mini_consumer,
4797 tnapi->hw_status->idx[0].rx_producer,
4798 tnapi->hw_status->idx[0].tx_consumer);
4799
4800 netdev_err(tp->dev,
4801 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
4802 i,
4803 tnapi->last_tag, tnapi->last_irq_tag,
4804 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
4805 tnapi->rx_rcb_ptr,
4806 tnapi->prodring.rx_std_prod_idx,
4807 tnapi->prodring.rx_std_cons_idx,
4808 tnapi->prodring.rx_jmb_prod_idx,
4809 tnapi->prodring.rx_jmb_cons_idx);
4810 }
4811}
4812
df3e6548
MC
4813/* This is called whenever we suspect that the system chipset is re-
4814 * ordering the sequence of MMIO to the tx send mailbox. The symptom
4815 * is bogus tx completions. We try to recover by setting the
4816 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
4817 * in the workqueue.
4818 */
4819static void tg3_tx_recover(struct tg3 *tp)
4820{
63c3a66f 4821 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
df3e6548
MC
4822 tp->write32_tx_mbox == tg3_write_indirect_mbox);
4823
5129c3a3
MC
4824 netdev_warn(tp->dev,
4825 "The system may be re-ordering memory-mapped I/O "
4826 "cycles to the network device, attempting to recover. "
4827 "Please report the problem to the driver maintainer "
4828 "and include system chipset information.\n");
df3e6548
MC
4829
4830 spin_lock(&tp->lock);
63c3a66f 4831 tg3_flag_set(tp, TX_RECOVERY_PENDING);
df3e6548
MC
4832 spin_unlock(&tp->lock);
4833}
4834
f3f3f27e 4835static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
1b2a7205 4836{
f65aac16
MC
4837 /* Tell compiler to fetch tx indices from memory. */
4838 barrier();
f3f3f27e
MC
4839 return tnapi->tx_pending -
4840 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
1b2a7205
MC
4841}
4842
1da177e4
LT
4843/* Tigon3 never reports partial packet sends. So we do not
4844 * need special logic to handle SKBs that have not had all
4845 * of their frags sent yet, like SunGEM does.
4846 */
17375d25 4847static void tg3_tx(struct tg3_napi *tnapi)
1da177e4 4848{
17375d25 4849 struct tg3 *tp = tnapi->tp;
898a56f8 4850 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
f3f3f27e 4851 u32 sw_idx = tnapi->tx_cons;
fe5f5787
MC
4852 struct netdev_queue *txq;
4853 int index = tnapi - tp->napi;
4854
63c3a66f 4855 if (tg3_flag(tp, ENABLE_TSS))
fe5f5787
MC
4856 index--;
4857
4858 txq = netdev_get_tx_queue(tp->dev, index);
1da177e4
LT
4859
4860 while (sw_idx != hw_idx) {
df8944cf 4861 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
1da177e4 4862 struct sk_buff *skb = ri->skb;
df3e6548
MC
4863 int i, tx_bug = 0;
4864
4865 if (unlikely(skb == NULL)) {
4866 tg3_tx_recover(tp);
4867 return;
4868 }
1da177e4 4869
f4188d8a 4870 pci_unmap_single(tp->pdev,
4e5e4f0d 4871 dma_unmap_addr(ri, mapping),
f4188d8a
AD
4872 skb_headlen(skb),
4873 PCI_DMA_TODEVICE);
1da177e4
LT
4874
4875 ri->skb = NULL;
4876
e01ee14d
MC
4877 while (ri->fragmented) {
4878 ri->fragmented = false;
4879 sw_idx = NEXT_TX(sw_idx);
4880 ri = &tnapi->tx_buffers[sw_idx];
4881 }
4882
1da177e4
LT
4883 sw_idx = NEXT_TX(sw_idx);
4884
4885 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
f3f3f27e 4886 ri = &tnapi->tx_buffers[sw_idx];
df3e6548
MC
4887 if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
4888 tx_bug = 1;
f4188d8a
AD
4889
4890 pci_unmap_page(tp->pdev,
4e5e4f0d 4891 dma_unmap_addr(ri, mapping),
f4188d8a
AD
4892 skb_shinfo(skb)->frags[i].size,
4893 PCI_DMA_TODEVICE);
e01ee14d
MC
4894
4895 while (ri->fragmented) {
4896 ri->fragmented = false;
4897 sw_idx = NEXT_TX(sw_idx);
4898 ri = &tnapi->tx_buffers[sw_idx];
4899 }
4900
1da177e4
LT
4901 sw_idx = NEXT_TX(sw_idx);
4902 }
4903
f47c11ee 4904 dev_kfree_skb(skb);
df3e6548
MC
4905
4906 if (unlikely(tx_bug)) {
4907 tg3_tx_recover(tp);
4908 return;
4909 }
1da177e4
LT
4910 }
4911
f3f3f27e 4912 tnapi->tx_cons = sw_idx;
1da177e4 4913
1b2a7205
MC
4914 /* Need to make the tx_cons update visible to tg3_start_xmit()
4915 * before checking for netif_queue_stopped(). Without the
4916 * memory barrier, there is a small possibility that tg3_start_xmit()
4917 * will miss it and cause the queue to be stopped forever.
4918 */
4919 smp_mb();
4920
fe5f5787 4921 if (unlikely(netif_tx_queue_stopped(txq) &&
f3f3f27e 4922 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
fe5f5787
MC
4923 __netif_tx_lock(txq, smp_processor_id());
4924 if (netif_tx_queue_stopped(txq) &&
f3f3f27e 4925 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
fe5f5787
MC
4926 netif_tx_wake_queue(txq);
4927 __netif_tx_unlock(txq);
51b91468 4928 }
1da177e4
LT
4929}
4930
2b2cdb65
MC
4931static void tg3_rx_skb_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
4932{
4933 if (!ri->skb)
4934 return;
4935
4e5e4f0d 4936 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
2b2cdb65
MC
4937 map_sz, PCI_DMA_FROMDEVICE);
4938 dev_kfree_skb_any(ri->skb);
4939 ri->skb = NULL;
4940}
4941
1da177e4
LT
4942/* Returns size of skb allocated or < 0 on error.
4943 *
4944 * We only need to fill in the address because the other members
4945 * of the RX descriptor are invariant, see tg3_init_rings.
4946 *
4947 * Note the purposeful assymetry of cpu vs. chip accesses. For
4948 * posting buffers we only dirty the first cache line of the RX
4949 * descriptor (containing the address). Whereas for the RX status
4950 * buffers the cpu only reads the last cacheline of the RX descriptor
4951 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
4952 */
86b21e59 4953static int tg3_alloc_rx_skb(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
a3896167 4954 u32 opaque_key, u32 dest_idx_unmasked)
1da177e4
LT
4955{
4956 struct tg3_rx_buffer_desc *desc;
f94e290e 4957 struct ring_info *map;
1da177e4
LT
4958 struct sk_buff *skb;
4959 dma_addr_t mapping;
4960 int skb_size, dest_idx;
4961
1da177e4
LT
4962 switch (opaque_key) {
4963 case RXD_OPAQUE_RING_STD:
2c49a44d 4964 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
21f581a5
MC
4965 desc = &tpr->rx_std[dest_idx];
4966 map = &tpr->rx_std_buffers[dest_idx];
287be12e 4967 skb_size = tp->rx_pkt_map_sz;
1da177e4
LT
4968 break;
4969
4970 case RXD_OPAQUE_RING_JUMBO:
2c49a44d 4971 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
79ed5ac7 4972 desc = &tpr->rx_jmb[dest_idx].std;
21f581a5 4973 map = &tpr->rx_jmb_buffers[dest_idx];
287be12e 4974 skb_size = TG3_RX_JMB_MAP_SZ;
1da177e4
LT
4975 break;
4976
4977 default:
4978 return -EINVAL;
855e1111 4979 }
1da177e4
LT
4980
4981 /* Do not overwrite any of the map or rp information
4982 * until we are sure we can commit to a new buffer.
4983 *
4984 * Callers depend upon this behavior and assume that
4985 * we leave everything unchanged if we fail.
4986 */
287be12e 4987 skb = netdev_alloc_skb(tp->dev, skb_size + tp->rx_offset);
1da177e4
LT
4988 if (skb == NULL)
4989 return -ENOMEM;
4990
1da177e4
LT
4991 skb_reserve(skb, tp->rx_offset);
4992
287be12e 4993 mapping = pci_map_single(tp->pdev, skb->data, skb_size,
1da177e4 4994 PCI_DMA_FROMDEVICE);
a21771dd
MC
4995 if (pci_dma_mapping_error(tp->pdev, mapping)) {
4996 dev_kfree_skb(skb);
4997 return -EIO;
4998 }
1da177e4
LT
4999
5000 map->skb = skb;
4e5e4f0d 5001 dma_unmap_addr_set(map, mapping, mapping);
1da177e4 5002
1da177e4
LT
5003 desc->addr_hi = ((u64)mapping >> 32);
5004 desc->addr_lo = ((u64)mapping & 0xffffffff);
5005
5006 return skb_size;
5007}
5008
5009/* We only need to move over in the address because the other
5010 * members of the RX descriptor are invariant. See notes above
5011 * tg3_alloc_rx_skb for full details.
5012 */
a3896167
MC
5013static void tg3_recycle_rx(struct tg3_napi *tnapi,
5014 struct tg3_rx_prodring_set *dpr,
5015 u32 opaque_key, int src_idx,
5016 u32 dest_idx_unmasked)
1da177e4 5017{
17375d25 5018 struct tg3 *tp = tnapi->tp;
1da177e4
LT
5019 struct tg3_rx_buffer_desc *src_desc, *dest_desc;
5020 struct ring_info *src_map, *dest_map;
8fea32b9 5021 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
c6cdf436 5022 int dest_idx;
1da177e4
LT
5023
5024 switch (opaque_key) {
5025 case RXD_OPAQUE_RING_STD:
2c49a44d 5026 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
a3896167
MC
5027 dest_desc = &dpr->rx_std[dest_idx];
5028 dest_map = &dpr->rx_std_buffers[dest_idx];
5029 src_desc = &spr->rx_std[src_idx];
5030 src_map = &spr->rx_std_buffers[src_idx];
1da177e4
LT
5031 break;
5032
5033 case RXD_OPAQUE_RING_JUMBO:
2c49a44d 5034 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
a3896167
MC
5035 dest_desc = &dpr->rx_jmb[dest_idx].std;
5036 dest_map = &dpr->rx_jmb_buffers[dest_idx];
5037 src_desc = &spr->rx_jmb[src_idx].std;
5038 src_map = &spr->rx_jmb_buffers[src_idx];
1da177e4
LT
5039 break;
5040
5041 default:
5042 return;
855e1111 5043 }
1da177e4
LT
5044
5045 dest_map->skb = src_map->skb;
4e5e4f0d
FT
5046 dma_unmap_addr_set(dest_map, mapping,
5047 dma_unmap_addr(src_map, mapping));
1da177e4
LT
5048 dest_desc->addr_hi = src_desc->addr_hi;
5049 dest_desc->addr_lo = src_desc->addr_lo;
e92967bf
MC
5050
5051 /* Ensure that the update to the skb happens after the physical
5052 * addresses have been transferred to the new BD location.
5053 */
5054 smp_wmb();
5055
1da177e4
LT
5056 src_map->skb = NULL;
5057}
5058
1da177e4
LT
5059/* The RX ring scheme is composed of multiple rings which post fresh
5060 * buffers to the chip, and one special ring the chip uses to report
5061 * status back to the host.
5062 *
5063 * The special ring reports the status of received packets to the
5064 * host. The chip does not write into the original descriptor the
5065 * RX buffer was obtained from. The chip simply takes the original
5066 * descriptor as provided by the host, updates the status and length
5067 * field, then writes this into the next status ring entry.
5068 *
5069 * Each ring the host uses to post buffers to the chip is described
5070 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives,
5071 * it is first placed into the on-chip ram. When the packet's length
5072 * is known, it walks down the TG3_BDINFO entries to select the ring.
5073 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
5074 * which is within the range of the new packet's length is chosen.
5075 *
5076 * The "separate ring for rx status" scheme may sound queer, but it makes
5077 * sense from a cache coherency perspective. If only the host writes
5078 * to the buffer post rings, and only the chip writes to the rx status
5079 * rings, then cache lines never move beyond shared-modified state.
5080 * If both the host and chip were to write into the same ring, cache line
5081 * eviction could occur since both entities want it in an exclusive state.
5082 */
17375d25 5083static int tg3_rx(struct tg3_napi *tnapi, int budget)
1da177e4 5084{
17375d25 5085 struct tg3 *tp = tnapi->tp;
f92905de 5086 u32 work_mask, rx_std_posted = 0;
4361935a 5087 u32 std_prod_idx, jmb_prod_idx;
72334482 5088 u32 sw_idx = tnapi->rx_rcb_ptr;
483ba50b 5089 u16 hw_idx;
1da177e4 5090 int received;
8fea32b9 5091 struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
1da177e4 5092
8d9d7cfc 5093 hw_idx = *(tnapi->rx_rcb_prod_idx);
1da177e4
LT
5094 /*
5095 * We need to order the read of hw_idx and the read of
5096 * the opaque cookie.
5097 */
5098 rmb();
1da177e4
LT
5099 work_mask = 0;
5100 received = 0;
4361935a
MC
5101 std_prod_idx = tpr->rx_std_prod_idx;
5102 jmb_prod_idx = tpr->rx_jmb_prod_idx;
1da177e4 5103 while (sw_idx != hw_idx && budget > 0) {
afc081f8 5104 struct ring_info *ri;
72334482 5105 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
1da177e4
LT
5106 unsigned int len;
5107 struct sk_buff *skb;
5108 dma_addr_t dma_addr;
5109 u32 opaque_key, desc_idx, *post_ptr;
5110
5111 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
5112 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
5113 if (opaque_key == RXD_OPAQUE_RING_STD) {
8fea32b9 5114 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
4e5e4f0d 5115 dma_addr = dma_unmap_addr(ri, mapping);
21f581a5 5116 skb = ri->skb;
4361935a 5117 post_ptr = &std_prod_idx;
f92905de 5118 rx_std_posted++;
1da177e4 5119 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
8fea32b9 5120 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
4e5e4f0d 5121 dma_addr = dma_unmap_addr(ri, mapping);
21f581a5 5122 skb = ri->skb;
4361935a 5123 post_ptr = &jmb_prod_idx;
21f581a5 5124 } else
1da177e4 5125 goto next_pkt_nopost;
1da177e4
LT
5126
5127 work_mask |= opaque_key;
5128
5129 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
5130 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
5131 drop_it:
a3896167 5132 tg3_recycle_rx(tnapi, tpr, opaque_key,
1da177e4
LT
5133 desc_idx, *post_ptr);
5134 drop_it_no_recycle:
5135 /* Other statistics kept track of by card. */
b0057c51 5136 tp->rx_dropped++;
1da177e4
LT
5137 goto next_pkt;
5138 }
5139
ad829268
MC
5140 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
5141 ETH_FCS_LEN;
1da177e4 5142
d2757fc4 5143 if (len > TG3_RX_COPY_THRESH(tp)) {
1da177e4
LT
5144 int skb_size;
5145
86b21e59 5146 skb_size = tg3_alloc_rx_skb(tp, tpr, opaque_key,
afc081f8 5147 *post_ptr);
1da177e4
LT
5148 if (skb_size < 0)
5149 goto drop_it;
5150
287be12e 5151 pci_unmap_single(tp->pdev, dma_addr, skb_size,
1da177e4
LT
5152 PCI_DMA_FROMDEVICE);
5153
61e800cf
MC
5154 /* Ensure that the update to the skb happens
5155 * after the usage of the old DMA mapping.
5156 */
5157 smp_wmb();
5158
5159 ri->skb = NULL;
5160
1da177e4
LT
5161 skb_put(skb, len);
5162 } else {
5163 struct sk_buff *copy_skb;
5164
a3896167 5165 tg3_recycle_rx(tnapi, tpr, opaque_key,
1da177e4
LT
5166 desc_idx, *post_ptr);
5167
bf933c80 5168 copy_skb = netdev_alloc_skb(tp->dev, len +
9dc7a113 5169 TG3_RAW_IP_ALIGN);
1da177e4
LT
5170 if (copy_skb == NULL)
5171 goto drop_it_no_recycle;
5172
bf933c80 5173 skb_reserve(copy_skb, TG3_RAW_IP_ALIGN);
1da177e4
LT
5174 skb_put(copy_skb, len);
5175 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
d626f62b 5176 skb_copy_from_linear_data(skb, copy_skb->data, len);
1da177e4
LT
5177 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5178
5179 /* We'll reuse the original ring buffer. */
5180 skb = copy_skb;
5181 }
5182
dc668910 5183 if ((tp->dev->features & NETIF_F_RXCSUM) &&
1da177e4
LT
5184 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
5185 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
5186 >> RXD_TCPCSUM_SHIFT) == 0xffff))
5187 skb->ip_summed = CHECKSUM_UNNECESSARY;
5188 else
bc8acf2c 5189 skb_checksum_none_assert(skb);
1da177e4
LT
5190
5191 skb->protocol = eth_type_trans(skb, tp->dev);
f7b493e0
MC
5192
5193 if (len > (tp->dev->mtu + ETH_HLEN) &&
5194 skb->protocol != htons(ETH_P_8021Q)) {
5195 dev_kfree_skb(skb);
b0057c51 5196 goto drop_it_no_recycle;
f7b493e0
MC
5197 }
5198
9dc7a113 5199 if (desc->type_flags & RXD_FLAG_VLAN &&
bf933c80
MC
5200 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
5201 __vlan_hwaccel_put_tag(skb,
5202 desc->err_vlan & RXD_VLAN_MASK);
9dc7a113 5203
bf933c80 5204 napi_gro_receive(&tnapi->napi, skb);
1da177e4 5205
1da177e4
LT
5206 received++;
5207 budget--;
5208
5209next_pkt:
5210 (*post_ptr)++;
f92905de
MC
5211
5212 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
2c49a44d
MC
5213 tpr->rx_std_prod_idx = std_prod_idx &
5214 tp->rx_std_ring_mask;
86cfe4ff
MC
5215 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
5216 tpr->rx_std_prod_idx);
f92905de
MC
5217 work_mask &= ~RXD_OPAQUE_RING_STD;
5218 rx_std_posted = 0;
5219 }
1da177e4 5220next_pkt_nopost:
483ba50b 5221 sw_idx++;
7cb32cf2 5222 sw_idx &= tp->rx_ret_ring_mask;
52f6d697
MC
5223
5224 /* Refresh hw_idx to see if there is new work */
5225 if (sw_idx == hw_idx) {
8d9d7cfc 5226 hw_idx = *(tnapi->rx_rcb_prod_idx);
52f6d697
MC
5227 rmb();
5228 }
1da177e4
LT
5229 }
5230
5231 /* ACK the status ring. */
72334482
MC
5232 tnapi->rx_rcb_ptr = sw_idx;
5233 tw32_rx_mbox(tnapi->consmbox, sw_idx);
1da177e4
LT
5234
5235 /* Refill RX ring(s). */
63c3a66f 5236 if (!tg3_flag(tp, ENABLE_RSS)) {
b196c7e4 5237 if (work_mask & RXD_OPAQUE_RING_STD) {
2c49a44d
MC
5238 tpr->rx_std_prod_idx = std_prod_idx &
5239 tp->rx_std_ring_mask;
b196c7e4
MC
5240 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
5241 tpr->rx_std_prod_idx);
5242 }
5243 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
2c49a44d
MC
5244 tpr->rx_jmb_prod_idx = jmb_prod_idx &
5245 tp->rx_jmb_ring_mask;
b196c7e4
MC
5246 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
5247 tpr->rx_jmb_prod_idx);
5248 }
5249 mmiowb();
5250 } else if (work_mask) {
5251 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
5252 * updated before the producer indices can be updated.
5253 */
5254 smp_wmb();
5255
2c49a44d
MC
5256 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
5257 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
b196c7e4 5258
e4af1af9
MC
5259 if (tnapi != &tp->napi[1])
5260 napi_schedule(&tp->napi[1].napi);
1da177e4 5261 }
1da177e4
LT
5262
5263 return received;
5264}
5265
35f2d7d0 5266static void tg3_poll_link(struct tg3 *tp)
1da177e4 5267{
1da177e4 5268 /* handle link change and other phy events */
63c3a66f 5269 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
35f2d7d0
MC
5270 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
5271
1da177e4
LT
5272 if (sblk->status & SD_STATUS_LINK_CHG) {
5273 sblk->status = SD_STATUS_UPDATED |
35f2d7d0 5274 (sblk->status & ~SD_STATUS_LINK_CHG);
f47c11ee 5275 spin_lock(&tp->lock);
63c3a66f 5276 if (tg3_flag(tp, USE_PHYLIB)) {
dd477003
MC
5277 tw32_f(MAC_STATUS,
5278 (MAC_STATUS_SYNC_CHANGED |
5279 MAC_STATUS_CFG_CHANGED |
5280 MAC_STATUS_MI_COMPLETION |
5281 MAC_STATUS_LNKSTATE_CHANGED));
5282 udelay(40);
5283 } else
5284 tg3_setup_phy(tp, 0);
f47c11ee 5285 spin_unlock(&tp->lock);
1da177e4
LT
5286 }
5287 }
35f2d7d0
MC
5288}
5289
f89f38b8
MC
5290static int tg3_rx_prodring_xfer(struct tg3 *tp,
5291 struct tg3_rx_prodring_set *dpr,
5292 struct tg3_rx_prodring_set *spr)
b196c7e4
MC
5293{
5294 u32 si, di, cpycnt, src_prod_idx;
f89f38b8 5295 int i, err = 0;
b196c7e4
MC
5296
5297 while (1) {
5298 src_prod_idx = spr->rx_std_prod_idx;
5299
5300 /* Make sure updates to the rx_std_buffers[] entries and the
5301 * standard producer index are seen in the correct order.
5302 */
5303 smp_rmb();
5304
5305 if (spr->rx_std_cons_idx == src_prod_idx)
5306 break;
5307
5308 if (spr->rx_std_cons_idx < src_prod_idx)
5309 cpycnt = src_prod_idx - spr->rx_std_cons_idx;
5310 else
2c49a44d
MC
5311 cpycnt = tp->rx_std_ring_mask + 1 -
5312 spr->rx_std_cons_idx;
b196c7e4 5313
2c49a44d
MC
5314 cpycnt = min(cpycnt,
5315 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
b196c7e4
MC
5316
5317 si = spr->rx_std_cons_idx;
5318 di = dpr->rx_std_prod_idx;
5319
e92967bf
MC
5320 for (i = di; i < di + cpycnt; i++) {
5321 if (dpr->rx_std_buffers[i].skb) {
5322 cpycnt = i - di;
f89f38b8 5323 err = -ENOSPC;
e92967bf
MC
5324 break;
5325 }
5326 }
5327
5328 if (!cpycnt)
5329 break;
5330
5331 /* Ensure that updates to the rx_std_buffers ring and the
5332 * shadowed hardware producer ring from tg3_recycle_skb() are
5333 * ordered correctly WRT the skb check above.
5334 */
5335 smp_rmb();
5336
b196c7e4
MC
5337 memcpy(&dpr->rx_std_buffers[di],
5338 &spr->rx_std_buffers[si],
5339 cpycnt * sizeof(struct ring_info));
5340
5341 for (i = 0; i < cpycnt; i++, di++, si++) {
5342 struct tg3_rx_buffer_desc *sbd, *dbd;
5343 sbd = &spr->rx_std[si];
5344 dbd = &dpr->rx_std[di];
5345 dbd->addr_hi = sbd->addr_hi;
5346 dbd->addr_lo = sbd->addr_lo;
5347 }
5348
2c49a44d
MC
5349 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
5350 tp->rx_std_ring_mask;
5351 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
5352 tp->rx_std_ring_mask;
b196c7e4
MC
5353 }
5354
5355 while (1) {
5356 src_prod_idx = spr->rx_jmb_prod_idx;
5357
5358 /* Make sure updates to the rx_jmb_buffers[] entries and
5359 * the jumbo producer index are seen in the correct order.
5360 */
5361 smp_rmb();
5362
5363 if (spr->rx_jmb_cons_idx == src_prod_idx)
5364 break;
5365
5366 if (spr->rx_jmb_cons_idx < src_prod_idx)
5367 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
5368 else
2c49a44d
MC
5369 cpycnt = tp->rx_jmb_ring_mask + 1 -
5370 spr->rx_jmb_cons_idx;
b196c7e4
MC
5371
5372 cpycnt = min(cpycnt,
2c49a44d 5373 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
b196c7e4
MC
5374
5375 si = spr->rx_jmb_cons_idx;
5376 di = dpr->rx_jmb_prod_idx;
5377
e92967bf
MC
5378 for (i = di; i < di + cpycnt; i++) {
5379 if (dpr->rx_jmb_buffers[i].skb) {
5380 cpycnt = i - di;
f89f38b8 5381 err = -ENOSPC;
e92967bf
MC
5382 break;
5383 }
5384 }
5385
5386 if (!cpycnt)
5387 break;
5388
5389 /* Ensure that updates to the rx_jmb_buffers ring and the
5390 * shadowed hardware producer ring from tg3_recycle_skb() are
5391 * ordered correctly WRT the skb check above.
5392 */
5393 smp_rmb();
5394
b196c7e4
MC
5395 memcpy(&dpr->rx_jmb_buffers[di],
5396 &spr->rx_jmb_buffers[si],
5397 cpycnt * sizeof(struct ring_info));
5398
5399 for (i = 0; i < cpycnt; i++, di++, si++) {
5400 struct tg3_rx_buffer_desc *sbd, *dbd;
5401 sbd = &spr->rx_jmb[si].std;
5402 dbd = &dpr->rx_jmb[di].std;
5403 dbd->addr_hi = sbd->addr_hi;
5404 dbd->addr_lo = sbd->addr_lo;
5405 }
5406
2c49a44d
MC
5407 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
5408 tp->rx_jmb_ring_mask;
5409 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
5410 tp->rx_jmb_ring_mask;
b196c7e4 5411 }
f89f38b8
MC
5412
5413 return err;
b196c7e4
MC
5414}
5415
35f2d7d0
MC
5416static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
5417{
5418 struct tg3 *tp = tnapi->tp;
1da177e4
LT
5419
5420 /* run TX completion thread */
f3f3f27e 5421 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
17375d25 5422 tg3_tx(tnapi);
63c3a66f 5423 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
4fd7ab59 5424 return work_done;
1da177e4
LT
5425 }
5426
1da177e4
LT
5427 /* run RX thread, within the bounds set by NAPI.
5428 * All RX "locking" is done by ensuring outside
bea3348e 5429 * code synchronizes with tg3->napi.poll()
1da177e4 5430 */
8d9d7cfc 5431 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
17375d25 5432 work_done += tg3_rx(tnapi, budget - work_done);
1da177e4 5433
63c3a66f 5434 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
8fea32b9 5435 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
f89f38b8 5436 int i, err = 0;
e4af1af9
MC
5437 u32 std_prod_idx = dpr->rx_std_prod_idx;
5438 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
b196c7e4 5439
e4af1af9 5440 for (i = 1; i < tp->irq_cnt; i++)
f89f38b8 5441 err |= tg3_rx_prodring_xfer(tp, dpr,
8fea32b9 5442 &tp->napi[i].prodring);
b196c7e4
MC
5443
5444 wmb();
5445
e4af1af9
MC
5446 if (std_prod_idx != dpr->rx_std_prod_idx)
5447 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
5448 dpr->rx_std_prod_idx);
b196c7e4 5449
e4af1af9
MC
5450 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
5451 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
5452 dpr->rx_jmb_prod_idx);
b196c7e4
MC
5453
5454 mmiowb();
f89f38b8
MC
5455
5456 if (err)
5457 tw32_f(HOSTCC_MODE, tp->coal_now);
b196c7e4
MC
5458 }
5459
6f535763
DM
5460 return work_done;
5461}
5462
35f2d7d0
MC
5463static int tg3_poll_msix(struct napi_struct *napi, int budget)
5464{
5465 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
5466 struct tg3 *tp = tnapi->tp;
5467 int work_done = 0;
5468 struct tg3_hw_status *sblk = tnapi->hw_status;
5469
5470 while (1) {
5471 work_done = tg3_poll_work(tnapi, work_done, budget);
5472
63c3a66f 5473 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
35f2d7d0
MC
5474 goto tx_recovery;
5475
5476 if (unlikely(work_done >= budget))
5477 break;
5478
c6cdf436 5479 /* tp->last_tag is used in tg3_int_reenable() below
35f2d7d0
MC
5480 * to tell the hw how much work has been processed,
5481 * so we must read it before checking for more work.
5482 */
5483 tnapi->last_tag = sblk->status_tag;
5484 tnapi->last_irq_tag = tnapi->last_tag;
5485 rmb();
5486
5487 /* check for RX/TX work to do */
6d40db7b
MC
5488 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
5489 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
35f2d7d0
MC
5490 napi_complete(napi);
5491 /* Reenable interrupts. */
5492 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
5493 mmiowb();
5494 break;
5495 }
5496 }
5497
5498 return work_done;
5499
5500tx_recovery:
5501 /* work_done is guaranteed to be less than budget. */
5502 napi_complete(napi);
5503 schedule_work(&tp->reset_task);
5504 return work_done;
5505}
5506
e64de4e6
MC
5507static void tg3_process_error(struct tg3 *tp)
5508{
5509 u32 val;
5510 bool real_error = false;
5511
63c3a66f 5512 if (tg3_flag(tp, ERROR_PROCESSED))
e64de4e6
MC
5513 return;
5514
5515 /* Check Flow Attention register */
5516 val = tr32(HOSTCC_FLOW_ATTN);
5517 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
5518 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n");
5519 real_error = true;
5520 }
5521
5522 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
5523 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n");
5524 real_error = true;
5525 }
5526
5527 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
5528 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n");
5529 real_error = true;
5530 }
5531
5532 if (!real_error)
5533 return;
5534
5535 tg3_dump_state(tp);
5536
63c3a66f 5537 tg3_flag_set(tp, ERROR_PROCESSED);
e64de4e6
MC
5538 schedule_work(&tp->reset_task);
5539}
5540
6f535763
DM
5541static int tg3_poll(struct napi_struct *napi, int budget)
5542{
8ef0442f
MC
5543 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
5544 struct tg3 *tp = tnapi->tp;
6f535763 5545 int work_done = 0;
898a56f8 5546 struct tg3_hw_status *sblk = tnapi->hw_status;
6f535763
DM
5547
5548 while (1) {
e64de4e6
MC
5549 if (sblk->status & SD_STATUS_ERROR)
5550 tg3_process_error(tp);
5551
35f2d7d0
MC
5552 tg3_poll_link(tp);
5553
17375d25 5554 work_done = tg3_poll_work(tnapi, work_done, budget);
6f535763 5555
63c3a66f 5556 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6f535763
DM
5557 goto tx_recovery;
5558
5559 if (unlikely(work_done >= budget))
5560 break;
5561
63c3a66f 5562 if (tg3_flag(tp, TAGGED_STATUS)) {
17375d25 5563 /* tp->last_tag is used in tg3_int_reenable() below
4fd7ab59
MC
5564 * to tell the hw how much work has been processed,
5565 * so we must read it before checking for more work.
5566 */
898a56f8
MC
5567 tnapi->last_tag = sblk->status_tag;
5568 tnapi->last_irq_tag = tnapi->last_tag;
4fd7ab59
MC
5569 rmb();
5570 } else
5571 sblk->status &= ~SD_STATUS_UPDATED;
6f535763 5572
17375d25 5573 if (likely(!tg3_has_work(tnapi))) {
288379f0 5574 napi_complete(napi);
17375d25 5575 tg3_int_reenable(tnapi);
6f535763
DM
5576 break;
5577 }
1da177e4
LT
5578 }
5579
bea3348e 5580 return work_done;
6f535763
DM
5581
5582tx_recovery:
4fd7ab59 5583 /* work_done is guaranteed to be less than budget. */
288379f0 5584 napi_complete(napi);
6f535763 5585 schedule_work(&tp->reset_task);
4fd7ab59 5586 return work_done;
1da177e4
LT
5587}
5588
66cfd1bd
MC
5589static void tg3_napi_disable(struct tg3 *tp)
5590{
5591 int i;
5592
5593 for (i = tp->irq_cnt - 1; i >= 0; i--)
5594 napi_disable(&tp->napi[i].napi);
5595}
5596
5597static void tg3_napi_enable(struct tg3 *tp)
5598{
5599 int i;
5600
5601 for (i = 0; i < tp->irq_cnt; i++)
5602 napi_enable(&tp->napi[i].napi);
5603}
5604
5605static void tg3_napi_init(struct tg3 *tp)
5606{
5607 int i;
5608
5609 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
5610 for (i = 1; i < tp->irq_cnt; i++)
5611 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
5612}
5613
5614static void tg3_napi_fini(struct tg3 *tp)
5615{
5616 int i;
5617
5618 for (i = 0; i < tp->irq_cnt; i++)
5619 netif_napi_del(&tp->napi[i].napi);
5620}
5621
5622static inline void tg3_netif_stop(struct tg3 *tp)
5623{
5624 tp->dev->trans_start = jiffies; /* prevent tx timeout */
5625 tg3_napi_disable(tp);
5626 netif_tx_disable(tp->dev);
5627}
5628
5629static inline void tg3_netif_start(struct tg3 *tp)
5630{
5631 /* NOTE: unconditional netif_tx_wake_all_queues is only
5632 * appropriate so long as all callers are assured to
5633 * have free tx slots (such as after tg3_init_hw)
5634 */
5635 netif_tx_wake_all_queues(tp->dev);
5636
5637 tg3_napi_enable(tp);
5638 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
5639 tg3_enable_ints(tp);
5640}
5641
f47c11ee
DM
5642static void tg3_irq_quiesce(struct tg3 *tp)
5643{
4f125f42
MC
5644 int i;
5645
f47c11ee
DM
5646 BUG_ON(tp->irq_sync);
5647
5648 tp->irq_sync = 1;
5649 smp_mb();
5650
4f125f42
MC
5651 for (i = 0; i < tp->irq_cnt; i++)
5652 synchronize_irq(tp->napi[i].irq_vec);
f47c11ee
DM
5653}
5654
f47c11ee
DM
5655/* Fully shutdown all tg3 driver activity elsewhere in the system.
5656 * If irq_sync is non-zero, then the IRQ handler must be synchronized
5657 * with as well. Most of the time, this is not necessary except when
5658 * shutting down the device.
5659 */
5660static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
5661{
46966545 5662 spin_lock_bh(&tp->lock);
f47c11ee
DM
5663 if (irq_sync)
5664 tg3_irq_quiesce(tp);
f47c11ee
DM
5665}
5666
5667static inline void tg3_full_unlock(struct tg3 *tp)
5668{
f47c11ee
DM
5669 spin_unlock_bh(&tp->lock);
5670}
5671
fcfa0a32
MC
5672/* One-shot MSI handler - Chip automatically disables interrupt
5673 * after sending MSI so driver doesn't have to do it.
5674 */
7d12e780 5675static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
fcfa0a32 5676{
09943a18
MC
5677 struct tg3_napi *tnapi = dev_id;
5678 struct tg3 *tp = tnapi->tp;
fcfa0a32 5679
898a56f8 5680 prefetch(tnapi->hw_status);
0c1d0e2b
MC
5681 if (tnapi->rx_rcb)
5682 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
fcfa0a32
MC
5683
5684 if (likely(!tg3_irq_sync(tp)))
09943a18 5685 napi_schedule(&tnapi->napi);
fcfa0a32
MC
5686
5687 return IRQ_HANDLED;
5688}
5689
88b06bc2
MC
5690/* MSI ISR - No need to check for interrupt sharing and no need to
5691 * flush status block and interrupt mailbox. PCI ordering rules
5692 * guarantee that MSI will arrive after the status block.
5693 */
7d12e780 5694static irqreturn_t tg3_msi(int irq, void *dev_id)
88b06bc2 5695{
09943a18
MC
5696 struct tg3_napi *tnapi = dev_id;
5697 struct tg3 *tp = tnapi->tp;
88b06bc2 5698
898a56f8 5699 prefetch(tnapi->hw_status);
0c1d0e2b
MC
5700 if (tnapi->rx_rcb)
5701 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
88b06bc2 5702 /*
fac9b83e 5703 * Writing any value to intr-mbox-0 clears PCI INTA# and
88b06bc2 5704 * chip-internal interrupt pending events.
fac9b83e 5705 * Writing non-zero to intr-mbox-0 additional tells the
88b06bc2
MC
5706 * NIC to stop sending us irqs, engaging "in-intr-handler"
5707 * event coalescing.
5708 */
5709 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
61487480 5710 if (likely(!tg3_irq_sync(tp)))
09943a18 5711 napi_schedule(&tnapi->napi);
61487480 5712
88b06bc2
MC
5713 return IRQ_RETVAL(1);
5714}
5715
7d12e780 5716static irqreturn_t tg3_interrupt(int irq, void *dev_id)
1da177e4 5717{
09943a18
MC
5718 struct tg3_napi *tnapi = dev_id;
5719 struct tg3 *tp = tnapi->tp;
898a56f8 5720 struct tg3_hw_status *sblk = tnapi->hw_status;
1da177e4
LT
5721 unsigned int handled = 1;
5722
1da177e4
LT
5723 /* In INTx mode, it is possible for the interrupt to arrive at
5724 * the CPU before the status block posted prior to the interrupt.
5725 * Reading the PCI State register will confirm whether the
5726 * interrupt is ours and will flush the status block.
5727 */
d18edcb2 5728 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
63c3a66f 5729 if (tg3_flag(tp, CHIP_RESETTING) ||
d18edcb2
MC
5730 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
5731 handled = 0;
f47c11ee 5732 goto out;
fac9b83e 5733 }
d18edcb2
MC
5734 }
5735
5736 /*
5737 * Writing any value to intr-mbox-0 clears PCI INTA# and
5738 * chip-internal interrupt pending events.
5739 * Writing non-zero to intr-mbox-0 additional tells the
5740 * NIC to stop sending us irqs, engaging "in-intr-handler"
5741 * event coalescing.
c04cb347
MC
5742 *
5743 * Flush the mailbox to de-assert the IRQ immediately to prevent
5744 * spurious interrupts. The flush impacts performance but
5745 * excessive spurious interrupts can be worse in some cases.
d18edcb2 5746 */
c04cb347 5747 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
d18edcb2
MC
5748 if (tg3_irq_sync(tp))
5749 goto out;
5750 sblk->status &= ~SD_STATUS_UPDATED;
17375d25 5751 if (likely(tg3_has_work(tnapi))) {
72334482 5752 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
09943a18 5753 napi_schedule(&tnapi->napi);
d18edcb2
MC
5754 } else {
5755 /* No work, shared interrupt perhaps? re-enable
5756 * interrupts, and flush that PCI write
5757 */
5758 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
5759 0x00000000);
fac9b83e 5760 }
f47c11ee 5761out:
fac9b83e
DM
5762 return IRQ_RETVAL(handled);
5763}
5764
7d12e780 5765static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
fac9b83e 5766{
09943a18
MC
5767 struct tg3_napi *tnapi = dev_id;
5768 struct tg3 *tp = tnapi->tp;
898a56f8 5769 struct tg3_hw_status *sblk = tnapi->hw_status;
fac9b83e
DM
5770 unsigned int handled = 1;
5771
fac9b83e
DM
5772 /* In INTx mode, it is possible for the interrupt to arrive at
5773 * the CPU before the status block posted prior to the interrupt.
5774 * Reading the PCI State register will confirm whether the
5775 * interrupt is ours and will flush the status block.
5776 */
898a56f8 5777 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
63c3a66f 5778 if (tg3_flag(tp, CHIP_RESETTING) ||
d18edcb2
MC
5779 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
5780 handled = 0;
f47c11ee 5781 goto out;
1da177e4 5782 }
d18edcb2
MC
5783 }
5784
5785 /*
5786 * writing any value to intr-mbox-0 clears PCI INTA# and
5787 * chip-internal interrupt pending events.
5788 * writing non-zero to intr-mbox-0 additional tells the
5789 * NIC to stop sending us irqs, engaging "in-intr-handler"
5790 * event coalescing.
c04cb347
MC
5791 *
5792 * Flush the mailbox to de-assert the IRQ immediately to prevent
5793 * spurious interrupts. The flush impacts performance but
5794 * excessive spurious interrupts can be worse in some cases.
d18edcb2 5795 */
c04cb347 5796 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
624f8e50
MC
5797
5798 /*
5799 * In a shared interrupt configuration, sometimes other devices'
5800 * interrupts will scream. We record the current status tag here
5801 * so that the above check can report that the screaming interrupts
5802 * are unhandled. Eventually they will be silenced.
5803 */
898a56f8 5804 tnapi->last_irq_tag = sblk->status_tag;
624f8e50 5805
d18edcb2
MC
5806 if (tg3_irq_sync(tp))
5807 goto out;
624f8e50 5808
72334482 5809 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
624f8e50 5810
09943a18 5811 napi_schedule(&tnapi->napi);
624f8e50 5812
f47c11ee 5813out:
1da177e4
LT
5814 return IRQ_RETVAL(handled);
5815}
5816
7938109f 5817/* ISR for interrupt test */
7d12e780 5818static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7938109f 5819{
09943a18
MC
5820 struct tg3_napi *tnapi = dev_id;
5821 struct tg3 *tp = tnapi->tp;
898a56f8 5822 struct tg3_hw_status *sblk = tnapi->hw_status;
7938109f 5823
f9804ddb
MC
5824 if ((sblk->status & SD_STATUS_UPDATED) ||
5825 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
b16250e3 5826 tg3_disable_ints(tp);
7938109f
MC
5827 return IRQ_RETVAL(1);
5828 }
5829 return IRQ_RETVAL(0);
5830}
5831
8e7a22e3 5832static int tg3_init_hw(struct tg3 *, int);
944d980e 5833static int tg3_halt(struct tg3 *, int, int);
1da177e4 5834
b9ec6c1b
MC
5835/* Restart hardware after configuration changes, self-test, etc.
5836 * Invoked with tp->lock held.
5837 */
5838static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
78c6146f
ED
5839 __releases(tp->lock)
5840 __acquires(tp->lock)
b9ec6c1b
MC
5841{
5842 int err;
5843
5844 err = tg3_init_hw(tp, reset_phy);
5845 if (err) {
5129c3a3
MC
5846 netdev_err(tp->dev,
5847 "Failed to re-initialize device, aborting\n");
b9ec6c1b
MC
5848 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
5849 tg3_full_unlock(tp);
5850 del_timer_sync(&tp->timer);
5851 tp->irq_sync = 0;
fed97810 5852 tg3_napi_enable(tp);
b9ec6c1b
MC
5853 dev_close(tp->dev);
5854 tg3_full_lock(tp, 0);
5855 }
5856 return err;
5857}
5858
1da177e4
LT
5859#ifdef CONFIG_NET_POLL_CONTROLLER
5860static void tg3_poll_controller(struct net_device *dev)
5861{
4f125f42 5862 int i;
88b06bc2
MC
5863 struct tg3 *tp = netdev_priv(dev);
5864
4f125f42 5865 for (i = 0; i < tp->irq_cnt; i++)
fe234f0e 5866 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
1da177e4
LT
5867}
5868#endif
5869
c4028958 5870static void tg3_reset_task(struct work_struct *work)
1da177e4 5871{
c4028958 5872 struct tg3 *tp = container_of(work, struct tg3, reset_task);
b02fd9e3 5873 int err;
1da177e4
LT
5874 unsigned int restart_timer;
5875
7faa006f 5876 tg3_full_lock(tp, 0);
7faa006f
MC
5877
5878 if (!netif_running(tp->dev)) {
7faa006f
MC
5879 tg3_full_unlock(tp);
5880 return;
5881 }
5882
5883 tg3_full_unlock(tp);
5884
b02fd9e3
MC
5885 tg3_phy_stop(tp);
5886
1da177e4
LT
5887 tg3_netif_stop(tp);
5888
f47c11ee 5889 tg3_full_lock(tp, 1);
1da177e4 5890
63c3a66f
JP
5891 restart_timer = tg3_flag(tp, RESTART_TIMER);
5892 tg3_flag_clear(tp, RESTART_TIMER);
1da177e4 5893
63c3a66f 5894 if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
df3e6548
MC
5895 tp->write32_tx_mbox = tg3_write32_tx_mbox;
5896 tp->write32_rx_mbox = tg3_write_flush_reg32;
63c3a66f
JP
5897 tg3_flag_set(tp, MBOX_WRITE_REORDER);
5898 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
df3e6548
MC
5899 }
5900
944d980e 5901 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
b02fd9e3
MC
5902 err = tg3_init_hw(tp, 1);
5903 if (err)
b9ec6c1b 5904 goto out;
1da177e4
LT
5905
5906 tg3_netif_start(tp);
5907
1da177e4
LT
5908 if (restart_timer)
5909 mod_timer(&tp->timer, jiffies + 1);
7faa006f 5910
b9ec6c1b 5911out:
7faa006f 5912 tg3_full_unlock(tp);
b02fd9e3
MC
5913
5914 if (!err)
5915 tg3_phy_start(tp);
1da177e4
LT
5916}
5917
5918static void tg3_tx_timeout(struct net_device *dev)
5919{
5920 struct tg3 *tp = netdev_priv(dev);
5921
b0408751 5922 if (netif_msg_tx_err(tp)) {
05dbe005 5923 netdev_err(dev, "transmit timed out, resetting\n");
97bd8e49 5924 tg3_dump_state(tp);
b0408751 5925 }
1da177e4
LT
5926
5927 schedule_work(&tp->reset_task);
5928}
5929
c58ec932
MC
5930/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
5931static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
5932{
5933 u32 base = (u32) mapping & 0xffffffff;
5934
807540ba 5935 return (base > 0xffffdcc0) && (base + len + 8 < base);
c58ec932
MC
5936}
5937
72f2afb8
MC
5938/* Test for DMA addresses > 40-bit */
5939static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
5940 int len)
5941{
5942#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
63c3a66f 5943 if (tg3_flag(tp, 40BIT_DMA_BUG))
807540ba 5944 return ((u64) mapping + len) > DMA_BIT_MASK(40);
72f2afb8
MC
5945 return 0;
5946#else
5947 return 0;
5948#endif
5949}
5950
d1a3b737 5951static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
92cd3a17
MC
5952 dma_addr_t mapping, u32 len, u32 flags,
5953 u32 mss, u32 vlan)
2ffcc981 5954{
92cd3a17
MC
5955 txbd->addr_hi = ((u64) mapping >> 32);
5956 txbd->addr_lo = ((u64) mapping & 0xffffffff);
5957 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
5958 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
2ffcc981 5959}
1da177e4 5960
84b67b27 5961static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
d1a3b737
MC
5962 dma_addr_t map, u32 len, u32 flags,
5963 u32 mss, u32 vlan)
5964{
5965 struct tg3 *tp = tnapi->tp;
5966 bool hwbug = false;
5967
5968 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
5969 hwbug = 1;
5970
5971 if (tg3_4g_overflow_test(map, len))
5972 hwbug = 1;
5973
5974 if (tg3_40bit_overflow_test(tp, map, len))
5975 hwbug = 1;
5976
e31aa987
MC
5977 if (tg3_flag(tp, 4K_FIFO_LIMIT)) {
5978 u32 tmp_flag = flags & ~TXD_FLAG_END;
5979 while (len > TG3_TX_BD_DMA_MAX) {
5980 u32 frag_len = TG3_TX_BD_DMA_MAX;
5981 len -= TG3_TX_BD_DMA_MAX;
5982
5983 if (len) {
5984 tnapi->tx_buffers[*entry].fragmented = true;
5985 /* Avoid the 8byte DMA problem */
5986 if (len <= 8) {
5987 len += TG3_TX_BD_DMA_MAX / 2;
5988 frag_len = TG3_TX_BD_DMA_MAX / 2;
5989 }
5990 } else
5991 tmp_flag = flags;
5992
5993 if (*budget) {
5994 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
5995 frag_len, tmp_flag, mss, vlan);
5996 (*budget)--;
5997 *entry = NEXT_TX(*entry);
5998 } else {
5999 hwbug = 1;
6000 break;
6001 }
6002
6003 map += frag_len;
6004 }
6005
6006 if (len) {
6007 if (*budget) {
6008 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6009 len, flags, mss, vlan);
6010 (*budget)--;
6011 *entry = NEXT_TX(*entry);
6012 } else {
6013 hwbug = 1;
6014 }
6015 }
6016 } else {
84b67b27
MC
6017 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6018 len, flags, mss, vlan);
e31aa987
MC
6019 *entry = NEXT_TX(*entry);
6020 }
d1a3b737
MC
6021
6022 return hwbug;
6023}
6024
0d681b27 6025static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
432aa7ed
MC
6026{
6027 int i;
0d681b27 6028 struct sk_buff *skb;
df8944cf 6029 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
432aa7ed 6030
0d681b27
MC
6031 skb = txb->skb;
6032 txb->skb = NULL;
6033
432aa7ed
MC
6034 pci_unmap_single(tnapi->tp->pdev,
6035 dma_unmap_addr(txb, mapping),
6036 skb_headlen(skb),
6037 PCI_DMA_TODEVICE);
e01ee14d
MC
6038
6039 while (txb->fragmented) {
6040 txb->fragmented = false;
6041 entry = NEXT_TX(entry);
6042 txb = &tnapi->tx_buffers[entry];
6043 }
6044
9a2e0fb0 6045 for (i = 0; i < last; i++) {
432aa7ed
MC
6046 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6047
6048 entry = NEXT_TX(entry);
6049 txb = &tnapi->tx_buffers[entry];
6050
6051 pci_unmap_page(tnapi->tp->pdev,
6052 dma_unmap_addr(txb, mapping),
6053 frag->size, PCI_DMA_TODEVICE);
e01ee14d
MC
6054
6055 while (txb->fragmented) {
6056 txb->fragmented = false;
6057 entry = NEXT_TX(entry);
6058 txb = &tnapi->tx_buffers[entry];
6059 }
432aa7ed
MC
6060 }
6061}
6062
72f2afb8 6063/* Workaround 4GB and 40-bit hardware DMA bugs. */
24f4efd4 6064static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
432aa7ed 6065 struct sk_buff *skb,
84b67b27 6066 u32 *entry, u32 *budget,
92cd3a17 6067 u32 base_flags, u32 mss, u32 vlan)
1da177e4 6068{
24f4efd4 6069 struct tg3 *tp = tnapi->tp;
41588ba1 6070 struct sk_buff *new_skb;
c58ec932 6071 dma_addr_t new_addr = 0;
432aa7ed 6072 int ret = 0;
1da177e4 6073
41588ba1
MC
6074 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
6075 new_skb = skb_copy(skb, GFP_ATOMIC);
6076 else {
6077 int more_headroom = 4 - ((unsigned long)skb->data & 3);
6078
6079 new_skb = skb_copy_expand(skb,
6080 skb_headroom(skb) + more_headroom,
6081 skb_tailroom(skb), GFP_ATOMIC);
6082 }
6083
1da177e4 6084 if (!new_skb) {
c58ec932
MC
6085 ret = -1;
6086 } else {
6087 /* New SKB is guaranteed to be linear. */
f4188d8a
AD
6088 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
6089 PCI_DMA_TODEVICE);
6090 /* Make sure the mapping succeeded */
6091 if (pci_dma_mapping_error(tp->pdev, new_addr)) {
f4188d8a 6092 dev_kfree_skb(new_skb);
c58ec932 6093 ret = -1;
c58ec932 6094 } else {
92cd3a17
MC
6095 base_flags |= TXD_FLAG_END;
6096
84b67b27
MC
6097 tnapi->tx_buffers[*entry].skb = new_skb;
6098 dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
432aa7ed
MC
6099 mapping, new_addr);
6100
84b67b27 6101 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
d1a3b737
MC
6102 new_skb->len, base_flags,
6103 mss, vlan)) {
84b67b27 6104 tg3_tx_skb_unmap(tnapi, *entry, 0);
d1a3b737
MC
6105 dev_kfree_skb(new_skb);
6106 ret = -1;
6107 }
f4188d8a 6108 }
1da177e4
LT
6109 }
6110
6111 dev_kfree_skb(skb);
6112
c58ec932 6113 return ret;
1da177e4
LT
6114}
6115
2ffcc981 6116static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
52c0fd83
MC
6117
6118/* Use GSO to workaround a rare TSO bug that may be triggered when the
6119 * TSO header is greater than 80 bytes.
6120 */
6121static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
6122{
6123 struct sk_buff *segs, *nskb;
f3f3f27e 6124 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
52c0fd83
MC
6125
6126 /* Estimate the number of fragments in the worst case */
f3f3f27e 6127 if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
52c0fd83 6128 netif_stop_queue(tp->dev);
f65aac16
MC
6129
6130 /* netif_tx_stop_queue() must be done before checking
6131 * checking tx index in tg3_tx_avail() below, because in
6132 * tg3_tx(), we update tx index before checking for
6133 * netif_tx_queue_stopped().
6134 */
6135 smp_mb();
f3f3f27e 6136 if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
7f62ad5d
MC
6137 return NETDEV_TX_BUSY;
6138
6139 netif_wake_queue(tp->dev);
52c0fd83
MC
6140 }
6141
6142 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
801678c5 6143 if (IS_ERR(segs))
52c0fd83
MC
6144 goto tg3_tso_bug_end;
6145
6146 do {
6147 nskb = segs;
6148 segs = segs->next;
6149 nskb->next = NULL;
2ffcc981 6150 tg3_start_xmit(nskb, tp->dev);
52c0fd83
MC
6151 } while (segs);
6152
6153tg3_tso_bug_end:
6154 dev_kfree_skb(skb);
6155
6156 return NETDEV_TX_OK;
6157}
52c0fd83 6158
5a6f3074 6159/* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
63c3a66f 6160 * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
5a6f3074 6161 */
2ffcc981 6162static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
1da177e4
LT
6163{
6164 struct tg3 *tp = netdev_priv(dev);
92cd3a17 6165 u32 len, entry, base_flags, mss, vlan = 0;
84b67b27 6166 u32 budget;
432aa7ed 6167 int i = -1, would_hit_hwbug;
90079ce8 6168 dma_addr_t mapping;
24f4efd4
MC
6169 struct tg3_napi *tnapi;
6170 struct netdev_queue *txq;
432aa7ed 6171 unsigned int last;
f4188d8a 6172
24f4efd4
MC
6173 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
6174 tnapi = &tp->napi[skb_get_queue_mapping(skb)];
63c3a66f 6175 if (tg3_flag(tp, ENABLE_TSS))
24f4efd4 6176 tnapi++;
1da177e4 6177
84b67b27
MC
6178 budget = tg3_tx_avail(tnapi);
6179
00b70504 6180 /* We are running in BH disabled context with netif_tx_lock
bea3348e 6181 * and TX reclaim runs via tp->napi.poll inside of a software
f47c11ee
DM
6182 * interrupt. Furthermore, IRQ processing runs lockless so we have
6183 * no IRQ context deadlocks to worry about either. Rejoice!
1da177e4 6184 */
84b67b27 6185 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
24f4efd4
MC
6186 if (!netif_tx_queue_stopped(txq)) {
6187 netif_tx_stop_queue(txq);
1f064a87
SH
6188
6189 /* This is a hard error, log it. */
5129c3a3
MC
6190 netdev_err(dev,
6191 "BUG! Tx Ring full when queue awake!\n");
1f064a87 6192 }
1da177e4
LT
6193 return NETDEV_TX_BUSY;
6194 }
6195
f3f3f27e 6196 entry = tnapi->tx_prod;
1da177e4 6197 base_flags = 0;
84fa7933 6198 if (skb->ip_summed == CHECKSUM_PARTIAL)
1da177e4 6199 base_flags |= TXD_FLAG_TCPUDP_CSUM;
24f4efd4 6200
be98da6a
MC
6201 mss = skb_shinfo(skb)->gso_size;
6202 if (mss) {
eddc9ec5 6203 struct iphdr *iph;
34195c3d 6204 u32 tcp_opt_len, hdr_len;
1da177e4
LT
6205
6206 if (skb_header_cloned(skb) &&
6207 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
6208 dev_kfree_skb(skb);
6209 goto out_unlock;
6210 }
6211
34195c3d 6212 iph = ip_hdr(skb);
ab6a5bb6 6213 tcp_opt_len = tcp_optlen(skb);
1da177e4 6214
02e96080 6215 if (skb_is_gso_v6(skb)) {
34195c3d
MC
6216 hdr_len = skb_headlen(skb) - ETH_HLEN;
6217 } else {
6218 u32 ip_tcp_len;
6219
6220 ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
6221 hdr_len = ip_tcp_len + tcp_opt_len;
6222
6223 iph->check = 0;
6224 iph->tot_len = htons(mss + hdr_len);
6225 }
6226
52c0fd83 6227 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
63c3a66f 6228 tg3_flag(tp, TSO_BUG))
de6f31eb 6229 return tg3_tso_bug(tp, skb);
52c0fd83 6230
1da177e4
LT
6231 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
6232 TXD_FLAG_CPU_POST_DMA);
6233
63c3a66f
JP
6234 if (tg3_flag(tp, HW_TSO_1) ||
6235 tg3_flag(tp, HW_TSO_2) ||
6236 tg3_flag(tp, HW_TSO_3)) {
aa8223c7 6237 tcp_hdr(skb)->check = 0;
1da177e4 6238 base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
aa8223c7
ACM
6239 } else
6240 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
6241 iph->daddr, 0,
6242 IPPROTO_TCP,
6243 0);
1da177e4 6244
63c3a66f 6245 if (tg3_flag(tp, HW_TSO_3)) {
615774fe
MC
6246 mss |= (hdr_len & 0xc) << 12;
6247 if (hdr_len & 0x10)
6248 base_flags |= 0x00000010;
6249 base_flags |= (hdr_len & 0x3e0) << 5;
63c3a66f 6250 } else if (tg3_flag(tp, HW_TSO_2))
92c6b8d1 6251 mss |= hdr_len << 9;
63c3a66f 6252 else if (tg3_flag(tp, HW_TSO_1) ||
92c6b8d1 6253 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
eddc9ec5 6254 if (tcp_opt_len || iph->ihl > 5) {
1da177e4
LT
6255 int tsflags;
6256
eddc9ec5 6257 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
1da177e4
LT
6258 mss |= (tsflags << 11);
6259 }
6260 } else {
eddc9ec5 6261 if (tcp_opt_len || iph->ihl > 5) {
1da177e4
LT
6262 int tsflags;
6263
eddc9ec5 6264 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
1da177e4
LT
6265 base_flags |= tsflags << 12;
6266 }
6267 }
6268 }
bf933c80 6269
92cd3a17
MC
6270#ifdef BCM_KERNEL_SUPPORTS_8021Q
6271 if (vlan_tx_tag_present(skb)) {
6272 base_flags |= TXD_FLAG_VLAN;
6273 vlan = vlan_tx_tag_get(skb);
6274 }
6275#endif
1da177e4 6276
63c3a66f 6277 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8fc2f995 6278 !mss && skb->len > VLAN_ETH_FRAME_LEN)
615774fe
MC
6279 base_flags |= TXD_FLAG_JMB_PKT;
6280
f4188d8a
AD
6281 len = skb_headlen(skb);
6282
6283 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
6284 if (pci_dma_mapping_error(tp->pdev, mapping)) {
90079ce8
DM
6285 dev_kfree_skb(skb);
6286 goto out_unlock;
6287 }
6288
f3f3f27e 6289 tnapi->tx_buffers[entry].skb = skb;
4e5e4f0d 6290 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
1da177e4
LT
6291
6292 would_hit_hwbug = 0;
6293
63c3a66f 6294 if (tg3_flag(tp, 5701_DMA_BUG))
c58ec932 6295 would_hit_hwbug = 1;
1da177e4 6296
84b67b27 6297 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
d1a3b737
MC
6298 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
6299 mss, vlan))
6300 would_hit_hwbug = 1;
1da177e4 6301
1da177e4
LT
6302 /* Now loop through additional data fragments, and queue them. */
6303 if (skb_shinfo(skb)->nr_frags > 0) {
92cd3a17
MC
6304 u32 tmp_mss = mss;
6305
6306 if (!tg3_flag(tp, HW_TSO_1) &&
6307 !tg3_flag(tp, HW_TSO_2) &&
6308 !tg3_flag(tp, HW_TSO_3))
6309 tmp_mss = 0;
6310
1da177e4
LT
6311 last = skb_shinfo(skb)->nr_frags - 1;
6312 for (i = 0; i <= last; i++) {
6313 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6314
6315 len = frag->size;
dc234d0b
IC
6316 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
6317 len, PCI_DMA_TODEVICE);
1da177e4 6318
f3f3f27e 6319 tnapi->tx_buffers[entry].skb = NULL;
4e5e4f0d 6320 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
f4188d8a
AD
6321 mapping);
6322 if (pci_dma_mapping_error(tp->pdev, mapping))
6323 goto dma_error;
1da177e4 6324
84b67b27
MC
6325 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
6326 len, base_flags |
6327 ((i == last) ? TXD_FLAG_END : 0),
d1a3b737 6328 tmp_mss, vlan))
72f2afb8 6329 would_hit_hwbug = 1;
1da177e4
LT
6330 }
6331 }
6332
6333 if (would_hit_hwbug) {
0d681b27 6334 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
1da177e4
LT
6335
6336 /* If the workaround fails due to memory/mapping
6337 * failure, silently drop this packet.
6338 */
84b67b27
MC
6339 entry = tnapi->tx_prod;
6340 budget = tg3_tx_avail(tnapi);
6341 if (tigon3_dma_hwbug_workaround(tnapi, skb, &entry, &budget,
6342 base_flags, mss, vlan))
1da177e4 6343 goto out_unlock;
1da177e4
LT
6344 }
6345
d515b450
RC
6346 skb_tx_timestamp(skb);
6347
1da177e4 6348 /* Packets are ready, update Tx producer idx local and on card. */
24f4efd4 6349 tw32_tx_mbox(tnapi->prodmbox, entry);
1da177e4 6350
f3f3f27e
MC
6351 tnapi->tx_prod = entry;
6352 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
24f4efd4 6353 netif_tx_stop_queue(txq);
f65aac16
MC
6354
6355 /* netif_tx_stop_queue() must be done before checking
6356 * checking tx index in tg3_tx_avail() below, because in
6357 * tg3_tx(), we update tx index before checking for
6358 * netif_tx_queue_stopped().
6359 */
6360 smp_mb();
f3f3f27e 6361 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
24f4efd4 6362 netif_tx_wake_queue(txq);
51b91468 6363 }
1da177e4
LT
6364
6365out_unlock:
cdd0db05 6366 mmiowb();
1da177e4
LT
6367
6368 return NETDEV_TX_OK;
f4188d8a
AD
6369
6370dma_error:
0d681b27 6371 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
f4188d8a 6372 dev_kfree_skb(skb);
432aa7ed 6373 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
f4188d8a 6374 return NETDEV_TX_OK;
1da177e4
LT
6375}
6376
6e01b20b
MC
6377static void tg3_mac_loopback(struct tg3 *tp, bool enable)
6378{
6379 if (enable) {
6380 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
6381 MAC_MODE_PORT_MODE_MASK);
6382
6383 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
6384
6385 if (!tg3_flag(tp, 5705_PLUS))
6386 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
6387
6388 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
6389 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
6390 else
6391 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
6392 } else {
6393 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
6394
6395 if (tg3_flag(tp, 5705_PLUS) ||
6396 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
6397 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
6398 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
6399 }
6400
6401 tw32(MAC_MODE, tp->mac_mode);
6402 udelay(40);
6403}
6404
941ec90f 6405static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
5e5a7f37 6406{
941ec90f 6407 u32 val, bmcr, mac_mode, ptest = 0;
5e5a7f37
MC
6408
6409 tg3_phy_toggle_apd(tp, false);
6410 tg3_phy_toggle_automdix(tp, 0);
6411
941ec90f
MC
6412 if (extlpbk && tg3_phy_set_extloopbk(tp))
6413 return -EIO;
6414
6415 bmcr = BMCR_FULLDPLX;
5e5a7f37
MC
6416 switch (speed) {
6417 case SPEED_10:
6418 break;
6419 case SPEED_100:
6420 bmcr |= BMCR_SPEED100;
6421 break;
6422 case SPEED_1000:
6423 default:
6424 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
6425 speed = SPEED_100;
6426 bmcr |= BMCR_SPEED100;
6427 } else {
6428 speed = SPEED_1000;
6429 bmcr |= BMCR_SPEED1000;
6430 }
6431 }
6432
941ec90f
MC
6433 if (extlpbk) {
6434 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
6435 tg3_readphy(tp, MII_CTRL1000, &val);
6436 val |= CTL1000_AS_MASTER |
6437 CTL1000_ENABLE_MASTER;
6438 tg3_writephy(tp, MII_CTRL1000, val);
6439 } else {
6440 ptest = MII_TG3_FET_PTEST_TRIM_SEL |
6441 MII_TG3_FET_PTEST_TRIM_2;
6442 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
6443 }
6444 } else
6445 bmcr |= BMCR_LOOPBACK;
6446
5e5a7f37
MC
6447 tg3_writephy(tp, MII_BMCR, bmcr);
6448
6449 /* The write needs to be flushed for the FETs */
6450 if (tp->phy_flags & TG3_PHYFLG_IS_FET)
6451 tg3_readphy(tp, MII_BMCR, &bmcr);
6452
6453 udelay(40);
6454
6455 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
6456 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
941ec90f 6457 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
5e5a7f37
MC
6458 MII_TG3_FET_PTEST_FRC_TX_LINK |
6459 MII_TG3_FET_PTEST_FRC_TX_LOCK);
6460
6461 /* The write needs to be flushed for the AC131 */
6462 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
6463 }
6464
6465 /* Reset to prevent losing 1st rx packet intermittently */
6466 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
6467 tg3_flag(tp, 5780_CLASS)) {
6468 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6469 udelay(10);
6470 tw32_f(MAC_RX_MODE, tp->rx_mode);
6471 }
6472
6473 mac_mode = tp->mac_mode &
6474 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
6475 if (speed == SPEED_1000)
6476 mac_mode |= MAC_MODE_PORT_MODE_GMII;
6477 else
6478 mac_mode |= MAC_MODE_PORT_MODE_MII;
6479
6480 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
6481 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
6482
6483 if (masked_phy_id == TG3_PHY_ID_BCM5401)
6484 mac_mode &= ~MAC_MODE_LINK_POLARITY;
6485 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
6486 mac_mode |= MAC_MODE_LINK_POLARITY;
6487
6488 tg3_writephy(tp, MII_TG3_EXT_CTRL,
6489 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
6490 }
6491
6492 tw32(MAC_MODE, mac_mode);
6493 udelay(40);
941ec90f
MC
6494
6495 return 0;
5e5a7f37
MC
6496}
6497
06c03c02
MB
6498static void tg3_set_loopback(struct net_device *dev, u32 features)
6499{
6500 struct tg3 *tp = netdev_priv(dev);
6501
6502 if (features & NETIF_F_LOOPBACK) {
6503 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
6504 return;
6505
06c03c02 6506 spin_lock_bh(&tp->lock);
6e01b20b 6507 tg3_mac_loopback(tp, true);
06c03c02
MB
6508 netif_carrier_on(tp->dev);
6509 spin_unlock_bh(&tp->lock);
6510 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
6511 } else {
6512 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
6513 return;
6514
06c03c02 6515 spin_lock_bh(&tp->lock);
6e01b20b 6516 tg3_mac_loopback(tp, false);
06c03c02
MB
6517 /* Force link status check */
6518 tg3_setup_phy(tp, 1);
6519 spin_unlock_bh(&tp->lock);
6520 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
6521 }
6522}
6523
dc668910
MM
6524static u32 tg3_fix_features(struct net_device *dev, u32 features)
6525{
6526 struct tg3 *tp = netdev_priv(dev);
6527
63c3a66f 6528 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
dc668910
MM
6529 features &= ~NETIF_F_ALL_TSO;
6530
6531 return features;
6532}
6533
06c03c02
MB
6534static int tg3_set_features(struct net_device *dev, u32 features)
6535{
6536 u32 changed = dev->features ^ features;
6537
6538 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
6539 tg3_set_loopback(dev, features);
6540
6541 return 0;
6542}
6543
1da177e4
LT
6544static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
6545 int new_mtu)
6546{
6547 dev->mtu = new_mtu;
6548
ef7f5ec0 6549 if (new_mtu > ETH_DATA_LEN) {
63c3a66f 6550 if (tg3_flag(tp, 5780_CLASS)) {
dc668910 6551 netdev_update_features(dev);
63c3a66f 6552 tg3_flag_clear(tp, TSO_CAPABLE);
859a5887 6553 } else {
63c3a66f 6554 tg3_flag_set(tp, JUMBO_RING_ENABLE);
859a5887 6555 }
ef7f5ec0 6556 } else {
63c3a66f
JP
6557 if (tg3_flag(tp, 5780_CLASS)) {
6558 tg3_flag_set(tp, TSO_CAPABLE);
dc668910
MM
6559 netdev_update_features(dev);
6560 }
63c3a66f 6561 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
ef7f5ec0 6562 }
1da177e4
LT
6563}
6564
6565static int tg3_change_mtu(struct net_device *dev, int new_mtu)
6566{
6567 struct tg3 *tp = netdev_priv(dev);
b9ec6c1b 6568 int err;
1da177e4
LT
6569
6570 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
6571 return -EINVAL;
6572
6573 if (!netif_running(dev)) {
6574 /* We'll just catch it later when the
6575 * device is up'd.
6576 */
6577 tg3_set_mtu(dev, tp, new_mtu);
6578 return 0;
6579 }
6580
b02fd9e3
MC
6581 tg3_phy_stop(tp);
6582
1da177e4 6583 tg3_netif_stop(tp);
f47c11ee
DM
6584
6585 tg3_full_lock(tp, 1);
1da177e4 6586
944d980e 6587 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
6588
6589 tg3_set_mtu(dev, tp, new_mtu);
6590
b9ec6c1b 6591 err = tg3_restart_hw(tp, 0);
1da177e4 6592
b9ec6c1b
MC
6593 if (!err)
6594 tg3_netif_start(tp);
1da177e4 6595
f47c11ee 6596 tg3_full_unlock(tp);
1da177e4 6597
b02fd9e3
MC
6598 if (!err)
6599 tg3_phy_start(tp);
6600
b9ec6c1b 6601 return err;
1da177e4
LT
6602}
6603
21f581a5
MC
6604static void tg3_rx_prodring_free(struct tg3 *tp,
6605 struct tg3_rx_prodring_set *tpr)
1da177e4 6606{
1da177e4
LT
6607 int i;
6608
8fea32b9 6609 if (tpr != &tp->napi[0].prodring) {
b196c7e4 6610 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
2c49a44d 6611 i = (i + 1) & tp->rx_std_ring_mask)
b196c7e4
MC
6612 tg3_rx_skb_free(tp, &tpr->rx_std_buffers[i],
6613 tp->rx_pkt_map_sz);
6614
63c3a66f 6615 if (tg3_flag(tp, JUMBO_CAPABLE)) {
b196c7e4
MC
6616 for (i = tpr->rx_jmb_cons_idx;
6617 i != tpr->rx_jmb_prod_idx;
2c49a44d 6618 i = (i + 1) & tp->rx_jmb_ring_mask) {
b196c7e4
MC
6619 tg3_rx_skb_free(tp, &tpr->rx_jmb_buffers[i],
6620 TG3_RX_JMB_MAP_SZ);
6621 }
6622 }
6623
2b2cdb65 6624 return;
b196c7e4 6625 }
1da177e4 6626
2c49a44d 6627 for (i = 0; i <= tp->rx_std_ring_mask; i++)
2b2cdb65
MC
6628 tg3_rx_skb_free(tp, &tpr->rx_std_buffers[i],
6629 tp->rx_pkt_map_sz);
1da177e4 6630
63c3a66f 6631 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
2c49a44d 6632 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
2b2cdb65
MC
6633 tg3_rx_skb_free(tp, &tpr->rx_jmb_buffers[i],
6634 TG3_RX_JMB_MAP_SZ);
1da177e4
LT
6635 }
6636}
6637
c6cdf436 6638/* Initialize rx rings for packet processing.
1da177e4
LT
6639 *
6640 * The chip has been shut down and the driver detached from
6641 * the networking, so no interrupts or new tx packets will
6642 * end up in the driver. tp->{tx,}lock are held and thus
6643 * we may not sleep.
6644 */
21f581a5
MC
6645static int tg3_rx_prodring_alloc(struct tg3 *tp,
6646 struct tg3_rx_prodring_set *tpr)
1da177e4 6647{
287be12e 6648 u32 i, rx_pkt_dma_sz;
1da177e4 6649
b196c7e4
MC
6650 tpr->rx_std_cons_idx = 0;
6651 tpr->rx_std_prod_idx = 0;
6652 tpr->rx_jmb_cons_idx = 0;
6653 tpr->rx_jmb_prod_idx = 0;
6654
8fea32b9 6655 if (tpr != &tp->napi[0].prodring) {
2c49a44d
MC
6656 memset(&tpr->rx_std_buffers[0], 0,
6657 TG3_RX_STD_BUFF_RING_SIZE(tp));
48035728 6658 if (tpr->rx_jmb_buffers)
2b2cdb65 6659 memset(&tpr->rx_jmb_buffers[0], 0,
2c49a44d 6660 TG3_RX_JMB_BUFF_RING_SIZE(tp));
2b2cdb65
MC
6661 goto done;
6662 }
6663
1da177e4 6664 /* Zero out all descriptors. */
2c49a44d 6665 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
1da177e4 6666
287be12e 6667 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
63c3a66f 6668 if (tg3_flag(tp, 5780_CLASS) &&
287be12e
MC
6669 tp->dev->mtu > ETH_DATA_LEN)
6670 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
6671 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
7e72aad4 6672
1da177e4
LT
6673 /* Initialize invariants of the rings, we only set this
6674 * stuff once. This works because the card does not
6675 * write into the rx buffer posting rings.
6676 */
2c49a44d 6677 for (i = 0; i <= tp->rx_std_ring_mask; i++) {
1da177e4
LT
6678 struct tg3_rx_buffer_desc *rxd;
6679
21f581a5 6680 rxd = &tpr->rx_std[i];
287be12e 6681 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
1da177e4
LT
6682 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
6683 rxd->opaque = (RXD_OPAQUE_RING_STD |
6684 (i << RXD_OPAQUE_INDEX_SHIFT));
6685 }
6686
1da177e4
LT
6687 /* Now allocate fresh SKBs for each rx ring. */
6688 for (i = 0; i < tp->rx_pending; i++) {
86b21e59 6689 if (tg3_alloc_rx_skb(tp, tpr, RXD_OPAQUE_RING_STD, i) < 0) {
5129c3a3
MC
6690 netdev_warn(tp->dev,
6691 "Using a smaller RX standard ring. Only "
6692 "%d out of %d buffers were allocated "
6693 "successfully\n", i, tp->rx_pending);
32d8c572 6694 if (i == 0)
cf7a7298 6695 goto initfail;
32d8c572 6696 tp->rx_pending = i;
1da177e4 6697 break;
32d8c572 6698 }
1da177e4
LT
6699 }
6700
63c3a66f 6701 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
cf7a7298
MC
6702 goto done;
6703
2c49a44d 6704 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
cf7a7298 6705
63c3a66f 6706 if (!tg3_flag(tp, JUMBO_RING_ENABLE))
0d86df80 6707 goto done;
cf7a7298 6708
2c49a44d 6709 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
0d86df80
MC
6710 struct tg3_rx_buffer_desc *rxd;
6711
6712 rxd = &tpr->rx_jmb[i].std;
6713 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
6714 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
6715 RXD_FLAG_JUMBO;
6716 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
6717 (i << RXD_OPAQUE_INDEX_SHIFT));
6718 }
6719
6720 for (i = 0; i < tp->rx_jumbo_pending; i++) {
6721 if (tg3_alloc_rx_skb(tp, tpr, RXD_OPAQUE_RING_JUMBO, i) < 0) {
5129c3a3
MC
6722 netdev_warn(tp->dev,
6723 "Using a smaller RX jumbo ring. Only %d "
6724 "out of %d buffers were allocated "
6725 "successfully\n", i, tp->rx_jumbo_pending);
0d86df80
MC
6726 if (i == 0)
6727 goto initfail;
6728 tp->rx_jumbo_pending = i;
6729 break;
1da177e4
LT
6730 }
6731 }
cf7a7298
MC
6732
6733done:
32d8c572 6734 return 0;
cf7a7298
MC
6735
6736initfail:
21f581a5 6737 tg3_rx_prodring_free(tp, tpr);
cf7a7298 6738 return -ENOMEM;
1da177e4
LT
6739}
6740
21f581a5
MC
6741static void tg3_rx_prodring_fini(struct tg3 *tp,
6742 struct tg3_rx_prodring_set *tpr)
1da177e4 6743{
21f581a5
MC
6744 kfree(tpr->rx_std_buffers);
6745 tpr->rx_std_buffers = NULL;
6746 kfree(tpr->rx_jmb_buffers);
6747 tpr->rx_jmb_buffers = NULL;
6748 if (tpr->rx_std) {
4bae65c8
MC
6749 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
6750 tpr->rx_std, tpr->rx_std_mapping);
21f581a5 6751 tpr->rx_std = NULL;
1da177e4 6752 }
21f581a5 6753 if (tpr->rx_jmb) {
4bae65c8
MC
6754 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
6755 tpr->rx_jmb, tpr->rx_jmb_mapping);
21f581a5 6756 tpr->rx_jmb = NULL;
1da177e4 6757 }
cf7a7298
MC
6758}
6759
21f581a5
MC
6760static int tg3_rx_prodring_init(struct tg3 *tp,
6761 struct tg3_rx_prodring_set *tpr)
cf7a7298 6762{
2c49a44d
MC
6763 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
6764 GFP_KERNEL);
21f581a5 6765 if (!tpr->rx_std_buffers)
cf7a7298
MC
6766 return -ENOMEM;
6767
4bae65c8
MC
6768 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
6769 TG3_RX_STD_RING_BYTES(tp),
6770 &tpr->rx_std_mapping,
6771 GFP_KERNEL);
21f581a5 6772 if (!tpr->rx_std)
cf7a7298
MC
6773 goto err_out;
6774
63c3a66f 6775 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
2c49a44d 6776 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
21f581a5
MC
6777 GFP_KERNEL);
6778 if (!tpr->rx_jmb_buffers)
cf7a7298
MC
6779 goto err_out;
6780
4bae65c8
MC
6781 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
6782 TG3_RX_JMB_RING_BYTES(tp),
6783 &tpr->rx_jmb_mapping,
6784 GFP_KERNEL);
21f581a5 6785 if (!tpr->rx_jmb)
cf7a7298
MC
6786 goto err_out;
6787 }
6788
6789 return 0;
6790
6791err_out:
21f581a5 6792 tg3_rx_prodring_fini(tp, tpr);
cf7a7298
MC
6793 return -ENOMEM;
6794}
6795
6796/* Free up pending packets in all rx/tx rings.
6797 *
6798 * The chip has been shut down and the driver detached from
6799 * the networking, so no interrupts or new tx packets will
6800 * end up in the driver. tp->{tx,}lock is not held and we are not
6801 * in an interrupt context and thus may sleep.
6802 */
6803static void tg3_free_rings(struct tg3 *tp)
6804{
f77a6a8e 6805 int i, j;
cf7a7298 6806
f77a6a8e
MC
6807 for (j = 0; j < tp->irq_cnt; j++) {
6808 struct tg3_napi *tnapi = &tp->napi[j];
cf7a7298 6809
8fea32b9 6810 tg3_rx_prodring_free(tp, &tnapi->prodring);
b28f6428 6811
0c1d0e2b
MC
6812 if (!tnapi->tx_buffers)
6813 continue;
6814
0d681b27
MC
6815 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
6816 struct sk_buff *skb = tnapi->tx_buffers[i].skb;
cf7a7298 6817
0d681b27 6818 if (!skb)
f77a6a8e 6819 continue;
cf7a7298 6820
0d681b27 6821 tg3_tx_skb_unmap(tnapi, i, skb_shinfo(skb)->nr_frags);
f77a6a8e
MC
6822
6823 dev_kfree_skb_any(skb);
6824 }
2b2cdb65 6825 }
cf7a7298
MC
6826}
6827
6828/* Initialize tx/rx rings for packet processing.
6829 *
6830 * The chip has been shut down and the driver detached from
6831 * the networking, so no interrupts or new tx packets will
6832 * end up in the driver. tp->{tx,}lock are held and thus
6833 * we may not sleep.
6834 */
6835static int tg3_init_rings(struct tg3 *tp)
6836{
f77a6a8e 6837 int i;
72334482 6838
cf7a7298
MC
6839 /* Free up all the SKBs. */
6840 tg3_free_rings(tp);
6841
f77a6a8e
MC
6842 for (i = 0; i < tp->irq_cnt; i++) {
6843 struct tg3_napi *tnapi = &tp->napi[i];
6844
6845 tnapi->last_tag = 0;
6846 tnapi->last_irq_tag = 0;
6847 tnapi->hw_status->status = 0;
6848 tnapi->hw_status->status_tag = 0;
6849 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
cf7a7298 6850
f77a6a8e
MC
6851 tnapi->tx_prod = 0;
6852 tnapi->tx_cons = 0;
0c1d0e2b
MC
6853 if (tnapi->tx_ring)
6854 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
f77a6a8e
MC
6855
6856 tnapi->rx_rcb_ptr = 0;
0c1d0e2b
MC
6857 if (tnapi->rx_rcb)
6858 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
2b2cdb65 6859
8fea32b9 6860 if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
e4af1af9 6861 tg3_free_rings(tp);
2b2cdb65 6862 return -ENOMEM;
e4af1af9 6863 }
f77a6a8e 6864 }
72334482 6865
2b2cdb65 6866 return 0;
cf7a7298
MC
6867}
6868
6869/*
6870 * Must not be invoked with interrupt sources disabled and
6871 * the hardware shutdown down.
6872 */
6873static void tg3_free_consistent(struct tg3 *tp)
6874{
f77a6a8e 6875 int i;
898a56f8 6876
f77a6a8e
MC
6877 for (i = 0; i < tp->irq_cnt; i++) {
6878 struct tg3_napi *tnapi = &tp->napi[i];
6879
6880 if (tnapi->tx_ring) {
4bae65c8 6881 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
f77a6a8e
MC
6882 tnapi->tx_ring, tnapi->tx_desc_mapping);
6883 tnapi->tx_ring = NULL;
6884 }
6885
6886 kfree(tnapi->tx_buffers);
6887 tnapi->tx_buffers = NULL;
6888
6889 if (tnapi->rx_rcb) {
4bae65c8
MC
6890 dma_free_coherent(&tp->pdev->dev,
6891 TG3_RX_RCB_RING_BYTES(tp),
6892 tnapi->rx_rcb,
6893 tnapi->rx_rcb_mapping);
f77a6a8e
MC
6894 tnapi->rx_rcb = NULL;
6895 }
6896
8fea32b9
MC
6897 tg3_rx_prodring_fini(tp, &tnapi->prodring);
6898
f77a6a8e 6899 if (tnapi->hw_status) {
4bae65c8
MC
6900 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
6901 tnapi->hw_status,
6902 tnapi->status_mapping);
f77a6a8e
MC
6903 tnapi->hw_status = NULL;
6904 }
1da177e4 6905 }
f77a6a8e 6906
1da177e4 6907 if (tp->hw_stats) {
4bae65c8
MC
6908 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
6909 tp->hw_stats, tp->stats_mapping);
1da177e4
LT
6910 tp->hw_stats = NULL;
6911 }
6912}
6913
6914/*
6915 * Must not be invoked with interrupt sources disabled and
6916 * the hardware shutdown down. Can sleep.
6917 */
6918static int tg3_alloc_consistent(struct tg3 *tp)
6919{
f77a6a8e 6920 int i;
898a56f8 6921
4bae65c8
MC
6922 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
6923 sizeof(struct tg3_hw_stats),
6924 &tp->stats_mapping,
6925 GFP_KERNEL);
f77a6a8e 6926 if (!tp->hw_stats)
1da177e4
LT
6927 goto err_out;
6928
f77a6a8e 6929 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
1da177e4 6930
f77a6a8e
MC
6931 for (i = 0; i < tp->irq_cnt; i++) {
6932 struct tg3_napi *tnapi = &tp->napi[i];
8d9d7cfc 6933 struct tg3_hw_status *sblk;
1da177e4 6934
4bae65c8
MC
6935 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
6936 TG3_HW_STATUS_SIZE,
6937 &tnapi->status_mapping,
6938 GFP_KERNEL);
f77a6a8e
MC
6939 if (!tnapi->hw_status)
6940 goto err_out;
898a56f8 6941
f77a6a8e 6942 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8d9d7cfc
MC
6943 sblk = tnapi->hw_status;
6944
8fea32b9
MC
6945 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
6946 goto err_out;
6947
19cfaecc
MC
6948 /* If multivector TSS is enabled, vector 0 does not handle
6949 * tx interrupts. Don't allocate any resources for it.
6950 */
63c3a66f
JP
6951 if ((!i && !tg3_flag(tp, ENABLE_TSS)) ||
6952 (i && tg3_flag(tp, ENABLE_TSS))) {
df8944cf
MC
6953 tnapi->tx_buffers = kzalloc(
6954 sizeof(struct tg3_tx_ring_info) *
6955 TG3_TX_RING_SIZE, GFP_KERNEL);
19cfaecc
MC
6956 if (!tnapi->tx_buffers)
6957 goto err_out;
6958
4bae65c8
MC
6959 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
6960 TG3_TX_RING_BYTES,
6961 &tnapi->tx_desc_mapping,
6962 GFP_KERNEL);
19cfaecc
MC
6963 if (!tnapi->tx_ring)
6964 goto err_out;
6965 }
6966
8d9d7cfc
MC
6967 /*
6968 * When RSS is enabled, the status block format changes
6969 * slightly. The "rx_jumbo_consumer", "reserved",
6970 * and "rx_mini_consumer" members get mapped to the
6971 * other three rx return ring producer indexes.
6972 */
6973 switch (i) {
6974 default:
6975 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
6976 break;
6977 case 2:
6978 tnapi->rx_rcb_prod_idx = &sblk->rx_jumbo_consumer;
6979 break;
6980 case 3:
6981 tnapi->rx_rcb_prod_idx = &sblk->reserved;
6982 break;
6983 case 4:
6984 tnapi->rx_rcb_prod_idx = &sblk->rx_mini_consumer;
6985 break;
6986 }
72334482 6987
0c1d0e2b
MC
6988 /*
6989 * If multivector RSS is enabled, vector 0 does not handle
6990 * rx or tx interrupts. Don't allocate any resources for it.
6991 */
63c3a66f 6992 if (!i && tg3_flag(tp, ENABLE_RSS))
0c1d0e2b
MC
6993 continue;
6994
4bae65c8
MC
6995 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
6996 TG3_RX_RCB_RING_BYTES(tp),
6997 &tnapi->rx_rcb_mapping,
6998 GFP_KERNEL);
f77a6a8e
MC
6999 if (!tnapi->rx_rcb)
7000 goto err_out;
72334482 7001
f77a6a8e 7002 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
f77a6a8e 7003 }
1da177e4
LT
7004
7005 return 0;
7006
7007err_out:
7008 tg3_free_consistent(tp);
7009 return -ENOMEM;
7010}
7011
7012#define MAX_WAIT_CNT 1000
7013
7014/* To stop a block, clear the enable bit and poll till it
7015 * clears. tp->lock is held.
7016 */
b3b7d6be 7017static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
1da177e4
LT
7018{
7019 unsigned int i;
7020 u32 val;
7021
63c3a66f 7022 if (tg3_flag(tp, 5705_PLUS)) {
1da177e4
LT
7023 switch (ofs) {
7024 case RCVLSC_MODE:
7025 case DMAC_MODE:
7026 case MBFREE_MODE:
7027 case BUFMGR_MODE:
7028 case MEMARB_MODE:
7029 /* We can't enable/disable these bits of the
7030 * 5705/5750, just say success.
7031 */
7032 return 0;
7033
7034 default:
7035 break;
855e1111 7036 }
1da177e4
LT
7037 }
7038
7039 val = tr32(ofs);
7040 val &= ~enable_bit;
7041 tw32_f(ofs, val);
7042
7043 for (i = 0; i < MAX_WAIT_CNT; i++) {
7044 udelay(100);
7045 val = tr32(ofs);
7046 if ((val & enable_bit) == 0)
7047 break;
7048 }
7049
b3b7d6be 7050 if (i == MAX_WAIT_CNT && !silent) {
2445e461
MC
7051 dev_err(&tp->pdev->dev,
7052 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
7053 ofs, enable_bit);
1da177e4
LT
7054 return -ENODEV;
7055 }
7056
7057 return 0;
7058}
7059
7060/* tp->lock is held. */
b3b7d6be 7061static int tg3_abort_hw(struct tg3 *tp, int silent)
1da177e4
LT
7062{
7063 int i, err;
7064
7065 tg3_disable_ints(tp);
7066
7067 tp->rx_mode &= ~RX_MODE_ENABLE;
7068 tw32_f(MAC_RX_MODE, tp->rx_mode);
7069 udelay(10);
7070
b3b7d6be
DM
7071 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
7072 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
7073 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
7074 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
7075 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
7076 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
7077
7078 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
7079 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
7080 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
7081 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
7082 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
7083 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
7084 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
1da177e4
LT
7085
7086 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
7087 tw32_f(MAC_MODE, tp->mac_mode);
7088 udelay(40);
7089
7090 tp->tx_mode &= ~TX_MODE_ENABLE;
7091 tw32_f(MAC_TX_MODE, tp->tx_mode);
7092
7093 for (i = 0; i < MAX_WAIT_CNT; i++) {
7094 udelay(100);
7095 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
7096 break;
7097 }
7098 if (i >= MAX_WAIT_CNT) {
ab96b241
MC
7099 dev_err(&tp->pdev->dev,
7100 "%s timed out, TX_MODE_ENABLE will not clear "
7101 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
e6de8ad1 7102 err |= -ENODEV;
1da177e4
LT
7103 }
7104
e6de8ad1 7105 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
b3b7d6be
DM
7106 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
7107 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
1da177e4
LT
7108
7109 tw32(FTQ_RESET, 0xffffffff);
7110 tw32(FTQ_RESET, 0x00000000);
7111
b3b7d6be
DM
7112 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
7113 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
1da177e4 7114
f77a6a8e
MC
7115 for (i = 0; i < tp->irq_cnt; i++) {
7116 struct tg3_napi *tnapi = &tp->napi[i];
7117 if (tnapi->hw_status)
7118 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7119 }
1da177e4
LT
7120 if (tp->hw_stats)
7121 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
7122
1da177e4
LT
7123 return err;
7124}
7125
0d3031d9
MC
7126static void tg3_ape_send_event(struct tg3 *tp, u32 event)
7127{
7128 int i;
7129 u32 apedata;
7130
dc6d0744 7131 /* NCSI does not support APE events */
63c3a66f 7132 if (tg3_flag(tp, APE_HAS_NCSI))
dc6d0744
MC
7133 return;
7134
0d3031d9
MC
7135 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
7136 if (apedata != APE_SEG_SIG_MAGIC)
7137 return;
7138
7139 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
731fd79c 7140 if (!(apedata & APE_FW_STATUS_READY))
0d3031d9
MC
7141 return;
7142
7143 /* Wait for up to 1 millisecond for APE to service previous event. */
7144 for (i = 0; i < 10; i++) {
7145 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
7146 return;
7147
7148 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
7149
7150 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
7151 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
7152 event | APE_EVENT_STATUS_EVENT_PENDING);
7153
7154 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
7155
7156 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
7157 break;
7158
7159 udelay(100);
7160 }
7161
7162 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
7163 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
7164}
7165
7166static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
7167{
7168 u32 event;
7169 u32 apedata;
7170
63c3a66f 7171 if (!tg3_flag(tp, ENABLE_APE))
0d3031d9
MC
7172 return;
7173
7174 switch (kind) {
33f401ae
MC
7175 case RESET_KIND_INIT:
7176 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
7177 APE_HOST_SEG_SIG_MAGIC);
7178 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
7179 APE_HOST_SEG_LEN_MAGIC);
7180 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
7181 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
7182 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
6867c843 7183 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
33f401ae
MC
7184 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
7185 APE_HOST_BEHAV_NO_PHYLOCK);
dc6d0744
MC
7186 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
7187 TG3_APE_HOST_DRVR_STATE_START);
33f401ae
MC
7188
7189 event = APE_EVENT_STATUS_STATE_START;
7190 break;
7191 case RESET_KIND_SHUTDOWN:
7192 /* With the interface we are currently using,
7193 * APE does not track driver state. Wiping
7194 * out the HOST SEGMENT SIGNATURE forces
7195 * the APE to assume OS absent status.
7196 */
7197 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
b2aee154 7198
dc6d0744 7199 if (device_may_wakeup(&tp->pdev->dev) &&
63c3a66f 7200 tg3_flag(tp, WOL_ENABLE)) {
dc6d0744
MC
7201 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
7202 TG3_APE_HOST_WOL_SPEED_AUTO);
7203 apedata = TG3_APE_HOST_DRVR_STATE_WOL;
7204 } else
7205 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
7206
7207 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
7208
33f401ae
MC
7209 event = APE_EVENT_STATUS_STATE_UNLOAD;
7210 break;
7211 case RESET_KIND_SUSPEND:
7212 event = APE_EVENT_STATUS_STATE_SUSPEND;
7213 break;
7214 default:
7215 return;
0d3031d9
MC
7216 }
7217
7218 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
7219
7220 tg3_ape_send_event(tp, event);
7221}
7222
1da177e4
LT
7223/* tp->lock is held. */
7224static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
7225{
f49639e6
DM
7226 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
7227 NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1da177e4 7228
63c3a66f 7229 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1da177e4
LT
7230 switch (kind) {
7231 case RESET_KIND_INIT:
7232 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7233 DRV_STATE_START);
7234 break;
7235
7236 case RESET_KIND_SHUTDOWN:
7237 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7238 DRV_STATE_UNLOAD);
7239 break;
7240
7241 case RESET_KIND_SUSPEND:
7242 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7243 DRV_STATE_SUSPEND);
7244 break;
7245
7246 default:
7247 break;
855e1111 7248 }
1da177e4 7249 }
0d3031d9
MC
7250
7251 if (kind == RESET_KIND_INIT ||
7252 kind == RESET_KIND_SUSPEND)
7253 tg3_ape_driver_state_change(tp, kind);
1da177e4
LT
7254}
7255
7256/* tp->lock is held. */
7257static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
7258{
63c3a66f 7259 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1da177e4
LT
7260 switch (kind) {
7261 case RESET_KIND_INIT:
7262 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7263 DRV_STATE_START_DONE);
7264 break;
7265
7266 case RESET_KIND_SHUTDOWN:
7267 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7268 DRV_STATE_UNLOAD_DONE);
7269 break;
7270
7271 default:
7272 break;
855e1111 7273 }
1da177e4 7274 }
0d3031d9
MC
7275
7276 if (kind == RESET_KIND_SHUTDOWN)
7277 tg3_ape_driver_state_change(tp, kind);
1da177e4
LT
7278}
7279
7280/* tp->lock is held. */
7281static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
7282{
63c3a66f 7283 if (tg3_flag(tp, ENABLE_ASF)) {
1da177e4
LT
7284 switch (kind) {
7285 case RESET_KIND_INIT:
7286 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7287 DRV_STATE_START);
7288 break;
7289
7290 case RESET_KIND_SHUTDOWN:
7291 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7292 DRV_STATE_UNLOAD);
7293 break;
7294
7295 case RESET_KIND_SUSPEND:
7296 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
7297 DRV_STATE_SUSPEND);
7298 break;
7299
7300 default:
7301 break;
855e1111 7302 }
1da177e4
LT
7303 }
7304}
7305
7a6f4369
MC
7306static int tg3_poll_fw(struct tg3 *tp)
7307{
7308 int i;
7309 u32 val;
7310
b5d3772c 7311 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
0ccead18
GZ
7312 /* Wait up to 20ms for init done. */
7313 for (i = 0; i < 200; i++) {
b5d3772c
MC
7314 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
7315 return 0;
0ccead18 7316 udelay(100);
b5d3772c
MC
7317 }
7318 return -ENODEV;
7319 }
7320
7a6f4369
MC
7321 /* Wait for firmware initialization to complete. */
7322 for (i = 0; i < 100000; i++) {
7323 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
7324 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
7325 break;
7326 udelay(10);
7327 }
7328
7329 /* Chip might not be fitted with firmware. Some Sun onboard
7330 * parts are configured like that. So don't signal the timeout
7331 * of the above loop as an error, but do report the lack of
7332 * running firmware once.
7333 */
63c3a66f
JP
7334 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
7335 tg3_flag_set(tp, NO_FWARE_REPORTED);
7a6f4369 7336
05dbe005 7337 netdev_info(tp->dev, "No firmware running\n");
7a6f4369
MC
7338 }
7339
6b10c165
MC
7340 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
7341 /* The 57765 A0 needs a little more
7342 * time to do some important work.
7343 */
7344 mdelay(10);
7345 }
7346
7a6f4369
MC
7347 return 0;
7348}
7349
ee6a99b5
MC
7350/* Save PCI command register before chip reset */
7351static void tg3_save_pci_state(struct tg3 *tp)
7352{
8a6eac90 7353 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
ee6a99b5
MC
7354}
7355
7356/* Restore PCI state after chip reset */
7357static void tg3_restore_pci_state(struct tg3 *tp)
7358{
7359 u32 val;
7360
7361 /* Re-enable indirect register accesses. */
7362 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
7363 tp->misc_host_ctrl);
7364
7365 /* Set MAX PCI retry to zero. */
7366 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
7367 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
63c3a66f 7368 tg3_flag(tp, PCIX_MODE))
ee6a99b5 7369 val |= PCISTATE_RETRY_SAME_DMA;
0d3031d9 7370 /* Allow reads and writes to the APE register and memory space. */
63c3a66f 7371 if (tg3_flag(tp, ENABLE_APE))
0d3031d9 7372 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
f92d9dc1
MC
7373 PCISTATE_ALLOW_APE_SHMEM_WR |
7374 PCISTATE_ALLOW_APE_PSPACE_WR;
ee6a99b5
MC
7375 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
7376
8a6eac90 7377 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
ee6a99b5 7378
fcb389df 7379 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785) {
63c3a66f 7380 if (tg3_flag(tp, PCI_EXPRESS))
cf79003d 7381 pcie_set_readrq(tp->pdev, tp->pcie_readrq);
fcb389df
MC
7382 else {
7383 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
7384 tp->pci_cacheline_sz);
7385 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
7386 tp->pci_lat_timer);
7387 }
114342f2 7388 }
5f5c51e3 7389
ee6a99b5 7390 /* Make sure PCI-X relaxed ordering bit is clear. */
63c3a66f 7391 if (tg3_flag(tp, PCIX_MODE)) {
9974a356
MC
7392 u16 pcix_cmd;
7393
7394 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7395 &pcix_cmd);
7396 pcix_cmd &= ~PCI_X_CMD_ERO;
7397 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7398 pcix_cmd);
7399 }
ee6a99b5 7400
63c3a66f 7401 if (tg3_flag(tp, 5780_CLASS)) {
ee6a99b5
MC
7402
7403 /* Chip reset on 5780 will reset MSI enable bit,
7404 * so need to restore it.
7405 */
63c3a66f 7406 if (tg3_flag(tp, USING_MSI)) {
ee6a99b5
MC
7407 u16 ctrl;
7408
7409 pci_read_config_word(tp->pdev,
7410 tp->msi_cap + PCI_MSI_FLAGS,
7411 &ctrl);
7412 pci_write_config_word(tp->pdev,
7413 tp->msi_cap + PCI_MSI_FLAGS,
7414 ctrl | PCI_MSI_FLAGS_ENABLE);
7415 val = tr32(MSGINT_MODE);
7416 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
7417 }
7418 }
7419}
7420
1da177e4
LT
7421static void tg3_stop_fw(struct tg3 *);
7422
7423/* tp->lock is held. */
7424static int tg3_chip_reset(struct tg3 *tp)
7425{
7426 u32 val;
1ee582d8 7427 void (*write_op)(struct tg3 *, u32, u32);
4f125f42 7428 int i, err;
1da177e4 7429
f49639e6
DM
7430 tg3_nvram_lock(tp);
7431
77b483f1
MC
7432 tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
7433
f49639e6
DM
7434 /* No matching tg3_nvram_unlock() after this because
7435 * chip reset below will undo the nvram lock.
7436 */
7437 tp->nvram_lock_cnt = 0;
1da177e4 7438
ee6a99b5
MC
7439 /* GRC_MISC_CFG core clock reset will clear the memory
7440 * enable bit in PCI register 4 and the MSI enable bit
7441 * on some chips, so we save relevant registers here.
7442 */
7443 tg3_save_pci_state(tp);
7444
d9ab5ad1 7445 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
63c3a66f 7446 tg3_flag(tp, 5755_PLUS))
d9ab5ad1
MC
7447 tw32(GRC_FASTBOOT_PC, 0);
7448
1da177e4
LT
7449 /*
7450 * We must avoid the readl() that normally takes place.
7451 * It locks machines, causes machine checks, and other
7452 * fun things. So, temporarily disable the 5701
7453 * hardware workaround, while we do the reset.
7454 */
1ee582d8
MC
7455 write_op = tp->write32;
7456 if (write_op == tg3_write_flush_reg32)
7457 tp->write32 = tg3_write32;
1da177e4 7458
d18edcb2
MC
7459 /* Prevent the irq handler from reading or writing PCI registers
7460 * during chip reset when the memory enable bit in the PCI command
7461 * register may be cleared. The chip does not generate interrupt
7462 * at this time, but the irq handler may still be called due to irq
7463 * sharing or irqpoll.
7464 */
63c3a66f 7465 tg3_flag_set(tp, CHIP_RESETTING);
f77a6a8e
MC
7466 for (i = 0; i < tp->irq_cnt; i++) {
7467 struct tg3_napi *tnapi = &tp->napi[i];
7468 if (tnapi->hw_status) {
7469 tnapi->hw_status->status = 0;
7470 tnapi->hw_status->status_tag = 0;
7471 }
7472 tnapi->last_tag = 0;
7473 tnapi->last_irq_tag = 0;
b8fa2f3a 7474 }
d18edcb2 7475 smp_mb();
4f125f42
MC
7476
7477 for (i = 0; i < tp->irq_cnt; i++)
7478 synchronize_irq(tp->napi[i].irq_vec);
d18edcb2 7479
255ca311
MC
7480 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
7481 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
7482 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
7483 }
7484
1da177e4
LT
7485 /* do the reset */
7486 val = GRC_MISC_CFG_CORECLK_RESET;
7487
63c3a66f 7488 if (tg3_flag(tp, PCI_EXPRESS)) {
88075d91
MC
7489 /* Force PCIe 1.0a mode */
7490 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
63c3a66f 7491 !tg3_flag(tp, 57765_PLUS) &&
88075d91
MC
7492 tr32(TG3_PCIE_PHY_TSTCTL) ==
7493 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
7494 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
7495
1da177e4
LT
7496 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
7497 tw32(GRC_MISC_CFG, (1 << 29));
7498 val |= (1 << 29);
7499 }
7500 }
7501
b5d3772c
MC
7502 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
7503 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
7504 tw32(GRC_VCPU_EXT_CTRL,
7505 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
7506 }
7507
f37500d3 7508 /* Manage gphy power for all CPMU absent PCIe devices. */
63c3a66f 7509 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
1da177e4 7510 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
f37500d3 7511
1da177e4
LT
7512 tw32(GRC_MISC_CFG, val);
7513
1ee582d8
MC
7514 /* restore 5701 hardware bug workaround write method */
7515 tp->write32 = write_op;
1da177e4
LT
7516
7517 /* Unfortunately, we have to delay before the PCI read back.
7518 * Some 575X chips even will not respond to a PCI cfg access
7519 * when the reset command is given to the chip.
7520 *
7521 * How do these hardware designers expect things to work
7522 * properly if the PCI write is posted for a long period
7523 * of time? It is always necessary to have some method by
7524 * which a register read back can occur to push the write
7525 * out which does the reset.
7526 *
7527 * For most tg3 variants the trick below was working.
7528 * Ho hum...
7529 */
7530 udelay(120);
7531
7532 /* Flush PCI posted writes. The normal MMIO registers
7533 * are inaccessible at this time so this is the only
7534 * way to make this reliably (actually, this is no longer
7535 * the case, see above). I tried to use indirect
7536 * register read/write but this upset some 5701 variants.
7537 */
7538 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
7539
7540 udelay(120);
7541
708ebb3a 7542 if (tg3_flag(tp, PCI_EXPRESS) && pci_pcie_cap(tp->pdev)) {
e7126997
MC
7543 u16 val16;
7544
1da177e4
LT
7545 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
7546 int i;
7547 u32 cfg_val;
7548
7549 /* Wait for link training to complete. */
7550 for (i = 0; i < 5000; i++)
7551 udelay(100);
7552
7553 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
7554 pci_write_config_dword(tp->pdev, 0xc4,
7555 cfg_val | (1 << 15));
7556 }
5e7dfd0f 7557
e7126997
MC
7558 /* Clear the "no snoop" and "relaxed ordering" bits. */
7559 pci_read_config_word(tp->pdev,
708ebb3a 7560 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL,
e7126997
MC
7561 &val16);
7562 val16 &= ~(PCI_EXP_DEVCTL_RELAX_EN |
7563 PCI_EXP_DEVCTL_NOSNOOP_EN);
7564 /*
7565 * Older PCIe devices only support the 128 byte
7566 * MPS setting. Enforce the restriction.
5e7dfd0f 7567 */
63c3a66f 7568 if (!tg3_flag(tp, CPMU_PRESENT))
e7126997 7569 val16 &= ~PCI_EXP_DEVCTL_PAYLOAD;
5e7dfd0f 7570 pci_write_config_word(tp->pdev,
708ebb3a 7571 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL,
e7126997 7572 val16);
5e7dfd0f 7573
cf79003d 7574 pcie_set_readrq(tp->pdev, tp->pcie_readrq);
5e7dfd0f
MC
7575
7576 /* Clear error status */
7577 pci_write_config_word(tp->pdev,
708ebb3a 7578 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVSTA,
5e7dfd0f
MC
7579 PCI_EXP_DEVSTA_CED |
7580 PCI_EXP_DEVSTA_NFED |
7581 PCI_EXP_DEVSTA_FED |
7582 PCI_EXP_DEVSTA_URD);
1da177e4
LT
7583 }
7584
ee6a99b5 7585 tg3_restore_pci_state(tp);
1da177e4 7586
63c3a66f
JP
7587 tg3_flag_clear(tp, CHIP_RESETTING);
7588 tg3_flag_clear(tp, ERROR_PROCESSED);
d18edcb2 7589
ee6a99b5 7590 val = 0;
63c3a66f 7591 if (tg3_flag(tp, 5780_CLASS))
4cf78e4f 7592 val = tr32(MEMARB_MODE);
ee6a99b5 7593 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
1da177e4
LT
7594
7595 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
7596 tg3_stop_fw(tp);
7597 tw32(0x5000, 0x400);
7598 }
7599
7600 tw32(GRC_MODE, tp->grc_mode);
7601
7602 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
ab0049b4 7603 val = tr32(0xc4);
1da177e4
LT
7604
7605 tw32(0xc4, val | (1 << 15));
7606 }
7607
7608 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
7609 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
7610 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
7611 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
7612 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
7613 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
7614 }
7615
f07e9af3 7616 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9e975cc2 7617 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
d2394e6b 7618 val = tp->mac_mode;
f07e9af3 7619 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9e975cc2 7620 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
d2394e6b 7621 val = tp->mac_mode;
1da177e4 7622 } else
d2394e6b
MC
7623 val = 0;
7624
7625 tw32_f(MAC_MODE, val);
1da177e4
LT
7626 udelay(40);
7627
77b483f1
MC
7628 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
7629
7a6f4369
MC
7630 err = tg3_poll_fw(tp);
7631 if (err)
7632 return err;
1da177e4 7633
0a9140cf
MC
7634 tg3_mdio_start(tp);
7635
63c3a66f 7636 if (tg3_flag(tp, PCI_EXPRESS) &&
f6eb9b1f
MC
7637 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
7638 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
63c3a66f 7639 !tg3_flag(tp, 57765_PLUS)) {
ab0049b4 7640 val = tr32(0x7c00);
1da177e4
LT
7641
7642 tw32(0x7c00, val | (1 << 25));
7643 }
7644
d78b59f5
MC
7645 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
7646 val = tr32(TG3_CPMU_CLCK_ORIDE);
7647 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
7648 }
7649
1da177e4 7650 /* Reprobe ASF enable state. */
63c3a66f
JP
7651 tg3_flag_clear(tp, ENABLE_ASF);
7652 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
1da177e4
LT
7653 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
7654 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
7655 u32 nic_cfg;
7656
7657 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
7658 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
63c3a66f 7659 tg3_flag_set(tp, ENABLE_ASF);
4ba526ce 7660 tp->last_event_jiffies = jiffies;
63c3a66f
JP
7661 if (tg3_flag(tp, 5750_PLUS))
7662 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
1da177e4
LT
7663 }
7664 }
7665
7666 return 0;
7667}
7668
7669/* tp->lock is held. */
7670static void tg3_stop_fw(struct tg3 *tp)
7671{
63c3a66f 7672 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
7c5026aa
MC
7673 /* Wait for RX cpu to ACK the previous event. */
7674 tg3_wait_for_event_ack(tp);
1da177e4
LT
7675
7676 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
4ba526ce
MC
7677
7678 tg3_generate_fw_event(tp);
1da177e4 7679
7c5026aa
MC
7680 /* Wait for RX cpu to ACK this event. */
7681 tg3_wait_for_event_ack(tp);
1da177e4
LT
7682 }
7683}
7684
7685/* tp->lock is held. */
944d980e 7686static int tg3_halt(struct tg3 *tp, int kind, int silent)
1da177e4
LT
7687{
7688 int err;
7689
7690 tg3_stop_fw(tp);
7691
944d980e 7692 tg3_write_sig_pre_reset(tp, kind);
1da177e4 7693
b3b7d6be 7694 tg3_abort_hw(tp, silent);
1da177e4
LT
7695 err = tg3_chip_reset(tp);
7696
daba2a63
MC
7697 __tg3_set_mac_addr(tp, 0);
7698
944d980e
MC
7699 tg3_write_sig_legacy(tp, kind);
7700 tg3_write_sig_post_reset(tp, kind);
1da177e4
LT
7701
7702 if (err)
7703 return err;
7704
7705 return 0;
7706}
7707
1da177e4
LT
7708#define RX_CPU_SCRATCH_BASE 0x30000
7709#define RX_CPU_SCRATCH_SIZE 0x04000
7710#define TX_CPU_SCRATCH_BASE 0x34000
7711#define TX_CPU_SCRATCH_SIZE 0x04000
7712
7713/* tp->lock is held. */
7714static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
7715{
7716 int i;
7717
63c3a66f 7718 BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
1da177e4 7719
b5d3772c
MC
7720 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
7721 u32 val = tr32(GRC_VCPU_EXT_CTRL);
7722
7723 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
7724 return 0;
7725 }
1da177e4
LT
7726 if (offset == RX_CPU_BASE) {
7727 for (i = 0; i < 10000; i++) {
7728 tw32(offset + CPU_STATE, 0xffffffff);
7729 tw32(offset + CPU_MODE, CPU_MODE_HALT);
7730 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
7731 break;
7732 }
7733
7734 tw32(offset + CPU_STATE, 0xffffffff);
7735 tw32_f(offset + CPU_MODE, CPU_MODE_HALT);
7736 udelay(10);
7737 } else {
7738 for (i = 0; i < 10000; i++) {
7739 tw32(offset + CPU_STATE, 0xffffffff);
7740 tw32(offset + CPU_MODE, CPU_MODE_HALT);
7741 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
7742 break;
7743 }
7744 }
7745
7746 if (i >= 10000) {
05dbe005
JP
7747 netdev_err(tp->dev, "%s timed out, %s CPU\n",
7748 __func__, offset == RX_CPU_BASE ? "RX" : "TX");
1da177e4
LT
7749 return -ENODEV;
7750 }
ec41c7df
MC
7751
7752 /* Clear firmware's nvram arbitration. */
63c3a66f 7753 if (tg3_flag(tp, NVRAM))
ec41c7df 7754 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
1da177e4
LT
7755 return 0;
7756}
7757
7758struct fw_info {
077f849d
JSR
7759 unsigned int fw_base;
7760 unsigned int fw_len;
7761 const __be32 *fw_data;
1da177e4
LT
7762};
7763
7764/* tp->lock is held. */
7765static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base,
7766 int cpu_scratch_size, struct fw_info *info)
7767{
ec41c7df 7768 int err, lock_err, i;
1da177e4
LT
7769 void (*write_op)(struct tg3 *, u32, u32);
7770
63c3a66f 7771 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
5129c3a3
MC
7772 netdev_err(tp->dev,
7773 "%s: Trying to load TX cpu firmware which is 5705\n",
05dbe005 7774 __func__);
1da177e4
LT
7775 return -EINVAL;
7776 }
7777
63c3a66f 7778 if (tg3_flag(tp, 5705_PLUS))
1da177e4
LT
7779 write_op = tg3_write_mem;
7780 else
7781 write_op = tg3_write_indirect_reg32;
7782
1b628151
MC
7783 /* It is possible that bootcode is still loading at this point.
7784 * Get the nvram lock first before halting the cpu.
7785 */
ec41c7df 7786 lock_err = tg3_nvram_lock(tp);
1da177e4 7787 err = tg3_halt_cpu(tp, cpu_base);
ec41c7df
MC
7788 if (!lock_err)
7789 tg3_nvram_unlock(tp);
1da177e4
LT
7790 if (err)
7791 goto out;
7792
7793 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
7794 write_op(tp, cpu_scratch_base + i, 0);
7795 tw32(cpu_base + CPU_STATE, 0xffffffff);
7796 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
077f849d 7797 for (i = 0; i < (info->fw_len / sizeof(u32)); i++)
1da177e4 7798 write_op(tp, (cpu_scratch_base +
077f849d 7799 (info->fw_base & 0xffff) +
1da177e4 7800 (i * sizeof(u32))),
077f849d 7801 be32_to_cpu(info->fw_data[i]));
1da177e4
LT
7802
7803 err = 0;
7804
7805out:
1da177e4
LT
7806 return err;
7807}
7808
7809/* tp->lock is held. */
7810static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
7811{
7812 struct fw_info info;
077f849d 7813 const __be32 *fw_data;
1da177e4
LT
7814 int err, i;
7815
077f849d
JSR
7816 fw_data = (void *)tp->fw->data;
7817
7818 /* Firmware blob starts with version numbers, followed by
7819 start address and length. We are setting complete length.
7820 length = end_address_of_bss - start_address_of_text.
7821 Remainder is the blob to be loaded contiguously
7822 from start address. */
7823
7824 info.fw_base = be32_to_cpu(fw_data[1]);
7825 info.fw_len = tp->fw->size - 12;
7826 info.fw_data = &fw_data[3];
1da177e4
LT
7827
7828 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
7829 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
7830 &info);
7831 if (err)
7832 return err;
7833
7834 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
7835 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
7836 &info);
7837 if (err)
7838 return err;
7839
7840 /* Now startup only the RX cpu. */
7841 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
077f849d 7842 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
1da177e4
LT
7843
7844 for (i = 0; i < 5; i++) {
077f849d 7845 if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base)
1da177e4
LT
7846 break;
7847 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
7848 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT);
077f849d 7849 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
1da177e4
LT
7850 udelay(1000);
7851 }
7852 if (i >= 5) {
5129c3a3
MC
7853 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
7854 "should be %08x\n", __func__,
05dbe005 7855 tr32(RX_CPU_BASE + CPU_PC), info.fw_base);
1da177e4
LT
7856 return -ENODEV;
7857 }
7858 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
7859 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
7860
7861 return 0;
7862}
7863
1da177e4
LT
7864/* tp->lock is held. */
7865static int tg3_load_tso_firmware(struct tg3 *tp)
7866{
7867 struct fw_info info;
077f849d 7868 const __be32 *fw_data;
1da177e4
LT
7869 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
7870 int err, i;
7871
63c3a66f
JP
7872 if (tg3_flag(tp, HW_TSO_1) ||
7873 tg3_flag(tp, HW_TSO_2) ||
7874 tg3_flag(tp, HW_TSO_3))
1da177e4
LT
7875 return 0;
7876
077f849d
JSR
7877 fw_data = (void *)tp->fw->data;
7878
7879 /* Firmware blob starts with version numbers, followed by
7880 start address and length. We are setting complete length.
7881 length = end_address_of_bss - start_address_of_text.
7882 Remainder is the blob to be loaded contiguously
7883 from start address. */
7884
7885 info.fw_base = be32_to_cpu(fw_data[1]);
7886 cpu_scratch_size = tp->fw_len;
7887 info.fw_len = tp->fw->size - 12;
7888 info.fw_data = &fw_data[3];
7889
1da177e4 7890 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
1da177e4
LT
7891 cpu_base = RX_CPU_BASE;
7892 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
1da177e4 7893 } else {
1da177e4
LT
7894 cpu_base = TX_CPU_BASE;
7895 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
7896 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
7897 }
7898
7899 err = tg3_load_firmware_cpu(tp, cpu_base,
7900 cpu_scratch_base, cpu_scratch_size,
7901 &info);
7902 if (err)
7903 return err;
7904
7905 /* Now startup the cpu. */
7906 tw32(cpu_base + CPU_STATE, 0xffffffff);
077f849d 7907 tw32_f(cpu_base + CPU_PC, info.fw_base);
1da177e4
LT
7908
7909 for (i = 0; i < 5; i++) {
077f849d 7910 if (tr32(cpu_base + CPU_PC) == info.fw_base)
1da177e4
LT
7911 break;
7912 tw32(cpu_base + CPU_STATE, 0xffffffff);
7913 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT);
077f849d 7914 tw32_f(cpu_base + CPU_PC, info.fw_base);
1da177e4
LT
7915 udelay(1000);
7916 }
7917 if (i >= 5) {
5129c3a3
MC
7918 netdev_err(tp->dev,
7919 "%s fails to set CPU PC, is %08x should be %08x\n",
05dbe005 7920 __func__, tr32(cpu_base + CPU_PC), info.fw_base);
1da177e4
LT
7921 return -ENODEV;
7922 }
7923 tw32(cpu_base + CPU_STATE, 0xffffffff);
7924 tw32_f(cpu_base + CPU_MODE, 0x00000000);
7925 return 0;
7926}
7927
1da177e4 7928
1da177e4
LT
7929static int tg3_set_mac_addr(struct net_device *dev, void *p)
7930{
7931 struct tg3 *tp = netdev_priv(dev);
7932 struct sockaddr *addr = p;
986e0aeb 7933 int err = 0, skip_mac_1 = 0;
1da177e4 7934
f9804ddb
MC
7935 if (!is_valid_ether_addr(addr->sa_data))
7936 return -EINVAL;
7937
1da177e4
LT
7938 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
7939
e75f7c90
MC
7940 if (!netif_running(dev))
7941 return 0;
7942
63c3a66f 7943 if (tg3_flag(tp, ENABLE_ASF)) {
986e0aeb 7944 u32 addr0_high, addr0_low, addr1_high, addr1_low;
58712ef9 7945
986e0aeb
MC
7946 addr0_high = tr32(MAC_ADDR_0_HIGH);
7947 addr0_low = tr32(MAC_ADDR_0_LOW);
7948 addr1_high = tr32(MAC_ADDR_1_HIGH);
7949 addr1_low = tr32(MAC_ADDR_1_LOW);
7950
7951 /* Skip MAC addr 1 if ASF is using it. */
7952 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
7953 !(addr1_high == 0 && addr1_low == 0))
7954 skip_mac_1 = 1;
58712ef9 7955 }
986e0aeb
MC
7956 spin_lock_bh(&tp->lock);
7957 __tg3_set_mac_addr(tp, skip_mac_1);
7958 spin_unlock_bh(&tp->lock);
1da177e4 7959
b9ec6c1b 7960 return err;
1da177e4
LT
7961}
7962
7963/* tp->lock is held. */
7964static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
7965 dma_addr_t mapping, u32 maxlen_flags,
7966 u32 nic_addr)
7967{
7968 tg3_write_mem(tp,
7969 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
7970 ((u64) mapping >> 32));
7971 tg3_write_mem(tp,
7972 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
7973 ((u64) mapping & 0xffffffff));
7974 tg3_write_mem(tp,
7975 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
7976 maxlen_flags);
7977
63c3a66f 7978 if (!tg3_flag(tp, 5705_PLUS))
1da177e4
LT
7979 tg3_write_mem(tp,
7980 (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
7981 nic_addr);
7982}
7983
7984static void __tg3_set_rx_mode(struct net_device *);
d244c892 7985static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
15f9850d 7986{
b6080e12
MC
7987 int i;
7988
63c3a66f 7989 if (!tg3_flag(tp, ENABLE_TSS)) {
b6080e12
MC
7990 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
7991 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
7992 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
b6080e12
MC
7993 } else {
7994 tw32(HOSTCC_TXCOL_TICKS, 0);
7995 tw32(HOSTCC_TXMAX_FRAMES, 0);
7996 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
19cfaecc 7997 }
b6080e12 7998
63c3a66f 7999 if (!tg3_flag(tp, ENABLE_RSS)) {
19cfaecc
MC
8000 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
8001 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
8002 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
8003 } else {
b6080e12
MC
8004 tw32(HOSTCC_RXCOL_TICKS, 0);
8005 tw32(HOSTCC_RXMAX_FRAMES, 0);
8006 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
15f9850d 8007 }
b6080e12 8008
63c3a66f 8009 if (!tg3_flag(tp, 5705_PLUS)) {
15f9850d
DM
8010 u32 val = ec->stats_block_coalesce_usecs;
8011
b6080e12
MC
8012 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
8013 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
8014
15f9850d
DM
8015 if (!netif_carrier_ok(tp->dev))
8016 val = 0;
8017
8018 tw32(HOSTCC_STAT_COAL_TICKS, val);
8019 }
b6080e12
MC
8020
8021 for (i = 0; i < tp->irq_cnt - 1; i++) {
8022 u32 reg;
8023
8024 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
8025 tw32(reg, ec->rx_coalesce_usecs);
b6080e12
MC
8026 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
8027 tw32(reg, ec->rx_max_coalesced_frames);
b6080e12
MC
8028 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
8029 tw32(reg, ec->rx_max_coalesced_frames_irq);
19cfaecc 8030
63c3a66f 8031 if (tg3_flag(tp, ENABLE_TSS)) {
19cfaecc
MC
8032 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
8033 tw32(reg, ec->tx_coalesce_usecs);
8034 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
8035 tw32(reg, ec->tx_max_coalesced_frames);
8036 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
8037 tw32(reg, ec->tx_max_coalesced_frames_irq);
8038 }
b6080e12
MC
8039 }
8040
8041 for (; i < tp->irq_max - 1; i++) {
8042 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
b6080e12 8043 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
b6080e12 8044 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
19cfaecc 8045
63c3a66f 8046 if (tg3_flag(tp, ENABLE_TSS)) {
19cfaecc
MC
8047 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
8048 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
8049 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8050 }
b6080e12 8051 }
15f9850d 8052}
1da177e4 8053
2d31ecaf
MC
8054/* tp->lock is held. */
8055static void tg3_rings_reset(struct tg3 *tp)
8056{
8057 int i;
f77a6a8e 8058 u32 stblk, txrcb, rxrcb, limit;
2d31ecaf
MC
8059 struct tg3_napi *tnapi = &tp->napi[0];
8060
8061 /* Disable all transmit rings but the first. */
63c3a66f 8062 if (!tg3_flag(tp, 5705_PLUS))
2d31ecaf 8063 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
63c3a66f 8064 else if (tg3_flag(tp, 5717_PLUS))
3d37728b 8065 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
b703df6f
MC
8066 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
8067 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
2d31ecaf
MC
8068 else
8069 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8070
8071 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8072 txrcb < limit; txrcb += TG3_BDINFO_SIZE)
8073 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
8074 BDINFO_FLAGS_DISABLED);
8075
8076
8077 /* Disable all receive return rings but the first. */
63c3a66f 8078 if (tg3_flag(tp, 5717_PLUS))
f6eb9b1f 8079 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
63c3a66f 8080 else if (!tg3_flag(tp, 5705_PLUS))
2d31ecaf 8081 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
b703df6f
MC
8082 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8083 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
2d31ecaf
MC
8084 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
8085 else
8086 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8087
8088 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8089 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
8090 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
8091 BDINFO_FLAGS_DISABLED);
8092
8093 /* Disable interrupts */
8094 tw32_mailbox_f(tp->napi[0].int_mbox, 1);
0e6cf6a9
MC
8095 tp->napi[0].chk_msi_cnt = 0;
8096 tp->napi[0].last_rx_cons = 0;
8097 tp->napi[0].last_tx_cons = 0;
2d31ecaf
MC
8098
8099 /* Zero mailbox registers. */
63c3a66f 8100 if (tg3_flag(tp, SUPPORT_MSIX)) {
6fd45cb8 8101 for (i = 1; i < tp->irq_max; i++) {
f77a6a8e
MC
8102 tp->napi[i].tx_prod = 0;
8103 tp->napi[i].tx_cons = 0;
63c3a66f 8104 if (tg3_flag(tp, ENABLE_TSS))
c2353a32 8105 tw32_mailbox(tp->napi[i].prodmbox, 0);
f77a6a8e
MC
8106 tw32_rx_mbox(tp->napi[i].consmbox, 0);
8107 tw32_mailbox_f(tp->napi[i].int_mbox, 1);
7f230735 8108 tp->napi[i].chk_msi_cnt = 0;
0e6cf6a9
MC
8109 tp->napi[i].last_rx_cons = 0;
8110 tp->napi[i].last_tx_cons = 0;
f77a6a8e 8111 }
63c3a66f 8112 if (!tg3_flag(tp, ENABLE_TSS))
c2353a32 8113 tw32_mailbox(tp->napi[0].prodmbox, 0);
f77a6a8e
MC
8114 } else {
8115 tp->napi[0].tx_prod = 0;
8116 tp->napi[0].tx_cons = 0;
8117 tw32_mailbox(tp->napi[0].prodmbox, 0);
8118 tw32_rx_mbox(tp->napi[0].consmbox, 0);
8119 }
2d31ecaf
MC
8120
8121 /* Make sure the NIC-based send BD rings are disabled. */
63c3a66f 8122 if (!tg3_flag(tp, 5705_PLUS)) {
2d31ecaf
MC
8123 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
8124 for (i = 0; i < 16; i++)
8125 tw32_tx_mbox(mbox + i * 8, 0);
8126 }
8127
8128 txrcb = NIC_SRAM_SEND_RCB;
8129 rxrcb = NIC_SRAM_RCV_RET_RCB;
8130
8131 /* Clear status block in ram. */
8132 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8133
8134 /* Set status block DMA address */
8135 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
8136 ((u64) tnapi->status_mapping >> 32));
8137 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8138 ((u64) tnapi->status_mapping & 0xffffffff));
8139
f77a6a8e
MC
8140 if (tnapi->tx_ring) {
8141 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8142 (TG3_TX_RING_SIZE <<
8143 BDINFO_FLAGS_MAXLEN_SHIFT),
8144 NIC_SRAM_TX_BUFFER_DESC);
8145 txrcb += TG3_BDINFO_SIZE;
8146 }
8147
8148 if (tnapi->rx_rcb) {
8149 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
7cb32cf2
MC
8150 (tp->rx_ret_ring_mask + 1) <<
8151 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
f77a6a8e
MC
8152 rxrcb += TG3_BDINFO_SIZE;
8153 }
8154
8155 stblk = HOSTCC_STATBLCK_RING1;
2d31ecaf 8156
f77a6a8e
MC
8157 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
8158 u64 mapping = (u64)tnapi->status_mapping;
8159 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
8160 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
8161
8162 /* Clear status block in ram. */
8163 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8164
19cfaecc
MC
8165 if (tnapi->tx_ring) {
8166 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8167 (TG3_TX_RING_SIZE <<
8168 BDINFO_FLAGS_MAXLEN_SHIFT),
8169 NIC_SRAM_TX_BUFFER_DESC);
8170 txrcb += TG3_BDINFO_SIZE;
8171 }
f77a6a8e
MC
8172
8173 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
7cb32cf2 8174 ((tp->rx_ret_ring_mask + 1) <<
f77a6a8e
MC
8175 BDINFO_FLAGS_MAXLEN_SHIFT), 0);
8176
8177 stblk += 8;
f77a6a8e
MC
8178 rxrcb += TG3_BDINFO_SIZE;
8179 }
2d31ecaf
MC
8180}
8181
eb07a940
MC
8182static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
8183{
8184 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
8185
63c3a66f
JP
8186 if (!tg3_flag(tp, 5750_PLUS) ||
8187 tg3_flag(tp, 5780_CLASS) ||
eb07a940
MC
8188 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
8189 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
8190 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
8191 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8192 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8193 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
8194 else
8195 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
8196
8197 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
8198 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
8199
8200 val = min(nic_rep_thresh, host_rep_thresh);
8201 tw32(RCVBDI_STD_THRESH, val);
8202
63c3a66f 8203 if (tg3_flag(tp, 57765_PLUS))
eb07a940
MC
8204 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
8205
63c3a66f 8206 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
eb07a940
MC
8207 return;
8208
63c3a66f 8209 if (!tg3_flag(tp, 5705_PLUS))
eb07a940
MC
8210 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
8211 else
8212 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5717;
8213
8214 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
8215
8216 val = min(bdcache_maxcnt / 2, host_rep_thresh);
8217 tw32(RCVBDI_JUMBO_THRESH, val);
8218
63c3a66f 8219 if (tg3_flag(tp, 57765_PLUS))
eb07a940
MC
8220 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
8221}
8222
1da177e4 8223/* tp->lock is held. */
8e7a22e3 8224static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
1da177e4
LT
8225{
8226 u32 val, rdmac_mode;
8227 int i, err, limit;
8fea32b9 8228 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
1da177e4
LT
8229
8230 tg3_disable_ints(tp);
8231
8232 tg3_stop_fw(tp);
8233
8234 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
8235
63c3a66f 8236 if (tg3_flag(tp, INIT_COMPLETE))
e6de8ad1 8237 tg3_abort_hw(tp, 1);
1da177e4 8238
699c0193
MC
8239 /* Enable MAC control of LPI */
8240 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) {
8241 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL,
8242 TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
8243 TG3_CPMU_EEE_LNKIDL_UART_IDL);
8244
8245 tw32_f(TG3_CPMU_EEE_CTRL,
8246 TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
8247
a386b901
MC
8248 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
8249 TG3_CPMU_EEEMD_LPI_IN_TX |
8250 TG3_CPMU_EEEMD_LPI_IN_RX |
8251 TG3_CPMU_EEEMD_EEE_ENABLE;
8252
8253 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8254 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
8255
63c3a66f 8256 if (tg3_flag(tp, ENABLE_APE))
a386b901
MC
8257 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
8258
8259 tw32_f(TG3_CPMU_EEE_MODE, val);
8260
8261 tw32_f(TG3_CPMU_EEE_DBTMR1,
8262 TG3_CPMU_DBTMR1_PCIEXIT_2047US |
8263 TG3_CPMU_DBTMR1_LNKIDLE_2047US);
8264
8265 tw32_f(TG3_CPMU_EEE_DBTMR2,
d7f2ab20 8266 TG3_CPMU_DBTMR2_APE_TX_2047US |
a386b901 8267 TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
699c0193
MC
8268 }
8269
603f1173 8270 if (reset_phy)
d4d2c558
MC
8271 tg3_phy_reset(tp);
8272
1da177e4
LT
8273 err = tg3_chip_reset(tp);
8274 if (err)
8275 return err;
8276
8277 tg3_write_sig_legacy(tp, RESET_KIND_INIT);
8278
bcb37f6c 8279 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
d30cdd28
MC
8280 val = tr32(TG3_CPMU_CTRL);
8281 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
8282 tw32(TG3_CPMU_CTRL, val);
9acb961e
MC
8283
8284 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8285 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8286 val |= CPMU_LSPD_10MB_MACCLK_6_25;
8287 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8288
8289 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
8290 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
8291 val |= CPMU_LNK_AWARE_MACCLK_6_25;
8292 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
8293
8294 val = tr32(TG3_CPMU_HST_ACC);
8295 val &= ~CPMU_HST_ACC_MACCLK_MASK;
8296 val |= CPMU_HST_ACC_MACCLK_6_25;
8297 tw32(TG3_CPMU_HST_ACC, val);
d30cdd28
MC
8298 }
8299
33466d93
MC
8300 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
8301 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
8302 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
8303 PCIE_PWR_MGMT_L1_THRESH_4MS;
8304 tw32(PCIE_PWR_MGMT_THRESH, val);
521e6b90
MC
8305
8306 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
8307 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
8308
8309 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
33466d93 8310
f40386c8
MC
8311 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8312 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
255ca311
MC
8313 }
8314
63c3a66f 8315 if (tg3_flag(tp, L1PLLPD_EN)) {
614b0590
MC
8316 u32 grc_mode = tr32(GRC_MODE);
8317
8318 /* Access the lower 1K of PL PCIE block registers. */
8319 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8320 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8321
8322 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
8323 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
8324 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
8325
8326 tw32(GRC_MODE, grc_mode);
8327 }
8328
5093eedc
MC
8329 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
8330 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
8331 u32 grc_mode = tr32(GRC_MODE);
cea46462 8332
5093eedc
MC
8333 /* Access the lower 1K of PL PCIE block registers. */
8334 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8335 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
cea46462 8336
5093eedc
MC
8337 val = tr32(TG3_PCIE_TLDLPL_PORT +
8338 TG3_PCIE_PL_LO_PHYCTL5);
8339 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
8340 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
cea46462 8341
5093eedc
MC
8342 tw32(GRC_MODE, grc_mode);
8343 }
a977dbe8 8344
1ff30a59
MC
8345 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) {
8346 u32 grc_mode = tr32(GRC_MODE);
8347
8348 /* Access the lower 1K of DL PCIE block registers. */
8349 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8350 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
8351
8352 val = tr32(TG3_PCIE_TLDLPL_PORT +
8353 TG3_PCIE_DL_LO_FTSMAX);
8354 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
8355 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
8356 val | TG3_PCIE_DL_LO_FTSMAX_VAL);
8357
8358 tw32(GRC_MODE, grc_mode);
8359 }
8360
a977dbe8
MC
8361 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8362 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8363 val |= CPMU_LSPD_10MB_MACCLK_6_25;
8364 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
cea46462
MC
8365 }
8366
1da177e4
LT
8367 /* This works around an issue with Athlon chipsets on
8368 * B3 tigon3 silicon. This bit has no effect on any
8369 * other revision. But do not set this on PCI Express
795d01c5 8370 * chips and don't even touch the clocks if the CPMU is present.
1da177e4 8371 */
63c3a66f
JP
8372 if (!tg3_flag(tp, CPMU_PRESENT)) {
8373 if (!tg3_flag(tp, PCI_EXPRESS))
795d01c5
MC
8374 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
8375 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8376 }
1da177e4
LT
8377
8378 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
63c3a66f 8379 tg3_flag(tp, PCIX_MODE)) {
1da177e4
LT
8380 val = tr32(TG3PCI_PCISTATE);
8381 val |= PCISTATE_RETRY_SAME_DMA;
8382 tw32(TG3PCI_PCISTATE, val);
8383 }
8384
63c3a66f 8385 if (tg3_flag(tp, ENABLE_APE)) {
0d3031d9
MC
8386 /* Allow reads and writes to the
8387 * APE register and memory space.
8388 */
8389 val = tr32(TG3PCI_PCISTATE);
8390 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
f92d9dc1
MC
8391 PCISTATE_ALLOW_APE_SHMEM_WR |
8392 PCISTATE_ALLOW_APE_PSPACE_WR;
0d3031d9
MC
8393 tw32(TG3PCI_PCISTATE, val);
8394 }
8395
1da177e4
LT
8396 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
8397 /* Enable some hw fixes. */
8398 val = tr32(TG3PCI_MSI_DATA);
8399 val |= (1 << 26) | (1 << 28) | (1 << 29);
8400 tw32(TG3PCI_MSI_DATA, val);
8401 }
8402
8403 /* Descriptor ring init may make accesses to the
8404 * NIC SRAM area to setup the TX descriptors, so we
8405 * can only do this after the hardware has been
8406 * successfully reset.
8407 */
32d8c572
MC
8408 err = tg3_init_rings(tp);
8409 if (err)
8410 return err;
1da177e4 8411
63c3a66f 8412 if (tg3_flag(tp, 57765_PLUS)) {
cbf9ca6c
MC
8413 val = tr32(TG3PCI_DMA_RW_CTRL) &
8414 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
1a319025
MC
8415 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0)
8416 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
0aebff48
MC
8417 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57765 &&
8418 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8419 val |= DMA_RWCTRL_TAGGED_STAT_WA;
cbf9ca6c
MC
8420 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
8421 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
8422 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
d30cdd28
MC
8423 /* This value is determined during the probe time DMA
8424 * engine test, tg3_test_dma.
8425 */
8426 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
8427 }
1da177e4
LT
8428
8429 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
8430 GRC_MODE_4X_NIC_SEND_RINGS |
8431 GRC_MODE_NO_TX_PHDR_CSUM |
8432 GRC_MODE_NO_RX_PHDR_CSUM);
8433 tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
d2d746f8
MC
8434
8435 /* Pseudo-header checksum is done by hardware logic and not
8436 * the offload processers, so make the chip do the pseudo-
8437 * header checksums on receive. For transmit it is more
8438 * convenient to do the pseudo-header checksum in software
8439 * as Linux does that on transmit for us in all cases.
8440 */
8441 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
1da177e4
LT
8442
8443 tw32(GRC_MODE,
8444 tp->grc_mode |
8445 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
8446
8447 /* Setup the timer prescalar register. Clock is always 66Mhz. */
8448 val = tr32(GRC_MISC_CFG);
8449 val &= ~0xff;
8450 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
8451 tw32(GRC_MISC_CFG, val);
8452
8453 /* Initialize MBUF/DESC pool. */
63c3a66f 8454 if (tg3_flag(tp, 5750_PLUS)) {
1da177e4
LT
8455 /* Do nothing. */
8456 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
8457 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
8458 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
8459 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
8460 else
8461 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
8462 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
8463 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
63c3a66f 8464 } else if (tg3_flag(tp, TSO_CAPABLE)) {
1da177e4
LT
8465 int fw_len;
8466
077f849d 8467 fw_len = tp->fw_len;
1da177e4
LT
8468 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
8469 tw32(BUFMGR_MB_POOL_ADDR,
8470 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
8471 tw32(BUFMGR_MB_POOL_SIZE,
8472 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
8473 }
1da177e4 8474
0f893dc6 8475 if (tp->dev->mtu <= ETH_DATA_LEN) {
1da177e4
LT
8476 tw32(BUFMGR_MB_RDMA_LOW_WATER,
8477 tp->bufmgr_config.mbuf_read_dma_low_water);
8478 tw32(BUFMGR_MB_MACRX_LOW_WATER,
8479 tp->bufmgr_config.mbuf_mac_rx_low_water);
8480 tw32(BUFMGR_MB_HIGH_WATER,
8481 tp->bufmgr_config.mbuf_high_water);
8482 } else {
8483 tw32(BUFMGR_MB_RDMA_LOW_WATER,
8484 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
8485 tw32(BUFMGR_MB_MACRX_LOW_WATER,
8486 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
8487 tw32(BUFMGR_MB_HIGH_WATER,
8488 tp->bufmgr_config.mbuf_high_water_jumbo);
8489 }
8490 tw32(BUFMGR_DMA_LOW_WATER,
8491 tp->bufmgr_config.dma_low_water);
8492 tw32(BUFMGR_DMA_HIGH_WATER,
8493 tp->bufmgr_config.dma_high_water);
8494
d309a46e
MC
8495 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
8496 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
8497 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
4d958473
MC
8498 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
8499 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
8500 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0)
8501 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
d309a46e 8502 tw32(BUFMGR_MODE, val);
1da177e4
LT
8503 for (i = 0; i < 2000; i++) {
8504 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
8505 break;
8506 udelay(10);
8507 }
8508 if (i >= 2000) {
05dbe005 8509 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
1da177e4
LT
8510 return -ENODEV;
8511 }
8512
eb07a940
MC
8513 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
8514 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
b5d3772c 8515
eb07a940 8516 tg3_setup_rxbd_thresholds(tp);
1da177e4
LT
8517
8518 /* Initialize TG3_BDINFO's at:
8519 * RCVDBDI_STD_BD: standard eth size rx ring
8520 * RCVDBDI_JUMBO_BD: jumbo frame rx ring
8521 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work)
8522 *
8523 * like so:
8524 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring
8525 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) |
8526 * ring attribute flags
8527 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM
8528 *
8529 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
8530 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
8531 *
8532 * The size of each ring is fixed in the firmware, but the location is
8533 * configurable.
8534 */
8535 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
21f581a5 8536 ((u64) tpr->rx_std_mapping >> 32));
1da177e4 8537 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
21f581a5 8538 ((u64) tpr->rx_std_mapping & 0xffffffff));
63c3a66f 8539 if (!tg3_flag(tp, 5717_PLUS))
87668d35
MC
8540 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
8541 NIC_SRAM_RX_BUFFER_DESC);
1da177e4 8542
fdb72b38 8543 /* Disable the mini ring */
63c3a66f 8544 if (!tg3_flag(tp, 5705_PLUS))
1da177e4
LT
8545 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
8546 BDINFO_FLAGS_DISABLED);
8547
fdb72b38
MC
8548 /* Program the jumbo buffer descriptor ring control
8549 * blocks on those devices that have them.
8550 */
a0512944 8551 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
63c3a66f 8552 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
1da177e4 8553
63c3a66f 8554 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
1da177e4 8555 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
21f581a5 8556 ((u64) tpr->rx_jmb_mapping >> 32));
1da177e4 8557 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
21f581a5 8558 ((u64) tpr->rx_jmb_mapping & 0xffffffff));
de9f5230
MC
8559 val = TG3_RX_JMB_RING_SIZE(tp) <<
8560 BDINFO_FLAGS_MAXLEN_SHIFT;
1da177e4 8561 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
de9f5230 8562 val | BDINFO_FLAGS_USE_EXT_RECV);
63c3a66f 8563 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
a50d0796 8564 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
87668d35
MC
8565 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
8566 NIC_SRAM_RX_JUMBO_BUFFER_DESC);
1da177e4
LT
8567 } else {
8568 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
8569 BDINFO_FLAGS_DISABLED);
8570 }
8571
63c3a66f 8572 if (tg3_flag(tp, 57765_PLUS)) {
7cb32cf2 8573 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
de9f5230 8574 val = TG3_RX_STD_MAX_SIZE_5700;
7cb32cf2 8575 else
de9f5230 8576 val = TG3_RX_STD_MAX_SIZE_5717;
7cb32cf2
MC
8577 val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
8578 val |= (TG3_RX_STD_DMA_SZ << 2);
8579 } else
04380d40 8580 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
fdb72b38 8581 } else
de9f5230 8582 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
fdb72b38
MC
8583
8584 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
1da177e4 8585
411da640 8586 tpr->rx_std_prod_idx = tp->rx_pending;
66711e66 8587 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
1da177e4 8588
63c3a66f
JP
8589 tpr->rx_jmb_prod_idx =
8590 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
66711e66 8591 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
1da177e4 8592
2d31ecaf
MC
8593 tg3_rings_reset(tp);
8594
1da177e4 8595 /* Initialize MAC address and backoff seed. */
986e0aeb 8596 __tg3_set_mac_addr(tp, 0);
1da177e4
LT
8597
8598 /* MTU + ethernet header + FCS + optional VLAN tag */
f7b493e0
MC
8599 tw32(MAC_RX_MTU_SIZE,
8600 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
1da177e4
LT
8601
8602 /* The slot time is changed by tg3_setup_phy if we
8603 * run at gigabit with half duplex.
8604 */
f2096f94
MC
8605 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
8606 (6 << TX_LENGTHS_IPG_SHIFT) |
8607 (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
8608
8609 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
8610 val |= tr32(MAC_TX_LENGTHS) &
8611 (TX_LENGTHS_JMB_FRM_LEN_MSK |
8612 TX_LENGTHS_CNT_DWN_VAL_MSK);
8613
8614 tw32(MAC_TX_LENGTHS, val);
1da177e4
LT
8615
8616 /* Receive rules. */
8617 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
8618 tw32(RCVLPC_CONFIG, 0x0181);
8619
8620 /* Calculate RDMAC_MODE setting early, we need it to determine
8621 * the RCVLPC_STATE_ENABLE mask.
8622 */
8623 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
8624 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
8625 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
8626 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
8627 RDMAC_MODE_LNGREAD_ENAB);
85e94ced 8628
deabaac8 8629 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717)
0339e4e3
MC
8630 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
8631
57e6983c 8632 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
321d32a0
MC
8633 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
8634 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
d30cdd28
MC
8635 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
8636 RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
8637 RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
8638
c5908939
MC
8639 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
8640 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
63c3a66f 8641 if (tg3_flag(tp, TSO_CAPABLE) &&
c13e3713 8642 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
1da177e4
LT
8643 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
8644 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
63c3a66f 8645 !tg3_flag(tp, IS_5788)) {
1da177e4
LT
8646 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
8647 }
8648 }
8649
63c3a66f 8650 if (tg3_flag(tp, PCI_EXPRESS))
85e94ced
MC
8651 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
8652
63c3a66f
JP
8653 if (tg3_flag(tp, HW_TSO_1) ||
8654 tg3_flag(tp, HW_TSO_2) ||
8655 tg3_flag(tp, HW_TSO_3))
027455ad
MC
8656 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
8657
108a6c16 8658 if (tg3_flag(tp, 57765_PLUS) ||
e849cdc3 8659 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
027455ad
MC
8660 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
8661 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
1da177e4 8662
f2096f94
MC
8663 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
8664 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
8665
41a8a7ee
MC
8666 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
8667 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
8668 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
8669 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
63c3a66f 8670 tg3_flag(tp, 57765_PLUS)) {
41a8a7ee 8671 val = tr32(TG3_RDMA_RSRVCTRL_REG);
d78b59f5
MC
8672 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
8673 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
b4495ed8
MC
8674 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
8675 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
8676 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
8677 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
8678 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
8679 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
b75cc0e4 8680 }
41a8a7ee
MC
8681 tw32(TG3_RDMA_RSRVCTRL_REG,
8682 val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
8683 }
8684
d78b59f5
MC
8685 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
8686 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
d309a46e
MC
8687 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
8688 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val |
8689 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
8690 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
8691 }
8692
1da177e4 8693 /* Receive/send statistics. */
63c3a66f 8694 if (tg3_flag(tp, 5750_PLUS)) {
1661394e
MC
8695 val = tr32(RCVLPC_STATS_ENABLE);
8696 val &= ~RCVLPC_STATSENAB_DACK_FIX;
8697 tw32(RCVLPC_STATS_ENABLE, val);
8698 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
63c3a66f 8699 tg3_flag(tp, TSO_CAPABLE)) {
1da177e4
LT
8700 val = tr32(RCVLPC_STATS_ENABLE);
8701 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
8702 tw32(RCVLPC_STATS_ENABLE, val);
8703 } else {
8704 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
8705 }
8706 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
8707 tw32(SNDDATAI_STATSENAB, 0xffffff);
8708 tw32(SNDDATAI_STATSCTRL,
8709 (SNDDATAI_SCTRL_ENABLE |
8710 SNDDATAI_SCTRL_FASTUPD));
8711
8712 /* Setup host coalescing engine. */
8713 tw32(HOSTCC_MODE, 0);
8714 for (i = 0; i < 2000; i++) {
8715 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
8716 break;
8717 udelay(10);
8718 }
8719
d244c892 8720 __tg3_set_coalesce(tp, &tp->coal);
1da177e4 8721
63c3a66f 8722 if (!tg3_flag(tp, 5705_PLUS)) {
1da177e4
LT
8723 /* Status/statistics block address. See tg3_timer,
8724 * the tg3_periodic_fetch_stats call there, and
8725 * tg3_get_stats to see how this works for 5705/5750 chips.
8726 */
1da177e4
LT
8727 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
8728 ((u64) tp->stats_mapping >> 32));
8729 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8730 ((u64) tp->stats_mapping & 0xffffffff));
8731 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
2d31ecaf 8732
1da177e4 8733 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
2d31ecaf
MC
8734
8735 /* Clear statistics and status block memory areas */
8736 for (i = NIC_SRAM_STATS_BLK;
8737 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
8738 i += sizeof(u32)) {
8739 tg3_write_mem(tp, i, 0);
8740 udelay(40);
8741 }
1da177e4
LT
8742 }
8743
8744 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
8745
8746 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
8747 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
63c3a66f 8748 if (!tg3_flag(tp, 5705_PLUS))
1da177e4
LT
8749 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
8750
f07e9af3
MC
8751 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
8752 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
c94e3941
MC
8753 /* reset to prevent losing 1st rx packet intermittently */
8754 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8755 udelay(10);
8756 }
8757
3bda1258 8758 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
9e975cc2
MC
8759 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
8760 MAC_MODE_FHDE_ENABLE;
8761 if (tg3_flag(tp, ENABLE_APE))
8762 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
63c3a66f 8763 if (!tg3_flag(tp, 5705_PLUS) &&
f07e9af3 8764 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
e8f3f6ca
MC
8765 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
8766 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
1da177e4
LT
8767 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
8768 udelay(40);
8769
314fba34 8770 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
63c3a66f 8771 * If TG3_FLAG_IS_NIC is zero, we should read the
314fba34
MC
8772 * register to preserve the GPIO settings for LOMs. The GPIOs,
8773 * whether used as inputs or outputs, are set by boot code after
8774 * reset.
8775 */
63c3a66f 8776 if (!tg3_flag(tp, IS_NIC)) {
314fba34
MC
8777 u32 gpio_mask;
8778
9d26e213
MC
8779 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
8780 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
8781 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
3e7d83bc
MC
8782
8783 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
8784 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
8785 GRC_LCLCTRL_GPIO_OUTPUT3;
8786
af36e6b6
MC
8787 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
8788 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
8789
aaf84465 8790 tp->grc_local_ctrl &= ~gpio_mask;
314fba34
MC
8791 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
8792
8793 /* GPIO1 must be driven high for eeprom write protect */
63c3a66f 8794 if (tg3_flag(tp, EEPROM_WRITE_PROT))
9d26e213
MC
8795 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
8796 GRC_LCLCTRL_GPIO_OUTPUT1);
314fba34 8797 }
1da177e4
LT
8798 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
8799 udelay(100);
8800
63c3a66f 8801 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) {
baf8a94a
MC
8802 val = tr32(MSGINT_MODE);
8803 val |= MSGINT_MODE_MULTIVEC_EN | MSGINT_MODE_ENABLE;
8804 tw32(MSGINT_MODE, val);
8805 }
8806
63c3a66f 8807 if (!tg3_flag(tp, 5705_PLUS)) {
1da177e4
LT
8808 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
8809 udelay(40);
8810 }
8811
8812 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
8813 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
8814 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
8815 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
8816 WDMAC_MODE_LNGREAD_ENAB);
8817
c5908939
MC
8818 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
8819 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
63c3a66f 8820 if (tg3_flag(tp, TSO_CAPABLE) &&
1da177e4
LT
8821 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
8822 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
8823 /* nothing */
8824 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
63c3a66f 8825 !tg3_flag(tp, IS_5788)) {
1da177e4
LT
8826 val |= WDMAC_MODE_RX_ACCEL;
8827 }
8828 }
8829
d9ab5ad1 8830 /* Enable host coalescing bug fix */
63c3a66f 8831 if (tg3_flag(tp, 5755_PLUS))
f51f3562 8832 val |= WDMAC_MODE_STATUS_TAG_FIX;
d9ab5ad1 8833
788a035e
MC
8834 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
8835 val |= WDMAC_MODE_BURST_ALL_DATA;
8836
1da177e4
LT
8837 tw32_f(WDMAC_MODE, val);
8838 udelay(40);
8839
63c3a66f 8840 if (tg3_flag(tp, PCIX_MODE)) {
9974a356
MC
8841 u16 pcix_cmd;
8842
8843 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8844 &pcix_cmd);
1da177e4 8845 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
9974a356
MC
8846 pcix_cmd &= ~PCI_X_CMD_MAX_READ;
8847 pcix_cmd |= PCI_X_CMD_READ_2K;
1da177e4 8848 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
9974a356
MC
8849 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
8850 pcix_cmd |= PCI_X_CMD_READ_2K;
1da177e4 8851 }
9974a356
MC
8852 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8853 pcix_cmd);
1da177e4
LT
8854 }
8855
8856 tw32_f(RDMAC_MODE, rdmac_mode);
8857 udelay(40);
8858
8859 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
63c3a66f 8860 if (!tg3_flag(tp, 5705_PLUS))
1da177e4 8861 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
9936bcf6
MC
8862
8863 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
8864 tw32(SNDDATAC_MODE,
8865 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
8866 else
8867 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
8868
1da177e4
LT
8869 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
8870 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
7cb32cf2 8871 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
63c3a66f 8872 if (tg3_flag(tp, LRG_PROD_RING_CAP))
7cb32cf2
MC
8873 val |= RCVDBDI_MODE_LRG_RING_SZ;
8874 tw32(RCVDBDI_MODE, val);
1da177e4 8875 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
63c3a66f
JP
8876 if (tg3_flag(tp, HW_TSO_1) ||
8877 tg3_flag(tp, HW_TSO_2) ||
8878 tg3_flag(tp, HW_TSO_3))
1da177e4 8879 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
baf8a94a 8880 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
63c3a66f 8881 if (tg3_flag(tp, ENABLE_TSS))
baf8a94a
MC
8882 val |= SNDBDI_MODE_MULTI_TXQ_EN;
8883 tw32(SNDBDI_MODE, val);
1da177e4
LT
8884 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
8885
8886 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
8887 err = tg3_load_5701_a0_firmware_fix(tp);
8888 if (err)
8889 return err;
8890 }
8891
63c3a66f 8892 if (tg3_flag(tp, TSO_CAPABLE)) {
1da177e4
LT
8893 err = tg3_load_tso_firmware(tp);
8894 if (err)
8895 return err;
8896 }
1da177e4
LT
8897
8898 tp->tx_mode = TX_MODE_ENABLE;
f2096f94 8899
63c3a66f 8900 if (tg3_flag(tp, 5755_PLUS) ||
b1d05210
MC
8901 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
8902 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
f2096f94
MC
8903
8904 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8905 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
8906 tp->tx_mode &= ~val;
8907 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
8908 }
8909
1da177e4
LT
8910 tw32_f(MAC_TX_MODE, tp->tx_mode);
8911 udelay(100);
8912
63c3a66f 8913 if (tg3_flag(tp, ENABLE_RSS)) {
9d53fa12 8914 int i = 0;
baf8a94a 8915 u32 reg = MAC_RSS_INDIR_TBL_0;
baf8a94a 8916
9d53fa12
MC
8917 if (tp->irq_cnt == 2) {
8918 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i += 8) {
8919 tw32(reg, 0x0);
8920 reg += 4;
8921 }
8922 } else {
8923 u32 val;
baf8a94a 8924
9d53fa12
MC
8925 while (i < TG3_RSS_INDIR_TBL_SIZE) {
8926 val = i % (tp->irq_cnt - 1);
8927 i++;
8928 for (; i % 8; i++) {
8929 val <<= 4;
8930 val |= (i % (tp->irq_cnt - 1));
8931 }
baf8a94a
MC
8932 tw32(reg, val);
8933 reg += 4;
8934 }
8935 }
8936
8937 /* Setup the "secret" hash key. */
8938 tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
8939 tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
8940 tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
8941 tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
8942 tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
8943 tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
8944 tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
8945 tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
8946 tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
8947 tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
8948 }
8949
1da177e4 8950 tp->rx_mode = RX_MODE_ENABLE;
63c3a66f 8951 if (tg3_flag(tp, 5755_PLUS))
af36e6b6
MC
8952 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
8953
63c3a66f 8954 if (tg3_flag(tp, ENABLE_RSS))
baf8a94a
MC
8955 tp->rx_mode |= RX_MODE_RSS_ENABLE |
8956 RX_MODE_RSS_ITBL_HASH_BITS_7 |
8957 RX_MODE_RSS_IPV6_HASH_EN |
8958 RX_MODE_RSS_TCP_IPV6_HASH_EN |
8959 RX_MODE_RSS_IPV4_HASH_EN |
8960 RX_MODE_RSS_TCP_IPV4_HASH_EN;
8961
1da177e4
LT
8962 tw32_f(MAC_RX_MODE, tp->rx_mode);
8963 udelay(10);
8964
1da177e4
LT
8965 tw32(MAC_LED_CTRL, tp->led_ctrl);
8966
8967 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
f07e9af3 8968 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
1da177e4
LT
8969 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8970 udelay(10);
8971 }
8972 tw32_f(MAC_RX_MODE, tp->rx_mode);
8973 udelay(10);
8974
f07e9af3 8975 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
1da177e4 8976 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
f07e9af3 8977 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
1da177e4
LT
8978 /* Set drive transmission level to 1.2V */
8979 /* only if the signal pre-emphasis bit is not set */
8980 val = tr32(MAC_SERDES_CFG);
8981 val &= 0xfffff000;
8982 val |= 0x880;
8983 tw32(MAC_SERDES_CFG, val);
8984 }
8985 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
8986 tw32(MAC_SERDES_CFG, 0x616000);
8987 }
8988
8989 /* Prevent chip from dropping frames when flow control
8990 * is enabled.
8991 */
666bc831
MC
8992 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
8993 val = 1;
8994 else
8995 val = 2;
8996 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
1da177e4
LT
8997
8998 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
f07e9af3 8999 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
1da177e4 9000 /* Use hardware link auto-negotiation */
63c3a66f 9001 tg3_flag_set(tp, HW_AUTONEG);
1da177e4
LT
9002 }
9003
f07e9af3 9004 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
6ff6f81d 9005 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
d4d2c558
MC
9006 u32 tmp;
9007
9008 tmp = tr32(SERDES_RX_CTRL);
9009 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
9010 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
9011 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
9012 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9013 }
9014
63c3a66f 9015 if (!tg3_flag(tp, USE_PHYLIB)) {
80096068
MC
9016 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
9017 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
dd477003
MC
9018 tp->link_config.speed = tp->link_config.orig_speed;
9019 tp->link_config.duplex = tp->link_config.orig_duplex;
9020 tp->link_config.autoneg = tp->link_config.orig_autoneg;
9021 }
1da177e4 9022
dd477003
MC
9023 err = tg3_setup_phy(tp, 0);
9024 if (err)
9025 return err;
1da177e4 9026
f07e9af3
MC
9027 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9028 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
dd477003
MC
9029 u32 tmp;
9030
9031 /* Clear CRC stats. */
9032 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
9033 tg3_writephy(tp, MII_TG3_TEST1,
9034 tmp | MII_TG3_TEST1_CRC_EN);
f08aa1a8 9035 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
dd477003 9036 }
1da177e4
LT
9037 }
9038 }
9039
9040 __tg3_set_rx_mode(tp->dev);
9041
9042 /* Initialize receive rules. */
9043 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK);
9044 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
9045 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK);
9046 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
9047
63c3a66f 9048 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
1da177e4
LT
9049 limit = 8;
9050 else
9051 limit = 16;
63c3a66f 9052 if (tg3_flag(tp, ENABLE_ASF))
1da177e4
LT
9053 limit -= 4;
9054 switch (limit) {
9055 case 16:
9056 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0);
9057 case 15:
9058 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0);
9059 case 14:
9060 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0);
9061 case 13:
9062 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0);
9063 case 12:
9064 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0);
9065 case 11:
9066 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0);
9067 case 10:
9068 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0);
9069 case 9:
9070 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0);
9071 case 8:
9072 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0);
9073 case 7:
9074 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0);
9075 case 6:
9076 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0);
9077 case 5:
9078 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0);
9079 case 4:
9080 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */
9081 case 3:
9082 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */
9083 case 2:
9084 case 1:
9085
9086 default:
9087 break;
855e1111 9088 }
1da177e4 9089
63c3a66f 9090 if (tg3_flag(tp, ENABLE_APE))
9ce768ea
MC
9091 /* Write our heartbeat update interval to APE. */
9092 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
9093 APE_HOST_HEARTBEAT_INT_DISABLE);
0d3031d9 9094
1da177e4
LT
9095 tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
9096
1da177e4
LT
9097 return 0;
9098}
9099
9100/* Called at device open time to get the chip ready for
9101 * packet processing. Invoked with tp->lock held.
9102 */
8e7a22e3 9103static int tg3_init_hw(struct tg3 *tp, int reset_phy)
1da177e4 9104{
1da177e4
LT
9105 tg3_switch_clocks(tp);
9106
9107 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
9108
2f751b67 9109 return tg3_reset_hw(tp, reset_phy);
1da177e4
LT
9110}
9111
9112#define TG3_STAT_ADD32(PSTAT, REG) \
9113do { u32 __val = tr32(REG); \
9114 (PSTAT)->low += __val; \
9115 if ((PSTAT)->low < __val) \
9116 (PSTAT)->high += 1; \
9117} while (0)
9118
9119static void tg3_periodic_fetch_stats(struct tg3 *tp)
9120{
9121 struct tg3_hw_stats *sp = tp->hw_stats;
9122
9123 if (!netif_carrier_ok(tp->dev))
9124 return;
9125
9126 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
9127 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
9128 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
9129 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
9130 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
9131 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
9132 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
9133 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
9134 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
9135 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
9136 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
9137 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
9138 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
9139
9140 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
9141 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
9142 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
9143 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
9144 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
9145 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
9146 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
9147 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
9148 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
9149 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
9150 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
9151 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
9152 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
9153 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
463d305b
MC
9154
9155 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
310050fa
MC
9156 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9157 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 &&
9158 tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) {
4d958473
MC
9159 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
9160 } else {
9161 u32 val = tr32(HOSTCC_FLOW_ATTN);
9162 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
9163 if (val) {
9164 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
9165 sp->rx_discards.low += val;
9166 if (sp->rx_discards.low < val)
9167 sp->rx_discards.high += 1;
9168 }
9169 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
9170 }
463d305b 9171 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
1da177e4
LT
9172}
9173
0e6cf6a9
MC
9174static void tg3_chk_missed_msi(struct tg3 *tp)
9175{
9176 u32 i;
9177
9178 for (i = 0; i < tp->irq_cnt; i++) {
9179 struct tg3_napi *tnapi = &tp->napi[i];
9180
9181 if (tg3_has_work(tnapi)) {
9182 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
9183 tnapi->last_tx_cons == tnapi->tx_cons) {
9184 if (tnapi->chk_msi_cnt < 1) {
9185 tnapi->chk_msi_cnt++;
9186 return;
9187 }
7f230735 9188 tg3_msi(0, tnapi);
0e6cf6a9
MC
9189 }
9190 }
9191 tnapi->chk_msi_cnt = 0;
9192 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
9193 tnapi->last_tx_cons = tnapi->tx_cons;
9194 }
9195}
9196
1da177e4
LT
9197static void tg3_timer(unsigned long __opaque)
9198{
9199 struct tg3 *tp = (struct tg3 *) __opaque;
1da177e4 9200
f475f163
MC
9201 if (tp->irq_sync)
9202 goto restart_timer;
9203
f47c11ee 9204 spin_lock(&tp->lock);
1da177e4 9205
0e6cf6a9
MC
9206 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
9207 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
9208 tg3_chk_missed_msi(tp);
9209
63c3a66f 9210 if (!tg3_flag(tp, TAGGED_STATUS)) {
fac9b83e
DM
9211 /* All of this garbage is because when using non-tagged
9212 * IRQ status the mailbox/status_block protocol the chip
9213 * uses with the cpu is race prone.
9214 */
898a56f8 9215 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
fac9b83e
DM
9216 tw32(GRC_LOCAL_CTRL,
9217 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
9218 } else {
9219 tw32(HOSTCC_MODE, tp->coalesce_mode |
fd2ce37f 9220 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
fac9b83e 9221 }
1da177e4 9222
fac9b83e 9223 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
63c3a66f 9224 tg3_flag_set(tp, RESTART_TIMER);
f47c11ee 9225 spin_unlock(&tp->lock);
fac9b83e
DM
9226 schedule_work(&tp->reset_task);
9227 return;
9228 }
1da177e4
LT
9229 }
9230
1da177e4
LT
9231 /* This part only runs once per second. */
9232 if (!--tp->timer_counter) {
63c3a66f 9233 if (tg3_flag(tp, 5705_PLUS))
fac9b83e
DM
9234 tg3_periodic_fetch_stats(tp);
9235
b0c5943f
MC
9236 if (tp->setlpicnt && !--tp->setlpicnt)
9237 tg3_phy_eee_enable(tp);
52b02d04 9238
63c3a66f 9239 if (tg3_flag(tp, USE_LINKCHG_REG)) {
1da177e4
LT
9240 u32 mac_stat;
9241 int phy_event;
9242
9243 mac_stat = tr32(MAC_STATUS);
9244
9245 phy_event = 0;
f07e9af3 9246 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
1da177e4
LT
9247 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
9248 phy_event = 1;
9249 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
9250 phy_event = 1;
9251
9252 if (phy_event)
9253 tg3_setup_phy(tp, 0);
63c3a66f 9254 } else if (tg3_flag(tp, POLL_SERDES)) {
1da177e4
LT
9255 u32 mac_stat = tr32(MAC_STATUS);
9256 int need_setup = 0;
9257
9258 if (netif_carrier_ok(tp->dev) &&
9259 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
9260 need_setup = 1;
9261 }
be98da6a 9262 if (!netif_carrier_ok(tp->dev) &&
1da177e4
LT
9263 (mac_stat & (MAC_STATUS_PCS_SYNCED |
9264 MAC_STATUS_SIGNAL_DET))) {
9265 need_setup = 1;
9266 }
9267 if (need_setup) {
3d3ebe74
MC
9268 if (!tp->serdes_counter) {
9269 tw32_f(MAC_MODE,
9270 (tp->mac_mode &
9271 ~MAC_MODE_PORT_MODE_MASK));
9272 udelay(40);
9273 tw32_f(MAC_MODE, tp->mac_mode);
9274 udelay(40);
9275 }
1da177e4
LT
9276 tg3_setup_phy(tp, 0);
9277 }
f07e9af3 9278 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
63c3a66f 9279 tg3_flag(tp, 5780_CLASS)) {
747e8f8b 9280 tg3_serdes_parallel_detect(tp);
57d8b880 9281 }
1da177e4
LT
9282
9283 tp->timer_counter = tp->timer_multiplier;
9284 }
9285
130b8e4d
MC
9286 /* Heartbeat is only sent once every 2 seconds.
9287 *
9288 * The heartbeat is to tell the ASF firmware that the host
9289 * driver is still alive. In the event that the OS crashes,
9290 * ASF needs to reset the hardware to free up the FIFO space
9291 * that may be filled with rx packets destined for the host.
9292 * If the FIFO is full, ASF will no longer function properly.
9293 *
9294 * Unintended resets have been reported on real time kernels
9295 * where the timer doesn't run on time. Netpoll will also have
9296 * same problem.
9297 *
9298 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
9299 * to check the ring condition when the heartbeat is expiring
9300 * before doing the reset. This will prevent most unintended
9301 * resets.
9302 */
1da177e4 9303 if (!--tp->asf_counter) {
63c3a66f 9304 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
7c5026aa
MC
9305 tg3_wait_for_event_ack(tp);
9306
bbadf503 9307 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
130b8e4d 9308 FWCMD_NICDRV_ALIVE3);
bbadf503 9309 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
c6cdf436
MC
9310 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
9311 TG3_FW_UPDATE_TIMEOUT_SEC);
4ba526ce
MC
9312
9313 tg3_generate_fw_event(tp);
1da177e4
LT
9314 }
9315 tp->asf_counter = tp->asf_multiplier;
9316 }
9317
f47c11ee 9318 spin_unlock(&tp->lock);
1da177e4 9319
f475f163 9320restart_timer:
1da177e4
LT
9321 tp->timer.expires = jiffies + tp->timer_offset;
9322 add_timer(&tp->timer);
9323}
9324
4f125f42 9325static int tg3_request_irq(struct tg3 *tp, int irq_num)
fcfa0a32 9326{
7d12e780 9327 irq_handler_t fn;
fcfa0a32 9328 unsigned long flags;
4f125f42
MC
9329 char *name;
9330 struct tg3_napi *tnapi = &tp->napi[irq_num];
9331
9332 if (tp->irq_cnt == 1)
9333 name = tp->dev->name;
9334 else {
9335 name = &tnapi->irq_lbl[0];
9336 snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num);
9337 name[IFNAMSIZ-1] = 0;
9338 }
fcfa0a32 9339
63c3a66f 9340 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
fcfa0a32 9341 fn = tg3_msi;
63c3a66f 9342 if (tg3_flag(tp, 1SHOT_MSI))
fcfa0a32 9343 fn = tg3_msi_1shot;
ab392d2d 9344 flags = 0;
fcfa0a32
MC
9345 } else {
9346 fn = tg3_interrupt;
63c3a66f 9347 if (tg3_flag(tp, TAGGED_STATUS))
fcfa0a32 9348 fn = tg3_interrupt_tagged;
ab392d2d 9349 flags = IRQF_SHARED;
fcfa0a32 9350 }
4f125f42
MC
9351
9352 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
fcfa0a32
MC
9353}
9354
7938109f
MC
9355static int tg3_test_interrupt(struct tg3 *tp)
9356{
09943a18 9357 struct tg3_napi *tnapi = &tp->napi[0];
7938109f 9358 struct net_device *dev = tp->dev;
b16250e3 9359 int err, i, intr_ok = 0;
f6eb9b1f 9360 u32 val;
7938109f 9361
d4bc3927
MC
9362 if (!netif_running(dev))
9363 return -ENODEV;
9364
7938109f
MC
9365 tg3_disable_ints(tp);
9366
4f125f42 9367 free_irq(tnapi->irq_vec, tnapi);
7938109f 9368
f6eb9b1f
MC
9369 /*
9370 * Turn off MSI one shot mode. Otherwise this test has no
9371 * observable way to know whether the interrupt was delivered.
9372 */
3aa1cdf8 9373 if (tg3_flag(tp, 57765_PLUS)) {
f6eb9b1f
MC
9374 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
9375 tw32(MSGINT_MODE, val);
9376 }
9377
4f125f42 9378 err = request_irq(tnapi->irq_vec, tg3_test_isr,
09943a18 9379 IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, tnapi);
7938109f
MC
9380 if (err)
9381 return err;
9382
898a56f8 9383 tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
7938109f
MC
9384 tg3_enable_ints(tp);
9385
9386 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
fd2ce37f 9387 tnapi->coal_now);
7938109f
MC
9388
9389 for (i = 0; i < 5; i++) {
b16250e3
MC
9390 u32 int_mbox, misc_host_ctrl;
9391
898a56f8 9392 int_mbox = tr32_mailbox(tnapi->int_mbox);
b16250e3
MC
9393 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
9394
9395 if ((int_mbox != 0) ||
9396 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
9397 intr_ok = 1;
7938109f 9398 break;
b16250e3
MC
9399 }
9400
3aa1cdf8
MC
9401 if (tg3_flag(tp, 57765_PLUS) &&
9402 tnapi->hw_status->status_tag != tnapi->last_tag)
9403 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
9404
7938109f
MC
9405 msleep(10);
9406 }
9407
9408 tg3_disable_ints(tp);
9409
4f125f42 9410 free_irq(tnapi->irq_vec, tnapi);
6aa20a22 9411
4f125f42 9412 err = tg3_request_irq(tp, 0);
7938109f
MC
9413
9414 if (err)
9415 return err;
9416
f6eb9b1f
MC
9417 if (intr_ok) {
9418 /* Reenable MSI one shot mode. */
3aa1cdf8 9419 if (tg3_flag(tp, 57765_PLUS)) {
f6eb9b1f
MC
9420 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
9421 tw32(MSGINT_MODE, val);
9422 }
7938109f 9423 return 0;
f6eb9b1f 9424 }
7938109f
MC
9425
9426 return -EIO;
9427}
9428
9429/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
9430 * successfully restored
9431 */
9432static int tg3_test_msi(struct tg3 *tp)
9433{
7938109f
MC
9434 int err;
9435 u16 pci_cmd;
9436
63c3a66f 9437 if (!tg3_flag(tp, USING_MSI))
7938109f
MC
9438 return 0;
9439
9440 /* Turn off SERR reporting in case MSI terminates with Master
9441 * Abort.
9442 */
9443 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
9444 pci_write_config_word(tp->pdev, PCI_COMMAND,
9445 pci_cmd & ~PCI_COMMAND_SERR);
9446
9447 err = tg3_test_interrupt(tp);
9448
9449 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
9450
9451 if (!err)
9452 return 0;
9453
9454 /* other failures */
9455 if (err != -EIO)
9456 return err;
9457
9458 /* MSI test failed, go back to INTx mode */
5129c3a3
MC
9459 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
9460 "to INTx mode. Please report this failure to the PCI "
9461 "maintainer and include system chipset information\n");
7938109f 9462
4f125f42 9463 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
09943a18 9464
7938109f
MC
9465 pci_disable_msi(tp->pdev);
9466
63c3a66f 9467 tg3_flag_clear(tp, USING_MSI);
dc8bf1b1 9468 tp->napi[0].irq_vec = tp->pdev->irq;
7938109f 9469
4f125f42 9470 err = tg3_request_irq(tp, 0);
7938109f
MC
9471 if (err)
9472 return err;
9473
9474 /* Need to reset the chip because the MSI cycle may have terminated
9475 * with Master Abort.
9476 */
f47c11ee 9477 tg3_full_lock(tp, 1);
7938109f 9478
944d980e 9479 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8e7a22e3 9480 err = tg3_init_hw(tp, 1);
7938109f 9481
f47c11ee 9482 tg3_full_unlock(tp);
7938109f
MC
9483
9484 if (err)
4f125f42 9485 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
7938109f
MC
9486
9487 return err;
9488}
9489
9e9fd12d
MC
9490static int tg3_request_firmware(struct tg3 *tp)
9491{
9492 const __be32 *fw_data;
9493
9494 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
05dbe005
JP
9495 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
9496 tp->fw_needed);
9e9fd12d
MC
9497 return -ENOENT;
9498 }
9499
9500 fw_data = (void *)tp->fw->data;
9501
9502 /* Firmware blob starts with version numbers, followed by
9503 * start address and _full_ length including BSS sections
9504 * (which must be longer than the actual data, of course
9505 */
9506
9507 tp->fw_len = be32_to_cpu(fw_data[2]); /* includes bss */
9508 if (tp->fw_len < (tp->fw->size - 12)) {
05dbe005
JP
9509 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
9510 tp->fw_len, tp->fw_needed);
9e9fd12d
MC
9511 release_firmware(tp->fw);
9512 tp->fw = NULL;
9513 return -EINVAL;
9514 }
9515
9516 /* We no longer need firmware; we have it. */
9517 tp->fw_needed = NULL;
9518 return 0;
9519}
9520
679563f4
MC
9521static bool tg3_enable_msix(struct tg3 *tp)
9522{
9523 int i, rc, cpus = num_online_cpus();
9524 struct msix_entry msix_ent[tp->irq_max];
9525
9526 if (cpus == 1)
9527 /* Just fallback to the simpler MSI mode. */
9528 return false;
9529
9530 /*
9531 * We want as many rx rings enabled as there are cpus.
9532 * The first MSIX vector only deals with link interrupts, etc,
9533 * so we add one to the number of vectors we are requesting.
9534 */
9535 tp->irq_cnt = min_t(unsigned, cpus + 1, tp->irq_max);
9536
9537 for (i = 0; i < tp->irq_max; i++) {
9538 msix_ent[i].entry = i;
9539 msix_ent[i].vector = 0;
9540 }
9541
9542 rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
2430b031
MC
9543 if (rc < 0) {
9544 return false;
9545 } else if (rc != 0) {
679563f4
MC
9546 if (pci_enable_msix(tp->pdev, msix_ent, rc))
9547 return false;
05dbe005
JP
9548 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
9549 tp->irq_cnt, rc);
679563f4
MC
9550 tp->irq_cnt = rc;
9551 }
9552
9553 for (i = 0; i < tp->irq_max; i++)
9554 tp->napi[i].irq_vec = msix_ent[i].vector;
9555
2ddaad39
BH
9556 netif_set_real_num_tx_queues(tp->dev, 1);
9557 rc = tp->irq_cnt > 1 ? tp->irq_cnt - 1 : 1;
9558 if (netif_set_real_num_rx_queues(tp->dev, rc)) {
9559 pci_disable_msix(tp->pdev);
9560 return false;
9561 }
b92b9040
MC
9562
9563 if (tp->irq_cnt > 1) {
63c3a66f 9564 tg3_flag_set(tp, ENABLE_RSS);
d78b59f5
MC
9565
9566 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
9567 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
63c3a66f 9568 tg3_flag_set(tp, ENABLE_TSS);
b92b9040
MC
9569 netif_set_real_num_tx_queues(tp->dev, tp->irq_cnt - 1);
9570 }
9571 }
2430b031 9572
679563f4
MC
9573 return true;
9574}
9575
07b0173c
MC
9576static void tg3_ints_init(struct tg3 *tp)
9577{
63c3a66f
JP
9578 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
9579 !tg3_flag(tp, TAGGED_STATUS)) {
07b0173c
MC
9580 /* All MSI supporting chips should support tagged
9581 * status. Assert that this is the case.
9582 */
5129c3a3
MC
9583 netdev_warn(tp->dev,
9584 "MSI without TAGGED_STATUS? Not using MSI\n");
679563f4 9585 goto defcfg;
07b0173c 9586 }
4f125f42 9587
63c3a66f
JP
9588 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
9589 tg3_flag_set(tp, USING_MSIX);
9590 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
9591 tg3_flag_set(tp, USING_MSI);
679563f4 9592
63c3a66f 9593 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
679563f4 9594 u32 msi_mode = tr32(MSGINT_MODE);
63c3a66f 9595 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
baf8a94a 9596 msi_mode |= MSGINT_MODE_MULTIVEC_EN;
679563f4
MC
9597 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
9598 }
9599defcfg:
63c3a66f 9600 if (!tg3_flag(tp, USING_MSIX)) {
679563f4
MC
9601 tp->irq_cnt = 1;
9602 tp->napi[0].irq_vec = tp->pdev->irq;
2ddaad39 9603 netif_set_real_num_tx_queues(tp->dev, 1);
85407885 9604 netif_set_real_num_rx_queues(tp->dev, 1);
679563f4 9605 }
07b0173c
MC
9606}
9607
9608static void tg3_ints_fini(struct tg3 *tp)
9609{
63c3a66f 9610 if (tg3_flag(tp, USING_MSIX))
679563f4 9611 pci_disable_msix(tp->pdev);
63c3a66f 9612 else if (tg3_flag(tp, USING_MSI))
679563f4 9613 pci_disable_msi(tp->pdev);
63c3a66f
JP
9614 tg3_flag_clear(tp, USING_MSI);
9615 tg3_flag_clear(tp, USING_MSIX);
9616 tg3_flag_clear(tp, ENABLE_RSS);
9617 tg3_flag_clear(tp, ENABLE_TSS);
07b0173c
MC
9618}
9619
1da177e4
LT
9620static int tg3_open(struct net_device *dev)
9621{
9622 struct tg3 *tp = netdev_priv(dev);
4f125f42 9623 int i, err;
1da177e4 9624
9e9fd12d
MC
9625 if (tp->fw_needed) {
9626 err = tg3_request_firmware(tp);
9627 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9628 if (err)
9629 return err;
9630 } else if (err) {
05dbe005 9631 netdev_warn(tp->dev, "TSO capability disabled\n");
63c3a66f
JP
9632 tg3_flag_clear(tp, TSO_CAPABLE);
9633 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
05dbe005 9634 netdev_notice(tp->dev, "TSO capability restored\n");
63c3a66f 9635 tg3_flag_set(tp, TSO_CAPABLE);
9e9fd12d
MC
9636 }
9637 }
9638
c49a1561
MC
9639 netif_carrier_off(tp->dev);
9640
c866b7ea 9641 err = tg3_power_up(tp);
2f751b67 9642 if (err)
bc1c7567 9643 return err;
2f751b67
MC
9644
9645 tg3_full_lock(tp, 0);
bc1c7567 9646
1da177e4 9647 tg3_disable_ints(tp);
63c3a66f 9648 tg3_flag_clear(tp, INIT_COMPLETE);
1da177e4 9649
f47c11ee 9650 tg3_full_unlock(tp);
1da177e4 9651
679563f4
MC
9652 /*
9653 * Setup interrupts first so we know how
9654 * many NAPI resources to allocate
9655 */
9656 tg3_ints_init(tp);
9657
1da177e4
LT
9658 /* The placement of this call is tied
9659 * to the setup and use of Host TX descriptors.
9660 */
9661 err = tg3_alloc_consistent(tp);
9662 if (err)
679563f4 9663 goto err_out1;
88b06bc2 9664
66cfd1bd
MC
9665 tg3_napi_init(tp);
9666
fed97810 9667 tg3_napi_enable(tp);
1da177e4 9668
4f125f42
MC
9669 for (i = 0; i < tp->irq_cnt; i++) {
9670 struct tg3_napi *tnapi = &tp->napi[i];
9671 err = tg3_request_irq(tp, i);
9672 if (err) {
9673 for (i--; i >= 0; i--)
9674 free_irq(tnapi->irq_vec, tnapi);
9675 break;
9676 }
9677 }
1da177e4 9678
07b0173c 9679 if (err)
679563f4 9680 goto err_out2;
bea3348e 9681
f47c11ee 9682 tg3_full_lock(tp, 0);
1da177e4 9683
8e7a22e3 9684 err = tg3_init_hw(tp, 1);
1da177e4 9685 if (err) {
944d980e 9686 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
9687 tg3_free_rings(tp);
9688 } else {
0e6cf6a9
MC
9689 if (tg3_flag(tp, TAGGED_STATUS) &&
9690 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9691 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57765)
fac9b83e
DM
9692 tp->timer_offset = HZ;
9693 else
9694 tp->timer_offset = HZ / 10;
9695
9696 BUG_ON(tp->timer_offset > HZ);
9697 tp->timer_counter = tp->timer_multiplier =
9698 (HZ / tp->timer_offset);
9699 tp->asf_counter = tp->asf_multiplier =
28fbef78 9700 ((HZ / tp->timer_offset) * 2);
1da177e4
LT
9701
9702 init_timer(&tp->timer);
9703 tp->timer.expires = jiffies + tp->timer_offset;
9704 tp->timer.data = (unsigned long) tp;
9705 tp->timer.function = tg3_timer;
1da177e4
LT
9706 }
9707
f47c11ee 9708 tg3_full_unlock(tp);
1da177e4 9709
07b0173c 9710 if (err)
679563f4 9711 goto err_out3;
1da177e4 9712
63c3a66f 9713 if (tg3_flag(tp, USING_MSI)) {
7938109f 9714 err = tg3_test_msi(tp);
fac9b83e 9715
7938109f 9716 if (err) {
f47c11ee 9717 tg3_full_lock(tp, 0);
944d980e 9718 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7938109f 9719 tg3_free_rings(tp);
f47c11ee 9720 tg3_full_unlock(tp);
7938109f 9721
679563f4 9722 goto err_out2;
7938109f 9723 }
fcfa0a32 9724
63c3a66f 9725 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
f6eb9b1f 9726 u32 val = tr32(PCIE_TRANSACTION_CFG);
fcfa0a32 9727
f6eb9b1f
MC
9728 tw32(PCIE_TRANSACTION_CFG,
9729 val | PCIE_TRANS_CFG_1SHOT_MSI);
fcfa0a32 9730 }
7938109f
MC
9731 }
9732
b02fd9e3
MC
9733 tg3_phy_start(tp);
9734
f47c11ee 9735 tg3_full_lock(tp, 0);
1da177e4 9736
7938109f 9737 add_timer(&tp->timer);
63c3a66f 9738 tg3_flag_set(tp, INIT_COMPLETE);
1da177e4
LT
9739 tg3_enable_ints(tp);
9740
f47c11ee 9741 tg3_full_unlock(tp);
1da177e4 9742
fe5f5787 9743 netif_tx_start_all_queues(dev);
1da177e4 9744
06c03c02
MB
9745 /*
9746 * Reset loopback feature if it was turned on while the device was down
9747 * make sure that it's installed properly now.
9748 */
9749 if (dev->features & NETIF_F_LOOPBACK)
9750 tg3_set_loopback(dev, dev->features);
9751
1da177e4 9752 return 0;
07b0173c 9753
679563f4 9754err_out3:
4f125f42
MC
9755 for (i = tp->irq_cnt - 1; i >= 0; i--) {
9756 struct tg3_napi *tnapi = &tp->napi[i];
9757 free_irq(tnapi->irq_vec, tnapi);
9758 }
07b0173c 9759
679563f4 9760err_out2:
fed97810 9761 tg3_napi_disable(tp);
66cfd1bd 9762 tg3_napi_fini(tp);
07b0173c 9763 tg3_free_consistent(tp);
679563f4
MC
9764
9765err_out1:
9766 tg3_ints_fini(tp);
cd0d7228
MC
9767 tg3_frob_aux_power(tp, false);
9768 pci_set_power_state(tp->pdev, PCI_D3hot);
07b0173c 9769 return err;
1da177e4
LT
9770}
9771
511d2224
ED
9772static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *,
9773 struct rtnl_link_stats64 *);
1da177e4
LT
9774static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
9775
9776static int tg3_close(struct net_device *dev)
9777{
4f125f42 9778 int i;
1da177e4
LT
9779 struct tg3 *tp = netdev_priv(dev);
9780
fed97810 9781 tg3_napi_disable(tp);
28e53bdd 9782 cancel_work_sync(&tp->reset_task);
7faa006f 9783
fe5f5787 9784 netif_tx_stop_all_queues(dev);
1da177e4
LT
9785
9786 del_timer_sync(&tp->timer);
9787
24bb4fb6
MC
9788 tg3_phy_stop(tp);
9789
f47c11ee 9790 tg3_full_lock(tp, 1);
1da177e4
LT
9791
9792 tg3_disable_ints(tp);
9793
944d980e 9794 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4 9795 tg3_free_rings(tp);
63c3a66f 9796 tg3_flag_clear(tp, INIT_COMPLETE);
1da177e4 9797
f47c11ee 9798 tg3_full_unlock(tp);
1da177e4 9799
4f125f42
MC
9800 for (i = tp->irq_cnt - 1; i >= 0; i--) {
9801 struct tg3_napi *tnapi = &tp->napi[i];
9802 free_irq(tnapi->irq_vec, tnapi);
9803 }
07b0173c
MC
9804
9805 tg3_ints_fini(tp);
1da177e4 9806
511d2224
ED
9807 tg3_get_stats64(tp->dev, &tp->net_stats_prev);
9808
1da177e4
LT
9809 memcpy(&tp->estats_prev, tg3_get_estats(tp),
9810 sizeof(tp->estats_prev));
9811
66cfd1bd
MC
9812 tg3_napi_fini(tp);
9813
1da177e4
LT
9814 tg3_free_consistent(tp);
9815
c866b7ea 9816 tg3_power_down(tp);
bc1c7567
MC
9817
9818 netif_carrier_off(tp->dev);
9819
1da177e4
LT
9820 return 0;
9821}
9822
511d2224 9823static inline u64 get_stat64(tg3_stat64_t *val)
816f8b86
SB
9824{
9825 return ((u64)val->high << 32) | ((u64)val->low);
9826}
9827
511d2224 9828static u64 calc_crc_errors(struct tg3 *tp)
1da177e4
LT
9829{
9830 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9831
f07e9af3 9832 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
1da177e4
LT
9833 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
9834 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
1da177e4
LT
9835 u32 val;
9836
f47c11ee 9837 spin_lock_bh(&tp->lock);
569a5df8
MC
9838 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
9839 tg3_writephy(tp, MII_TG3_TEST1,
9840 val | MII_TG3_TEST1_CRC_EN);
f08aa1a8 9841 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
1da177e4
LT
9842 } else
9843 val = 0;
f47c11ee 9844 spin_unlock_bh(&tp->lock);
1da177e4
LT
9845
9846 tp->phy_crc_errors += val;
9847
9848 return tp->phy_crc_errors;
9849 }
9850
9851 return get_stat64(&hw_stats->rx_fcs_errors);
9852}
9853
9854#define ESTAT_ADD(member) \
9855 estats->member = old_estats->member + \
511d2224 9856 get_stat64(&hw_stats->member)
1da177e4
LT
9857
9858static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
9859{
9860 struct tg3_ethtool_stats *estats = &tp->estats;
9861 struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
9862 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9863
9864 if (!hw_stats)
9865 return old_estats;
9866
9867 ESTAT_ADD(rx_octets);
9868 ESTAT_ADD(rx_fragments);
9869 ESTAT_ADD(rx_ucast_packets);
9870 ESTAT_ADD(rx_mcast_packets);
9871 ESTAT_ADD(rx_bcast_packets);
9872 ESTAT_ADD(rx_fcs_errors);
9873 ESTAT_ADD(rx_align_errors);
9874 ESTAT_ADD(rx_xon_pause_rcvd);
9875 ESTAT_ADD(rx_xoff_pause_rcvd);
9876 ESTAT_ADD(rx_mac_ctrl_rcvd);
9877 ESTAT_ADD(rx_xoff_entered);
9878 ESTAT_ADD(rx_frame_too_long_errors);
9879 ESTAT_ADD(rx_jabbers);
9880 ESTAT_ADD(rx_undersize_packets);
9881 ESTAT_ADD(rx_in_length_errors);
9882 ESTAT_ADD(rx_out_length_errors);
9883 ESTAT_ADD(rx_64_or_less_octet_packets);
9884 ESTAT_ADD(rx_65_to_127_octet_packets);
9885 ESTAT_ADD(rx_128_to_255_octet_packets);
9886 ESTAT_ADD(rx_256_to_511_octet_packets);
9887 ESTAT_ADD(rx_512_to_1023_octet_packets);
9888 ESTAT_ADD(rx_1024_to_1522_octet_packets);
9889 ESTAT_ADD(rx_1523_to_2047_octet_packets);
9890 ESTAT_ADD(rx_2048_to_4095_octet_packets);
9891 ESTAT_ADD(rx_4096_to_8191_octet_packets);
9892 ESTAT_ADD(rx_8192_to_9022_octet_packets);
9893
9894 ESTAT_ADD(tx_octets);
9895 ESTAT_ADD(tx_collisions);
9896 ESTAT_ADD(tx_xon_sent);
9897 ESTAT_ADD(tx_xoff_sent);
9898 ESTAT_ADD(tx_flow_control);
9899 ESTAT_ADD(tx_mac_errors);
9900 ESTAT_ADD(tx_single_collisions);
9901 ESTAT_ADD(tx_mult_collisions);
9902 ESTAT_ADD(tx_deferred);
9903 ESTAT_ADD(tx_excessive_collisions);
9904 ESTAT_ADD(tx_late_collisions);
9905 ESTAT_ADD(tx_collide_2times);
9906 ESTAT_ADD(tx_collide_3times);
9907 ESTAT_ADD(tx_collide_4times);
9908 ESTAT_ADD(tx_collide_5times);
9909 ESTAT_ADD(tx_collide_6times);
9910 ESTAT_ADD(tx_collide_7times);
9911 ESTAT_ADD(tx_collide_8times);
9912 ESTAT_ADD(tx_collide_9times);
9913 ESTAT_ADD(tx_collide_10times);
9914 ESTAT_ADD(tx_collide_11times);
9915 ESTAT_ADD(tx_collide_12times);
9916 ESTAT_ADD(tx_collide_13times);
9917 ESTAT_ADD(tx_collide_14times);
9918 ESTAT_ADD(tx_collide_15times);
9919 ESTAT_ADD(tx_ucast_packets);
9920 ESTAT_ADD(tx_mcast_packets);
9921 ESTAT_ADD(tx_bcast_packets);
9922 ESTAT_ADD(tx_carrier_sense_errors);
9923 ESTAT_ADD(tx_discards);
9924 ESTAT_ADD(tx_errors);
9925
9926 ESTAT_ADD(dma_writeq_full);
9927 ESTAT_ADD(dma_write_prioq_full);
9928 ESTAT_ADD(rxbds_empty);
9929 ESTAT_ADD(rx_discards);
9930 ESTAT_ADD(rx_errors);
9931 ESTAT_ADD(rx_threshold_hit);
9932
9933 ESTAT_ADD(dma_readq_full);
9934 ESTAT_ADD(dma_read_prioq_full);
9935 ESTAT_ADD(tx_comp_queue_full);
9936
9937 ESTAT_ADD(ring_set_send_prod_index);
9938 ESTAT_ADD(ring_status_update);
9939 ESTAT_ADD(nic_irqs);
9940 ESTAT_ADD(nic_avoided_irqs);
9941 ESTAT_ADD(nic_tx_threshold_hit);
9942
4452d099
MC
9943 ESTAT_ADD(mbuf_lwm_thresh_hit);
9944
1da177e4
LT
9945 return estats;
9946}
9947
511d2224
ED
9948static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
9949 struct rtnl_link_stats64 *stats)
1da177e4
LT
9950{
9951 struct tg3 *tp = netdev_priv(dev);
511d2224 9952 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
1da177e4
LT
9953 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9954
9955 if (!hw_stats)
9956 return old_stats;
9957
9958 stats->rx_packets = old_stats->rx_packets +
9959 get_stat64(&hw_stats->rx_ucast_packets) +
9960 get_stat64(&hw_stats->rx_mcast_packets) +
9961 get_stat64(&hw_stats->rx_bcast_packets);
6aa20a22 9962
1da177e4
LT
9963 stats->tx_packets = old_stats->tx_packets +
9964 get_stat64(&hw_stats->tx_ucast_packets) +
9965 get_stat64(&hw_stats->tx_mcast_packets) +
9966 get_stat64(&hw_stats->tx_bcast_packets);
9967
9968 stats->rx_bytes = old_stats->rx_bytes +
9969 get_stat64(&hw_stats->rx_octets);
9970 stats->tx_bytes = old_stats->tx_bytes +
9971 get_stat64(&hw_stats->tx_octets);
9972
9973 stats->rx_errors = old_stats->rx_errors +
4f63b877 9974 get_stat64(&hw_stats->rx_errors);
1da177e4
LT
9975 stats->tx_errors = old_stats->tx_errors +
9976 get_stat64(&hw_stats->tx_errors) +
9977 get_stat64(&hw_stats->tx_mac_errors) +
9978 get_stat64(&hw_stats->tx_carrier_sense_errors) +
9979 get_stat64(&hw_stats->tx_discards);
9980
9981 stats->multicast = old_stats->multicast +
9982 get_stat64(&hw_stats->rx_mcast_packets);
9983 stats->collisions = old_stats->collisions +
9984 get_stat64(&hw_stats->tx_collisions);
9985
9986 stats->rx_length_errors = old_stats->rx_length_errors +
9987 get_stat64(&hw_stats->rx_frame_too_long_errors) +
9988 get_stat64(&hw_stats->rx_undersize_packets);
9989
9990 stats->rx_over_errors = old_stats->rx_over_errors +
9991 get_stat64(&hw_stats->rxbds_empty);
9992 stats->rx_frame_errors = old_stats->rx_frame_errors +
9993 get_stat64(&hw_stats->rx_align_errors);
9994 stats->tx_aborted_errors = old_stats->tx_aborted_errors +
9995 get_stat64(&hw_stats->tx_discards);
9996 stats->tx_carrier_errors = old_stats->tx_carrier_errors +
9997 get_stat64(&hw_stats->tx_carrier_sense_errors);
9998
9999 stats->rx_crc_errors = old_stats->rx_crc_errors +
10000 calc_crc_errors(tp);
10001
4f63b877
JL
10002 stats->rx_missed_errors = old_stats->rx_missed_errors +
10003 get_stat64(&hw_stats->rx_discards);
10004
b0057c51
ED
10005 stats->rx_dropped = tp->rx_dropped;
10006
1da177e4
LT
10007 return stats;
10008}
10009
10010static inline u32 calc_crc(unsigned char *buf, int len)
10011{
10012 u32 reg;
10013 u32 tmp;
10014 int j, k;
10015
10016 reg = 0xffffffff;
10017
10018 for (j = 0; j < len; j++) {
10019 reg ^= buf[j];
10020
10021 for (k = 0; k < 8; k++) {
10022 tmp = reg & 0x01;
10023
10024 reg >>= 1;
10025
859a5887 10026 if (tmp)
1da177e4 10027 reg ^= 0xedb88320;
1da177e4
LT
10028 }
10029 }
10030
10031 return ~reg;
10032}
10033
10034static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
10035{
10036 /* accept or reject all multicast frames */
10037 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
10038 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
10039 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
10040 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
10041}
10042
10043static void __tg3_set_rx_mode(struct net_device *dev)
10044{
10045 struct tg3 *tp = netdev_priv(dev);
10046 u32 rx_mode;
10047
10048 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
10049 RX_MODE_KEEP_VLAN_TAG);
10050
bf933c80 10051#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
1da177e4
LT
10052 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
10053 * flag clear.
10054 */
63c3a66f 10055 if (!tg3_flag(tp, ENABLE_ASF))
1da177e4
LT
10056 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
10057#endif
10058
10059 if (dev->flags & IFF_PROMISC) {
10060 /* Promiscuous mode. */
10061 rx_mode |= RX_MODE_PROMISC;
10062 } else if (dev->flags & IFF_ALLMULTI) {
10063 /* Accept all multicast. */
de6f31eb 10064 tg3_set_multi(tp, 1);
4cd24eaf 10065 } else if (netdev_mc_empty(dev)) {
1da177e4 10066 /* Reject all multicast. */
de6f31eb 10067 tg3_set_multi(tp, 0);
1da177e4
LT
10068 } else {
10069 /* Accept one or more multicast(s). */
22bedad3 10070 struct netdev_hw_addr *ha;
1da177e4
LT
10071 u32 mc_filter[4] = { 0, };
10072 u32 regidx;
10073 u32 bit;
10074 u32 crc;
10075
22bedad3
JP
10076 netdev_for_each_mc_addr(ha, dev) {
10077 crc = calc_crc(ha->addr, ETH_ALEN);
1da177e4
LT
10078 bit = ~crc & 0x7f;
10079 regidx = (bit & 0x60) >> 5;
10080 bit &= 0x1f;
10081 mc_filter[regidx] |= (1 << bit);
10082 }
10083
10084 tw32(MAC_HASH_REG_0, mc_filter[0]);
10085 tw32(MAC_HASH_REG_1, mc_filter[1]);
10086 tw32(MAC_HASH_REG_2, mc_filter[2]);
10087 tw32(MAC_HASH_REG_3, mc_filter[3]);
10088 }
10089
10090 if (rx_mode != tp->rx_mode) {
10091 tp->rx_mode = rx_mode;
10092 tw32_f(MAC_RX_MODE, rx_mode);
10093 udelay(10);
10094 }
10095}
10096
10097static void tg3_set_rx_mode(struct net_device *dev)
10098{
10099 struct tg3 *tp = netdev_priv(dev);
10100
e75f7c90
MC
10101 if (!netif_running(dev))
10102 return;
10103
f47c11ee 10104 tg3_full_lock(tp, 0);
1da177e4 10105 __tg3_set_rx_mode(dev);
f47c11ee 10106 tg3_full_unlock(tp);
1da177e4
LT
10107}
10108
1da177e4
LT
10109static int tg3_get_regs_len(struct net_device *dev)
10110{
97bd8e49 10111 return TG3_REG_BLK_SIZE;
1da177e4
LT
10112}
10113
10114static void tg3_get_regs(struct net_device *dev,
10115 struct ethtool_regs *regs, void *_p)
10116{
1da177e4 10117 struct tg3 *tp = netdev_priv(dev);
1da177e4
LT
10118
10119 regs->version = 0;
10120
97bd8e49 10121 memset(_p, 0, TG3_REG_BLK_SIZE);
1da177e4 10122
80096068 10123 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
bc1c7567
MC
10124 return;
10125
f47c11ee 10126 tg3_full_lock(tp, 0);
1da177e4 10127
97bd8e49 10128 tg3_dump_legacy_regs(tp, (u32 *)_p);
1da177e4 10129
f47c11ee 10130 tg3_full_unlock(tp);
1da177e4
LT
10131}
10132
10133static int tg3_get_eeprom_len(struct net_device *dev)
10134{
10135 struct tg3 *tp = netdev_priv(dev);
10136
10137 return tp->nvram_size;
10138}
10139
1da177e4
LT
10140static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10141{
10142 struct tg3 *tp = netdev_priv(dev);
10143 int ret;
10144 u8 *pd;
b9fc7dc5 10145 u32 i, offset, len, b_offset, b_count;
a9dc529d 10146 __be32 val;
1da177e4 10147
63c3a66f 10148 if (tg3_flag(tp, NO_NVRAM))
df259d8c
MC
10149 return -EINVAL;
10150
80096068 10151 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
bc1c7567
MC
10152 return -EAGAIN;
10153
1da177e4
LT
10154 offset = eeprom->offset;
10155 len = eeprom->len;
10156 eeprom->len = 0;
10157
10158 eeprom->magic = TG3_EEPROM_MAGIC;
10159
10160 if (offset & 3) {
10161 /* adjustments to start on required 4 byte boundary */
10162 b_offset = offset & 3;
10163 b_count = 4 - b_offset;
10164 if (b_count > len) {
10165 /* i.e. offset=1 len=2 */
10166 b_count = len;
10167 }
a9dc529d 10168 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
1da177e4
LT
10169 if (ret)
10170 return ret;
be98da6a 10171 memcpy(data, ((char *)&val) + b_offset, b_count);
1da177e4
LT
10172 len -= b_count;
10173 offset += b_count;
c6cdf436 10174 eeprom->len += b_count;
1da177e4
LT
10175 }
10176
25985edc 10177 /* read bytes up to the last 4 byte boundary */
1da177e4
LT
10178 pd = &data[eeprom->len];
10179 for (i = 0; i < (len - (len & 3)); i += 4) {
a9dc529d 10180 ret = tg3_nvram_read_be32(tp, offset + i, &val);
1da177e4
LT
10181 if (ret) {
10182 eeprom->len += i;
10183 return ret;
10184 }
1da177e4
LT
10185 memcpy(pd + i, &val, 4);
10186 }
10187 eeprom->len += i;
10188
10189 if (len & 3) {
10190 /* read last bytes not ending on 4 byte boundary */
10191 pd = &data[eeprom->len];
10192 b_count = len & 3;
10193 b_offset = offset + len - b_count;
a9dc529d 10194 ret = tg3_nvram_read_be32(tp, b_offset, &val);
1da177e4
LT
10195 if (ret)
10196 return ret;
b9fc7dc5 10197 memcpy(pd, &val, b_count);
1da177e4
LT
10198 eeprom->len += b_count;
10199 }
10200 return 0;
10201}
10202
6aa20a22 10203static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf);
1da177e4
LT
10204
10205static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10206{
10207 struct tg3 *tp = netdev_priv(dev);
10208 int ret;
b9fc7dc5 10209 u32 offset, len, b_offset, odd_len;
1da177e4 10210 u8 *buf;
a9dc529d 10211 __be32 start, end;
1da177e4 10212
80096068 10213 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
bc1c7567
MC
10214 return -EAGAIN;
10215
63c3a66f 10216 if (tg3_flag(tp, NO_NVRAM) ||
df259d8c 10217 eeprom->magic != TG3_EEPROM_MAGIC)
1da177e4
LT
10218 return -EINVAL;
10219
10220 offset = eeprom->offset;
10221 len = eeprom->len;
10222
10223 if ((b_offset = (offset & 3))) {
10224 /* adjustments to start on required 4 byte boundary */
a9dc529d 10225 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
1da177e4
LT
10226 if (ret)
10227 return ret;
1da177e4
LT
10228 len += b_offset;
10229 offset &= ~3;
1c8594b4
MC
10230 if (len < 4)
10231 len = 4;
1da177e4
LT
10232 }
10233
10234 odd_len = 0;
1c8594b4 10235 if (len & 3) {
1da177e4
LT
10236 /* adjustments to end on required 4 byte boundary */
10237 odd_len = 1;
10238 len = (len + 3) & ~3;
a9dc529d 10239 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
1da177e4
LT
10240 if (ret)
10241 return ret;
1da177e4
LT
10242 }
10243
10244 buf = data;
10245 if (b_offset || odd_len) {
10246 buf = kmalloc(len, GFP_KERNEL);
ab0049b4 10247 if (!buf)
1da177e4
LT
10248 return -ENOMEM;
10249 if (b_offset)
10250 memcpy(buf, &start, 4);
10251 if (odd_len)
10252 memcpy(buf+len-4, &end, 4);
10253 memcpy(buf + b_offset, data, eeprom->len);
10254 }
10255
10256 ret = tg3_nvram_write_block(tp, offset, len, buf);
10257
10258 if (buf != data)
10259 kfree(buf);
10260
10261 return ret;
10262}
10263
10264static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10265{
b02fd9e3
MC
10266 struct tg3 *tp = netdev_priv(dev);
10267
63c3a66f 10268 if (tg3_flag(tp, USE_PHYLIB)) {
3f0e3ad7 10269 struct phy_device *phydev;
f07e9af3 10270 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
b02fd9e3 10271 return -EAGAIN;
3f0e3ad7
MC
10272 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10273 return phy_ethtool_gset(phydev, cmd);
b02fd9e3 10274 }
6aa20a22 10275
1da177e4
LT
10276 cmd->supported = (SUPPORTED_Autoneg);
10277
f07e9af3 10278 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
1da177e4
LT
10279 cmd->supported |= (SUPPORTED_1000baseT_Half |
10280 SUPPORTED_1000baseT_Full);
10281
f07e9af3 10282 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
1da177e4
LT
10283 cmd->supported |= (SUPPORTED_100baseT_Half |
10284 SUPPORTED_100baseT_Full |
10285 SUPPORTED_10baseT_Half |
10286 SUPPORTED_10baseT_Full |
3bebab59 10287 SUPPORTED_TP);
ef348144
KK
10288 cmd->port = PORT_TP;
10289 } else {
1da177e4 10290 cmd->supported |= SUPPORTED_FIBRE;
ef348144
KK
10291 cmd->port = PORT_FIBRE;
10292 }
6aa20a22 10293
1da177e4 10294 cmd->advertising = tp->link_config.advertising;
5bb09778
MC
10295 if (tg3_flag(tp, PAUSE_AUTONEG)) {
10296 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
10297 if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10298 cmd->advertising |= ADVERTISED_Pause;
10299 } else {
10300 cmd->advertising |= ADVERTISED_Pause |
10301 ADVERTISED_Asym_Pause;
10302 }
10303 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10304 cmd->advertising |= ADVERTISED_Asym_Pause;
10305 }
10306 }
1da177e4 10307 if (netif_running(dev)) {
70739497 10308 ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
1da177e4 10309 cmd->duplex = tp->link_config.active_duplex;
64c22182 10310 } else {
70739497 10311 ethtool_cmd_speed_set(cmd, SPEED_INVALID);
64c22182 10312 cmd->duplex = DUPLEX_INVALID;
1da177e4 10313 }
882e9793 10314 cmd->phy_address = tp->phy_addr;
7e5856bd 10315 cmd->transceiver = XCVR_INTERNAL;
1da177e4
LT
10316 cmd->autoneg = tp->link_config.autoneg;
10317 cmd->maxtxpkt = 0;
10318 cmd->maxrxpkt = 0;
10319 return 0;
10320}
6aa20a22 10321
1da177e4
LT
10322static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10323{
10324 struct tg3 *tp = netdev_priv(dev);
25db0338 10325 u32 speed = ethtool_cmd_speed(cmd);
6aa20a22 10326
63c3a66f 10327 if (tg3_flag(tp, USE_PHYLIB)) {
3f0e3ad7 10328 struct phy_device *phydev;
f07e9af3 10329 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
b02fd9e3 10330 return -EAGAIN;
3f0e3ad7
MC
10331 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10332 return phy_ethtool_sset(phydev, cmd);
b02fd9e3
MC
10333 }
10334
7e5856bd
MC
10335 if (cmd->autoneg != AUTONEG_ENABLE &&
10336 cmd->autoneg != AUTONEG_DISABLE)
37ff238d 10337 return -EINVAL;
7e5856bd
MC
10338
10339 if (cmd->autoneg == AUTONEG_DISABLE &&
10340 cmd->duplex != DUPLEX_FULL &&
10341 cmd->duplex != DUPLEX_HALF)
37ff238d 10342 return -EINVAL;
1da177e4 10343
7e5856bd
MC
10344 if (cmd->autoneg == AUTONEG_ENABLE) {
10345 u32 mask = ADVERTISED_Autoneg |
10346 ADVERTISED_Pause |
10347 ADVERTISED_Asym_Pause;
10348
f07e9af3 10349 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
7e5856bd
MC
10350 mask |= ADVERTISED_1000baseT_Half |
10351 ADVERTISED_1000baseT_Full;
10352
f07e9af3 10353 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
7e5856bd
MC
10354 mask |= ADVERTISED_100baseT_Half |
10355 ADVERTISED_100baseT_Full |
10356 ADVERTISED_10baseT_Half |
10357 ADVERTISED_10baseT_Full |
10358 ADVERTISED_TP;
10359 else
10360 mask |= ADVERTISED_FIBRE;
10361
10362 if (cmd->advertising & ~mask)
10363 return -EINVAL;
10364
10365 mask &= (ADVERTISED_1000baseT_Half |
10366 ADVERTISED_1000baseT_Full |
10367 ADVERTISED_100baseT_Half |
10368 ADVERTISED_100baseT_Full |
10369 ADVERTISED_10baseT_Half |
10370 ADVERTISED_10baseT_Full);
10371
10372 cmd->advertising &= mask;
10373 } else {
f07e9af3 10374 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
25db0338 10375 if (speed != SPEED_1000)
7e5856bd
MC
10376 return -EINVAL;
10377
10378 if (cmd->duplex != DUPLEX_FULL)
10379 return -EINVAL;
10380 } else {
25db0338
DD
10381 if (speed != SPEED_100 &&
10382 speed != SPEED_10)
7e5856bd
MC
10383 return -EINVAL;
10384 }
10385 }
10386
f47c11ee 10387 tg3_full_lock(tp, 0);
1da177e4
LT
10388
10389 tp->link_config.autoneg = cmd->autoneg;
10390 if (cmd->autoneg == AUTONEG_ENABLE) {
405d8e5c
AG
10391 tp->link_config.advertising = (cmd->advertising |
10392 ADVERTISED_Autoneg);
1da177e4
LT
10393 tp->link_config.speed = SPEED_INVALID;
10394 tp->link_config.duplex = DUPLEX_INVALID;
10395 } else {
10396 tp->link_config.advertising = 0;
25db0338 10397 tp->link_config.speed = speed;
1da177e4 10398 tp->link_config.duplex = cmd->duplex;
b02fd9e3 10399 }
6aa20a22 10400
24fcad6b
MC
10401 tp->link_config.orig_speed = tp->link_config.speed;
10402 tp->link_config.orig_duplex = tp->link_config.duplex;
10403 tp->link_config.orig_autoneg = tp->link_config.autoneg;
10404
1da177e4
LT
10405 if (netif_running(dev))
10406 tg3_setup_phy(tp, 1);
10407
f47c11ee 10408 tg3_full_unlock(tp);
6aa20a22 10409
1da177e4
LT
10410 return 0;
10411}
6aa20a22 10412
1da177e4
LT
10413static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
10414{
10415 struct tg3 *tp = netdev_priv(dev);
6aa20a22 10416
1da177e4
LT
10417 strcpy(info->driver, DRV_MODULE_NAME);
10418 strcpy(info->version, DRV_MODULE_VERSION);
c4e6575c 10419 strcpy(info->fw_version, tp->fw_ver);
1da177e4
LT
10420 strcpy(info->bus_info, pci_name(tp->pdev));
10421}
6aa20a22 10422
1da177e4
LT
10423static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
10424{
10425 struct tg3 *tp = netdev_priv(dev);
6aa20a22 10426
63c3a66f 10427 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
a85feb8c
GZ
10428 wol->supported = WAKE_MAGIC;
10429 else
10430 wol->supported = 0;
1da177e4 10431 wol->wolopts = 0;
63c3a66f 10432 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
1da177e4
LT
10433 wol->wolopts = WAKE_MAGIC;
10434 memset(&wol->sopass, 0, sizeof(wol->sopass));
10435}
6aa20a22 10436
1da177e4
LT
10437static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
10438{
10439 struct tg3 *tp = netdev_priv(dev);
12dac075 10440 struct device *dp = &tp->pdev->dev;
6aa20a22 10441
1da177e4
LT
10442 if (wol->wolopts & ~WAKE_MAGIC)
10443 return -EINVAL;
10444 if ((wol->wolopts & WAKE_MAGIC) &&
63c3a66f 10445 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
1da177e4 10446 return -EINVAL;
6aa20a22 10447
f2dc0d18
RW
10448 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
10449
f47c11ee 10450 spin_lock_bh(&tp->lock);
f2dc0d18 10451 if (device_may_wakeup(dp))
63c3a66f 10452 tg3_flag_set(tp, WOL_ENABLE);
f2dc0d18 10453 else
63c3a66f 10454 tg3_flag_clear(tp, WOL_ENABLE);
f47c11ee 10455 spin_unlock_bh(&tp->lock);
6aa20a22 10456
1da177e4
LT
10457 return 0;
10458}
6aa20a22 10459
1da177e4
LT
10460static u32 tg3_get_msglevel(struct net_device *dev)
10461{
10462 struct tg3 *tp = netdev_priv(dev);
10463 return tp->msg_enable;
10464}
6aa20a22 10465
1da177e4
LT
10466static void tg3_set_msglevel(struct net_device *dev, u32 value)
10467{
10468 struct tg3 *tp = netdev_priv(dev);
10469 tp->msg_enable = value;
10470}
6aa20a22 10471
1da177e4
LT
10472static int tg3_nway_reset(struct net_device *dev)
10473{
10474 struct tg3 *tp = netdev_priv(dev);
1da177e4 10475 int r;
6aa20a22 10476
1da177e4
LT
10477 if (!netif_running(dev))
10478 return -EAGAIN;
10479
f07e9af3 10480 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
c94e3941
MC
10481 return -EINVAL;
10482
63c3a66f 10483 if (tg3_flag(tp, USE_PHYLIB)) {
f07e9af3 10484 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
b02fd9e3 10485 return -EAGAIN;
3f0e3ad7 10486 r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
b02fd9e3
MC
10487 } else {
10488 u32 bmcr;
10489
10490 spin_lock_bh(&tp->lock);
10491 r = -EINVAL;
10492 tg3_readphy(tp, MII_BMCR, &bmcr);
10493 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
10494 ((bmcr & BMCR_ANENABLE) ||
f07e9af3 10495 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
b02fd9e3
MC
10496 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
10497 BMCR_ANENABLE);
10498 r = 0;
10499 }
10500 spin_unlock_bh(&tp->lock);
1da177e4 10501 }
6aa20a22 10502
1da177e4
LT
10503 return r;
10504}
6aa20a22 10505
1da177e4
LT
10506static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
10507{
10508 struct tg3 *tp = netdev_priv(dev);
6aa20a22 10509
2c49a44d 10510 ering->rx_max_pending = tp->rx_std_ring_mask;
1da177e4 10511 ering->rx_mini_max_pending = 0;
63c3a66f 10512 if (tg3_flag(tp, JUMBO_RING_ENABLE))
2c49a44d 10513 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
4f81c32b
MC
10514 else
10515 ering->rx_jumbo_max_pending = 0;
10516
10517 ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
1da177e4
LT
10518
10519 ering->rx_pending = tp->rx_pending;
10520 ering->rx_mini_pending = 0;
63c3a66f 10521 if (tg3_flag(tp, JUMBO_RING_ENABLE))
4f81c32b
MC
10522 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
10523 else
10524 ering->rx_jumbo_pending = 0;
10525
f3f3f27e 10526 ering->tx_pending = tp->napi[0].tx_pending;
1da177e4 10527}
6aa20a22 10528
1da177e4
LT
10529static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
10530{
10531 struct tg3 *tp = netdev_priv(dev);
646c9edd 10532 int i, irq_sync = 0, err = 0;
6aa20a22 10533
2c49a44d
MC
10534 if ((ering->rx_pending > tp->rx_std_ring_mask) ||
10535 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
bc3a9254
MC
10536 (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
10537 (ering->tx_pending <= MAX_SKB_FRAGS) ||
63c3a66f 10538 (tg3_flag(tp, TSO_BUG) &&
bc3a9254 10539 (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
1da177e4 10540 return -EINVAL;
6aa20a22 10541
bbe832c0 10542 if (netif_running(dev)) {
b02fd9e3 10543 tg3_phy_stop(tp);
1da177e4 10544 tg3_netif_stop(tp);
bbe832c0
MC
10545 irq_sync = 1;
10546 }
1da177e4 10547
bbe832c0 10548 tg3_full_lock(tp, irq_sync);
6aa20a22 10549
1da177e4
LT
10550 tp->rx_pending = ering->rx_pending;
10551
63c3a66f 10552 if (tg3_flag(tp, MAX_RXPEND_64) &&
1da177e4
LT
10553 tp->rx_pending > 63)
10554 tp->rx_pending = 63;
10555 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
646c9edd 10556
6fd45cb8 10557 for (i = 0; i < tp->irq_max; i++)
646c9edd 10558 tp->napi[i].tx_pending = ering->tx_pending;
1da177e4
LT
10559
10560 if (netif_running(dev)) {
944d980e 10561 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
b9ec6c1b
MC
10562 err = tg3_restart_hw(tp, 1);
10563 if (!err)
10564 tg3_netif_start(tp);
1da177e4
LT
10565 }
10566
f47c11ee 10567 tg3_full_unlock(tp);
6aa20a22 10568
b02fd9e3
MC
10569 if (irq_sync && !err)
10570 tg3_phy_start(tp);
10571
b9ec6c1b 10572 return err;
1da177e4 10573}
6aa20a22 10574
1da177e4
LT
10575static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
10576{
10577 struct tg3 *tp = netdev_priv(dev);
6aa20a22 10578
63c3a66f 10579 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
8d018621 10580
e18ce346 10581 if (tp->link_config.active_flowctrl & FLOW_CTRL_RX)
8d018621
MC
10582 epause->rx_pause = 1;
10583 else
10584 epause->rx_pause = 0;
10585
e18ce346 10586 if (tp->link_config.active_flowctrl & FLOW_CTRL_TX)
8d018621
MC
10587 epause->tx_pause = 1;
10588 else
10589 epause->tx_pause = 0;
1da177e4 10590}
6aa20a22 10591
1da177e4
LT
10592static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
10593{
10594 struct tg3 *tp = netdev_priv(dev);
b02fd9e3 10595 int err = 0;
6aa20a22 10596
63c3a66f 10597 if (tg3_flag(tp, USE_PHYLIB)) {
2712168f
MC
10598 u32 newadv;
10599 struct phy_device *phydev;
1da177e4 10600
2712168f 10601 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
f47c11ee 10602
2712168f
MC
10603 if (!(phydev->supported & SUPPORTED_Pause) ||
10604 (!(phydev->supported & SUPPORTED_Asym_Pause) &&
2259dca3 10605 (epause->rx_pause != epause->tx_pause)))
2712168f 10606 return -EINVAL;
1da177e4 10607
2712168f
MC
10608 tp->link_config.flowctrl = 0;
10609 if (epause->rx_pause) {
10610 tp->link_config.flowctrl |= FLOW_CTRL_RX;
10611
10612 if (epause->tx_pause) {
10613 tp->link_config.flowctrl |= FLOW_CTRL_TX;
10614 newadv = ADVERTISED_Pause;
b02fd9e3 10615 } else
2712168f
MC
10616 newadv = ADVERTISED_Pause |
10617 ADVERTISED_Asym_Pause;
10618 } else if (epause->tx_pause) {
10619 tp->link_config.flowctrl |= FLOW_CTRL_TX;
10620 newadv = ADVERTISED_Asym_Pause;
10621 } else
10622 newadv = 0;
10623
10624 if (epause->autoneg)
63c3a66f 10625 tg3_flag_set(tp, PAUSE_AUTONEG);
2712168f 10626 else
63c3a66f 10627 tg3_flag_clear(tp, PAUSE_AUTONEG);
2712168f 10628
f07e9af3 10629 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2712168f
MC
10630 u32 oldadv = phydev->advertising &
10631 (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
10632 if (oldadv != newadv) {
10633 phydev->advertising &=
10634 ~(ADVERTISED_Pause |
10635 ADVERTISED_Asym_Pause);
10636 phydev->advertising |= newadv;
10637 if (phydev->autoneg) {
10638 /*
10639 * Always renegotiate the link to
10640 * inform our link partner of our
10641 * flow control settings, even if the
10642 * flow control is forced. Let
10643 * tg3_adjust_link() do the final
10644 * flow control setup.
10645 */
10646 return phy_start_aneg(phydev);
b02fd9e3 10647 }
b02fd9e3 10648 }
b02fd9e3 10649
2712168f 10650 if (!epause->autoneg)
b02fd9e3 10651 tg3_setup_flow_control(tp, 0, 0);
2712168f
MC
10652 } else {
10653 tp->link_config.orig_advertising &=
10654 ~(ADVERTISED_Pause |
10655 ADVERTISED_Asym_Pause);
10656 tp->link_config.orig_advertising |= newadv;
b02fd9e3
MC
10657 }
10658 } else {
10659 int irq_sync = 0;
10660
10661 if (netif_running(dev)) {
10662 tg3_netif_stop(tp);
10663 irq_sync = 1;
10664 }
10665
10666 tg3_full_lock(tp, irq_sync);
10667
10668 if (epause->autoneg)
63c3a66f 10669 tg3_flag_set(tp, PAUSE_AUTONEG);
b02fd9e3 10670 else
63c3a66f 10671 tg3_flag_clear(tp, PAUSE_AUTONEG);
b02fd9e3 10672 if (epause->rx_pause)
e18ce346 10673 tp->link_config.flowctrl |= FLOW_CTRL_RX;
b02fd9e3 10674 else
e18ce346 10675 tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
b02fd9e3 10676 if (epause->tx_pause)
e18ce346 10677 tp->link_config.flowctrl |= FLOW_CTRL_TX;
b02fd9e3 10678 else
e18ce346 10679 tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
b02fd9e3
MC
10680
10681 if (netif_running(dev)) {
10682 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10683 err = tg3_restart_hw(tp, 1);
10684 if (!err)
10685 tg3_netif_start(tp);
10686 }
10687
10688 tg3_full_unlock(tp);
10689 }
6aa20a22 10690
b9ec6c1b 10691 return err;
1da177e4 10692}
6aa20a22 10693
de6f31eb 10694static int tg3_get_sset_count(struct net_device *dev, int sset)
1da177e4 10695{
b9f2c044
JG
10696 switch (sset) {
10697 case ETH_SS_TEST:
10698 return TG3_NUM_TEST;
10699 case ETH_SS_STATS:
10700 return TG3_NUM_STATS;
10701 default:
10702 return -EOPNOTSUPP;
10703 }
4cafd3f5
MC
10704}
10705
de6f31eb 10706static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
1da177e4
LT
10707{
10708 switch (stringset) {
10709 case ETH_SS_STATS:
10710 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
10711 break;
4cafd3f5
MC
10712 case ETH_SS_TEST:
10713 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
10714 break;
1da177e4
LT
10715 default:
10716 WARN_ON(1); /* we need a WARN() */
10717 break;
10718 }
10719}
10720
81b8709c 10721static int tg3_set_phys_id(struct net_device *dev,
10722 enum ethtool_phys_id_state state)
4009a93d
MC
10723{
10724 struct tg3 *tp = netdev_priv(dev);
4009a93d
MC
10725
10726 if (!netif_running(tp->dev))
10727 return -EAGAIN;
10728
81b8709c 10729 switch (state) {
10730 case ETHTOOL_ID_ACTIVE:
fce55922 10731 return 1; /* cycle on/off once per second */
4009a93d 10732
81b8709c 10733 case ETHTOOL_ID_ON:
10734 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
10735 LED_CTRL_1000MBPS_ON |
10736 LED_CTRL_100MBPS_ON |
10737 LED_CTRL_10MBPS_ON |
10738 LED_CTRL_TRAFFIC_OVERRIDE |
10739 LED_CTRL_TRAFFIC_BLINK |
10740 LED_CTRL_TRAFFIC_LED);
10741 break;
6aa20a22 10742
81b8709c 10743 case ETHTOOL_ID_OFF:
10744 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
10745 LED_CTRL_TRAFFIC_OVERRIDE);
10746 break;
4009a93d 10747
81b8709c 10748 case ETHTOOL_ID_INACTIVE:
10749 tw32(MAC_LED_CTRL, tp->led_ctrl);
10750 break;
4009a93d 10751 }
81b8709c 10752
4009a93d
MC
10753 return 0;
10754}
10755
de6f31eb 10756static void tg3_get_ethtool_stats(struct net_device *dev,
1da177e4
LT
10757 struct ethtool_stats *estats, u64 *tmp_stats)
10758{
10759 struct tg3 *tp = netdev_priv(dev);
10760 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats));
10761}
10762
535a490e 10763static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
c3e94500
MC
10764{
10765 int i;
10766 __be32 *buf;
10767 u32 offset = 0, len = 0;
10768 u32 magic, val;
10769
63c3a66f 10770 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
c3e94500
MC
10771 return NULL;
10772
10773 if (magic == TG3_EEPROM_MAGIC) {
10774 for (offset = TG3_NVM_DIR_START;
10775 offset < TG3_NVM_DIR_END;
10776 offset += TG3_NVM_DIRENT_SIZE) {
10777 if (tg3_nvram_read(tp, offset, &val))
10778 return NULL;
10779
10780 if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
10781 TG3_NVM_DIRTYPE_EXTVPD)
10782 break;
10783 }
10784
10785 if (offset != TG3_NVM_DIR_END) {
10786 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
10787 if (tg3_nvram_read(tp, offset + 4, &offset))
10788 return NULL;
10789
10790 offset = tg3_nvram_logical_addr(tp, offset);
10791 }
10792 }
10793
10794 if (!offset || !len) {
10795 offset = TG3_NVM_VPD_OFF;
10796 len = TG3_NVM_VPD_LEN;
10797 }
10798
10799 buf = kmalloc(len, GFP_KERNEL);
10800 if (buf == NULL)
10801 return NULL;
10802
10803 if (magic == TG3_EEPROM_MAGIC) {
10804 for (i = 0; i < len; i += 4) {
10805 /* The data is in little-endian format in NVRAM.
10806 * Use the big-endian read routines to preserve
10807 * the byte order as it exists in NVRAM.
10808 */
10809 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
10810 goto error;
10811 }
10812 } else {
10813 u8 *ptr;
10814 ssize_t cnt;
10815 unsigned int pos = 0;
10816
10817 ptr = (u8 *)&buf[0];
10818 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
10819 cnt = pci_read_vpd(tp->pdev, pos,
10820 len - pos, ptr);
10821 if (cnt == -ETIMEDOUT || cnt == -EINTR)
10822 cnt = 0;
10823 else if (cnt < 0)
10824 goto error;
10825 }
10826 if (pos != len)
10827 goto error;
10828 }
10829
535a490e
MC
10830 *vpdlen = len;
10831
c3e94500
MC
10832 return buf;
10833
10834error:
10835 kfree(buf);
10836 return NULL;
10837}
10838
566f86ad 10839#define NVRAM_TEST_SIZE 0x100
a5767dec
MC
10840#define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14
10841#define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18
10842#define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c
727a6d9f
MC
10843#define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20
10844#define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24
bda18faf 10845#define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50
b16250e3
MC
10846#define NVRAM_SELFBOOT_HW_SIZE 0x20
10847#define NVRAM_SELFBOOT_DATA_SIZE 0x1c
566f86ad
MC
10848
10849static int tg3_test_nvram(struct tg3 *tp)
10850{
535a490e 10851 u32 csum, magic, len;
a9dc529d 10852 __be32 *buf;
ab0049b4 10853 int i, j, k, err = 0, size;
566f86ad 10854
63c3a66f 10855 if (tg3_flag(tp, NO_NVRAM))
df259d8c
MC
10856 return 0;
10857
e4f34110 10858 if (tg3_nvram_read(tp, 0, &magic) != 0)
1b27777a
MC
10859 return -EIO;
10860
1b27777a
MC
10861 if (magic == TG3_EEPROM_MAGIC)
10862 size = NVRAM_TEST_SIZE;
b16250e3 10863 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
a5767dec
MC
10864 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
10865 TG3_EEPROM_SB_FORMAT_1) {
10866 switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
10867 case TG3_EEPROM_SB_REVISION_0:
10868 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
10869 break;
10870 case TG3_EEPROM_SB_REVISION_2:
10871 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
10872 break;
10873 case TG3_EEPROM_SB_REVISION_3:
10874 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
10875 break;
727a6d9f
MC
10876 case TG3_EEPROM_SB_REVISION_4:
10877 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
10878 break;
10879 case TG3_EEPROM_SB_REVISION_5:
10880 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
10881 break;
10882 case TG3_EEPROM_SB_REVISION_6:
10883 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
10884 break;
a5767dec 10885 default:
727a6d9f 10886 return -EIO;
a5767dec
MC
10887 }
10888 } else
1b27777a 10889 return 0;
b16250e3
MC
10890 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
10891 size = NVRAM_SELFBOOT_HW_SIZE;
10892 else
1b27777a
MC
10893 return -EIO;
10894
10895 buf = kmalloc(size, GFP_KERNEL);
566f86ad
MC
10896 if (buf == NULL)
10897 return -ENOMEM;
10898
1b27777a
MC
10899 err = -EIO;
10900 for (i = 0, j = 0; i < size; i += 4, j++) {
a9dc529d
MC
10901 err = tg3_nvram_read_be32(tp, i, &buf[j]);
10902 if (err)
566f86ad 10903 break;
566f86ad 10904 }
1b27777a 10905 if (i < size)
566f86ad
MC
10906 goto out;
10907
1b27777a 10908 /* Selfboot format */
a9dc529d 10909 magic = be32_to_cpu(buf[0]);
b9fc7dc5 10910 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
b16250e3 10911 TG3_EEPROM_MAGIC_FW) {
1b27777a
MC
10912 u8 *buf8 = (u8 *) buf, csum8 = 0;
10913
b9fc7dc5 10914 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
a5767dec
MC
10915 TG3_EEPROM_SB_REVISION_2) {
10916 /* For rev 2, the csum doesn't include the MBA. */
10917 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
10918 csum8 += buf8[i];
10919 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
10920 csum8 += buf8[i];
10921 } else {
10922 for (i = 0; i < size; i++)
10923 csum8 += buf8[i];
10924 }
1b27777a 10925
ad96b485
AB
10926 if (csum8 == 0) {
10927 err = 0;
10928 goto out;
10929 }
10930
10931 err = -EIO;
10932 goto out;
1b27777a 10933 }
566f86ad 10934
b9fc7dc5 10935 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
b16250e3
MC
10936 TG3_EEPROM_MAGIC_HW) {
10937 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
a9dc529d 10938 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
b16250e3 10939 u8 *buf8 = (u8 *) buf;
b16250e3
MC
10940
10941 /* Separate the parity bits and the data bytes. */
10942 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
10943 if ((i == 0) || (i == 8)) {
10944 int l;
10945 u8 msk;
10946
10947 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
10948 parity[k++] = buf8[i] & msk;
10949 i++;
859a5887 10950 } else if (i == 16) {
b16250e3
MC
10951 int l;
10952 u8 msk;
10953
10954 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
10955 parity[k++] = buf8[i] & msk;
10956 i++;
10957
10958 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
10959 parity[k++] = buf8[i] & msk;
10960 i++;
10961 }
10962 data[j++] = buf8[i];
10963 }
10964
10965 err = -EIO;
10966 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
10967 u8 hw8 = hweight8(data[i]);
10968
10969 if ((hw8 & 0x1) && parity[i])
10970 goto out;
10971 else if (!(hw8 & 0x1) && !parity[i])
10972 goto out;
10973 }
10974 err = 0;
10975 goto out;
10976 }
10977
01c3a392
MC
10978 err = -EIO;
10979
566f86ad
MC
10980 /* Bootstrap checksum at offset 0x10 */
10981 csum = calc_crc((unsigned char *) buf, 0x10);
01c3a392 10982 if (csum != le32_to_cpu(buf[0x10/4]))
566f86ad
MC
10983 goto out;
10984
10985 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
10986 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
01c3a392 10987 if (csum != le32_to_cpu(buf[0xfc/4]))
a9dc529d 10988 goto out;
566f86ad 10989
c3e94500
MC
10990 kfree(buf);
10991
535a490e 10992 buf = tg3_vpd_readblock(tp, &len);
c3e94500
MC
10993 if (!buf)
10994 return -ENOMEM;
d4894f3e 10995
535a490e 10996 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
d4894f3e
MC
10997 if (i > 0) {
10998 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
10999 if (j < 0)
11000 goto out;
11001
535a490e 11002 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
d4894f3e
MC
11003 goto out;
11004
11005 i += PCI_VPD_LRDT_TAG_SIZE;
11006 j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
11007 PCI_VPD_RO_KEYWORD_CHKSUM);
11008 if (j > 0) {
11009 u8 csum8 = 0;
11010
11011 j += PCI_VPD_INFO_FLD_HDR_SIZE;
11012
11013 for (i = 0; i <= j; i++)
11014 csum8 += ((u8 *)buf)[i];
11015
11016 if (csum8)
11017 goto out;
11018 }
11019 }
11020
566f86ad
MC
11021 err = 0;
11022
11023out:
11024 kfree(buf);
11025 return err;
11026}
11027
ca43007a
MC
11028#define TG3_SERDES_TIMEOUT_SEC 2
11029#define TG3_COPPER_TIMEOUT_SEC 6
11030
11031static int tg3_test_link(struct tg3 *tp)
11032{
11033 int i, max;
11034
11035 if (!netif_running(tp->dev))
11036 return -ENODEV;
11037
f07e9af3 11038 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
ca43007a
MC
11039 max = TG3_SERDES_TIMEOUT_SEC;
11040 else
11041 max = TG3_COPPER_TIMEOUT_SEC;
11042
11043 for (i = 0; i < max; i++) {
11044 if (netif_carrier_ok(tp->dev))
11045 return 0;
11046
11047 if (msleep_interruptible(1000))
11048 break;
11049 }
11050
11051 return -EIO;
11052}
11053
a71116d1 11054/* Only test the commonly used registers */
30ca3e37 11055static int tg3_test_registers(struct tg3 *tp)
a71116d1 11056{
b16250e3 11057 int i, is_5705, is_5750;
a71116d1
MC
11058 u32 offset, read_mask, write_mask, val, save_val, read_val;
11059 static struct {
11060 u16 offset;
11061 u16 flags;
11062#define TG3_FL_5705 0x1
11063#define TG3_FL_NOT_5705 0x2
11064#define TG3_FL_NOT_5788 0x4
b16250e3 11065#define TG3_FL_NOT_5750 0x8
a71116d1
MC
11066 u32 read_mask;
11067 u32 write_mask;
11068 } reg_tbl[] = {
11069 /* MAC Control Registers */
11070 { MAC_MODE, TG3_FL_NOT_5705,
11071 0x00000000, 0x00ef6f8c },
11072 { MAC_MODE, TG3_FL_5705,
11073 0x00000000, 0x01ef6b8c },
11074 { MAC_STATUS, TG3_FL_NOT_5705,
11075 0x03800107, 0x00000000 },
11076 { MAC_STATUS, TG3_FL_5705,
11077 0x03800100, 0x00000000 },
11078 { MAC_ADDR_0_HIGH, 0x0000,
11079 0x00000000, 0x0000ffff },
11080 { MAC_ADDR_0_LOW, 0x0000,
c6cdf436 11081 0x00000000, 0xffffffff },
a71116d1
MC
11082 { MAC_RX_MTU_SIZE, 0x0000,
11083 0x00000000, 0x0000ffff },
11084 { MAC_TX_MODE, 0x0000,
11085 0x00000000, 0x00000070 },
11086 { MAC_TX_LENGTHS, 0x0000,
11087 0x00000000, 0x00003fff },
11088 { MAC_RX_MODE, TG3_FL_NOT_5705,
11089 0x00000000, 0x000007fc },
11090 { MAC_RX_MODE, TG3_FL_5705,
11091 0x00000000, 0x000007dc },
11092 { MAC_HASH_REG_0, 0x0000,
11093 0x00000000, 0xffffffff },
11094 { MAC_HASH_REG_1, 0x0000,
11095 0x00000000, 0xffffffff },
11096 { MAC_HASH_REG_2, 0x0000,
11097 0x00000000, 0xffffffff },
11098 { MAC_HASH_REG_3, 0x0000,
11099 0x00000000, 0xffffffff },
11100
11101 /* Receive Data and Receive BD Initiator Control Registers. */
11102 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
11103 0x00000000, 0xffffffff },
11104 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
11105 0x00000000, 0xffffffff },
11106 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
11107 0x00000000, 0x00000003 },
11108 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
11109 0x00000000, 0xffffffff },
11110 { RCVDBDI_STD_BD+0, 0x0000,
11111 0x00000000, 0xffffffff },
11112 { RCVDBDI_STD_BD+4, 0x0000,
11113 0x00000000, 0xffffffff },
11114 { RCVDBDI_STD_BD+8, 0x0000,
11115 0x00000000, 0xffff0002 },
11116 { RCVDBDI_STD_BD+0xc, 0x0000,
11117 0x00000000, 0xffffffff },
6aa20a22 11118
a71116d1
MC
11119 /* Receive BD Initiator Control Registers. */
11120 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
11121 0x00000000, 0xffffffff },
11122 { RCVBDI_STD_THRESH, TG3_FL_5705,
11123 0x00000000, 0x000003ff },
11124 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
11125 0x00000000, 0xffffffff },
6aa20a22 11126
a71116d1
MC
11127 /* Host Coalescing Control Registers. */
11128 { HOSTCC_MODE, TG3_FL_NOT_5705,
11129 0x00000000, 0x00000004 },
11130 { HOSTCC_MODE, TG3_FL_5705,
11131 0x00000000, 0x000000f6 },
11132 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
11133 0x00000000, 0xffffffff },
11134 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
11135 0x00000000, 0x000003ff },
11136 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
11137 0x00000000, 0xffffffff },
11138 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
11139 0x00000000, 0x000003ff },
11140 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
11141 0x00000000, 0xffffffff },
11142 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11143 0x00000000, 0x000000ff },
11144 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
11145 0x00000000, 0xffffffff },
11146 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11147 0x00000000, 0x000000ff },
11148 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
11149 0x00000000, 0xffffffff },
11150 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
11151 0x00000000, 0xffffffff },
11152 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11153 0x00000000, 0xffffffff },
11154 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11155 0x00000000, 0x000000ff },
11156 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11157 0x00000000, 0xffffffff },
11158 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11159 0x00000000, 0x000000ff },
11160 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
11161 0x00000000, 0xffffffff },
11162 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
11163 0x00000000, 0xffffffff },
11164 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
11165 0x00000000, 0xffffffff },
11166 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
11167 0x00000000, 0xffffffff },
11168 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
11169 0x00000000, 0xffffffff },
11170 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
11171 0xffffffff, 0x00000000 },
11172 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
11173 0xffffffff, 0x00000000 },
11174
11175 /* Buffer Manager Control Registers. */
b16250e3 11176 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
a71116d1 11177 0x00000000, 0x007fff80 },
b16250e3 11178 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
a71116d1
MC
11179 0x00000000, 0x007fffff },
11180 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
11181 0x00000000, 0x0000003f },
11182 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
11183 0x00000000, 0x000001ff },
11184 { BUFMGR_MB_HIGH_WATER, 0x0000,
11185 0x00000000, 0x000001ff },
11186 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
11187 0xffffffff, 0x00000000 },
11188 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
11189 0xffffffff, 0x00000000 },
6aa20a22 11190
a71116d1
MC
11191 /* Mailbox Registers */
11192 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
11193 0x00000000, 0x000001ff },
11194 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
11195 0x00000000, 0x000001ff },
11196 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
11197 0x00000000, 0x000007ff },
11198 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
11199 0x00000000, 0x000001ff },
11200
11201 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
11202 };
11203
b16250e3 11204 is_5705 = is_5750 = 0;
63c3a66f 11205 if (tg3_flag(tp, 5705_PLUS)) {
a71116d1 11206 is_5705 = 1;
63c3a66f 11207 if (tg3_flag(tp, 5750_PLUS))
b16250e3
MC
11208 is_5750 = 1;
11209 }
a71116d1
MC
11210
11211 for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
11212 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
11213 continue;
11214
11215 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
11216 continue;
11217
63c3a66f 11218 if (tg3_flag(tp, IS_5788) &&
a71116d1
MC
11219 (reg_tbl[i].flags & TG3_FL_NOT_5788))
11220 continue;
11221
b16250e3
MC
11222 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
11223 continue;
11224
a71116d1
MC
11225 offset = (u32) reg_tbl[i].offset;
11226 read_mask = reg_tbl[i].read_mask;
11227 write_mask = reg_tbl[i].write_mask;
11228
11229 /* Save the original register content */
11230 save_val = tr32(offset);
11231
11232 /* Determine the read-only value. */
11233 read_val = save_val & read_mask;
11234
11235 /* Write zero to the register, then make sure the read-only bits
11236 * are not changed and the read/write bits are all zeros.
11237 */
11238 tw32(offset, 0);
11239
11240 val = tr32(offset);
11241
11242 /* Test the read-only and read/write bits. */
11243 if (((val & read_mask) != read_val) || (val & write_mask))
11244 goto out;
11245
11246 /* Write ones to all the bits defined by RdMask and WrMask, then
11247 * make sure the read-only bits are not changed and the
11248 * read/write bits are all ones.
11249 */
11250 tw32(offset, read_mask | write_mask);
11251
11252 val = tr32(offset);
11253
11254 /* Test the read-only bits. */
11255 if ((val & read_mask) != read_val)
11256 goto out;
11257
11258 /* Test the read/write bits. */
11259 if ((val & write_mask) != write_mask)
11260 goto out;
11261
11262 tw32(offset, save_val);
11263 }
11264
11265 return 0;
11266
11267out:
9f88f29f 11268 if (netif_msg_hw(tp))
2445e461
MC
11269 netdev_err(tp->dev,
11270 "Register test failed at offset %x\n", offset);
a71116d1
MC
11271 tw32(offset, save_val);
11272 return -EIO;
11273}
11274
7942e1db
MC
11275static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
11276{
f71e1309 11277 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
7942e1db
MC
11278 int i;
11279 u32 j;
11280
e9edda69 11281 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
7942e1db
MC
11282 for (j = 0; j < len; j += 4) {
11283 u32 val;
11284
11285 tg3_write_mem(tp, offset + j, test_pattern[i]);
11286 tg3_read_mem(tp, offset + j, &val);
11287 if (val != test_pattern[i])
11288 return -EIO;
11289 }
11290 }
11291 return 0;
11292}
11293
11294static int tg3_test_memory(struct tg3 *tp)
11295{
11296 static struct mem_entry {
11297 u32 offset;
11298 u32 len;
11299 } mem_tbl_570x[] = {
38690194 11300 { 0x00000000, 0x00b50},
7942e1db
MC
11301 { 0x00002000, 0x1c000},
11302 { 0xffffffff, 0x00000}
11303 }, mem_tbl_5705[] = {
11304 { 0x00000100, 0x0000c},
11305 { 0x00000200, 0x00008},
7942e1db
MC
11306 { 0x00004000, 0x00800},
11307 { 0x00006000, 0x01000},
11308 { 0x00008000, 0x02000},
11309 { 0x00010000, 0x0e000},
11310 { 0xffffffff, 0x00000}
79f4d13a
MC
11311 }, mem_tbl_5755[] = {
11312 { 0x00000200, 0x00008},
11313 { 0x00004000, 0x00800},
11314 { 0x00006000, 0x00800},
11315 { 0x00008000, 0x02000},
11316 { 0x00010000, 0x0c000},
11317 { 0xffffffff, 0x00000}
b16250e3
MC
11318 }, mem_tbl_5906[] = {
11319 { 0x00000200, 0x00008},
11320 { 0x00004000, 0x00400},
11321 { 0x00006000, 0x00400},
11322 { 0x00008000, 0x01000},
11323 { 0x00010000, 0x01000},
11324 { 0xffffffff, 0x00000}
8b5a6c42
MC
11325 }, mem_tbl_5717[] = {
11326 { 0x00000200, 0x00008},
11327 { 0x00010000, 0x0a000},
11328 { 0x00020000, 0x13c00},
11329 { 0xffffffff, 0x00000}
11330 }, mem_tbl_57765[] = {
11331 { 0x00000200, 0x00008},
11332 { 0x00004000, 0x00800},
11333 { 0x00006000, 0x09800},
11334 { 0x00010000, 0x0a000},
11335 { 0xffffffff, 0x00000}
7942e1db
MC
11336 };
11337 struct mem_entry *mem_tbl;
11338 int err = 0;
11339 int i;
11340
63c3a66f 11341 if (tg3_flag(tp, 5717_PLUS))
8b5a6c42
MC
11342 mem_tbl = mem_tbl_5717;
11343 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
11344 mem_tbl = mem_tbl_57765;
63c3a66f 11345 else if (tg3_flag(tp, 5755_PLUS))
321d32a0
MC
11346 mem_tbl = mem_tbl_5755;
11347 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11348 mem_tbl = mem_tbl_5906;
63c3a66f 11349 else if (tg3_flag(tp, 5705_PLUS))
321d32a0
MC
11350 mem_tbl = mem_tbl_5705;
11351 else
7942e1db
MC
11352 mem_tbl = mem_tbl_570x;
11353
11354 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
be98da6a
MC
11355 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
11356 if (err)
7942e1db
MC
11357 break;
11358 }
6aa20a22 11359
7942e1db
MC
11360 return err;
11361}
11362
bb158d69
MC
11363#define TG3_TSO_MSS 500
11364
11365#define TG3_TSO_IP_HDR_LEN 20
11366#define TG3_TSO_TCP_HDR_LEN 20
11367#define TG3_TSO_TCP_OPT_LEN 12
11368
11369static const u8 tg3_tso_header[] = {
113700x08, 0x00,
113710x45, 0x00, 0x00, 0x00,
113720x00, 0x00, 0x40, 0x00,
113730x40, 0x06, 0x00, 0x00,
113740x0a, 0x00, 0x00, 0x01,
113750x0a, 0x00, 0x00, 0x02,
113760x0d, 0x00, 0xe0, 0x00,
113770x00, 0x00, 0x01, 0x00,
113780x00, 0x00, 0x02, 0x00,
113790x80, 0x10, 0x10, 0x00,
113800x14, 0x09, 0x00, 0x00,
113810x01, 0x01, 0x08, 0x0a,
113820x11, 0x11, 0x11, 0x11,
113830x11, 0x11, 0x11, 0x11,
11384};
9f40dead 11385
28a45957 11386static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
c76949a6 11387{
5e5a7f37 11388 u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
bb158d69 11389 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
84b67b27 11390 u32 budget;
c76949a6
MC
11391 struct sk_buff *skb, *rx_skb;
11392 u8 *tx_data;
11393 dma_addr_t map;
11394 int num_pkts, tx_len, rx_len, i, err;
11395 struct tg3_rx_buffer_desc *desc;
898a56f8 11396 struct tg3_napi *tnapi, *rnapi;
8fea32b9 11397 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
c76949a6 11398
c8873405
MC
11399 tnapi = &tp->napi[0];
11400 rnapi = &tp->napi[0];
0c1d0e2b 11401 if (tp->irq_cnt > 1) {
63c3a66f 11402 if (tg3_flag(tp, ENABLE_RSS))
1da85aa3 11403 rnapi = &tp->napi[1];
63c3a66f 11404 if (tg3_flag(tp, ENABLE_TSS))
c8873405 11405 tnapi = &tp->napi[1];
0c1d0e2b 11406 }
fd2ce37f 11407 coal_now = tnapi->coal_now | rnapi->coal_now;
898a56f8 11408
c76949a6
MC
11409 err = -EIO;
11410
4852a861 11411 tx_len = pktsz;
a20e9c62 11412 skb = netdev_alloc_skb(tp->dev, tx_len);
a50bb7b9
JJ
11413 if (!skb)
11414 return -ENOMEM;
11415
c76949a6
MC
11416 tx_data = skb_put(skb, tx_len);
11417 memcpy(tx_data, tp->dev->dev_addr, 6);
11418 memset(tx_data + 6, 0x0, 8);
11419
4852a861 11420 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
c76949a6 11421
28a45957 11422 if (tso_loopback) {
bb158d69
MC
11423 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
11424
11425 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
11426 TG3_TSO_TCP_OPT_LEN;
11427
11428 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
11429 sizeof(tg3_tso_header));
11430 mss = TG3_TSO_MSS;
11431
11432 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
11433 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
11434
11435 /* Set the total length field in the IP header */
11436 iph->tot_len = htons((u16)(mss + hdr_len));
11437
11438 base_flags = (TXD_FLAG_CPU_PRE_DMA |
11439 TXD_FLAG_CPU_POST_DMA);
11440
63c3a66f
JP
11441 if (tg3_flag(tp, HW_TSO_1) ||
11442 tg3_flag(tp, HW_TSO_2) ||
11443 tg3_flag(tp, HW_TSO_3)) {
bb158d69
MC
11444 struct tcphdr *th;
11445 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
11446 th = (struct tcphdr *)&tx_data[val];
11447 th->check = 0;
11448 } else
11449 base_flags |= TXD_FLAG_TCPUDP_CSUM;
11450
63c3a66f 11451 if (tg3_flag(tp, HW_TSO_3)) {
bb158d69
MC
11452 mss |= (hdr_len & 0xc) << 12;
11453 if (hdr_len & 0x10)
11454 base_flags |= 0x00000010;
11455 base_flags |= (hdr_len & 0x3e0) << 5;
63c3a66f 11456 } else if (tg3_flag(tp, HW_TSO_2))
bb158d69 11457 mss |= hdr_len << 9;
63c3a66f 11458 else if (tg3_flag(tp, HW_TSO_1) ||
bb158d69
MC
11459 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
11460 mss |= (TG3_TSO_TCP_OPT_LEN << 9);
11461 } else {
11462 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
11463 }
11464
11465 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
11466 } else {
11467 num_pkts = 1;
11468 data_off = ETH_HLEN;
11469 }
11470
11471 for (i = data_off; i < tx_len; i++)
c76949a6
MC
11472 tx_data[i] = (u8) (i & 0xff);
11473
f4188d8a
AD
11474 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
11475 if (pci_dma_mapping_error(tp->pdev, map)) {
a21771dd
MC
11476 dev_kfree_skb(skb);
11477 return -EIO;
11478 }
c76949a6 11479
0d681b27
MC
11480 val = tnapi->tx_prod;
11481 tnapi->tx_buffers[val].skb = skb;
11482 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
11483
c76949a6 11484 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
fd2ce37f 11485 rnapi->coal_now);
c76949a6
MC
11486
11487 udelay(10);
11488
898a56f8 11489 rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
c76949a6 11490
84b67b27
MC
11491 budget = tg3_tx_avail(tnapi);
11492 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
d1a3b737
MC
11493 base_flags | TXD_FLAG_END, mss, 0)) {
11494 tnapi->tx_buffers[val].skb = NULL;
11495 dev_kfree_skb(skb);
11496 return -EIO;
11497 }
c76949a6 11498
f3f3f27e 11499 tnapi->tx_prod++;
c76949a6 11500
f3f3f27e
MC
11501 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
11502 tr32_mailbox(tnapi->prodmbox);
c76949a6
MC
11503
11504 udelay(10);
11505
303fc921
MC
11506 /* 350 usec to allow enough time on some 10/100 Mbps devices. */
11507 for (i = 0; i < 35; i++) {
c76949a6 11508 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
fd2ce37f 11509 coal_now);
c76949a6
MC
11510
11511 udelay(10);
11512
898a56f8
MC
11513 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
11514 rx_idx = rnapi->hw_status->idx[0].rx_producer;
f3f3f27e 11515 if ((tx_idx == tnapi->tx_prod) &&
c76949a6
MC
11516 (rx_idx == (rx_start_idx + num_pkts)))
11517 break;
11518 }
11519
0d681b27 11520 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, 0);
c76949a6
MC
11521 dev_kfree_skb(skb);
11522
f3f3f27e 11523 if (tx_idx != tnapi->tx_prod)
c76949a6
MC
11524 goto out;
11525
11526 if (rx_idx != rx_start_idx + num_pkts)
11527 goto out;
11528
bb158d69
MC
11529 val = data_off;
11530 while (rx_idx != rx_start_idx) {
11531 desc = &rnapi->rx_rcb[rx_start_idx++];
11532 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
11533 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
c76949a6 11534
bb158d69
MC
11535 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
11536 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
11537 goto out;
c76949a6 11538
bb158d69
MC
11539 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
11540 - ETH_FCS_LEN;
c76949a6 11541
28a45957 11542 if (!tso_loopback) {
bb158d69
MC
11543 if (rx_len != tx_len)
11544 goto out;
4852a861 11545
bb158d69
MC
11546 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
11547 if (opaque_key != RXD_OPAQUE_RING_STD)
11548 goto out;
11549 } else {
11550 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
11551 goto out;
11552 }
11553 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
11554 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
54e0a67f 11555 >> RXD_TCPCSUM_SHIFT != 0xffff) {
4852a861 11556 goto out;
bb158d69 11557 }
4852a861 11558
bb158d69
MC
11559 if (opaque_key == RXD_OPAQUE_RING_STD) {
11560 rx_skb = tpr->rx_std_buffers[desc_idx].skb;
11561 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
11562 mapping);
11563 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
11564 rx_skb = tpr->rx_jmb_buffers[desc_idx].skb;
11565 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
11566 mapping);
11567 } else
11568 goto out;
c76949a6 11569
bb158d69
MC
11570 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
11571 PCI_DMA_FROMDEVICE);
c76949a6 11572
bb158d69
MC
11573 for (i = data_off; i < rx_len; i++, val++) {
11574 if (*(rx_skb->data + i) != (u8) (val & 0xff))
11575 goto out;
11576 }
c76949a6 11577 }
bb158d69 11578
c76949a6 11579 err = 0;
6aa20a22 11580
c76949a6
MC
11581 /* tg3_free_rings will unmap and free the rx_skb */
11582out:
11583 return err;
11584}
11585
00c266b7
MC
11586#define TG3_STD_LOOPBACK_FAILED 1
11587#define TG3_JMB_LOOPBACK_FAILED 2
bb158d69 11588#define TG3_TSO_LOOPBACK_FAILED 4
28a45957
MC
11589#define TG3_LOOPBACK_FAILED \
11590 (TG3_STD_LOOPBACK_FAILED | \
11591 TG3_JMB_LOOPBACK_FAILED | \
11592 TG3_TSO_LOOPBACK_FAILED)
00c266b7 11593
941ec90f 11594static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
9f40dead 11595{
28a45957 11596 int err = -EIO;
2215e24c 11597 u32 eee_cap;
9f40dead 11598
ab789046
MC
11599 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
11600 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11601
28a45957
MC
11602 if (!netif_running(tp->dev)) {
11603 data[0] = TG3_LOOPBACK_FAILED;
11604 data[1] = TG3_LOOPBACK_FAILED;
941ec90f
MC
11605 if (do_extlpbk)
11606 data[2] = TG3_LOOPBACK_FAILED;
28a45957
MC
11607 goto done;
11608 }
11609
b9ec6c1b 11610 err = tg3_reset_hw(tp, 1);
ab789046 11611 if (err) {
28a45957
MC
11612 data[0] = TG3_LOOPBACK_FAILED;
11613 data[1] = TG3_LOOPBACK_FAILED;
941ec90f
MC
11614 if (do_extlpbk)
11615 data[2] = TG3_LOOPBACK_FAILED;
ab789046
MC
11616 goto done;
11617 }
9f40dead 11618
63c3a66f 11619 if (tg3_flag(tp, ENABLE_RSS)) {
4a85f098
MC
11620 int i;
11621
11622 /* Reroute all rx packets to the 1st queue */
11623 for (i = MAC_RSS_INDIR_TBL_0;
11624 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
11625 tw32(i, 0x0);
11626 }
11627
6e01b20b
MC
11628 /* HW errata - mac loopback fails in some cases on 5780.
11629 * Normal traffic and PHY loopback are not affected by
11630 * errata. Also, the MAC loopback test is deprecated for
11631 * all newer ASIC revisions.
11632 */
11633 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
11634 !tg3_flag(tp, CPMU_PRESENT)) {
11635 tg3_mac_loopback(tp, true);
9936bcf6 11636
28a45957
MC
11637 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
11638 data[0] |= TG3_STD_LOOPBACK_FAILED;
6e01b20b
MC
11639
11640 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
28a45957
MC
11641 tg3_run_loopback(tp, 9000 + ETH_HLEN, false))
11642 data[0] |= TG3_JMB_LOOPBACK_FAILED;
6e01b20b
MC
11643
11644 tg3_mac_loopback(tp, false);
11645 }
4852a861 11646
f07e9af3 11647 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
63c3a66f 11648 !tg3_flag(tp, USE_PHYLIB)) {
5e5a7f37
MC
11649 int i;
11650
941ec90f 11651 tg3_phy_lpbk_set(tp, 0, false);
5e5a7f37
MC
11652
11653 /* Wait for link */
11654 for (i = 0; i < 100; i++) {
11655 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
11656 break;
11657 mdelay(1);
11658 }
11659
28a45957
MC
11660 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
11661 data[1] |= TG3_STD_LOOPBACK_FAILED;
63c3a66f 11662 if (tg3_flag(tp, TSO_CAPABLE) &&
28a45957
MC
11663 tg3_run_loopback(tp, ETH_FRAME_LEN, true))
11664 data[1] |= TG3_TSO_LOOPBACK_FAILED;
63c3a66f 11665 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
28a45957
MC
11666 tg3_run_loopback(tp, 9000 + ETH_HLEN, false))
11667 data[1] |= TG3_JMB_LOOPBACK_FAILED;
9f40dead 11668
941ec90f
MC
11669 if (do_extlpbk) {
11670 tg3_phy_lpbk_set(tp, 0, true);
11671
11672 /* All link indications report up, but the hardware
11673 * isn't really ready for about 20 msec. Double it
11674 * to be sure.
11675 */
11676 mdelay(40);
11677
11678 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
11679 data[2] |= TG3_STD_LOOPBACK_FAILED;
11680 if (tg3_flag(tp, TSO_CAPABLE) &&
11681 tg3_run_loopback(tp, ETH_FRAME_LEN, true))
11682 data[2] |= TG3_TSO_LOOPBACK_FAILED;
11683 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
11684 tg3_run_loopback(tp, 9000 + ETH_HLEN, false))
11685 data[2] |= TG3_JMB_LOOPBACK_FAILED;
11686 }
11687
5e5a7f37
MC
11688 /* Re-enable gphy autopowerdown. */
11689 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
11690 tg3_phy_toggle_apd(tp, true);
11691 }
6833c043 11692
941ec90f 11693 err = (data[0] | data[1] | data[2]) ? -EIO : 0;
28a45957 11694
ab789046
MC
11695done:
11696 tp->phy_flags |= eee_cap;
11697
9f40dead
MC
11698 return err;
11699}
11700
4cafd3f5
MC
11701static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
11702 u64 *data)
11703{
566f86ad 11704 struct tg3 *tp = netdev_priv(dev);
941ec90f 11705 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
566f86ad 11706
bed9829f
MC
11707 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
11708 tg3_power_up(tp)) {
11709 etest->flags |= ETH_TEST_FL_FAILED;
11710 memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
11711 return;
11712 }
bc1c7567 11713
566f86ad
MC
11714 memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
11715
11716 if (tg3_test_nvram(tp) != 0) {
11717 etest->flags |= ETH_TEST_FL_FAILED;
11718 data[0] = 1;
11719 }
941ec90f 11720 if (!doextlpbk && tg3_test_link(tp)) {
ca43007a
MC
11721 etest->flags |= ETH_TEST_FL_FAILED;
11722 data[1] = 1;
11723 }
a71116d1 11724 if (etest->flags & ETH_TEST_FL_OFFLINE) {
b02fd9e3 11725 int err, err2 = 0, irq_sync = 0;
bbe832c0
MC
11726
11727 if (netif_running(dev)) {
b02fd9e3 11728 tg3_phy_stop(tp);
a71116d1 11729 tg3_netif_stop(tp);
bbe832c0
MC
11730 irq_sync = 1;
11731 }
a71116d1 11732
bbe832c0 11733 tg3_full_lock(tp, irq_sync);
a71116d1
MC
11734
11735 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
ec41c7df 11736 err = tg3_nvram_lock(tp);
a71116d1 11737 tg3_halt_cpu(tp, RX_CPU_BASE);
63c3a66f 11738 if (!tg3_flag(tp, 5705_PLUS))
a71116d1 11739 tg3_halt_cpu(tp, TX_CPU_BASE);
ec41c7df
MC
11740 if (!err)
11741 tg3_nvram_unlock(tp);
a71116d1 11742
f07e9af3 11743 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
d9ab5ad1
MC
11744 tg3_phy_reset(tp);
11745
a71116d1
MC
11746 if (tg3_test_registers(tp) != 0) {
11747 etest->flags |= ETH_TEST_FL_FAILED;
11748 data[2] = 1;
11749 }
28a45957 11750
7942e1db
MC
11751 if (tg3_test_memory(tp) != 0) {
11752 etest->flags |= ETH_TEST_FL_FAILED;
11753 data[3] = 1;
11754 }
28a45957 11755
941ec90f
MC
11756 if (doextlpbk)
11757 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
11758
11759 if (tg3_test_loopback(tp, &data[4], doextlpbk))
c76949a6 11760 etest->flags |= ETH_TEST_FL_FAILED;
a71116d1 11761
f47c11ee
DM
11762 tg3_full_unlock(tp);
11763
d4bc3927
MC
11764 if (tg3_test_interrupt(tp) != 0) {
11765 etest->flags |= ETH_TEST_FL_FAILED;
941ec90f 11766 data[7] = 1;
d4bc3927 11767 }
f47c11ee
DM
11768
11769 tg3_full_lock(tp, 0);
d4bc3927 11770
a71116d1
MC
11771 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11772 if (netif_running(dev)) {
63c3a66f 11773 tg3_flag_set(tp, INIT_COMPLETE);
b02fd9e3
MC
11774 err2 = tg3_restart_hw(tp, 1);
11775 if (!err2)
b9ec6c1b 11776 tg3_netif_start(tp);
a71116d1 11777 }
f47c11ee
DM
11778
11779 tg3_full_unlock(tp);
b02fd9e3
MC
11780
11781 if (irq_sync && !err2)
11782 tg3_phy_start(tp);
a71116d1 11783 }
80096068 11784 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
c866b7ea 11785 tg3_power_down(tp);
bc1c7567 11786
4cafd3f5
MC
11787}
11788
1da177e4
LT
11789static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
11790{
11791 struct mii_ioctl_data *data = if_mii(ifr);
11792 struct tg3 *tp = netdev_priv(dev);
11793 int err;
11794
63c3a66f 11795 if (tg3_flag(tp, USE_PHYLIB)) {
3f0e3ad7 11796 struct phy_device *phydev;
f07e9af3 11797 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
b02fd9e3 11798 return -EAGAIN;
3f0e3ad7 11799 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
28b04113 11800 return phy_mii_ioctl(phydev, ifr, cmd);
b02fd9e3
MC
11801 }
11802
33f401ae 11803 switch (cmd) {
1da177e4 11804 case SIOCGMIIPHY:
882e9793 11805 data->phy_id = tp->phy_addr;
1da177e4
LT
11806
11807 /* fallthru */
11808 case SIOCGMIIREG: {
11809 u32 mii_regval;
11810
f07e9af3 11811 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
1da177e4
LT
11812 break; /* We have no PHY */
11813
34eea5ac 11814 if (!netif_running(dev))
bc1c7567
MC
11815 return -EAGAIN;
11816
f47c11ee 11817 spin_lock_bh(&tp->lock);
1da177e4 11818 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
f47c11ee 11819 spin_unlock_bh(&tp->lock);
1da177e4
LT
11820
11821 data->val_out = mii_regval;
11822
11823 return err;
11824 }
11825
11826 case SIOCSMIIREG:
f07e9af3 11827 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
1da177e4
LT
11828 break; /* We have no PHY */
11829
34eea5ac 11830 if (!netif_running(dev))
bc1c7567
MC
11831 return -EAGAIN;
11832
f47c11ee 11833 spin_lock_bh(&tp->lock);
1da177e4 11834 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
f47c11ee 11835 spin_unlock_bh(&tp->lock);
1da177e4
LT
11836
11837 return err;
11838
11839 default:
11840 /* do nothing */
11841 break;
11842 }
11843 return -EOPNOTSUPP;
11844}
11845
15f9850d
DM
11846static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
11847{
11848 struct tg3 *tp = netdev_priv(dev);
11849
11850 memcpy(ec, &tp->coal, sizeof(*ec));
11851 return 0;
11852}
11853
d244c892
MC
11854static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
11855{
11856 struct tg3 *tp = netdev_priv(dev);
11857 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
11858 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
11859
63c3a66f 11860 if (!tg3_flag(tp, 5705_PLUS)) {
d244c892
MC
11861 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
11862 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
11863 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
11864 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
11865 }
11866
11867 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
11868 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
11869 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
11870 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
11871 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
11872 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
11873 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
11874 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
11875 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
11876 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
11877 return -EINVAL;
11878
11879 /* No rx interrupts will be generated if both are zero */
11880 if ((ec->rx_coalesce_usecs == 0) &&
11881 (ec->rx_max_coalesced_frames == 0))
11882 return -EINVAL;
11883
11884 /* No tx interrupts will be generated if both are zero */
11885 if ((ec->tx_coalesce_usecs == 0) &&
11886 (ec->tx_max_coalesced_frames == 0))
11887 return -EINVAL;
11888
11889 /* Only copy relevant parameters, ignore all others. */
11890 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
11891 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
11892 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
11893 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
11894 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
11895 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
11896 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
11897 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
11898 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
11899
11900 if (netif_running(dev)) {
11901 tg3_full_lock(tp, 0);
11902 __tg3_set_coalesce(tp, &tp->coal);
11903 tg3_full_unlock(tp);
11904 }
11905 return 0;
11906}
11907
7282d491 11908static const struct ethtool_ops tg3_ethtool_ops = {
1da177e4
LT
11909 .get_settings = tg3_get_settings,
11910 .set_settings = tg3_set_settings,
11911 .get_drvinfo = tg3_get_drvinfo,
11912 .get_regs_len = tg3_get_regs_len,
11913 .get_regs = tg3_get_regs,
11914 .get_wol = tg3_get_wol,
11915 .set_wol = tg3_set_wol,
11916 .get_msglevel = tg3_get_msglevel,
11917 .set_msglevel = tg3_set_msglevel,
11918 .nway_reset = tg3_nway_reset,
11919 .get_link = ethtool_op_get_link,
11920 .get_eeprom_len = tg3_get_eeprom_len,
11921 .get_eeprom = tg3_get_eeprom,
11922 .set_eeprom = tg3_set_eeprom,
11923 .get_ringparam = tg3_get_ringparam,
11924 .set_ringparam = tg3_set_ringparam,
11925 .get_pauseparam = tg3_get_pauseparam,
11926 .set_pauseparam = tg3_set_pauseparam,
4cafd3f5 11927 .self_test = tg3_self_test,
1da177e4 11928 .get_strings = tg3_get_strings,
81b8709c 11929 .set_phys_id = tg3_set_phys_id,
1da177e4 11930 .get_ethtool_stats = tg3_get_ethtool_stats,
15f9850d 11931 .get_coalesce = tg3_get_coalesce,
d244c892 11932 .set_coalesce = tg3_set_coalesce,
b9f2c044 11933 .get_sset_count = tg3_get_sset_count,
1da177e4
LT
11934};
11935
11936static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
11937{
1b27777a 11938 u32 cursize, val, magic;
1da177e4
LT
11939
11940 tp->nvram_size = EEPROM_CHIP_SIZE;
11941
e4f34110 11942 if (tg3_nvram_read(tp, 0, &magic) != 0)
1da177e4
LT
11943 return;
11944
b16250e3
MC
11945 if ((magic != TG3_EEPROM_MAGIC) &&
11946 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
11947 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
1da177e4
LT
11948 return;
11949
11950 /*
11951 * Size the chip by reading offsets at increasing powers of two.
11952 * When we encounter our validation signature, we know the addressing
11953 * has wrapped around, and thus have our chip size.
11954 */
1b27777a 11955 cursize = 0x10;
1da177e4
LT
11956
11957 while (cursize < tp->nvram_size) {
e4f34110 11958 if (tg3_nvram_read(tp, cursize, &val) != 0)
1da177e4
LT
11959 return;
11960
1820180b 11961 if (val == magic)
1da177e4
LT
11962 break;
11963
11964 cursize <<= 1;
11965 }
11966
11967 tp->nvram_size = cursize;
11968}
6aa20a22 11969
1da177e4
LT
11970static void __devinit tg3_get_nvram_size(struct tg3 *tp)
11971{
11972 u32 val;
11973
63c3a66f 11974 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
1b27777a
MC
11975 return;
11976
11977 /* Selfboot format */
1820180b 11978 if (val != TG3_EEPROM_MAGIC) {
1b27777a
MC
11979 tg3_get_eeprom_size(tp);
11980 return;
11981 }
11982
6d348f2c 11983 if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
1da177e4 11984 if (val != 0) {
6d348f2c
MC
11985 /* This is confusing. We want to operate on the
11986 * 16-bit value at offset 0xf2. The tg3_nvram_read()
11987 * call will read from NVRAM and byteswap the data
11988 * according to the byteswapping settings for all
11989 * other register accesses. This ensures the data we
11990 * want will always reside in the lower 16-bits.
11991 * However, the data in NVRAM is in LE format, which
11992 * means the data from the NVRAM read will always be
11993 * opposite the endianness of the CPU. The 16-bit
11994 * byteswap then brings the data to CPU endianness.
11995 */
11996 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
1da177e4
LT
11997 return;
11998 }
11999 }
fd1122a2 12000 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
1da177e4
LT
12001}
12002
12003static void __devinit tg3_get_nvram_info(struct tg3 *tp)
12004{
12005 u32 nvcfg1;
12006
12007 nvcfg1 = tr32(NVRAM_CFG1);
12008 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
63c3a66f 12009 tg3_flag_set(tp, FLASH);
8590a603 12010 } else {
1da177e4
LT
12011 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12012 tw32(NVRAM_CFG1, nvcfg1);
12013 }
12014
6ff6f81d 12015 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
63c3a66f 12016 tg3_flag(tp, 5780_CLASS)) {
1da177e4 12017 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
8590a603
MC
12018 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
12019 tp->nvram_jedecnum = JEDEC_ATMEL;
12020 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
63c3a66f 12021 tg3_flag_set(tp, NVRAM_BUFFERED);
8590a603
MC
12022 break;
12023 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
12024 tp->nvram_jedecnum = JEDEC_ATMEL;
12025 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
12026 break;
12027 case FLASH_VENDOR_ATMEL_EEPROM:
12028 tp->nvram_jedecnum = JEDEC_ATMEL;
12029 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
63c3a66f 12030 tg3_flag_set(tp, NVRAM_BUFFERED);
8590a603
MC
12031 break;
12032 case FLASH_VENDOR_ST:
12033 tp->nvram_jedecnum = JEDEC_ST;
12034 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
63c3a66f 12035 tg3_flag_set(tp, NVRAM_BUFFERED);
8590a603
MC
12036 break;
12037 case FLASH_VENDOR_SAIFUN:
12038 tp->nvram_jedecnum = JEDEC_SAIFUN;
12039 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
12040 break;
12041 case FLASH_VENDOR_SST_SMALL:
12042 case FLASH_VENDOR_SST_LARGE:
12043 tp->nvram_jedecnum = JEDEC_SST;
12044 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
12045 break;
1da177e4 12046 }
8590a603 12047 } else {
1da177e4
LT
12048 tp->nvram_jedecnum = JEDEC_ATMEL;
12049 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
63c3a66f 12050 tg3_flag_set(tp, NVRAM_BUFFERED);
1da177e4
LT
12051 }
12052}
12053
a1b950d5
MC
12054static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
12055{
12056 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
12057 case FLASH_5752PAGE_SIZE_256:
12058 tp->nvram_pagesize = 256;
12059 break;
12060 case FLASH_5752PAGE_SIZE_512:
12061 tp->nvram_pagesize = 512;
12062 break;
12063 case FLASH_5752PAGE_SIZE_1K:
12064 tp->nvram_pagesize = 1024;
12065 break;
12066 case FLASH_5752PAGE_SIZE_2K:
12067 tp->nvram_pagesize = 2048;
12068 break;
12069 case FLASH_5752PAGE_SIZE_4K:
12070 tp->nvram_pagesize = 4096;
12071 break;
12072 case FLASH_5752PAGE_SIZE_264:
12073 tp->nvram_pagesize = 264;
12074 break;
12075 case FLASH_5752PAGE_SIZE_528:
12076 tp->nvram_pagesize = 528;
12077 break;
12078 }
12079}
12080
361b4ac2
MC
12081static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
12082{
12083 u32 nvcfg1;
12084
12085 nvcfg1 = tr32(NVRAM_CFG1);
12086
e6af301b
MC
12087 /* NVRAM protection for TPM */
12088 if (nvcfg1 & (1 << 27))
63c3a66f 12089 tg3_flag_set(tp, PROTECTED_NVRAM);
e6af301b 12090
361b4ac2 12091 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
8590a603
MC
12092 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
12093 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
12094 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f 12095 tg3_flag_set(tp, NVRAM_BUFFERED);
8590a603
MC
12096 break;
12097 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12098 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12099 tg3_flag_set(tp, NVRAM_BUFFERED);
12100 tg3_flag_set(tp, FLASH);
8590a603
MC
12101 break;
12102 case FLASH_5752VENDOR_ST_M45PE10:
12103 case FLASH_5752VENDOR_ST_M45PE20:
12104 case FLASH_5752VENDOR_ST_M45PE40:
12105 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12106 tg3_flag_set(tp, NVRAM_BUFFERED);
12107 tg3_flag_set(tp, FLASH);
8590a603 12108 break;
361b4ac2
MC
12109 }
12110
63c3a66f 12111 if (tg3_flag(tp, FLASH)) {
a1b950d5 12112 tg3_nvram_get_pagesize(tp, nvcfg1);
8590a603 12113 } else {
361b4ac2
MC
12114 /* For eeprom, set pagesize to maximum eeprom size */
12115 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12116
12117 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12118 tw32(NVRAM_CFG1, nvcfg1);
12119 }
12120}
12121
d3c7b886
MC
12122static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
12123{
989a9d23 12124 u32 nvcfg1, protect = 0;
d3c7b886
MC
12125
12126 nvcfg1 = tr32(NVRAM_CFG1);
12127
12128 /* NVRAM protection for TPM */
989a9d23 12129 if (nvcfg1 & (1 << 27)) {
63c3a66f 12130 tg3_flag_set(tp, PROTECTED_NVRAM);
989a9d23
MC
12131 protect = 1;
12132 }
d3c7b886 12133
989a9d23
MC
12134 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12135 switch (nvcfg1) {
8590a603
MC
12136 case FLASH_5755VENDOR_ATMEL_FLASH_1:
12137 case FLASH_5755VENDOR_ATMEL_FLASH_2:
12138 case FLASH_5755VENDOR_ATMEL_FLASH_3:
12139 case FLASH_5755VENDOR_ATMEL_FLASH_5:
12140 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12141 tg3_flag_set(tp, NVRAM_BUFFERED);
12142 tg3_flag_set(tp, FLASH);
8590a603
MC
12143 tp->nvram_pagesize = 264;
12144 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
12145 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
12146 tp->nvram_size = (protect ? 0x3e200 :
12147 TG3_NVRAM_SIZE_512KB);
12148 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
12149 tp->nvram_size = (protect ? 0x1f200 :
12150 TG3_NVRAM_SIZE_256KB);
12151 else
12152 tp->nvram_size = (protect ? 0x1f200 :
12153 TG3_NVRAM_SIZE_128KB);
12154 break;
12155 case FLASH_5752VENDOR_ST_M45PE10:
12156 case FLASH_5752VENDOR_ST_M45PE20:
12157 case FLASH_5752VENDOR_ST_M45PE40:
12158 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12159 tg3_flag_set(tp, NVRAM_BUFFERED);
12160 tg3_flag_set(tp, FLASH);
8590a603
MC
12161 tp->nvram_pagesize = 256;
12162 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
12163 tp->nvram_size = (protect ?
12164 TG3_NVRAM_SIZE_64KB :
12165 TG3_NVRAM_SIZE_128KB);
12166 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
12167 tp->nvram_size = (protect ?
12168 TG3_NVRAM_SIZE_64KB :
12169 TG3_NVRAM_SIZE_256KB);
12170 else
12171 tp->nvram_size = (protect ?
12172 TG3_NVRAM_SIZE_128KB :
12173 TG3_NVRAM_SIZE_512KB);
12174 break;
d3c7b886
MC
12175 }
12176}
12177
1b27777a
MC
12178static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
12179{
12180 u32 nvcfg1;
12181
12182 nvcfg1 = tr32(NVRAM_CFG1);
12183
12184 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
8590a603
MC
12185 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
12186 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
12187 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
12188 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
12189 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f 12190 tg3_flag_set(tp, NVRAM_BUFFERED);
8590a603 12191 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
1b27777a 12192
8590a603
MC
12193 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12194 tw32(NVRAM_CFG1, nvcfg1);
12195 break;
12196 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12197 case FLASH_5755VENDOR_ATMEL_FLASH_1:
12198 case FLASH_5755VENDOR_ATMEL_FLASH_2:
12199 case FLASH_5755VENDOR_ATMEL_FLASH_3:
12200 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12201 tg3_flag_set(tp, NVRAM_BUFFERED);
12202 tg3_flag_set(tp, FLASH);
8590a603
MC
12203 tp->nvram_pagesize = 264;
12204 break;
12205 case FLASH_5752VENDOR_ST_M45PE10:
12206 case FLASH_5752VENDOR_ST_M45PE20:
12207 case FLASH_5752VENDOR_ST_M45PE40:
12208 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12209 tg3_flag_set(tp, NVRAM_BUFFERED);
12210 tg3_flag_set(tp, FLASH);
8590a603
MC
12211 tp->nvram_pagesize = 256;
12212 break;
1b27777a
MC
12213 }
12214}
12215
6b91fa02
MC
12216static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
12217{
12218 u32 nvcfg1, protect = 0;
12219
12220 nvcfg1 = tr32(NVRAM_CFG1);
12221
12222 /* NVRAM protection for TPM */
12223 if (nvcfg1 & (1 << 27)) {
63c3a66f 12224 tg3_flag_set(tp, PROTECTED_NVRAM);
6b91fa02
MC
12225 protect = 1;
12226 }
12227
12228 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12229 switch (nvcfg1) {
8590a603
MC
12230 case FLASH_5761VENDOR_ATMEL_ADB021D:
12231 case FLASH_5761VENDOR_ATMEL_ADB041D:
12232 case FLASH_5761VENDOR_ATMEL_ADB081D:
12233 case FLASH_5761VENDOR_ATMEL_ADB161D:
12234 case FLASH_5761VENDOR_ATMEL_MDB021D:
12235 case FLASH_5761VENDOR_ATMEL_MDB041D:
12236 case FLASH_5761VENDOR_ATMEL_MDB081D:
12237 case FLASH_5761VENDOR_ATMEL_MDB161D:
12238 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12239 tg3_flag_set(tp, NVRAM_BUFFERED);
12240 tg3_flag_set(tp, FLASH);
12241 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
8590a603
MC
12242 tp->nvram_pagesize = 256;
12243 break;
12244 case FLASH_5761VENDOR_ST_A_M45PE20:
12245 case FLASH_5761VENDOR_ST_A_M45PE40:
12246 case FLASH_5761VENDOR_ST_A_M45PE80:
12247 case FLASH_5761VENDOR_ST_A_M45PE16:
12248 case FLASH_5761VENDOR_ST_M_M45PE20:
12249 case FLASH_5761VENDOR_ST_M_M45PE40:
12250 case FLASH_5761VENDOR_ST_M_M45PE80:
12251 case FLASH_5761VENDOR_ST_M_M45PE16:
12252 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12253 tg3_flag_set(tp, NVRAM_BUFFERED);
12254 tg3_flag_set(tp, FLASH);
8590a603
MC
12255 tp->nvram_pagesize = 256;
12256 break;
6b91fa02
MC
12257 }
12258
12259 if (protect) {
12260 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
12261 } else {
12262 switch (nvcfg1) {
8590a603
MC
12263 case FLASH_5761VENDOR_ATMEL_ADB161D:
12264 case FLASH_5761VENDOR_ATMEL_MDB161D:
12265 case FLASH_5761VENDOR_ST_A_M45PE16:
12266 case FLASH_5761VENDOR_ST_M_M45PE16:
12267 tp->nvram_size = TG3_NVRAM_SIZE_2MB;
12268 break;
12269 case FLASH_5761VENDOR_ATMEL_ADB081D:
12270 case FLASH_5761VENDOR_ATMEL_MDB081D:
12271 case FLASH_5761VENDOR_ST_A_M45PE80:
12272 case FLASH_5761VENDOR_ST_M_M45PE80:
12273 tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12274 break;
12275 case FLASH_5761VENDOR_ATMEL_ADB041D:
12276 case FLASH_5761VENDOR_ATMEL_MDB041D:
12277 case FLASH_5761VENDOR_ST_A_M45PE40:
12278 case FLASH_5761VENDOR_ST_M_M45PE40:
12279 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12280 break;
12281 case FLASH_5761VENDOR_ATMEL_ADB021D:
12282 case FLASH_5761VENDOR_ATMEL_MDB021D:
12283 case FLASH_5761VENDOR_ST_A_M45PE20:
12284 case FLASH_5761VENDOR_ST_M_M45PE20:
12285 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12286 break;
6b91fa02
MC
12287 }
12288 }
12289}
12290
b5d3772c
MC
12291static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
12292{
12293 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f 12294 tg3_flag_set(tp, NVRAM_BUFFERED);
b5d3772c
MC
12295 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12296}
12297
321d32a0
MC
12298static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp)
12299{
12300 u32 nvcfg1;
12301
12302 nvcfg1 = tr32(NVRAM_CFG1);
12303
12304 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12305 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
12306 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
12307 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f 12308 tg3_flag_set(tp, NVRAM_BUFFERED);
321d32a0
MC
12309 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12310
12311 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12312 tw32(NVRAM_CFG1, nvcfg1);
12313 return;
12314 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12315 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
12316 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
12317 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
12318 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
12319 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
12320 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
12321 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12322 tg3_flag_set(tp, NVRAM_BUFFERED);
12323 tg3_flag_set(tp, FLASH);
321d32a0
MC
12324
12325 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12326 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12327 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
12328 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
12329 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12330 break;
12331 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
12332 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
12333 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12334 break;
12335 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
12336 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
12337 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12338 break;
12339 }
12340 break;
12341 case FLASH_5752VENDOR_ST_M45PE10:
12342 case FLASH_5752VENDOR_ST_M45PE20:
12343 case FLASH_5752VENDOR_ST_M45PE40:
12344 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12345 tg3_flag_set(tp, NVRAM_BUFFERED);
12346 tg3_flag_set(tp, FLASH);
321d32a0
MC
12347
12348 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12349 case FLASH_5752VENDOR_ST_M45PE10:
12350 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12351 break;
12352 case FLASH_5752VENDOR_ST_M45PE20:
12353 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12354 break;
12355 case FLASH_5752VENDOR_ST_M45PE40:
12356 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12357 break;
12358 }
12359 break;
12360 default:
63c3a66f 12361 tg3_flag_set(tp, NO_NVRAM);
321d32a0
MC
12362 return;
12363 }
12364
a1b950d5
MC
12365 tg3_nvram_get_pagesize(tp, nvcfg1);
12366 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
63c3a66f 12367 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
a1b950d5
MC
12368}
12369
12370
12371static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp)
12372{
12373 u32 nvcfg1;
12374
12375 nvcfg1 = tr32(NVRAM_CFG1);
12376
12377 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12378 case FLASH_5717VENDOR_ATMEL_EEPROM:
12379 case FLASH_5717VENDOR_MICRO_EEPROM:
12380 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f 12381 tg3_flag_set(tp, NVRAM_BUFFERED);
a1b950d5
MC
12382 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12383
12384 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12385 tw32(NVRAM_CFG1, nvcfg1);
12386 return;
12387 case FLASH_5717VENDOR_ATMEL_MDB011D:
12388 case FLASH_5717VENDOR_ATMEL_ADB011B:
12389 case FLASH_5717VENDOR_ATMEL_ADB011D:
12390 case FLASH_5717VENDOR_ATMEL_MDB021D:
12391 case FLASH_5717VENDOR_ATMEL_ADB021B:
12392 case FLASH_5717VENDOR_ATMEL_ADB021D:
12393 case FLASH_5717VENDOR_ATMEL_45USPT:
12394 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12395 tg3_flag_set(tp, NVRAM_BUFFERED);
12396 tg3_flag_set(tp, FLASH);
a1b950d5
MC
12397
12398 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12399 case FLASH_5717VENDOR_ATMEL_MDB021D:
66ee33bf
MC
12400 /* Detect size with tg3_nvram_get_size() */
12401 break;
a1b950d5
MC
12402 case FLASH_5717VENDOR_ATMEL_ADB021B:
12403 case FLASH_5717VENDOR_ATMEL_ADB021D:
12404 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12405 break;
12406 default:
12407 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12408 break;
12409 }
321d32a0 12410 break;
a1b950d5
MC
12411 case FLASH_5717VENDOR_ST_M_M25PE10:
12412 case FLASH_5717VENDOR_ST_A_M25PE10:
12413 case FLASH_5717VENDOR_ST_M_M45PE10:
12414 case FLASH_5717VENDOR_ST_A_M45PE10:
12415 case FLASH_5717VENDOR_ST_M_M25PE20:
12416 case FLASH_5717VENDOR_ST_A_M25PE20:
12417 case FLASH_5717VENDOR_ST_M_M45PE20:
12418 case FLASH_5717VENDOR_ST_A_M45PE20:
12419 case FLASH_5717VENDOR_ST_25USPT:
12420 case FLASH_5717VENDOR_ST_45USPT:
12421 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12422 tg3_flag_set(tp, NVRAM_BUFFERED);
12423 tg3_flag_set(tp, FLASH);
a1b950d5
MC
12424
12425 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12426 case FLASH_5717VENDOR_ST_M_M25PE20:
a1b950d5 12427 case FLASH_5717VENDOR_ST_M_M45PE20:
66ee33bf
MC
12428 /* Detect size with tg3_nvram_get_size() */
12429 break;
12430 case FLASH_5717VENDOR_ST_A_M25PE20:
a1b950d5
MC
12431 case FLASH_5717VENDOR_ST_A_M45PE20:
12432 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12433 break;
12434 default:
12435 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12436 break;
12437 }
321d32a0 12438 break;
a1b950d5 12439 default:
63c3a66f 12440 tg3_flag_set(tp, NO_NVRAM);
a1b950d5 12441 return;
321d32a0 12442 }
a1b950d5
MC
12443
12444 tg3_nvram_get_pagesize(tp, nvcfg1);
12445 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
63c3a66f 12446 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
321d32a0
MC
12447}
12448
9b91b5f1
MC
12449static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp)
12450{
12451 u32 nvcfg1, nvmpinstrp;
12452
12453 nvcfg1 = tr32(NVRAM_CFG1);
12454 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
12455
12456 switch (nvmpinstrp) {
12457 case FLASH_5720_EEPROM_HD:
12458 case FLASH_5720_EEPROM_LD:
12459 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f 12460 tg3_flag_set(tp, NVRAM_BUFFERED);
9b91b5f1
MC
12461
12462 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12463 tw32(NVRAM_CFG1, nvcfg1);
12464 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
12465 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12466 else
12467 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
12468 return;
12469 case FLASH_5720VENDOR_M_ATMEL_DB011D:
12470 case FLASH_5720VENDOR_A_ATMEL_DB011B:
12471 case FLASH_5720VENDOR_A_ATMEL_DB011D:
12472 case FLASH_5720VENDOR_M_ATMEL_DB021D:
12473 case FLASH_5720VENDOR_A_ATMEL_DB021B:
12474 case FLASH_5720VENDOR_A_ATMEL_DB021D:
12475 case FLASH_5720VENDOR_M_ATMEL_DB041D:
12476 case FLASH_5720VENDOR_A_ATMEL_DB041B:
12477 case FLASH_5720VENDOR_A_ATMEL_DB041D:
12478 case FLASH_5720VENDOR_M_ATMEL_DB081D:
12479 case FLASH_5720VENDOR_A_ATMEL_DB081D:
12480 case FLASH_5720VENDOR_ATMEL_45USPT:
12481 tp->nvram_jedecnum = JEDEC_ATMEL;
63c3a66f
JP
12482 tg3_flag_set(tp, NVRAM_BUFFERED);
12483 tg3_flag_set(tp, FLASH);
9b91b5f1
MC
12484
12485 switch (nvmpinstrp) {
12486 case FLASH_5720VENDOR_M_ATMEL_DB021D:
12487 case FLASH_5720VENDOR_A_ATMEL_DB021B:
12488 case FLASH_5720VENDOR_A_ATMEL_DB021D:
12489 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12490 break;
12491 case FLASH_5720VENDOR_M_ATMEL_DB041D:
12492 case FLASH_5720VENDOR_A_ATMEL_DB041B:
12493 case FLASH_5720VENDOR_A_ATMEL_DB041D:
12494 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12495 break;
12496 case FLASH_5720VENDOR_M_ATMEL_DB081D:
12497 case FLASH_5720VENDOR_A_ATMEL_DB081D:
12498 tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12499 break;
12500 default:
12501 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12502 break;
12503 }
12504 break;
12505 case FLASH_5720VENDOR_M_ST_M25PE10:
12506 case FLASH_5720VENDOR_M_ST_M45PE10:
12507 case FLASH_5720VENDOR_A_ST_M25PE10:
12508 case FLASH_5720VENDOR_A_ST_M45PE10:
12509 case FLASH_5720VENDOR_M_ST_M25PE20:
12510 case FLASH_5720VENDOR_M_ST_M45PE20:
12511 case FLASH_5720VENDOR_A_ST_M25PE20:
12512 case FLASH_5720VENDOR_A_ST_M45PE20:
12513 case FLASH_5720VENDOR_M_ST_M25PE40:
12514 case FLASH_5720VENDOR_M_ST_M45PE40:
12515 case FLASH_5720VENDOR_A_ST_M25PE40:
12516 case FLASH_5720VENDOR_A_ST_M45PE40:
12517 case FLASH_5720VENDOR_M_ST_M25PE80:
12518 case FLASH_5720VENDOR_M_ST_M45PE80:
12519 case FLASH_5720VENDOR_A_ST_M25PE80:
12520 case FLASH_5720VENDOR_A_ST_M45PE80:
12521 case FLASH_5720VENDOR_ST_25USPT:
12522 case FLASH_5720VENDOR_ST_45USPT:
12523 tp->nvram_jedecnum = JEDEC_ST;
63c3a66f
JP
12524 tg3_flag_set(tp, NVRAM_BUFFERED);
12525 tg3_flag_set(tp, FLASH);
9b91b5f1
MC
12526
12527 switch (nvmpinstrp) {
12528 case FLASH_5720VENDOR_M_ST_M25PE20:
12529 case FLASH_5720VENDOR_M_ST_M45PE20:
12530 case FLASH_5720VENDOR_A_ST_M25PE20:
12531 case FLASH_5720VENDOR_A_ST_M45PE20:
12532 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12533 break;
12534 case FLASH_5720VENDOR_M_ST_M25PE40:
12535 case FLASH_5720VENDOR_M_ST_M45PE40:
12536 case FLASH_5720VENDOR_A_ST_M25PE40:
12537 case FLASH_5720VENDOR_A_ST_M45PE40:
12538 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12539 break;
12540 case FLASH_5720VENDOR_M_ST_M25PE80:
12541 case FLASH_5720VENDOR_M_ST_M45PE80:
12542 case FLASH_5720VENDOR_A_ST_M25PE80:
12543 case FLASH_5720VENDOR_A_ST_M45PE80:
12544 tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12545 break;
12546 default:
12547 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12548 break;
12549 }
12550 break;
12551 default:
63c3a66f 12552 tg3_flag_set(tp, NO_NVRAM);
9b91b5f1
MC
12553 return;
12554 }
12555
12556 tg3_nvram_get_pagesize(tp, nvcfg1);
12557 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
63c3a66f 12558 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
9b91b5f1
MC
12559}
12560
1da177e4
LT
12561/* Chips other than 5700/5701 use the NVRAM for fetching info. */
12562static void __devinit tg3_nvram_init(struct tg3 *tp)
12563{
1da177e4
LT
12564 tw32_f(GRC_EEPROM_ADDR,
12565 (EEPROM_ADDR_FSM_RESET |
12566 (EEPROM_DEFAULT_CLOCK_PERIOD <<
12567 EEPROM_ADDR_CLKPERD_SHIFT)));
12568
9d57f01c 12569 msleep(1);
1da177e4
LT
12570
12571 /* Enable seeprom accesses. */
12572 tw32_f(GRC_LOCAL_CTRL,
12573 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
12574 udelay(100);
12575
12576 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
12577 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
63c3a66f 12578 tg3_flag_set(tp, NVRAM);
1da177e4 12579
ec41c7df 12580 if (tg3_nvram_lock(tp)) {
5129c3a3
MC
12581 netdev_warn(tp->dev,
12582 "Cannot get nvram lock, %s failed\n",
05dbe005 12583 __func__);
ec41c7df
MC
12584 return;
12585 }
e6af301b 12586 tg3_enable_nvram_access(tp);
1da177e4 12587
989a9d23
MC
12588 tp->nvram_size = 0;
12589
361b4ac2
MC
12590 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
12591 tg3_get_5752_nvram_info(tp);
d3c7b886
MC
12592 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
12593 tg3_get_5755_nvram_info(tp);
d30cdd28 12594 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
57e6983c
MC
12595 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
12596 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1b27777a 12597 tg3_get_5787_nvram_info(tp);
6b91fa02
MC
12598 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
12599 tg3_get_5761_nvram_info(tp);
b5d3772c
MC
12600 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
12601 tg3_get_5906_nvram_info(tp);
b703df6f
MC
12602 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
12603 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
321d32a0 12604 tg3_get_57780_nvram_info(tp);
9b91b5f1
MC
12605 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
12606 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
a1b950d5 12607 tg3_get_5717_nvram_info(tp);
9b91b5f1
MC
12608 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
12609 tg3_get_5720_nvram_info(tp);
361b4ac2
MC
12610 else
12611 tg3_get_nvram_info(tp);
12612
989a9d23
MC
12613 if (tp->nvram_size == 0)
12614 tg3_get_nvram_size(tp);
1da177e4 12615
e6af301b 12616 tg3_disable_nvram_access(tp);
381291b7 12617 tg3_nvram_unlock(tp);
1da177e4
LT
12618
12619 } else {
63c3a66f
JP
12620 tg3_flag_clear(tp, NVRAM);
12621 tg3_flag_clear(tp, NVRAM_BUFFERED);
1da177e4
LT
12622
12623 tg3_get_eeprom_size(tp);
12624 }
12625}
12626
1da177e4
LT
12627static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
12628 u32 offset, u32 len, u8 *buf)
12629{
12630 int i, j, rc = 0;
12631 u32 val;
12632
12633 for (i = 0; i < len; i += 4) {
b9fc7dc5 12634 u32 addr;
a9dc529d 12635 __be32 data;
1da177e4
LT
12636
12637 addr = offset + i;
12638
12639 memcpy(&data, buf + i, 4);
12640
62cedd11
MC
12641 /*
12642 * The SEEPROM interface expects the data to always be opposite
12643 * the native endian format. We accomplish this by reversing
12644 * all the operations that would have been performed on the
12645 * data from a call to tg3_nvram_read_be32().
12646 */
12647 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
1da177e4
LT
12648
12649 val = tr32(GRC_EEPROM_ADDR);
12650 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
12651
12652 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
12653 EEPROM_ADDR_READ);
12654 tw32(GRC_EEPROM_ADDR, val |
12655 (0 << EEPROM_ADDR_DEVID_SHIFT) |
12656 (addr & EEPROM_ADDR_ADDR_MASK) |
12657 EEPROM_ADDR_START |
12658 EEPROM_ADDR_WRITE);
6aa20a22 12659
9d57f01c 12660 for (j = 0; j < 1000; j++) {
1da177e4
LT
12661 val = tr32(GRC_EEPROM_ADDR);
12662
12663 if (val & EEPROM_ADDR_COMPLETE)
12664 break;
9d57f01c 12665 msleep(1);
1da177e4
LT
12666 }
12667 if (!(val & EEPROM_ADDR_COMPLETE)) {
12668 rc = -EBUSY;
12669 break;
12670 }
12671 }
12672
12673 return rc;
12674}
12675
12676/* offset and length are dword aligned */
12677static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
12678 u8 *buf)
12679{
12680 int ret = 0;
12681 u32 pagesize = tp->nvram_pagesize;
12682 u32 pagemask = pagesize - 1;
12683 u32 nvram_cmd;
12684 u8 *tmp;
12685
12686 tmp = kmalloc(pagesize, GFP_KERNEL);
12687 if (tmp == NULL)
12688 return -ENOMEM;
12689
12690 while (len) {
12691 int j;
e6af301b 12692 u32 phy_addr, page_off, size;
1da177e4
LT
12693
12694 phy_addr = offset & ~pagemask;
6aa20a22 12695
1da177e4 12696 for (j = 0; j < pagesize; j += 4) {
a9dc529d
MC
12697 ret = tg3_nvram_read_be32(tp, phy_addr + j,
12698 (__be32 *) (tmp + j));
12699 if (ret)
1da177e4
LT
12700 break;
12701 }
12702 if (ret)
12703 break;
12704
c6cdf436 12705 page_off = offset & pagemask;
1da177e4
LT
12706 size = pagesize;
12707 if (len < size)
12708 size = len;
12709
12710 len -= size;
12711
12712 memcpy(tmp + page_off, buf, size);
12713
12714 offset = offset + (pagesize - page_off);
12715
e6af301b 12716 tg3_enable_nvram_access(tp);
1da177e4
LT
12717
12718 /*
12719 * Before we can erase the flash page, we need
12720 * to issue a special "write enable" command.
12721 */
12722 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
12723
12724 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
12725 break;
12726
12727 /* Erase the target page */
12728 tw32(NVRAM_ADDR, phy_addr);
12729
12730 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
12731 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
12732
c6cdf436 12733 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
1da177e4
LT
12734 break;
12735
12736 /* Issue another write enable to start the write. */
12737 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
12738
12739 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
12740 break;
12741
12742 for (j = 0; j < pagesize; j += 4) {
b9fc7dc5 12743 __be32 data;
1da177e4 12744
b9fc7dc5 12745 data = *((__be32 *) (tmp + j));
a9dc529d 12746
b9fc7dc5 12747 tw32(NVRAM_WRDATA, be32_to_cpu(data));
1da177e4
LT
12748
12749 tw32(NVRAM_ADDR, phy_addr + j);
12750
12751 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
12752 NVRAM_CMD_WR;
12753
12754 if (j == 0)
12755 nvram_cmd |= NVRAM_CMD_FIRST;
12756 else if (j == (pagesize - 4))
12757 nvram_cmd |= NVRAM_CMD_LAST;
12758
12759 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
12760 break;
12761 }
12762 if (ret)
12763 break;
12764 }
12765
12766 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
12767 tg3_nvram_exec_cmd(tp, nvram_cmd);
12768
12769 kfree(tmp);
12770
12771 return ret;
12772}
12773
12774/* offset and length are dword aligned */
12775static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
12776 u8 *buf)
12777{
12778 int i, ret = 0;
12779
12780 for (i = 0; i < len; i += 4, offset += 4) {
b9fc7dc5
AV
12781 u32 page_off, phy_addr, nvram_cmd;
12782 __be32 data;
1da177e4
LT
12783
12784 memcpy(&data, buf + i, 4);
b9fc7dc5 12785 tw32(NVRAM_WRDATA, be32_to_cpu(data));
1da177e4 12786
c6cdf436 12787 page_off = offset % tp->nvram_pagesize;
1da177e4 12788
1820180b 12789 phy_addr = tg3_nvram_phys_addr(tp, offset);
1da177e4
LT
12790
12791 tw32(NVRAM_ADDR, phy_addr);
12792
12793 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
12794
c6cdf436 12795 if (page_off == 0 || i == 0)
1da177e4 12796 nvram_cmd |= NVRAM_CMD_FIRST;
f6d9a256 12797 if (page_off == (tp->nvram_pagesize - 4))
1da177e4
LT
12798 nvram_cmd |= NVRAM_CMD_LAST;
12799
12800 if (i == (len - 4))
12801 nvram_cmd |= NVRAM_CMD_LAST;
12802
321d32a0 12803 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
63c3a66f 12804 !tg3_flag(tp, 5755_PLUS) &&
4c987487
MC
12805 (tp->nvram_jedecnum == JEDEC_ST) &&
12806 (nvram_cmd & NVRAM_CMD_FIRST)) {
1da177e4
LT
12807
12808 if ((ret = tg3_nvram_exec_cmd(tp,
12809 NVRAM_CMD_WREN | NVRAM_CMD_GO |
12810 NVRAM_CMD_DONE)))
12811
12812 break;
12813 }
63c3a66f 12814 if (!tg3_flag(tp, FLASH)) {
1da177e4
LT
12815 /* We always do complete word writes to eeprom. */
12816 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
12817 }
12818
12819 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
12820 break;
12821 }
12822 return ret;
12823}
12824
12825/* offset and length are dword aligned */
12826static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
12827{
12828 int ret;
12829
63c3a66f 12830 if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
314fba34
MC
12831 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
12832 ~GRC_LCLCTRL_GPIO_OUTPUT1);
1da177e4
LT
12833 udelay(40);
12834 }
12835
63c3a66f 12836 if (!tg3_flag(tp, NVRAM)) {
1da177e4 12837 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
859a5887 12838 } else {
1da177e4
LT
12839 u32 grc_mode;
12840
ec41c7df
MC
12841 ret = tg3_nvram_lock(tp);
12842 if (ret)
12843 return ret;
1da177e4 12844
e6af301b 12845 tg3_enable_nvram_access(tp);
63c3a66f 12846 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
1da177e4 12847 tw32(NVRAM_WRITE1, 0x406);
1da177e4
LT
12848
12849 grc_mode = tr32(GRC_MODE);
12850 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
12851
63c3a66f 12852 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
1da177e4
LT
12853 ret = tg3_nvram_write_block_buffered(tp, offset, len,
12854 buf);
859a5887 12855 } else {
1da177e4
LT
12856 ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
12857 buf);
12858 }
12859
12860 grc_mode = tr32(GRC_MODE);
12861 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
12862
e6af301b 12863 tg3_disable_nvram_access(tp);
1da177e4
LT
12864 tg3_nvram_unlock(tp);
12865 }
12866
63c3a66f 12867 if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
314fba34 12868 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
1da177e4
LT
12869 udelay(40);
12870 }
12871
12872 return ret;
12873}
12874
12875struct subsys_tbl_ent {
12876 u16 subsys_vendor, subsys_devid;
12877 u32 phy_id;
12878};
12879
24daf2b0 12880static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = {
1da177e4 12881 /* Broadcom boards. */
24daf2b0 12882 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12883 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
24daf2b0 12884 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12885 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
24daf2b0 12886 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12887 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
24daf2b0
MC
12888 { TG3PCI_SUBVENDOR_ID_BROADCOM,
12889 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
12890 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12891 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
24daf2b0 12892 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12893 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
24daf2b0
MC
12894 { TG3PCI_SUBVENDOR_ID_BROADCOM,
12895 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
12896 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12897 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
24daf2b0 12898 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12899 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
24daf2b0 12900 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12901 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
24daf2b0 12902 { TG3PCI_SUBVENDOR_ID_BROADCOM,
79eb6904 12903 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
1da177e4
LT
12904
12905 /* 3com boards. */
24daf2b0 12906 { TG3PCI_SUBVENDOR_ID_3COM,
79eb6904 12907 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
24daf2b0 12908 { TG3PCI_SUBVENDOR_ID_3COM,
79eb6904 12909 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
24daf2b0
MC
12910 { TG3PCI_SUBVENDOR_ID_3COM,
12911 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
12912 { TG3PCI_SUBVENDOR_ID_3COM,
79eb6904 12913 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
24daf2b0 12914 { TG3PCI_SUBVENDOR_ID_3COM,
79eb6904 12915 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
1da177e4
LT
12916
12917 /* DELL boards. */
24daf2b0 12918 { TG3PCI_SUBVENDOR_ID_DELL,
79eb6904 12919 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
24daf2b0 12920 { TG3PCI_SUBVENDOR_ID_DELL,
79eb6904 12921 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
24daf2b0 12922 { TG3PCI_SUBVENDOR_ID_DELL,
79eb6904 12923 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
24daf2b0 12924 { TG3PCI_SUBVENDOR_ID_DELL,
79eb6904 12925 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
1da177e4
LT
12926
12927 /* Compaq boards. */
24daf2b0 12928 { TG3PCI_SUBVENDOR_ID_COMPAQ,
79eb6904 12929 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
24daf2b0 12930 { TG3PCI_SUBVENDOR_ID_COMPAQ,
79eb6904 12931 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
24daf2b0
MC
12932 { TG3PCI_SUBVENDOR_ID_COMPAQ,
12933 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
12934 { TG3PCI_SUBVENDOR_ID_COMPAQ,
79eb6904 12935 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
24daf2b0 12936 { TG3PCI_SUBVENDOR_ID_COMPAQ,
79eb6904 12937 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
1da177e4
LT
12938
12939 /* IBM boards. */
24daf2b0
MC
12940 { TG3PCI_SUBVENDOR_ID_IBM,
12941 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
1da177e4
LT
12942};
12943
24daf2b0 12944static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp)
1da177e4
LT
12945{
12946 int i;
12947
12948 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
12949 if ((subsys_id_to_phy_id[i].subsys_vendor ==
12950 tp->pdev->subsystem_vendor) &&
12951 (subsys_id_to_phy_id[i].subsys_devid ==
12952 tp->pdev->subsystem_device))
12953 return &subsys_id_to_phy_id[i];
12954 }
12955 return NULL;
12956}
12957
7d0c41ef 12958static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
1da177e4 12959{
1da177e4 12960 u32 val;
f49639e6 12961
79eb6904 12962 tp->phy_id = TG3_PHY_ID_INVALID;
7d0c41ef
MC
12963 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
12964
a85feb8c 12965 /* Assume an onboard device and WOL capable by default. */
63c3a66f
JP
12966 tg3_flag_set(tp, EEPROM_WRITE_PROT);
12967 tg3_flag_set(tp, WOL_CAP);
72b845e0 12968
b5d3772c 12969 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9d26e213 12970 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
63c3a66f
JP
12971 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
12972 tg3_flag_set(tp, IS_NIC);
9d26e213 12973 }
0527ba35
MC
12974 val = tr32(VCPU_CFGSHDW);
12975 if (val & VCPU_CFGSHDW_ASPM_DBNC)
63c3a66f 12976 tg3_flag_set(tp, ASPM_WORKAROUND);
0527ba35 12977 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
6fdbab9d 12978 (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
63c3a66f 12979 tg3_flag_set(tp, WOL_ENABLE);
6fdbab9d
RW
12980 device_set_wakeup_enable(&tp->pdev->dev, true);
12981 }
05ac4cb7 12982 goto done;
b5d3772c
MC
12983 }
12984
1da177e4
LT
12985 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
12986 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
12987 u32 nic_cfg, led_cfg;
a9daf367 12988 u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
7d0c41ef 12989 int eeprom_phy_serdes = 0;
1da177e4
LT
12990
12991 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
12992 tp->nic_sram_data_cfg = nic_cfg;
12993
12994 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
12995 ver >>= NIC_SRAM_DATA_VER_SHIFT;
6ff6f81d
MC
12996 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
12997 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
12998 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 &&
1da177e4
LT
12999 (ver > 0) && (ver < 0x100))
13000 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
13001
a9daf367
MC
13002 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13003 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
13004
1da177e4
LT
13005 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
13006 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
13007 eeprom_phy_serdes = 1;
13008
13009 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
13010 if (nic_phy_id != 0) {
13011 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
13012 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
13013
13014 eeprom_phy_id = (id1 >> 16) << 10;
13015 eeprom_phy_id |= (id2 & 0xfc00) << 16;
13016 eeprom_phy_id |= (id2 & 0x03ff) << 0;
13017 } else
13018 eeprom_phy_id = 0;
13019
7d0c41ef 13020 tp->phy_id = eeprom_phy_id;
747e8f8b 13021 if (eeprom_phy_serdes) {
63c3a66f 13022 if (!tg3_flag(tp, 5705_PLUS))
f07e9af3 13023 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
a50d0796 13024 else
f07e9af3 13025 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
747e8f8b 13026 }
7d0c41ef 13027
63c3a66f 13028 if (tg3_flag(tp, 5750_PLUS))
1da177e4
LT
13029 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
13030 SHASTA_EXT_LED_MODE_MASK);
cbf46853 13031 else
1da177e4
LT
13032 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
13033
13034 switch (led_cfg) {
13035 default:
13036 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
13037 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13038 break;
13039
13040 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
13041 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13042 break;
13043
13044 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
13045 tp->led_ctrl = LED_CTRL_MODE_MAC;
9ba27794
MC
13046
13047 /* Default to PHY_1_MODE if 0 (MAC_MODE) is
13048 * read on some older 5700/5701 bootcode.
13049 */
13050 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
13051 ASIC_REV_5700 ||
13052 GET_ASIC_REV(tp->pci_chip_rev_id) ==
13053 ASIC_REV_5701)
13054 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13055
1da177e4
LT
13056 break;
13057
13058 case SHASTA_EXT_LED_SHARED:
13059 tp->led_ctrl = LED_CTRL_MODE_SHARED;
13060 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
13061 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
13062 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13063 LED_CTRL_MODE_PHY_2);
13064 break;
13065
13066 case SHASTA_EXT_LED_MAC:
13067 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
13068 break;
13069
13070 case SHASTA_EXT_LED_COMBO:
13071 tp->led_ctrl = LED_CTRL_MODE_COMBO;
13072 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
13073 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13074 LED_CTRL_MODE_PHY_2);
13075 break;
13076
855e1111 13077 }
1da177e4
LT
13078
13079 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
13080 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
13081 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
13082 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13083
b2a5c19c
MC
13084 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
13085 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
5f60891b 13086
9d26e213 13087 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
63c3a66f 13088 tg3_flag_set(tp, EEPROM_WRITE_PROT);
9d26e213
MC
13089 if ((tp->pdev->subsystem_vendor ==
13090 PCI_VENDOR_ID_ARIMA) &&
13091 (tp->pdev->subsystem_device == 0x205a ||
13092 tp->pdev->subsystem_device == 0x2063))
63c3a66f 13093 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
9d26e213 13094 } else {
63c3a66f
JP
13095 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13096 tg3_flag_set(tp, IS_NIC);
9d26e213 13097 }
1da177e4
LT
13098
13099 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
63c3a66f
JP
13100 tg3_flag_set(tp, ENABLE_ASF);
13101 if (tg3_flag(tp, 5750_PLUS))
13102 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
1da177e4 13103 }
b2b98d4a
MC
13104
13105 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
63c3a66f
JP
13106 tg3_flag(tp, 5750_PLUS))
13107 tg3_flag_set(tp, ENABLE_APE);
b2b98d4a 13108
f07e9af3 13109 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
a85feb8c 13110 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
63c3a66f 13111 tg3_flag_clear(tp, WOL_CAP);
1da177e4 13112
63c3a66f 13113 if (tg3_flag(tp, WOL_CAP) &&
6fdbab9d 13114 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
63c3a66f 13115 tg3_flag_set(tp, WOL_ENABLE);
6fdbab9d
RW
13116 device_set_wakeup_enable(&tp->pdev->dev, true);
13117 }
0527ba35 13118
1da177e4 13119 if (cfg2 & (1 << 17))
f07e9af3 13120 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
1da177e4
LT
13121
13122 /* serdes signal pre-emphasis in register 0x590 set by */
13123 /* bootcode if bit 18 is set */
13124 if (cfg2 & (1 << 18))
f07e9af3 13125 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
8ed5d97e 13126
63c3a66f
JP
13127 if ((tg3_flag(tp, 57765_PLUS) ||
13128 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
13129 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) &&
6833c043 13130 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
f07e9af3 13131 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
6833c043 13132
63c3a66f 13133 if (tg3_flag(tp, PCI_EXPRESS) &&
8c69b1e7 13134 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
63c3a66f 13135 !tg3_flag(tp, 57765_PLUS)) {
8ed5d97e
MC
13136 u32 cfg3;
13137
13138 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
13139 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
63c3a66f 13140 tg3_flag_set(tp, ASPM_WORKAROUND);
8ed5d97e 13141 }
a9daf367 13142
14417063 13143 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
63c3a66f 13144 tg3_flag_set(tp, RGMII_INBAND_DISABLE);
a9daf367 13145 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
63c3a66f 13146 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
a9daf367 13147 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
63c3a66f 13148 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
1da177e4 13149 }
05ac4cb7 13150done:
63c3a66f 13151 if (tg3_flag(tp, WOL_CAP))
43067ed8 13152 device_set_wakeup_enable(&tp->pdev->dev,
63c3a66f 13153 tg3_flag(tp, WOL_ENABLE));
43067ed8
RW
13154 else
13155 device_set_wakeup_capable(&tp->pdev->dev, false);
7d0c41ef
MC
13156}
13157
b2a5c19c
MC
13158static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
13159{
13160 int i;
13161 u32 val;
13162
13163 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
13164 tw32(OTP_CTRL, cmd);
13165
13166 /* Wait for up to 1 ms for command to execute. */
13167 for (i = 0; i < 100; i++) {
13168 val = tr32(OTP_STATUS);
13169 if (val & OTP_STATUS_CMD_DONE)
13170 break;
13171 udelay(10);
13172 }
13173
13174 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
13175}
13176
13177/* Read the gphy configuration from the OTP region of the chip. The gphy
13178 * configuration is a 32-bit value that straddles the alignment boundary.
13179 * We do two 32-bit reads and then shift and merge the results.
13180 */
13181static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
13182{
13183 u32 bhalf_otp, thalf_otp;
13184
13185 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
13186
13187 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
13188 return 0;
13189
13190 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
13191
13192 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13193 return 0;
13194
13195 thalf_otp = tr32(OTP_READ_DATA);
13196
13197 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
13198
13199 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13200 return 0;
13201
13202 bhalf_otp = tr32(OTP_READ_DATA);
13203
13204 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
13205}
13206
e256f8a3
MC
13207static void __devinit tg3_phy_init_link_config(struct tg3 *tp)
13208{
13209 u32 adv = ADVERTISED_Autoneg |
13210 ADVERTISED_Pause;
13211
13212 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
13213 adv |= ADVERTISED_1000baseT_Half |
13214 ADVERTISED_1000baseT_Full;
13215
13216 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
13217 adv |= ADVERTISED_100baseT_Half |
13218 ADVERTISED_100baseT_Full |
13219 ADVERTISED_10baseT_Half |
13220 ADVERTISED_10baseT_Full |
13221 ADVERTISED_TP;
13222 else
13223 adv |= ADVERTISED_FIBRE;
13224
13225 tp->link_config.advertising = adv;
13226 tp->link_config.speed = SPEED_INVALID;
13227 tp->link_config.duplex = DUPLEX_INVALID;
13228 tp->link_config.autoneg = AUTONEG_ENABLE;
13229 tp->link_config.active_speed = SPEED_INVALID;
13230 tp->link_config.active_duplex = DUPLEX_INVALID;
13231 tp->link_config.orig_speed = SPEED_INVALID;
13232 tp->link_config.orig_duplex = DUPLEX_INVALID;
13233 tp->link_config.orig_autoneg = AUTONEG_INVALID;
13234}
13235
7d0c41ef
MC
13236static int __devinit tg3_phy_probe(struct tg3 *tp)
13237{
13238 u32 hw_phy_id_1, hw_phy_id_2;
13239 u32 hw_phy_id, hw_phy_id_masked;
13240 int err;
1da177e4 13241
e256f8a3 13242 /* flow control autonegotiation is default behavior */
63c3a66f 13243 tg3_flag_set(tp, PAUSE_AUTONEG);
e256f8a3
MC
13244 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
13245
63c3a66f 13246 if (tg3_flag(tp, USE_PHYLIB))
b02fd9e3
MC
13247 return tg3_phy_init(tp);
13248
1da177e4 13249 /* Reading the PHY ID register can conflict with ASF
877d0310 13250 * firmware access to the PHY hardware.
1da177e4
LT
13251 */
13252 err = 0;
63c3a66f 13253 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
79eb6904 13254 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
1da177e4
LT
13255 } else {
13256 /* Now read the physical PHY_ID from the chip and verify
13257 * that it is sane. If it doesn't look good, we fall back
13258 * to either the hard-coded table based PHY_ID and failing
13259 * that the value found in the eeprom area.
13260 */
13261 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
13262 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
13263
13264 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10;
13265 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
13266 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0;
13267
79eb6904 13268 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
1da177e4
LT
13269 }
13270
79eb6904 13271 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
1da177e4 13272 tp->phy_id = hw_phy_id;
79eb6904 13273 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
f07e9af3 13274 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
da6b2d01 13275 else
f07e9af3 13276 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
1da177e4 13277 } else {
79eb6904 13278 if (tp->phy_id != TG3_PHY_ID_INVALID) {
7d0c41ef
MC
13279 /* Do nothing, phy ID already set up in
13280 * tg3_get_eeprom_hw_cfg().
13281 */
1da177e4
LT
13282 } else {
13283 struct subsys_tbl_ent *p;
13284
13285 /* No eeprom signature? Try the hardcoded
13286 * subsys device table.
13287 */
24daf2b0 13288 p = tg3_lookup_by_subsys(tp);
1da177e4
LT
13289 if (!p)
13290 return -ENODEV;
13291
13292 tp->phy_id = p->phy_id;
13293 if (!tp->phy_id ||
79eb6904 13294 tp->phy_id == TG3_PHY_ID_BCM8002)
f07e9af3 13295 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
1da177e4
LT
13296 }
13297 }
13298
a6b68dab 13299 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
5baa5e9a
MC
13300 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
13301 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 ||
13302 (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 &&
a6b68dab
MC
13303 tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) ||
13304 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 &&
13305 tp->pci_chip_rev_id != CHIPREV_ID_57765_A0)))
52b02d04
MC
13306 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
13307
e256f8a3
MC
13308 tg3_phy_init_link_config(tp);
13309
f07e9af3 13310 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
63c3a66f
JP
13311 !tg3_flag(tp, ENABLE_APE) &&
13312 !tg3_flag(tp, ENABLE_ASF)) {
42b64a45 13313 u32 bmsr, mask;
1da177e4
LT
13314
13315 tg3_readphy(tp, MII_BMSR, &bmsr);
13316 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
13317 (bmsr & BMSR_LSTATUS))
13318 goto skip_phy_reset;
6aa20a22 13319
1da177e4
LT
13320 err = tg3_phy_reset(tp);
13321 if (err)
13322 return err;
13323
42b64a45 13324 tg3_phy_set_wirespeed(tp);
1da177e4 13325
3600d918
MC
13326 mask = (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
13327 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
13328 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full);
13329 if (!tg3_copper_is_advertising_all(tp, mask)) {
42b64a45
MC
13330 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
13331 tp->link_config.flowctrl);
1da177e4
LT
13332
13333 tg3_writephy(tp, MII_BMCR,
13334 BMCR_ANENABLE | BMCR_ANRESTART);
13335 }
1da177e4
LT
13336 }
13337
13338skip_phy_reset:
79eb6904 13339 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
1da177e4
LT
13340 err = tg3_init_5401phy_dsp(tp);
13341 if (err)
13342 return err;
1da177e4 13343
1da177e4
LT
13344 err = tg3_init_5401phy_dsp(tp);
13345 }
13346
1da177e4
LT
13347 return err;
13348}
13349
184b8904 13350static void __devinit tg3_read_vpd(struct tg3 *tp)
1da177e4 13351{
a4a8bb15 13352 u8 *vpd_data;
4181b2c8 13353 unsigned int block_end, rosize, len;
535a490e 13354 u32 vpdlen;
184b8904 13355 int j, i = 0;
a4a8bb15 13356
535a490e 13357 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
a4a8bb15
MC
13358 if (!vpd_data)
13359 goto out_no_vpd;
1da177e4 13360
535a490e 13361 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
4181b2c8
MC
13362 if (i < 0)
13363 goto out_not_found;
1da177e4 13364
4181b2c8
MC
13365 rosize = pci_vpd_lrdt_size(&vpd_data[i]);
13366 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
13367 i += PCI_VPD_LRDT_TAG_SIZE;
1da177e4 13368
535a490e 13369 if (block_end > vpdlen)
4181b2c8 13370 goto out_not_found;
af2c6a4a 13371
184b8904
MC
13372 j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13373 PCI_VPD_RO_KEYWORD_MFR_ID);
13374 if (j > 0) {
13375 len = pci_vpd_info_field_size(&vpd_data[j]);
13376
13377 j += PCI_VPD_INFO_FLD_HDR_SIZE;
13378 if (j + len > block_end || len != 4 ||
13379 memcmp(&vpd_data[j], "1028", 4))
13380 goto partno;
13381
13382 j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13383 PCI_VPD_RO_KEYWORD_VENDOR0);
13384 if (j < 0)
13385 goto partno;
13386
13387 len = pci_vpd_info_field_size(&vpd_data[j]);
13388
13389 j += PCI_VPD_INFO_FLD_HDR_SIZE;
13390 if (j + len > block_end)
13391 goto partno;
13392
13393 memcpy(tp->fw_ver, &vpd_data[j], len);
535a490e 13394 strncat(tp->fw_ver, " bc ", vpdlen - len - 1);
184b8904
MC
13395 }
13396
13397partno:
4181b2c8
MC
13398 i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13399 PCI_VPD_RO_KEYWORD_PARTNO);
13400 if (i < 0)
13401 goto out_not_found;
af2c6a4a 13402
4181b2c8 13403 len = pci_vpd_info_field_size(&vpd_data[i]);
1da177e4 13404
4181b2c8
MC
13405 i += PCI_VPD_INFO_FLD_HDR_SIZE;
13406 if (len > TG3_BPN_SIZE ||
535a490e 13407 (len + i) > vpdlen)
4181b2c8 13408 goto out_not_found;
1da177e4 13409
4181b2c8 13410 memcpy(tp->board_part_number, &vpd_data[i], len);
1da177e4 13411
1da177e4 13412out_not_found:
a4a8bb15 13413 kfree(vpd_data);
37a949c5 13414 if (tp->board_part_number[0])
a4a8bb15
MC
13415 return;
13416
13417out_no_vpd:
37a949c5
MC
13418 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
13419 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717)
13420 strcpy(tp->board_part_number, "BCM5717");
13421 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
13422 strcpy(tp->board_part_number, "BCM5718");
13423 else
13424 goto nomatch;
13425 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
13426 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
13427 strcpy(tp->board_part_number, "BCM57780");
13428 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
13429 strcpy(tp->board_part_number, "BCM57760");
13430 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
13431 strcpy(tp->board_part_number, "BCM57790");
13432 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
13433 strcpy(tp->board_part_number, "BCM57788");
13434 else
13435 goto nomatch;
13436 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
13437 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
13438 strcpy(tp->board_part_number, "BCM57761");
13439 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
13440 strcpy(tp->board_part_number, "BCM57765");
13441 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
13442 strcpy(tp->board_part_number, "BCM57781");
13443 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
13444 strcpy(tp->board_part_number, "BCM57785");
13445 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
13446 strcpy(tp->board_part_number, "BCM57791");
13447 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
13448 strcpy(tp->board_part_number, "BCM57795");
13449 else
13450 goto nomatch;
13451 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
b5d3772c 13452 strcpy(tp->board_part_number, "BCM95906");
37a949c5
MC
13453 } else {
13454nomatch:
b5d3772c 13455 strcpy(tp->board_part_number, "none");
37a949c5 13456 }
1da177e4
LT
13457}
13458
9c8a620e
MC
13459static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
13460{
13461 u32 val;
13462
e4f34110 13463 if (tg3_nvram_read(tp, offset, &val) ||
9c8a620e 13464 (val & 0xfc000000) != 0x0c000000 ||
e4f34110 13465 tg3_nvram_read(tp, offset + 4, &val) ||
9c8a620e
MC
13466 val != 0)
13467 return 0;
13468
13469 return 1;
13470}
13471
acd9c119
MC
13472static void __devinit tg3_read_bc_ver(struct tg3 *tp)
13473{
ff3a7cb2 13474 u32 val, offset, start, ver_offset;
75f9936e 13475 int i, dst_off;
ff3a7cb2 13476 bool newver = false;
acd9c119
MC
13477
13478 if (tg3_nvram_read(tp, 0xc, &offset) ||
13479 tg3_nvram_read(tp, 0x4, &start))
13480 return;
13481
13482 offset = tg3_nvram_logical_addr(tp, offset);
13483
ff3a7cb2 13484 if (tg3_nvram_read(tp, offset, &val))
acd9c119
MC
13485 return;
13486
ff3a7cb2
MC
13487 if ((val & 0xfc000000) == 0x0c000000) {
13488 if (tg3_nvram_read(tp, offset + 4, &val))
acd9c119
MC
13489 return;
13490
ff3a7cb2
MC
13491 if (val == 0)
13492 newver = true;
13493 }
13494
75f9936e
MC
13495 dst_off = strlen(tp->fw_ver);
13496
ff3a7cb2 13497 if (newver) {
75f9936e
MC
13498 if (TG3_VER_SIZE - dst_off < 16 ||
13499 tg3_nvram_read(tp, offset + 8, &ver_offset))
ff3a7cb2
MC
13500 return;
13501
13502 offset = offset + ver_offset - start;
13503 for (i = 0; i < 16; i += 4) {
13504 __be32 v;
13505 if (tg3_nvram_read_be32(tp, offset + i, &v))
13506 return;
13507
75f9936e 13508 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
ff3a7cb2
MC
13509 }
13510 } else {
13511 u32 major, minor;
13512
13513 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
13514 return;
13515
13516 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
13517 TG3_NVM_BCVER_MAJSFT;
13518 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
75f9936e
MC
13519 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
13520 "v%d.%02d", major, minor);
acd9c119
MC
13521 }
13522}
13523
a6f6cb1c
MC
13524static void __devinit tg3_read_hwsb_ver(struct tg3 *tp)
13525{
13526 u32 val, major, minor;
13527
13528 /* Use native endian representation */
13529 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
13530 return;
13531
13532 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
13533 TG3_NVM_HWSB_CFG1_MAJSFT;
13534 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
13535 TG3_NVM_HWSB_CFG1_MINSFT;
13536
13537 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
13538}
13539
dfe00d7d
MC
13540static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val)
13541{
13542 u32 offset, major, minor, build;
13543
75f9936e 13544 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
dfe00d7d
MC
13545
13546 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
13547 return;
13548
13549 switch (val & TG3_EEPROM_SB_REVISION_MASK) {
13550 case TG3_EEPROM_SB_REVISION_0:
13551 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
13552 break;
13553 case TG3_EEPROM_SB_REVISION_2:
13554 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
13555 break;
13556 case TG3_EEPROM_SB_REVISION_3:
13557 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
13558 break;
a4153d40
MC
13559 case TG3_EEPROM_SB_REVISION_4:
13560 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
13561 break;
13562 case TG3_EEPROM_SB_REVISION_5:
13563 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
13564 break;
bba226ac
MC
13565 case TG3_EEPROM_SB_REVISION_6:
13566 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
13567 break;
dfe00d7d
MC
13568 default:
13569 return;
13570 }
13571
e4f34110 13572 if (tg3_nvram_read(tp, offset, &val))
dfe00d7d
MC
13573 return;
13574
13575 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
13576 TG3_EEPROM_SB_EDH_BLD_SHFT;
13577 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
13578 TG3_EEPROM_SB_EDH_MAJ_SHFT;
13579 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK;
13580
13581 if (minor > 99 || build > 26)
13582 return;
13583
75f9936e
MC
13584 offset = strlen(tp->fw_ver);
13585 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
13586 " v%d.%02d", major, minor);
dfe00d7d
MC
13587
13588 if (build > 0) {
75f9936e
MC
13589 offset = strlen(tp->fw_ver);
13590 if (offset < TG3_VER_SIZE - 1)
13591 tp->fw_ver[offset] = 'a' + build - 1;
dfe00d7d
MC
13592 }
13593}
13594
acd9c119 13595static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp)
c4e6575c
MC
13596{
13597 u32 val, offset, start;
acd9c119 13598 int i, vlen;
9c8a620e
MC
13599
13600 for (offset = TG3_NVM_DIR_START;
13601 offset < TG3_NVM_DIR_END;
13602 offset += TG3_NVM_DIRENT_SIZE) {
e4f34110 13603 if (tg3_nvram_read(tp, offset, &val))
c4e6575c
MC
13604 return;
13605
9c8a620e
MC
13606 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
13607 break;
13608 }
13609
13610 if (offset == TG3_NVM_DIR_END)
13611 return;
13612
63c3a66f 13613 if (!tg3_flag(tp, 5705_PLUS))
9c8a620e 13614 start = 0x08000000;
e4f34110 13615 else if (tg3_nvram_read(tp, offset - 4, &start))
9c8a620e
MC
13616 return;
13617
e4f34110 13618 if (tg3_nvram_read(tp, offset + 4, &offset) ||
9c8a620e 13619 !tg3_fw_img_is_valid(tp, offset) ||
e4f34110 13620 tg3_nvram_read(tp, offset + 8, &val))
9c8a620e
MC
13621 return;
13622
13623 offset += val - start;
13624
acd9c119 13625 vlen = strlen(tp->fw_ver);
9c8a620e 13626
acd9c119
MC
13627 tp->fw_ver[vlen++] = ',';
13628 tp->fw_ver[vlen++] = ' ';
9c8a620e
MC
13629
13630 for (i = 0; i < 4; i++) {
a9dc529d
MC
13631 __be32 v;
13632 if (tg3_nvram_read_be32(tp, offset, &v))
c4e6575c
MC
13633 return;
13634
b9fc7dc5 13635 offset += sizeof(v);
c4e6575c 13636
acd9c119
MC
13637 if (vlen > TG3_VER_SIZE - sizeof(v)) {
13638 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
9c8a620e 13639 break;
c4e6575c 13640 }
9c8a620e 13641
acd9c119
MC
13642 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
13643 vlen += sizeof(v);
c4e6575c 13644 }
acd9c119
MC
13645}
13646
7fd76445
MC
13647static void __devinit tg3_read_dash_ver(struct tg3 *tp)
13648{
13649 int vlen;
13650 u32 apedata;
ecc79648 13651 char *fwtype;
7fd76445 13652
63c3a66f 13653 if (!tg3_flag(tp, ENABLE_APE) || !tg3_flag(tp, ENABLE_ASF))
7fd76445
MC
13654 return;
13655
13656 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
13657 if (apedata != APE_SEG_SIG_MAGIC)
13658 return;
13659
13660 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
13661 if (!(apedata & APE_FW_STATUS_READY))
13662 return;
13663
13664 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
13665
dc6d0744 13666 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) {
63c3a66f 13667 tg3_flag_set(tp, APE_HAS_NCSI);
ecc79648 13668 fwtype = "NCSI";
dc6d0744 13669 } else {
ecc79648 13670 fwtype = "DASH";
dc6d0744 13671 }
ecc79648 13672
7fd76445
MC
13673 vlen = strlen(tp->fw_ver);
13674
ecc79648
MC
13675 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
13676 fwtype,
7fd76445
MC
13677 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
13678 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
13679 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
13680 (apedata & APE_FW_VERSION_BLDMSK));
13681}
13682
acd9c119
MC
13683static void __devinit tg3_read_fw_ver(struct tg3 *tp)
13684{
13685 u32 val;
75f9936e 13686 bool vpd_vers = false;
acd9c119 13687
75f9936e
MC
13688 if (tp->fw_ver[0] != 0)
13689 vpd_vers = true;
df259d8c 13690
63c3a66f 13691 if (tg3_flag(tp, NO_NVRAM)) {
75f9936e 13692 strcat(tp->fw_ver, "sb");
df259d8c
MC
13693 return;
13694 }
13695
acd9c119
MC
13696 if (tg3_nvram_read(tp, 0, &val))
13697 return;
13698
13699 if (val == TG3_EEPROM_MAGIC)
13700 tg3_read_bc_ver(tp);
13701 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
13702 tg3_read_sb_ver(tp, val);
a6f6cb1c
MC
13703 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
13704 tg3_read_hwsb_ver(tp);
acd9c119
MC
13705 else
13706 return;
13707
c9cab24e 13708 if (vpd_vers)
75f9936e 13709 goto done;
acd9c119 13710
c9cab24e
MC
13711 if (tg3_flag(tp, ENABLE_APE)) {
13712 if (tg3_flag(tp, ENABLE_ASF))
13713 tg3_read_dash_ver(tp);
13714 } else if (tg3_flag(tp, ENABLE_ASF)) {
13715 tg3_read_mgmtfw_ver(tp);
13716 }
9c8a620e 13717
75f9936e 13718done:
9c8a620e 13719 tp->fw_ver[TG3_VER_SIZE - 1] = 0;
c4e6575c
MC
13720}
13721
7544b097
MC
13722static struct pci_dev * __devinit tg3_find_peer(struct tg3 *);
13723
7cb32cf2
MC
13724static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
13725{
63c3a66f 13726 if (tg3_flag(tp, LRG_PROD_RING_CAP))
de9f5230 13727 return TG3_RX_RET_MAX_SIZE_5717;
63c3a66f 13728 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
de9f5230 13729 return TG3_RX_RET_MAX_SIZE_5700;
7cb32cf2 13730 else
de9f5230 13731 return TG3_RX_RET_MAX_SIZE_5705;
7cb32cf2
MC
13732}
13733
4143470c 13734static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
895950c2
JP
13735 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
13736 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
13737 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
13738 { },
13739};
13740
1da177e4
LT
13741static int __devinit tg3_get_invariants(struct tg3 *tp)
13742{
1da177e4 13743 u32 misc_ctrl_reg;
1da177e4
LT
13744 u32 pci_state_reg, grc_misc_cfg;
13745 u32 val;
13746 u16 pci_cmd;
5e7dfd0f 13747 int err;
1da177e4 13748
1da177e4
LT
13749 /* Force memory write invalidate off. If we leave it on,
13750 * then on 5700_BX chips we have to enable a workaround.
13751 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
13752 * to match the cacheline size. The Broadcom driver have this
13753 * workaround but turns MWI off all the times so never uses
13754 * it. This seems to suggest that the workaround is insufficient.
13755 */
13756 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
13757 pci_cmd &= ~PCI_COMMAND_INVALIDATE;
13758 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
13759
16821285
MC
13760 /* Important! -- Make sure register accesses are byteswapped
13761 * correctly. Also, for those chips that require it, make
13762 * sure that indirect register accesses are enabled before
13763 * the first operation.
1da177e4
LT
13764 */
13765 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
13766 &misc_ctrl_reg);
16821285
MC
13767 tp->misc_host_ctrl |= (misc_ctrl_reg &
13768 MISC_HOST_CTRL_CHIPREV);
13769 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
13770 tp->misc_host_ctrl);
1da177e4
LT
13771
13772 tp->pci_chip_rev_id = (misc_ctrl_reg >>
13773 MISC_HOST_CTRL_CHIPREV_SHIFT);
795d01c5
MC
13774 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
13775 u32 prod_id_asic_rev;
13776
5001e2f6
MC
13777 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
13778 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
d78b59f5
MC
13779 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
13780 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720)
f6eb9b1f
MC
13781 pci_read_config_dword(tp->pdev,
13782 TG3PCI_GEN2_PRODID_ASICREV,
13783 &prod_id_asic_rev);
b703df6f
MC
13784 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
13785 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
13786 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
13787 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
13788 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
13789 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
13790 pci_read_config_dword(tp->pdev,
13791 TG3PCI_GEN15_PRODID_ASICREV,
13792 &prod_id_asic_rev);
f6eb9b1f
MC
13793 else
13794 pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV,
13795 &prod_id_asic_rev);
13796
321d32a0 13797 tp->pci_chip_rev_id = prod_id_asic_rev;
795d01c5 13798 }
1da177e4 13799
ff645bec
MC
13800 /* Wrong chip ID in 5752 A0. This code can be removed later
13801 * as A0 is not in production.
13802 */
13803 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
13804 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
13805
6892914f
MC
13806 /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
13807 * we need to disable memory and use config. cycles
13808 * only to access all registers. The 5702/03 chips
13809 * can mistakenly decode the special cycles from the
13810 * ICH chipsets as memory write cycles, causing corruption
13811 * of register and memory space. Only certain ICH bridges
13812 * will drive special cycles with non-zero data during the
13813 * address phase which can fall within the 5703's address
13814 * range. This is not an ICH bug as the PCI spec allows
13815 * non-zero address during special cycles. However, only
13816 * these ICH bridges are known to drive non-zero addresses
13817 * during special cycles.
13818 *
13819 * Since special cycles do not cross PCI bridges, we only
13820 * enable this workaround if the 5703 is on the secondary
13821 * bus of these ICH bridges.
13822 */
13823 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
13824 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
13825 static struct tg3_dev_id {
13826 u32 vendor;
13827 u32 device;
13828 u32 rev;
13829 } ich_chipsets[] = {
13830 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
13831 PCI_ANY_ID },
13832 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
13833 PCI_ANY_ID },
13834 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
13835 0xa },
13836 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
13837 PCI_ANY_ID },
13838 { },
13839 };
13840 struct tg3_dev_id *pci_id = &ich_chipsets[0];
13841 struct pci_dev *bridge = NULL;
13842
13843 while (pci_id->vendor != 0) {
13844 bridge = pci_get_device(pci_id->vendor, pci_id->device,
13845 bridge);
13846 if (!bridge) {
13847 pci_id++;
13848 continue;
13849 }
13850 if (pci_id->rev != PCI_ANY_ID) {
44c10138 13851 if (bridge->revision > pci_id->rev)
6892914f
MC
13852 continue;
13853 }
13854 if (bridge->subordinate &&
13855 (bridge->subordinate->number ==
13856 tp->pdev->bus->number)) {
63c3a66f 13857 tg3_flag_set(tp, ICH_WORKAROUND);
6892914f
MC
13858 pci_dev_put(bridge);
13859 break;
13860 }
13861 }
13862 }
13863
6ff6f81d 13864 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
41588ba1
MC
13865 static struct tg3_dev_id {
13866 u32 vendor;
13867 u32 device;
13868 } bridge_chipsets[] = {
13869 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
13870 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
13871 { },
13872 };
13873 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
13874 struct pci_dev *bridge = NULL;
13875
13876 while (pci_id->vendor != 0) {
13877 bridge = pci_get_device(pci_id->vendor,
13878 pci_id->device,
13879 bridge);
13880 if (!bridge) {
13881 pci_id++;
13882 continue;
13883 }
13884 if (bridge->subordinate &&
13885 (bridge->subordinate->number <=
13886 tp->pdev->bus->number) &&
13887 (bridge->subordinate->subordinate >=
13888 tp->pdev->bus->number)) {
63c3a66f 13889 tg3_flag_set(tp, 5701_DMA_BUG);
41588ba1
MC
13890 pci_dev_put(bridge);
13891 break;
13892 }
13893 }
13894 }
13895
4a29cc2e
MC
13896 /* The EPB bridge inside 5714, 5715, and 5780 cannot support
13897 * DMA addresses > 40-bit. This bridge may have other additional
13898 * 57xx devices behind it in some 4-port NIC designs for example.
13899 * Any tg3 device found behind the bridge will also need the 40-bit
13900 * DMA workaround.
13901 */
a4e2b347
MC
13902 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
13903 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
63c3a66f
JP
13904 tg3_flag_set(tp, 5780_CLASS);
13905 tg3_flag_set(tp, 40BIT_DMA_BUG);
4cf78e4f 13906 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
859a5887 13907 } else {
4a29cc2e
MC
13908 struct pci_dev *bridge = NULL;
13909
13910 do {
13911 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
13912 PCI_DEVICE_ID_SERVERWORKS_EPB,
13913 bridge);
13914 if (bridge && bridge->subordinate &&
13915 (bridge->subordinate->number <=
13916 tp->pdev->bus->number) &&
13917 (bridge->subordinate->subordinate >=
13918 tp->pdev->bus->number)) {
63c3a66f 13919 tg3_flag_set(tp, 40BIT_DMA_BUG);
4a29cc2e
MC
13920 pci_dev_put(bridge);
13921 break;
13922 }
13923 } while (bridge);
13924 }
4cf78e4f 13925
f6eb9b1f 13926 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
3a1e19d3 13927 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
7544b097
MC
13928 tp->pdev_peer = tg3_find_peer(tp);
13929
c885e824 13930 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
d78b59f5
MC
13931 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
13932 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
63c3a66f 13933 tg3_flag_set(tp, 5717_PLUS);
0a58d668
MC
13934
13935 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 ||
63c3a66f
JP
13936 tg3_flag(tp, 5717_PLUS))
13937 tg3_flag_set(tp, 57765_PLUS);
c885e824 13938
321d32a0
MC
13939 /* Intentionally exclude ASIC_REV_5906 */
13940 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
d9ab5ad1 13941 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
d30cdd28 13942 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9936bcf6 13943 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
57e6983c 13944 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
f6eb9b1f 13945 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
63c3a66f
JP
13946 tg3_flag(tp, 57765_PLUS))
13947 tg3_flag_set(tp, 5755_PLUS);
321d32a0
MC
13948
13949 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
13950 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
b5d3772c 13951 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
63c3a66f
JP
13952 tg3_flag(tp, 5755_PLUS) ||
13953 tg3_flag(tp, 5780_CLASS))
13954 tg3_flag_set(tp, 5750_PLUS);
6708e5cc 13955
6ff6f81d 13956 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
63c3a66f
JP
13957 tg3_flag(tp, 5750_PLUS))
13958 tg3_flag_set(tp, 5705_PLUS);
1b440c56 13959
507399f1 13960 /* Determine TSO capabilities */
a0512944 13961 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0)
4d163b75 13962 ; /* Do nothing. HW bug. */
63c3a66f
JP
13963 else if (tg3_flag(tp, 57765_PLUS))
13964 tg3_flag_set(tp, HW_TSO_3);
13965 else if (tg3_flag(tp, 5755_PLUS) ||
e849cdc3 13966 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
63c3a66f
JP
13967 tg3_flag_set(tp, HW_TSO_2);
13968 else if (tg3_flag(tp, 5750_PLUS)) {
13969 tg3_flag_set(tp, HW_TSO_1);
13970 tg3_flag_set(tp, TSO_BUG);
507399f1
MC
13971 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 &&
13972 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
63c3a66f 13973 tg3_flag_clear(tp, TSO_BUG);
507399f1
MC
13974 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13975 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
13976 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
63c3a66f 13977 tg3_flag_set(tp, TSO_BUG);
507399f1
MC
13978 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
13979 tp->fw_needed = FIRMWARE_TG3TSO5;
13980 else
13981 tp->fw_needed = FIRMWARE_TG3TSO;
13982 }
13983
dabc5c67 13984 /* Selectively allow TSO based on operating conditions */
6ff6f81d
MC
13985 if (tg3_flag(tp, HW_TSO_1) ||
13986 tg3_flag(tp, HW_TSO_2) ||
13987 tg3_flag(tp, HW_TSO_3) ||
dabc5c67
MC
13988 (tp->fw_needed && !tg3_flag(tp, ENABLE_ASF)))
13989 tg3_flag_set(tp, TSO_CAPABLE);
13990 else {
13991 tg3_flag_clear(tp, TSO_CAPABLE);
13992 tg3_flag_clear(tp, TSO_BUG);
13993 tp->fw_needed = NULL;
13994 }
13995
13996 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
13997 tp->fw_needed = FIRMWARE_TG3;
13998
507399f1
MC
13999 tp->irq_max = 1;
14000
63c3a66f
JP
14001 if (tg3_flag(tp, 5750_PLUS)) {
14002 tg3_flag_set(tp, SUPPORT_MSI);
7544b097
MC
14003 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
14004 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
14005 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
14006 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
14007 tp->pdev_peer == tp->pdev))
63c3a66f 14008 tg3_flag_clear(tp, SUPPORT_MSI);
7544b097 14009
63c3a66f 14010 if (tg3_flag(tp, 5755_PLUS) ||
b5d3772c 14011 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
63c3a66f 14012 tg3_flag_set(tp, 1SHOT_MSI);
52c0fd83 14013 }
4f125f42 14014
63c3a66f
JP
14015 if (tg3_flag(tp, 57765_PLUS)) {
14016 tg3_flag_set(tp, SUPPORT_MSIX);
507399f1
MC
14017 tp->irq_max = TG3_IRQ_MAX_VECS;
14018 }
f6eb9b1f 14019 }
0e1406dd 14020
2ffcc981 14021 if (tg3_flag(tp, 5755_PLUS))
63c3a66f 14022 tg3_flag_set(tp, SHORT_DMA_BUG);
f6eb9b1f 14023
e31aa987
MC
14024 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
14025 tg3_flag_set(tp, 4K_FIFO_LIMIT);
14026
63c3a66f
JP
14027 if (tg3_flag(tp, 5717_PLUS))
14028 tg3_flag_set(tp, LRG_PROD_RING_CAP);
de9f5230 14029
63c3a66f 14030 if (tg3_flag(tp, 57765_PLUS) &&
a0512944 14031 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0)
63c3a66f 14032 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
b703df6f 14033
63c3a66f
JP
14034 if (!tg3_flag(tp, 5705_PLUS) ||
14035 tg3_flag(tp, 5780_CLASS) ||
14036 tg3_flag(tp, USE_JUMBO_BDFLAG))
14037 tg3_flag_set(tp, JUMBO_CAPABLE);
0f893dc6 14038
52f4490c
MC
14039 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14040 &pci_state_reg);
14041
708ebb3a 14042 if (pci_is_pcie(tp->pdev)) {
5e7dfd0f
MC
14043 u16 lnkctl;
14044
63c3a66f 14045 tg3_flag_set(tp, PCI_EXPRESS);
5f5c51e3 14046
cf79003d 14047 tp->pcie_readrq = 4096;
d78b59f5
MC
14048 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14049 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
b4495ed8 14050 tp->pcie_readrq = 2048;
cf79003d
MC
14051
14052 pcie_set_readrq(tp->pdev, tp->pcie_readrq);
5f5c51e3 14053
5e7dfd0f 14054 pci_read_config_word(tp->pdev,
708ebb3a 14055 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
5e7dfd0f
MC
14056 &lnkctl);
14057 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
7196cd6c
MC
14058 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
14059 ASIC_REV_5906) {
63c3a66f 14060 tg3_flag_clear(tp, HW_TSO_2);
dabc5c67 14061 tg3_flag_clear(tp, TSO_CAPABLE);
7196cd6c 14062 }
5e7dfd0f 14063 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
321d32a0 14064 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
9cf74ebb
MC
14065 tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 ||
14066 tp->pci_chip_rev_id == CHIPREV_ID_57780_A1)
63c3a66f 14067 tg3_flag_set(tp, CLKREQ_BUG);
614b0590 14068 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) {
63c3a66f 14069 tg3_flag_set(tp, L1PLLPD_EN);
c7835a77 14070 }
52f4490c 14071 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
708ebb3a
JM
14072 /* BCM5785 devices are effectively PCIe devices, and should
14073 * follow PCIe codepaths, but do not have a PCIe capabilities
14074 * section.
14075 */
63c3a66f
JP
14076 tg3_flag_set(tp, PCI_EXPRESS);
14077 } else if (!tg3_flag(tp, 5705_PLUS) ||
14078 tg3_flag(tp, 5780_CLASS)) {
52f4490c
MC
14079 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
14080 if (!tp->pcix_cap) {
2445e461
MC
14081 dev_err(&tp->pdev->dev,
14082 "Cannot find PCI-X capability, aborting\n");
52f4490c
MC
14083 return -EIO;
14084 }
14085
14086 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
63c3a66f 14087 tg3_flag_set(tp, PCIX_MODE);
52f4490c 14088 }
1da177e4 14089
399de50b
MC
14090 /* If we have an AMD 762 or VIA K8T800 chipset, write
14091 * reordering to the mailbox registers done by the host
14092 * controller can cause major troubles. We read back from
14093 * every mailbox register write to force the writes to be
14094 * posted to the chip in order.
14095 */
4143470c 14096 if (pci_dev_present(tg3_write_reorder_chipsets) &&
63c3a66f
JP
14097 !tg3_flag(tp, PCI_EXPRESS))
14098 tg3_flag_set(tp, MBOX_WRITE_REORDER);
399de50b 14099
69fc4053
MC
14100 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
14101 &tp->pci_cacheline_sz);
14102 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14103 &tp->pci_lat_timer);
1da177e4
LT
14104 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14105 tp->pci_lat_timer < 64) {
14106 tp->pci_lat_timer = 64;
69fc4053
MC
14107 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14108 tp->pci_lat_timer);
1da177e4
LT
14109 }
14110
16821285
MC
14111 /* Important! -- It is critical that the PCI-X hw workaround
14112 * situation is decided before the first MMIO register access.
14113 */
52f4490c
MC
14114 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
14115 /* 5700 BX chips need to have their TX producer index
14116 * mailboxes written twice to workaround a bug.
14117 */
63c3a66f 14118 tg3_flag_set(tp, TXD_MBOX_HWBUG);
1da177e4 14119
52f4490c 14120 /* If we are in PCI-X mode, enable register write workaround.
1da177e4
LT
14121 *
14122 * The workaround is to use indirect register accesses
14123 * for all chip writes not to mailbox registers.
14124 */
63c3a66f 14125 if (tg3_flag(tp, PCIX_MODE)) {
1da177e4 14126 u32 pm_reg;
1da177e4 14127
63c3a66f 14128 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
1da177e4
LT
14129
14130 /* The chip can have it's power management PCI config
14131 * space registers clobbered due to this bug.
14132 * So explicitly force the chip into D0 here.
14133 */
9974a356
MC
14134 pci_read_config_dword(tp->pdev,
14135 tp->pm_cap + PCI_PM_CTRL,
1da177e4
LT
14136 &pm_reg);
14137 pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
14138 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
9974a356
MC
14139 pci_write_config_dword(tp->pdev,
14140 tp->pm_cap + PCI_PM_CTRL,
1da177e4
LT
14141 pm_reg);
14142
14143 /* Also, force SERR#/PERR# in PCI command. */
14144 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14145 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
14146 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14147 }
14148 }
14149
1da177e4 14150 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
63c3a66f 14151 tg3_flag_set(tp, PCI_HIGH_SPEED);
1da177e4 14152 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
63c3a66f 14153 tg3_flag_set(tp, PCI_32BIT);
1da177e4
LT
14154
14155 /* Chip-specific fixup from Broadcom driver */
14156 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
14157 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
14158 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
14159 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
14160 }
14161
1ee582d8 14162 /* Default fast path register access methods */
20094930 14163 tp->read32 = tg3_read32;
1ee582d8 14164 tp->write32 = tg3_write32;
09ee929c 14165 tp->read32_mbox = tg3_read32;
20094930 14166 tp->write32_mbox = tg3_write32;
1ee582d8
MC
14167 tp->write32_tx_mbox = tg3_write32;
14168 tp->write32_rx_mbox = tg3_write32;
14169
14170 /* Various workaround register access methods */
63c3a66f 14171 if (tg3_flag(tp, PCIX_TARGET_HWBUG))
1ee582d8 14172 tp->write32 = tg3_write_indirect_reg32;
98efd8a6 14173 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
63c3a66f 14174 (tg3_flag(tp, PCI_EXPRESS) &&
98efd8a6
MC
14175 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
14176 /*
14177 * Back to back register writes can cause problems on these
14178 * chips, the workaround is to read back all reg writes
14179 * except those to mailbox regs.
14180 *
14181 * See tg3_write_indirect_reg32().
14182 */
1ee582d8 14183 tp->write32 = tg3_write_flush_reg32;
98efd8a6
MC
14184 }
14185
63c3a66f 14186 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
1ee582d8 14187 tp->write32_tx_mbox = tg3_write32_tx_mbox;
63c3a66f 14188 if (tg3_flag(tp, MBOX_WRITE_REORDER))
1ee582d8
MC
14189 tp->write32_rx_mbox = tg3_write_flush_reg32;
14190 }
20094930 14191
63c3a66f 14192 if (tg3_flag(tp, ICH_WORKAROUND)) {
6892914f
MC
14193 tp->read32 = tg3_read_indirect_reg32;
14194 tp->write32 = tg3_write_indirect_reg32;
14195 tp->read32_mbox = tg3_read_indirect_mbox;
14196 tp->write32_mbox = tg3_write_indirect_mbox;
14197 tp->write32_tx_mbox = tg3_write_indirect_mbox;
14198 tp->write32_rx_mbox = tg3_write_indirect_mbox;
14199
14200 iounmap(tp->regs);
22abe310 14201 tp->regs = NULL;
6892914f
MC
14202
14203 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14204 pci_cmd &= ~PCI_COMMAND_MEMORY;
14205 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14206 }
b5d3772c
MC
14207 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14208 tp->read32_mbox = tg3_read32_mbox_5906;
14209 tp->write32_mbox = tg3_write32_mbox_5906;
14210 tp->write32_tx_mbox = tg3_write32_mbox_5906;
14211 tp->write32_rx_mbox = tg3_write32_mbox_5906;
14212 }
6892914f 14213
bbadf503 14214 if (tp->write32 == tg3_write_indirect_reg32 ||
63c3a66f 14215 (tg3_flag(tp, PCIX_MODE) &&
bbadf503 14216 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
f49639e6 14217 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
63c3a66f 14218 tg3_flag_set(tp, SRAM_USE_CONFIG);
bbadf503 14219
16821285
MC
14220 /* The memory arbiter has to be enabled in order for SRAM accesses
14221 * to succeed. Normally on powerup the tg3 chip firmware will make
14222 * sure it is enabled, but other entities such as system netboot
14223 * code might disable it.
14224 */
14225 val = tr32(MEMARB_MODE);
14226 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
14227
69f11c99
MC
14228 if (tg3_flag(tp, PCIX_MODE)) {
14229 pci_read_config_dword(tp->pdev,
14230 tp->pcix_cap + PCI_X_STATUS, &val);
14231 tp->pci_fn = val & 0x7;
14232 } else {
14233 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
14234 }
14235
7d0c41ef 14236 /* Get eeprom hw config before calling tg3_set_power_state().
63c3a66f 14237 * In particular, the TG3_FLAG_IS_NIC flag must be
7d0c41ef
MC
14238 * determined before calling tg3_set_power_state() so that
14239 * we know whether or not to switch out of Vaux power.
14240 * When the flag is set, it means that GPIO1 is used for eeprom
14241 * write protect and also implies that it is a LOM where GPIOs
14242 * are not used to switch power.
6aa20a22 14243 */
7d0c41ef
MC
14244 tg3_get_eeprom_hw_cfg(tp);
14245
63c3a66f 14246 if (tg3_flag(tp, ENABLE_APE)) {
0d3031d9
MC
14247 /* Allow reads and writes to the
14248 * APE register and memory space.
14249 */
14250 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
f92d9dc1
MC
14251 PCISTATE_ALLOW_APE_SHMEM_WR |
14252 PCISTATE_ALLOW_APE_PSPACE_WR;
0d3031d9
MC
14253 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
14254 pci_state_reg);
c9cab24e
MC
14255
14256 tg3_ape_lock_init(tp);
0d3031d9
MC
14257 }
14258
9936bcf6 14259 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
57e6983c 14260 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
321d32a0 14261 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
f6eb9b1f 14262 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
63c3a66f
JP
14263 tg3_flag(tp, 57765_PLUS))
14264 tg3_flag_set(tp, CPMU_PRESENT);
d30cdd28 14265
16821285
MC
14266 /* Set up tp->grc_local_ctrl before calling
14267 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high
14268 * will bring 5700's external PHY out of reset.
314fba34
MC
14269 * It is also used as eeprom write protect on LOMs.
14270 */
14271 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
6ff6f81d 14272 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
63c3a66f 14273 tg3_flag(tp, EEPROM_WRITE_PROT))
314fba34
MC
14274 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
14275 GRC_LCLCTRL_GPIO_OUTPUT1);
3e7d83bc
MC
14276 /* Unused GPIO3 must be driven as output on 5752 because there
14277 * are no pull-up resistors on unused GPIO pins.
14278 */
14279 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
14280 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
314fba34 14281
321d32a0 14282 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
cb4ed1fd
MC
14283 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14284 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
af36e6b6
MC
14285 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14286
8d519ab2
MC
14287 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
14288 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
5f0c4a3c
MC
14289 /* Turn off the debug UART. */
14290 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
63c3a66f 14291 if (tg3_flag(tp, IS_NIC))
5f0c4a3c
MC
14292 /* Keep VMain power. */
14293 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
14294 GRC_LCLCTRL_GPIO_OUTPUT0;
14295 }
14296
16821285
MC
14297 /* Switch out of Vaux if it is a NIC */
14298 tg3_pwrsrc_switch_to_vmain(tp);
1da177e4 14299
1da177e4
LT
14300 /* Derive initial jumbo mode from MTU assigned in
14301 * ether_setup() via the alloc_etherdev() call
14302 */
63c3a66f
JP
14303 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
14304 tg3_flag_set(tp, JUMBO_RING_ENABLE);
1da177e4
LT
14305
14306 /* Determine WakeOnLan speed to use. */
14307 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14308 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
14309 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
14310 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
63c3a66f 14311 tg3_flag_clear(tp, WOL_SPEED_100MB);
1da177e4 14312 } else {
63c3a66f 14313 tg3_flag_set(tp, WOL_SPEED_100MB);
1da177e4
LT
14314 }
14315
7f97a4bd 14316 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
f07e9af3 14317 tp->phy_flags |= TG3_PHYFLG_IS_FET;
7f97a4bd 14318
1da177e4 14319 /* A few boards don't want Ethernet@WireSpeed phy feature */
6ff6f81d
MC
14320 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14321 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
1da177e4 14322 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
747e8f8b 14323 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
f07e9af3
MC
14324 (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
14325 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
14326 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
1da177e4
LT
14327
14328 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
14329 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
f07e9af3 14330 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
1da177e4 14331 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
f07e9af3 14332 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
1da177e4 14333
63c3a66f 14334 if (tg3_flag(tp, 5705_PLUS) &&
f07e9af3 14335 !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
321d32a0 14336 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
f6eb9b1f 14337 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 &&
63c3a66f 14338 !tg3_flag(tp, 57765_PLUS)) {
c424cb24 14339 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
d30cdd28 14340 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
9936bcf6
MC
14341 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14342 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
d4011ada
MC
14343 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
14344 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
f07e9af3 14345 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
c1d2a196 14346 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
f07e9af3 14347 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
321d32a0 14348 } else
f07e9af3 14349 tp->phy_flags |= TG3_PHYFLG_BER_BUG;
c424cb24 14350 }
1da177e4 14351
b2a5c19c
MC
14352 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
14353 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
14354 tp->phy_otp = tg3_read_otp_phycfg(tp);
14355 if (tp->phy_otp == 0)
14356 tp->phy_otp = TG3_OTP_DEFAULT;
14357 }
14358
63c3a66f 14359 if (tg3_flag(tp, CPMU_PRESENT))
8ef21428
MC
14360 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
14361 else
14362 tp->mi_mode = MAC_MI_MODE_BASE;
14363
1da177e4 14364 tp->coalesce_mode = 0;
1da177e4
LT
14365 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
14366 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
14367 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
14368
4d958473
MC
14369 /* Set these bits to enable statistics workaround. */
14370 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14371 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
14372 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) {
14373 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
14374 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
14375 }
14376
321d32a0
MC
14377 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14378 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
63c3a66f 14379 tg3_flag_set(tp, USE_PHYLIB);
57e6983c 14380
158d7abd
MC
14381 err = tg3_mdio_init(tp);
14382 if (err)
14383 return err;
1da177e4
LT
14384
14385 /* Initialize data/descriptor byte/word swapping. */
14386 val = tr32(GRC_MODE);
f2096f94
MC
14387 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14388 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
14389 GRC_MODE_WORD_SWAP_B2HRX_DATA |
14390 GRC_MODE_B2HRX_ENABLE |
14391 GRC_MODE_HTX2B_ENABLE |
14392 GRC_MODE_HOST_STACKUP);
14393 else
14394 val &= GRC_MODE_HOST_STACKUP;
14395
1da177e4
LT
14396 tw32(GRC_MODE, val | tp->grc_mode);
14397
14398 tg3_switch_clocks(tp);
14399
14400 /* Clear this out for sanity. */
14401 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
14402
14403 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14404 &pci_state_reg);
14405 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
63c3a66f 14406 !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
1da177e4
LT
14407 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
14408
14409 if (chiprevid == CHIPREV_ID_5701_A0 ||
14410 chiprevid == CHIPREV_ID_5701_B0 ||
14411 chiprevid == CHIPREV_ID_5701_B2 ||
14412 chiprevid == CHIPREV_ID_5701_B5) {
14413 void __iomem *sram_base;
14414
14415 /* Write some dummy words into the SRAM status block
14416 * area, see if it reads back correctly. If the return
14417 * value is bad, force enable the PCIX workaround.
14418 */
14419 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
14420
14421 writel(0x00000000, sram_base);
14422 writel(0x00000000, sram_base + 4);
14423 writel(0xffffffff, sram_base + 4);
14424 if (readl(sram_base) != 0x00000000)
63c3a66f 14425 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
1da177e4
LT
14426 }
14427 }
14428
14429 udelay(50);
14430 tg3_nvram_init(tp);
14431
14432 grc_misc_cfg = tr32(GRC_MISC_CFG);
14433 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
14434
1da177e4
LT
14435 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14436 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
14437 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
63c3a66f 14438 tg3_flag_set(tp, IS_5788);
1da177e4 14439
63c3a66f 14440 if (!tg3_flag(tp, IS_5788) &&
6ff6f81d 14441 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
63c3a66f
JP
14442 tg3_flag_set(tp, TAGGED_STATUS);
14443 if (tg3_flag(tp, TAGGED_STATUS)) {
fac9b83e
DM
14444 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
14445 HOSTCC_MODE_CLRTICK_TXBD);
14446
14447 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
14448 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14449 tp->misc_host_ctrl);
14450 }
14451
3bda1258 14452 /* Preserve the APE MAC_MODE bits */
63c3a66f 14453 if (tg3_flag(tp, ENABLE_APE))
d2394e6b 14454 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
3bda1258 14455 else
6e01b20b 14456 tp->mac_mode = 0;
3bda1258 14457
1da177e4
LT
14458 /* these are limited to 10/100 only */
14459 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14460 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
14461 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14462 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
14463 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
14464 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
14465 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
14466 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
14467 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
676917d4
MC
14468 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
14469 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
321d32a0 14470 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 ||
d1101142
MC
14471 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
14472 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
f07e9af3
MC
14473 (tp->phy_flags & TG3_PHYFLG_IS_FET))
14474 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
1da177e4
LT
14475
14476 err = tg3_phy_probe(tp);
14477 if (err) {
2445e461 14478 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
1da177e4 14479 /* ... but do not return immediately ... */
b02fd9e3 14480 tg3_mdio_fini(tp);
1da177e4
LT
14481 }
14482
184b8904 14483 tg3_read_vpd(tp);
c4e6575c 14484 tg3_read_fw_ver(tp);
1da177e4 14485
f07e9af3
MC
14486 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
14487 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
1da177e4
LT
14488 } else {
14489 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
f07e9af3 14490 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
1da177e4 14491 else
f07e9af3 14492 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
1da177e4
LT
14493 }
14494
14495 /* 5700 {AX,BX} chips have a broken status block link
14496 * change bit implementation, so we must use the
14497 * status register in those cases.
14498 */
14499 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
63c3a66f 14500 tg3_flag_set(tp, USE_LINKCHG_REG);
1da177e4 14501 else
63c3a66f 14502 tg3_flag_clear(tp, USE_LINKCHG_REG);
1da177e4
LT
14503
14504 /* The led_ctrl is set during tg3_phy_probe, here we might
14505 * have to force the link status polling mechanism based
14506 * upon subsystem IDs.
14507 */
14508 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
007a880d 14509 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
f07e9af3
MC
14510 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
14511 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
63c3a66f 14512 tg3_flag_set(tp, USE_LINKCHG_REG);
1da177e4
LT
14513 }
14514
14515 /* For all SERDES we poll the MAC status register. */
f07e9af3 14516 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
63c3a66f 14517 tg3_flag_set(tp, POLL_SERDES);
1da177e4 14518 else
63c3a66f 14519 tg3_flag_clear(tp, POLL_SERDES);
1da177e4 14520
bf933c80 14521 tp->rx_offset = NET_IP_ALIGN;
d2757fc4 14522 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
1da177e4 14523 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
63c3a66f 14524 tg3_flag(tp, PCIX_MODE)) {
bf933c80 14525 tp->rx_offset = 0;
d2757fc4 14526#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
9dc7a113 14527 tp->rx_copy_thresh = ~(u16)0;
d2757fc4
MC
14528#endif
14529 }
1da177e4 14530
2c49a44d
MC
14531 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
14532 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
7cb32cf2
MC
14533 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
14534
2c49a44d 14535 tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
f92905de
MC
14536
14537 /* Increment the rx prod index on the rx std ring by at most
14538 * 8 for these chips to workaround hw errata.
14539 */
14540 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
14541 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
14542 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
14543 tp->rx_std_max_post = 8;
14544
63c3a66f 14545 if (tg3_flag(tp, ASPM_WORKAROUND))
8ed5d97e
MC
14546 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
14547 PCIE_PWR_MGMT_L1_THRESH_MSK;
14548
1da177e4
LT
14549 return err;
14550}
14551
49b6e95f 14552#ifdef CONFIG_SPARC
1da177e4
LT
14553static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
14554{
14555 struct net_device *dev = tp->dev;
14556 struct pci_dev *pdev = tp->pdev;
49b6e95f 14557 struct device_node *dp = pci_device_to_OF_node(pdev);
374d4cac 14558 const unsigned char *addr;
49b6e95f
DM
14559 int len;
14560
14561 addr = of_get_property(dp, "local-mac-address", &len);
14562 if (addr && len == 6) {
14563 memcpy(dev->dev_addr, addr, 6);
14564 memcpy(dev->perm_addr, dev->dev_addr, 6);
14565 return 0;
1da177e4
LT
14566 }
14567 return -ENODEV;
14568}
14569
14570static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
14571{
14572 struct net_device *dev = tp->dev;
14573
14574 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
2ff43697 14575 memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
1da177e4
LT
14576 return 0;
14577}
14578#endif
14579
14580static int __devinit tg3_get_device_address(struct tg3 *tp)
14581{
14582 struct net_device *dev = tp->dev;
14583 u32 hi, lo, mac_offset;
008652b3 14584 int addr_ok = 0;
1da177e4 14585
49b6e95f 14586#ifdef CONFIG_SPARC
1da177e4
LT
14587 if (!tg3_get_macaddr_sparc(tp))
14588 return 0;
14589#endif
14590
14591 mac_offset = 0x7c;
6ff6f81d 14592 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
63c3a66f 14593 tg3_flag(tp, 5780_CLASS)) {
1da177e4
LT
14594 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
14595 mac_offset = 0xcc;
14596 if (tg3_nvram_lock(tp))
14597 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
14598 else
14599 tg3_nvram_unlock(tp);
63c3a66f 14600 } else if (tg3_flag(tp, 5717_PLUS)) {
69f11c99 14601 if (tp->pci_fn & 1)
a1b950d5 14602 mac_offset = 0xcc;
69f11c99 14603 if (tp->pci_fn > 1)
a50d0796 14604 mac_offset += 0x18c;
a1b950d5 14605 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
b5d3772c 14606 mac_offset = 0x10;
1da177e4
LT
14607
14608 /* First try to get it from MAC address mailbox. */
14609 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
14610 if ((hi >> 16) == 0x484b) {
14611 dev->dev_addr[0] = (hi >> 8) & 0xff;
14612 dev->dev_addr[1] = (hi >> 0) & 0xff;
14613
14614 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
14615 dev->dev_addr[2] = (lo >> 24) & 0xff;
14616 dev->dev_addr[3] = (lo >> 16) & 0xff;
14617 dev->dev_addr[4] = (lo >> 8) & 0xff;
14618 dev->dev_addr[5] = (lo >> 0) & 0xff;
1da177e4 14619
008652b3
MC
14620 /* Some old bootcode may report a 0 MAC address in SRAM */
14621 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
14622 }
14623 if (!addr_ok) {
14624 /* Next, try NVRAM. */
63c3a66f 14625 if (!tg3_flag(tp, NO_NVRAM) &&
df259d8c 14626 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
6d348f2c 14627 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
62cedd11
MC
14628 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
14629 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
008652b3
MC
14630 }
14631 /* Finally just fetch it out of the MAC control regs. */
14632 else {
14633 hi = tr32(MAC_ADDR_0_HIGH);
14634 lo = tr32(MAC_ADDR_0_LOW);
14635
14636 dev->dev_addr[5] = lo & 0xff;
14637 dev->dev_addr[4] = (lo >> 8) & 0xff;
14638 dev->dev_addr[3] = (lo >> 16) & 0xff;
14639 dev->dev_addr[2] = (lo >> 24) & 0xff;
14640 dev->dev_addr[1] = hi & 0xff;
14641 dev->dev_addr[0] = (hi >> 8) & 0xff;
14642 }
1da177e4
LT
14643 }
14644
14645 if (!is_valid_ether_addr(&dev->dev_addr[0])) {
7582a335 14646#ifdef CONFIG_SPARC
1da177e4
LT
14647 if (!tg3_get_default_macaddr_sparc(tp))
14648 return 0;
14649#endif
14650 return -EINVAL;
14651 }
2ff43697 14652 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
1da177e4
LT
14653 return 0;
14654}
14655
59e6b434
DM
14656#define BOUNDARY_SINGLE_CACHELINE 1
14657#define BOUNDARY_MULTI_CACHELINE 2
14658
14659static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
14660{
14661 int cacheline_size;
14662 u8 byte;
14663 int goal;
14664
14665 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
14666 if (byte == 0)
14667 cacheline_size = 1024;
14668 else
14669 cacheline_size = (int) byte * 4;
14670
14671 /* On 5703 and later chips, the boundary bits have no
14672 * effect.
14673 */
14674 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14675 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
63c3a66f 14676 !tg3_flag(tp, PCI_EXPRESS))
59e6b434
DM
14677 goto out;
14678
14679#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
14680 goal = BOUNDARY_MULTI_CACHELINE;
14681#else
14682#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
14683 goal = BOUNDARY_SINGLE_CACHELINE;
14684#else
14685 goal = 0;
14686#endif
14687#endif
14688
63c3a66f 14689 if (tg3_flag(tp, 57765_PLUS)) {
cbf9ca6c
MC
14690 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
14691 goto out;
14692 }
14693
59e6b434
DM
14694 if (!goal)
14695 goto out;
14696
14697 /* PCI controllers on most RISC systems tend to disconnect
14698 * when a device tries to burst across a cache-line boundary.
14699 * Therefore, letting tg3 do so just wastes PCI bandwidth.
14700 *
14701 * Unfortunately, for PCI-E there are only limited
14702 * write-side controls for this, and thus for reads
14703 * we will still get the disconnects. We'll also waste
14704 * these PCI cycles for both read and write for chips
14705 * other than 5700 and 5701 which do not implement the
14706 * boundary bits.
14707 */
63c3a66f 14708 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
59e6b434
DM
14709 switch (cacheline_size) {
14710 case 16:
14711 case 32:
14712 case 64:
14713 case 128:
14714 if (goal == BOUNDARY_SINGLE_CACHELINE) {
14715 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
14716 DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
14717 } else {
14718 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
14719 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
14720 }
14721 break;
14722
14723 case 256:
14724 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
14725 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
14726 break;
14727
14728 default:
14729 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
14730 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
14731 break;
855e1111 14732 }
63c3a66f 14733 } else if (tg3_flag(tp, PCI_EXPRESS)) {
59e6b434
DM
14734 switch (cacheline_size) {
14735 case 16:
14736 case 32:
14737 case 64:
14738 if (goal == BOUNDARY_SINGLE_CACHELINE) {
14739 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
14740 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
14741 break;
14742 }
14743 /* fallthrough */
14744 case 128:
14745 default:
14746 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
14747 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
14748 break;
855e1111 14749 }
59e6b434
DM
14750 } else {
14751 switch (cacheline_size) {
14752 case 16:
14753 if (goal == BOUNDARY_SINGLE_CACHELINE) {
14754 val |= (DMA_RWCTRL_READ_BNDRY_16 |
14755 DMA_RWCTRL_WRITE_BNDRY_16);
14756 break;
14757 }
14758 /* fallthrough */
14759 case 32:
14760 if (goal == BOUNDARY_SINGLE_CACHELINE) {
14761 val |= (DMA_RWCTRL_READ_BNDRY_32 |
14762 DMA_RWCTRL_WRITE_BNDRY_32);
14763 break;
14764 }
14765 /* fallthrough */
14766 case 64:
14767 if (goal == BOUNDARY_SINGLE_CACHELINE) {
14768 val |= (DMA_RWCTRL_READ_BNDRY_64 |
14769 DMA_RWCTRL_WRITE_BNDRY_64);
14770 break;
14771 }
14772 /* fallthrough */
14773 case 128:
14774 if (goal == BOUNDARY_SINGLE_CACHELINE) {
14775 val |= (DMA_RWCTRL_READ_BNDRY_128 |
14776 DMA_RWCTRL_WRITE_BNDRY_128);
14777 break;
14778 }
14779 /* fallthrough */
14780 case 256:
14781 val |= (DMA_RWCTRL_READ_BNDRY_256 |
14782 DMA_RWCTRL_WRITE_BNDRY_256);
14783 break;
14784 case 512:
14785 val |= (DMA_RWCTRL_READ_BNDRY_512 |
14786 DMA_RWCTRL_WRITE_BNDRY_512);
14787 break;
14788 case 1024:
14789 default:
14790 val |= (DMA_RWCTRL_READ_BNDRY_1024 |
14791 DMA_RWCTRL_WRITE_BNDRY_1024);
14792 break;
855e1111 14793 }
59e6b434
DM
14794 }
14795
14796out:
14797 return val;
14798}
14799
1da177e4
LT
14800static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
14801{
14802 struct tg3_internal_buffer_desc test_desc;
14803 u32 sram_dma_descs;
14804 int i, ret;
14805
14806 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
14807
14808 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
14809 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
14810 tw32(RDMAC_STATUS, 0);
14811 tw32(WDMAC_STATUS, 0);
14812
14813 tw32(BUFMGR_MODE, 0);
14814 tw32(FTQ_RESET, 0);
14815
14816 test_desc.addr_hi = ((u64) buf_dma) >> 32;
14817 test_desc.addr_lo = buf_dma & 0xffffffff;
14818 test_desc.nic_mbuf = 0x00002100;
14819 test_desc.len = size;
14820
14821 /*
14822 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
14823 * the *second* time the tg3 driver was getting loaded after an
14824 * initial scan.
14825 *
14826 * Broadcom tells me:
14827 * ...the DMA engine is connected to the GRC block and a DMA
14828 * reset may affect the GRC block in some unpredictable way...
14829 * The behavior of resets to individual blocks has not been tested.
14830 *
14831 * Broadcom noted the GRC reset will also reset all sub-components.
14832 */
14833 if (to_device) {
14834 test_desc.cqid_sqid = (13 << 8) | 2;
14835
14836 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
14837 udelay(40);
14838 } else {
14839 test_desc.cqid_sqid = (16 << 8) | 7;
14840
14841 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
14842 udelay(40);
14843 }
14844 test_desc.flags = 0x00000005;
14845
14846 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
14847 u32 val;
14848
14849 val = *(((u32 *)&test_desc) + i);
14850 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
14851 sram_dma_descs + (i * sizeof(u32)));
14852 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
14853 }
14854 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
14855
859a5887 14856 if (to_device)
1da177e4 14857 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
859a5887 14858 else
1da177e4 14859 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
1da177e4
LT
14860
14861 ret = -ENODEV;
14862 for (i = 0; i < 40; i++) {
14863 u32 val;
14864
14865 if (to_device)
14866 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
14867 else
14868 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
14869 if ((val & 0xffff) == sram_dma_descs) {
14870 ret = 0;
14871 break;
14872 }
14873
14874 udelay(100);
14875 }
14876
14877 return ret;
14878}
14879
ded7340d 14880#define TEST_BUFFER_SIZE 0x2000
1da177e4 14881
4143470c 14882static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
895950c2
JP
14883 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
14884 { },
14885};
14886
1da177e4
LT
14887static int __devinit tg3_test_dma(struct tg3 *tp)
14888{
14889 dma_addr_t buf_dma;
59e6b434 14890 u32 *buf, saved_dma_rwctrl;
cbf9ca6c 14891 int ret = 0;
1da177e4 14892
4bae65c8
MC
14893 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
14894 &buf_dma, GFP_KERNEL);
1da177e4
LT
14895 if (!buf) {
14896 ret = -ENOMEM;
14897 goto out_nofree;
14898 }
14899
14900 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
14901 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
14902
59e6b434 14903 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
1da177e4 14904
63c3a66f 14905 if (tg3_flag(tp, 57765_PLUS))
cbf9ca6c
MC
14906 goto out;
14907
63c3a66f 14908 if (tg3_flag(tp, PCI_EXPRESS)) {
1da177e4
LT
14909 /* DMA read watermark not used on PCIE */
14910 tp->dma_rwctrl |= 0x00180000;
63c3a66f 14911 } else if (!tg3_flag(tp, PCIX_MODE)) {
85e94ced
MC
14912 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
14913 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
1da177e4
LT
14914 tp->dma_rwctrl |= 0x003f0000;
14915 else
14916 tp->dma_rwctrl |= 0x003f000f;
14917 } else {
14918 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
14919 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
14920 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
49afdeb6 14921 u32 read_water = 0x7;
1da177e4 14922
4a29cc2e
MC
14923 /* If the 5704 is behind the EPB bridge, we can
14924 * do the less restrictive ONE_DMA workaround for
14925 * better performance.
14926 */
63c3a66f 14927 if (tg3_flag(tp, 40BIT_DMA_BUG) &&
4a29cc2e
MC
14928 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
14929 tp->dma_rwctrl |= 0x8000;
14930 else if (ccval == 0x6 || ccval == 0x7)
1da177e4
LT
14931 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
14932
49afdeb6
MC
14933 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
14934 read_water = 4;
59e6b434 14935 /* Set bit 23 to enable PCIX hw bug fix */
49afdeb6
MC
14936 tp->dma_rwctrl |=
14937 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
14938 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
14939 (1 << 23);
4cf78e4f
MC
14940 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
14941 /* 5780 always in PCIX mode */
14942 tp->dma_rwctrl |= 0x00144000;
a4e2b347
MC
14943 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
14944 /* 5714 always in PCIX mode */
14945 tp->dma_rwctrl |= 0x00148000;
1da177e4
LT
14946 } else {
14947 tp->dma_rwctrl |= 0x001b000f;
14948 }
14949 }
14950
14951 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
14952 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
14953 tp->dma_rwctrl &= 0xfffffff0;
14954
14955 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14956 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
14957 /* Remove this if it causes problems for some boards. */
14958 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
14959
14960 /* On 5700/5701 chips, we need to set this bit.
14961 * Otherwise the chip will issue cacheline transactions
14962 * to streamable DMA memory with not all the byte
14963 * enables turned on. This is an error on several
14964 * RISC PCI controllers, in particular sparc64.
14965 *
14966 * On 5703/5704 chips, this bit has been reassigned
14967 * a different meaning. In particular, it is used
14968 * on those chips to enable a PCI-X workaround.
14969 */
14970 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
14971 }
14972
14973 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
14974
14975#if 0
14976 /* Unneeded, already done by tg3_get_invariants. */
14977 tg3_switch_clocks(tp);
14978#endif
14979
1da177e4
LT
14980 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14981 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
14982 goto out;
14983
59e6b434
DM
14984 /* It is best to perform DMA test with maximum write burst size
14985 * to expose the 5700/5701 write DMA bug.
14986 */
14987 saved_dma_rwctrl = tp->dma_rwctrl;
14988 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
14989 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
14990
1da177e4
LT
14991 while (1) {
14992 u32 *p = buf, i;
14993
14994 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
14995 p[i] = i;
14996
14997 /* Send the buffer to the chip. */
14998 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
14999 if (ret) {
2445e461
MC
15000 dev_err(&tp->pdev->dev,
15001 "%s: Buffer write failed. err = %d\n",
15002 __func__, ret);
1da177e4
LT
15003 break;
15004 }
15005
15006#if 0
15007 /* validate data reached card RAM correctly. */
15008 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15009 u32 val;
15010 tg3_read_mem(tp, 0x2100 + (i*4), &val);
15011 if (le32_to_cpu(val) != p[i]) {
2445e461
MC
15012 dev_err(&tp->pdev->dev,
15013 "%s: Buffer corrupted on device! "
15014 "(%d != %d)\n", __func__, val, i);
1da177e4
LT
15015 /* ret = -ENODEV here? */
15016 }
15017 p[i] = 0;
15018 }
15019#endif
15020 /* Now read it back. */
15021 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
15022 if (ret) {
5129c3a3
MC
15023 dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
15024 "err = %d\n", __func__, ret);
1da177e4
LT
15025 break;
15026 }
15027
15028 /* Verify it. */
15029 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15030 if (p[i] == i)
15031 continue;
15032
59e6b434
DM
15033 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15034 DMA_RWCTRL_WRITE_BNDRY_16) {
15035 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
1da177e4
LT
15036 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15037 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15038 break;
15039 } else {
2445e461
MC
15040 dev_err(&tp->pdev->dev,
15041 "%s: Buffer corrupted on read back! "
15042 "(%d != %d)\n", __func__, p[i], i);
1da177e4
LT
15043 ret = -ENODEV;
15044 goto out;
15045 }
15046 }
15047
15048 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
15049 /* Success. */
15050 ret = 0;
15051 break;
15052 }
15053 }
59e6b434
DM
15054 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15055 DMA_RWCTRL_WRITE_BNDRY_16) {
15056 /* DMA test passed without adjusting DMA boundary,
6d1cfbab
MC
15057 * now look for chipsets that are known to expose the
15058 * DMA bug without failing the test.
59e6b434 15059 */
4143470c 15060 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
6d1cfbab
MC
15061 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15062 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
859a5887 15063 } else {
6d1cfbab
MC
15064 /* Safe to use the calculated DMA boundary. */
15065 tp->dma_rwctrl = saved_dma_rwctrl;
859a5887 15066 }
6d1cfbab 15067
59e6b434
DM
15068 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15069 }
1da177e4
LT
15070
15071out:
4bae65c8 15072 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
1da177e4
LT
15073out_nofree:
15074 return ret;
15075}
15076
1da177e4
LT
15077static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
15078{
63c3a66f 15079 if (tg3_flag(tp, 57765_PLUS)) {
666bc831
MC
15080 tp->bufmgr_config.mbuf_read_dma_low_water =
15081 DEFAULT_MB_RDMA_LOW_WATER_5705;
15082 tp->bufmgr_config.mbuf_mac_rx_low_water =
15083 DEFAULT_MB_MACRX_LOW_WATER_57765;
15084 tp->bufmgr_config.mbuf_high_water =
15085 DEFAULT_MB_HIGH_WATER_57765;
15086
15087 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15088 DEFAULT_MB_RDMA_LOW_WATER_5705;
15089 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15090 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
15091 tp->bufmgr_config.mbuf_high_water_jumbo =
15092 DEFAULT_MB_HIGH_WATER_JUMBO_57765;
63c3a66f 15093 } else if (tg3_flag(tp, 5705_PLUS)) {
fdfec172
MC
15094 tp->bufmgr_config.mbuf_read_dma_low_water =
15095 DEFAULT_MB_RDMA_LOW_WATER_5705;
15096 tp->bufmgr_config.mbuf_mac_rx_low_water =
15097 DEFAULT_MB_MACRX_LOW_WATER_5705;
15098 tp->bufmgr_config.mbuf_high_water =
15099 DEFAULT_MB_HIGH_WATER_5705;
b5d3772c
MC
15100 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
15101 tp->bufmgr_config.mbuf_mac_rx_low_water =
15102 DEFAULT_MB_MACRX_LOW_WATER_5906;
15103 tp->bufmgr_config.mbuf_high_water =
15104 DEFAULT_MB_HIGH_WATER_5906;
15105 }
fdfec172
MC
15106
15107 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15108 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
15109 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15110 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
15111 tp->bufmgr_config.mbuf_high_water_jumbo =
15112 DEFAULT_MB_HIGH_WATER_JUMBO_5780;
15113 } else {
15114 tp->bufmgr_config.mbuf_read_dma_low_water =
15115 DEFAULT_MB_RDMA_LOW_WATER;
15116 tp->bufmgr_config.mbuf_mac_rx_low_water =
15117 DEFAULT_MB_MACRX_LOW_WATER;
15118 tp->bufmgr_config.mbuf_high_water =
15119 DEFAULT_MB_HIGH_WATER;
15120
15121 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15122 DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
15123 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15124 DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
15125 tp->bufmgr_config.mbuf_high_water_jumbo =
15126 DEFAULT_MB_HIGH_WATER_JUMBO;
15127 }
1da177e4
LT
15128
15129 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
15130 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
15131}
15132
15133static char * __devinit tg3_phy_string(struct tg3 *tp)
15134{
79eb6904
MC
15135 switch (tp->phy_id & TG3_PHY_ID_MASK) {
15136 case TG3_PHY_ID_BCM5400: return "5400";
15137 case TG3_PHY_ID_BCM5401: return "5401";
15138 case TG3_PHY_ID_BCM5411: return "5411";
15139 case TG3_PHY_ID_BCM5701: return "5701";
15140 case TG3_PHY_ID_BCM5703: return "5703";
15141 case TG3_PHY_ID_BCM5704: return "5704";
15142 case TG3_PHY_ID_BCM5705: return "5705";
15143 case TG3_PHY_ID_BCM5750: return "5750";
15144 case TG3_PHY_ID_BCM5752: return "5752";
15145 case TG3_PHY_ID_BCM5714: return "5714";
15146 case TG3_PHY_ID_BCM5780: return "5780";
15147 case TG3_PHY_ID_BCM5755: return "5755";
15148 case TG3_PHY_ID_BCM5787: return "5787";
15149 case TG3_PHY_ID_BCM5784: return "5784";
15150 case TG3_PHY_ID_BCM5756: return "5722/5756";
15151 case TG3_PHY_ID_BCM5906: return "5906";
15152 case TG3_PHY_ID_BCM5761: return "5761";
15153 case TG3_PHY_ID_BCM5718C: return "5718C";
15154 case TG3_PHY_ID_BCM5718S: return "5718S";
15155 case TG3_PHY_ID_BCM57765: return "57765";
302b500b 15156 case TG3_PHY_ID_BCM5719C: return "5719C";
6418f2c1 15157 case TG3_PHY_ID_BCM5720C: return "5720C";
79eb6904 15158 case TG3_PHY_ID_BCM8002: return "8002/serdes";
1da177e4
LT
15159 case 0: return "serdes";
15160 default: return "unknown";
855e1111 15161 }
1da177e4
LT
15162}
15163
f9804ddb
MC
15164static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
15165{
63c3a66f 15166 if (tg3_flag(tp, PCI_EXPRESS)) {
f9804ddb
MC
15167 strcpy(str, "PCI Express");
15168 return str;
63c3a66f 15169 } else if (tg3_flag(tp, PCIX_MODE)) {
f9804ddb
MC
15170 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
15171
15172 strcpy(str, "PCIX:");
15173
15174 if ((clock_ctrl == 7) ||
15175 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
15176 GRC_MISC_CFG_BOARD_ID_5704CIOBE))
15177 strcat(str, "133MHz");
15178 else if (clock_ctrl == 0)
15179 strcat(str, "33MHz");
15180 else if (clock_ctrl == 2)
15181 strcat(str, "50MHz");
15182 else if (clock_ctrl == 4)
15183 strcat(str, "66MHz");
15184 else if (clock_ctrl == 6)
15185 strcat(str, "100MHz");
f9804ddb
MC
15186 } else {
15187 strcpy(str, "PCI:");
63c3a66f 15188 if (tg3_flag(tp, PCI_HIGH_SPEED))
f9804ddb
MC
15189 strcat(str, "66MHz");
15190 else
15191 strcat(str, "33MHz");
15192 }
63c3a66f 15193 if (tg3_flag(tp, PCI_32BIT))
f9804ddb
MC
15194 strcat(str, ":32-bit");
15195 else
15196 strcat(str, ":64-bit");
15197 return str;
15198}
15199
8c2dc7e1 15200static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
1da177e4
LT
15201{
15202 struct pci_dev *peer;
15203 unsigned int func, devnr = tp->pdev->devfn & ~7;
15204
15205 for (func = 0; func < 8; func++) {
15206 peer = pci_get_slot(tp->pdev->bus, devnr | func);
15207 if (peer && peer != tp->pdev)
15208 break;
15209 pci_dev_put(peer);
15210 }
16fe9d74
MC
15211 /* 5704 can be configured in single-port mode, set peer to
15212 * tp->pdev in that case.
15213 */
15214 if (!peer) {
15215 peer = tp->pdev;
15216 return peer;
15217 }
1da177e4
LT
15218
15219 /*
15220 * We don't need to keep the refcount elevated; there's no way
15221 * to remove one half of this device without removing the other
15222 */
15223 pci_dev_put(peer);
15224
15225 return peer;
15226}
15227
15f9850d
DM
15228static void __devinit tg3_init_coal(struct tg3 *tp)
15229{
15230 struct ethtool_coalesce *ec = &tp->coal;
15231
15232 memset(ec, 0, sizeof(*ec));
15233 ec->cmd = ETHTOOL_GCOALESCE;
15234 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
15235 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
15236 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
15237 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
15238 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
15239 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
15240 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
15241 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
15242 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
15243
15244 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
15245 HOSTCC_MODE_CLRTICK_TXBD)) {
15246 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
15247 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
15248 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
15249 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
15250 }
d244c892 15251
63c3a66f 15252 if (tg3_flag(tp, 5705_PLUS)) {
d244c892
MC
15253 ec->rx_coalesce_usecs_irq = 0;
15254 ec->tx_coalesce_usecs_irq = 0;
15255 ec->stats_block_coalesce_usecs = 0;
15256 }
15f9850d
DM
15257}
15258
7c7d64b8
SH
15259static const struct net_device_ops tg3_netdev_ops = {
15260 .ndo_open = tg3_open,
15261 .ndo_stop = tg3_close,
00829823 15262 .ndo_start_xmit = tg3_start_xmit,
511d2224 15263 .ndo_get_stats64 = tg3_get_stats64,
00829823 15264 .ndo_validate_addr = eth_validate_addr,
afc4b13d 15265 .ndo_set_rx_mode = tg3_set_rx_mode,
00829823
SH
15266 .ndo_set_mac_address = tg3_set_mac_addr,
15267 .ndo_do_ioctl = tg3_ioctl,
15268 .ndo_tx_timeout = tg3_tx_timeout,
15269 .ndo_change_mtu = tg3_change_mtu,
dc668910 15270 .ndo_fix_features = tg3_fix_features,
06c03c02 15271 .ndo_set_features = tg3_set_features,
00829823
SH
15272#ifdef CONFIG_NET_POLL_CONTROLLER
15273 .ndo_poll_controller = tg3_poll_controller,
15274#endif
15275};
15276
1da177e4
LT
15277static int __devinit tg3_init_one(struct pci_dev *pdev,
15278 const struct pci_device_id *ent)
15279{
1da177e4
LT
15280 struct net_device *dev;
15281 struct tg3 *tp;
646c9edd
MC
15282 int i, err, pm_cap;
15283 u32 sndmbx, rcvmbx, intmbx;
f9804ddb 15284 char str[40];
72f2afb8 15285 u64 dma_mask, persist_dma_mask;
0da0606f 15286 u32 features = 0;
1da177e4 15287
05dbe005 15288 printk_once(KERN_INFO "%s\n", version);
1da177e4
LT
15289
15290 err = pci_enable_device(pdev);
15291 if (err) {
2445e461 15292 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
1da177e4
LT
15293 return err;
15294 }
15295
1da177e4
LT
15296 err = pci_request_regions(pdev, DRV_MODULE_NAME);
15297 if (err) {
2445e461 15298 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
1da177e4
LT
15299 goto err_out_disable_pdev;
15300 }
15301
15302 pci_set_master(pdev);
15303
15304 /* Find power-management capability. */
15305 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
15306 if (pm_cap == 0) {
2445e461
MC
15307 dev_err(&pdev->dev,
15308 "Cannot find Power Management capability, aborting\n");
1da177e4
LT
15309 err = -EIO;
15310 goto err_out_free_res;
15311 }
15312
16821285
MC
15313 err = pci_set_power_state(pdev, PCI_D0);
15314 if (err) {
15315 dev_err(&pdev->dev, "Transition to D0 failed, aborting\n");
15316 goto err_out_free_res;
15317 }
15318
fe5f5787 15319 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
1da177e4 15320 if (!dev) {
2445e461 15321 dev_err(&pdev->dev, "Etherdev alloc failed, aborting\n");
1da177e4 15322 err = -ENOMEM;
16821285 15323 goto err_out_power_down;
1da177e4
LT
15324 }
15325
1da177e4
LT
15326 SET_NETDEV_DEV(dev, &pdev->dev);
15327
1da177e4
LT
15328 tp = netdev_priv(dev);
15329 tp->pdev = pdev;
15330 tp->dev = dev;
15331 tp->pm_cap = pm_cap;
1da177e4
LT
15332 tp->rx_mode = TG3_DEF_RX_MODE;
15333 tp->tx_mode = TG3_DEF_TX_MODE;
8ef21428 15334
1da177e4
LT
15335 if (tg3_debug > 0)
15336 tp->msg_enable = tg3_debug;
15337 else
15338 tp->msg_enable = TG3_DEF_MSG_ENABLE;
15339
15340 /* The word/byte swap controls here control register access byte
15341 * swapping. DMA data byte swapping is controlled in the GRC_MODE
15342 * setting below.
15343 */
15344 tp->misc_host_ctrl =
15345 MISC_HOST_CTRL_MASK_PCI_INT |
15346 MISC_HOST_CTRL_WORD_SWAP |
15347 MISC_HOST_CTRL_INDIR_ACCESS |
15348 MISC_HOST_CTRL_PCISTATE_RW;
15349
15350 /* The NONFRM (non-frame) byte/word swap controls take effect
15351 * on descriptor entries, anything which isn't packet data.
15352 *
15353 * The StrongARM chips on the board (one for tx, one for rx)
15354 * are running in big-endian mode.
15355 */
15356 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
15357 GRC_MODE_WSWAP_NONFRM_DATA);
15358#ifdef __BIG_ENDIAN
15359 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
15360#endif
15361 spin_lock_init(&tp->lock);
1da177e4 15362 spin_lock_init(&tp->indirect_lock);
c4028958 15363 INIT_WORK(&tp->reset_task, tg3_reset_task);
1da177e4 15364
d5fe488a 15365 tp->regs = pci_ioremap_bar(pdev, BAR_0);
ab0049b4 15366 if (!tp->regs) {
ab96b241 15367 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
1da177e4
LT
15368 err = -ENOMEM;
15369 goto err_out_free_dev;
15370 }
15371
c9cab24e
MC
15372 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
15373 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
15374 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
15375 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
15376 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15377 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
15378 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
15379 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) {
15380 tg3_flag_set(tp, ENABLE_APE);
15381 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
15382 if (!tp->aperegs) {
15383 dev_err(&pdev->dev,
15384 "Cannot map APE registers, aborting\n");
15385 err = -ENOMEM;
15386 goto err_out_iounmap;
15387 }
15388 }
15389
1da177e4
LT
15390 tp->rx_pending = TG3_DEF_RX_RING_PENDING;
15391 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
1da177e4 15392
1da177e4 15393 dev->ethtool_ops = &tg3_ethtool_ops;
1da177e4 15394 dev->watchdog_timeo = TG3_TX_TIMEOUT;
2ffcc981 15395 dev->netdev_ops = &tg3_netdev_ops;
1da177e4 15396 dev->irq = pdev->irq;
1da177e4
LT
15397
15398 err = tg3_get_invariants(tp);
15399 if (err) {
ab96b241
MC
15400 dev_err(&pdev->dev,
15401 "Problem fetching invariants of chip, aborting\n");
c9cab24e 15402 goto err_out_apeunmap;
1da177e4
LT
15403 }
15404
4a29cc2e
MC
15405 /* The EPB bridge inside 5714, 5715, and 5780 and any
15406 * device behind the EPB cannot support DMA addresses > 40-bit.
72f2afb8
MC
15407 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
15408 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
15409 * do DMA address check in tg3_start_xmit().
15410 */
63c3a66f 15411 if (tg3_flag(tp, IS_5788))
284901a9 15412 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
63c3a66f 15413 else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
50cf156a 15414 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
72f2afb8 15415#ifdef CONFIG_HIGHMEM
6a35528a 15416 dma_mask = DMA_BIT_MASK(64);
72f2afb8 15417#endif
4a29cc2e 15418 } else
6a35528a 15419 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
72f2afb8
MC
15420
15421 /* Configure DMA attributes. */
284901a9 15422 if (dma_mask > DMA_BIT_MASK(32)) {
72f2afb8
MC
15423 err = pci_set_dma_mask(pdev, dma_mask);
15424 if (!err) {
0da0606f 15425 features |= NETIF_F_HIGHDMA;
72f2afb8
MC
15426 err = pci_set_consistent_dma_mask(pdev,
15427 persist_dma_mask);
15428 if (err < 0) {
ab96b241
MC
15429 dev_err(&pdev->dev, "Unable to obtain 64 bit "
15430 "DMA for consistent allocations\n");
c9cab24e 15431 goto err_out_apeunmap;
72f2afb8
MC
15432 }
15433 }
15434 }
284901a9
YH
15435 if (err || dma_mask == DMA_BIT_MASK(32)) {
15436 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
72f2afb8 15437 if (err) {
ab96b241
MC
15438 dev_err(&pdev->dev,
15439 "No usable DMA configuration, aborting\n");
c9cab24e 15440 goto err_out_apeunmap;
72f2afb8
MC
15441 }
15442 }
15443
fdfec172 15444 tg3_init_bufmgr_config(tp);
1da177e4 15445
0da0606f
MC
15446 features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
15447
15448 /* 5700 B0 chips do not support checksumming correctly due
15449 * to hardware bugs.
15450 */
15451 if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) {
15452 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
15453
15454 if (tg3_flag(tp, 5755_PLUS))
15455 features |= NETIF_F_IPV6_CSUM;
15456 }
15457
4e3a7aaa
MC
15458 /* TSO is on by default on chips that support hardware TSO.
15459 * Firmware TSO on older chips gives lower performance, so it
15460 * is off by default, but can be enabled using ethtool.
15461 */
63c3a66f
JP
15462 if ((tg3_flag(tp, HW_TSO_1) ||
15463 tg3_flag(tp, HW_TSO_2) ||
15464 tg3_flag(tp, HW_TSO_3)) &&
0da0606f
MC
15465 (features & NETIF_F_IP_CSUM))
15466 features |= NETIF_F_TSO;
63c3a66f 15467 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
0da0606f
MC
15468 if (features & NETIF_F_IPV6_CSUM)
15469 features |= NETIF_F_TSO6;
63c3a66f 15470 if (tg3_flag(tp, HW_TSO_3) ||
e849cdc3 15471 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
57e6983c
MC
15472 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
15473 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) ||
63c3a66f 15474 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
dc668910 15475 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
0da0606f 15476 features |= NETIF_F_TSO_ECN;
b0026624 15477 }
1da177e4 15478
d542fe27
MC
15479 dev->features |= features;
15480 dev->vlan_features |= features;
15481
06c03c02
MB
15482 /*
15483 * Add loopback capability only for a subset of devices that support
15484 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
15485 * loopback for the remaining devices.
15486 */
15487 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
15488 !tg3_flag(tp, CPMU_PRESENT))
15489 /* Add the loopback capability */
0da0606f
MC
15490 features |= NETIF_F_LOOPBACK;
15491
0da0606f 15492 dev->hw_features |= features;
06c03c02 15493
1da177e4 15494 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
63c3a66f 15495 !tg3_flag(tp, TSO_CAPABLE) &&
1da177e4 15496 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
63c3a66f 15497 tg3_flag_set(tp, MAX_RXPEND_64);
1da177e4
LT
15498 tp->rx_pending = 63;
15499 }
15500
1da177e4
LT
15501 err = tg3_get_device_address(tp);
15502 if (err) {
ab96b241
MC
15503 dev_err(&pdev->dev,
15504 "Could not obtain valid ethernet address, aborting\n");
c9cab24e 15505 goto err_out_apeunmap;
c88864df
MC
15506 }
15507
1da177e4
LT
15508 /*
15509 * Reset chip in case UNDI or EFI driver did not shutdown
15510 * DMA self test will enable WDMAC and we'll see (spurious)
15511 * pending DMA on the PCI bus at that point.
15512 */
15513 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
15514 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
1da177e4 15515 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
944d980e 15516 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
15517 }
15518
15519 err = tg3_test_dma(tp);
15520 if (err) {
ab96b241 15521 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
c88864df 15522 goto err_out_apeunmap;
1da177e4
LT
15523 }
15524
78f90dcf
MC
15525 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
15526 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
15527 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
6fd45cb8 15528 for (i = 0; i < tp->irq_max; i++) {
78f90dcf
MC
15529 struct tg3_napi *tnapi = &tp->napi[i];
15530
15531 tnapi->tp = tp;
15532 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
15533
15534 tnapi->int_mbox = intmbx;
15535 if (i < 4)
15536 intmbx += 0x8;
15537 else
15538 intmbx += 0x4;
15539
15540 tnapi->consmbox = rcvmbx;
15541 tnapi->prodmbox = sndmbx;
15542
66cfd1bd 15543 if (i)
78f90dcf 15544 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
66cfd1bd 15545 else
78f90dcf 15546 tnapi->coal_now = HOSTCC_MODE_NOW;
78f90dcf 15547
63c3a66f 15548 if (!tg3_flag(tp, SUPPORT_MSIX))
78f90dcf
MC
15549 break;
15550
15551 /*
15552 * If we support MSIX, we'll be using RSS. If we're using
15553 * RSS, the first vector only handles link interrupts and the
15554 * remaining vectors handle rx and tx interrupts. Reuse the
15555 * mailbox values for the next iteration. The values we setup
15556 * above are still useful for the single vectored mode.
15557 */
15558 if (!i)
15559 continue;
15560
15561 rcvmbx += 0x8;
15562
15563 if (sndmbx & 0x4)
15564 sndmbx -= 0x4;
15565 else
15566 sndmbx += 0xc;
15567 }
15568
15f9850d
DM
15569 tg3_init_coal(tp);
15570
c49a1561
MC
15571 pci_set_drvdata(pdev, dev);
15572
cd0d7228
MC
15573 if (tg3_flag(tp, 5717_PLUS)) {
15574 /* Resume a low-power mode */
15575 tg3_frob_aux_power(tp, false);
15576 }
15577
1da177e4
LT
15578 err = register_netdev(dev);
15579 if (err) {
ab96b241 15580 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
0d3031d9 15581 goto err_out_apeunmap;
1da177e4
LT
15582 }
15583
05dbe005
JP
15584 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
15585 tp->board_part_number,
15586 tp->pci_chip_rev_id,
15587 tg3_bus_string(tp, str),
15588 dev->dev_addr);
1da177e4 15589
f07e9af3 15590 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
3f0e3ad7
MC
15591 struct phy_device *phydev;
15592 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
5129c3a3
MC
15593 netdev_info(dev,
15594 "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
05dbe005 15595 phydev->drv->name, dev_name(&phydev->dev));
f07e9af3
MC
15596 } else {
15597 char *ethtype;
15598
15599 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
15600 ethtype = "10/100Base-TX";
15601 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
15602 ethtype = "1000Base-SX";
15603 else
15604 ethtype = "10/100/1000Base-T";
15605
5129c3a3 15606 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
47007831
MC
15607 "(WireSpeed[%d], EEE[%d])\n",
15608 tg3_phy_string(tp), ethtype,
15609 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
15610 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
f07e9af3 15611 }
05dbe005
JP
15612
15613 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
dc668910 15614 (dev->features & NETIF_F_RXCSUM) != 0,
63c3a66f 15615 tg3_flag(tp, USE_LINKCHG_REG) != 0,
f07e9af3 15616 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
63c3a66f
JP
15617 tg3_flag(tp, ENABLE_ASF) != 0,
15618 tg3_flag(tp, TSO_CAPABLE) != 0);
05dbe005
JP
15619 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
15620 tp->dma_rwctrl,
15621 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
15622 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
1da177e4 15623
b45aa2f6
MC
15624 pci_save_state(pdev);
15625
1da177e4
LT
15626 return 0;
15627
0d3031d9
MC
15628err_out_apeunmap:
15629 if (tp->aperegs) {
15630 iounmap(tp->aperegs);
15631 tp->aperegs = NULL;
15632 }
15633
1da177e4 15634err_out_iounmap:
6892914f
MC
15635 if (tp->regs) {
15636 iounmap(tp->regs);
22abe310 15637 tp->regs = NULL;
6892914f 15638 }
1da177e4
LT
15639
15640err_out_free_dev:
15641 free_netdev(dev);
15642
16821285
MC
15643err_out_power_down:
15644 pci_set_power_state(pdev, PCI_D3hot);
15645
1da177e4
LT
15646err_out_free_res:
15647 pci_release_regions(pdev);
15648
15649err_out_disable_pdev:
15650 pci_disable_device(pdev);
15651 pci_set_drvdata(pdev, NULL);
15652 return err;
15653}
15654
15655static void __devexit tg3_remove_one(struct pci_dev *pdev)
15656{
15657 struct net_device *dev = pci_get_drvdata(pdev);
15658
15659 if (dev) {
15660 struct tg3 *tp = netdev_priv(dev);
15661
077f849d
JSR
15662 if (tp->fw)
15663 release_firmware(tp->fw);
15664
23f333a2 15665 cancel_work_sync(&tp->reset_task);
158d7abd 15666
63c3a66f 15667 if (!tg3_flag(tp, USE_PHYLIB)) {
b02fd9e3 15668 tg3_phy_fini(tp);
158d7abd 15669 tg3_mdio_fini(tp);
b02fd9e3 15670 }
158d7abd 15671
1da177e4 15672 unregister_netdev(dev);
0d3031d9
MC
15673 if (tp->aperegs) {
15674 iounmap(tp->aperegs);
15675 tp->aperegs = NULL;
15676 }
6892914f
MC
15677 if (tp->regs) {
15678 iounmap(tp->regs);
22abe310 15679 tp->regs = NULL;
6892914f 15680 }
1da177e4
LT
15681 free_netdev(dev);
15682 pci_release_regions(pdev);
15683 pci_disable_device(pdev);
15684 pci_set_drvdata(pdev, NULL);
15685 }
15686}
15687
aa6027ca 15688#ifdef CONFIG_PM_SLEEP
c866b7ea 15689static int tg3_suspend(struct device *device)
1da177e4 15690{
c866b7ea 15691 struct pci_dev *pdev = to_pci_dev(device);
1da177e4
LT
15692 struct net_device *dev = pci_get_drvdata(pdev);
15693 struct tg3 *tp = netdev_priv(dev);
15694 int err;
15695
15696 if (!netif_running(dev))
15697 return 0;
15698
23f333a2 15699 flush_work_sync(&tp->reset_task);
b02fd9e3 15700 tg3_phy_stop(tp);
1da177e4
LT
15701 tg3_netif_stop(tp);
15702
15703 del_timer_sync(&tp->timer);
15704
f47c11ee 15705 tg3_full_lock(tp, 1);
1da177e4 15706 tg3_disable_ints(tp);
f47c11ee 15707 tg3_full_unlock(tp);
1da177e4
LT
15708
15709 netif_device_detach(dev);
15710
f47c11ee 15711 tg3_full_lock(tp, 0);
944d980e 15712 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
63c3a66f 15713 tg3_flag_clear(tp, INIT_COMPLETE);
f47c11ee 15714 tg3_full_unlock(tp);
1da177e4 15715
c866b7ea 15716 err = tg3_power_down_prepare(tp);
1da177e4 15717 if (err) {
b02fd9e3
MC
15718 int err2;
15719
f47c11ee 15720 tg3_full_lock(tp, 0);
1da177e4 15721
63c3a66f 15722 tg3_flag_set(tp, INIT_COMPLETE);
b02fd9e3
MC
15723 err2 = tg3_restart_hw(tp, 1);
15724 if (err2)
b9ec6c1b 15725 goto out;
1da177e4
LT
15726
15727 tp->timer.expires = jiffies + tp->timer_offset;
15728 add_timer(&tp->timer);
15729
15730 netif_device_attach(dev);
15731 tg3_netif_start(tp);
15732
b9ec6c1b 15733out:
f47c11ee 15734 tg3_full_unlock(tp);
b02fd9e3
MC
15735
15736 if (!err2)
15737 tg3_phy_start(tp);
1da177e4
LT
15738 }
15739
15740 return err;
15741}
15742
c866b7ea 15743static int tg3_resume(struct device *device)
1da177e4 15744{
c866b7ea 15745 struct pci_dev *pdev = to_pci_dev(device);
1da177e4
LT
15746 struct net_device *dev = pci_get_drvdata(pdev);
15747 struct tg3 *tp = netdev_priv(dev);
15748 int err;
15749
15750 if (!netif_running(dev))
15751 return 0;
15752
1da177e4
LT
15753 netif_device_attach(dev);
15754
f47c11ee 15755 tg3_full_lock(tp, 0);
1da177e4 15756
63c3a66f 15757 tg3_flag_set(tp, INIT_COMPLETE);
b9ec6c1b
MC
15758 err = tg3_restart_hw(tp, 1);
15759 if (err)
15760 goto out;
1da177e4
LT
15761
15762 tp->timer.expires = jiffies + tp->timer_offset;
15763 add_timer(&tp->timer);
15764
1da177e4
LT
15765 tg3_netif_start(tp);
15766
b9ec6c1b 15767out:
f47c11ee 15768 tg3_full_unlock(tp);
1da177e4 15769
b02fd9e3
MC
15770 if (!err)
15771 tg3_phy_start(tp);
15772
b9ec6c1b 15773 return err;
1da177e4
LT
15774}
15775
c866b7ea 15776static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
aa6027ca
ED
15777#define TG3_PM_OPS (&tg3_pm_ops)
15778
15779#else
15780
15781#define TG3_PM_OPS NULL
15782
15783#endif /* CONFIG_PM_SLEEP */
c866b7ea 15784
b45aa2f6
MC
15785/**
15786 * tg3_io_error_detected - called when PCI error is detected
15787 * @pdev: Pointer to PCI device
15788 * @state: The current pci connection state
15789 *
15790 * This function is called after a PCI bus error affecting
15791 * this device has been detected.
15792 */
15793static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
15794 pci_channel_state_t state)
15795{
15796 struct net_device *netdev = pci_get_drvdata(pdev);
15797 struct tg3 *tp = netdev_priv(netdev);
15798 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
15799
15800 netdev_info(netdev, "PCI I/O error detected\n");
15801
15802 rtnl_lock();
15803
15804 if (!netif_running(netdev))
15805 goto done;
15806
15807 tg3_phy_stop(tp);
15808
15809 tg3_netif_stop(tp);
15810
15811 del_timer_sync(&tp->timer);
63c3a66f 15812 tg3_flag_clear(tp, RESTART_TIMER);
b45aa2f6
MC
15813
15814 /* Want to make sure that the reset task doesn't run */
15815 cancel_work_sync(&tp->reset_task);
63c3a66f
JP
15816 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
15817 tg3_flag_clear(tp, RESTART_TIMER);
b45aa2f6
MC
15818
15819 netif_device_detach(netdev);
15820
15821 /* Clean up software state, even if MMIO is blocked */
15822 tg3_full_lock(tp, 0);
15823 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
15824 tg3_full_unlock(tp);
15825
15826done:
15827 if (state == pci_channel_io_perm_failure)
15828 err = PCI_ERS_RESULT_DISCONNECT;
15829 else
15830 pci_disable_device(pdev);
15831
15832 rtnl_unlock();
15833
15834 return err;
15835}
15836
15837/**
15838 * tg3_io_slot_reset - called after the pci bus has been reset.
15839 * @pdev: Pointer to PCI device
15840 *
15841 * Restart the card from scratch, as if from a cold-boot.
15842 * At this point, the card has exprienced a hard reset,
15843 * followed by fixups by BIOS, and has its config space
15844 * set up identically to what it was at cold boot.
15845 */
15846static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
15847{
15848 struct net_device *netdev = pci_get_drvdata(pdev);
15849 struct tg3 *tp = netdev_priv(netdev);
15850 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
15851 int err;
15852
15853 rtnl_lock();
15854
15855 if (pci_enable_device(pdev)) {
15856 netdev_err(netdev, "Cannot re-enable PCI device after reset.\n");
15857 goto done;
15858 }
15859
15860 pci_set_master(pdev);
15861 pci_restore_state(pdev);
15862 pci_save_state(pdev);
15863
15864 if (!netif_running(netdev)) {
15865 rc = PCI_ERS_RESULT_RECOVERED;
15866 goto done;
15867 }
15868
15869 err = tg3_power_up(tp);
bed9829f 15870 if (err)
b45aa2f6 15871 goto done;
b45aa2f6
MC
15872
15873 rc = PCI_ERS_RESULT_RECOVERED;
15874
15875done:
15876 rtnl_unlock();
15877
15878 return rc;
15879}
15880
15881/**
15882 * tg3_io_resume - called when traffic can start flowing again.
15883 * @pdev: Pointer to PCI device
15884 *
15885 * This callback is called when the error recovery driver tells
15886 * us that its OK to resume normal operation.
15887 */
15888static void tg3_io_resume(struct pci_dev *pdev)
15889{
15890 struct net_device *netdev = pci_get_drvdata(pdev);
15891 struct tg3 *tp = netdev_priv(netdev);
15892 int err;
15893
15894 rtnl_lock();
15895
15896 if (!netif_running(netdev))
15897 goto done;
15898
15899 tg3_full_lock(tp, 0);
63c3a66f 15900 tg3_flag_set(tp, INIT_COMPLETE);
b45aa2f6
MC
15901 err = tg3_restart_hw(tp, 1);
15902 tg3_full_unlock(tp);
15903 if (err) {
15904 netdev_err(netdev, "Cannot restart hardware after reset.\n");
15905 goto done;
15906 }
15907
15908 netif_device_attach(netdev);
15909
15910 tp->timer.expires = jiffies + tp->timer_offset;
15911 add_timer(&tp->timer);
15912
15913 tg3_netif_start(tp);
15914
15915 tg3_phy_start(tp);
15916
15917done:
15918 rtnl_unlock();
15919}
15920
15921static struct pci_error_handlers tg3_err_handler = {
15922 .error_detected = tg3_io_error_detected,
15923 .slot_reset = tg3_io_slot_reset,
15924 .resume = tg3_io_resume
15925};
15926
1da177e4
LT
15927static struct pci_driver tg3_driver = {
15928 .name = DRV_MODULE_NAME,
15929 .id_table = tg3_pci_tbl,
15930 .probe = tg3_init_one,
15931 .remove = __devexit_p(tg3_remove_one),
b45aa2f6 15932 .err_handler = &tg3_err_handler,
aa6027ca 15933 .driver.pm = TG3_PM_OPS,
1da177e4
LT
15934};
15935
15936static int __init tg3_init(void)
15937{
29917620 15938 return pci_register_driver(&tg3_driver);
1da177e4
LT
15939}
15940
15941static void __exit tg3_cleanup(void)
15942{
15943 pci_unregister_driver(&tg3_driver);
15944}
15945
15946module_init(tg3_init);
15947module_exit(tg3_cleanup);