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.
7  * Copyright (C) 2005-2012 Broadcom Corporation.
8  *
9  * Firmware is:
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.
16  */
17 
18 
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/stringify.h>
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>
27 #include <linux/in.h>
28 #include <linux/init.h>
29 #include <linux/interrupt.h>
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>
36 #include <linux/mdio.h>
37 #include <linux/mii.h>
38 #include <linux/phy.h>
39 #include <linux/brcmphy.h>
40 #include <linux/if_vlan.h>
41 #include <linux/ip.h>
42 #include <linux/tcp.h>
43 #include <linux/workqueue.h>
44 #include <linux/prefetch.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/firmware.h>
47 
48 #include <net/checksum.h>
49 #include <net/ip.h>
50 
51 #include <linux/io.h>
52 #include <asm/byteorder.h>
53 #include <linux/uaccess.h>
54 
55 #ifdef CONFIG_SPARC
56 #include <asm/idprom.h>
57 #include <asm/prom.h>
58 #endif
59 
60 #define BAR_0	0
61 #define BAR_2	2
62 
63 #include "tg3.h"
64 
65 /* Functions & macros to verify TG3_FLAGS types */
66 
67 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
68 {
69 	return test_bit(flag, bits);
70 }
71 
72 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
73 {
74 	set_bit(flag, bits);
75 }
76 
77 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
78 {
79 	clear_bit(flag, bits);
80 }
81 
82 #define tg3_flag(tp, flag)				\
83 	_tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
84 #define tg3_flag_set(tp, flag)				\
85 	_tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
86 #define tg3_flag_clear(tp, flag)			\
87 	_tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
88 
89 #define DRV_MODULE_NAME		"tg3"
90 #define TG3_MAJ_NUM			3
91 #define TG3_MIN_NUM			123
92 #define DRV_MODULE_VERSION	\
93 	__stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
94 #define DRV_MODULE_RELDATE	"March 21, 2012"
95 
96 #define RESET_KIND_SHUTDOWN	0
97 #define RESET_KIND_INIT		1
98 #define RESET_KIND_SUSPEND	2
99 
100 #define TG3_DEF_RX_MODE		0
101 #define TG3_DEF_TX_MODE		0
102 #define TG3_DEF_MSG_ENABLE	  \
103 	(NETIF_MSG_DRV		| \
104 	 NETIF_MSG_PROBE	| \
105 	 NETIF_MSG_LINK		| \
106 	 NETIF_MSG_TIMER	| \
107 	 NETIF_MSG_IFDOWN	| \
108 	 NETIF_MSG_IFUP		| \
109 	 NETIF_MSG_RX_ERR	| \
110 	 NETIF_MSG_TX_ERR)
111 
112 #define TG3_GRC_LCLCTL_PWRSW_DELAY	100
113 
114 /* length of time before we decide the hardware is borked,
115  * and dev->tx_timeout() should be called to fix the problem
116  */
117 
118 #define TG3_TX_TIMEOUT			(5 * HZ)
119 
120 /* hardware minimum and maximum for a single frame's data payload */
121 #define TG3_MIN_MTU			60
122 #define TG3_MAX_MTU(tp)	\
123 	(tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
124 
125 /* These numbers seem to be hard coded in the NIC firmware somehow.
126  * You can't change the ring sizes, but you can change where you place
127  * them in the NIC onboard memory.
128  */
129 #define TG3_RX_STD_RING_SIZE(tp) \
130 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
131 	 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
132 #define TG3_DEF_RX_RING_PENDING		200
133 #define TG3_RX_JMB_RING_SIZE(tp) \
134 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
135 	 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
136 #define TG3_DEF_RX_JUMBO_RING_PENDING	100
137 
138 /* Do not place this n-ring entries value into the tp struct itself,
139  * we really want to expose these constants to GCC so that modulo et
140  * al.  operations are done with shifts and masks instead of with
141  * hw multiply/modulo instructions.  Another solution would be to
142  * replace things like '% foo' with '& (foo - 1)'.
143  */
144 
145 #define TG3_TX_RING_SIZE		512
146 #define TG3_DEF_TX_RING_PENDING		(TG3_TX_RING_SIZE - 1)
147 
148 #define TG3_RX_STD_RING_BYTES(tp) \
149 	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
150 #define TG3_RX_JMB_RING_BYTES(tp) \
151 	(sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
152 #define TG3_RX_RCB_RING_BYTES(tp) \
153 	(sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
154 #define TG3_TX_RING_BYTES	(sizeof(struct tg3_tx_buffer_desc) * \
155 				 TG3_TX_RING_SIZE)
156 #define NEXT_TX(N)		(((N) + 1) & (TG3_TX_RING_SIZE - 1))
157 
158 #define TG3_DMA_BYTE_ENAB		64
159 
160 #define TG3_RX_STD_DMA_SZ		1536
161 #define TG3_RX_JMB_DMA_SZ		9046
162 
163 #define TG3_RX_DMA_TO_MAP_SZ(x)		((x) + TG3_DMA_BYTE_ENAB)
164 
165 #define TG3_RX_STD_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
166 #define TG3_RX_JMB_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
167 
168 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
169 	(sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
170 
171 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
172 	(sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
173 
174 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
175  * that are at least dword aligned when used in PCIX mode.  The driver
176  * works around this bug by double copying the packet.  This workaround
177  * is built into the normal double copy length check for efficiency.
178  *
179  * However, the double copy is only necessary on those architectures
180  * where unaligned memory accesses are inefficient.  For those architectures
181  * where unaligned memory accesses incur little penalty, we can reintegrate
182  * the 5701 in the normal rx path.  Doing so saves a device structure
183  * dereference by hardcoding the double copy threshold in place.
184  */
185 #define TG3_RX_COPY_THRESHOLD		256
186 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
187 	#define TG3_RX_COPY_THRESH(tp)	TG3_RX_COPY_THRESHOLD
188 #else
189 	#define TG3_RX_COPY_THRESH(tp)	((tp)->rx_copy_thresh)
190 #endif
191 
192 #if (NET_IP_ALIGN != 0)
193 #define TG3_RX_OFFSET(tp)	((tp)->rx_offset)
194 #else
195 #define TG3_RX_OFFSET(tp)	(NET_SKB_PAD)
196 #endif
197 
198 /* minimum number of free TX descriptors required to wake up TX process */
199 #define TG3_TX_WAKEUP_THRESH(tnapi)		((tnapi)->tx_pending / 4)
200 #define TG3_TX_BD_DMA_MAX_2K		2048
201 #define TG3_TX_BD_DMA_MAX_4K		4096
202 
203 #define TG3_RAW_IP_ALIGN 2
204 
205 #define TG3_FW_UPDATE_TIMEOUT_SEC	5
206 #define TG3_FW_UPDATE_FREQ_SEC		(TG3_FW_UPDATE_TIMEOUT_SEC / 2)
207 
208 #define FIRMWARE_TG3		"tigon/tg3.bin"
209 #define FIRMWARE_TG3TSO		"tigon/tg3_tso.bin"
210 #define FIRMWARE_TG3TSO5	"tigon/tg3_tso5.bin"
211 
212 static char version[] __devinitdata =
213 	DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
214 
215 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
216 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
217 MODULE_LICENSE("GPL");
218 MODULE_VERSION(DRV_MODULE_VERSION);
219 MODULE_FIRMWARE(FIRMWARE_TG3);
220 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
221 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
222 
223 static int tg3_debug = -1;	/* -1 == use TG3_DEF_MSG_ENABLE as value */
224 module_param(tg3_debug, int, 0);
225 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
226 
227 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
228 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
229 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
230 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
231 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
232 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
233 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
234 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
235 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
236 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
237 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
238 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
239 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
240 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
241 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
242 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
243 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
244 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
245 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
246 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
247 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
248 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
249 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
250 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
251 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
252 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
253 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
254 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
255 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
256 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
257 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
258 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
259 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
260 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
261 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
262 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
263 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
264 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
265 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
266 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
267 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
268 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
269 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
270 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
271 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
272 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
273 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
274 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
275 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
276 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
277 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
278 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
279 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
280 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
281 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
282 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
283 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
284 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
285 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
286 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
287 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
288 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
289 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)},
290 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
291 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
292 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
293 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
294 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
295 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
296 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
297 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)},
298 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)},
299 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
300 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
301 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
302 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
303 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
304 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
305 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
306 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
307 	{PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
308 	{PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
309 	{}
310 };
311 
312 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
313 
314 static const struct {
315 	const char string[ETH_GSTRING_LEN];
316 } ethtool_stats_keys[] = {
317 	{ "rx_octets" },
318 	{ "rx_fragments" },
319 	{ "rx_ucast_packets" },
320 	{ "rx_mcast_packets" },
321 	{ "rx_bcast_packets" },
322 	{ "rx_fcs_errors" },
323 	{ "rx_align_errors" },
324 	{ "rx_xon_pause_rcvd" },
325 	{ "rx_xoff_pause_rcvd" },
326 	{ "rx_mac_ctrl_rcvd" },
327 	{ "rx_xoff_entered" },
328 	{ "rx_frame_too_long_errors" },
329 	{ "rx_jabbers" },
330 	{ "rx_undersize_packets" },
331 	{ "rx_in_length_errors" },
332 	{ "rx_out_length_errors" },
333 	{ "rx_64_or_less_octet_packets" },
334 	{ "rx_65_to_127_octet_packets" },
335 	{ "rx_128_to_255_octet_packets" },
336 	{ "rx_256_to_511_octet_packets" },
337 	{ "rx_512_to_1023_octet_packets" },
338 	{ "rx_1024_to_1522_octet_packets" },
339 	{ "rx_1523_to_2047_octet_packets" },
340 	{ "rx_2048_to_4095_octet_packets" },
341 	{ "rx_4096_to_8191_octet_packets" },
342 	{ "rx_8192_to_9022_octet_packets" },
343 
344 	{ "tx_octets" },
345 	{ "tx_collisions" },
346 
347 	{ "tx_xon_sent" },
348 	{ "tx_xoff_sent" },
349 	{ "tx_flow_control" },
350 	{ "tx_mac_errors" },
351 	{ "tx_single_collisions" },
352 	{ "tx_mult_collisions" },
353 	{ "tx_deferred" },
354 	{ "tx_excessive_collisions" },
355 	{ "tx_late_collisions" },
356 	{ "tx_collide_2times" },
357 	{ "tx_collide_3times" },
358 	{ "tx_collide_4times" },
359 	{ "tx_collide_5times" },
360 	{ "tx_collide_6times" },
361 	{ "tx_collide_7times" },
362 	{ "tx_collide_8times" },
363 	{ "tx_collide_9times" },
364 	{ "tx_collide_10times" },
365 	{ "tx_collide_11times" },
366 	{ "tx_collide_12times" },
367 	{ "tx_collide_13times" },
368 	{ "tx_collide_14times" },
369 	{ "tx_collide_15times" },
370 	{ "tx_ucast_packets" },
371 	{ "tx_mcast_packets" },
372 	{ "tx_bcast_packets" },
373 	{ "tx_carrier_sense_errors" },
374 	{ "tx_discards" },
375 	{ "tx_errors" },
376 
377 	{ "dma_writeq_full" },
378 	{ "dma_write_prioq_full" },
379 	{ "rxbds_empty" },
380 	{ "rx_discards" },
381 	{ "rx_errors" },
382 	{ "rx_threshold_hit" },
383 
384 	{ "dma_readq_full" },
385 	{ "dma_read_prioq_full" },
386 	{ "tx_comp_queue_full" },
387 
388 	{ "ring_set_send_prod_index" },
389 	{ "ring_status_update" },
390 	{ "nic_irqs" },
391 	{ "nic_avoided_irqs" },
392 	{ "nic_tx_threshold_hit" },
393 
394 	{ "mbuf_lwm_thresh_hit" },
395 };
396 
397 #define TG3_NUM_STATS	ARRAY_SIZE(ethtool_stats_keys)
398 
399 
400 static const struct {
401 	const char string[ETH_GSTRING_LEN];
402 } ethtool_test_keys[] = {
403 	{ "nvram test        (online) " },
404 	{ "link test         (online) " },
405 	{ "register test     (offline)" },
406 	{ "memory test       (offline)" },
407 	{ "mac loopback test (offline)" },
408 	{ "phy loopback test (offline)" },
409 	{ "ext loopback test (offline)" },
410 	{ "interrupt test    (offline)" },
411 };
412 
413 #define TG3_NUM_TEST	ARRAY_SIZE(ethtool_test_keys)
414 
415 
416 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
417 {
418 	writel(val, tp->regs + off);
419 }
420 
421 static u32 tg3_read32(struct tg3 *tp, u32 off)
422 {
423 	return readl(tp->regs + off);
424 }
425 
426 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
427 {
428 	writel(val, tp->aperegs + off);
429 }
430 
431 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
432 {
433 	return readl(tp->aperegs + off);
434 }
435 
436 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
437 {
438 	unsigned long flags;
439 
440 	spin_lock_irqsave(&tp->indirect_lock, flags);
441 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
442 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
443 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
444 }
445 
446 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
447 {
448 	writel(val, tp->regs + off);
449 	readl(tp->regs + off);
450 }
451 
452 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
453 {
454 	unsigned long flags;
455 	u32 val;
456 
457 	spin_lock_irqsave(&tp->indirect_lock, flags);
458 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
459 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
460 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
461 	return val;
462 }
463 
464 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
465 {
466 	unsigned long flags;
467 
468 	if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
469 		pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
470 				       TG3_64BIT_REG_LOW, val);
471 		return;
472 	}
473 	if (off == TG3_RX_STD_PROD_IDX_REG) {
474 		pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
475 				       TG3_64BIT_REG_LOW, val);
476 		return;
477 	}
478 
479 	spin_lock_irqsave(&tp->indirect_lock, flags);
480 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
481 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
482 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
483 
484 	/* In indirect mode when disabling interrupts, we also need
485 	 * to clear the interrupt bit in the GRC local ctrl register.
486 	 */
487 	if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
488 	    (val == 0x1)) {
489 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
490 				       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
491 	}
492 }
493 
494 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
495 {
496 	unsigned long flags;
497 	u32 val;
498 
499 	spin_lock_irqsave(&tp->indirect_lock, flags);
500 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
501 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
502 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
503 	return val;
504 }
505 
506 /* usec_wait specifies the wait time in usec when writing to certain registers
507  * where it is unsafe to read back the register without some delay.
508  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
509  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
510  */
511 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
512 {
513 	if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
514 		/* Non-posted methods */
515 		tp->write32(tp, off, val);
516 	else {
517 		/* Posted method */
518 		tg3_write32(tp, off, val);
519 		if (usec_wait)
520 			udelay(usec_wait);
521 		tp->read32(tp, off);
522 	}
523 	/* Wait again after the read for the posted method to guarantee that
524 	 * the wait time is met.
525 	 */
526 	if (usec_wait)
527 		udelay(usec_wait);
528 }
529 
530 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
531 {
532 	tp->write32_mbox(tp, off, val);
533 	if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND))
534 		tp->read32_mbox(tp, off);
535 }
536 
537 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
538 {
539 	void __iomem *mbox = tp->regs + off;
540 	writel(val, mbox);
541 	if (tg3_flag(tp, TXD_MBOX_HWBUG))
542 		writel(val, mbox);
543 	if (tg3_flag(tp, MBOX_WRITE_REORDER))
544 		readl(mbox);
545 }
546 
547 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
548 {
549 	return readl(tp->regs + off + GRCMBOX_BASE);
550 }
551 
552 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
553 {
554 	writel(val, tp->regs + off + GRCMBOX_BASE);
555 }
556 
557 #define tw32_mailbox(reg, val)		tp->write32_mbox(tp, reg, val)
558 #define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
559 #define tw32_rx_mbox(reg, val)		tp->write32_rx_mbox(tp, reg, val)
560 #define tw32_tx_mbox(reg, val)		tp->write32_tx_mbox(tp, reg, val)
561 #define tr32_mailbox(reg)		tp->read32_mbox(tp, reg)
562 
563 #define tw32(reg, val)			tp->write32(tp, reg, val)
564 #define tw32_f(reg, val)		_tw32_flush(tp, (reg), (val), 0)
565 #define tw32_wait_f(reg, val, us)	_tw32_flush(tp, (reg), (val), (us))
566 #define tr32(reg)			tp->read32(tp, reg)
567 
568 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
569 {
570 	unsigned long flags;
571 
572 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
573 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
574 		return;
575 
576 	spin_lock_irqsave(&tp->indirect_lock, flags);
577 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
578 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
579 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
580 
581 		/* Always leave this as zero. */
582 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
583 	} else {
584 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
585 		tw32_f(TG3PCI_MEM_WIN_DATA, val);
586 
587 		/* Always leave this as zero. */
588 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
589 	}
590 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
591 }
592 
593 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
594 {
595 	unsigned long flags;
596 
597 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
598 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
599 		*val = 0;
600 		return;
601 	}
602 
603 	spin_lock_irqsave(&tp->indirect_lock, flags);
604 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
605 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
606 		pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
607 
608 		/* Always leave this as zero. */
609 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
610 	} else {
611 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
612 		*val = tr32(TG3PCI_MEM_WIN_DATA);
613 
614 		/* Always leave this as zero. */
615 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
616 	}
617 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
618 }
619 
620 static void tg3_ape_lock_init(struct tg3 *tp)
621 {
622 	int i;
623 	u32 regbase, bit;
624 
625 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
626 		regbase = TG3_APE_LOCK_GRANT;
627 	else
628 		regbase = TG3_APE_PER_LOCK_GRANT;
629 
630 	/* Make sure the driver hasn't any stale locks. */
631 	for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
632 		switch (i) {
633 		case TG3_APE_LOCK_PHY0:
634 		case TG3_APE_LOCK_PHY1:
635 		case TG3_APE_LOCK_PHY2:
636 		case TG3_APE_LOCK_PHY3:
637 			bit = APE_LOCK_GRANT_DRIVER;
638 			break;
639 		default:
640 			if (!tp->pci_fn)
641 				bit = APE_LOCK_GRANT_DRIVER;
642 			else
643 				bit = 1 << tp->pci_fn;
644 		}
645 		tg3_ape_write32(tp, regbase + 4 * i, bit);
646 	}
647 
648 }
649 
650 static int tg3_ape_lock(struct tg3 *tp, int locknum)
651 {
652 	int i, off;
653 	int ret = 0;
654 	u32 status, req, gnt, bit;
655 
656 	if (!tg3_flag(tp, ENABLE_APE))
657 		return 0;
658 
659 	switch (locknum) {
660 	case TG3_APE_LOCK_GPIO:
661 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
662 			return 0;
663 	case TG3_APE_LOCK_GRC:
664 	case TG3_APE_LOCK_MEM:
665 		if (!tp->pci_fn)
666 			bit = APE_LOCK_REQ_DRIVER;
667 		else
668 			bit = 1 << tp->pci_fn;
669 		break;
670 	default:
671 		return -EINVAL;
672 	}
673 
674 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
675 		req = TG3_APE_LOCK_REQ;
676 		gnt = TG3_APE_LOCK_GRANT;
677 	} else {
678 		req = TG3_APE_PER_LOCK_REQ;
679 		gnt = TG3_APE_PER_LOCK_GRANT;
680 	}
681 
682 	off = 4 * locknum;
683 
684 	tg3_ape_write32(tp, req + off, bit);
685 
686 	/* Wait for up to 1 millisecond to acquire lock. */
687 	for (i = 0; i < 100; i++) {
688 		status = tg3_ape_read32(tp, gnt + off);
689 		if (status == bit)
690 			break;
691 		udelay(10);
692 	}
693 
694 	if (status != bit) {
695 		/* Revoke the lock request. */
696 		tg3_ape_write32(tp, gnt + off, bit);
697 		ret = -EBUSY;
698 	}
699 
700 	return ret;
701 }
702 
703 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
704 {
705 	u32 gnt, bit;
706 
707 	if (!tg3_flag(tp, ENABLE_APE))
708 		return;
709 
710 	switch (locknum) {
711 	case TG3_APE_LOCK_GPIO:
712 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
713 			return;
714 	case TG3_APE_LOCK_GRC:
715 	case TG3_APE_LOCK_MEM:
716 		if (!tp->pci_fn)
717 			bit = APE_LOCK_GRANT_DRIVER;
718 		else
719 			bit = 1 << tp->pci_fn;
720 		break;
721 	default:
722 		return;
723 	}
724 
725 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
726 		gnt = TG3_APE_LOCK_GRANT;
727 	else
728 		gnt = TG3_APE_PER_LOCK_GRANT;
729 
730 	tg3_ape_write32(tp, gnt + 4 * locknum, bit);
731 }
732 
733 static void tg3_ape_send_event(struct tg3 *tp, u32 event)
734 {
735 	int i;
736 	u32 apedata;
737 
738 	/* NCSI does not support APE events */
739 	if (tg3_flag(tp, APE_HAS_NCSI))
740 		return;
741 
742 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
743 	if (apedata != APE_SEG_SIG_MAGIC)
744 		return;
745 
746 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
747 	if (!(apedata & APE_FW_STATUS_READY))
748 		return;
749 
750 	/* Wait for up to 1 millisecond for APE to service previous event. */
751 	for (i = 0; i < 10; i++) {
752 		if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
753 			return;
754 
755 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
756 
757 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
758 			tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
759 					event | APE_EVENT_STATUS_EVENT_PENDING);
760 
761 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
762 
763 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
764 			break;
765 
766 		udelay(100);
767 	}
768 
769 	if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
770 		tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
771 }
772 
773 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
774 {
775 	u32 event;
776 	u32 apedata;
777 
778 	if (!tg3_flag(tp, ENABLE_APE))
779 		return;
780 
781 	switch (kind) {
782 	case RESET_KIND_INIT:
783 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
784 				APE_HOST_SEG_SIG_MAGIC);
785 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
786 				APE_HOST_SEG_LEN_MAGIC);
787 		apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
788 		tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
789 		tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
790 			APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
791 		tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
792 				APE_HOST_BEHAV_NO_PHYLOCK);
793 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
794 				    TG3_APE_HOST_DRVR_STATE_START);
795 
796 		event = APE_EVENT_STATUS_STATE_START;
797 		break;
798 	case RESET_KIND_SHUTDOWN:
799 		/* With the interface we are currently using,
800 		 * APE does not track driver state.  Wiping
801 		 * out the HOST SEGMENT SIGNATURE forces
802 		 * the APE to assume OS absent status.
803 		 */
804 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
805 
806 		if (device_may_wakeup(&tp->pdev->dev) &&
807 		    tg3_flag(tp, WOL_ENABLE)) {
808 			tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
809 					    TG3_APE_HOST_WOL_SPEED_AUTO);
810 			apedata = TG3_APE_HOST_DRVR_STATE_WOL;
811 		} else
812 			apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
813 
814 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
815 
816 		event = APE_EVENT_STATUS_STATE_UNLOAD;
817 		break;
818 	case RESET_KIND_SUSPEND:
819 		event = APE_EVENT_STATUS_STATE_SUSPEND;
820 		break;
821 	default:
822 		return;
823 	}
824 
825 	event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
826 
827 	tg3_ape_send_event(tp, event);
828 }
829 
830 static void tg3_disable_ints(struct tg3 *tp)
831 {
832 	int i;
833 
834 	tw32(TG3PCI_MISC_HOST_CTRL,
835 	     (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
836 	for (i = 0; i < tp->irq_max; i++)
837 		tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
838 }
839 
840 static void tg3_enable_ints(struct tg3 *tp)
841 {
842 	int i;
843 
844 	tp->irq_sync = 0;
845 	wmb();
846 
847 	tw32(TG3PCI_MISC_HOST_CTRL,
848 	     (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
849 
850 	tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
851 	for (i = 0; i < tp->irq_cnt; i++) {
852 		struct tg3_napi *tnapi = &tp->napi[i];
853 
854 		tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
855 		if (tg3_flag(tp, 1SHOT_MSI))
856 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
857 
858 		tp->coal_now |= tnapi->coal_now;
859 	}
860 
861 	/* Force an initial interrupt */
862 	if (!tg3_flag(tp, TAGGED_STATUS) &&
863 	    (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
864 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
865 	else
866 		tw32(HOSTCC_MODE, tp->coal_now);
867 
868 	tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
869 }
870 
871 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
872 {
873 	struct tg3 *tp = tnapi->tp;
874 	struct tg3_hw_status *sblk = tnapi->hw_status;
875 	unsigned int work_exists = 0;
876 
877 	/* check for phy events */
878 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
879 		if (sblk->status & SD_STATUS_LINK_CHG)
880 			work_exists = 1;
881 	}
882 
883 	/* check for TX work to do */
884 	if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
885 		work_exists = 1;
886 
887 	/* check for RX work to do */
888 	if (tnapi->rx_rcb_prod_idx &&
889 	    *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
890 		work_exists = 1;
891 
892 	return work_exists;
893 }
894 
895 /* tg3_int_reenable
896  *  similar to tg3_enable_ints, but it accurately determines whether there
897  *  is new work pending and can return without flushing the PIO write
898  *  which reenables interrupts
899  */
900 static void tg3_int_reenable(struct tg3_napi *tnapi)
901 {
902 	struct tg3 *tp = tnapi->tp;
903 
904 	tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
905 	mmiowb();
906 
907 	/* When doing tagged status, this work check is unnecessary.
908 	 * The last_tag we write above tells the chip which piece of
909 	 * work we've completed.
910 	 */
911 	if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
912 		tw32(HOSTCC_MODE, tp->coalesce_mode |
913 		     HOSTCC_MODE_ENABLE | tnapi->coal_now);
914 }
915 
916 static void tg3_switch_clocks(struct tg3 *tp)
917 {
918 	u32 clock_ctrl;
919 	u32 orig_clock_ctrl;
920 
921 	if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
922 		return;
923 
924 	clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
925 
926 	orig_clock_ctrl = clock_ctrl;
927 	clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
928 		       CLOCK_CTRL_CLKRUN_OENABLE |
929 		       0x1f);
930 	tp->pci_clock_ctrl = clock_ctrl;
931 
932 	if (tg3_flag(tp, 5705_PLUS)) {
933 		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
934 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
935 				    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
936 		}
937 	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
938 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
939 			    clock_ctrl |
940 			    (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
941 			    40);
942 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
943 			    clock_ctrl | (CLOCK_CTRL_ALTCLK),
944 			    40);
945 	}
946 	tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
947 }
948 
949 #define PHY_BUSY_LOOPS	5000
950 
951 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
952 {
953 	u32 frame_val;
954 	unsigned int loops;
955 	int ret;
956 
957 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
958 		tw32_f(MAC_MI_MODE,
959 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
960 		udelay(80);
961 	}
962 
963 	*val = 0x0;
964 
965 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
966 		      MI_COM_PHY_ADDR_MASK);
967 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
968 		      MI_COM_REG_ADDR_MASK);
969 	frame_val |= (MI_COM_CMD_READ | MI_COM_START);
970 
971 	tw32_f(MAC_MI_COM, frame_val);
972 
973 	loops = PHY_BUSY_LOOPS;
974 	while (loops != 0) {
975 		udelay(10);
976 		frame_val = tr32(MAC_MI_COM);
977 
978 		if ((frame_val & MI_COM_BUSY) == 0) {
979 			udelay(5);
980 			frame_val = tr32(MAC_MI_COM);
981 			break;
982 		}
983 		loops -= 1;
984 	}
985 
986 	ret = -EBUSY;
987 	if (loops != 0) {
988 		*val = frame_val & MI_COM_DATA_MASK;
989 		ret = 0;
990 	}
991 
992 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
993 		tw32_f(MAC_MI_MODE, tp->mi_mode);
994 		udelay(80);
995 	}
996 
997 	return ret;
998 }
999 
1000 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1001 {
1002 	u32 frame_val;
1003 	unsigned int loops;
1004 	int ret;
1005 
1006 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1007 	    (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1008 		return 0;
1009 
1010 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1011 		tw32_f(MAC_MI_MODE,
1012 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1013 		udelay(80);
1014 	}
1015 
1016 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1017 		      MI_COM_PHY_ADDR_MASK);
1018 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1019 		      MI_COM_REG_ADDR_MASK);
1020 	frame_val |= (val & MI_COM_DATA_MASK);
1021 	frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1022 
1023 	tw32_f(MAC_MI_COM, frame_val);
1024 
1025 	loops = PHY_BUSY_LOOPS;
1026 	while (loops != 0) {
1027 		udelay(10);
1028 		frame_val = tr32(MAC_MI_COM);
1029 		if ((frame_val & MI_COM_BUSY) == 0) {
1030 			udelay(5);
1031 			frame_val = tr32(MAC_MI_COM);
1032 			break;
1033 		}
1034 		loops -= 1;
1035 	}
1036 
1037 	ret = -EBUSY;
1038 	if (loops != 0)
1039 		ret = 0;
1040 
1041 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1042 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1043 		udelay(80);
1044 	}
1045 
1046 	return ret;
1047 }
1048 
1049 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1050 {
1051 	int err;
1052 
1053 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1054 	if (err)
1055 		goto done;
1056 
1057 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1058 	if (err)
1059 		goto done;
1060 
1061 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1062 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1063 	if (err)
1064 		goto done;
1065 
1066 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1067 
1068 done:
1069 	return err;
1070 }
1071 
1072 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1073 {
1074 	int err;
1075 
1076 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1077 	if (err)
1078 		goto done;
1079 
1080 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1081 	if (err)
1082 		goto done;
1083 
1084 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1085 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1086 	if (err)
1087 		goto done;
1088 
1089 	err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1090 
1091 done:
1092 	return err;
1093 }
1094 
1095 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1096 {
1097 	int err;
1098 
1099 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1100 	if (!err)
1101 		err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1102 
1103 	return err;
1104 }
1105 
1106 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1107 {
1108 	int err;
1109 
1110 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1111 	if (!err)
1112 		err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1113 
1114 	return err;
1115 }
1116 
1117 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1118 {
1119 	int err;
1120 
1121 	err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1122 			   (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1123 			   MII_TG3_AUXCTL_SHDWSEL_MISC);
1124 	if (!err)
1125 		err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1126 
1127 	return err;
1128 }
1129 
1130 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1131 {
1132 	if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1133 		set |= MII_TG3_AUXCTL_MISC_WREN;
1134 
1135 	return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1136 }
1137 
1138 #define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \
1139 	tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1140 			     MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \
1141 			     MII_TG3_AUXCTL_ACTL_TX_6DB)
1142 
1143 #define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \
1144 	tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1145 			     MII_TG3_AUXCTL_ACTL_TX_6DB);
1146 
1147 static int tg3_bmcr_reset(struct tg3 *tp)
1148 {
1149 	u32 phy_control;
1150 	int limit, err;
1151 
1152 	/* OK, reset it, and poll the BMCR_RESET bit until it
1153 	 * clears or we time out.
1154 	 */
1155 	phy_control = BMCR_RESET;
1156 	err = tg3_writephy(tp, MII_BMCR, phy_control);
1157 	if (err != 0)
1158 		return -EBUSY;
1159 
1160 	limit = 5000;
1161 	while (limit--) {
1162 		err = tg3_readphy(tp, MII_BMCR, &phy_control);
1163 		if (err != 0)
1164 			return -EBUSY;
1165 
1166 		if ((phy_control & BMCR_RESET) == 0) {
1167 			udelay(40);
1168 			break;
1169 		}
1170 		udelay(10);
1171 	}
1172 	if (limit < 0)
1173 		return -EBUSY;
1174 
1175 	return 0;
1176 }
1177 
1178 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1179 {
1180 	struct tg3 *tp = bp->priv;
1181 	u32 val;
1182 
1183 	spin_lock_bh(&tp->lock);
1184 
1185 	if (tg3_readphy(tp, reg, &val))
1186 		val = -EIO;
1187 
1188 	spin_unlock_bh(&tp->lock);
1189 
1190 	return val;
1191 }
1192 
1193 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1194 {
1195 	struct tg3 *tp = bp->priv;
1196 	u32 ret = 0;
1197 
1198 	spin_lock_bh(&tp->lock);
1199 
1200 	if (tg3_writephy(tp, reg, val))
1201 		ret = -EIO;
1202 
1203 	spin_unlock_bh(&tp->lock);
1204 
1205 	return ret;
1206 }
1207 
1208 static int tg3_mdio_reset(struct mii_bus *bp)
1209 {
1210 	return 0;
1211 }
1212 
1213 static void tg3_mdio_config_5785(struct tg3 *tp)
1214 {
1215 	u32 val;
1216 	struct phy_device *phydev;
1217 
1218 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1219 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1220 	case PHY_ID_BCM50610:
1221 	case PHY_ID_BCM50610M:
1222 		val = MAC_PHYCFG2_50610_LED_MODES;
1223 		break;
1224 	case PHY_ID_BCMAC131:
1225 		val = MAC_PHYCFG2_AC131_LED_MODES;
1226 		break;
1227 	case PHY_ID_RTL8211C:
1228 		val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1229 		break;
1230 	case PHY_ID_RTL8201E:
1231 		val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1232 		break;
1233 	default:
1234 		return;
1235 	}
1236 
1237 	if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1238 		tw32(MAC_PHYCFG2, val);
1239 
1240 		val = tr32(MAC_PHYCFG1);
1241 		val &= ~(MAC_PHYCFG1_RGMII_INT |
1242 			 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1243 		val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1244 		tw32(MAC_PHYCFG1, val);
1245 
1246 		return;
1247 	}
1248 
1249 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1250 		val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1251 		       MAC_PHYCFG2_FMODE_MASK_MASK |
1252 		       MAC_PHYCFG2_GMODE_MASK_MASK |
1253 		       MAC_PHYCFG2_ACT_MASK_MASK   |
1254 		       MAC_PHYCFG2_QUAL_MASK_MASK |
1255 		       MAC_PHYCFG2_INBAND_ENABLE;
1256 
1257 	tw32(MAC_PHYCFG2, val);
1258 
1259 	val = tr32(MAC_PHYCFG1);
1260 	val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1261 		 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1262 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1263 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1264 			val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1265 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1266 			val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1267 	}
1268 	val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1269 	       MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1270 	tw32(MAC_PHYCFG1, val);
1271 
1272 	val = tr32(MAC_EXT_RGMII_MODE);
1273 	val &= ~(MAC_RGMII_MODE_RX_INT_B |
1274 		 MAC_RGMII_MODE_RX_QUALITY |
1275 		 MAC_RGMII_MODE_RX_ACTIVITY |
1276 		 MAC_RGMII_MODE_RX_ENG_DET |
1277 		 MAC_RGMII_MODE_TX_ENABLE |
1278 		 MAC_RGMII_MODE_TX_LOWPWR |
1279 		 MAC_RGMII_MODE_TX_RESET);
1280 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1281 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1282 			val |= MAC_RGMII_MODE_RX_INT_B |
1283 			       MAC_RGMII_MODE_RX_QUALITY |
1284 			       MAC_RGMII_MODE_RX_ACTIVITY |
1285 			       MAC_RGMII_MODE_RX_ENG_DET;
1286 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1287 			val |= MAC_RGMII_MODE_TX_ENABLE |
1288 			       MAC_RGMII_MODE_TX_LOWPWR |
1289 			       MAC_RGMII_MODE_TX_RESET;
1290 	}
1291 	tw32(MAC_EXT_RGMII_MODE, val);
1292 }
1293 
1294 static void tg3_mdio_start(struct tg3 *tp)
1295 {
1296 	tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1297 	tw32_f(MAC_MI_MODE, tp->mi_mode);
1298 	udelay(80);
1299 
1300 	if (tg3_flag(tp, MDIOBUS_INITED) &&
1301 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1302 		tg3_mdio_config_5785(tp);
1303 }
1304 
1305 static int tg3_mdio_init(struct tg3 *tp)
1306 {
1307 	int i;
1308 	u32 reg;
1309 	struct phy_device *phydev;
1310 
1311 	if (tg3_flag(tp, 5717_PLUS)) {
1312 		u32 is_serdes;
1313 
1314 		tp->phy_addr = tp->pci_fn + 1;
1315 
1316 		if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0)
1317 			is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1318 		else
1319 			is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1320 				    TG3_CPMU_PHY_STRAP_IS_SERDES;
1321 		if (is_serdes)
1322 			tp->phy_addr += 7;
1323 	} else
1324 		tp->phy_addr = TG3_PHY_MII_ADDR;
1325 
1326 	tg3_mdio_start(tp);
1327 
1328 	if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1329 		return 0;
1330 
1331 	tp->mdio_bus = mdiobus_alloc();
1332 	if (tp->mdio_bus == NULL)
1333 		return -ENOMEM;
1334 
1335 	tp->mdio_bus->name     = "tg3 mdio bus";
1336 	snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1337 		 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1338 	tp->mdio_bus->priv     = tp;
1339 	tp->mdio_bus->parent   = &tp->pdev->dev;
1340 	tp->mdio_bus->read     = &tg3_mdio_read;
1341 	tp->mdio_bus->write    = &tg3_mdio_write;
1342 	tp->mdio_bus->reset    = &tg3_mdio_reset;
1343 	tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
1344 	tp->mdio_bus->irq      = &tp->mdio_irq[0];
1345 
1346 	for (i = 0; i < PHY_MAX_ADDR; i++)
1347 		tp->mdio_bus->irq[i] = PHY_POLL;
1348 
1349 	/* The bus registration will look for all the PHYs on the mdio bus.
1350 	 * Unfortunately, it does not ensure the PHY is powered up before
1351 	 * accessing the PHY ID registers.  A chip reset is the
1352 	 * quickest way to bring the device back to an operational state..
1353 	 */
1354 	if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1355 		tg3_bmcr_reset(tp);
1356 
1357 	i = mdiobus_register(tp->mdio_bus);
1358 	if (i) {
1359 		dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1360 		mdiobus_free(tp->mdio_bus);
1361 		return i;
1362 	}
1363 
1364 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1365 
1366 	if (!phydev || !phydev->drv) {
1367 		dev_warn(&tp->pdev->dev, "No PHY devices\n");
1368 		mdiobus_unregister(tp->mdio_bus);
1369 		mdiobus_free(tp->mdio_bus);
1370 		return -ENODEV;
1371 	}
1372 
1373 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1374 	case PHY_ID_BCM57780:
1375 		phydev->interface = PHY_INTERFACE_MODE_GMII;
1376 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1377 		break;
1378 	case PHY_ID_BCM50610:
1379 	case PHY_ID_BCM50610M:
1380 		phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1381 				     PHY_BRCM_RX_REFCLK_UNUSED |
1382 				     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1383 				     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1384 		if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1385 			phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1386 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1387 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1388 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1389 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1390 		/* fallthru */
1391 	case PHY_ID_RTL8211C:
1392 		phydev->interface = PHY_INTERFACE_MODE_RGMII;
1393 		break;
1394 	case PHY_ID_RTL8201E:
1395 	case PHY_ID_BCMAC131:
1396 		phydev->interface = PHY_INTERFACE_MODE_MII;
1397 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1398 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
1399 		break;
1400 	}
1401 
1402 	tg3_flag_set(tp, MDIOBUS_INITED);
1403 
1404 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1405 		tg3_mdio_config_5785(tp);
1406 
1407 	return 0;
1408 }
1409 
1410 static void tg3_mdio_fini(struct tg3 *tp)
1411 {
1412 	if (tg3_flag(tp, MDIOBUS_INITED)) {
1413 		tg3_flag_clear(tp, MDIOBUS_INITED);
1414 		mdiobus_unregister(tp->mdio_bus);
1415 		mdiobus_free(tp->mdio_bus);
1416 	}
1417 }
1418 
1419 /* tp->lock is held. */
1420 static inline void tg3_generate_fw_event(struct tg3 *tp)
1421 {
1422 	u32 val;
1423 
1424 	val = tr32(GRC_RX_CPU_EVENT);
1425 	val |= GRC_RX_CPU_DRIVER_EVENT;
1426 	tw32_f(GRC_RX_CPU_EVENT, val);
1427 
1428 	tp->last_event_jiffies = jiffies;
1429 }
1430 
1431 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1432 
1433 /* tp->lock is held. */
1434 static void tg3_wait_for_event_ack(struct tg3 *tp)
1435 {
1436 	int i;
1437 	unsigned int delay_cnt;
1438 	long time_remain;
1439 
1440 	/* If enough time has passed, no wait is necessary. */
1441 	time_remain = (long)(tp->last_event_jiffies + 1 +
1442 		      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1443 		      (long)jiffies;
1444 	if (time_remain < 0)
1445 		return;
1446 
1447 	/* Check if we can shorten the wait time. */
1448 	delay_cnt = jiffies_to_usecs(time_remain);
1449 	if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1450 		delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1451 	delay_cnt = (delay_cnt >> 3) + 1;
1452 
1453 	for (i = 0; i < delay_cnt; i++) {
1454 		if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1455 			break;
1456 		udelay(8);
1457 	}
1458 }
1459 
1460 /* tp->lock is held. */
1461 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1462 {
1463 	u32 reg, val;
1464 
1465 	val = 0;
1466 	if (!tg3_readphy(tp, MII_BMCR, &reg))
1467 		val = reg << 16;
1468 	if (!tg3_readphy(tp, MII_BMSR, &reg))
1469 		val |= (reg & 0xffff);
1470 	*data++ = val;
1471 
1472 	val = 0;
1473 	if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1474 		val = reg << 16;
1475 	if (!tg3_readphy(tp, MII_LPA, &reg))
1476 		val |= (reg & 0xffff);
1477 	*data++ = val;
1478 
1479 	val = 0;
1480 	if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1481 		if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1482 			val = reg << 16;
1483 		if (!tg3_readphy(tp, MII_STAT1000, &reg))
1484 			val |= (reg & 0xffff);
1485 	}
1486 	*data++ = val;
1487 
1488 	if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1489 		val = reg << 16;
1490 	else
1491 		val = 0;
1492 	*data++ = val;
1493 }
1494 
1495 /* tp->lock is held. */
1496 static void tg3_ump_link_report(struct tg3 *tp)
1497 {
1498 	u32 data[4];
1499 
1500 	if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1501 		return;
1502 
1503 	tg3_phy_gather_ump_data(tp, data);
1504 
1505 	tg3_wait_for_event_ack(tp);
1506 
1507 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1508 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1509 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1510 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1511 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1512 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1513 
1514 	tg3_generate_fw_event(tp);
1515 }
1516 
1517 /* tp->lock is held. */
1518 static void tg3_stop_fw(struct tg3 *tp)
1519 {
1520 	if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1521 		/* Wait for RX cpu to ACK the previous event. */
1522 		tg3_wait_for_event_ack(tp);
1523 
1524 		tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1525 
1526 		tg3_generate_fw_event(tp);
1527 
1528 		/* Wait for RX cpu to ACK this event. */
1529 		tg3_wait_for_event_ack(tp);
1530 	}
1531 }
1532 
1533 /* tp->lock is held. */
1534 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1535 {
1536 	tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1537 		      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1538 
1539 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1540 		switch (kind) {
1541 		case RESET_KIND_INIT:
1542 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1543 				      DRV_STATE_START);
1544 			break;
1545 
1546 		case RESET_KIND_SHUTDOWN:
1547 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1548 				      DRV_STATE_UNLOAD);
1549 			break;
1550 
1551 		case RESET_KIND_SUSPEND:
1552 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1553 				      DRV_STATE_SUSPEND);
1554 			break;
1555 
1556 		default:
1557 			break;
1558 		}
1559 	}
1560 
1561 	if (kind == RESET_KIND_INIT ||
1562 	    kind == RESET_KIND_SUSPEND)
1563 		tg3_ape_driver_state_change(tp, kind);
1564 }
1565 
1566 /* tp->lock is held. */
1567 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1568 {
1569 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1570 		switch (kind) {
1571 		case RESET_KIND_INIT:
1572 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1573 				      DRV_STATE_START_DONE);
1574 			break;
1575 
1576 		case RESET_KIND_SHUTDOWN:
1577 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1578 				      DRV_STATE_UNLOAD_DONE);
1579 			break;
1580 
1581 		default:
1582 			break;
1583 		}
1584 	}
1585 
1586 	if (kind == RESET_KIND_SHUTDOWN)
1587 		tg3_ape_driver_state_change(tp, kind);
1588 }
1589 
1590 /* tp->lock is held. */
1591 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1592 {
1593 	if (tg3_flag(tp, ENABLE_ASF)) {
1594 		switch (kind) {
1595 		case RESET_KIND_INIT:
1596 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1597 				      DRV_STATE_START);
1598 			break;
1599 
1600 		case RESET_KIND_SHUTDOWN:
1601 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1602 				      DRV_STATE_UNLOAD);
1603 			break;
1604 
1605 		case RESET_KIND_SUSPEND:
1606 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1607 				      DRV_STATE_SUSPEND);
1608 			break;
1609 
1610 		default:
1611 			break;
1612 		}
1613 	}
1614 }
1615 
1616 static int tg3_poll_fw(struct tg3 *tp)
1617 {
1618 	int i;
1619 	u32 val;
1620 
1621 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1622 		/* Wait up to 20ms for init done. */
1623 		for (i = 0; i < 200; i++) {
1624 			if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1625 				return 0;
1626 			udelay(100);
1627 		}
1628 		return -ENODEV;
1629 	}
1630 
1631 	/* Wait for firmware initialization to complete. */
1632 	for (i = 0; i < 100000; i++) {
1633 		tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1634 		if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1635 			break;
1636 		udelay(10);
1637 	}
1638 
1639 	/* Chip might not be fitted with firmware.  Some Sun onboard
1640 	 * parts are configured like that.  So don't signal the timeout
1641 	 * of the above loop as an error, but do report the lack of
1642 	 * running firmware once.
1643 	 */
1644 	if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1645 		tg3_flag_set(tp, NO_FWARE_REPORTED);
1646 
1647 		netdev_info(tp->dev, "No firmware running\n");
1648 	}
1649 
1650 	if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
1651 		/* The 57765 A0 needs a little more
1652 		 * time to do some important work.
1653 		 */
1654 		mdelay(10);
1655 	}
1656 
1657 	return 0;
1658 }
1659 
1660 static void tg3_link_report(struct tg3 *tp)
1661 {
1662 	if (!netif_carrier_ok(tp->dev)) {
1663 		netif_info(tp, link, tp->dev, "Link is down\n");
1664 		tg3_ump_link_report(tp);
1665 	} else if (netif_msg_link(tp)) {
1666 		netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1667 			    (tp->link_config.active_speed == SPEED_1000 ?
1668 			     1000 :
1669 			     (tp->link_config.active_speed == SPEED_100 ?
1670 			      100 : 10)),
1671 			    (tp->link_config.active_duplex == DUPLEX_FULL ?
1672 			     "full" : "half"));
1673 
1674 		netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1675 			    (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1676 			    "on" : "off",
1677 			    (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1678 			    "on" : "off");
1679 
1680 		if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1681 			netdev_info(tp->dev, "EEE is %s\n",
1682 				    tp->setlpicnt ? "enabled" : "disabled");
1683 
1684 		tg3_ump_link_report(tp);
1685 	}
1686 }
1687 
1688 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1689 {
1690 	u16 miireg;
1691 
1692 	if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1693 		miireg = ADVERTISE_1000XPAUSE;
1694 	else if (flow_ctrl & FLOW_CTRL_TX)
1695 		miireg = ADVERTISE_1000XPSE_ASYM;
1696 	else if (flow_ctrl & FLOW_CTRL_RX)
1697 		miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1698 	else
1699 		miireg = 0;
1700 
1701 	return miireg;
1702 }
1703 
1704 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1705 {
1706 	u8 cap = 0;
1707 
1708 	if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1709 		cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1710 	} else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1711 		if (lcladv & ADVERTISE_1000XPAUSE)
1712 			cap = FLOW_CTRL_RX;
1713 		if (rmtadv & ADVERTISE_1000XPAUSE)
1714 			cap = FLOW_CTRL_TX;
1715 	}
1716 
1717 	return cap;
1718 }
1719 
1720 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1721 {
1722 	u8 autoneg;
1723 	u8 flowctrl = 0;
1724 	u32 old_rx_mode = tp->rx_mode;
1725 	u32 old_tx_mode = tp->tx_mode;
1726 
1727 	if (tg3_flag(tp, USE_PHYLIB))
1728 		autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
1729 	else
1730 		autoneg = tp->link_config.autoneg;
1731 
1732 	if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1733 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1734 			flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1735 		else
1736 			flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1737 	} else
1738 		flowctrl = tp->link_config.flowctrl;
1739 
1740 	tp->link_config.active_flowctrl = flowctrl;
1741 
1742 	if (flowctrl & FLOW_CTRL_RX)
1743 		tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1744 	else
1745 		tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1746 
1747 	if (old_rx_mode != tp->rx_mode)
1748 		tw32_f(MAC_RX_MODE, tp->rx_mode);
1749 
1750 	if (flowctrl & FLOW_CTRL_TX)
1751 		tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1752 	else
1753 		tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1754 
1755 	if (old_tx_mode != tp->tx_mode)
1756 		tw32_f(MAC_TX_MODE, tp->tx_mode);
1757 }
1758 
1759 static void tg3_adjust_link(struct net_device *dev)
1760 {
1761 	u8 oldflowctrl, linkmesg = 0;
1762 	u32 mac_mode, lcl_adv, rmt_adv;
1763 	struct tg3 *tp = netdev_priv(dev);
1764 	struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1765 
1766 	spin_lock_bh(&tp->lock);
1767 
1768 	mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
1769 				    MAC_MODE_HALF_DUPLEX);
1770 
1771 	oldflowctrl = tp->link_config.active_flowctrl;
1772 
1773 	if (phydev->link) {
1774 		lcl_adv = 0;
1775 		rmt_adv = 0;
1776 
1777 		if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
1778 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1779 		else if (phydev->speed == SPEED_1000 ||
1780 			 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785)
1781 			mac_mode |= MAC_MODE_PORT_MODE_GMII;
1782 		else
1783 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1784 
1785 		if (phydev->duplex == DUPLEX_HALF)
1786 			mac_mode |= MAC_MODE_HALF_DUPLEX;
1787 		else {
1788 			lcl_adv = mii_advertise_flowctrl(
1789 				  tp->link_config.flowctrl);
1790 
1791 			if (phydev->pause)
1792 				rmt_adv = LPA_PAUSE_CAP;
1793 			if (phydev->asym_pause)
1794 				rmt_adv |= LPA_PAUSE_ASYM;
1795 		}
1796 
1797 		tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1798 	} else
1799 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
1800 
1801 	if (mac_mode != tp->mac_mode) {
1802 		tp->mac_mode = mac_mode;
1803 		tw32_f(MAC_MODE, tp->mac_mode);
1804 		udelay(40);
1805 	}
1806 
1807 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
1808 		if (phydev->speed == SPEED_10)
1809 			tw32(MAC_MI_STAT,
1810 			     MAC_MI_STAT_10MBPS_MODE |
1811 			     MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1812 		else
1813 			tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1814 	}
1815 
1816 	if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
1817 		tw32(MAC_TX_LENGTHS,
1818 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1819 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1820 		      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
1821 	else
1822 		tw32(MAC_TX_LENGTHS,
1823 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1824 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1825 		      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
1826 
1827 	if (phydev->link != tp->old_link ||
1828 	    phydev->speed != tp->link_config.active_speed ||
1829 	    phydev->duplex != tp->link_config.active_duplex ||
1830 	    oldflowctrl != tp->link_config.active_flowctrl)
1831 		linkmesg = 1;
1832 
1833 	tp->old_link = phydev->link;
1834 	tp->link_config.active_speed = phydev->speed;
1835 	tp->link_config.active_duplex = phydev->duplex;
1836 
1837 	spin_unlock_bh(&tp->lock);
1838 
1839 	if (linkmesg)
1840 		tg3_link_report(tp);
1841 }
1842 
1843 static int tg3_phy_init(struct tg3 *tp)
1844 {
1845 	struct phy_device *phydev;
1846 
1847 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
1848 		return 0;
1849 
1850 	/* Bring the PHY back to a known state. */
1851 	tg3_bmcr_reset(tp);
1852 
1853 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1854 
1855 	/* Attach the MAC to the PHY. */
1856 	phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link,
1857 			     phydev->dev_flags, phydev->interface);
1858 	if (IS_ERR(phydev)) {
1859 		dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
1860 		return PTR_ERR(phydev);
1861 	}
1862 
1863 	/* Mask with MAC supported features. */
1864 	switch (phydev->interface) {
1865 	case PHY_INTERFACE_MODE_GMII:
1866 	case PHY_INTERFACE_MODE_RGMII:
1867 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
1868 			phydev->supported &= (PHY_GBIT_FEATURES |
1869 					      SUPPORTED_Pause |
1870 					      SUPPORTED_Asym_Pause);
1871 			break;
1872 		}
1873 		/* fallthru */
1874 	case PHY_INTERFACE_MODE_MII:
1875 		phydev->supported &= (PHY_BASIC_FEATURES |
1876 				      SUPPORTED_Pause |
1877 				      SUPPORTED_Asym_Pause);
1878 		break;
1879 	default:
1880 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
1881 		return -EINVAL;
1882 	}
1883 
1884 	tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
1885 
1886 	phydev->advertising = phydev->supported;
1887 
1888 	return 0;
1889 }
1890 
1891 static void tg3_phy_start(struct tg3 *tp)
1892 {
1893 	struct phy_device *phydev;
1894 
1895 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
1896 		return;
1897 
1898 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1899 
1900 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
1901 		tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
1902 		phydev->speed = tp->link_config.speed;
1903 		phydev->duplex = tp->link_config.duplex;
1904 		phydev->autoneg = tp->link_config.autoneg;
1905 		phydev->advertising = tp->link_config.advertising;
1906 	}
1907 
1908 	phy_start(phydev);
1909 
1910 	phy_start_aneg(phydev);
1911 }
1912 
1913 static void tg3_phy_stop(struct tg3 *tp)
1914 {
1915 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
1916 		return;
1917 
1918 	phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
1919 }
1920 
1921 static void tg3_phy_fini(struct tg3 *tp)
1922 {
1923 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
1924 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
1925 		tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
1926 	}
1927 }
1928 
1929 static int tg3_phy_set_extloopbk(struct tg3 *tp)
1930 {
1931 	int err;
1932 	u32 val;
1933 
1934 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
1935 		return 0;
1936 
1937 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
1938 		/* Cannot do read-modify-write on 5401 */
1939 		err = tg3_phy_auxctl_write(tp,
1940 					   MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1941 					   MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
1942 					   0x4c20);
1943 		goto done;
1944 	}
1945 
1946 	err = tg3_phy_auxctl_read(tp,
1947 				  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1948 	if (err)
1949 		return err;
1950 
1951 	val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
1952 	err = tg3_phy_auxctl_write(tp,
1953 				   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
1954 
1955 done:
1956 	return err;
1957 }
1958 
1959 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
1960 {
1961 	u32 phytest;
1962 
1963 	if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
1964 		u32 phy;
1965 
1966 		tg3_writephy(tp, MII_TG3_FET_TEST,
1967 			     phytest | MII_TG3_FET_SHADOW_EN);
1968 		if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
1969 			if (enable)
1970 				phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
1971 			else
1972 				phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
1973 			tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
1974 		}
1975 		tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
1976 	}
1977 }
1978 
1979 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
1980 {
1981 	u32 reg;
1982 
1983 	if (!tg3_flag(tp, 5705_PLUS) ||
1984 	    (tg3_flag(tp, 5717_PLUS) &&
1985 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
1986 		return;
1987 
1988 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
1989 		tg3_phy_fet_toggle_apd(tp, enable);
1990 		return;
1991 	}
1992 
1993 	reg = MII_TG3_MISC_SHDW_WREN |
1994 	      MII_TG3_MISC_SHDW_SCR5_SEL |
1995 	      MII_TG3_MISC_SHDW_SCR5_LPED |
1996 	      MII_TG3_MISC_SHDW_SCR5_DLPTLM |
1997 	      MII_TG3_MISC_SHDW_SCR5_SDTL |
1998 	      MII_TG3_MISC_SHDW_SCR5_C125OE;
1999 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable)
2000 		reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2001 
2002 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2003 
2004 
2005 	reg = MII_TG3_MISC_SHDW_WREN |
2006 	      MII_TG3_MISC_SHDW_APD_SEL |
2007 	      MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2008 	if (enable)
2009 		reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2010 
2011 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2012 }
2013 
2014 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
2015 {
2016 	u32 phy;
2017 
2018 	if (!tg3_flag(tp, 5705_PLUS) ||
2019 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2020 		return;
2021 
2022 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2023 		u32 ephy;
2024 
2025 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2026 			u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2027 
2028 			tg3_writephy(tp, MII_TG3_FET_TEST,
2029 				     ephy | MII_TG3_FET_SHADOW_EN);
2030 			if (!tg3_readphy(tp, reg, &phy)) {
2031 				if (enable)
2032 					phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2033 				else
2034 					phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2035 				tg3_writephy(tp, reg, phy);
2036 			}
2037 			tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2038 		}
2039 	} else {
2040 		int ret;
2041 
2042 		ret = tg3_phy_auxctl_read(tp,
2043 					  MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2044 		if (!ret) {
2045 			if (enable)
2046 				phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2047 			else
2048 				phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2049 			tg3_phy_auxctl_write(tp,
2050 					     MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2051 		}
2052 	}
2053 }
2054 
2055 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2056 {
2057 	int ret;
2058 	u32 val;
2059 
2060 	if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2061 		return;
2062 
2063 	ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2064 	if (!ret)
2065 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2066 				     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2067 }
2068 
2069 static void tg3_phy_apply_otp(struct tg3 *tp)
2070 {
2071 	u32 otp, phy;
2072 
2073 	if (!tp->phy_otp)
2074 		return;
2075 
2076 	otp = tp->phy_otp;
2077 
2078 	if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp))
2079 		return;
2080 
2081 	phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2082 	phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2083 	tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2084 
2085 	phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2086 	      ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2087 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2088 
2089 	phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2090 	phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2091 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2092 
2093 	phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2094 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2095 
2096 	phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2097 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2098 
2099 	phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2100 	      ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2101 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2102 
2103 	TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2104 }
2105 
2106 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
2107 {
2108 	u32 val;
2109 
2110 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2111 		return;
2112 
2113 	tp->setlpicnt = 0;
2114 
2115 	if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2116 	    current_link_up == 1 &&
2117 	    tp->link_config.active_duplex == DUPLEX_FULL &&
2118 	    (tp->link_config.active_speed == SPEED_100 ||
2119 	     tp->link_config.active_speed == SPEED_1000)) {
2120 		u32 eeectl;
2121 
2122 		if (tp->link_config.active_speed == SPEED_1000)
2123 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2124 		else
2125 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2126 
2127 		tw32(TG3_CPMU_EEE_CTRL, eeectl);
2128 
2129 		tg3_phy_cl45_read(tp, MDIO_MMD_AN,
2130 				  TG3_CL45_D7_EEERES_STAT, &val);
2131 
2132 		if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2133 		    val == TG3_CL45_D7_EEERES_STAT_LP_100TX)
2134 			tp->setlpicnt = 2;
2135 	}
2136 
2137 	if (!tp->setlpicnt) {
2138 		if (current_link_up == 1 &&
2139 		   !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2140 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2141 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2142 		}
2143 
2144 		val = tr32(TG3_CPMU_EEE_MODE);
2145 		tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2146 	}
2147 }
2148 
2149 static void tg3_phy_eee_enable(struct tg3 *tp)
2150 {
2151 	u32 val;
2152 
2153 	if (tp->link_config.active_speed == SPEED_1000 &&
2154 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2155 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2156 	     tg3_flag(tp, 57765_CLASS)) &&
2157 	    !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2158 		val = MII_TG3_DSP_TAP26_ALNOKO |
2159 		      MII_TG3_DSP_TAP26_RMRXSTO;
2160 		tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2161 		TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2162 	}
2163 
2164 	val = tr32(TG3_CPMU_EEE_MODE);
2165 	tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2166 }
2167 
2168 static int tg3_wait_macro_done(struct tg3 *tp)
2169 {
2170 	int limit = 100;
2171 
2172 	while (limit--) {
2173 		u32 tmp32;
2174 
2175 		if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2176 			if ((tmp32 & 0x1000) == 0)
2177 				break;
2178 		}
2179 	}
2180 	if (limit < 0)
2181 		return -EBUSY;
2182 
2183 	return 0;
2184 }
2185 
2186 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2187 {
2188 	static const u32 test_pat[4][6] = {
2189 	{ 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2190 	{ 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2191 	{ 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2192 	{ 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2193 	};
2194 	int chan;
2195 
2196 	for (chan = 0; chan < 4; chan++) {
2197 		int i;
2198 
2199 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2200 			     (chan * 0x2000) | 0x0200);
2201 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2202 
2203 		for (i = 0; i < 6; i++)
2204 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2205 				     test_pat[chan][i]);
2206 
2207 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2208 		if (tg3_wait_macro_done(tp)) {
2209 			*resetp = 1;
2210 			return -EBUSY;
2211 		}
2212 
2213 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2214 			     (chan * 0x2000) | 0x0200);
2215 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2216 		if (tg3_wait_macro_done(tp)) {
2217 			*resetp = 1;
2218 			return -EBUSY;
2219 		}
2220 
2221 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2222 		if (tg3_wait_macro_done(tp)) {
2223 			*resetp = 1;
2224 			return -EBUSY;
2225 		}
2226 
2227 		for (i = 0; i < 6; i += 2) {
2228 			u32 low, high;
2229 
2230 			if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2231 			    tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2232 			    tg3_wait_macro_done(tp)) {
2233 				*resetp = 1;
2234 				return -EBUSY;
2235 			}
2236 			low &= 0x7fff;
2237 			high &= 0x000f;
2238 			if (low != test_pat[chan][i] ||
2239 			    high != test_pat[chan][i+1]) {
2240 				tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2241 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2242 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2243 
2244 				return -EBUSY;
2245 			}
2246 		}
2247 	}
2248 
2249 	return 0;
2250 }
2251 
2252 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2253 {
2254 	int chan;
2255 
2256 	for (chan = 0; chan < 4; chan++) {
2257 		int i;
2258 
2259 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2260 			     (chan * 0x2000) | 0x0200);
2261 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2262 		for (i = 0; i < 6; i++)
2263 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2264 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2265 		if (tg3_wait_macro_done(tp))
2266 			return -EBUSY;
2267 	}
2268 
2269 	return 0;
2270 }
2271 
2272 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2273 {
2274 	u32 reg32, phy9_orig;
2275 	int retries, do_phy_reset, err;
2276 
2277 	retries = 10;
2278 	do_phy_reset = 1;
2279 	do {
2280 		if (do_phy_reset) {
2281 			err = tg3_bmcr_reset(tp);
2282 			if (err)
2283 				return err;
2284 			do_phy_reset = 0;
2285 		}
2286 
2287 		/* Disable transmitter and interrupt.  */
2288 		if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2289 			continue;
2290 
2291 		reg32 |= 0x3000;
2292 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2293 
2294 		/* Set full-duplex, 1000 mbps.  */
2295 		tg3_writephy(tp, MII_BMCR,
2296 			     BMCR_FULLDPLX | BMCR_SPEED1000);
2297 
2298 		/* Set to master mode.  */
2299 		if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2300 			continue;
2301 
2302 		tg3_writephy(tp, MII_CTRL1000,
2303 			     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2304 
2305 		err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
2306 		if (err)
2307 			return err;
2308 
2309 		/* Block the PHY control access.  */
2310 		tg3_phydsp_write(tp, 0x8005, 0x0800);
2311 
2312 		err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2313 		if (!err)
2314 			break;
2315 	} while (--retries);
2316 
2317 	err = tg3_phy_reset_chanpat(tp);
2318 	if (err)
2319 		return err;
2320 
2321 	tg3_phydsp_write(tp, 0x8005, 0x0000);
2322 
2323 	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2324 	tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2325 
2326 	TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2327 
2328 	tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2329 
2330 	if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2331 		reg32 &= ~0x3000;
2332 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2333 	} else if (!err)
2334 		err = -EBUSY;
2335 
2336 	return err;
2337 }
2338 
2339 /* This will reset the tigon3 PHY if there is no valid
2340  * link unless the FORCE argument is non-zero.
2341  */
2342 static int tg3_phy_reset(struct tg3 *tp)
2343 {
2344 	u32 val, cpmuctrl;
2345 	int err;
2346 
2347 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2348 		val = tr32(GRC_MISC_CFG);
2349 		tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2350 		udelay(40);
2351 	}
2352 	err  = tg3_readphy(tp, MII_BMSR, &val);
2353 	err |= tg3_readphy(tp, MII_BMSR, &val);
2354 	if (err != 0)
2355 		return -EBUSY;
2356 
2357 	if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
2358 		netif_carrier_off(tp->dev);
2359 		tg3_link_report(tp);
2360 	}
2361 
2362 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2363 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2364 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
2365 		err = tg3_phy_reset_5703_4_5(tp);
2366 		if (err)
2367 			return err;
2368 		goto out;
2369 	}
2370 
2371 	cpmuctrl = 0;
2372 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
2373 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
2374 		cpmuctrl = tr32(TG3_CPMU_CTRL);
2375 		if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2376 			tw32(TG3_CPMU_CTRL,
2377 			     cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2378 	}
2379 
2380 	err = tg3_bmcr_reset(tp);
2381 	if (err)
2382 		return err;
2383 
2384 	if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2385 		val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2386 		tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2387 
2388 		tw32(TG3_CPMU_CTRL, cpmuctrl);
2389 	}
2390 
2391 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2392 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2393 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2394 		if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2395 		    CPMU_LSPD_1000MB_MACCLK_12_5) {
2396 			val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2397 			udelay(40);
2398 			tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2399 		}
2400 	}
2401 
2402 	if (tg3_flag(tp, 5717_PLUS) &&
2403 	    (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2404 		return 0;
2405 
2406 	tg3_phy_apply_otp(tp);
2407 
2408 	if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2409 		tg3_phy_toggle_apd(tp, true);
2410 	else
2411 		tg3_phy_toggle_apd(tp, false);
2412 
2413 out:
2414 	if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2415 	    !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2416 		tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2417 		tg3_phydsp_write(tp, 0x000a, 0x0323);
2418 		TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2419 	}
2420 
2421 	if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2422 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2423 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2424 	}
2425 
2426 	if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2427 		if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2428 			tg3_phydsp_write(tp, 0x000a, 0x310b);
2429 			tg3_phydsp_write(tp, 0x201f, 0x9506);
2430 			tg3_phydsp_write(tp, 0x401f, 0x14e2);
2431 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2432 		}
2433 	} else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2434 		if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2435 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2436 			if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2437 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2438 				tg3_writephy(tp, MII_TG3_TEST1,
2439 					     MII_TG3_TEST1_TRIM_EN | 0x4);
2440 			} else
2441 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2442 
2443 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2444 		}
2445 	}
2446 
2447 	/* Set Extended packet length bit (bit 14) on all chips that */
2448 	/* support jumbo frames */
2449 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2450 		/* Cannot do read-modify-write on 5401 */
2451 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2452 	} else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2453 		/* Set bit 14 with read-modify-write to preserve other bits */
2454 		err = tg3_phy_auxctl_read(tp,
2455 					  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2456 		if (!err)
2457 			tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2458 					   val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2459 	}
2460 
2461 	/* Set phy register 0x10 bit 0 to high fifo elasticity to support
2462 	 * jumbo frames transmission.
2463 	 */
2464 	if (tg3_flag(tp, JUMBO_CAPABLE)) {
2465 		if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2466 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
2467 				     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2468 	}
2469 
2470 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2471 		/* adjust output voltage */
2472 		tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2473 	}
2474 
2475 	tg3_phy_toggle_automdix(tp, 1);
2476 	tg3_phy_set_wirespeed(tp);
2477 	return 0;
2478 }
2479 
2480 #define TG3_GPIO_MSG_DRVR_PRES		 0x00000001
2481 #define TG3_GPIO_MSG_NEED_VAUX		 0x00000002
2482 #define TG3_GPIO_MSG_MASK		 (TG3_GPIO_MSG_DRVR_PRES | \
2483 					  TG3_GPIO_MSG_NEED_VAUX)
2484 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2485 	((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2486 	 (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2487 	 (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2488 	 (TG3_GPIO_MSG_DRVR_PRES << 12))
2489 
2490 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2491 	((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2492 	 (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2493 	 (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2494 	 (TG3_GPIO_MSG_NEED_VAUX << 12))
2495 
2496 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2497 {
2498 	u32 status, shift;
2499 
2500 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2501 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2502 		status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2503 	else
2504 		status = tr32(TG3_CPMU_DRV_STATUS);
2505 
2506 	shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2507 	status &= ~(TG3_GPIO_MSG_MASK << shift);
2508 	status |= (newstat << shift);
2509 
2510 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2511 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2512 		tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2513 	else
2514 		tw32(TG3_CPMU_DRV_STATUS, status);
2515 
2516 	return status >> TG3_APE_GPIO_MSG_SHIFT;
2517 }
2518 
2519 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2520 {
2521 	if (!tg3_flag(tp, IS_NIC))
2522 		return 0;
2523 
2524 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2525 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2526 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2527 		if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2528 			return -EIO;
2529 
2530 		tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2531 
2532 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2533 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2534 
2535 		tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2536 	} else {
2537 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2538 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2539 	}
2540 
2541 	return 0;
2542 }
2543 
2544 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2545 {
2546 	u32 grc_local_ctrl;
2547 
2548 	if (!tg3_flag(tp, IS_NIC) ||
2549 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2550 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)
2551 		return;
2552 
2553 	grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2554 
2555 	tw32_wait_f(GRC_LOCAL_CTRL,
2556 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2557 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2558 
2559 	tw32_wait_f(GRC_LOCAL_CTRL,
2560 		    grc_local_ctrl,
2561 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2562 
2563 	tw32_wait_f(GRC_LOCAL_CTRL,
2564 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2565 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2566 }
2567 
2568 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2569 {
2570 	if (!tg3_flag(tp, IS_NIC))
2571 		return;
2572 
2573 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2574 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2575 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2576 			    (GRC_LCLCTRL_GPIO_OE0 |
2577 			     GRC_LCLCTRL_GPIO_OE1 |
2578 			     GRC_LCLCTRL_GPIO_OE2 |
2579 			     GRC_LCLCTRL_GPIO_OUTPUT0 |
2580 			     GRC_LCLCTRL_GPIO_OUTPUT1),
2581 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2582 	} else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2583 		   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2584 		/* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2585 		u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2586 				     GRC_LCLCTRL_GPIO_OE1 |
2587 				     GRC_LCLCTRL_GPIO_OE2 |
2588 				     GRC_LCLCTRL_GPIO_OUTPUT0 |
2589 				     GRC_LCLCTRL_GPIO_OUTPUT1 |
2590 				     tp->grc_local_ctrl;
2591 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2592 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2593 
2594 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2595 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2596 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2597 
2598 		grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2599 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2600 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2601 	} else {
2602 		u32 no_gpio2;
2603 		u32 grc_local_ctrl = 0;
2604 
2605 		/* Workaround to prevent overdrawing Amps. */
2606 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2607 			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2608 			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2609 				    grc_local_ctrl,
2610 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2611 		}
2612 
2613 		/* On 5753 and variants, GPIO2 cannot be used. */
2614 		no_gpio2 = tp->nic_sram_data_cfg &
2615 			   NIC_SRAM_DATA_CFG_NO_GPIO2;
2616 
2617 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2618 				  GRC_LCLCTRL_GPIO_OE1 |
2619 				  GRC_LCLCTRL_GPIO_OE2 |
2620 				  GRC_LCLCTRL_GPIO_OUTPUT1 |
2621 				  GRC_LCLCTRL_GPIO_OUTPUT2;
2622 		if (no_gpio2) {
2623 			grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2624 					    GRC_LCLCTRL_GPIO_OUTPUT2);
2625 		}
2626 		tw32_wait_f(GRC_LOCAL_CTRL,
2627 			    tp->grc_local_ctrl | grc_local_ctrl,
2628 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2629 
2630 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2631 
2632 		tw32_wait_f(GRC_LOCAL_CTRL,
2633 			    tp->grc_local_ctrl | grc_local_ctrl,
2634 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2635 
2636 		if (!no_gpio2) {
2637 			grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2638 			tw32_wait_f(GRC_LOCAL_CTRL,
2639 				    tp->grc_local_ctrl | grc_local_ctrl,
2640 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2641 		}
2642 	}
2643 }
2644 
2645 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2646 {
2647 	u32 msg = 0;
2648 
2649 	/* Serialize power state transitions */
2650 	if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2651 		return;
2652 
2653 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2654 		msg = TG3_GPIO_MSG_NEED_VAUX;
2655 
2656 	msg = tg3_set_function_status(tp, msg);
2657 
2658 	if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2659 		goto done;
2660 
2661 	if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2662 		tg3_pwrsrc_switch_to_vaux(tp);
2663 	else
2664 		tg3_pwrsrc_die_with_vmain(tp);
2665 
2666 done:
2667 	tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2668 }
2669 
2670 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2671 {
2672 	bool need_vaux = false;
2673 
2674 	/* The GPIOs do something completely different on 57765. */
2675 	if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2676 		return;
2677 
2678 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2679 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2680 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2681 		tg3_frob_aux_power_5717(tp, include_wol ?
2682 					tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2683 		return;
2684 	}
2685 
2686 	if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2687 		struct net_device *dev_peer;
2688 
2689 		dev_peer = pci_get_drvdata(tp->pdev_peer);
2690 
2691 		/* remove_one() may have been run on the peer. */
2692 		if (dev_peer) {
2693 			struct tg3 *tp_peer = netdev_priv(dev_peer);
2694 
2695 			if (tg3_flag(tp_peer, INIT_COMPLETE))
2696 				return;
2697 
2698 			if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2699 			    tg3_flag(tp_peer, ENABLE_ASF))
2700 				need_vaux = true;
2701 		}
2702 	}
2703 
2704 	if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2705 	    tg3_flag(tp, ENABLE_ASF))
2706 		need_vaux = true;
2707 
2708 	if (need_vaux)
2709 		tg3_pwrsrc_switch_to_vaux(tp);
2710 	else
2711 		tg3_pwrsrc_die_with_vmain(tp);
2712 }
2713 
2714 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
2715 {
2716 	if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
2717 		return 1;
2718 	else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
2719 		if (speed != SPEED_10)
2720 			return 1;
2721 	} else if (speed == SPEED_10)
2722 		return 1;
2723 
2724 	return 0;
2725 }
2726 
2727 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
2728 {
2729 	u32 val;
2730 
2731 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
2732 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
2733 			u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2734 			u32 serdes_cfg = tr32(MAC_SERDES_CFG);
2735 
2736 			sg_dig_ctrl |=
2737 				SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
2738 			tw32(SG_DIG_CTRL, sg_dig_ctrl);
2739 			tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
2740 		}
2741 		return;
2742 	}
2743 
2744 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2745 		tg3_bmcr_reset(tp);
2746 		val = tr32(GRC_MISC_CFG);
2747 		tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
2748 		udelay(40);
2749 		return;
2750 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2751 		u32 phytest;
2752 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2753 			u32 phy;
2754 
2755 			tg3_writephy(tp, MII_ADVERTISE, 0);
2756 			tg3_writephy(tp, MII_BMCR,
2757 				     BMCR_ANENABLE | BMCR_ANRESTART);
2758 
2759 			tg3_writephy(tp, MII_TG3_FET_TEST,
2760 				     phytest | MII_TG3_FET_SHADOW_EN);
2761 			if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
2762 				phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
2763 				tg3_writephy(tp,
2764 					     MII_TG3_FET_SHDW_AUXMODE4,
2765 					     phy);
2766 			}
2767 			tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2768 		}
2769 		return;
2770 	} else if (do_low_power) {
2771 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
2772 			     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
2773 
2774 		val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
2775 		      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
2776 		      MII_TG3_AUXCTL_PCTL_VREG_11V;
2777 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
2778 	}
2779 
2780 	/* The PHY should not be powered down on some chips because
2781 	 * of bugs.
2782 	 */
2783 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2784 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2785 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
2786 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
2787 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 &&
2788 	     !tp->pci_fn))
2789 		return;
2790 
2791 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2792 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2793 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2794 		val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2795 		val |= CPMU_LSPD_1000MB_MACCLK_12_5;
2796 		tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2797 	}
2798 
2799 	tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
2800 }
2801 
2802 /* tp->lock is held. */
2803 static int tg3_nvram_lock(struct tg3 *tp)
2804 {
2805 	if (tg3_flag(tp, NVRAM)) {
2806 		int i;
2807 
2808 		if (tp->nvram_lock_cnt == 0) {
2809 			tw32(NVRAM_SWARB, SWARB_REQ_SET1);
2810 			for (i = 0; i < 8000; i++) {
2811 				if (tr32(NVRAM_SWARB) & SWARB_GNT1)
2812 					break;
2813 				udelay(20);
2814 			}
2815 			if (i == 8000) {
2816 				tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
2817 				return -ENODEV;
2818 			}
2819 		}
2820 		tp->nvram_lock_cnt++;
2821 	}
2822 	return 0;
2823 }
2824 
2825 /* tp->lock is held. */
2826 static void tg3_nvram_unlock(struct tg3 *tp)
2827 {
2828 	if (tg3_flag(tp, NVRAM)) {
2829 		if (tp->nvram_lock_cnt > 0)
2830 			tp->nvram_lock_cnt--;
2831 		if (tp->nvram_lock_cnt == 0)
2832 			tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
2833 	}
2834 }
2835 
2836 /* tp->lock is held. */
2837 static void tg3_enable_nvram_access(struct tg3 *tp)
2838 {
2839 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2840 		u32 nvaccess = tr32(NVRAM_ACCESS);
2841 
2842 		tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
2843 	}
2844 }
2845 
2846 /* tp->lock is held. */
2847 static void tg3_disable_nvram_access(struct tg3 *tp)
2848 {
2849 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2850 		u32 nvaccess = tr32(NVRAM_ACCESS);
2851 
2852 		tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
2853 	}
2854 }
2855 
2856 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
2857 					u32 offset, u32 *val)
2858 {
2859 	u32 tmp;
2860 	int i;
2861 
2862 	if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
2863 		return -EINVAL;
2864 
2865 	tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
2866 					EEPROM_ADDR_DEVID_MASK |
2867 					EEPROM_ADDR_READ);
2868 	tw32(GRC_EEPROM_ADDR,
2869 	     tmp |
2870 	     (0 << EEPROM_ADDR_DEVID_SHIFT) |
2871 	     ((offset << EEPROM_ADDR_ADDR_SHIFT) &
2872 	      EEPROM_ADDR_ADDR_MASK) |
2873 	     EEPROM_ADDR_READ | EEPROM_ADDR_START);
2874 
2875 	for (i = 0; i < 1000; i++) {
2876 		tmp = tr32(GRC_EEPROM_ADDR);
2877 
2878 		if (tmp & EEPROM_ADDR_COMPLETE)
2879 			break;
2880 		msleep(1);
2881 	}
2882 	if (!(tmp & EEPROM_ADDR_COMPLETE))
2883 		return -EBUSY;
2884 
2885 	tmp = tr32(GRC_EEPROM_DATA);
2886 
2887 	/*
2888 	 * The data will always be opposite the native endian
2889 	 * format.  Perform a blind byteswap to compensate.
2890 	 */
2891 	*val = swab32(tmp);
2892 
2893 	return 0;
2894 }
2895 
2896 #define NVRAM_CMD_TIMEOUT 10000
2897 
2898 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
2899 {
2900 	int i;
2901 
2902 	tw32(NVRAM_CMD, nvram_cmd);
2903 	for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
2904 		udelay(10);
2905 		if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
2906 			udelay(10);
2907 			break;
2908 		}
2909 	}
2910 
2911 	if (i == NVRAM_CMD_TIMEOUT)
2912 		return -EBUSY;
2913 
2914 	return 0;
2915 }
2916 
2917 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
2918 {
2919 	if (tg3_flag(tp, NVRAM) &&
2920 	    tg3_flag(tp, NVRAM_BUFFERED) &&
2921 	    tg3_flag(tp, FLASH) &&
2922 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
2923 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
2924 
2925 		addr = ((addr / tp->nvram_pagesize) <<
2926 			ATMEL_AT45DB0X1B_PAGE_POS) +
2927 		       (addr % tp->nvram_pagesize);
2928 
2929 	return addr;
2930 }
2931 
2932 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
2933 {
2934 	if (tg3_flag(tp, NVRAM) &&
2935 	    tg3_flag(tp, NVRAM_BUFFERED) &&
2936 	    tg3_flag(tp, FLASH) &&
2937 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
2938 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
2939 
2940 		addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
2941 			tp->nvram_pagesize) +
2942 		       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
2943 
2944 	return addr;
2945 }
2946 
2947 /* NOTE: Data read in from NVRAM is byteswapped according to
2948  * the byteswapping settings for all other register accesses.
2949  * tg3 devices are BE devices, so on a BE machine, the data
2950  * returned will be exactly as it is seen in NVRAM.  On a LE
2951  * machine, the 32-bit value will be byteswapped.
2952  */
2953 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
2954 {
2955 	int ret;
2956 
2957 	if (!tg3_flag(tp, NVRAM))
2958 		return tg3_nvram_read_using_eeprom(tp, offset, val);
2959 
2960 	offset = tg3_nvram_phys_addr(tp, offset);
2961 
2962 	if (offset > NVRAM_ADDR_MSK)
2963 		return -EINVAL;
2964 
2965 	ret = tg3_nvram_lock(tp);
2966 	if (ret)
2967 		return ret;
2968 
2969 	tg3_enable_nvram_access(tp);
2970 
2971 	tw32(NVRAM_ADDR, offset);
2972 	ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
2973 		NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
2974 
2975 	if (ret == 0)
2976 		*val = tr32(NVRAM_RDDATA);
2977 
2978 	tg3_disable_nvram_access(tp);
2979 
2980 	tg3_nvram_unlock(tp);
2981 
2982 	return ret;
2983 }
2984 
2985 /* Ensures NVRAM data is in bytestream format. */
2986 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
2987 {
2988 	u32 v;
2989 	int res = tg3_nvram_read(tp, offset, &v);
2990 	if (!res)
2991 		*val = cpu_to_be32(v);
2992 	return res;
2993 }
2994 
2995 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
2996 				    u32 offset, u32 len, u8 *buf)
2997 {
2998 	int i, j, rc = 0;
2999 	u32 val;
3000 
3001 	for (i = 0; i < len; i += 4) {
3002 		u32 addr;
3003 		__be32 data;
3004 
3005 		addr = offset + i;
3006 
3007 		memcpy(&data, buf + i, 4);
3008 
3009 		/*
3010 		 * The SEEPROM interface expects the data to always be opposite
3011 		 * the native endian format.  We accomplish this by reversing
3012 		 * all the operations that would have been performed on the
3013 		 * data from a call to tg3_nvram_read_be32().
3014 		 */
3015 		tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3016 
3017 		val = tr32(GRC_EEPROM_ADDR);
3018 		tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3019 
3020 		val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3021 			EEPROM_ADDR_READ);
3022 		tw32(GRC_EEPROM_ADDR, val |
3023 			(0 << EEPROM_ADDR_DEVID_SHIFT) |
3024 			(addr & EEPROM_ADDR_ADDR_MASK) |
3025 			EEPROM_ADDR_START |
3026 			EEPROM_ADDR_WRITE);
3027 
3028 		for (j = 0; j < 1000; j++) {
3029 			val = tr32(GRC_EEPROM_ADDR);
3030 
3031 			if (val & EEPROM_ADDR_COMPLETE)
3032 				break;
3033 			msleep(1);
3034 		}
3035 		if (!(val & EEPROM_ADDR_COMPLETE)) {
3036 			rc = -EBUSY;
3037 			break;
3038 		}
3039 	}
3040 
3041 	return rc;
3042 }
3043 
3044 /* offset and length are dword aligned */
3045 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3046 		u8 *buf)
3047 {
3048 	int ret = 0;
3049 	u32 pagesize = tp->nvram_pagesize;
3050 	u32 pagemask = pagesize - 1;
3051 	u32 nvram_cmd;
3052 	u8 *tmp;
3053 
3054 	tmp = kmalloc(pagesize, GFP_KERNEL);
3055 	if (tmp == NULL)
3056 		return -ENOMEM;
3057 
3058 	while (len) {
3059 		int j;
3060 		u32 phy_addr, page_off, size;
3061 
3062 		phy_addr = offset & ~pagemask;
3063 
3064 		for (j = 0; j < pagesize; j += 4) {
3065 			ret = tg3_nvram_read_be32(tp, phy_addr + j,
3066 						  (__be32 *) (tmp + j));
3067 			if (ret)
3068 				break;
3069 		}
3070 		if (ret)
3071 			break;
3072 
3073 		page_off = offset & pagemask;
3074 		size = pagesize;
3075 		if (len < size)
3076 			size = len;
3077 
3078 		len -= size;
3079 
3080 		memcpy(tmp + page_off, buf, size);
3081 
3082 		offset = offset + (pagesize - page_off);
3083 
3084 		tg3_enable_nvram_access(tp);
3085 
3086 		/*
3087 		 * Before we can erase the flash page, we need
3088 		 * to issue a special "write enable" command.
3089 		 */
3090 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3091 
3092 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3093 			break;
3094 
3095 		/* Erase the target page */
3096 		tw32(NVRAM_ADDR, phy_addr);
3097 
3098 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3099 			NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3100 
3101 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3102 			break;
3103 
3104 		/* Issue another write enable to start the write. */
3105 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3106 
3107 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3108 			break;
3109 
3110 		for (j = 0; j < pagesize; j += 4) {
3111 			__be32 data;
3112 
3113 			data = *((__be32 *) (tmp + j));
3114 
3115 			tw32(NVRAM_WRDATA, be32_to_cpu(data));
3116 
3117 			tw32(NVRAM_ADDR, phy_addr + j);
3118 
3119 			nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3120 				NVRAM_CMD_WR;
3121 
3122 			if (j == 0)
3123 				nvram_cmd |= NVRAM_CMD_FIRST;
3124 			else if (j == (pagesize - 4))
3125 				nvram_cmd |= NVRAM_CMD_LAST;
3126 
3127 			ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3128 			if (ret)
3129 				break;
3130 		}
3131 		if (ret)
3132 			break;
3133 	}
3134 
3135 	nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3136 	tg3_nvram_exec_cmd(tp, nvram_cmd);
3137 
3138 	kfree(tmp);
3139 
3140 	return ret;
3141 }
3142 
3143 /* offset and length are dword aligned */
3144 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3145 		u8 *buf)
3146 {
3147 	int i, ret = 0;
3148 
3149 	for (i = 0; i < len; i += 4, offset += 4) {
3150 		u32 page_off, phy_addr, nvram_cmd;
3151 		__be32 data;
3152 
3153 		memcpy(&data, buf + i, 4);
3154 		tw32(NVRAM_WRDATA, be32_to_cpu(data));
3155 
3156 		page_off = offset % tp->nvram_pagesize;
3157 
3158 		phy_addr = tg3_nvram_phys_addr(tp, offset);
3159 
3160 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3161 
3162 		if (page_off == 0 || i == 0)
3163 			nvram_cmd |= NVRAM_CMD_FIRST;
3164 		if (page_off == (tp->nvram_pagesize - 4))
3165 			nvram_cmd |= NVRAM_CMD_LAST;
3166 
3167 		if (i == (len - 4))
3168 			nvram_cmd |= NVRAM_CMD_LAST;
3169 
3170 		if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3171 		    !tg3_flag(tp, FLASH) ||
3172 		    !tg3_flag(tp, 57765_PLUS))
3173 			tw32(NVRAM_ADDR, phy_addr);
3174 
3175 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
3176 		    !tg3_flag(tp, 5755_PLUS) &&
3177 		    (tp->nvram_jedecnum == JEDEC_ST) &&
3178 		    (nvram_cmd & NVRAM_CMD_FIRST)) {
3179 			u32 cmd;
3180 
3181 			cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3182 			ret = tg3_nvram_exec_cmd(tp, cmd);
3183 			if (ret)
3184 				break;
3185 		}
3186 		if (!tg3_flag(tp, FLASH)) {
3187 			/* We always do complete word writes to eeprom. */
3188 			nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3189 		}
3190 
3191 		ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3192 		if (ret)
3193 			break;
3194 	}
3195 	return ret;
3196 }
3197 
3198 /* offset and length are dword aligned */
3199 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3200 {
3201 	int ret;
3202 
3203 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3204 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3205 		       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3206 		udelay(40);
3207 	}
3208 
3209 	if (!tg3_flag(tp, NVRAM)) {
3210 		ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3211 	} else {
3212 		u32 grc_mode;
3213 
3214 		ret = tg3_nvram_lock(tp);
3215 		if (ret)
3216 			return ret;
3217 
3218 		tg3_enable_nvram_access(tp);
3219 		if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3220 			tw32(NVRAM_WRITE1, 0x406);
3221 
3222 		grc_mode = tr32(GRC_MODE);
3223 		tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3224 
3225 		if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3226 			ret = tg3_nvram_write_block_buffered(tp, offset, len,
3227 				buf);
3228 		} else {
3229 			ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3230 				buf);
3231 		}
3232 
3233 		grc_mode = tr32(GRC_MODE);
3234 		tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3235 
3236 		tg3_disable_nvram_access(tp);
3237 		tg3_nvram_unlock(tp);
3238 	}
3239 
3240 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3241 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3242 		udelay(40);
3243 	}
3244 
3245 	return ret;
3246 }
3247 
3248 #define RX_CPU_SCRATCH_BASE	0x30000
3249 #define RX_CPU_SCRATCH_SIZE	0x04000
3250 #define TX_CPU_SCRATCH_BASE	0x34000
3251 #define TX_CPU_SCRATCH_SIZE	0x04000
3252 
3253 /* tp->lock is held. */
3254 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
3255 {
3256 	int i;
3257 
3258 	BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3259 
3260 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3261 		u32 val = tr32(GRC_VCPU_EXT_CTRL);
3262 
3263 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3264 		return 0;
3265 	}
3266 	if (offset == RX_CPU_BASE) {
3267 		for (i = 0; i < 10000; i++) {
3268 			tw32(offset + CPU_STATE, 0xffffffff);
3269 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3270 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3271 				break;
3272 		}
3273 
3274 		tw32(offset + CPU_STATE, 0xffffffff);
3275 		tw32_f(offset + CPU_MODE,  CPU_MODE_HALT);
3276 		udelay(10);
3277 	} else {
3278 		for (i = 0; i < 10000; i++) {
3279 			tw32(offset + CPU_STATE, 0xffffffff);
3280 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3281 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3282 				break;
3283 		}
3284 	}
3285 
3286 	if (i >= 10000) {
3287 		netdev_err(tp->dev, "%s timed out, %s CPU\n",
3288 			   __func__, offset == RX_CPU_BASE ? "RX" : "TX");
3289 		return -ENODEV;
3290 	}
3291 
3292 	/* Clear firmware's nvram arbitration. */
3293 	if (tg3_flag(tp, NVRAM))
3294 		tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3295 	return 0;
3296 }
3297 
3298 struct fw_info {
3299 	unsigned int fw_base;
3300 	unsigned int fw_len;
3301 	const __be32 *fw_data;
3302 };
3303 
3304 /* tp->lock is held. */
3305 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3306 				 u32 cpu_scratch_base, int cpu_scratch_size,
3307 				 struct fw_info *info)
3308 {
3309 	int err, lock_err, i;
3310 	void (*write_op)(struct tg3 *, u32, u32);
3311 
3312 	if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3313 		netdev_err(tp->dev,
3314 			   "%s: Trying to load TX cpu firmware which is 5705\n",
3315 			   __func__);
3316 		return -EINVAL;
3317 	}
3318 
3319 	if (tg3_flag(tp, 5705_PLUS))
3320 		write_op = tg3_write_mem;
3321 	else
3322 		write_op = tg3_write_indirect_reg32;
3323 
3324 	/* It is possible that bootcode is still loading at this point.
3325 	 * Get the nvram lock first before halting the cpu.
3326 	 */
3327 	lock_err = tg3_nvram_lock(tp);
3328 	err = tg3_halt_cpu(tp, cpu_base);
3329 	if (!lock_err)
3330 		tg3_nvram_unlock(tp);
3331 	if (err)
3332 		goto out;
3333 
3334 	for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3335 		write_op(tp, cpu_scratch_base + i, 0);
3336 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3337 	tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
3338 	for (i = 0; i < (info->fw_len / sizeof(u32)); i++)
3339 		write_op(tp, (cpu_scratch_base +
3340 			      (info->fw_base & 0xffff) +
3341 			      (i * sizeof(u32))),
3342 			      be32_to_cpu(info->fw_data[i]));
3343 
3344 	err = 0;
3345 
3346 out:
3347 	return err;
3348 }
3349 
3350 /* tp->lock is held. */
3351 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3352 {
3353 	struct fw_info info;
3354 	const __be32 *fw_data;
3355 	int err, i;
3356 
3357 	fw_data = (void *)tp->fw->data;
3358 
3359 	/* Firmware blob starts with version numbers, followed by
3360 	   start address and length. We are setting complete length.
3361 	   length = end_address_of_bss - start_address_of_text.
3362 	   Remainder is the blob to be loaded contiguously
3363 	   from start address. */
3364 
3365 	info.fw_base = be32_to_cpu(fw_data[1]);
3366 	info.fw_len = tp->fw->size - 12;
3367 	info.fw_data = &fw_data[3];
3368 
3369 	err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3370 				    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3371 				    &info);
3372 	if (err)
3373 		return err;
3374 
3375 	err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3376 				    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3377 				    &info);
3378 	if (err)
3379 		return err;
3380 
3381 	/* Now startup only the RX cpu. */
3382 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3383 	tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3384 
3385 	for (i = 0; i < 5; i++) {
3386 		if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base)
3387 			break;
3388 		tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3389 		tw32(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3390 		tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3391 		udelay(1000);
3392 	}
3393 	if (i >= 5) {
3394 		netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3395 			   "should be %08x\n", __func__,
3396 			   tr32(RX_CPU_BASE + CPU_PC), info.fw_base);
3397 		return -ENODEV;
3398 	}
3399 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3400 	tw32_f(RX_CPU_BASE + CPU_MODE,  0x00000000);
3401 
3402 	return 0;
3403 }
3404 
3405 /* tp->lock is held. */
3406 static int tg3_load_tso_firmware(struct tg3 *tp)
3407 {
3408 	struct fw_info info;
3409 	const __be32 *fw_data;
3410 	unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3411 	int err, i;
3412 
3413 	if (tg3_flag(tp, HW_TSO_1) ||
3414 	    tg3_flag(tp, HW_TSO_2) ||
3415 	    tg3_flag(tp, HW_TSO_3))
3416 		return 0;
3417 
3418 	fw_data = (void *)tp->fw->data;
3419 
3420 	/* Firmware blob starts with version numbers, followed by
3421 	   start address and length. We are setting complete length.
3422 	   length = end_address_of_bss - start_address_of_text.
3423 	   Remainder is the blob to be loaded contiguously
3424 	   from start address. */
3425 
3426 	info.fw_base = be32_to_cpu(fw_data[1]);
3427 	cpu_scratch_size = tp->fw_len;
3428 	info.fw_len = tp->fw->size - 12;
3429 	info.fw_data = &fw_data[3];
3430 
3431 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
3432 		cpu_base = RX_CPU_BASE;
3433 		cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3434 	} else {
3435 		cpu_base = TX_CPU_BASE;
3436 		cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3437 		cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3438 	}
3439 
3440 	err = tg3_load_firmware_cpu(tp, cpu_base,
3441 				    cpu_scratch_base, cpu_scratch_size,
3442 				    &info);
3443 	if (err)
3444 		return err;
3445 
3446 	/* Now startup the cpu. */
3447 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3448 	tw32_f(cpu_base + CPU_PC, info.fw_base);
3449 
3450 	for (i = 0; i < 5; i++) {
3451 		if (tr32(cpu_base + CPU_PC) == info.fw_base)
3452 			break;
3453 		tw32(cpu_base + CPU_STATE, 0xffffffff);
3454 		tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3455 		tw32_f(cpu_base + CPU_PC, info.fw_base);
3456 		udelay(1000);
3457 	}
3458 	if (i >= 5) {
3459 		netdev_err(tp->dev,
3460 			   "%s fails to set CPU PC, is %08x should be %08x\n",
3461 			   __func__, tr32(cpu_base + CPU_PC), info.fw_base);
3462 		return -ENODEV;
3463 	}
3464 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3465 	tw32_f(cpu_base + CPU_MODE,  0x00000000);
3466 	return 0;
3467 }
3468 
3469 
3470 /* tp->lock is held. */
3471 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
3472 {
3473 	u32 addr_high, addr_low;
3474 	int i;
3475 
3476 	addr_high = ((tp->dev->dev_addr[0] << 8) |
3477 		     tp->dev->dev_addr[1]);
3478 	addr_low = ((tp->dev->dev_addr[2] << 24) |
3479 		    (tp->dev->dev_addr[3] << 16) |
3480 		    (tp->dev->dev_addr[4] <<  8) |
3481 		    (tp->dev->dev_addr[5] <<  0));
3482 	for (i = 0; i < 4; i++) {
3483 		if (i == 1 && skip_mac_1)
3484 			continue;
3485 		tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
3486 		tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
3487 	}
3488 
3489 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
3490 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
3491 		for (i = 0; i < 12; i++) {
3492 			tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
3493 			tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
3494 		}
3495 	}
3496 
3497 	addr_high = (tp->dev->dev_addr[0] +
3498 		     tp->dev->dev_addr[1] +
3499 		     tp->dev->dev_addr[2] +
3500 		     tp->dev->dev_addr[3] +
3501 		     tp->dev->dev_addr[4] +
3502 		     tp->dev->dev_addr[5]) &
3503 		TX_BACKOFF_SEED_MASK;
3504 	tw32(MAC_TX_BACKOFF_SEED, addr_high);
3505 }
3506 
3507 static void tg3_enable_register_access(struct tg3 *tp)
3508 {
3509 	/*
3510 	 * Make sure register accesses (indirect or otherwise) will function
3511 	 * correctly.
3512 	 */
3513 	pci_write_config_dword(tp->pdev,
3514 			       TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
3515 }
3516 
3517 static int tg3_power_up(struct tg3 *tp)
3518 {
3519 	int err;
3520 
3521 	tg3_enable_register_access(tp);
3522 
3523 	err = pci_set_power_state(tp->pdev, PCI_D0);
3524 	if (!err) {
3525 		/* Switch out of Vaux if it is a NIC */
3526 		tg3_pwrsrc_switch_to_vmain(tp);
3527 	} else {
3528 		netdev_err(tp->dev, "Transition to D0 failed\n");
3529 	}
3530 
3531 	return err;
3532 }
3533 
3534 static int tg3_setup_phy(struct tg3 *, int);
3535 
3536 static int tg3_power_down_prepare(struct tg3 *tp)
3537 {
3538 	u32 misc_host_ctrl;
3539 	bool device_should_wake, do_low_power;
3540 
3541 	tg3_enable_register_access(tp);
3542 
3543 	/* Restore the CLKREQ setting. */
3544 	if (tg3_flag(tp, CLKREQ_BUG)) {
3545 		u16 lnkctl;
3546 
3547 		pci_read_config_word(tp->pdev,
3548 				     pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
3549 				     &lnkctl);
3550 		lnkctl |= PCI_EXP_LNKCTL_CLKREQ_EN;
3551 		pci_write_config_word(tp->pdev,
3552 				      pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
3553 				      lnkctl);
3554 	}
3555 
3556 	misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
3557 	tw32(TG3PCI_MISC_HOST_CTRL,
3558 	     misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
3559 
3560 	device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
3561 			     tg3_flag(tp, WOL_ENABLE);
3562 
3563 	if (tg3_flag(tp, USE_PHYLIB)) {
3564 		do_low_power = false;
3565 		if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
3566 		    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
3567 			struct phy_device *phydev;
3568 			u32 phyid, advertising;
3569 
3570 			phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
3571 
3572 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3573 
3574 			tp->link_config.speed = phydev->speed;
3575 			tp->link_config.duplex = phydev->duplex;
3576 			tp->link_config.autoneg = phydev->autoneg;
3577 			tp->link_config.advertising = phydev->advertising;
3578 
3579 			advertising = ADVERTISED_TP |
3580 				      ADVERTISED_Pause |
3581 				      ADVERTISED_Autoneg |
3582 				      ADVERTISED_10baseT_Half;
3583 
3584 			if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
3585 				if (tg3_flag(tp, WOL_SPEED_100MB))
3586 					advertising |=
3587 						ADVERTISED_100baseT_Half |
3588 						ADVERTISED_100baseT_Full |
3589 						ADVERTISED_10baseT_Full;
3590 				else
3591 					advertising |= ADVERTISED_10baseT_Full;
3592 			}
3593 
3594 			phydev->advertising = advertising;
3595 
3596 			phy_start_aneg(phydev);
3597 
3598 			phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
3599 			if (phyid != PHY_ID_BCMAC131) {
3600 				phyid &= PHY_BCM_OUI_MASK;
3601 				if (phyid == PHY_BCM_OUI_1 ||
3602 				    phyid == PHY_BCM_OUI_2 ||
3603 				    phyid == PHY_BCM_OUI_3)
3604 					do_low_power = true;
3605 			}
3606 		}
3607 	} else {
3608 		do_low_power = true;
3609 
3610 		if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
3611 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3612 
3613 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
3614 			tg3_setup_phy(tp, 0);
3615 	}
3616 
3617 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3618 		u32 val;
3619 
3620 		val = tr32(GRC_VCPU_EXT_CTRL);
3621 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
3622 	} else if (!tg3_flag(tp, ENABLE_ASF)) {
3623 		int i;
3624 		u32 val;
3625 
3626 		for (i = 0; i < 200; i++) {
3627 			tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
3628 			if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
3629 				break;
3630 			msleep(1);
3631 		}
3632 	}
3633 	if (tg3_flag(tp, WOL_CAP))
3634 		tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
3635 						     WOL_DRV_STATE_SHUTDOWN |
3636 						     WOL_DRV_WOL |
3637 						     WOL_SET_MAGIC_PKT);
3638 
3639 	if (device_should_wake) {
3640 		u32 mac_mode;
3641 
3642 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
3643 			if (do_low_power &&
3644 			    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
3645 				tg3_phy_auxctl_write(tp,
3646 					       MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
3647 					       MII_TG3_AUXCTL_PCTL_WOL_EN |
3648 					       MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3649 					       MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
3650 				udelay(40);
3651 			}
3652 
3653 			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3654 				mac_mode = MAC_MODE_PORT_MODE_GMII;
3655 			else
3656 				mac_mode = MAC_MODE_PORT_MODE_MII;
3657 
3658 			mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
3659 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3660 			    ASIC_REV_5700) {
3661 				u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
3662 					     SPEED_100 : SPEED_10;
3663 				if (tg3_5700_link_polarity(tp, speed))
3664 					mac_mode |= MAC_MODE_LINK_POLARITY;
3665 				else
3666 					mac_mode &= ~MAC_MODE_LINK_POLARITY;
3667 			}
3668 		} else {
3669 			mac_mode = MAC_MODE_PORT_MODE_TBI;
3670 		}
3671 
3672 		if (!tg3_flag(tp, 5750_PLUS))
3673 			tw32(MAC_LED_CTRL, tp->led_ctrl);
3674 
3675 		mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
3676 		if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
3677 		    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
3678 			mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
3679 
3680 		if (tg3_flag(tp, ENABLE_APE))
3681 			mac_mode |= MAC_MODE_APE_TX_EN |
3682 				    MAC_MODE_APE_RX_EN |
3683 				    MAC_MODE_TDE_ENABLE;
3684 
3685 		tw32_f(MAC_MODE, mac_mode);
3686 		udelay(100);
3687 
3688 		tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
3689 		udelay(10);
3690 	}
3691 
3692 	if (!tg3_flag(tp, WOL_SPEED_100MB) &&
3693 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3694 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
3695 		u32 base_val;
3696 
3697 		base_val = tp->pci_clock_ctrl;
3698 		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
3699 			     CLOCK_CTRL_TXCLK_DISABLE);
3700 
3701 		tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
3702 			    CLOCK_CTRL_PWRDOWN_PLL133, 40);
3703 	} else if (tg3_flag(tp, 5780_CLASS) ||
3704 		   tg3_flag(tp, CPMU_PRESENT) ||
3705 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3706 		/* do nothing */
3707 	} else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
3708 		u32 newbits1, newbits2;
3709 
3710 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3711 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3712 			newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
3713 				    CLOCK_CTRL_TXCLK_DISABLE |
3714 				    CLOCK_CTRL_ALTCLK);
3715 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3716 		} else if (tg3_flag(tp, 5705_PLUS)) {
3717 			newbits1 = CLOCK_CTRL_625_CORE;
3718 			newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
3719 		} else {
3720 			newbits1 = CLOCK_CTRL_ALTCLK;
3721 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3722 		}
3723 
3724 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
3725 			    40);
3726 
3727 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
3728 			    40);
3729 
3730 		if (!tg3_flag(tp, 5705_PLUS)) {
3731 			u32 newbits3;
3732 
3733 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3734 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3735 				newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
3736 					    CLOCK_CTRL_TXCLK_DISABLE |
3737 					    CLOCK_CTRL_44MHZ_CORE);
3738 			} else {
3739 				newbits3 = CLOCK_CTRL_44MHZ_CORE;
3740 			}
3741 
3742 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
3743 				    tp->pci_clock_ctrl | newbits3, 40);
3744 		}
3745 	}
3746 
3747 	if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
3748 		tg3_power_down_phy(tp, do_low_power);
3749 
3750 	tg3_frob_aux_power(tp, true);
3751 
3752 	/* Workaround for unstable PLL clock */
3753 	if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
3754 	    (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
3755 		u32 val = tr32(0x7d00);
3756 
3757 		val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
3758 		tw32(0x7d00, val);
3759 		if (!tg3_flag(tp, ENABLE_ASF)) {
3760 			int err;
3761 
3762 			err = tg3_nvram_lock(tp);
3763 			tg3_halt_cpu(tp, RX_CPU_BASE);
3764 			if (!err)
3765 				tg3_nvram_unlock(tp);
3766 		}
3767 	}
3768 
3769 	tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
3770 
3771 	return 0;
3772 }
3773 
3774 static void tg3_power_down(struct tg3 *tp)
3775 {
3776 	tg3_power_down_prepare(tp);
3777 
3778 	pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
3779 	pci_set_power_state(tp->pdev, PCI_D3hot);
3780 }
3781 
3782 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
3783 {
3784 	switch (val & MII_TG3_AUX_STAT_SPDMASK) {
3785 	case MII_TG3_AUX_STAT_10HALF:
3786 		*speed = SPEED_10;
3787 		*duplex = DUPLEX_HALF;
3788 		break;
3789 
3790 	case MII_TG3_AUX_STAT_10FULL:
3791 		*speed = SPEED_10;
3792 		*duplex = DUPLEX_FULL;
3793 		break;
3794 
3795 	case MII_TG3_AUX_STAT_100HALF:
3796 		*speed = SPEED_100;
3797 		*duplex = DUPLEX_HALF;
3798 		break;
3799 
3800 	case MII_TG3_AUX_STAT_100FULL:
3801 		*speed = SPEED_100;
3802 		*duplex = DUPLEX_FULL;
3803 		break;
3804 
3805 	case MII_TG3_AUX_STAT_1000HALF:
3806 		*speed = SPEED_1000;
3807 		*duplex = DUPLEX_HALF;
3808 		break;
3809 
3810 	case MII_TG3_AUX_STAT_1000FULL:
3811 		*speed = SPEED_1000;
3812 		*duplex = DUPLEX_FULL;
3813 		break;
3814 
3815 	default:
3816 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3817 			*speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
3818 				 SPEED_10;
3819 			*duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
3820 				  DUPLEX_HALF;
3821 			break;
3822 		}
3823 		*speed = SPEED_UNKNOWN;
3824 		*duplex = DUPLEX_UNKNOWN;
3825 		break;
3826 	}
3827 }
3828 
3829 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
3830 {
3831 	int err = 0;
3832 	u32 val, new_adv;
3833 
3834 	new_adv = ADVERTISE_CSMA;
3835 	new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
3836 	new_adv |= mii_advertise_flowctrl(flowctrl);
3837 
3838 	err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
3839 	if (err)
3840 		goto done;
3841 
3842 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
3843 		new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
3844 
3845 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
3846 		    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
3847 			new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
3848 
3849 		err = tg3_writephy(tp, MII_CTRL1000, new_adv);
3850 		if (err)
3851 			goto done;
3852 	}
3853 
3854 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
3855 		goto done;
3856 
3857 	tw32(TG3_CPMU_EEE_MODE,
3858 	     tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
3859 
3860 	err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
3861 	if (!err) {
3862 		u32 err2;
3863 
3864 		val = 0;
3865 		/* Advertise 100-BaseTX EEE ability */
3866 		if (advertise & ADVERTISED_100baseT_Full)
3867 			val |= MDIO_AN_EEE_ADV_100TX;
3868 		/* Advertise 1000-BaseT EEE ability */
3869 		if (advertise & ADVERTISED_1000baseT_Full)
3870 			val |= MDIO_AN_EEE_ADV_1000T;
3871 		err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
3872 		if (err)
3873 			val = 0;
3874 
3875 		switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
3876 		case ASIC_REV_5717:
3877 		case ASIC_REV_57765:
3878 		case ASIC_REV_57766:
3879 		case ASIC_REV_5719:
3880 			/* If we advertised any eee advertisements above... */
3881 			if (val)
3882 				val = MII_TG3_DSP_TAP26_ALNOKO |
3883 				      MII_TG3_DSP_TAP26_RMRXSTO |
3884 				      MII_TG3_DSP_TAP26_OPCSINPT;
3885 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
3886 			/* Fall through */
3887 		case ASIC_REV_5720:
3888 			if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
3889 				tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
3890 						 MII_TG3_DSP_CH34TP2_HIBW01);
3891 		}
3892 
3893 		err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
3894 		if (!err)
3895 			err = err2;
3896 	}
3897 
3898 done:
3899 	return err;
3900 }
3901 
3902 static void tg3_phy_copper_begin(struct tg3 *tp)
3903 {
3904 	if (tp->link_config.autoneg == AUTONEG_ENABLE ||
3905 	    (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
3906 		u32 adv, fc;
3907 
3908 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
3909 			adv = ADVERTISED_10baseT_Half |
3910 			      ADVERTISED_10baseT_Full;
3911 			if (tg3_flag(tp, WOL_SPEED_100MB))
3912 				adv |= ADVERTISED_100baseT_Half |
3913 				       ADVERTISED_100baseT_Full;
3914 
3915 			fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
3916 		} else {
3917 			adv = tp->link_config.advertising;
3918 			if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
3919 				adv &= ~(ADVERTISED_1000baseT_Half |
3920 					 ADVERTISED_1000baseT_Full);
3921 
3922 			fc = tp->link_config.flowctrl;
3923 		}
3924 
3925 		tg3_phy_autoneg_cfg(tp, adv, fc);
3926 
3927 		tg3_writephy(tp, MII_BMCR,
3928 			     BMCR_ANENABLE | BMCR_ANRESTART);
3929 	} else {
3930 		int i;
3931 		u32 bmcr, orig_bmcr;
3932 
3933 		tp->link_config.active_speed = tp->link_config.speed;
3934 		tp->link_config.active_duplex = tp->link_config.duplex;
3935 
3936 		bmcr = 0;
3937 		switch (tp->link_config.speed) {
3938 		default:
3939 		case SPEED_10:
3940 			break;
3941 
3942 		case SPEED_100:
3943 			bmcr |= BMCR_SPEED100;
3944 			break;
3945 
3946 		case SPEED_1000:
3947 			bmcr |= BMCR_SPEED1000;
3948 			break;
3949 		}
3950 
3951 		if (tp->link_config.duplex == DUPLEX_FULL)
3952 			bmcr |= BMCR_FULLDPLX;
3953 
3954 		if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
3955 		    (bmcr != orig_bmcr)) {
3956 			tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
3957 			for (i = 0; i < 1500; i++) {
3958 				u32 tmp;
3959 
3960 				udelay(10);
3961 				if (tg3_readphy(tp, MII_BMSR, &tmp) ||
3962 				    tg3_readphy(tp, MII_BMSR, &tmp))
3963 					continue;
3964 				if (!(tmp & BMSR_LSTATUS)) {
3965 					udelay(40);
3966 					break;
3967 				}
3968 			}
3969 			tg3_writephy(tp, MII_BMCR, bmcr);
3970 			udelay(40);
3971 		}
3972 	}
3973 }
3974 
3975 static int tg3_init_5401phy_dsp(struct tg3 *tp)
3976 {
3977 	int err;
3978 
3979 	/* Turn off tap power management. */
3980 	/* Set Extended packet length bit */
3981 	err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
3982 
3983 	err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
3984 	err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
3985 	err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
3986 	err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
3987 	err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
3988 
3989 	udelay(40);
3990 
3991 	return err;
3992 }
3993 
3994 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
3995 {
3996 	u32 advmsk, tgtadv, advertising;
3997 
3998 	advertising = tp->link_config.advertising;
3999 	tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4000 
4001 	advmsk = ADVERTISE_ALL;
4002 	if (tp->link_config.active_duplex == DUPLEX_FULL) {
4003 		tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4004 		advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4005 	}
4006 
4007 	if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4008 		return false;
4009 
4010 	if ((*lcladv & advmsk) != tgtadv)
4011 		return false;
4012 
4013 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4014 		u32 tg3_ctrl;
4015 
4016 		tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4017 
4018 		if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4019 			return false;
4020 
4021 		if (tgtadv &&
4022 		    (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4023 		     tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) {
4024 			tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4025 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4026 				     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4027 		} else {
4028 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4029 		}
4030 
4031 		if (tg3_ctrl != tgtadv)
4032 			return false;
4033 	}
4034 
4035 	return true;
4036 }
4037 
4038 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4039 {
4040 	u32 lpeth = 0;
4041 
4042 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4043 		u32 val;
4044 
4045 		if (tg3_readphy(tp, MII_STAT1000, &val))
4046 			return false;
4047 
4048 		lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4049 	}
4050 
4051 	if (tg3_readphy(tp, MII_LPA, rmtadv))
4052 		return false;
4053 
4054 	lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4055 	tp->link_config.rmt_adv = lpeth;
4056 
4057 	return true;
4058 }
4059 
4060 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
4061 {
4062 	int current_link_up;
4063 	u32 bmsr, val;
4064 	u32 lcl_adv, rmt_adv;
4065 	u16 current_speed;
4066 	u8 current_duplex;
4067 	int i, err;
4068 
4069 	tw32(MAC_EVENT, 0);
4070 
4071 	tw32_f(MAC_STATUS,
4072 	     (MAC_STATUS_SYNC_CHANGED |
4073 	      MAC_STATUS_CFG_CHANGED |
4074 	      MAC_STATUS_MI_COMPLETION |
4075 	      MAC_STATUS_LNKSTATE_CHANGED));
4076 	udelay(40);
4077 
4078 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4079 		tw32_f(MAC_MI_MODE,
4080 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4081 		udelay(80);
4082 	}
4083 
4084 	tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4085 
4086 	/* Some third-party PHYs need to be reset on link going
4087 	 * down.
4088 	 */
4089 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
4090 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
4091 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
4092 	    netif_carrier_ok(tp->dev)) {
4093 		tg3_readphy(tp, MII_BMSR, &bmsr);
4094 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4095 		    !(bmsr & BMSR_LSTATUS))
4096 			force_reset = 1;
4097 	}
4098 	if (force_reset)
4099 		tg3_phy_reset(tp);
4100 
4101 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4102 		tg3_readphy(tp, MII_BMSR, &bmsr);
4103 		if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4104 		    !tg3_flag(tp, INIT_COMPLETE))
4105 			bmsr = 0;
4106 
4107 		if (!(bmsr & BMSR_LSTATUS)) {
4108 			err = tg3_init_5401phy_dsp(tp);
4109 			if (err)
4110 				return err;
4111 
4112 			tg3_readphy(tp, MII_BMSR, &bmsr);
4113 			for (i = 0; i < 1000; i++) {
4114 				udelay(10);
4115 				if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4116 				    (bmsr & BMSR_LSTATUS)) {
4117 					udelay(40);
4118 					break;
4119 				}
4120 			}
4121 
4122 			if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4123 			    TG3_PHY_REV_BCM5401_B0 &&
4124 			    !(bmsr & BMSR_LSTATUS) &&
4125 			    tp->link_config.active_speed == SPEED_1000) {
4126 				err = tg3_phy_reset(tp);
4127 				if (!err)
4128 					err = tg3_init_5401phy_dsp(tp);
4129 				if (err)
4130 					return err;
4131 			}
4132 		}
4133 	} else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4134 		   tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
4135 		/* 5701 {A0,B0} CRC bug workaround */
4136 		tg3_writephy(tp, 0x15, 0x0a75);
4137 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4138 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4139 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4140 	}
4141 
4142 	/* Clear pending interrupts... */
4143 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4144 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4145 
4146 	if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4147 		tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4148 	else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4149 		tg3_writephy(tp, MII_TG3_IMASK, ~0);
4150 
4151 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
4152 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
4153 		if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4154 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
4155 				     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4156 		else
4157 			tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4158 	}
4159 
4160 	current_link_up = 0;
4161 	current_speed = SPEED_UNKNOWN;
4162 	current_duplex = DUPLEX_UNKNOWN;
4163 	tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4164 	tp->link_config.rmt_adv = 0;
4165 
4166 	if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4167 		err = tg3_phy_auxctl_read(tp,
4168 					  MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4169 					  &val);
4170 		if (!err && !(val & (1 << 10))) {
4171 			tg3_phy_auxctl_write(tp,
4172 					     MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4173 					     val | (1 << 10));
4174 			goto relink;
4175 		}
4176 	}
4177 
4178 	bmsr = 0;
4179 	for (i = 0; i < 100; i++) {
4180 		tg3_readphy(tp, MII_BMSR, &bmsr);
4181 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4182 		    (bmsr & BMSR_LSTATUS))
4183 			break;
4184 		udelay(40);
4185 	}
4186 
4187 	if (bmsr & BMSR_LSTATUS) {
4188 		u32 aux_stat, bmcr;
4189 
4190 		tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4191 		for (i = 0; i < 2000; i++) {
4192 			udelay(10);
4193 			if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4194 			    aux_stat)
4195 				break;
4196 		}
4197 
4198 		tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4199 					     &current_speed,
4200 					     &current_duplex);
4201 
4202 		bmcr = 0;
4203 		for (i = 0; i < 200; i++) {
4204 			tg3_readphy(tp, MII_BMCR, &bmcr);
4205 			if (tg3_readphy(tp, MII_BMCR, &bmcr))
4206 				continue;
4207 			if (bmcr && bmcr != 0x7fff)
4208 				break;
4209 			udelay(10);
4210 		}
4211 
4212 		lcl_adv = 0;
4213 		rmt_adv = 0;
4214 
4215 		tp->link_config.active_speed = current_speed;
4216 		tp->link_config.active_duplex = current_duplex;
4217 
4218 		if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4219 			if ((bmcr & BMCR_ANENABLE) &&
4220 			    tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4221 			    tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4222 				current_link_up = 1;
4223 		} else {
4224 			if (!(bmcr & BMCR_ANENABLE) &&
4225 			    tp->link_config.speed == current_speed &&
4226 			    tp->link_config.duplex == current_duplex &&
4227 			    tp->link_config.flowctrl ==
4228 			    tp->link_config.active_flowctrl) {
4229 				current_link_up = 1;
4230 			}
4231 		}
4232 
4233 		if (current_link_up == 1 &&
4234 		    tp->link_config.active_duplex == DUPLEX_FULL) {
4235 			u32 reg, bit;
4236 
4237 			if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4238 				reg = MII_TG3_FET_GEN_STAT;
4239 				bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4240 			} else {
4241 				reg = MII_TG3_EXT_STAT;
4242 				bit = MII_TG3_EXT_STAT_MDIX;
4243 			}
4244 
4245 			if (!tg3_readphy(tp, reg, &val) && (val & bit))
4246 				tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4247 
4248 			tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4249 		}
4250 	}
4251 
4252 relink:
4253 	if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4254 		tg3_phy_copper_begin(tp);
4255 
4256 		tg3_readphy(tp, MII_BMSR, &bmsr);
4257 		if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4258 		    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4259 			current_link_up = 1;
4260 	}
4261 
4262 	tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4263 	if (current_link_up == 1) {
4264 		if (tp->link_config.active_speed == SPEED_100 ||
4265 		    tp->link_config.active_speed == SPEED_10)
4266 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4267 		else
4268 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4269 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4270 		tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4271 	else
4272 		tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4273 
4274 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
4275 	if (tp->link_config.active_duplex == DUPLEX_HALF)
4276 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
4277 
4278 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
4279 		if (current_link_up == 1 &&
4280 		    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
4281 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
4282 		else
4283 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
4284 	}
4285 
4286 	/* ??? Without this setting Netgear GA302T PHY does not
4287 	 * ??? send/receive packets...
4288 	 */
4289 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
4290 	    tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
4291 		tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
4292 		tw32_f(MAC_MI_MODE, tp->mi_mode);
4293 		udelay(80);
4294 	}
4295 
4296 	tw32_f(MAC_MODE, tp->mac_mode);
4297 	udelay(40);
4298 
4299 	tg3_phy_eee_adjust(tp, current_link_up);
4300 
4301 	if (tg3_flag(tp, USE_LINKCHG_REG)) {
4302 		/* Polled via timer. */
4303 		tw32_f(MAC_EVENT, 0);
4304 	} else {
4305 		tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
4306 	}
4307 	udelay(40);
4308 
4309 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
4310 	    current_link_up == 1 &&
4311 	    tp->link_config.active_speed == SPEED_1000 &&
4312 	    (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
4313 		udelay(120);
4314 		tw32_f(MAC_STATUS,
4315 		     (MAC_STATUS_SYNC_CHANGED |
4316 		      MAC_STATUS_CFG_CHANGED));
4317 		udelay(40);
4318 		tg3_write_mem(tp,
4319 			      NIC_SRAM_FIRMWARE_MBOX,
4320 			      NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
4321 	}
4322 
4323 	/* Prevent send BD corruption. */
4324 	if (tg3_flag(tp, CLKREQ_BUG)) {
4325 		u16 oldlnkctl, newlnkctl;
4326 
4327 		pci_read_config_word(tp->pdev,
4328 				     pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
4329 				     &oldlnkctl);
4330 		if (tp->link_config.active_speed == SPEED_100 ||
4331 		    tp->link_config.active_speed == SPEED_10)
4332 			newlnkctl = oldlnkctl & ~PCI_EXP_LNKCTL_CLKREQ_EN;
4333 		else
4334 			newlnkctl = oldlnkctl | PCI_EXP_LNKCTL_CLKREQ_EN;
4335 		if (newlnkctl != oldlnkctl)
4336 			pci_write_config_word(tp->pdev,
4337 					      pci_pcie_cap(tp->pdev) +
4338 					      PCI_EXP_LNKCTL, newlnkctl);
4339 	}
4340 
4341 	if (current_link_up != netif_carrier_ok(tp->dev)) {
4342 		if (current_link_up)
4343 			netif_carrier_on(tp->dev);
4344 		else
4345 			netif_carrier_off(tp->dev);
4346 		tg3_link_report(tp);
4347 	}
4348 
4349 	return 0;
4350 }
4351 
4352 struct tg3_fiber_aneginfo {
4353 	int state;
4354 #define ANEG_STATE_UNKNOWN		0
4355 #define ANEG_STATE_AN_ENABLE		1
4356 #define ANEG_STATE_RESTART_INIT		2
4357 #define ANEG_STATE_RESTART		3
4358 #define ANEG_STATE_DISABLE_LINK_OK	4
4359 #define ANEG_STATE_ABILITY_DETECT_INIT	5
4360 #define ANEG_STATE_ABILITY_DETECT	6
4361 #define ANEG_STATE_ACK_DETECT_INIT	7
4362 #define ANEG_STATE_ACK_DETECT		8
4363 #define ANEG_STATE_COMPLETE_ACK_INIT	9
4364 #define ANEG_STATE_COMPLETE_ACK		10
4365 #define ANEG_STATE_IDLE_DETECT_INIT	11
4366 #define ANEG_STATE_IDLE_DETECT		12
4367 #define ANEG_STATE_LINK_OK		13
4368 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT	14
4369 #define ANEG_STATE_NEXT_PAGE_WAIT	15
4370 
4371 	u32 flags;
4372 #define MR_AN_ENABLE		0x00000001
4373 #define MR_RESTART_AN		0x00000002
4374 #define MR_AN_COMPLETE		0x00000004
4375 #define MR_PAGE_RX		0x00000008
4376 #define MR_NP_LOADED		0x00000010
4377 #define MR_TOGGLE_TX		0x00000020
4378 #define MR_LP_ADV_FULL_DUPLEX	0x00000040
4379 #define MR_LP_ADV_HALF_DUPLEX	0x00000080
4380 #define MR_LP_ADV_SYM_PAUSE	0x00000100
4381 #define MR_LP_ADV_ASYM_PAUSE	0x00000200
4382 #define MR_LP_ADV_REMOTE_FAULT1	0x00000400
4383 #define MR_LP_ADV_REMOTE_FAULT2	0x00000800
4384 #define MR_LP_ADV_NEXT_PAGE	0x00001000
4385 #define MR_TOGGLE_RX		0x00002000
4386 #define MR_NP_RX		0x00004000
4387 
4388 #define MR_LINK_OK		0x80000000
4389 
4390 	unsigned long link_time, cur_time;
4391 
4392 	u32 ability_match_cfg;
4393 	int ability_match_count;
4394 
4395 	char ability_match, idle_match, ack_match;
4396 
4397 	u32 txconfig, rxconfig;
4398 #define ANEG_CFG_NP		0x00000080
4399 #define ANEG_CFG_ACK		0x00000040
4400 #define ANEG_CFG_RF2		0x00000020
4401 #define ANEG_CFG_RF1		0x00000010
4402 #define ANEG_CFG_PS2		0x00000001
4403 #define ANEG_CFG_PS1		0x00008000
4404 #define ANEG_CFG_HD		0x00004000
4405 #define ANEG_CFG_FD		0x00002000
4406 #define ANEG_CFG_INVAL		0x00001f06
4407 
4408 };
4409 #define ANEG_OK		0
4410 #define ANEG_DONE	1
4411 #define ANEG_TIMER_ENAB	2
4412 #define ANEG_FAILED	-1
4413 
4414 #define ANEG_STATE_SETTLE_TIME	10000
4415 
4416 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
4417 				   struct tg3_fiber_aneginfo *ap)
4418 {
4419 	u16 flowctrl;
4420 	unsigned long delta;
4421 	u32 rx_cfg_reg;
4422 	int ret;
4423 
4424 	if (ap->state == ANEG_STATE_UNKNOWN) {
4425 		ap->rxconfig = 0;
4426 		ap->link_time = 0;
4427 		ap->cur_time = 0;
4428 		ap->ability_match_cfg = 0;
4429 		ap->ability_match_count = 0;
4430 		ap->ability_match = 0;
4431 		ap->idle_match = 0;
4432 		ap->ack_match = 0;
4433 	}
4434 	ap->cur_time++;
4435 
4436 	if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
4437 		rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
4438 
4439 		if (rx_cfg_reg != ap->ability_match_cfg) {
4440 			ap->ability_match_cfg = rx_cfg_reg;
4441 			ap->ability_match = 0;
4442 			ap->ability_match_count = 0;
4443 		} else {
4444 			if (++ap->ability_match_count > 1) {
4445 				ap->ability_match = 1;
4446 				ap->ability_match_cfg = rx_cfg_reg;
4447 			}
4448 		}
4449 		if (rx_cfg_reg & ANEG_CFG_ACK)
4450 			ap->ack_match = 1;
4451 		else
4452 			ap->ack_match = 0;
4453 
4454 		ap->idle_match = 0;
4455 	} else {
4456 		ap->idle_match = 1;
4457 		ap->ability_match_cfg = 0;
4458 		ap->ability_match_count = 0;
4459 		ap->ability_match = 0;
4460 		ap->ack_match = 0;
4461 
4462 		rx_cfg_reg = 0;
4463 	}
4464 
4465 	ap->rxconfig = rx_cfg_reg;
4466 	ret = ANEG_OK;
4467 
4468 	switch (ap->state) {
4469 	case ANEG_STATE_UNKNOWN:
4470 		if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
4471 			ap->state = ANEG_STATE_AN_ENABLE;
4472 
4473 		/* fallthru */
4474 	case ANEG_STATE_AN_ENABLE:
4475 		ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
4476 		if (ap->flags & MR_AN_ENABLE) {
4477 			ap->link_time = 0;
4478 			ap->cur_time = 0;
4479 			ap->ability_match_cfg = 0;
4480 			ap->ability_match_count = 0;
4481 			ap->ability_match = 0;
4482 			ap->idle_match = 0;
4483 			ap->ack_match = 0;
4484 
4485 			ap->state = ANEG_STATE_RESTART_INIT;
4486 		} else {
4487 			ap->state = ANEG_STATE_DISABLE_LINK_OK;
4488 		}
4489 		break;
4490 
4491 	case ANEG_STATE_RESTART_INIT:
4492 		ap->link_time = ap->cur_time;
4493 		ap->flags &= ~(MR_NP_LOADED);
4494 		ap->txconfig = 0;
4495 		tw32(MAC_TX_AUTO_NEG, 0);
4496 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4497 		tw32_f(MAC_MODE, tp->mac_mode);
4498 		udelay(40);
4499 
4500 		ret = ANEG_TIMER_ENAB;
4501 		ap->state = ANEG_STATE_RESTART;
4502 
4503 		/* fallthru */
4504 	case ANEG_STATE_RESTART:
4505 		delta = ap->cur_time - ap->link_time;
4506 		if (delta > ANEG_STATE_SETTLE_TIME)
4507 			ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
4508 		else
4509 			ret = ANEG_TIMER_ENAB;
4510 		break;
4511 
4512 	case ANEG_STATE_DISABLE_LINK_OK:
4513 		ret = ANEG_DONE;
4514 		break;
4515 
4516 	case ANEG_STATE_ABILITY_DETECT_INIT:
4517 		ap->flags &= ~(MR_TOGGLE_TX);
4518 		ap->txconfig = ANEG_CFG_FD;
4519 		flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4520 		if (flowctrl & ADVERTISE_1000XPAUSE)
4521 			ap->txconfig |= ANEG_CFG_PS1;
4522 		if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4523 			ap->txconfig |= ANEG_CFG_PS2;
4524 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4525 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4526 		tw32_f(MAC_MODE, tp->mac_mode);
4527 		udelay(40);
4528 
4529 		ap->state = ANEG_STATE_ABILITY_DETECT;
4530 		break;
4531 
4532 	case ANEG_STATE_ABILITY_DETECT:
4533 		if (ap->ability_match != 0 && ap->rxconfig != 0)
4534 			ap->state = ANEG_STATE_ACK_DETECT_INIT;
4535 		break;
4536 
4537 	case ANEG_STATE_ACK_DETECT_INIT:
4538 		ap->txconfig |= ANEG_CFG_ACK;
4539 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4540 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4541 		tw32_f(MAC_MODE, tp->mac_mode);
4542 		udelay(40);
4543 
4544 		ap->state = ANEG_STATE_ACK_DETECT;
4545 
4546 		/* fallthru */
4547 	case ANEG_STATE_ACK_DETECT:
4548 		if (ap->ack_match != 0) {
4549 			if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
4550 			    (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
4551 				ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
4552 			} else {
4553 				ap->state = ANEG_STATE_AN_ENABLE;
4554 			}
4555 		} else if (ap->ability_match != 0 &&
4556 			   ap->rxconfig == 0) {
4557 			ap->state = ANEG_STATE_AN_ENABLE;
4558 		}
4559 		break;
4560 
4561 	case ANEG_STATE_COMPLETE_ACK_INIT:
4562 		if (ap->rxconfig & ANEG_CFG_INVAL) {
4563 			ret = ANEG_FAILED;
4564 			break;
4565 		}
4566 		ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
4567 			       MR_LP_ADV_HALF_DUPLEX |
4568 			       MR_LP_ADV_SYM_PAUSE |
4569 			       MR_LP_ADV_ASYM_PAUSE |
4570 			       MR_LP_ADV_REMOTE_FAULT1 |
4571 			       MR_LP_ADV_REMOTE_FAULT2 |
4572 			       MR_LP_ADV_NEXT_PAGE |
4573 			       MR_TOGGLE_RX |
4574 			       MR_NP_RX);
4575 		if (ap->rxconfig & ANEG_CFG_FD)
4576 			ap->flags |= MR_LP_ADV_FULL_DUPLEX;
4577 		if (ap->rxconfig & ANEG_CFG_HD)
4578 			ap->flags |= MR_LP_ADV_HALF_DUPLEX;
4579 		if (ap->rxconfig & ANEG_CFG_PS1)
4580 			ap->flags |= MR_LP_ADV_SYM_PAUSE;
4581 		if (ap->rxconfig & ANEG_CFG_PS2)
4582 			ap->flags |= MR_LP_ADV_ASYM_PAUSE;
4583 		if (ap->rxconfig & ANEG_CFG_RF1)
4584 			ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
4585 		if (ap->rxconfig & ANEG_CFG_RF2)
4586 			ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
4587 		if (ap->rxconfig & ANEG_CFG_NP)
4588 			ap->flags |= MR_LP_ADV_NEXT_PAGE;
4589 
4590 		ap->link_time = ap->cur_time;
4591 
4592 		ap->flags ^= (MR_TOGGLE_TX);
4593 		if (ap->rxconfig & 0x0008)
4594 			ap->flags |= MR_TOGGLE_RX;
4595 		if (ap->rxconfig & ANEG_CFG_NP)
4596 			ap->flags |= MR_NP_RX;
4597 		ap->flags |= MR_PAGE_RX;
4598 
4599 		ap->state = ANEG_STATE_COMPLETE_ACK;
4600 		ret = ANEG_TIMER_ENAB;
4601 		break;
4602 
4603 	case ANEG_STATE_COMPLETE_ACK:
4604 		if (ap->ability_match != 0 &&
4605 		    ap->rxconfig == 0) {
4606 			ap->state = ANEG_STATE_AN_ENABLE;
4607 			break;
4608 		}
4609 		delta = ap->cur_time - ap->link_time;
4610 		if (delta > ANEG_STATE_SETTLE_TIME) {
4611 			if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
4612 				ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4613 			} else {
4614 				if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
4615 				    !(ap->flags & MR_NP_RX)) {
4616 					ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4617 				} else {
4618 					ret = ANEG_FAILED;
4619 				}
4620 			}
4621 		}
4622 		break;
4623 
4624 	case ANEG_STATE_IDLE_DETECT_INIT:
4625 		ap->link_time = ap->cur_time;
4626 		tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4627 		tw32_f(MAC_MODE, tp->mac_mode);
4628 		udelay(40);
4629 
4630 		ap->state = ANEG_STATE_IDLE_DETECT;
4631 		ret = ANEG_TIMER_ENAB;
4632 		break;
4633 
4634 	case ANEG_STATE_IDLE_DETECT:
4635 		if (ap->ability_match != 0 &&
4636 		    ap->rxconfig == 0) {
4637 			ap->state = ANEG_STATE_AN_ENABLE;
4638 			break;
4639 		}
4640 		delta = ap->cur_time - ap->link_time;
4641 		if (delta > ANEG_STATE_SETTLE_TIME) {
4642 			/* XXX another gem from the Broadcom driver :( */
4643 			ap->state = ANEG_STATE_LINK_OK;
4644 		}
4645 		break;
4646 
4647 	case ANEG_STATE_LINK_OK:
4648 		ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
4649 		ret = ANEG_DONE;
4650 		break;
4651 
4652 	case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
4653 		/* ??? unimplemented */
4654 		break;
4655 
4656 	case ANEG_STATE_NEXT_PAGE_WAIT:
4657 		/* ??? unimplemented */
4658 		break;
4659 
4660 	default:
4661 		ret = ANEG_FAILED;
4662 		break;
4663 	}
4664 
4665 	return ret;
4666 }
4667 
4668 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
4669 {
4670 	int res = 0;
4671 	struct tg3_fiber_aneginfo aninfo;
4672 	int status = ANEG_FAILED;
4673 	unsigned int tick;
4674 	u32 tmp;
4675 
4676 	tw32_f(MAC_TX_AUTO_NEG, 0);
4677 
4678 	tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
4679 	tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
4680 	udelay(40);
4681 
4682 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
4683 	udelay(40);
4684 
4685 	memset(&aninfo, 0, sizeof(aninfo));
4686 	aninfo.flags |= MR_AN_ENABLE;
4687 	aninfo.state = ANEG_STATE_UNKNOWN;
4688 	aninfo.cur_time = 0;
4689 	tick = 0;
4690 	while (++tick < 195000) {
4691 		status = tg3_fiber_aneg_smachine(tp, &aninfo);
4692 		if (status == ANEG_DONE || status == ANEG_FAILED)
4693 			break;
4694 
4695 		udelay(1);
4696 	}
4697 
4698 	tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4699 	tw32_f(MAC_MODE, tp->mac_mode);
4700 	udelay(40);
4701 
4702 	*txflags = aninfo.txconfig;
4703 	*rxflags = aninfo.flags;
4704 
4705 	if (status == ANEG_DONE &&
4706 	    (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
4707 			     MR_LP_ADV_FULL_DUPLEX)))
4708 		res = 1;
4709 
4710 	return res;
4711 }
4712 
4713 static void tg3_init_bcm8002(struct tg3 *tp)
4714 {
4715 	u32 mac_status = tr32(MAC_STATUS);
4716 	int i;
4717 
4718 	/* Reset when initting first time or we have a link. */
4719 	if (tg3_flag(tp, INIT_COMPLETE) &&
4720 	    !(mac_status & MAC_STATUS_PCS_SYNCED))
4721 		return;
4722 
4723 	/* Set PLL lock range. */
4724 	tg3_writephy(tp, 0x16, 0x8007);
4725 
4726 	/* SW reset */
4727 	tg3_writephy(tp, MII_BMCR, BMCR_RESET);
4728 
4729 	/* Wait for reset to complete. */
4730 	/* XXX schedule_timeout() ... */
4731 	for (i = 0; i < 500; i++)
4732 		udelay(10);
4733 
4734 	/* Config mode; select PMA/Ch 1 regs. */
4735 	tg3_writephy(tp, 0x10, 0x8411);
4736 
4737 	/* Enable auto-lock and comdet, select txclk for tx. */
4738 	tg3_writephy(tp, 0x11, 0x0a10);
4739 
4740 	tg3_writephy(tp, 0x18, 0x00a0);
4741 	tg3_writephy(tp, 0x16, 0x41ff);
4742 
4743 	/* Assert and deassert POR. */
4744 	tg3_writephy(tp, 0x13, 0x0400);
4745 	udelay(40);
4746 	tg3_writephy(tp, 0x13, 0x0000);
4747 
4748 	tg3_writephy(tp, 0x11, 0x0a50);
4749 	udelay(40);
4750 	tg3_writephy(tp, 0x11, 0x0a10);
4751 
4752 	/* Wait for signal to stabilize */
4753 	/* XXX schedule_timeout() ... */
4754 	for (i = 0; i < 15000; i++)
4755 		udelay(10);
4756 
4757 	/* Deselect the channel register so we can read the PHYID
4758 	 * later.
4759 	 */
4760 	tg3_writephy(tp, 0x10, 0x8011);
4761 }
4762 
4763 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
4764 {
4765 	u16 flowctrl;
4766 	u32 sg_dig_ctrl, sg_dig_status;
4767 	u32 serdes_cfg, expected_sg_dig_ctrl;
4768 	int workaround, port_a;
4769 	int current_link_up;
4770 
4771 	serdes_cfg = 0;
4772 	expected_sg_dig_ctrl = 0;
4773 	workaround = 0;
4774 	port_a = 1;
4775 	current_link_up = 0;
4776 
4777 	if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
4778 	    tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
4779 		workaround = 1;
4780 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
4781 			port_a = 0;
4782 
4783 		/* preserve bits 0-11,13,14 for signal pre-emphasis */
4784 		/* preserve bits 20-23 for voltage regulator */
4785 		serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
4786 	}
4787 
4788 	sg_dig_ctrl = tr32(SG_DIG_CTRL);
4789 
4790 	if (tp->link_config.autoneg != AUTONEG_ENABLE) {
4791 		if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
4792 			if (workaround) {
4793 				u32 val = serdes_cfg;
4794 
4795 				if (port_a)
4796 					val |= 0xc010000;
4797 				else
4798 					val |= 0x4010000;
4799 				tw32_f(MAC_SERDES_CFG, val);
4800 			}
4801 
4802 			tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4803 		}
4804 		if (mac_status & MAC_STATUS_PCS_SYNCED) {
4805 			tg3_setup_flow_control(tp, 0, 0);
4806 			current_link_up = 1;
4807 		}
4808 		goto out;
4809 	}
4810 
4811 	/* Want auto-negotiation.  */
4812 	expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
4813 
4814 	flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4815 	if (flowctrl & ADVERTISE_1000XPAUSE)
4816 		expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
4817 	if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4818 		expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
4819 
4820 	if (sg_dig_ctrl != expected_sg_dig_ctrl) {
4821 		if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
4822 		    tp->serdes_counter &&
4823 		    ((mac_status & (MAC_STATUS_PCS_SYNCED |
4824 				    MAC_STATUS_RCVD_CFG)) ==
4825 		     MAC_STATUS_PCS_SYNCED)) {
4826 			tp->serdes_counter--;
4827 			current_link_up = 1;
4828 			goto out;
4829 		}
4830 restart_autoneg:
4831 		if (workaround)
4832 			tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
4833 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
4834 		udelay(5);
4835 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
4836 
4837 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
4838 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4839 	} else if (mac_status & (MAC_STATUS_PCS_SYNCED |
4840 				 MAC_STATUS_SIGNAL_DET)) {
4841 		sg_dig_status = tr32(SG_DIG_STATUS);
4842 		mac_status = tr32(MAC_STATUS);
4843 
4844 		if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
4845 		    (mac_status & MAC_STATUS_PCS_SYNCED)) {
4846 			u32 local_adv = 0, remote_adv = 0;
4847 
4848 			if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
4849 				local_adv |= ADVERTISE_1000XPAUSE;
4850 			if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
4851 				local_adv |= ADVERTISE_1000XPSE_ASYM;
4852 
4853 			if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
4854 				remote_adv |= LPA_1000XPAUSE;
4855 			if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
4856 				remote_adv |= LPA_1000XPAUSE_ASYM;
4857 
4858 			tp->link_config.rmt_adv =
4859 					   mii_adv_to_ethtool_adv_x(remote_adv);
4860 
4861 			tg3_setup_flow_control(tp, local_adv, remote_adv);
4862 			current_link_up = 1;
4863 			tp->serdes_counter = 0;
4864 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4865 		} else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
4866 			if (tp->serdes_counter)
4867 				tp->serdes_counter--;
4868 			else {
4869 				if (workaround) {
4870 					u32 val = serdes_cfg;
4871 
4872 					if (port_a)
4873 						val |= 0xc010000;
4874 					else
4875 						val |= 0x4010000;
4876 
4877 					tw32_f(MAC_SERDES_CFG, val);
4878 				}
4879 
4880 				tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4881 				udelay(40);
4882 
4883 				/* Link parallel detection - link is up */
4884 				/* only if we have PCS_SYNC and not */
4885 				/* receiving config code words */
4886 				mac_status = tr32(MAC_STATUS);
4887 				if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
4888 				    !(mac_status & MAC_STATUS_RCVD_CFG)) {
4889 					tg3_setup_flow_control(tp, 0, 0);
4890 					current_link_up = 1;
4891 					tp->phy_flags |=
4892 						TG3_PHYFLG_PARALLEL_DETECT;
4893 					tp->serdes_counter =
4894 						SERDES_PARALLEL_DET_TIMEOUT;
4895 				} else
4896 					goto restart_autoneg;
4897 			}
4898 		}
4899 	} else {
4900 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
4901 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4902 	}
4903 
4904 out:
4905 	return current_link_up;
4906 }
4907 
4908 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
4909 {
4910 	int current_link_up = 0;
4911 
4912 	if (!(mac_status & MAC_STATUS_PCS_SYNCED))
4913 		goto out;
4914 
4915 	if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4916 		u32 txflags, rxflags;
4917 		int i;
4918 
4919 		if (fiber_autoneg(tp, &txflags, &rxflags)) {
4920 			u32 local_adv = 0, remote_adv = 0;
4921 
4922 			if (txflags & ANEG_CFG_PS1)
4923 				local_adv |= ADVERTISE_1000XPAUSE;
4924 			if (txflags & ANEG_CFG_PS2)
4925 				local_adv |= ADVERTISE_1000XPSE_ASYM;
4926 
4927 			if (rxflags & MR_LP_ADV_SYM_PAUSE)
4928 				remote_adv |= LPA_1000XPAUSE;
4929 			if (rxflags & MR_LP_ADV_ASYM_PAUSE)
4930 				remote_adv |= LPA_1000XPAUSE_ASYM;
4931 
4932 			tp->link_config.rmt_adv =
4933 					   mii_adv_to_ethtool_adv_x(remote_adv);
4934 
4935 			tg3_setup_flow_control(tp, local_adv, remote_adv);
4936 
4937 			current_link_up = 1;
4938 		}
4939 		for (i = 0; i < 30; i++) {
4940 			udelay(20);
4941 			tw32_f(MAC_STATUS,
4942 			       (MAC_STATUS_SYNC_CHANGED |
4943 				MAC_STATUS_CFG_CHANGED));
4944 			udelay(40);
4945 			if ((tr32(MAC_STATUS) &
4946 			     (MAC_STATUS_SYNC_CHANGED |
4947 			      MAC_STATUS_CFG_CHANGED)) == 0)
4948 				break;
4949 		}
4950 
4951 		mac_status = tr32(MAC_STATUS);
4952 		if (current_link_up == 0 &&
4953 		    (mac_status & MAC_STATUS_PCS_SYNCED) &&
4954 		    !(mac_status & MAC_STATUS_RCVD_CFG))
4955 			current_link_up = 1;
4956 	} else {
4957 		tg3_setup_flow_control(tp, 0, 0);
4958 
4959 		/* Forcing 1000FD link up. */
4960 		current_link_up = 1;
4961 
4962 		tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
4963 		udelay(40);
4964 
4965 		tw32_f(MAC_MODE, tp->mac_mode);
4966 		udelay(40);
4967 	}
4968 
4969 out:
4970 	return current_link_up;
4971 }
4972 
4973 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
4974 {
4975 	u32 orig_pause_cfg;
4976 	u16 orig_active_speed;
4977 	u8 orig_active_duplex;
4978 	u32 mac_status;
4979 	int current_link_up;
4980 	int i;
4981 
4982 	orig_pause_cfg = tp->link_config.active_flowctrl;
4983 	orig_active_speed = tp->link_config.active_speed;
4984 	orig_active_duplex = tp->link_config.active_duplex;
4985 
4986 	if (!tg3_flag(tp, HW_AUTONEG) &&
4987 	    netif_carrier_ok(tp->dev) &&
4988 	    tg3_flag(tp, INIT_COMPLETE)) {
4989 		mac_status = tr32(MAC_STATUS);
4990 		mac_status &= (MAC_STATUS_PCS_SYNCED |
4991 			       MAC_STATUS_SIGNAL_DET |
4992 			       MAC_STATUS_CFG_CHANGED |
4993 			       MAC_STATUS_RCVD_CFG);
4994 		if (mac_status == (MAC_STATUS_PCS_SYNCED |
4995 				   MAC_STATUS_SIGNAL_DET)) {
4996 			tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
4997 					    MAC_STATUS_CFG_CHANGED));
4998 			return 0;
4999 		}
5000 	}
5001 
5002 	tw32_f(MAC_TX_AUTO_NEG, 0);
5003 
5004 	tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5005 	tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5006 	tw32_f(MAC_MODE, tp->mac_mode);
5007 	udelay(40);
5008 
5009 	if (tp->phy_id == TG3_PHY_ID_BCM8002)
5010 		tg3_init_bcm8002(tp);
5011 
5012 	/* Enable link change event even when serdes polling.  */
5013 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5014 	udelay(40);
5015 
5016 	current_link_up = 0;
5017 	tp->link_config.rmt_adv = 0;
5018 	mac_status = tr32(MAC_STATUS);
5019 
5020 	if (tg3_flag(tp, HW_AUTONEG))
5021 		current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5022 	else
5023 		current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5024 
5025 	tp->napi[0].hw_status->status =
5026 		(SD_STATUS_UPDATED |
5027 		 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5028 
5029 	for (i = 0; i < 100; i++) {
5030 		tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5031 				    MAC_STATUS_CFG_CHANGED));
5032 		udelay(5);
5033 		if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5034 					 MAC_STATUS_CFG_CHANGED |
5035 					 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5036 			break;
5037 	}
5038 
5039 	mac_status = tr32(MAC_STATUS);
5040 	if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5041 		current_link_up = 0;
5042 		if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5043 		    tp->serdes_counter == 0) {
5044 			tw32_f(MAC_MODE, (tp->mac_mode |
5045 					  MAC_MODE_SEND_CONFIGS));
5046 			udelay(1);
5047 			tw32_f(MAC_MODE, tp->mac_mode);
5048 		}
5049 	}
5050 
5051 	if (current_link_up == 1) {
5052 		tp->link_config.active_speed = SPEED_1000;
5053 		tp->link_config.active_duplex = DUPLEX_FULL;
5054 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5055 				    LED_CTRL_LNKLED_OVERRIDE |
5056 				    LED_CTRL_1000MBPS_ON));
5057 	} else {
5058 		tp->link_config.active_speed = SPEED_UNKNOWN;
5059 		tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5060 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5061 				    LED_CTRL_LNKLED_OVERRIDE |
5062 				    LED_CTRL_TRAFFIC_OVERRIDE));
5063 	}
5064 
5065 	if (current_link_up != netif_carrier_ok(tp->dev)) {
5066 		if (current_link_up)
5067 			netif_carrier_on(tp->dev);
5068 		else
5069 			netif_carrier_off(tp->dev);
5070 		tg3_link_report(tp);
5071 	} else {
5072 		u32 now_pause_cfg = tp->link_config.active_flowctrl;
5073 		if (orig_pause_cfg != now_pause_cfg ||
5074 		    orig_active_speed != tp->link_config.active_speed ||
5075 		    orig_active_duplex != tp->link_config.active_duplex)
5076 			tg3_link_report(tp);
5077 	}
5078 
5079 	return 0;
5080 }
5081 
5082 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
5083 {
5084 	int current_link_up, err = 0;
5085 	u32 bmsr, bmcr;
5086 	u16 current_speed;
5087 	u8 current_duplex;
5088 	u32 local_adv, remote_adv;
5089 
5090 	tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5091 	tw32_f(MAC_MODE, tp->mac_mode);
5092 	udelay(40);
5093 
5094 	tw32(MAC_EVENT, 0);
5095 
5096 	tw32_f(MAC_STATUS,
5097 	     (MAC_STATUS_SYNC_CHANGED |
5098 	      MAC_STATUS_CFG_CHANGED |
5099 	      MAC_STATUS_MI_COMPLETION |
5100 	      MAC_STATUS_LNKSTATE_CHANGED));
5101 	udelay(40);
5102 
5103 	if (force_reset)
5104 		tg3_phy_reset(tp);
5105 
5106 	current_link_up = 0;
5107 	current_speed = SPEED_UNKNOWN;
5108 	current_duplex = DUPLEX_UNKNOWN;
5109 	tp->link_config.rmt_adv = 0;
5110 
5111 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5112 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5113 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
5114 		if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5115 			bmsr |= BMSR_LSTATUS;
5116 		else
5117 			bmsr &= ~BMSR_LSTATUS;
5118 	}
5119 
5120 	err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5121 
5122 	if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5123 	    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5124 		/* do nothing, just check for link up at the end */
5125 	} else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5126 		u32 adv, newadv;
5127 
5128 		err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5129 		newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5130 				 ADVERTISE_1000XPAUSE |
5131 				 ADVERTISE_1000XPSE_ASYM |
5132 				 ADVERTISE_SLCT);
5133 
5134 		newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5135 		newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5136 
5137 		if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5138 			tg3_writephy(tp, MII_ADVERTISE, newadv);
5139 			bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5140 			tg3_writephy(tp, MII_BMCR, bmcr);
5141 
5142 			tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5143 			tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5144 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5145 
5146 			return err;
5147 		}
5148 	} else {
5149 		u32 new_bmcr;
5150 
5151 		bmcr &= ~BMCR_SPEED1000;
5152 		new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5153 
5154 		if (tp->link_config.duplex == DUPLEX_FULL)
5155 			new_bmcr |= BMCR_FULLDPLX;
5156 
5157 		if (new_bmcr != bmcr) {
5158 			/* BMCR_SPEED1000 is a reserved bit that needs
5159 			 * to be set on write.
5160 			 */
5161 			new_bmcr |= BMCR_SPEED1000;
5162 
5163 			/* Force a linkdown */
5164 			if (netif_carrier_ok(tp->dev)) {
5165 				u32 adv;
5166 
5167 				err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5168 				adv &= ~(ADVERTISE_1000XFULL |
5169 					 ADVERTISE_1000XHALF |
5170 					 ADVERTISE_SLCT);
5171 				tg3_writephy(tp, MII_ADVERTISE, adv);
5172 				tg3_writephy(tp, MII_BMCR, bmcr |
5173 							   BMCR_ANRESTART |
5174 							   BMCR_ANENABLE);
5175 				udelay(10);
5176 				netif_carrier_off(tp->dev);
5177 			}
5178 			tg3_writephy(tp, MII_BMCR, new_bmcr);
5179 			bmcr = new_bmcr;
5180 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5181 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5182 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
5183 			    ASIC_REV_5714) {
5184 				if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5185 					bmsr |= BMSR_LSTATUS;
5186 				else
5187 					bmsr &= ~BMSR_LSTATUS;
5188 			}
5189 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5190 		}
5191 	}
5192 
5193 	if (bmsr & BMSR_LSTATUS) {
5194 		current_speed = SPEED_1000;
5195 		current_link_up = 1;
5196 		if (bmcr & BMCR_FULLDPLX)
5197 			current_duplex = DUPLEX_FULL;
5198 		else
5199 			current_duplex = DUPLEX_HALF;
5200 
5201 		local_adv = 0;
5202 		remote_adv = 0;
5203 
5204 		if (bmcr & BMCR_ANENABLE) {
5205 			u32 common;
5206 
5207 			err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5208 			err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5209 			common = local_adv & remote_adv;
5210 			if (common & (ADVERTISE_1000XHALF |
5211 				      ADVERTISE_1000XFULL)) {
5212 				if (common & ADVERTISE_1000XFULL)
5213 					current_duplex = DUPLEX_FULL;
5214 				else
5215 					current_duplex = DUPLEX_HALF;
5216 
5217 				tp->link_config.rmt_adv =
5218 					   mii_adv_to_ethtool_adv_x(remote_adv);
5219 			} else if (!tg3_flag(tp, 5780_CLASS)) {
5220 				/* Link is up via parallel detect */
5221 			} else {
5222 				current_link_up = 0;
5223 			}
5224 		}
5225 	}
5226 
5227 	if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
5228 		tg3_setup_flow_control(tp, local_adv, remote_adv);
5229 
5230 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5231 	if (tp->link_config.active_duplex == DUPLEX_HALF)
5232 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5233 
5234 	tw32_f(MAC_MODE, tp->mac_mode);
5235 	udelay(40);
5236 
5237 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5238 
5239 	tp->link_config.active_speed = current_speed;
5240 	tp->link_config.active_duplex = current_duplex;
5241 
5242 	if (current_link_up != netif_carrier_ok(tp->dev)) {
5243 		if (current_link_up)
5244 			netif_carrier_on(tp->dev);
5245 		else {
5246 			netif_carrier_off(tp->dev);
5247 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5248 		}
5249 		tg3_link_report(tp);
5250 	}
5251 	return err;
5252 }
5253 
5254 static void tg3_serdes_parallel_detect(struct tg3 *tp)
5255 {
5256 	if (tp->serdes_counter) {
5257 		/* Give autoneg time to complete. */
5258 		tp->serdes_counter--;
5259 		return;
5260 	}
5261 
5262 	if (!netif_carrier_ok(tp->dev) &&
5263 	    (tp->link_config.autoneg == AUTONEG_ENABLE)) {
5264 		u32 bmcr;
5265 
5266 		tg3_readphy(tp, MII_BMCR, &bmcr);
5267 		if (bmcr & BMCR_ANENABLE) {
5268 			u32 phy1, phy2;
5269 
5270 			/* Select shadow register 0x1f */
5271 			tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
5272 			tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
5273 
5274 			/* Select expansion interrupt status register */
5275 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5276 					 MII_TG3_DSP_EXP1_INT_STAT);
5277 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5278 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5279 
5280 			if ((phy1 & 0x10) && !(phy2 & 0x20)) {
5281 				/* We have signal detect and not receiving
5282 				 * config code words, link is up by parallel
5283 				 * detection.
5284 				 */
5285 
5286 				bmcr &= ~BMCR_ANENABLE;
5287 				bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
5288 				tg3_writephy(tp, MII_BMCR, bmcr);
5289 				tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
5290 			}
5291 		}
5292 	} else if (netif_carrier_ok(tp->dev) &&
5293 		   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
5294 		   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5295 		u32 phy2;
5296 
5297 		/* Select expansion interrupt status register */
5298 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5299 				 MII_TG3_DSP_EXP1_INT_STAT);
5300 		tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5301 		if (phy2 & 0x20) {
5302 			u32 bmcr;
5303 
5304 			/* Config code words received, turn on autoneg. */
5305 			tg3_readphy(tp, MII_BMCR, &bmcr);
5306 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
5307 
5308 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5309 
5310 		}
5311 	}
5312 }
5313 
5314 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
5315 {
5316 	u32 val;
5317 	int err;
5318 
5319 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
5320 		err = tg3_setup_fiber_phy(tp, force_reset);
5321 	else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
5322 		err = tg3_setup_fiber_mii_phy(tp, force_reset);
5323 	else
5324 		err = tg3_setup_copper_phy(tp, force_reset);
5325 
5326 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
5327 		u32 scale;
5328 
5329 		val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
5330 		if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
5331 			scale = 65;
5332 		else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
5333 			scale = 6;
5334 		else
5335 			scale = 12;
5336 
5337 		val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
5338 		val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
5339 		tw32(GRC_MISC_CFG, val);
5340 	}
5341 
5342 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
5343 	      (6 << TX_LENGTHS_IPG_SHIFT);
5344 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
5345 		val |= tr32(MAC_TX_LENGTHS) &
5346 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
5347 			TX_LENGTHS_CNT_DWN_VAL_MSK);
5348 
5349 	if (tp->link_config.active_speed == SPEED_1000 &&
5350 	    tp->link_config.active_duplex == DUPLEX_HALF)
5351 		tw32(MAC_TX_LENGTHS, val |
5352 		     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
5353 	else
5354 		tw32(MAC_TX_LENGTHS, val |
5355 		     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
5356 
5357 	if (!tg3_flag(tp, 5705_PLUS)) {
5358 		if (netif_carrier_ok(tp->dev)) {
5359 			tw32(HOSTCC_STAT_COAL_TICKS,
5360 			     tp->coal.stats_block_coalesce_usecs);
5361 		} else {
5362 			tw32(HOSTCC_STAT_COAL_TICKS, 0);
5363 		}
5364 	}
5365 
5366 	if (tg3_flag(tp, ASPM_WORKAROUND)) {
5367 		val = tr32(PCIE_PWR_MGMT_THRESH);
5368 		if (!netif_carrier_ok(tp->dev))
5369 			val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
5370 			      tp->pwrmgmt_thresh;
5371 		else
5372 			val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
5373 		tw32(PCIE_PWR_MGMT_THRESH, val);
5374 	}
5375 
5376 	return err;
5377 }
5378 
5379 static inline int tg3_irq_sync(struct tg3 *tp)
5380 {
5381 	return tp->irq_sync;
5382 }
5383 
5384 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
5385 {
5386 	int i;
5387 
5388 	dst = (u32 *)((u8 *)dst + off);
5389 	for (i = 0; i < len; i += sizeof(u32))
5390 		*dst++ = tr32(off + i);
5391 }
5392 
5393 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
5394 {
5395 	tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
5396 	tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
5397 	tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
5398 	tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
5399 	tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
5400 	tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
5401 	tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
5402 	tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
5403 	tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
5404 	tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
5405 	tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
5406 	tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
5407 	tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
5408 	tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
5409 	tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
5410 	tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
5411 	tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
5412 	tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
5413 	tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
5414 
5415 	if (tg3_flag(tp, SUPPORT_MSIX))
5416 		tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
5417 
5418 	tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
5419 	tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
5420 	tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
5421 	tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
5422 	tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
5423 	tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
5424 	tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
5425 	tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
5426 
5427 	if (!tg3_flag(tp, 5705_PLUS)) {
5428 		tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
5429 		tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
5430 		tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
5431 	}
5432 
5433 	tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
5434 	tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
5435 	tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
5436 	tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
5437 	tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
5438 
5439 	if (tg3_flag(tp, NVRAM))
5440 		tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
5441 }
5442 
5443 static void tg3_dump_state(struct tg3 *tp)
5444 {
5445 	int i;
5446 	u32 *regs;
5447 
5448 	regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
5449 	if (!regs) {
5450 		netdev_err(tp->dev, "Failed allocating register dump buffer\n");
5451 		return;
5452 	}
5453 
5454 	if (tg3_flag(tp, PCI_EXPRESS)) {
5455 		/* Read up to but not including private PCI registers */
5456 		for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
5457 			regs[i / sizeof(u32)] = tr32(i);
5458 	} else
5459 		tg3_dump_legacy_regs(tp, regs);
5460 
5461 	for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
5462 		if (!regs[i + 0] && !regs[i + 1] &&
5463 		    !regs[i + 2] && !regs[i + 3])
5464 			continue;
5465 
5466 		netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
5467 			   i * 4,
5468 			   regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
5469 	}
5470 
5471 	kfree(regs);
5472 
5473 	for (i = 0; i < tp->irq_cnt; i++) {
5474 		struct tg3_napi *tnapi = &tp->napi[i];
5475 
5476 		/* SW status block */
5477 		netdev_err(tp->dev,
5478 			 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
5479 			   i,
5480 			   tnapi->hw_status->status,
5481 			   tnapi->hw_status->status_tag,
5482 			   tnapi->hw_status->rx_jumbo_consumer,
5483 			   tnapi->hw_status->rx_consumer,
5484 			   tnapi->hw_status->rx_mini_consumer,
5485 			   tnapi->hw_status->idx[0].rx_producer,
5486 			   tnapi->hw_status->idx[0].tx_consumer);
5487 
5488 		netdev_err(tp->dev,
5489 		"%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
5490 			   i,
5491 			   tnapi->last_tag, tnapi->last_irq_tag,
5492 			   tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
5493 			   tnapi->rx_rcb_ptr,
5494 			   tnapi->prodring.rx_std_prod_idx,
5495 			   tnapi->prodring.rx_std_cons_idx,
5496 			   tnapi->prodring.rx_jmb_prod_idx,
5497 			   tnapi->prodring.rx_jmb_cons_idx);
5498 	}
5499 }
5500 
5501 /* This is called whenever we suspect that the system chipset is re-
5502  * ordering the sequence of MMIO to the tx send mailbox. The symptom
5503  * is bogus tx completions. We try to recover by setting the
5504  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
5505  * in the workqueue.
5506  */
5507 static void tg3_tx_recover(struct tg3 *tp)
5508 {
5509 	BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
5510 	       tp->write32_tx_mbox == tg3_write_indirect_mbox);
5511 
5512 	netdev_warn(tp->dev,
5513 		    "The system may be re-ordering memory-mapped I/O "
5514 		    "cycles to the network device, attempting to recover. "
5515 		    "Please report the problem to the driver maintainer "
5516 		    "and include system chipset information.\n");
5517 
5518 	spin_lock(&tp->lock);
5519 	tg3_flag_set(tp, TX_RECOVERY_PENDING);
5520 	spin_unlock(&tp->lock);
5521 }
5522 
5523 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
5524 {
5525 	/* Tell compiler to fetch tx indices from memory. */
5526 	barrier();
5527 	return tnapi->tx_pending -
5528 	       ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
5529 }
5530 
5531 /* Tigon3 never reports partial packet sends.  So we do not
5532  * need special logic to handle SKBs that have not had all
5533  * of their frags sent yet, like SunGEM does.
5534  */
5535 static void tg3_tx(struct tg3_napi *tnapi)
5536 {
5537 	struct tg3 *tp = tnapi->tp;
5538 	u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
5539 	u32 sw_idx = tnapi->tx_cons;
5540 	struct netdev_queue *txq;
5541 	int index = tnapi - tp->napi;
5542 	unsigned int pkts_compl = 0, bytes_compl = 0;
5543 
5544 	if (tg3_flag(tp, ENABLE_TSS))
5545 		index--;
5546 
5547 	txq = netdev_get_tx_queue(tp->dev, index);
5548 
5549 	while (sw_idx != hw_idx) {
5550 		struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
5551 		struct sk_buff *skb = ri->skb;
5552 		int i, tx_bug = 0;
5553 
5554 		if (unlikely(skb == NULL)) {
5555 			tg3_tx_recover(tp);
5556 			return;
5557 		}
5558 
5559 		pci_unmap_single(tp->pdev,
5560 				 dma_unmap_addr(ri, mapping),
5561 				 skb_headlen(skb),
5562 				 PCI_DMA_TODEVICE);
5563 
5564 		ri->skb = NULL;
5565 
5566 		while (ri->fragmented) {
5567 			ri->fragmented = false;
5568 			sw_idx = NEXT_TX(sw_idx);
5569 			ri = &tnapi->tx_buffers[sw_idx];
5570 		}
5571 
5572 		sw_idx = NEXT_TX(sw_idx);
5573 
5574 		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
5575 			ri = &tnapi->tx_buffers[sw_idx];
5576 			if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
5577 				tx_bug = 1;
5578 
5579 			pci_unmap_page(tp->pdev,
5580 				       dma_unmap_addr(ri, mapping),
5581 				       skb_frag_size(&skb_shinfo(skb)->frags[i]),
5582 				       PCI_DMA_TODEVICE);
5583 
5584 			while (ri->fragmented) {
5585 				ri->fragmented = false;
5586 				sw_idx = NEXT_TX(sw_idx);
5587 				ri = &tnapi->tx_buffers[sw_idx];
5588 			}
5589 
5590 			sw_idx = NEXT_TX(sw_idx);
5591 		}
5592 
5593 		pkts_compl++;
5594 		bytes_compl += skb->len;
5595 
5596 		dev_kfree_skb(skb);
5597 
5598 		if (unlikely(tx_bug)) {
5599 			tg3_tx_recover(tp);
5600 			return;
5601 		}
5602 	}
5603 
5604 	netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
5605 
5606 	tnapi->tx_cons = sw_idx;
5607 
5608 	/* Need to make the tx_cons update visible to tg3_start_xmit()
5609 	 * before checking for netif_queue_stopped().  Without the
5610 	 * memory barrier, there is a small possibility that tg3_start_xmit()
5611 	 * will miss it and cause the queue to be stopped forever.
5612 	 */
5613 	smp_mb();
5614 
5615 	if (unlikely(netif_tx_queue_stopped(txq) &&
5616 		     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
5617 		__netif_tx_lock(txq, smp_processor_id());
5618 		if (netif_tx_queue_stopped(txq) &&
5619 		    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
5620 			netif_tx_wake_queue(txq);
5621 		__netif_tx_unlock(txq);
5622 	}
5623 }
5624 
5625 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
5626 {
5627 	if (!ri->data)
5628 		return;
5629 
5630 	pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
5631 			 map_sz, PCI_DMA_FROMDEVICE);
5632 	kfree(ri->data);
5633 	ri->data = NULL;
5634 }
5635 
5636 /* Returns size of skb allocated or < 0 on error.
5637  *
5638  * We only need to fill in the address because the other members
5639  * of the RX descriptor are invariant, see tg3_init_rings.
5640  *
5641  * Note the purposeful assymetry of cpu vs. chip accesses.  For
5642  * posting buffers we only dirty the first cache line of the RX
5643  * descriptor (containing the address).  Whereas for the RX status
5644  * buffers the cpu only reads the last cacheline of the RX descriptor
5645  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
5646  */
5647 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
5648 			    u32 opaque_key, u32 dest_idx_unmasked)
5649 {
5650 	struct tg3_rx_buffer_desc *desc;
5651 	struct ring_info *map;
5652 	u8 *data;
5653 	dma_addr_t mapping;
5654 	int skb_size, data_size, dest_idx;
5655 
5656 	switch (opaque_key) {
5657 	case RXD_OPAQUE_RING_STD:
5658 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5659 		desc = &tpr->rx_std[dest_idx];
5660 		map = &tpr->rx_std_buffers[dest_idx];
5661 		data_size = tp->rx_pkt_map_sz;
5662 		break;
5663 
5664 	case RXD_OPAQUE_RING_JUMBO:
5665 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5666 		desc = &tpr->rx_jmb[dest_idx].std;
5667 		map = &tpr->rx_jmb_buffers[dest_idx];
5668 		data_size = TG3_RX_JMB_MAP_SZ;
5669 		break;
5670 
5671 	default:
5672 		return -EINVAL;
5673 	}
5674 
5675 	/* Do not overwrite any of the map or rp information
5676 	 * until we are sure we can commit to a new buffer.
5677 	 *
5678 	 * Callers depend upon this behavior and assume that
5679 	 * we leave everything unchanged if we fail.
5680 	 */
5681 	skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
5682 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5683 	data = kmalloc(skb_size, GFP_ATOMIC);
5684 	if (!data)
5685 		return -ENOMEM;
5686 
5687 	mapping = pci_map_single(tp->pdev,
5688 				 data + TG3_RX_OFFSET(tp),
5689 				 data_size,
5690 				 PCI_DMA_FROMDEVICE);
5691 	if (pci_dma_mapping_error(tp->pdev, mapping)) {
5692 		kfree(data);
5693 		return -EIO;
5694 	}
5695 
5696 	map->data = data;
5697 	dma_unmap_addr_set(map, mapping, mapping);
5698 
5699 	desc->addr_hi = ((u64)mapping >> 32);
5700 	desc->addr_lo = ((u64)mapping & 0xffffffff);
5701 
5702 	return data_size;
5703 }
5704 
5705 /* We only need to move over in the address because the other
5706  * members of the RX descriptor are invariant.  See notes above
5707  * tg3_alloc_rx_data for full details.
5708  */
5709 static void tg3_recycle_rx(struct tg3_napi *tnapi,
5710 			   struct tg3_rx_prodring_set *dpr,
5711 			   u32 opaque_key, int src_idx,
5712 			   u32 dest_idx_unmasked)
5713 {
5714 	struct tg3 *tp = tnapi->tp;
5715 	struct tg3_rx_buffer_desc *src_desc, *dest_desc;
5716 	struct ring_info *src_map, *dest_map;
5717 	struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
5718 	int dest_idx;
5719 
5720 	switch (opaque_key) {
5721 	case RXD_OPAQUE_RING_STD:
5722 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5723 		dest_desc = &dpr->rx_std[dest_idx];
5724 		dest_map = &dpr->rx_std_buffers[dest_idx];
5725 		src_desc = &spr->rx_std[src_idx];
5726 		src_map = &spr->rx_std_buffers[src_idx];
5727 		break;
5728 
5729 	case RXD_OPAQUE_RING_JUMBO:
5730 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5731 		dest_desc = &dpr->rx_jmb[dest_idx].std;
5732 		dest_map = &dpr->rx_jmb_buffers[dest_idx];
5733 		src_desc = &spr->rx_jmb[src_idx].std;
5734 		src_map = &spr->rx_jmb_buffers[src_idx];
5735 		break;
5736 
5737 	default:
5738 		return;
5739 	}
5740 
5741 	dest_map->data = src_map->data;
5742 	dma_unmap_addr_set(dest_map, mapping,
5743 			   dma_unmap_addr(src_map, mapping));
5744 	dest_desc->addr_hi = src_desc->addr_hi;
5745 	dest_desc->addr_lo = src_desc->addr_lo;
5746 
5747 	/* Ensure that the update to the skb happens after the physical
5748 	 * addresses have been transferred to the new BD location.
5749 	 */
5750 	smp_wmb();
5751 
5752 	src_map->data = NULL;
5753 }
5754 
5755 /* The RX ring scheme is composed of multiple rings which post fresh
5756  * buffers to the chip, and one special ring the chip uses to report
5757  * status back to the host.
5758  *
5759  * The special ring reports the status of received packets to the
5760  * host.  The chip does not write into the original descriptor the
5761  * RX buffer was obtained from.  The chip simply takes the original
5762  * descriptor as provided by the host, updates the status and length
5763  * field, then writes this into the next status ring entry.
5764  *
5765  * Each ring the host uses to post buffers to the chip is described
5766  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
5767  * it is first placed into the on-chip ram.  When the packet's length
5768  * is known, it walks down the TG3_BDINFO entries to select the ring.
5769  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
5770  * which is within the range of the new packet's length is chosen.
5771  *
5772  * The "separate ring for rx status" scheme may sound queer, but it makes
5773  * sense from a cache coherency perspective.  If only the host writes
5774  * to the buffer post rings, and only the chip writes to the rx status
5775  * rings, then cache lines never move beyond shared-modified state.
5776  * If both the host and chip were to write into the same ring, cache line
5777  * eviction could occur since both entities want it in an exclusive state.
5778  */
5779 static int tg3_rx(struct tg3_napi *tnapi, int budget)
5780 {
5781 	struct tg3 *tp = tnapi->tp;
5782 	u32 work_mask, rx_std_posted = 0;
5783 	u32 std_prod_idx, jmb_prod_idx;
5784 	u32 sw_idx = tnapi->rx_rcb_ptr;
5785 	u16 hw_idx;
5786 	int received;
5787 	struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
5788 
5789 	hw_idx = *(tnapi->rx_rcb_prod_idx);
5790 	/*
5791 	 * We need to order the read of hw_idx and the read of
5792 	 * the opaque cookie.
5793 	 */
5794 	rmb();
5795 	work_mask = 0;
5796 	received = 0;
5797 	std_prod_idx = tpr->rx_std_prod_idx;
5798 	jmb_prod_idx = tpr->rx_jmb_prod_idx;
5799 	while (sw_idx != hw_idx && budget > 0) {
5800 		struct ring_info *ri;
5801 		struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
5802 		unsigned int len;
5803 		struct sk_buff *skb;
5804 		dma_addr_t dma_addr;
5805 		u32 opaque_key, desc_idx, *post_ptr;
5806 		u8 *data;
5807 
5808 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
5809 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
5810 		if (opaque_key == RXD_OPAQUE_RING_STD) {
5811 			ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
5812 			dma_addr = dma_unmap_addr(ri, mapping);
5813 			data = ri->data;
5814 			post_ptr = &std_prod_idx;
5815 			rx_std_posted++;
5816 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
5817 			ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
5818 			dma_addr = dma_unmap_addr(ri, mapping);
5819 			data = ri->data;
5820 			post_ptr = &jmb_prod_idx;
5821 		} else
5822 			goto next_pkt_nopost;
5823 
5824 		work_mask |= opaque_key;
5825 
5826 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
5827 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
5828 		drop_it:
5829 			tg3_recycle_rx(tnapi, tpr, opaque_key,
5830 				       desc_idx, *post_ptr);
5831 		drop_it_no_recycle:
5832 			/* Other statistics kept track of by card. */
5833 			tp->rx_dropped++;
5834 			goto next_pkt;
5835 		}
5836 
5837 		prefetch(data + TG3_RX_OFFSET(tp));
5838 		len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
5839 		      ETH_FCS_LEN;
5840 
5841 		if (len > TG3_RX_COPY_THRESH(tp)) {
5842 			int skb_size;
5843 
5844 			skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
5845 						    *post_ptr);
5846 			if (skb_size < 0)
5847 				goto drop_it;
5848 
5849 			pci_unmap_single(tp->pdev, dma_addr, skb_size,
5850 					 PCI_DMA_FROMDEVICE);
5851 
5852 			skb = build_skb(data);
5853 			if (!skb) {
5854 				kfree(data);
5855 				goto drop_it_no_recycle;
5856 			}
5857 			skb_reserve(skb, TG3_RX_OFFSET(tp));
5858 			/* Ensure that the update to the data happens
5859 			 * after the usage of the old DMA mapping.
5860 			 */
5861 			smp_wmb();
5862 
5863 			ri->data = NULL;
5864 
5865 		} else {
5866 			tg3_recycle_rx(tnapi, tpr, opaque_key,
5867 				       desc_idx, *post_ptr);
5868 
5869 			skb = netdev_alloc_skb(tp->dev,
5870 					       len + TG3_RAW_IP_ALIGN);
5871 			if (skb == NULL)
5872 				goto drop_it_no_recycle;
5873 
5874 			skb_reserve(skb, TG3_RAW_IP_ALIGN);
5875 			pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5876 			memcpy(skb->data,
5877 			       data + TG3_RX_OFFSET(tp),
5878 			       len);
5879 			pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5880 		}
5881 
5882 		skb_put(skb, len);
5883 		if ((tp->dev->features & NETIF_F_RXCSUM) &&
5884 		    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
5885 		    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
5886 		      >> RXD_TCPCSUM_SHIFT) == 0xffff))
5887 			skb->ip_summed = CHECKSUM_UNNECESSARY;
5888 		else
5889 			skb_checksum_none_assert(skb);
5890 
5891 		skb->protocol = eth_type_trans(skb, tp->dev);
5892 
5893 		if (len > (tp->dev->mtu + ETH_HLEN) &&
5894 		    skb->protocol != htons(ETH_P_8021Q)) {
5895 			dev_kfree_skb(skb);
5896 			goto drop_it_no_recycle;
5897 		}
5898 
5899 		if (desc->type_flags & RXD_FLAG_VLAN &&
5900 		    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
5901 			__vlan_hwaccel_put_tag(skb,
5902 					       desc->err_vlan & RXD_VLAN_MASK);
5903 
5904 		napi_gro_receive(&tnapi->napi, skb);
5905 
5906 		received++;
5907 		budget--;
5908 
5909 next_pkt:
5910 		(*post_ptr)++;
5911 
5912 		if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
5913 			tpr->rx_std_prod_idx = std_prod_idx &
5914 					       tp->rx_std_ring_mask;
5915 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
5916 				     tpr->rx_std_prod_idx);
5917 			work_mask &= ~RXD_OPAQUE_RING_STD;
5918 			rx_std_posted = 0;
5919 		}
5920 next_pkt_nopost:
5921 		sw_idx++;
5922 		sw_idx &= tp->rx_ret_ring_mask;
5923 
5924 		/* Refresh hw_idx to see if there is new work */
5925 		if (sw_idx == hw_idx) {
5926 			hw_idx = *(tnapi->rx_rcb_prod_idx);
5927 			rmb();
5928 		}
5929 	}
5930 
5931 	/* ACK the status ring. */
5932 	tnapi->rx_rcb_ptr = sw_idx;
5933 	tw32_rx_mbox(tnapi->consmbox, sw_idx);
5934 
5935 	/* Refill RX ring(s). */
5936 	if (!tg3_flag(tp, ENABLE_RSS)) {
5937 		/* Sync BD data before updating mailbox */
5938 		wmb();
5939 
5940 		if (work_mask & RXD_OPAQUE_RING_STD) {
5941 			tpr->rx_std_prod_idx = std_prod_idx &
5942 					       tp->rx_std_ring_mask;
5943 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
5944 				     tpr->rx_std_prod_idx);
5945 		}
5946 		if (work_mask & RXD_OPAQUE_RING_JUMBO) {
5947 			tpr->rx_jmb_prod_idx = jmb_prod_idx &
5948 					       tp->rx_jmb_ring_mask;
5949 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
5950 				     tpr->rx_jmb_prod_idx);
5951 		}
5952 		mmiowb();
5953 	} else if (work_mask) {
5954 		/* rx_std_buffers[] and rx_jmb_buffers[] entries must be
5955 		 * updated before the producer indices can be updated.
5956 		 */
5957 		smp_wmb();
5958 
5959 		tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
5960 		tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
5961 
5962 		if (tnapi != &tp->napi[1]) {
5963 			tp->rx_refill = true;
5964 			napi_schedule(&tp->napi[1].napi);
5965 		}
5966 	}
5967 
5968 	return received;
5969 }
5970 
5971 static void tg3_poll_link(struct tg3 *tp)
5972 {
5973 	/* handle link change and other phy events */
5974 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
5975 		struct tg3_hw_status *sblk = tp->napi[0].hw_status;
5976 
5977 		if (sblk->status & SD_STATUS_LINK_CHG) {
5978 			sblk->status = SD_STATUS_UPDATED |
5979 				       (sblk->status & ~SD_STATUS_LINK_CHG);
5980 			spin_lock(&tp->lock);
5981 			if (tg3_flag(tp, USE_PHYLIB)) {
5982 				tw32_f(MAC_STATUS,
5983 				     (MAC_STATUS_SYNC_CHANGED |
5984 				      MAC_STATUS_CFG_CHANGED |
5985 				      MAC_STATUS_MI_COMPLETION |
5986 				      MAC_STATUS_LNKSTATE_CHANGED));
5987 				udelay(40);
5988 			} else
5989 				tg3_setup_phy(tp, 0);
5990 			spin_unlock(&tp->lock);
5991 		}
5992 	}
5993 }
5994 
5995 static int tg3_rx_prodring_xfer(struct tg3 *tp,
5996 				struct tg3_rx_prodring_set *dpr,
5997 				struct tg3_rx_prodring_set *spr)
5998 {
5999 	u32 si, di, cpycnt, src_prod_idx;
6000 	int i, err = 0;
6001 
6002 	while (1) {
6003 		src_prod_idx = spr->rx_std_prod_idx;
6004 
6005 		/* Make sure updates to the rx_std_buffers[] entries and the
6006 		 * standard producer index are seen in the correct order.
6007 		 */
6008 		smp_rmb();
6009 
6010 		if (spr->rx_std_cons_idx == src_prod_idx)
6011 			break;
6012 
6013 		if (spr->rx_std_cons_idx < src_prod_idx)
6014 			cpycnt = src_prod_idx - spr->rx_std_cons_idx;
6015 		else
6016 			cpycnt = tp->rx_std_ring_mask + 1 -
6017 				 spr->rx_std_cons_idx;
6018 
6019 		cpycnt = min(cpycnt,
6020 			     tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
6021 
6022 		si = spr->rx_std_cons_idx;
6023 		di = dpr->rx_std_prod_idx;
6024 
6025 		for (i = di; i < di + cpycnt; i++) {
6026 			if (dpr->rx_std_buffers[i].data) {
6027 				cpycnt = i - di;
6028 				err = -ENOSPC;
6029 				break;
6030 			}
6031 		}
6032 
6033 		if (!cpycnt)
6034 			break;
6035 
6036 		/* Ensure that updates to the rx_std_buffers ring and the
6037 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6038 		 * ordered correctly WRT the skb check above.
6039 		 */
6040 		smp_rmb();
6041 
6042 		memcpy(&dpr->rx_std_buffers[di],
6043 		       &spr->rx_std_buffers[si],
6044 		       cpycnt * sizeof(struct ring_info));
6045 
6046 		for (i = 0; i < cpycnt; i++, di++, si++) {
6047 			struct tg3_rx_buffer_desc *sbd, *dbd;
6048 			sbd = &spr->rx_std[si];
6049 			dbd = &dpr->rx_std[di];
6050 			dbd->addr_hi = sbd->addr_hi;
6051 			dbd->addr_lo = sbd->addr_lo;
6052 		}
6053 
6054 		spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
6055 				       tp->rx_std_ring_mask;
6056 		dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
6057 				       tp->rx_std_ring_mask;
6058 	}
6059 
6060 	while (1) {
6061 		src_prod_idx = spr->rx_jmb_prod_idx;
6062 
6063 		/* Make sure updates to the rx_jmb_buffers[] entries and
6064 		 * the jumbo producer index are seen in the correct order.
6065 		 */
6066 		smp_rmb();
6067 
6068 		if (spr->rx_jmb_cons_idx == src_prod_idx)
6069 			break;
6070 
6071 		if (spr->rx_jmb_cons_idx < src_prod_idx)
6072 			cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
6073 		else
6074 			cpycnt = tp->rx_jmb_ring_mask + 1 -
6075 				 spr->rx_jmb_cons_idx;
6076 
6077 		cpycnt = min(cpycnt,
6078 			     tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
6079 
6080 		si = spr->rx_jmb_cons_idx;
6081 		di = dpr->rx_jmb_prod_idx;
6082 
6083 		for (i = di; i < di + cpycnt; i++) {
6084 			if (dpr->rx_jmb_buffers[i].data) {
6085 				cpycnt = i - di;
6086 				err = -ENOSPC;
6087 				break;
6088 			}
6089 		}
6090 
6091 		if (!cpycnt)
6092 			break;
6093 
6094 		/* Ensure that updates to the rx_jmb_buffers ring and the
6095 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6096 		 * ordered correctly WRT the skb check above.
6097 		 */
6098 		smp_rmb();
6099 
6100 		memcpy(&dpr->rx_jmb_buffers[di],
6101 		       &spr->rx_jmb_buffers[si],
6102 		       cpycnt * sizeof(struct ring_info));
6103 
6104 		for (i = 0; i < cpycnt; i++, di++, si++) {
6105 			struct tg3_rx_buffer_desc *sbd, *dbd;
6106 			sbd = &spr->rx_jmb[si].std;
6107 			dbd = &dpr->rx_jmb[di].std;
6108 			dbd->addr_hi = sbd->addr_hi;
6109 			dbd->addr_lo = sbd->addr_lo;
6110 		}
6111 
6112 		spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
6113 				       tp->rx_jmb_ring_mask;
6114 		dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
6115 				       tp->rx_jmb_ring_mask;
6116 	}
6117 
6118 	return err;
6119 }
6120 
6121 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
6122 {
6123 	struct tg3 *tp = tnapi->tp;
6124 
6125 	/* run TX completion thread */
6126 	if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
6127 		tg3_tx(tnapi);
6128 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6129 			return work_done;
6130 	}
6131 
6132 	if (!tnapi->rx_rcb_prod_idx)
6133 		return work_done;
6134 
6135 	/* run RX thread, within the bounds set by NAPI.
6136 	 * All RX "locking" is done by ensuring outside
6137 	 * code synchronizes with tg3->napi.poll()
6138 	 */
6139 	if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
6140 		work_done += tg3_rx(tnapi, budget - work_done);
6141 
6142 	if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
6143 		struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
6144 		int i, err = 0;
6145 		u32 std_prod_idx = dpr->rx_std_prod_idx;
6146 		u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
6147 
6148 		tp->rx_refill = false;
6149 		for (i = 1; i < tp->irq_cnt; i++)
6150 			err |= tg3_rx_prodring_xfer(tp, dpr,
6151 						    &tp->napi[i].prodring);
6152 
6153 		wmb();
6154 
6155 		if (std_prod_idx != dpr->rx_std_prod_idx)
6156 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6157 				     dpr->rx_std_prod_idx);
6158 
6159 		if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
6160 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6161 				     dpr->rx_jmb_prod_idx);
6162 
6163 		mmiowb();
6164 
6165 		if (err)
6166 			tw32_f(HOSTCC_MODE, tp->coal_now);
6167 	}
6168 
6169 	return work_done;
6170 }
6171 
6172 static inline void tg3_reset_task_schedule(struct tg3 *tp)
6173 {
6174 	if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
6175 		schedule_work(&tp->reset_task);
6176 }
6177 
6178 static inline void tg3_reset_task_cancel(struct tg3 *tp)
6179 {
6180 	cancel_work_sync(&tp->reset_task);
6181 	tg3_flag_clear(tp, RESET_TASK_PENDING);
6182 	tg3_flag_clear(tp, TX_RECOVERY_PENDING);
6183 }
6184 
6185 static int tg3_poll_msix(struct napi_struct *napi, int budget)
6186 {
6187 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6188 	struct tg3 *tp = tnapi->tp;
6189 	int work_done = 0;
6190 	struct tg3_hw_status *sblk = tnapi->hw_status;
6191 
6192 	while (1) {
6193 		work_done = tg3_poll_work(tnapi, work_done, budget);
6194 
6195 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6196 			goto tx_recovery;
6197 
6198 		if (unlikely(work_done >= budget))
6199 			break;
6200 
6201 		/* tp->last_tag is used in tg3_int_reenable() below
6202 		 * to tell the hw how much work has been processed,
6203 		 * so we must read it before checking for more work.
6204 		 */
6205 		tnapi->last_tag = sblk->status_tag;
6206 		tnapi->last_irq_tag = tnapi->last_tag;
6207 		rmb();
6208 
6209 		/* check for RX/TX work to do */
6210 		if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
6211 			   *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
6212 
6213 			/* This test here is not race free, but will reduce
6214 			 * the number of interrupts by looping again.
6215 			 */
6216 			if (tnapi == &tp->napi[1] && tp->rx_refill)
6217 				continue;
6218 
6219 			napi_complete(napi);
6220 			/* Reenable interrupts. */
6221 			tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
6222 
6223 			/* This test here is synchronized by napi_schedule()
6224 			 * and napi_complete() to close the race condition.
6225 			 */
6226 			if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
6227 				tw32(HOSTCC_MODE, tp->coalesce_mode |
6228 						  HOSTCC_MODE_ENABLE |
6229 						  tnapi->coal_now);
6230 			}
6231 			mmiowb();
6232 			break;
6233 		}
6234 	}
6235 
6236 	return work_done;
6237 
6238 tx_recovery:
6239 	/* work_done is guaranteed to be less than budget. */
6240 	napi_complete(napi);
6241 	tg3_reset_task_schedule(tp);
6242 	return work_done;
6243 }
6244 
6245 static void tg3_process_error(struct tg3 *tp)
6246 {
6247 	u32 val;
6248 	bool real_error = false;
6249 
6250 	if (tg3_flag(tp, ERROR_PROCESSED))
6251 		return;
6252 
6253 	/* Check Flow Attention register */
6254 	val = tr32(HOSTCC_FLOW_ATTN);
6255 	if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
6256 		netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
6257 		real_error = true;
6258 	}
6259 
6260 	if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
6261 		netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
6262 		real_error = true;
6263 	}
6264 
6265 	if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
6266 		netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
6267 		real_error = true;
6268 	}
6269 
6270 	if (!real_error)
6271 		return;
6272 
6273 	tg3_dump_state(tp);
6274 
6275 	tg3_flag_set(tp, ERROR_PROCESSED);
6276 	tg3_reset_task_schedule(tp);
6277 }
6278 
6279 static int tg3_poll(struct napi_struct *napi, int budget)
6280 {
6281 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6282 	struct tg3 *tp = tnapi->tp;
6283 	int work_done = 0;
6284 	struct tg3_hw_status *sblk = tnapi->hw_status;
6285 
6286 	while (1) {
6287 		if (sblk->status & SD_STATUS_ERROR)
6288 			tg3_process_error(tp);
6289 
6290 		tg3_poll_link(tp);
6291 
6292 		work_done = tg3_poll_work(tnapi, work_done, budget);
6293 
6294 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6295 			goto tx_recovery;
6296 
6297 		if (unlikely(work_done >= budget))
6298 			break;
6299 
6300 		if (tg3_flag(tp, TAGGED_STATUS)) {
6301 			/* tp->last_tag is used in tg3_int_reenable() below
6302 			 * to tell the hw how much work has been processed,
6303 			 * so we must read it before checking for more work.
6304 			 */
6305 			tnapi->last_tag = sblk->status_tag;
6306 			tnapi->last_irq_tag = tnapi->last_tag;
6307 			rmb();
6308 		} else
6309 			sblk->status &= ~SD_STATUS_UPDATED;
6310 
6311 		if (likely(!tg3_has_work(tnapi))) {
6312 			napi_complete(napi);
6313 			tg3_int_reenable(tnapi);
6314 			break;
6315 		}
6316 	}
6317 
6318 	return work_done;
6319 
6320 tx_recovery:
6321 	/* work_done is guaranteed to be less than budget. */
6322 	napi_complete(napi);
6323 	tg3_reset_task_schedule(tp);
6324 	return work_done;
6325 }
6326 
6327 static void tg3_napi_disable(struct tg3 *tp)
6328 {
6329 	int i;
6330 
6331 	for (i = tp->irq_cnt - 1; i >= 0; i--)
6332 		napi_disable(&tp->napi[i].napi);
6333 }
6334 
6335 static void tg3_napi_enable(struct tg3 *tp)
6336 {
6337 	int i;
6338 
6339 	for (i = 0; i < tp->irq_cnt; i++)
6340 		napi_enable(&tp->napi[i].napi);
6341 }
6342 
6343 static void tg3_napi_init(struct tg3 *tp)
6344 {
6345 	int i;
6346 
6347 	netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
6348 	for (i = 1; i < tp->irq_cnt; i++)
6349 		netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
6350 }
6351 
6352 static void tg3_napi_fini(struct tg3 *tp)
6353 {
6354 	int i;
6355 
6356 	for (i = 0; i < tp->irq_cnt; i++)
6357 		netif_napi_del(&tp->napi[i].napi);
6358 }
6359 
6360 static inline void tg3_netif_stop(struct tg3 *tp)
6361 {
6362 	tp->dev->trans_start = jiffies;	/* prevent tx timeout */
6363 	tg3_napi_disable(tp);
6364 	netif_tx_disable(tp->dev);
6365 }
6366 
6367 static inline void tg3_netif_start(struct tg3 *tp)
6368 {
6369 	/* NOTE: unconditional netif_tx_wake_all_queues is only
6370 	 * appropriate so long as all callers are assured to
6371 	 * have free tx slots (such as after tg3_init_hw)
6372 	 */
6373 	netif_tx_wake_all_queues(tp->dev);
6374 
6375 	tg3_napi_enable(tp);
6376 	tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
6377 	tg3_enable_ints(tp);
6378 }
6379 
6380 static void tg3_irq_quiesce(struct tg3 *tp)
6381 {
6382 	int i;
6383 
6384 	BUG_ON(tp->irq_sync);
6385 
6386 	tp->irq_sync = 1;
6387 	smp_mb();
6388 
6389 	for (i = 0; i < tp->irq_cnt; i++)
6390 		synchronize_irq(tp->napi[i].irq_vec);
6391 }
6392 
6393 /* Fully shutdown all tg3 driver activity elsewhere in the system.
6394  * If irq_sync is non-zero, then the IRQ handler must be synchronized
6395  * with as well.  Most of the time, this is not necessary except when
6396  * shutting down the device.
6397  */
6398 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
6399 {
6400 	spin_lock_bh(&tp->lock);
6401 	if (irq_sync)
6402 		tg3_irq_quiesce(tp);
6403 }
6404 
6405 static inline void tg3_full_unlock(struct tg3 *tp)
6406 {
6407 	spin_unlock_bh(&tp->lock);
6408 }
6409 
6410 /* One-shot MSI handler - Chip automatically disables interrupt
6411  * after sending MSI so driver doesn't have to do it.
6412  */
6413 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
6414 {
6415 	struct tg3_napi *tnapi = dev_id;
6416 	struct tg3 *tp = tnapi->tp;
6417 
6418 	prefetch(tnapi->hw_status);
6419 	if (tnapi->rx_rcb)
6420 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6421 
6422 	if (likely(!tg3_irq_sync(tp)))
6423 		napi_schedule(&tnapi->napi);
6424 
6425 	return IRQ_HANDLED;
6426 }
6427 
6428 /* MSI ISR - No need to check for interrupt sharing and no need to
6429  * flush status block and interrupt mailbox. PCI ordering rules
6430  * guarantee that MSI will arrive after the status block.
6431  */
6432 static irqreturn_t tg3_msi(int irq, void *dev_id)
6433 {
6434 	struct tg3_napi *tnapi = dev_id;
6435 	struct tg3 *tp = tnapi->tp;
6436 
6437 	prefetch(tnapi->hw_status);
6438 	if (tnapi->rx_rcb)
6439 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6440 	/*
6441 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6442 	 * chip-internal interrupt pending events.
6443 	 * Writing non-zero to intr-mbox-0 additional tells the
6444 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6445 	 * event coalescing.
6446 	 */
6447 	tw32_mailbox(tnapi->int_mbox, 0x00000001);
6448 	if (likely(!tg3_irq_sync(tp)))
6449 		napi_schedule(&tnapi->napi);
6450 
6451 	return IRQ_RETVAL(1);
6452 }
6453 
6454 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
6455 {
6456 	struct tg3_napi *tnapi = dev_id;
6457 	struct tg3 *tp = tnapi->tp;
6458 	struct tg3_hw_status *sblk = tnapi->hw_status;
6459 	unsigned int handled = 1;
6460 
6461 	/* In INTx mode, it is possible for the interrupt to arrive at
6462 	 * the CPU before the status block posted prior to the interrupt.
6463 	 * Reading the PCI State register will confirm whether the
6464 	 * interrupt is ours and will flush the status block.
6465 	 */
6466 	if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
6467 		if (tg3_flag(tp, CHIP_RESETTING) ||
6468 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6469 			handled = 0;
6470 			goto out;
6471 		}
6472 	}
6473 
6474 	/*
6475 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6476 	 * chip-internal interrupt pending events.
6477 	 * Writing non-zero to intr-mbox-0 additional tells the
6478 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6479 	 * event coalescing.
6480 	 *
6481 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6482 	 * spurious interrupts.  The flush impacts performance but
6483 	 * excessive spurious interrupts can be worse in some cases.
6484 	 */
6485 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6486 	if (tg3_irq_sync(tp))
6487 		goto out;
6488 	sblk->status &= ~SD_STATUS_UPDATED;
6489 	if (likely(tg3_has_work(tnapi))) {
6490 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6491 		napi_schedule(&tnapi->napi);
6492 	} else {
6493 		/* No work, shared interrupt perhaps?  re-enable
6494 		 * interrupts, and flush that PCI write
6495 		 */
6496 		tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
6497 			       0x00000000);
6498 	}
6499 out:
6500 	return IRQ_RETVAL(handled);
6501 }
6502 
6503 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
6504 {
6505 	struct tg3_napi *tnapi = dev_id;
6506 	struct tg3 *tp = tnapi->tp;
6507 	struct tg3_hw_status *sblk = tnapi->hw_status;
6508 	unsigned int handled = 1;
6509 
6510 	/* In INTx mode, it is possible for the interrupt to arrive at
6511 	 * the CPU before the status block posted prior to the interrupt.
6512 	 * Reading the PCI State register will confirm whether the
6513 	 * interrupt is ours and will flush the status block.
6514 	 */
6515 	if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
6516 		if (tg3_flag(tp, CHIP_RESETTING) ||
6517 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6518 			handled = 0;
6519 			goto out;
6520 		}
6521 	}
6522 
6523 	/*
6524 	 * writing any value to intr-mbox-0 clears PCI INTA# and
6525 	 * chip-internal interrupt pending events.
6526 	 * writing non-zero to intr-mbox-0 additional tells the
6527 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6528 	 * event coalescing.
6529 	 *
6530 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6531 	 * spurious interrupts.  The flush impacts performance but
6532 	 * excessive spurious interrupts can be worse in some cases.
6533 	 */
6534 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6535 
6536 	/*
6537 	 * In a shared interrupt configuration, sometimes other devices'
6538 	 * interrupts will scream.  We record the current status tag here
6539 	 * so that the above check can report that the screaming interrupts
6540 	 * are unhandled.  Eventually they will be silenced.
6541 	 */
6542 	tnapi->last_irq_tag = sblk->status_tag;
6543 
6544 	if (tg3_irq_sync(tp))
6545 		goto out;
6546 
6547 	prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6548 
6549 	napi_schedule(&tnapi->napi);
6550 
6551 out:
6552 	return IRQ_RETVAL(handled);
6553 }
6554 
6555 /* ISR for interrupt test */
6556 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
6557 {
6558 	struct tg3_napi *tnapi = dev_id;
6559 	struct tg3 *tp = tnapi->tp;
6560 	struct tg3_hw_status *sblk = tnapi->hw_status;
6561 
6562 	if ((sblk->status & SD_STATUS_UPDATED) ||
6563 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6564 		tg3_disable_ints(tp);
6565 		return IRQ_RETVAL(1);
6566 	}
6567 	return IRQ_RETVAL(0);
6568 }
6569 
6570 #ifdef CONFIG_NET_POLL_CONTROLLER
6571 static void tg3_poll_controller(struct net_device *dev)
6572 {
6573 	int i;
6574 	struct tg3 *tp = netdev_priv(dev);
6575 
6576 	for (i = 0; i < tp->irq_cnt; i++)
6577 		tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
6578 }
6579 #endif
6580 
6581 static void tg3_tx_timeout(struct net_device *dev)
6582 {
6583 	struct tg3 *tp = netdev_priv(dev);
6584 
6585 	if (netif_msg_tx_err(tp)) {
6586 		netdev_err(dev, "transmit timed out, resetting\n");
6587 		tg3_dump_state(tp);
6588 	}
6589 
6590 	tg3_reset_task_schedule(tp);
6591 }
6592 
6593 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
6594 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
6595 {
6596 	u32 base = (u32) mapping & 0xffffffff;
6597 
6598 	return (base > 0xffffdcc0) && (base + len + 8 < base);
6599 }
6600 
6601 /* Test for DMA addresses > 40-bit */
6602 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
6603 					  int len)
6604 {
6605 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
6606 	if (tg3_flag(tp, 40BIT_DMA_BUG))
6607 		return ((u64) mapping + len) > DMA_BIT_MASK(40);
6608 	return 0;
6609 #else
6610 	return 0;
6611 #endif
6612 }
6613 
6614 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
6615 				 dma_addr_t mapping, u32 len, u32 flags,
6616 				 u32 mss, u32 vlan)
6617 {
6618 	txbd->addr_hi = ((u64) mapping >> 32);
6619 	txbd->addr_lo = ((u64) mapping & 0xffffffff);
6620 	txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
6621 	txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
6622 }
6623 
6624 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
6625 			    dma_addr_t map, u32 len, u32 flags,
6626 			    u32 mss, u32 vlan)
6627 {
6628 	struct tg3 *tp = tnapi->tp;
6629 	bool hwbug = false;
6630 
6631 	if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
6632 		hwbug = true;
6633 
6634 	if (tg3_4g_overflow_test(map, len))
6635 		hwbug = true;
6636 
6637 	if (tg3_40bit_overflow_test(tp, map, len))
6638 		hwbug = true;
6639 
6640 	if (tp->dma_limit) {
6641 		u32 prvidx = *entry;
6642 		u32 tmp_flag = flags & ~TXD_FLAG_END;
6643 		while (len > tp->dma_limit && *budget) {
6644 			u32 frag_len = tp->dma_limit;
6645 			len -= tp->dma_limit;
6646 
6647 			/* Avoid the 8byte DMA problem */
6648 			if (len <= 8) {
6649 				len += tp->dma_limit / 2;
6650 				frag_len = tp->dma_limit / 2;
6651 			}
6652 
6653 			tnapi->tx_buffers[*entry].fragmented = true;
6654 
6655 			tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6656 				      frag_len, tmp_flag, mss, vlan);
6657 			*budget -= 1;
6658 			prvidx = *entry;
6659 			*entry = NEXT_TX(*entry);
6660 
6661 			map += frag_len;
6662 		}
6663 
6664 		if (len) {
6665 			if (*budget) {
6666 				tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6667 					      len, flags, mss, vlan);
6668 				*budget -= 1;
6669 				*entry = NEXT_TX(*entry);
6670 			} else {
6671 				hwbug = true;
6672 				tnapi->tx_buffers[prvidx].fragmented = false;
6673 			}
6674 		}
6675 	} else {
6676 		tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6677 			      len, flags, mss, vlan);
6678 		*entry = NEXT_TX(*entry);
6679 	}
6680 
6681 	return hwbug;
6682 }
6683 
6684 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
6685 {
6686 	int i;
6687 	struct sk_buff *skb;
6688 	struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
6689 
6690 	skb = txb->skb;
6691 	txb->skb = NULL;
6692 
6693 	pci_unmap_single(tnapi->tp->pdev,
6694 			 dma_unmap_addr(txb, mapping),
6695 			 skb_headlen(skb),
6696 			 PCI_DMA_TODEVICE);
6697 
6698 	while (txb->fragmented) {
6699 		txb->fragmented = false;
6700 		entry = NEXT_TX(entry);
6701 		txb = &tnapi->tx_buffers[entry];
6702 	}
6703 
6704 	for (i = 0; i <= last; i++) {
6705 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6706 
6707 		entry = NEXT_TX(entry);
6708 		txb = &tnapi->tx_buffers[entry];
6709 
6710 		pci_unmap_page(tnapi->tp->pdev,
6711 			       dma_unmap_addr(txb, mapping),
6712 			       skb_frag_size(frag), PCI_DMA_TODEVICE);
6713 
6714 		while (txb->fragmented) {
6715 			txb->fragmented = false;
6716 			entry = NEXT_TX(entry);
6717 			txb = &tnapi->tx_buffers[entry];
6718 		}
6719 	}
6720 }
6721 
6722 /* Workaround 4GB and 40-bit hardware DMA bugs. */
6723 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
6724 				       struct sk_buff **pskb,
6725 				       u32 *entry, u32 *budget,
6726 				       u32 base_flags, u32 mss, u32 vlan)
6727 {
6728 	struct tg3 *tp = tnapi->tp;
6729 	struct sk_buff *new_skb, *skb = *pskb;
6730 	dma_addr_t new_addr = 0;
6731 	int ret = 0;
6732 
6733 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
6734 		new_skb = skb_copy(skb, GFP_ATOMIC);
6735 	else {
6736 		int more_headroom = 4 - ((unsigned long)skb->data & 3);
6737 
6738 		new_skb = skb_copy_expand(skb,
6739 					  skb_headroom(skb) + more_headroom,
6740 					  skb_tailroom(skb), GFP_ATOMIC);
6741 	}
6742 
6743 	if (!new_skb) {
6744 		ret = -1;
6745 	} else {
6746 		/* New SKB is guaranteed to be linear. */
6747 		new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
6748 					  PCI_DMA_TODEVICE);
6749 		/* Make sure the mapping succeeded */
6750 		if (pci_dma_mapping_error(tp->pdev, new_addr)) {
6751 			dev_kfree_skb(new_skb);
6752 			ret = -1;
6753 		} else {
6754 			u32 save_entry = *entry;
6755 
6756 			base_flags |= TXD_FLAG_END;
6757 
6758 			tnapi->tx_buffers[*entry].skb = new_skb;
6759 			dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
6760 					   mapping, new_addr);
6761 
6762 			if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
6763 					    new_skb->len, base_flags,
6764 					    mss, vlan)) {
6765 				tg3_tx_skb_unmap(tnapi, save_entry, -1);
6766 				dev_kfree_skb(new_skb);
6767 				ret = -1;
6768 			}
6769 		}
6770 	}
6771 
6772 	dev_kfree_skb(skb);
6773 	*pskb = new_skb;
6774 	return ret;
6775 }
6776 
6777 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
6778 
6779 /* Use GSO to workaround a rare TSO bug that may be triggered when the
6780  * TSO header is greater than 80 bytes.
6781  */
6782 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
6783 {
6784 	struct sk_buff *segs, *nskb;
6785 	u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
6786 
6787 	/* Estimate the number of fragments in the worst case */
6788 	if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
6789 		netif_stop_queue(tp->dev);
6790 
6791 		/* netif_tx_stop_queue() must be done before checking
6792 		 * checking tx index in tg3_tx_avail() below, because in
6793 		 * tg3_tx(), we update tx index before checking for
6794 		 * netif_tx_queue_stopped().
6795 		 */
6796 		smp_mb();
6797 		if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
6798 			return NETDEV_TX_BUSY;
6799 
6800 		netif_wake_queue(tp->dev);
6801 	}
6802 
6803 	segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
6804 	if (IS_ERR(segs))
6805 		goto tg3_tso_bug_end;
6806 
6807 	do {
6808 		nskb = segs;
6809 		segs = segs->next;
6810 		nskb->next = NULL;
6811 		tg3_start_xmit(nskb, tp->dev);
6812 	} while (segs);
6813 
6814 tg3_tso_bug_end:
6815 	dev_kfree_skb(skb);
6816 
6817 	return NETDEV_TX_OK;
6818 }
6819 
6820 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
6821  * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
6822  */
6823 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6824 {
6825 	struct tg3 *tp = netdev_priv(dev);
6826 	u32 len, entry, base_flags, mss, vlan = 0;
6827 	u32 budget;
6828 	int i = -1, would_hit_hwbug;
6829 	dma_addr_t mapping;
6830 	struct tg3_napi *tnapi;
6831 	struct netdev_queue *txq;
6832 	unsigned int last;
6833 
6834 	txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
6835 	tnapi = &tp->napi[skb_get_queue_mapping(skb)];
6836 	if (tg3_flag(tp, ENABLE_TSS))
6837 		tnapi++;
6838 
6839 	budget = tg3_tx_avail(tnapi);
6840 
6841 	/* We are running in BH disabled context with netif_tx_lock
6842 	 * and TX reclaim runs via tp->napi.poll inside of a software
6843 	 * interrupt.  Furthermore, IRQ processing runs lockless so we have
6844 	 * no IRQ context deadlocks to worry about either.  Rejoice!
6845 	 */
6846 	if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
6847 		if (!netif_tx_queue_stopped(txq)) {
6848 			netif_tx_stop_queue(txq);
6849 
6850 			/* This is a hard error, log it. */
6851 			netdev_err(dev,
6852 				   "BUG! Tx Ring full when queue awake!\n");
6853 		}
6854 		return NETDEV_TX_BUSY;
6855 	}
6856 
6857 	entry = tnapi->tx_prod;
6858 	base_flags = 0;
6859 	if (skb->ip_summed == CHECKSUM_PARTIAL)
6860 		base_flags |= TXD_FLAG_TCPUDP_CSUM;
6861 
6862 	mss = skb_shinfo(skb)->gso_size;
6863 	if (mss) {
6864 		struct iphdr *iph;
6865 		u32 tcp_opt_len, hdr_len;
6866 
6867 		if (skb_header_cloned(skb) &&
6868 		    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
6869 			goto drop;
6870 
6871 		iph = ip_hdr(skb);
6872 		tcp_opt_len = tcp_optlen(skb);
6873 
6874 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
6875 
6876 		if (!skb_is_gso_v6(skb)) {
6877 			iph->check = 0;
6878 			iph->tot_len = htons(mss + hdr_len);
6879 		}
6880 
6881 		if (unlikely((ETH_HLEN + hdr_len) > 80) &&
6882 		    tg3_flag(tp, TSO_BUG))
6883 			return tg3_tso_bug(tp, skb);
6884 
6885 		base_flags |= (TXD_FLAG_CPU_PRE_DMA |
6886 			       TXD_FLAG_CPU_POST_DMA);
6887 
6888 		if (tg3_flag(tp, HW_TSO_1) ||
6889 		    tg3_flag(tp, HW_TSO_2) ||
6890 		    tg3_flag(tp, HW_TSO_3)) {
6891 			tcp_hdr(skb)->check = 0;
6892 			base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
6893 		} else
6894 			tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
6895 								 iph->daddr, 0,
6896 								 IPPROTO_TCP,
6897 								 0);
6898 
6899 		if (tg3_flag(tp, HW_TSO_3)) {
6900 			mss |= (hdr_len & 0xc) << 12;
6901 			if (hdr_len & 0x10)
6902 				base_flags |= 0x00000010;
6903 			base_flags |= (hdr_len & 0x3e0) << 5;
6904 		} else if (tg3_flag(tp, HW_TSO_2))
6905 			mss |= hdr_len << 9;
6906 		else if (tg3_flag(tp, HW_TSO_1) ||
6907 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
6908 			if (tcp_opt_len || iph->ihl > 5) {
6909 				int tsflags;
6910 
6911 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
6912 				mss |= (tsflags << 11);
6913 			}
6914 		} else {
6915 			if (tcp_opt_len || iph->ihl > 5) {
6916 				int tsflags;
6917 
6918 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
6919 				base_flags |= tsflags << 12;
6920 			}
6921 		}
6922 	}
6923 
6924 	if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
6925 	    !mss && skb->len > VLAN_ETH_FRAME_LEN)
6926 		base_flags |= TXD_FLAG_JMB_PKT;
6927 
6928 	if (vlan_tx_tag_present(skb)) {
6929 		base_flags |= TXD_FLAG_VLAN;
6930 		vlan = vlan_tx_tag_get(skb);
6931 	}
6932 
6933 	len = skb_headlen(skb);
6934 
6935 	mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
6936 	if (pci_dma_mapping_error(tp->pdev, mapping))
6937 		goto drop;
6938 
6939 
6940 	tnapi->tx_buffers[entry].skb = skb;
6941 	dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
6942 
6943 	would_hit_hwbug = 0;
6944 
6945 	if (tg3_flag(tp, 5701_DMA_BUG))
6946 		would_hit_hwbug = 1;
6947 
6948 	if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
6949 			  ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
6950 			    mss, vlan)) {
6951 		would_hit_hwbug = 1;
6952 	} else if (skb_shinfo(skb)->nr_frags > 0) {
6953 		u32 tmp_mss = mss;
6954 
6955 		if (!tg3_flag(tp, HW_TSO_1) &&
6956 		    !tg3_flag(tp, HW_TSO_2) &&
6957 		    !tg3_flag(tp, HW_TSO_3))
6958 			tmp_mss = 0;
6959 
6960 		/* Now loop through additional data
6961 		 * fragments, and queue them.
6962 		 */
6963 		last = skb_shinfo(skb)->nr_frags - 1;
6964 		for (i = 0; i <= last; i++) {
6965 			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6966 
6967 			len = skb_frag_size(frag);
6968 			mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
6969 						   len, DMA_TO_DEVICE);
6970 
6971 			tnapi->tx_buffers[entry].skb = NULL;
6972 			dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
6973 					   mapping);
6974 			if (dma_mapping_error(&tp->pdev->dev, mapping))
6975 				goto dma_error;
6976 
6977 			if (!budget ||
6978 			    tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
6979 					    len, base_flags |
6980 					    ((i == last) ? TXD_FLAG_END : 0),
6981 					    tmp_mss, vlan)) {
6982 				would_hit_hwbug = 1;
6983 				break;
6984 			}
6985 		}
6986 	}
6987 
6988 	if (would_hit_hwbug) {
6989 		tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
6990 
6991 		/* If the workaround fails due to memory/mapping
6992 		 * failure, silently drop this packet.
6993 		 */
6994 		entry = tnapi->tx_prod;
6995 		budget = tg3_tx_avail(tnapi);
6996 		if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
6997 						base_flags, mss, vlan))
6998 			goto drop_nofree;
6999 	}
7000 
7001 	skb_tx_timestamp(skb);
7002 	netdev_tx_sent_queue(txq, skb->len);
7003 
7004 	/* Sync BD data before updating mailbox */
7005 	wmb();
7006 
7007 	/* Packets are ready, update Tx producer idx local and on card. */
7008 	tw32_tx_mbox(tnapi->prodmbox, entry);
7009 
7010 	tnapi->tx_prod = entry;
7011 	if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
7012 		netif_tx_stop_queue(txq);
7013 
7014 		/* netif_tx_stop_queue() must be done before checking
7015 		 * checking tx index in tg3_tx_avail() below, because in
7016 		 * tg3_tx(), we update tx index before checking for
7017 		 * netif_tx_queue_stopped().
7018 		 */
7019 		smp_mb();
7020 		if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
7021 			netif_tx_wake_queue(txq);
7022 	}
7023 
7024 	mmiowb();
7025 	return NETDEV_TX_OK;
7026 
7027 dma_error:
7028 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
7029 	tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
7030 drop:
7031 	dev_kfree_skb(skb);
7032 drop_nofree:
7033 	tp->tx_dropped++;
7034 	return NETDEV_TX_OK;
7035 }
7036 
7037 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
7038 {
7039 	if (enable) {
7040 		tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
7041 				  MAC_MODE_PORT_MODE_MASK);
7042 
7043 		tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
7044 
7045 		if (!tg3_flag(tp, 5705_PLUS))
7046 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
7047 
7048 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
7049 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
7050 		else
7051 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
7052 	} else {
7053 		tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
7054 
7055 		if (tg3_flag(tp, 5705_PLUS) ||
7056 		    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
7057 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
7058 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
7059 	}
7060 
7061 	tw32(MAC_MODE, tp->mac_mode);
7062 	udelay(40);
7063 }
7064 
7065 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
7066 {
7067 	u32 val, bmcr, mac_mode, ptest = 0;
7068 
7069 	tg3_phy_toggle_apd(tp, false);
7070 	tg3_phy_toggle_automdix(tp, 0);
7071 
7072 	if (extlpbk && tg3_phy_set_extloopbk(tp))
7073 		return -EIO;
7074 
7075 	bmcr = BMCR_FULLDPLX;
7076 	switch (speed) {
7077 	case SPEED_10:
7078 		break;
7079 	case SPEED_100:
7080 		bmcr |= BMCR_SPEED100;
7081 		break;
7082 	case SPEED_1000:
7083 	default:
7084 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
7085 			speed = SPEED_100;
7086 			bmcr |= BMCR_SPEED100;
7087 		} else {
7088 			speed = SPEED_1000;
7089 			bmcr |= BMCR_SPEED1000;
7090 		}
7091 	}
7092 
7093 	if (extlpbk) {
7094 		if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
7095 			tg3_readphy(tp, MII_CTRL1000, &val);
7096 			val |= CTL1000_AS_MASTER |
7097 			       CTL1000_ENABLE_MASTER;
7098 			tg3_writephy(tp, MII_CTRL1000, val);
7099 		} else {
7100 			ptest = MII_TG3_FET_PTEST_TRIM_SEL |
7101 				MII_TG3_FET_PTEST_TRIM_2;
7102 			tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
7103 		}
7104 	} else
7105 		bmcr |= BMCR_LOOPBACK;
7106 
7107 	tg3_writephy(tp, MII_BMCR, bmcr);
7108 
7109 	/* The write needs to be flushed for the FETs */
7110 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
7111 		tg3_readphy(tp, MII_BMCR, &bmcr);
7112 
7113 	udelay(40);
7114 
7115 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
7116 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
7117 		tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
7118 			     MII_TG3_FET_PTEST_FRC_TX_LINK |
7119 			     MII_TG3_FET_PTEST_FRC_TX_LOCK);
7120 
7121 		/* The write needs to be flushed for the AC131 */
7122 		tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
7123 	}
7124 
7125 	/* Reset to prevent losing 1st rx packet intermittently */
7126 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
7127 	    tg3_flag(tp, 5780_CLASS)) {
7128 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7129 		udelay(10);
7130 		tw32_f(MAC_RX_MODE, tp->rx_mode);
7131 	}
7132 
7133 	mac_mode = tp->mac_mode &
7134 		   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
7135 	if (speed == SPEED_1000)
7136 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
7137 	else
7138 		mac_mode |= MAC_MODE_PORT_MODE_MII;
7139 
7140 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
7141 		u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
7142 
7143 		if (masked_phy_id == TG3_PHY_ID_BCM5401)
7144 			mac_mode &= ~MAC_MODE_LINK_POLARITY;
7145 		else if (masked_phy_id == TG3_PHY_ID_BCM5411)
7146 			mac_mode |= MAC_MODE_LINK_POLARITY;
7147 
7148 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
7149 			     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
7150 	}
7151 
7152 	tw32(MAC_MODE, mac_mode);
7153 	udelay(40);
7154 
7155 	return 0;
7156 }
7157 
7158 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
7159 {
7160 	struct tg3 *tp = netdev_priv(dev);
7161 
7162 	if (features & NETIF_F_LOOPBACK) {
7163 		if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
7164 			return;
7165 
7166 		spin_lock_bh(&tp->lock);
7167 		tg3_mac_loopback(tp, true);
7168 		netif_carrier_on(tp->dev);
7169 		spin_unlock_bh(&tp->lock);
7170 		netdev_info(dev, "Internal MAC loopback mode enabled.\n");
7171 	} else {
7172 		if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
7173 			return;
7174 
7175 		spin_lock_bh(&tp->lock);
7176 		tg3_mac_loopback(tp, false);
7177 		/* Force link status check */
7178 		tg3_setup_phy(tp, 1);
7179 		spin_unlock_bh(&tp->lock);
7180 		netdev_info(dev, "Internal MAC loopback mode disabled.\n");
7181 	}
7182 }
7183 
7184 static netdev_features_t tg3_fix_features(struct net_device *dev,
7185 	netdev_features_t features)
7186 {
7187 	struct tg3 *tp = netdev_priv(dev);
7188 
7189 	if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
7190 		features &= ~NETIF_F_ALL_TSO;
7191 
7192 	return features;
7193 }
7194 
7195 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
7196 {
7197 	netdev_features_t changed = dev->features ^ features;
7198 
7199 	if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
7200 		tg3_set_loopback(dev, features);
7201 
7202 	return 0;
7203 }
7204 
7205 static void tg3_rx_prodring_free(struct tg3 *tp,
7206 				 struct tg3_rx_prodring_set *tpr)
7207 {
7208 	int i;
7209 
7210 	if (tpr != &tp->napi[0].prodring) {
7211 		for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
7212 		     i = (i + 1) & tp->rx_std_ring_mask)
7213 			tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7214 					tp->rx_pkt_map_sz);
7215 
7216 		if (tg3_flag(tp, JUMBO_CAPABLE)) {
7217 			for (i = tpr->rx_jmb_cons_idx;
7218 			     i != tpr->rx_jmb_prod_idx;
7219 			     i = (i + 1) & tp->rx_jmb_ring_mask) {
7220 				tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7221 						TG3_RX_JMB_MAP_SZ);
7222 			}
7223 		}
7224 
7225 		return;
7226 	}
7227 
7228 	for (i = 0; i <= tp->rx_std_ring_mask; i++)
7229 		tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7230 				tp->rx_pkt_map_sz);
7231 
7232 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7233 		for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
7234 			tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7235 					TG3_RX_JMB_MAP_SZ);
7236 	}
7237 }
7238 
7239 /* Initialize rx rings for packet processing.
7240  *
7241  * The chip has been shut down and the driver detached from
7242  * the networking, so no interrupts or new tx packets will
7243  * end up in the driver.  tp->{tx,}lock are held and thus
7244  * we may not sleep.
7245  */
7246 static int tg3_rx_prodring_alloc(struct tg3 *tp,
7247 				 struct tg3_rx_prodring_set *tpr)
7248 {
7249 	u32 i, rx_pkt_dma_sz;
7250 
7251 	tpr->rx_std_cons_idx = 0;
7252 	tpr->rx_std_prod_idx = 0;
7253 	tpr->rx_jmb_cons_idx = 0;
7254 	tpr->rx_jmb_prod_idx = 0;
7255 
7256 	if (tpr != &tp->napi[0].prodring) {
7257 		memset(&tpr->rx_std_buffers[0], 0,
7258 		       TG3_RX_STD_BUFF_RING_SIZE(tp));
7259 		if (tpr->rx_jmb_buffers)
7260 			memset(&tpr->rx_jmb_buffers[0], 0,
7261 			       TG3_RX_JMB_BUFF_RING_SIZE(tp));
7262 		goto done;
7263 	}
7264 
7265 	/* Zero out all descriptors. */
7266 	memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
7267 
7268 	rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
7269 	if (tg3_flag(tp, 5780_CLASS) &&
7270 	    tp->dev->mtu > ETH_DATA_LEN)
7271 		rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
7272 	tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
7273 
7274 	/* Initialize invariants of the rings, we only set this
7275 	 * stuff once.  This works because the card does not
7276 	 * write into the rx buffer posting rings.
7277 	 */
7278 	for (i = 0; i <= tp->rx_std_ring_mask; i++) {
7279 		struct tg3_rx_buffer_desc *rxd;
7280 
7281 		rxd = &tpr->rx_std[i];
7282 		rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
7283 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
7284 		rxd->opaque = (RXD_OPAQUE_RING_STD |
7285 			       (i << RXD_OPAQUE_INDEX_SHIFT));
7286 	}
7287 
7288 	/* Now allocate fresh SKBs for each rx ring. */
7289 	for (i = 0; i < tp->rx_pending; i++) {
7290 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i) < 0) {
7291 			netdev_warn(tp->dev,
7292 				    "Using a smaller RX standard ring. Only "
7293 				    "%d out of %d buffers were allocated "
7294 				    "successfully\n", i, tp->rx_pending);
7295 			if (i == 0)
7296 				goto initfail;
7297 			tp->rx_pending = i;
7298 			break;
7299 		}
7300 	}
7301 
7302 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
7303 		goto done;
7304 
7305 	memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
7306 
7307 	if (!tg3_flag(tp, JUMBO_RING_ENABLE))
7308 		goto done;
7309 
7310 	for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
7311 		struct tg3_rx_buffer_desc *rxd;
7312 
7313 		rxd = &tpr->rx_jmb[i].std;
7314 		rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
7315 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
7316 				  RXD_FLAG_JUMBO;
7317 		rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
7318 		       (i << RXD_OPAQUE_INDEX_SHIFT));
7319 	}
7320 
7321 	for (i = 0; i < tp->rx_jumbo_pending; i++) {
7322 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i) < 0) {
7323 			netdev_warn(tp->dev,
7324 				    "Using a smaller RX jumbo ring. Only %d "
7325 				    "out of %d buffers were allocated "
7326 				    "successfully\n", i, tp->rx_jumbo_pending);
7327 			if (i == 0)
7328 				goto initfail;
7329 			tp->rx_jumbo_pending = i;
7330 			break;
7331 		}
7332 	}
7333 
7334 done:
7335 	return 0;
7336 
7337 initfail:
7338 	tg3_rx_prodring_free(tp, tpr);
7339 	return -ENOMEM;
7340 }
7341 
7342 static void tg3_rx_prodring_fini(struct tg3 *tp,
7343 				 struct tg3_rx_prodring_set *tpr)
7344 {
7345 	kfree(tpr->rx_std_buffers);
7346 	tpr->rx_std_buffers = NULL;
7347 	kfree(tpr->rx_jmb_buffers);
7348 	tpr->rx_jmb_buffers = NULL;
7349 	if (tpr->rx_std) {
7350 		dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
7351 				  tpr->rx_std, tpr->rx_std_mapping);
7352 		tpr->rx_std = NULL;
7353 	}
7354 	if (tpr->rx_jmb) {
7355 		dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
7356 				  tpr->rx_jmb, tpr->rx_jmb_mapping);
7357 		tpr->rx_jmb = NULL;
7358 	}
7359 }
7360 
7361 static int tg3_rx_prodring_init(struct tg3 *tp,
7362 				struct tg3_rx_prodring_set *tpr)
7363 {
7364 	tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
7365 				      GFP_KERNEL);
7366 	if (!tpr->rx_std_buffers)
7367 		return -ENOMEM;
7368 
7369 	tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
7370 					 TG3_RX_STD_RING_BYTES(tp),
7371 					 &tpr->rx_std_mapping,
7372 					 GFP_KERNEL);
7373 	if (!tpr->rx_std)
7374 		goto err_out;
7375 
7376 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7377 		tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
7378 					      GFP_KERNEL);
7379 		if (!tpr->rx_jmb_buffers)
7380 			goto err_out;
7381 
7382 		tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
7383 						 TG3_RX_JMB_RING_BYTES(tp),
7384 						 &tpr->rx_jmb_mapping,
7385 						 GFP_KERNEL);
7386 		if (!tpr->rx_jmb)
7387 			goto err_out;
7388 	}
7389 
7390 	return 0;
7391 
7392 err_out:
7393 	tg3_rx_prodring_fini(tp, tpr);
7394 	return -ENOMEM;
7395 }
7396 
7397 /* Free up pending packets in all rx/tx rings.
7398  *
7399  * The chip has been shut down and the driver detached from
7400  * the networking, so no interrupts or new tx packets will
7401  * end up in the driver.  tp->{tx,}lock is not held and we are not
7402  * in an interrupt context and thus may sleep.
7403  */
7404 static void tg3_free_rings(struct tg3 *tp)
7405 {
7406 	int i, j;
7407 
7408 	for (j = 0; j < tp->irq_cnt; j++) {
7409 		struct tg3_napi *tnapi = &tp->napi[j];
7410 
7411 		tg3_rx_prodring_free(tp, &tnapi->prodring);
7412 
7413 		if (!tnapi->tx_buffers)
7414 			continue;
7415 
7416 		for (i = 0; i < TG3_TX_RING_SIZE; i++) {
7417 			struct sk_buff *skb = tnapi->tx_buffers[i].skb;
7418 
7419 			if (!skb)
7420 				continue;
7421 
7422 			tg3_tx_skb_unmap(tnapi, i,
7423 					 skb_shinfo(skb)->nr_frags - 1);
7424 
7425 			dev_kfree_skb_any(skb);
7426 		}
7427 		netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
7428 	}
7429 }
7430 
7431 /* Initialize tx/rx rings for packet processing.
7432  *
7433  * The chip has been shut down and the driver detached from
7434  * the networking, so no interrupts or new tx packets will
7435  * end up in the driver.  tp->{tx,}lock are held and thus
7436  * we may not sleep.
7437  */
7438 static int tg3_init_rings(struct tg3 *tp)
7439 {
7440 	int i;
7441 
7442 	/* Free up all the SKBs. */
7443 	tg3_free_rings(tp);
7444 
7445 	for (i = 0; i < tp->irq_cnt; i++) {
7446 		struct tg3_napi *tnapi = &tp->napi[i];
7447 
7448 		tnapi->last_tag = 0;
7449 		tnapi->last_irq_tag = 0;
7450 		tnapi->hw_status->status = 0;
7451 		tnapi->hw_status->status_tag = 0;
7452 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7453 
7454 		tnapi->tx_prod = 0;
7455 		tnapi->tx_cons = 0;
7456 		if (tnapi->tx_ring)
7457 			memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
7458 
7459 		tnapi->rx_rcb_ptr = 0;
7460 		if (tnapi->rx_rcb)
7461 			memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7462 
7463 		if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
7464 			tg3_free_rings(tp);
7465 			return -ENOMEM;
7466 		}
7467 	}
7468 
7469 	return 0;
7470 }
7471 
7472 /*
7473  * Must not be invoked with interrupt sources disabled and
7474  * the hardware shutdown down.
7475  */
7476 static void tg3_free_consistent(struct tg3 *tp)
7477 {
7478 	int i;
7479 
7480 	for (i = 0; i < tp->irq_cnt; i++) {
7481 		struct tg3_napi *tnapi = &tp->napi[i];
7482 
7483 		if (tnapi->tx_ring) {
7484 			dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
7485 				tnapi->tx_ring, tnapi->tx_desc_mapping);
7486 			tnapi->tx_ring = NULL;
7487 		}
7488 
7489 		kfree(tnapi->tx_buffers);
7490 		tnapi->tx_buffers = NULL;
7491 
7492 		if (tnapi->rx_rcb) {
7493 			dma_free_coherent(&tp->pdev->dev,
7494 					  TG3_RX_RCB_RING_BYTES(tp),
7495 					  tnapi->rx_rcb,
7496 					  tnapi->rx_rcb_mapping);
7497 			tnapi->rx_rcb = NULL;
7498 		}
7499 
7500 		tg3_rx_prodring_fini(tp, &tnapi->prodring);
7501 
7502 		if (tnapi->hw_status) {
7503 			dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
7504 					  tnapi->hw_status,
7505 					  tnapi->status_mapping);
7506 			tnapi->hw_status = NULL;
7507 		}
7508 	}
7509 
7510 	if (tp->hw_stats) {
7511 		dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
7512 				  tp->hw_stats, tp->stats_mapping);
7513 		tp->hw_stats = NULL;
7514 	}
7515 }
7516 
7517 /*
7518  * Must not be invoked with interrupt sources disabled and
7519  * the hardware shutdown down.  Can sleep.
7520  */
7521 static int tg3_alloc_consistent(struct tg3 *tp)
7522 {
7523 	int i;
7524 
7525 	tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
7526 					  sizeof(struct tg3_hw_stats),
7527 					  &tp->stats_mapping,
7528 					  GFP_KERNEL);
7529 	if (!tp->hw_stats)
7530 		goto err_out;
7531 
7532 	memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
7533 
7534 	for (i = 0; i < tp->irq_cnt; i++) {
7535 		struct tg3_napi *tnapi = &tp->napi[i];
7536 		struct tg3_hw_status *sblk;
7537 
7538 		tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
7539 						      TG3_HW_STATUS_SIZE,
7540 						      &tnapi->status_mapping,
7541 						      GFP_KERNEL);
7542 		if (!tnapi->hw_status)
7543 			goto err_out;
7544 
7545 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7546 		sblk = tnapi->hw_status;
7547 
7548 		if (tg3_rx_prodring_init(tp, &tnapi->prodring))
7549 			goto err_out;
7550 
7551 		/* If multivector TSS is enabled, vector 0 does not handle
7552 		 * tx interrupts.  Don't allocate any resources for it.
7553 		 */
7554 		if ((!i && !tg3_flag(tp, ENABLE_TSS)) ||
7555 		    (i && tg3_flag(tp, ENABLE_TSS))) {
7556 			tnapi->tx_buffers = kzalloc(
7557 					       sizeof(struct tg3_tx_ring_info) *
7558 					       TG3_TX_RING_SIZE, GFP_KERNEL);
7559 			if (!tnapi->tx_buffers)
7560 				goto err_out;
7561 
7562 			tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
7563 							    TG3_TX_RING_BYTES,
7564 							&tnapi->tx_desc_mapping,
7565 							    GFP_KERNEL);
7566 			if (!tnapi->tx_ring)
7567 				goto err_out;
7568 		}
7569 
7570 		/*
7571 		 * When RSS is enabled, the status block format changes
7572 		 * slightly.  The "rx_jumbo_consumer", "reserved",
7573 		 * and "rx_mini_consumer" members get mapped to the
7574 		 * other three rx return ring producer indexes.
7575 		 */
7576 		switch (i) {
7577 		default:
7578 			if (tg3_flag(tp, ENABLE_RSS)) {
7579 				tnapi->rx_rcb_prod_idx = NULL;
7580 				break;
7581 			}
7582 			/* Fall through */
7583 		case 1:
7584 			tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
7585 			break;
7586 		case 2:
7587 			tnapi->rx_rcb_prod_idx = &sblk->rx_jumbo_consumer;
7588 			break;
7589 		case 3:
7590 			tnapi->rx_rcb_prod_idx = &sblk->reserved;
7591 			break;
7592 		case 4:
7593 			tnapi->rx_rcb_prod_idx = &sblk->rx_mini_consumer;
7594 			break;
7595 		}
7596 
7597 		/*
7598 		 * If multivector RSS is enabled, vector 0 does not handle
7599 		 * rx or tx interrupts.  Don't allocate any resources for it.
7600 		 */
7601 		if (!i && tg3_flag(tp, ENABLE_RSS))
7602 			continue;
7603 
7604 		tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
7605 						   TG3_RX_RCB_RING_BYTES(tp),
7606 						   &tnapi->rx_rcb_mapping,
7607 						   GFP_KERNEL);
7608 		if (!tnapi->rx_rcb)
7609 			goto err_out;
7610 
7611 		memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7612 	}
7613 
7614 	return 0;
7615 
7616 err_out:
7617 	tg3_free_consistent(tp);
7618 	return -ENOMEM;
7619 }
7620 
7621 #define MAX_WAIT_CNT 1000
7622 
7623 /* To stop a block, clear the enable bit and poll till it
7624  * clears.  tp->lock is held.
7625  */
7626 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
7627 {
7628 	unsigned int i;
7629 	u32 val;
7630 
7631 	if (tg3_flag(tp, 5705_PLUS)) {
7632 		switch (ofs) {
7633 		case RCVLSC_MODE:
7634 		case DMAC_MODE:
7635 		case MBFREE_MODE:
7636 		case BUFMGR_MODE:
7637 		case MEMARB_MODE:
7638 			/* We can't enable/disable these bits of the
7639 			 * 5705/5750, just say success.
7640 			 */
7641 			return 0;
7642 
7643 		default:
7644 			break;
7645 		}
7646 	}
7647 
7648 	val = tr32(ofs);
7649 	val &= ~enable_bit;
7650 	tw32_f(ofs, val);
7651 
7652 	for (i = 0; i < MAX_WAIT_CNT; i++) {
7653 		udelay(100);
7654 		val = tr32(ofs);
7655 		if ((val & enable_bit) == 0)
7656 			break;
7657 	}
7658 
7659 	if (i == MAX_WAIT_CNT && !silent) {
7660 		dev_err(&tp->pdev->dev,
7661 			"tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
7662 			ofs, enable_bit);
7663 		return -ENODEV;
7664 	}
7665 
7666 	return 0;
7667 }
7668 
7669 /* tp->lock is held. */
7670 static int tg3_abort_hw(struct tg3 *tp, int silent)
7671 {
7672 	int i, err;
7673 
7674 	tg3_disable_ints(tp);
7675 
7676 	tp->rx_mode &= ~RX_MODE_ENABLE;
7677 	tw32_f(MAC_RX_MODE, tp->rx_mode);
7678 	udelay(10);
7679 
7680 	err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
7681 	err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
7682 	err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
7683 	err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
7684 	err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
7685 	err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
7686 
7687 	err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
7688 	err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
7689 	err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
7690 	err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
7691 	err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
7692 	err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
7693 	err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
7694 
7695 	tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
7696 	tw32_f(MAC_MODE, tp->mac_mode);
7697 	udelay(40);
7698 
7699 	tp->tx_mode &= ~TX_MODE_ENABLE;
7700 	tw32_f(MAC_TX_MODE, tp->tx_mode);
7701 
7702 	for (i = 0; i < MAX_WAIT_CNT; i++) {
7703 		udelay(100);
7704 		if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
7705 			break;
7706 	}
7707 	if (i >= MAX_WAIT_CNT) {
7708 		dev_err(&tp->pdev->dev,
7709 			"%s timed out, TX_MODE_ENABLE will not clear "
7710 			"MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
7711 		err |= -ENODEV;
7712 	}
7713 
7714 	err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
7715 	err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
7716 	err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
7717 
7718 	tw32(FTQ_RESET, 0xffffffff);
7719 	tw32(FTQ_RESET, 0x00000000);
7720 
7721 	err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
7722 	err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
7723 
7724 	for (i = 0; i < tp->irq_cnt; i++) {
7725 		struct tg3_napi *tnapi = &tp->napi[i];
7726 		if (tnapi->hw_status)
7727 			memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7728 	}
7729 
7730 	return err;
7731 }
7732 
7733 /* Save PCI command register before chip reset */
7734 static void tg3_save_pci_state(struct tg3 *tp)
7735 {
7736 	pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
7737 }
7738 
7739 /* Restore PCI state after chip reset */
7740 static void tg3_restore_pci_state(struct tg3 *tp)
7741 {
7742 	u32 val;
7743 
7744 	/* Re-enable indirect register accesses. */
7745 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
7746 			       tp->misc_host_ctrl);
7747 
7748 	/* Set MAX PCI retry to zero. */
7749 	val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
7750 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
7751 	    tg3_flag(tp, PCIX_MODE))
7752 		val |= PCISTATE_RETRY_SAME_DMA;
7753 	/* Allow reads and writes to the APE register and memory space. */
7754 	if (tg3_flag(tp, ENABLE_APE))
7755 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
7756 		       PCISTATE_ALLOW_APE_SHMEM_WR |
7757 		       PCISTATE_ALLOW_APE_PSPACE_WR;
7758 	pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
7759 
7760 	pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
7761 
7762 	if (!tg3_flag(tp, PCI_EXPRESS)) {
7763 		pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
7764 				      tp->pci_cacheline_sz);
7765 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
7766 				      tp->pci_lat_timer);
7767 	}
7768 
7769 	/* Make sure PCI-X relaxed ordering bit is clear. */
7770 	if (tg3_flag(tp, PCIX_MODE)) {
7771 		u16 pcix_cmd;
7772 
7773 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7774 				     &pcix_cmd);
7775 		pcix_cmd &= ~PCI_X_CMD_ERO;
7776 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7777 				      pcix_cmd);
7778 	}
7779 
7780 	if (tg3_flag(tp, 5780_CLASS)) {
7781 
7782 		/* Chip reset on 5780 will reset MSI enable bit,
7783 		 * so need to restore it.
7784 		 */
7785 		if (tg3_flag(tp, USING_MSI)) {
7786 			u16 ctrl;
7787 
7788 			pci_read_config_word(tp->pdev,
7789 					     tp->msi_cap + PCI_MSI_FLAGS,
7790 					     &ctrl);
7791 			pci_write_config_word(tp->pdev,
7792 					      tp->msi_cap + PCI_MSI_FLAGS,
7793 					      ctrl | PCI_MSI_FLAGS_ENABLE);
7794 			val = tr32(MSGINT_MODE);
7795 			tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
7796 		}
7797 	}
7798 }
7799 
7800 /* tp->lock is held. */
7801 static int tg3_chip_reset(struct tg3 *tp)
7802 {
7803 	u32 val;
7804 	void (*write_op)(struct tg3 *, u32, u32);
7805 	int i, err;
7806 
7807 	tg3_nvram_lock(tp);
7808 
7809 	tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
7810 
7811 	/* No matching tg3_nvram_unlock() after this because
7812 	 * chip reset below will undo the nvram lock.
7813 	 */
7814 	tp->nvram_lock_cnt = 0;
7815 
7816 	/* GRC_MISC_CFG core clock reset will clear the memory
7817 	 * enable bit in PCI register 4 and the MSI enable bit
7818 	 * on some chips, so we save relevant registers here.
7819 	 */
7820 	tg3_save_pci_state(tp);
7821 
7822 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
7823 	    tg3_flag(tp, 5755_PLUS))
7824 		tw32(GRC_FASTBOOT_PC, 0);
7825 
7826 	/*
7827 	 * We must avoid the readl() that normally takes place.
7828 	 * It locks machines, causes machine checks, and other
7829 	 * fun things.  So, temporarily disable the 5701
7830 	 * hardware workaround, while we do the reset.
7831 	 */
7832 	write_op = tp->write32;
7833 	if (write_op == tg3_write_flush_reg32)
7834 		tp->write32 = tg3_write32;
7835 
7836 	/* Prevent the irq handler from reading or writing PCI registers
7837 	 * during chip reset when the memory enable bit in the PCI command
7838 	 * register may be cleared.  The chip does not generate interrupt
7839 	 * at this time, but the irq handler may still be called due to irq
7840 	 * sharing or irqpoll.
7841 	 */
7842 	tg3_flag_set(tp, CHIP_RESETTING);
7843 	for (i = 0; i < tp->irq_cnt; i++) {
7844 		struct tg3_napi *tnapi = &tp->napi[i];
7845 		if (tnapi->hw_status) {
7846 			tnapi->hw_status->status = 0;
7847 			tnapi->hw_status->status_tag = 0;
7848 		}
7849 		tnapi->last_tag = 0;
7850 		tnapi->last_irq_tag = 0;
7851 	}
7852 	smp_mb();
7853 
7854 	for (i = 0; i < tp->irq_cnt; i++)
7855 		synchronize_irq(tp->napi[i].irq_vec);
7856 
7857 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
7858 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
7859 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
7860 	}
7861 
7862 	/* do the reset */
7863 	val = GRC_MISC_CFG_CORECLK_RESET;
7864 
7865 	if (tg3_flag(tp, PCI_EXPRESS)) {
7866 		/* Force PCIe 1.0a mode */
7867 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
7868 		    !tg3_flag(tp, 57765_PLUS) &&
7869 		    tr32(TG3_PCIE_PHY_TSTCTL) ==
7870 		    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
7871 			tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
7872 
7873 		if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
7874 			tw32(GRC_MISC_CFG, (1 << 29));
7875 			val |= (1 << 29);
7876 		}
7877 	}
7878 
7879 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
7880 		tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
7881 		tw32(GRC_VCPU_EXT_CTRL,
7882 		     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
7883 	}
7884 
7885 	/* Manage gphy power for all CPMU absent PCIe devices. */
7886 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
7887 		val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
7888 
7889 	tw32(GRC_MISC_CFG, val);
7890 
7891 	/* restore 5701 hardware bug workaround write method */
7892 	tp->write32 = write_op;
7893 
7894 	/* Unfortunately, we have to delay before the PCI read back.
7895 	 * Some 575X chips even will not respond to a PCI cfg access
7896 	 * when the reset command is given to the chip.
7897 	 *
7898 	 * How do these hardware designers expect things to work
7899 	 * properly if the PCI write is posted for a long period
7900 	 * of time?  It is always necessary to have some method by
7901 	 * which a register read back can occur to push the write
7902 	 * out which does the reset.
7903 	 *
7904 	 * For most tg3 variants the trick below was working.
7905 	 * Ho hum...
7906 	 */
7907 	udelay(120);
7908 
7909 	/* Flush PCI posted writes.  The normal MMIO registers
7910 	 * are inaccessible at this time so this is the only
7911 	 * way to make this reliably (actually, this is no longer
7912 	 * the case, see above).  I tried to use indirect
7913 	 * register read/write but this upset some 5701 variants.
7914 	 */
7915 	pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
7916 
7917 	udelay(120);
7918 
7919 	if (tg3_flag(tp, PCI_EXPRESS) && pci_pcie_cap(tp->pdev)) {
7920 		u16 val16;
7921 
7922 		if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
7923 			int i;
7924 			u32 cfg_val;
7925 
7926 			/* Wait for link training to complete.  */
7927 			for (i = 0; i < 5000; i++)
7928 				udelay(100);
7929 
7930 			pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
7931 			pci_write_config_dword(tp->pdev, 0xc4,
7932 					       cfg_val | (1 << 15));
7933 		}
7934 
7935 		/* Clear the "no snoop" and "relaxed ordering" bits. */
7936 		pci_read_config_word(tp->pdev,
7937 				     pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL,
7938 				     &val16);
7939 		val16 &= ~(PCI_EXP_DEVCTL_RELAX_EN |
7940 			   PCI_EXP_DEVCTL_NOSNOOP_EN);
7941 		/*
7942 		 * Older PCIe devices only support the 128 byte
7943 		 * MPS setting.  Enforce the restriction.
7944 		 */
7945 		if (!tg3_flag(tp, CPMU_PRESENT))
7946 			val16 &= ~PCI_EXP_DEVCTL_PAYLOAD;
7947 		pci_write_config_word(tp->pdev,
7948 				      pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL,
7949 				      val16);
7950 
7951 		/* Clear error status */
7952 		pci_write_config_word(tp->pdev,
7953 				      pci_pcie_cap(tp->pdev) + PCI_EXP_DEVSTA,
7954 				      PCI_EXP_DEVSTA_CED |
7955 				      PCI_EXP_DEVSTA_NFED |
7956 				      PCI_EXP_DEVSTA_FED |
7957 				      PCI_EXP_DEVSTA_URD);
7958 	}
7959 
7960 	tg3_restore_pci_state(tp);
7961 
7962 	tg3_flag_clear(tp, CHIP_RESETTING);
7963 	tg3_flag_clear(tp, ERROR_PROCESSED);
7964 
7965 	val = 0;
7966 	if (tg3_flag(tp, 5780_CLASS))
7967 		val = tr32(MEMARB_MODE);
7968 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
7969 
7970 	if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
7971 		tg3_stop_fw(tp);
7972 		tw32(0x5000, 0x400);
7973 	}
7974 
7975 	tw32(GRC_MODE, tp->grc_mode);
7976 
7977 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
7978 		val = tr32(0xc4);
7979 
7980 		tw32(0xc4, val | (1 << 15));
7981 	}
7982 
7983 	if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
7984 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
7985 		tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
7986 		if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
7987 			tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
7988 		tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
7989 	}
7990 
7991 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
7992 		tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
7993 		val = tp->mac_mode;
7994 	} else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
7995 		tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
7996 		val = tp->mac_mode;
7997 	} else
7998 		val = 0;
7999 
8000 	tw32_f(MAC_MODE, val);
8001 	udelay(40);
8002 
8003 	tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
8004 
8005 	err = tg3_poll_fw(tp);
8006 	if (err)
8007 		return err;
8008 
8009 	tg3_mdio_start(tp);
8010 
8011 	if (tg3_flag(tp, PCI_EXPRESS) &&
8012 	    tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
8013 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8014 	    !tg3_flag(tp, 57765_PLUS)) {
8015 		val = tr32(0x7c00);
8016 
8017 		tw32(0x7c00, val | (1 << 25));
8018 	}
8019 
8020 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8021 		val = tr32(TG3_CPMU_CLCK_ORIDE);
8022 		tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
8023 	}
8024 
8025 	/* Reprobe ASF enable state.  */
8026 	tg3_flag_clear(tp, ENABLE_ASF);
8027 	tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
8028 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
8029 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
8030 		u32 nic_cfg;
8031 
8032 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
8033 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
8034 			tg3_flag_set(tp, ENABLE_ASF);
8035 			tp->last_event_jiffies = jiffies;
8036 			if (tg3_flag(tp, 5750_PLUS))
8037 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
8038 		}
8039 	}
8040 
8041 	return 0;
8042 }
8043 
8044 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
8045 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
8046 
8047 /* tp->lock is held. */
8048 static int tg3_halt(struct tg3 *tp, int kind, int silent)
8049 {
8050 	int err;
8051 
8052 	tg3_stop_fw(tp);
8053 
8054 	tg3_write_sig_pre_reset(tp, kind);
8055 
8056 	tg3_abort_hw(tp, silent);
8057 	err = tg3_chip_reset(tp);
8058 
8059 	__tg3_set_mac_addr(tp, 0);
8060 
8061 	tg3_write_sig_legacy(tp, kind);
8062 	tg3_write_sig_post_reset(tp, kind);
8063 
8064 	if (tp->hw_stats) {
8065 		/* Save the stats across chip resets... */
8066 		tg3_get_nstats(tp, &tp->net_stats_prev);
8067 		tg3_get_estats(tp, &tp->estats_prev);
8068 
8069 		/* And make sure the next sample is new data */
8070 		memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
8071 	}
8072 
8073 	if (err)
8074 		return err;
8075 
8076 	return 0;
8077 }
8078 
8079 static int tg3_set_mac_addr(struct net_device *dev, void *p)
8080 {
8081 	struct tg3 *tp = netdev_priv(dev);
8082 	struct sockaddr *addr = p;
8083 	int err = 0, skip_mac_1 = 0;
8084 
8085 	if (!is_valid_ether_addr(addr->sa_data))
8086 		return -EADDRNOTAVAIL;
8087 
8088 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
8089 
8090 	if (!netif_running(dev))
8091 		return 0;
8092 
8093 	if (tg3_flag(tp, ENABLE_ASF)) {
8094 		u32 addr0_high, addr0_low, addr1_high, addr1_low;
8095 
8096 		addr0_high = tr32(MAC_ADDR_0_HIGH);
8097 		addr0_low = tr32(MAC_ADDR_0_LOW);
8098 		addr1_high = tr32(MAC_ADDR_1_HIGH);
8099 		addr1_low = tr32(MAC_ADDR_1_LOW);
8100 
8101 		/* Skip MAC addr 1 if ASF is using it. */
8102 		if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
8103 		    !(addr1_high == 0 && addr1_low == 0))
8104 			skip_mac_1 = 1;
8105 	}
8106 	spin_lock_bh(&tp->lock);
8107 	__tg3_set_mac_addr(tp, skip_mac_1);
8108 	spin_unlock_bh(&tp->lock);
8109 
8110 	return err;
8111 }
8112 
8113 /* tp->lock is held. */
8114 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
8115 			   dma_addr_t mapping, u32 maxlen_flags,
8116 			   u32 nic_addr)
8117 {
8118 	tg3_write_mem(tp,
8119 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
8120 		      ((u64) mapping >> 32));
8121 	tg3_write_mem(tp,
8122 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
8123 		      ((u64) mapping & 0xffffffff));
8124 	tg3_write_mem(tp,
8125 		      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
8126 		       maxlen_flags);
8127 
8128 	if (!tg3_flag(tp, 5705_PLUS))
8129 		tg3_write_mem(tp,
8130 			      (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
8131 			      nic_addr);
8132 }
8133 
8134 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
8135 {
8136 	int i;
8137 
8138 	if (!tg3_flag(tp, ENABLE_TSS)) {
8139 		tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
8140 		tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
8141 		tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
8142 	} else {
8143 		tw32(HOSTCC_TXCOL_TICKS, 0);
8144 		tw32(HOSTCC_TXMAX_FRAMES, 0);
8145 		tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
8146 	}
8147 
8148 	if (!tg3_flag(tp, ENABLE_RSS)) {
8149 		tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
8150 		tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
8151 		tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
8152 	} else {
8153 		tw32(HOSTCC_RXCOL_TICKS, 0);
8154 		tw32(HOSTCC_RXMAX_FRAMES, 0);
8155 		tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
8156 	}
8157 
8158 	if (!tg3_flag(tp, 5705_PLUS)) {
8159 		u32 val = ec->stats_block_coalesce_usecs;
8160 
8161 		tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
8162 		tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
8163 
8164 		if (!netif_carrier_ok(tp->dev))
8165 			val = 0;
8166 
8167 		tw32(HOSTCC_STAT_COAL_TICKS, val);
8168 	}
8169 
8170 	for (i = 0; i < tp->irq_cnt - 1; i++) {
8171 		u32 reg;
8172 
8173 		reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
8174 		tw32(reg, ec->rx_coalesce_usecs);
8175 		reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
8176 		tw32(reg, ec->rx_max_coalesced_frames);
8177 		reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
8178 		tw32(reg, ec->rx_max_coalesced_frames_irq);
8179 
8180 		if (tg3_flag(tp, ENABLE_TSS)) {
8181 			reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
8182 			tw32(reg, ec->tx_coalesce_usecs);
8183 			reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
8184 			tw32(reg, ec->tx_max_coalesced_frames);
8185 			reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
8186 			tw32(reg, ec->tx_max_coalesced_frames_irq);
8187 		}
8188 	}
8189 
8190 	for (; i < tp->irq_max - 1; i++) {
8191 		tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
8192 		tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
8193 		tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8194 
8195 		if (tg3_flag(tp, ENABLE_TSS)) {
8196 			tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
8197 			tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
8198 			tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8199 		}
8200 	}
8201 }
8202 
8203 /* tp->lock is held. */
8204 static void tg3_rings_reset(struct tg3 *tp)
8205 {
8206 	int i;
8207 	u32 stblk, txrcb, rxrcb, limit;
8208 	struct tg3_napi *tnapi = &tp->napi[0];
8209 
8210 	/* Disable all transmit rings but the first. */
8211 	if (!tg3_flag(tp, 5705_PLUS))
8212 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
8213 	else if (tg3_flag(tp, 5717_PLUS))
8214 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
8215 	else if (tg3_flag(tp, 57765_CLASS))
8216 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
8217 	else
8218 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8219 
8220 	for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8221 	     txrcb < limit; txrcb += TG3_BDINFO_SIZE)
8222 		tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
8223 			      BDINFO_FLAGS_DISABLED);
8224 
8225 
8226 	/* Disable all receive return rings but the first. */
8227 	if (tg3_flag(tp, 5717_PLUS))
8228 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
8229 	else if (!tg3_flag(tp, 5705_PLUS))
8230 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
8231 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8232 		 tg3_flag(tp, 57765_CLASS))
8233 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
8234 	else
8235 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8236 
8237 	for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8238 	     rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
8239 		tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
8240 			      BDINFO_FLAGS_DISABLED);
8241 
8242 	/* Disable interrupts */
8243 	tw32_mailbox_f(tp->napi[0].int_mbox, 1);
8244 	tp->napi[0].chk_msi_cnt = 0;
8245 	tp->napi[0].last_rx_cons = 0;
8246 	tp->napi[0].last_tx_cons = 0;
8247 
8248 	/* Zero mailbox registers. */
8249 	if (tg3_flag(tp, SUPPORT_MSIX)) {
8250 		for (i = 1; i < tp->irq_max; i++) {
8251 			tp->napi[i].tx_prod = 0;
8252 			tp->napi[i].tx_cons = 0;
8253 			if (tg3_flag(tp, ENABLE_TSS))
8254 				tw32_mailbox(tp->napi[i].prodmbox, 0);
8255 			tw32_rx_mbox(tp->napi[i].consmbox, 0);
8256 			tw32_mailbox_f(tp->napi[i].int_mbox, 1);
8257 			tp->napi[i].chk_msi_cnt = 0;
8258 			tp->napi[i].last_rx_cons = 0;
8259 			tp->napi[i].last_tx_cons = 0;
8260 		}
8261 		if (!tg3_flag(tp, ENABLE_TSS))
8262 			tw32_mailbox(tp->napi[0].prodmbox, 0);
8263 	} else {
8264 		tp->napi[0].tx_prod = 0;
8265 		tp->napi[0].tx_cons = 0;
8266 		tw32_mailbox(tp->napi[0].prodmbox, 0);
8267 		tw32_rx_mbox(tp->napi[0].consmbox, 0);
8268 	}
8269 
8270 	/* Make sure the NIC-based send BD rings are disabled. */
8271 	if (!tg3_flag(tp, 5705_PLUS)) {
8272 		u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
8273 		for (i = 0; i < 16; i++)
8274 			tw32_tx_mbox(mbox + i * 8, 0);
8275 	}
8276 
8277 	txrcb = NIC_SRAM_SEND_RCB;
8278 	rxrcb = NIC_SRAM_RCV_RET_RCB;
8279 
8280 	/* Clear status block in ram. */
8281 	memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8282 
8283 	/* Set status block DMA address */
8284 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
8285 	     ((u64) tnapi->status_mapping >> 32));
8286 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8287 	     ((u64) tnapi->status_mapping & 0xffffffff));
8288 
8289 	if (tnapi->tx_ring) {
8290 		tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8291 			       (TG3_TX_RING_SIZE <<
8292 				BDINFO_FLAGS_MAXLEN_SHIFT),
8293 			       NIC_SRAM_TX_BUFFER_DESC);
8294 		txrcb += TG3_BDINFO_SIZE;
8295 	}
8296 
8297 	if (tnapi->rx_rcb) {
8298 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8299 			       (tp->rx_ret_ring_mask + 1) <<
8300 				BDINFO_FLAGS_MAXLEN_SHIFT, 0);
8301 		rxrcb += TG3_BDINFO_SIZE;
8302 	}
8303 
8304 	stblk = HOSTCC_STATBLCK_RING1;
8305 
8306 	for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
8307 		u64 mapping = (u64)tnapi->status_mapping;
8308 		tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
8309 		tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
8310 
8311 		/* Clear status block in ram. */
8312 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8313 
8314 		if (tnapi->tx_ring) {
8315 			tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8316 				       (TG3_TX_RING_SIZE <<
8317 					BDINFO_FLAGS_MAXLEN_SHIFT),
8318 				       NIC_SRAM_TX_BUFFER_DESC);
8319 			txrcb += TG3_BDINFO_SIZE;
8320 		}
8321 
8322 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8323 			       ((tp->rx_ret_ring_mask + 1) <<
8324 				BDINFO_FLAGS_MAXLEN_SHIFT), 0);
8325 
8326 		stblk += 8;
8327 		rxrcb += TG3_BDINFO_SIZE;
8328 	}
8329 }
8330 
8331 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
8332 {
8333 	u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
8334 
8335 	if (!tg3_flag(tp, 5750_PLUS) ||
8336 	    tg3_flag(tp, 5780_CLASS) ||
8337 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
8338 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
8339 	    tg3_flag(tp, 57765_PLUS))
8340 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
8341 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8342 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8343 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
8344 	else
8345 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
8346 
8347 	nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
8348 	host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
8349 
8350 	val = min(nic_rep_thresh, host_rep_thresh);
8351 	tw32(RCVBDI_STD_THRESH, val);
8352 
8353 	if (tg3_flag(tp, 57765_PLUS))
8354 		tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
8355 
8356 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8357 		return;
8358 
8359 	bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
8360 
8361 	host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
8362 
8363 	val = min(bdcache_maxcnt / 2, host_rep_thresh);
8364 	tw32(RCVBDI_JUMBO_THRESH, val);
8365 
8366 	if (tg3_flag(tp, 57765_PLUS))
8367 		tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
8368 }
8369 
8370 static inline u32 calc_crc(unsigned char *buf, int len)
8371 {
8372 	u32 reg;
8373 	u32 tmp;
8374 	int j, k;
8375 
8376 	reg = 0xffffffff;
8377 
8378 	for (j = 0; j < len; j++) {
8379 		reg ^= buf[j];
8380 
8381 		for (k = 0; k < 8; k++) {
8382 			tmp = reg & 0x01;
8383 
8384 			reg >>= 1;
8385 
8386 			if (tmp)
8387 				reg ^= 0xedb88320;
8388 		}
8389 	}
8390 
8391 	return ~reg;
8392 }
8393 
8394 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8395 {
8396 	/* accept or reject all multicast frames */
8397 	tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8398 	tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8399 	tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8400 	tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8401 }
8402 
8403 static void __tg3_set_rx_mode(struct net_device *dev)
8404 {
8405 	struct tg3 *tp = netdev_priv(dev);
8406 	u32 rx_mode;
8407 
8408 	rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8409 				  RX_MODE_KEEP_VLAN_TAG);
8410 
8411 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
8412 	/* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8413 	 * flag clear.
8414 	 */
8415 	if (!tg3_flag(tp, ENABLE_ASF))
8416 		rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8417 #endif
8418 
8419 	if (dev->flags & IFF_PROMISC) {
8420 		/* Promiscuous mode. */
8421 		rx_mode |= RX_MODE_PROMISC;
8422 	} else if (dev->flags & IFF_ALLMULTI) {
8423 		/* Accept all multicast. */
8424 		tg3_set_multi(tp, 1);
8425 	} else if (netdev_mc_empty(dev)) {
8426 		/* Reject all multicast. */
8427 		tg3_set_multi(tp, 0);
8428 	} else {
8429 		/* Accept one or more multicast(s). */
8430 		struct netdev_hw_addr *ha;
8431 		u32 mc_filter[4] = { 0, };
8432 		u32 regidx;
8433 		u32 bit;
8434 		u32 crc;
8435 
8436 		netdev_for_each_mc_addr(ha, dev) {
8437 			crc = calc_crc(ha->addr, ETH_ALEN);
8438 			bit = ~crc & 0x7f;
8439 			regidx = (bit & 0x60) >> 5;
8440 			bit &= 0x1f;
8441 			mc_filter[regidx] |= (1 << bit);
8442 		}
8443 
8444 		tw32(MAC_HASH_REG_0, mc_filter[0]);
8445 		tw32(MAC_HASH_REG_1, mc_filter[1]);
8446 		tw32(MAC_HASH_REG_2, mc_filter[2]);
8447 		tw32(MAC_HASH_REG_3, mc_filter[3]);
8448 	}
8449 
8450 	if (rx_mode != tp->rx_mode) {
8451 		tp->rx_mode = rx_mode;
8452 		tw32_f(MAC_RX_MODE, rx_mode);
8453 		udelay(10);
8454 	}
8455 }
8456 
8457 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp)
8458 {
8459 	int i;
8460 
8461 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
8462 		tp->rss_ind_tbl[i] =
8463 			ethtool_rxfh_indir_default(i, tp->irq_cnt - 1);
8464 }
8465 
8466 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
8467 {
8468 	int i;
8469 
8470 	if (!tg3_flag(tp, SUPPORT_MSIX))
8471 		return;
8472 
8473 	if (tp->irq_cnt <= 2) {
8474 		memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
8475 		return;
8476 	}
8477 
8478 	/* Validate table against current IRQ count */
8479 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
8480 		if (tp->rss_ind_tbl[i] >= tp->irq_cnt - 1)
8481 			break;
8482 	}
8483 
8484 	if (i != TG3_RSS_INDIR_TBL_SIZE)
8485 		tg3_rss_init_dflt_indir_tbl(tp);
8486 }
8487 
8488 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
8489 {
8490 	int i = 0;
8491 	u32 reg = MAC_RSS_INDIR_TBL_0;
8492 
8493 	while (i < TG3_RSS_INDIR_TBL_SIZE) {
8494 		u32 val = tp->rss_ind_tbl[i];
8495 		i++;
8496 		for (; i % 8; i++) {
8497 			val <<= 4;
8498 			val |= tp->rss_ind_tbl[i];
8499 		}
8500 		tw32(reg, val);
8501 		reg += 4;
8502 	}
8503 }
8504 
8505 /* tp->lock is held. */
8506 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
8507 {
8508 	u32 val, rdmac_mode;
8509 	int i, err, limit;
8510 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
8511 
8512 	tg3_disable_ints(tp);
8513 
8514 	tg3_stop_fw(tp);
8515 
8516 	tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
8517 
8518 	if (tg3_flag(tp, INIT_COMPLETE))
8519 		tg3_abort_hw(tp, 1);
8520 
8521 	/* Enable MAC control of LPI */
8522 	if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) {
8523 		tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL,
8524 		       TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
8525 		       TG3_CPMU_EEE_LNKIDL_UART_IDL);
8526 
8527 		tw32_f(TG3_CPMU_EEE_CTRL,
8528 		       TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
8529 
8530 		val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
8531 		      TG3_CPMU_EEEMD_LPI_IN_TX |
8532 		      TG3_CPMU_EEEMD_LPI_IN_RX |
8533 		      TG3_CPMU_EEEMD_EEE_ENABLE;
8534 
8535 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8536 			val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
8537 
8538 		if (tg3_flag(tp, ENABLE_APE))
8539 			val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
8540 
8541 		tw32_f(TG3_CPMU_EEE_MODE, val);
8542 
8543 		tw32_f(TG3_CPMU_EEE_DBTMR1,
8544 		       TG3_CPMU_DBTMR1_PCIEXIT_2047US |
8545 		       TG3_CPMU_DBTMR1_LNKIDLE_2047US);
8546 
8547 		tw32_f(TG3_CPMU_EEE_DBTMR2,
8548 		       TG3_CPMU_DBTMR2_APE_TX_2047US |
8549 		       TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
8550 	}
8551 
8552 	if (reset_phy)
8553 		tg3_phy_reset(tp);
8554 
8555 	err = tg3_chip_reset(tp);
8556 	if (err)
8557 		return err;
8558 
8559 	tg3_write_sig_legacy(tp, RESET_KIND_INIT);
8560 
8561 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
8562 		val = tr32(TG3_CPMU_CTRL);
8563 		val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
8564 		tw32(TG3_CPMU_CTRL, val);
8565 
8566 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8567 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8568 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
8569 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8570 
8571 		val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
8572 		val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
8573 		val |= CPMU_LNK_AWARE_MACCLK_6_25;
8574 		tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
8575 
8576 		val = tr32(TG3_CPMU_HST_ACC);
8577 		val &= ~CPMU_HST_ACC_MACCLK_MASK;
8578 		val |= CPMU_HST_ACC_MACCLK_6_25;
8579 		tw32(TG3_CPMU_HST_ACC, val);
8580 	}
8581 
8582 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
8583 		val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
8584 		val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
8585 		       PCIE_PWR_MGMT_L1_THRESH_4MS;
8586 		tw32(PCIE_PWR_MGMT_THRESH, val);
8587 
8588 		val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
8589 		tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
8590 
8591 		tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
8592 
8593 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8594 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
8595 	}
8596 
8597 	if (tg3_flag(tp, L1PLLPD_EN)) {
8598 		u32 grc_mode = tr32(GRC_MODE);
8599 
8600 		/* Access the lower 1K of PL PCIE block registers. */
8601 		val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8602 		tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8603 
8604 		val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
8605 		tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
8606 		     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
8607 
8608 		tw32(GRC_MODE, grc_mode);
8609 	}
8610 
8611 	if (tg3_flag(tp, 57765_CLASS)) {
8612 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
8613 			u32 grc_mode = tr32(GRC_MODE);
8614 
8615 			/* Access the lower 1K of PL PCIE block registers. */
8616 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8617 			tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8618 
8619 			val = tr32(TG3_PCIE_TLDLPL_PORT +
8620 				   TG3_PCIE_PL_LO_PHYCTL5);
8621 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
8622 			     val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
8623 
8624 			tw32(GRC_MODE, grc_mode);
8625 		}
8626 
8627 		if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) {
8628 			u32 grc_mode = tr32(GRC_MODE);
8629 
8630 			/* Access the lower 1K of DL PCIE block registers. */
8631 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8632 			tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
8633 
8634 			val = tr32(TG3_PCIE_TLDLPL_PORT +
8635 				   TG3_PCIE_DL_LO_FTSMAX);
8636 			val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
8637 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
8638 			     val | TG3_PCIE_DL_LO_FTSMAX_VAL);
8639 
8640 			tw32(GRC_MODE, grc_mode);
8641 		}
8642 
8643 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8644 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8645 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
8646 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8647 	}
8648 
8649 	/* This works around an issue with Athlon chipsets on
8650 	 * B3 tigon3 silicon.  This bit has no effect on any
8651 	 * other revision.  But do not set this on PCI Express
8652 	 * chips and don't even touch the clocks if the CPMU is present.
8653 	 */
8654 	if (!tg3_flag(tp, CPMU_PRESENT)) {
8655 		if (!tg3_flag(tp, PCI_EXPRESS))
8656 			tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
8657 		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8658 	}
8659 
8660 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
8661 	    tg3_flag(tp, PCIX_MODE)) {
8662 		val = tr32(TG3PCI_PCISTATE);
8663 		val |= PCISTATE_RETRY_SAME_DMA;
8664 		tw32(TG3PCI_PCISTATE, val);
8665 	}
8666 
8667 	if (tg3_flag(tp, ENABLE_APE)) {
8668 		/* Allow reads and writes to the
8669 		 * APE register and memory space.
8670 		 */
8671 		val = tr32(TG3PCI_PCISTATE);
8672 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8673 		       PCISTATE_ALLOW_APE_SHMEM_WR |
8674 		       PCISTATE_ALLOW_APE_PSPACE_WR;
8675 		tw32(TG3PCI_PCISTATE, val);
8676 	}
8677 
8678 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
8679 		/* Enable some hw fixes.  */
8680 		val = tr32(TG3PCI_MSI_DATA);
8681 		val |= (1 << 26) | (1 << 28) | (1 << 29);
8682 		tw32(TG3PCI_MSI_DATA, val);
8683 	}
8684 
8685 	/* Descriptor ring init may make accesses to the
8686 	 * NIC SRAM area to setup the TX descriptors, so we
8687 	 * can only do this after the hardware has been
8688 	 * successfully reset.
8689 	 */
8690 	err = tg3_init_rings(tp);
8691 	if (err)
8692 		return err;
8693 
8694 	if (tg3_flag(tp, 57765_PLUS)) {
8695 		val = tr32(TG3PCI_DMA_RW_CTRL) &
8696 		      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
8697 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0)
8698 			val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
8699 		if (!tg3_flag(tp, 57765_CLASS) &&
8700 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8701 			val |= DMA_RWCTRL_TAGGED_STAT_WA;
8702 		tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
8703 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
8704 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
8705 		/* This value is determined during the probe time DMA
8706 		 * engine test, tg3_test_dma.
8707 		 */
8708 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
8709 	}
8710 
8711 	tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
8712 			  GRC_MODE_4X_NIC_SEND_RINGS |
8713 			  GRC_MODE_NO_TX_PHDR_CSUM |
8714 			  GRC_MODE_NO_RX_PHDR_CSUM);
8715 	tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
8716 
8717 	/* Pseudo-header checksum is done by hardware logic and not
8718 	 * the offload processers, so make the chip do the pseudo-
8719 	 * header checksums on receive.  For transmit it is more
8720 	 * convenient to do the pseudo-header checksum in software
8721 	 * as Linux does that on transmit for us in all cases.
8722 	 */
8723 	tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
8724 
8725 	tw32(GRC_MODE,
8726 	     tp->grc_mode |
8727 	     (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
8728 
8729 	/* Setup the timer prescalar register.  Clock is always 66Mhz. */
8730 	val = tr32(GRC_MISC_CFG);
8731 	val &= ~0xff;
8732 	val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
8733 	tw32(GRC_MISC_CFG, val);
8734 
8735 	/* Initialize MBUF/DESC pool. */
8736 	if (tg3_flag(tp, 5750_PLUS)) {
8737 		/* Do nothing.  */
8738 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
8739 		tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
8740 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
8741 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
8742 		else
8743 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
8744 		tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
8745 		tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
8746 	} else if (tg3_flag(tp, TSO_CAPABLE)) {
8747 		int fw_len;
8748 
8749 		fw_len = tp->fw_len;
8750 		fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
8751 		tw32(BUFMGR_MB_POOL_ADDR,
8752 		     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
8753 		tw32(BUFMGR_MB_POOL_SIZE,
8754 		     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
8755 	}
8756 
8757 	if (tp->dev->mtu <= ETH_DATA_LEN) {
8758 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
8759 		     tp->bufmgr_config.mbuf_read_dma_low_water);
8760 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
8761 		     tp->bufmgr_config.mbuf_mac_rx_low_water);
8762 		tw32(BUFMGR_MB_HIGH_WATER,
8763 		     tp->bufmgr_config.mbuf_high_water);
8764 	} else {
8765 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
8766 		     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
8767 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
8768 		     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
8769 		tw32(BUFMGR_MB_HIGH_WATER,
8770 		     tp->bufmgr_config.mbuf_high_water_jumbo);
8771 	}
8772 	tw32(BUFMGR_DMA_LOW_WATER,
8773 	     tp->bufmgr_config.dma_low_water);
8774 	tw32(BUFMGR_DMA_HIGH_WATER,
8775 	     tp->bufmgr_config.dma_high_water);
8776 
8777 	val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
8778 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
8779 		val |= BUFMGR_MODE_NO_TX_UNDERRUN;
8780 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
8781 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
8782 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0)
8783 		val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
8784 	tw32(BUFMGR_MODE, val);
8785 	for (i = 0; i < 2000; i++) {
8786 		if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
8787 			break;
8788 		udelay(10);
8789 	}
8790 	if (i >= 2000) {
8791 		netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
8792 		return -ENODEV;
8793 	}
8794 
8795 	if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
8796 		tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
8797 
8798 	tg3_setup_rxbd_thresholds(tp);
8799 
8800 	/* Initialize TG3_BDINFO's at:
8801 	 *  RCVDBDI_STD_BD:	standard eth size rx ring
8802 	 *  RCVDBDI_JUMBO_BD:	jumbo frame rx ring
8803 	 *  RCVDBDI_MINI_BD:	small frame rx ring (??? does not work)
8804 	 *
8805 	 * like so:
8806 	 *  TG3_BDINFO_HOST_ADDR:	high/low parts of DMA address of ring
8807 	 *  TG3_BDINFO_MAXLEN_FLAGS:	(rx max buffer size << 16) |
8808 	 *                              ring attribute flags
8809 	 *  TG3_BDINFO_NIC_ADDR:	location of descriptors in nic SRAM
8810 	 *
8811 	 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
8812 	 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
8813 	 *
8814 	 * The size of each ring is fixed in the firmware, but the location is
8815 	 * configurable.
8816 	 */
8817 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
8818 	     ((u64) tpr->rx_std_mapping >> 32));
8819 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
8820 	     ((u64) tpr->rx_std_mapping & 0xffffffff));
8821 	if (!tg3_flag(tp, 5717_PLUS))
8822 		tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
8823 		     NIC_SRAM_RX_BUFFER_DESC);
8824 
8825 	/* Disable the mini ring */
8826 	if (!tg3_flag(tp, 5705_PLUS))
8827 		tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
8828 		     BDINFO_FLAGS_DISABLED);
8829 
8830 	/* Program the jumbo buffer descriptor ring control
8831 	 * blocks on those devices that have them.
8832 	 */
8833 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
8834 	    (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
8835 
8836 		if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
8837 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
8838 			     ((u64) tpr->rx_jmb_mapping >> 32));
8839 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
8840 			     ((u64) tpr->rx_jmb_mapping & 0xffffffff));
8841 			val = TG3_RX_JMB_RING_SIZE(tp) <<
8842 			      BDINFO_FLAGS_MAXLEN_SHIFT;
8843 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
8844 			     val | BDINFO_FLAGS_USE_EXT_RECV);
8845 			if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
8846 			    tg3_flag(tp, 57765_CLASS))
8847 				tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
8848 				     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
8849 		} else {
8850 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
8851 			     BDINFO_FLAGS_DISABLED);
8852 		}
8853 
8854 		if (tg3_flag(tp, 57765_PLUS)) {
8855 			val = TG3_RX_STD_RING_SIZE(tp);
8856 			val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
8857 			val |= (TG3_RX_STD_DMA_SZ << 2);
8858 		} else
8859 			val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
8860 	} else
8861 		val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
8862 
8863 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
8864 
8865 	tpr->rx_std_prod_idx = tp->rx_pending;
8866 	tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
8867 
8868 	tpr->rx_jmb_prod_idx =
8869 		tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
8870 	tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
8871 
8872 	tg3_rings_reset(tp);
8873 
8874 	/* Initialize MAC address and backoff seed. */
8875 	__tg3_set_mac_addr(tp, 0);
8876 
8877 	/* MTU + ethernet header + FCS + optional VLAN tag */
8878 	tw32(MAC_RX_MTU_SIZE,
8879 	     tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
8880 
8881 	/* The slot time is changed by tg3_setup_phy if we
8882 	 * run at gigabit with half duplex.
8883 	 */
8884 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
8885 	      (6 << TX_LENGTHS_IPG_SHIFT) |
8886 	      (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
8887 
8888 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
8889 		val |= tr32(MAC_TX_LENGTHS) &
8890 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
8891 			TX_LENGTHS_CNT_DWN_VAL_MSK);
8892 
8893 	tw32(MAC_TX_LENGTHS, val);
8894 
8895 	/* Receive rules. */
8896 	tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
8897 	tw32(RCVLPC_CONFIG, 0x0181);
8898 
8899 	/* Calculate RDMAC_MODE setting early, we need it to determine
8900 	 * the RCVLPC_STATE_ENABLE mask.
8901 	 */
8902 	rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
8903 		      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
8904 		      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
8905 		      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
8906 		      RDMAC_MODE_LNGREAD_ENAB);
8907 
8908 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717)
8909 		rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
8910 
8911 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
8912 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
8913 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
8914 		rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
8915 			      RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
8916 			      RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
8917 
8918 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
8919 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
8920 		if (tg3_flag(tp, TSO_CAPABLE) &&
8921 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
8922 			rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
8923 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
8924 			   !tg3_flag(tp, IS_5788)) {
8925 			rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
8926 		}
8927 	}
8928 
8929 	if (tg3_flag(tp, PCI_EXPRESS))
8930 		rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
8931 
8932 	if (tg3_flag(tp, HW_TSO_1) ||
8933 	    tg3_flag(tp, HW_TSO_2) ||
8934 	    tg3_flag(tp, HW_TSO_3))
8935 		rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
8936 
8937 	if (tg3_flag(tp, 57765_PLUS) ||
8938 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
8939 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
8940 		rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
8941 
8942 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
8943 		rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
8944 
8945 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
8946 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
8947 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
8948 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
8949 	    tg3_flag(tp, 57765_PLUS)) {
8950 		val = tr32(TG3_RDMA_RSRVCTRL_REG);
8951 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
8952 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8953 			val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
8954 				 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
8955 				 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
8956 			val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
8957 			       TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
8958 			       TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
8959 		}
8960 		tw32(TG3_RDMA_RSRVCTRL_REG,
8961 		     val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
8962 	}
8963 
8964 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
8965 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8966 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
8967 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val |
8968 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
8969 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
8970 	}
8971 
8972 	/* Receive/send statistics. */
8973 	if (tg3_flag(tp, 5750_PLUS)) {
8974 		val = tr32(RCVLPC_STATS_ENABLE);
8975 		val &= ~RCVLPC_STATSENAB_DACK_FIX;
8976 		tw32(RCVLPC_STATS_ENABLE, val);
8977 	} else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
8978 		   tg3_flag(tp, TSO_CAPABLE)) {
8979 		val = tr32(RCVLPC_STATS_ENABLE);
8980 		val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
8981 		tw32(RCVLPC_STATS_ENABLE, val);
8982 	} else {
8983 		tw32(RCVLPC_STATS_ENABLE, 0xffffff);
8984 	}
8985 	tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
8986 	tw32(SNDDATAI_STATSENAB, 0xffffff);
8987 	tw32(SNDDATAI_STATSCTRL,
8988 	     (SNDDATAI_SCTRL_ENABLE |
8989 	      SNDDATAI_SCTRL_FASTUPD));
8990 
8991 	/* Setup host coalescing engine. */
8992 	tw32(HOSTCC_MODE, 0);
8993 	for (i = 0; i < 2000; i++) {
8994 		if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
8995 			break;
8996 		udelay(10);
8997 	}
8998 
8999 	__tg3_set_coalesce(tp, &tp->coal);
9000 
9001 	if (!tg3_flag(tp, 5705_PLUS)) {
9002 		/* Status/statistics block address.  See tg3_timer,
9003 		 * the tg3_periodic_fetch_stats call there, and
9004 		 * tg3_get_stats to see how this works for 5705/5750 chips.
9005 		 */
9006 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9007 		     ((u64) tp->stats_mapping >> 32));
9008 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9009 		     ((u64) tp->stats_mapping & 0xffffffff));
9010 		tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
9011 
9012 		tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
9013 
9014 		/* Clear statistics and status block memory areas */
9015 		for (i = NIC_SRAM_STATS_BLK;
9016 		     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
9017 		     i += sizeof(u32)) {
9018 			tg3_write_mem(tp, i, 0);
9019 			udelay(40);
9020 		}
9021 	}
9022 
9023 	tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
9024 
9025 	tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
9026 	tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
9027 	if (!tg3_flag(tp, 5705_PLUS))
9028 		tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
9029 
9030 	if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9031 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
9032 		/* reset to prevent losing 1st rx packet intermittently */
9033 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9034 		udelay(10);
9035 	}
9036 
9037 	tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
9038 			MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
9039 			MAC_MODE_FHDE_ENABLE;
9040 	if (tg3_flag(tp, ENABLE_APE))
9041 		tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
9042 	if (!tg3_flag(tp, 5705_PLUS) &&
9043 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9044 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
9045 		tp->mac_mode |= MAC_MODE_LINK_POLARITY;
9046 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
9047 	udelay(40);
9048 
9049 	/* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
9050 	 * If TG3_FLAG_IS_NIC is zero, we should read the
9051 	 * register to preserve the GPIO settings for LOMs. The GPIOs,
9052 	 * whether used as inputs or outputs, are set by boot code after
9053 	 * reset.
9054 	 */
9055 	if (!tg3_flag(tp, IS_NIC)) {
9056 		u32 gpio_mask;
9057 
9058 		gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
9059 			    GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
9060 			    GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
9061 
9062 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
9063 			gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
9064 				     GRC_LCLCTRL_GPIO_OUTPUT3;
9065 
9066 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
9067 			gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
9068 
9069 		tp->grc_local_ctrl &= ~gpio_mask;
9070 		tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
9071 
9072 		/* GPIO1 must be driven high for eeprom write protect */
9073 		if (tg3_flag(tp, EEPROM_WRITE_PROT))
9074 			tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
9075 					       GRC_LCLCTRL_GPIO_OUTPUT1);
9076 	}
9077 	tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9078 	udelay(100);
9079 
9080 	if (tg3_flag(tp, USING_MSIX)) {
9081 		val = tr32(MSGINT_MODE);
9082 		val |= MSGINT_MODE_ENABLE;
9083 		if (tp->irq_cnt > 1)
9084 			val |= MSGINT_MODE_MULTIVEC_EN;
9085 		if (!tg3_flag(tp, 1SHOT_MSI))
9086 			val |= MSGINT_MODE_ONE_SHOT_DISABLE;
9087 		tw32(MSGINT_MODE, val);
9088 	}
9089 
9090 	if (!tg3_flag(tp, 5705_PLUS)) {
9091 		tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
9092 		udelay(40);
9093 	}
9094 
9095 	val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
9096 	       WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
9097 	       WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
9098 	       WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
9099 	       WDMAC_MODE_LNGREAD_ENAB);
9100 
9101 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9102 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9103 		if (tg3_flag(tp, TSO_CAPABLE) &&
9104 		    (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
9105 		     tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
9106 			/* nothing */
9107 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9108 			   !tg3_flag(tp, IS_5788)) {
9109 			val |= WDMAC_MODE_RX_ACCEL;
9110 		}
9111 	}
9112 
9113 	/* Enable host coalescing bug fix */
9114 	if (tg3_flag(tp, 5755_PLUS))
9115 		val |= WDMAC_MODE_STATUS_TAG_FIX;
9116 
9117 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
9118 		val |= WDMAC_MODE_BURST_ALL_DATA;
9119 
9120 	tw32_f(WDMAC_MODE, val);
9121 	udelay(40);
9122 
9123 	if (tg3_flag(tp, PCIX_MODE)) {
9124 		u16 pcix_cmd;
9125 
9126 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9127 				     &pcix_cmd);
9128 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
9129 			pcix_cmd &= ~PCI_X_CMD_MAX_READ;
9130 			pcix_cmd |= PCI_X_CMD_READ_2K;
9131 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
9132 			pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
9133 			pcix_cmd |= PCI_X_CMD_READ_2K;
9134 		}
9135 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9136 				      pcix_cmd);
9137 	}
9138 
9139 	tw32_f(RDMAC_MODE, rdmac_mode);
9140 	udelay(40);
9141 
9142 	tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
9143 	if (!tg3_flag(tp, 5705_PLUS))
9144 		tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
9145 
9146 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
9147 		tw32(SNDDATAC_MODE,
9148 		     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
9149 	else
9150 		tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
9151 
9152 	tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
9153 	tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
9154 	val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
9155 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
9156 		val |= RCVDBDI_MODE_LRG_RING_SZ;
9157 	tw32(RCVDBDI_MODE, val);
9158 	tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
9159 	if (tg3_flag(tp, HW_TSO_1) ||
9160 	    tg3_flag(tp, HW_TSO_2) ||
9161 	    tg3_flag(tp, HW_TSO_3))
9162 		tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
9163 	val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
9164 	if (tg3_flag(tp, ENABLE_TSS))
9165 		val |= SNDBDI_MODE_MULTI_TXQ_EN;
9166 	tw32(SNDBDI_MODE, val);
9167 	tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
9168 
9169 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9170 		err = tg3_load_5701_a0_firmware_fix(tp);
9171 		if (err)
9172 			return err;
9173 	}
9174 
9175 	if (tg3_flag(tp, TSO_CAPABLE)) {
9176 		err = tg3_load_tso_firmware(tp);
9177 		if (err)
9178 			return err;
9179 	}
9180 
9181 	tp->tx_mode = TX_MODE_ENABLE;
9182 
9183 	if (tg3_flag(tp, 5755_PLUS) ||
9184 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9185 		tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
9186 
9187 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9188 		val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
9189 		tp->tx_mode &= ~val;
9190 		tp->tx_mode |= tr32(MAC_TX_MODE) & val;
9191 	}
9192 
9193 	tw32_f(MAC_TX_MODE, tp->tx_mode);
9194 	udelay(100);
9195 
9196 	if (tg3_flag(tp, ENABLE_RSS)) {
9197 		tg3_rss_write_indir_tbl(tp);
9198 
9199 		/* Setup the "secret" hash key. */
9200 		tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
9201 		tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
9202 		tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
9203 		tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
9204 		tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
9205 		tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
9206 		tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
9207 		tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
9208 		tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
9209 		tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
9210 	}
9211 
9212 	tp->rx_mode = RX_MODE_ENABLE;
9213 	if (tg3_flag(tp, 5755_PLUS))
9214 		tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
9215 
9216 	if (tg3_flag(tp, ENABLE_RSS))
9217 		tp->rx_mode |= RX_MODE_RSS_ENABLE |
9218 			       RX_MODE_RSS_ITBL_HASH_BITS_7 |
9219 			       RX_MODE_RSS_IPV6_HASH_EN |
9220 			       RX_MODE_RSS_TCP_IPV6_HASH_EN |
9221 			       RX_MODE_RSS_IPV4_HASH_EN |
9222 			       RX_MODE_RSS_TCP_IPV4_HASH_EN;
9223 
9224 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9225 	udelay(10);
9226 
9227 	tw32(MAC_LED_CTRL, tp->led_ctrl);
9228 
9229 	tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
9230 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9231 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9232 		udelay(10);
9233 	}
9234 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9235 	udelay(10);
9236 
9237 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9238 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
9239 			!(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
9240 			/* Set drive transmission level to 1.2V  */
9241 			/* only if the signal pre-emphasis bit is not set  */
9242 			val = tr32(MAC_SERDES_CFG);
9243 			val &= 0xfffff000;
9244 			val |= 0x880;
9245 			tw32(MAC_SERDES_CFG, val);
9246 		}
9247 		if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
9248 			tw32(MAC_SERDES_CFG, 0x616000);
9249 	}
9250 
9251 	/* Prevent chip from dropping frames when flow control
9252 	 * is enabled.
9253 	 */
9254 	if (tg3_flag(tp, 57765_CLASS))
9255 		val = 1;
9256 	else
9257 		val = 2;
9258 	tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
9259 
9260 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
9261 	    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
9262 		/* Use hardware link auto-negotiation */
9263 		tg3_flag_set(tp, HW_AUTONEG);
9264 	}
9265 
9266 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9267 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
9268 		u32 tmp;
9269 
9270 		tmp = tr32(SERDES_RX_CTRL);
9271 		tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
9272 		tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
9273 		tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
9274 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9275 	}
9276 
9277 	if (!tg3_flag(tp, USE_PHYLIB)) {
9278 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
9279 			tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
9280 
9281 		err = tg3_setup_phy(tp, 0);
9282 		if (err)
9283 			return err;
9284 
9285 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9286 		    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
9287 			u32 tmp;
9288 
9289 			/* Clear CRC stats. */
9290 			if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
9291 				tg3_writephy(tp, MII_TG3_TEST1,
9292 					     tmp | MII_TG3_TEST1_CRC_EN);
9293 				tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
9294 			}
9295 		}
9296 	}
9297 
9298 	__tg3_set_rx_mode(tp->dev);
9299 
9300 	/* Initialize receive rules. */
9301 	tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
9302 	tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
9303 	tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
9304 	tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
9305 
9306 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
9307 		limit = 8;
9308 	else
9309 		limit = 16;
9310 	if (tg3_flag(tp, ENABLE_ASF))
9311 		limit -= 4;
9312 	switch (limit) {
9313 	case 16:
9314 		tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
9315 	case 15:
9316 		tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
9317 	case 14:
9318 		tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
9319 	case 13:
9320 		tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
9321 	case 12:
9322 		tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
9323 	case 11:
9324 		tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
9325 	case 10:
9326 		tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
9327 	case 9:
9328 		tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
9329 	case 8:
9330 		tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
9331 	case 7:
9332 		tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
9333 	case 6:
9334 		tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
9335 	case 5:
9336 		tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
9337 	case 4:
9338 		/* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
9339 	case 3:
9340 		/* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
9341 	case 2:
9342 	case 1:
9343 
9344 	default:
9345 		break;
9346 	}
9347 
9348 	if (tg3_flag(tp, ENABLE_APE))
9349 		/* Write our heartbeat update interval to APE. */
9350 		tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
9351 				APE_HOST_HEARTBEAT_INT_DISABLE);
9352 
9353 	tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
9354 
9355 	return 0;
9356 }
9357 
9358 /* Called at device open time to get the chip ready for
9359  * packet processing.  Invoked with tp->lock held.
9360  */
9361 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
9362 {
9363 	tg3_switch_clocks(tp);
9364 
9365 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
9366 
9367 	return tg3_reset_hw(tp, reset_phy);
9368 }
9369 
9370 #define TG3_STAT_ADD32(PSTAT, REG) \
9371 do {	u32 __val = tr32(REG); \
9372 	(PSTAT)->low += __val; \
9373 	if ((PSTAT)->low < __val) \
9374 		(PSTAT)->high += 1; \
9375 } while (0)
9376 
9377 static void tg3_periodic_fetch_stats(struct tg3 *tp)
9378 {
9379 	struct tg3_hw_stats *sp = tp->hw_stats;
9380 
9381 	if (!netif_carrier_ok(tp->dev))
9382 		return;
9383 
9384 	TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
9385 	TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
9386 	TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
9387 	TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
9388 	TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
9389 	TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
9390 	TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
9391 	TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
9392 	TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
9393 	TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
9394 	TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
9395 	TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
9396 	TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
9397 
9398 	TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
9399 	TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
9400 	TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
9401 	TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
9402 	TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
9403 	TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
9404 	TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
9405 	TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
9406 	TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
9407 	TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
9408 	TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
9409 	TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
9410 	TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
9411 	TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
9412 
9413 	TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
9414 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9415 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 &&
9416 	    tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) {
9417 		TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
9418 	} else {
9419 		u32 val = tr32(HOSTCC_FLOW_ATTN);
9420 		val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
9421 		if (val) {
9422 			tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
9423 			sp->rx_discards.low += val;
9424 			if (sp->rx_discards.low < val)
9425 				sp->rx_discards.high += 1;
9426 		}
9427 		sp->mbuf_lwm_thresh_hit = sp->rx_discards;
9428 	}
9429 	TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
9430 }
9431 
9432 static void tg3_chk_missed_msi(struct tg3 *tp)
9433 {
9434 	u32 i;
9435 
9436 	for (i = 0; i < tp->irq_cnt; i++) {
9437 		struct tg3_napi *tnapi = &tp->napi[i];
9438 
9439 		if (tg3_has_work(tnapi)) {
9440 			if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
9441 			    tnapi->last_tx_cons == tnapi->tx_cons) {
9442 				if (tnapi->chk_msi_cnt < 1) {
9443 					tnapi->chk_msi_cnt++;
9444 					return;
9445 				}
9446 				tg3_msi(0, tnapi);
9447 			}
9448 		}
9449 		tnapi->chk_msi_cnt = 0;
9450 		tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
9451 		tnapi->last_tx_cons = tnapi->tx_cons;
9452 	}
9453 }
9454 
9455 static void tg3_timer(unsigned long __opaque)
9456 {
9457 	struct tg3 *tp = (struct tg3 *) __opaque;
9458 
9459 	if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING))
9460 		goto restart_timer;
9461 
9462 	spin_lock(&tp->lock);
9463 
9464 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
9465 	    tg3_flag(tp, 57765_CLASS))
9466 		tg3_chk_missed_msi(tp);
9467 
9468 	if (!tg3_flag(tp, TAGGED_STATUS)) {
9469 		/* All of this garbage is because when using non-tagged
9470 		 * IRQ status the mailbox/status_block protocol the chip
9471 		 * uses with the cpu is race prone.
9472 		 */
9473 		if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
9474 			tw32(GRC_LOCAL_CTRL,
9475 			     tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
9476 		} else {
9477 			tw32(HOSTCC_MODE, tp->coalesce_mode |
9478 			     HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
9479 		}
9480 
9481 		if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
9482 			spin_unlock(&tp->lock);
9483 			tg3_reset_task_schedule(tp);
9484 			goto restart_timer;
9485 		}
9486 	}
9487 
9488 	/* This part only runs once per second. */
9489 	if (!--tp->timer_counter) {
9490 		if (tg3_flag(tp, 5705_PLUS))
9491 			tg3_periodic_fetch_stats(tp);
9492 
9493 		if (tp->setlpicnt && !--tp->setlpicnt)
9494 			tg3_phy_eee_enable(tp);
9495 
9496 		if (tg3_flag(tp, USE_LINKCHG_REG)) {
9497 			u32 mac_stat;
9498 			int phy_event;
9499 
9500 			mac_stat = tr32(MAC_STATUS);
9501 
9502 			phy_event = 0;
9503 			if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
9504 				if (mac_stat & MAC_STATUS_MI_INTERRUPT)
9505 					phy_event = 1;
9506 			} else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
9507 				phy_event = 1;
9508 
9509 			if (phy_event)
9510 				tg3_setup_phy(tp, 0);
9511 		} else if (tg3_flag(tp, POLL_SERDES)) {
9512 			u32 mac_stat = tr32(MAC_STATUS);
9513 			int need_setup = 0;
9514 
9515 			if (netif_carrier_ok(tp->dev) &&
9516 			    (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
9517 				need_setup = 1;
9518 			}
9519 			if (!netif_carrier_ok(tp->dev) &&
9520 			    (mac_stat & (MAC_STATUS_PCS_SYNCED |
9521 					 MAC_STATUS_SIGNAL_DET))) {
9522 				need_setup = 1;
9523 			}
9524 			if (need_setup) {
9525 				if (!tp->serdes_counter) {
9526 					tw32_f(MAC_MODE,
9527 					     (tp->mac_mode &
9528 					      ~MAC_MODE_PORT_MODE_MASK));
9529 					udelay(40);
9530 					tw32_f(MAC_MODE, tp->mac_mode);
9531 					udelay(40);
9532 				}
9533 				tg3_setup_phy(tp, 0);
9534 			}
9535 		} else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9536 			   tg3_flag(tp, 5780_CLASS)) {
9537 			tg3_serdes_parallel_detect(tp);
9538 		}
9539 
9540 		tp->timer_counter = tp->timer_multiplier;
9541 	}
9542 
9543 	/* Heartbeat is only sent once every 2 seconds.
9544 	 *
9545 	 * The heartbeat is to tell the ASF firmware that the host
9546 	 * driver is still alive.  In the event that the OS crashes,
9547 	 * ASF needs to reset the hardware to free up the FIFO space
9548 	 * that may be filled with rx packets destined for the host.
9549 	 * If the FIFO is full, ASF will no longer function properly.
9550 	 *
9551 	 * Unintended resets have been reported on real time kernels
9552 	 * where the timer doesn't run on time.  Netpoll will also have
9553 	 * same problem.
9554 	 *
9555 	 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
9556 	 * to check the ring condition when the heartbeat is expiring
9557 	 * before doing the reset.  This will prevent most unintended
9558 	 * resets.
9559 	 */
9560 	if (!--tp->asf_counter) {
9561 		if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
9562 			tg3_wait_for_event_ack(tp);
9563 
9564 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
9565 				      FWCMD_NICDRV_ALIVE3);
9566 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
9567 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
9568 				      TG3_FW_UPDATE_TIMEOUT_SEC);
9569 
9570 			tg3_generate_fw_event(tp);
9571 		}
9572 		tp->asf_counter = tp->asf_multiplier;
9573 	}
9574 
9575 	spin_unlock(&tp->lock);
9576 
9577 restart_timer:
9578 	tp->timer.expires = jiffies + tp->timer_offset;
9579 	add_timer(&tp->timer);
9580 }
9581 
9582 static void __devinit tg3_timer_init(struct tg3 *tp)
9583 {
9584 	if (tg3_flag(tp, TAGGED_STATUS) &&
9585 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9586 	    !tg3_flag(tp, 57765_CLASS))
9587 		tp->timer_offset = HZ;
9588 	else
9589 		tp->timer_offset = HZ / 10;
9590 
9591 	BUG_ON(tp->timer_offset > HZ);
9592 
9593 	tp->timer_multiplier = (HZ / tp->timer_offset);
9594 	tp->asf_multiplier = (HZ / tp->timer_offset) *
9595 			     TG3_FW_UPDATE_FREQ_SEC;
9596 
9597 	init_timer(&tp->timer);
9598 	tp->timer.data = (unsigned long) tp;
9599 	tp->timer.function = tg3_timer;
9600 }
9601 
9602 static void tg3_timer_start(struct tg3 *tp)
9603 {
9604 	tp->asf_counter   = tp->asf_multiplier;
9605 	tp->timer_counter = tp->timer_multiplier;
9606 
9607 	tp->timer.expires = jiffies + tp->timer_offset;
9608 	add_timer(&tp->timer);
9609 }
9610 
9611 static void tg3_timer_stop(struct tg3 *tp)
9612 {
9613 	del_timer_sync(&tp->timer);
9614 }
9615 
9616 /* Restart hardware after configuration changes, self-test, etc.
9617  * Invoked with tp->lock held.
9618  */
9619 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
9620 	__releases(tp->lock)
9621 	__acquires(tp->lock)
9622 {
9623 	int err;
9624 
9625 	err = tg3_init_hw(tp, reset_phy);
9626 	if (err) {
9627 		netdev_err(tp->dev,
9628 			   "Failed to re-initialize device, aborting\n");
9629 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9630 		tg3_full_unlock(tp);
9631 		tg3_timer_stop(tp);
9632 		tp->irq_sync = 0;
9633 		tg3_napi_enable(tp);
9634 		dev_close(tp->dev);
9635 		tg3_full_lock(tp, 0);
9636 	}
9637 	return err;
9638 }
9639 
9640 static void tg3_reset_task(struct work_struct *work)
9641 {
9642 	struct tg3 *tp = container_of(work, struct tg3, reset_task);
9643 	int err;
9644 
9645 	tg3_full_lock(tp, 0);
9646 
9647 	if (!netif_running(tp->dev)) {
9648 		tg3_flag_clear(tp, RESET_TASK_PENDING);
9649 		tg3_full_unlock(tp);
9650 		return;
9651 	}
9652 
9653 	tg3_full_unlock(tp);
9654 
9655 	tg3_phy_stop(tp);
9656 
9657 	tg3_netif_stop(tp);
9658 
9659 	tg3_full_lock(tp, 1);
9660 
9661 	if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
9662 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
9663 		tp->write32_rx_mbox = tg3_write_flush_reg32;
9664 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
9665 		tg3_flag_clear(tp, TX_RECOVERY_PENDING);
9666 	}
9667 
9668 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
9669 	err = tg3_init_hw(tp, 1);
9670 	if (err)
9671 		goto out;
9672 
9673 	tg3_netif_start(tp);
9674 
9675 out:
9676 	tg3_full_unlock(tp);
9677 
9678 	if (!err)
9679 		tg3_phy_start(tp);
9680 
9681 	tg3_flag_clear(tp, RESET_TASK_PENDING);
9682 }
9683 
9684 static int tg3_request_irq(struct tg3 *tp, int irq_num)
9685 {
9686 	irq_handler_t fn;
9687 	unsigned long flags;
9688 	char *name;
9689 	struct tg3_napi *tnapi = &tp->napi[irq_num];
9690 
9691 	if (tp->irq_cnt == 1)
9692 		name = tp->dev->name;
9693 	else {
9694 		name = &tnapi->irq_lbl[0];
9695 		snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num);
9696 		name[IFNAMSIZ-1] = 0;
9697 	}
9698 
9699 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
9700 		fn = tg3_msi;
9701 		if (tg3_flag(tp, 1SHOT_MSI))
9702 			fn = tg3_msi_1shot;
9703 		flags = 0;
9704 	} else {
9705 		fn = tg3_interrupt;
9706 		if (tg3_flag(tp, TAGGED_STATUS))
9707 			fn = tg3_interrupt_tagged;
9708 		flags = IRQF_SHARED;
9709 	}
9710 
9711 	return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
9712 }
9713 
9714 static int tg3_test_interrupt(struct tg3 *tp)
9715 {
9716 	struct tg3_napi *tnapi = &tp->napi[0];
9717 	struct net_device *dev = tp->dev;
9718 	int err, i, intr_ok = 0;
9719 	u32 val;
9720 
9721 	if (!netif_running(dev))
9722 		return -ENODEV;
9723 
9724 	tg3_disable_ints(tp);
9725 
9726 	free_irq(tnapi->irq_vec, tnapi);
9727 
9728 	/*
9729 	 * Turn off MSI one shot mode.  Otherwise this test has no
9730 	 * observable way to know whether the interrupt was delivered.
9731 	 */
9732 	if (tg3_flag(tp, 57765_PLUS)) {
9733 		val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
9734 		tw32(MSGINT_MODE, val);
9735 	}
9736 
9737 	err = request_irq(tnapi->irq_vec, tg3_test_isr,
9738 			  IRQF_SHARED, dev->name, tnapi);
9739 	if (err)
9740 		return err;
9741 
9742 	tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
9743 	tg3_enable_ints(tp);
9744 
9745 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
9746 	       tnapi->coal_now);
9747 
9748 	for (i = 0; i < 5; i++) {
9749 		u32 int_mbox, misc_host_ctrl;
9750 
9751 		int_mbox = tr32_mailbox(tnapi->int_mbox);
9752 		misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
9753 
9754 		if ((int_mbox != 0) ||
9755 		    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
9756 			intr_ok = 1;
9757 			break;
9758 		}
9759 
9760 		if (tg3_flag(tp, 57765_PLUS) &&
9761 		    tnapi->hw_status->status_tag != tnapi->last_tag)
9762 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
9763 
9764 		msleep(10);
9765 	}
9766 
9767 	tg3_disable_ints(tp);
9768 
9769 	free_irq(tnapi->irq_vec, tnapi);
9770 
9771 	err = tg3_request_irq(tp, 0);
9772 
9773 	if (err)
9774 		return err;
9775 
9776 	if (intr_ok) {
9777 		/* Reenable MSI one shot mode. */
9778 		if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
9779 			val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
9780 			tw32(MSGINT_MODE, val);
9781 		}
9782 		return 0;
9783 	}
9784 
9785 	return -EIO;
9786 }
9787 
9788 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
9789  * successfully restored
9790  */
9791 static int tg3_test_msi(struct tg3 *tp)
9792 {
9793 	int err;
9794 	u16 pci_cmd;
9795 
9796 	if (!tg3_flag(tp, USING_MSI))
9797 		return 0;
9798 
9799 	/* Turn off SERR reporting in case MSI terminates with Master
9800 	 * Abort.
9801 	 */
9802 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
9803 	pci_write_config_word(tp->pdev, PCI_COMMAND,
9804 			      pci_cmd & ~PCI_COMMAND_SERR);
9805 
9806 	err = tg3_test_interrupt(tp);
9807 
9808 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
9809 
9810 	if (!err)
9811 		return 0;
9812 
9813 	/* other failures */
9814 	if (err != -EIO)
9815 		return err;
9816 
9817 	/* MSI test failed, go back to INTx mode */
9818 	netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
9819 		    "to INTx mode. Please report this failure to the PCI "
9820 		    "maintainer and include system chipset information\n");
9821 
9822 	free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
9823 
9824 	pci_disable_msi(tp->pdev);
9825 
9826 	tg3_flag_clear(tp, USING_MSI);
9827 	tp->napi[0].irq_vec = tp->pdev->irq;
9828 
9829 	err = tg3_request_irq(tp, 0);
9830 	if (err)
9831 		return err;
9832 
9833 	/* Need to reset the chip because the MSI cycle may have terminated
9834 	 * with Master Abort.
9835 	 */
9836 	tg3_full_lock(tp, 1);
9837 
9838 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9839 	err = tg3_init_hw(tp, 1);
9840 
9841 	tg3_full_unlock(tp);
9842 
9843 	if (err)
9844 		free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
9845 
9846 	return err;
9847 }
9848 
9849 static int tg3_request_firmware(struct tg3 *tp)
9850 {
9851 	const __be32 *fw_data;
9852 
9853 	if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
9854 		netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
9855 			   tp->fw_needed);
9856 		return -ENOENT;
9857 	}
9858 
9859 	fw_data = (void *)tp->fw->data;
9860 
9861 	/* Firmware blob starts with version numbers, followed by
9862 	 * start address and _full_ length including BSS sections
9863 	 * (which must be longer than the actual data, of course
9864 	 */
9865 
9866 	tp->fw_len = be32_to_cpu(fw_data[2]);	/* includes bss */
9867 	if (tp->fw_len < (tp->fw->size - 12)) {
9868 		netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
9869 			   tp->fw_len, tp->fw_needed);
9870 		release_firmware(tp->fw);
9871 		tp->fw = NULL;
9872 		return -EINVAL;
9873 	}
9874 
9875 	/* We no longer need firmware; we have it. */
9876 	tp->fw_needed = NULL;
9877 	return 0;
9878 }
9879 
9880 static bool tg3_enable_msix(struct tg3 *tp)
9881 {
9882 	int i, rc;
9883 	struct msix_entry msix_ent[tp->irq_max];
9884 
9885 	tp->irq_cnt = num_online_cpus();
9886 	if (tp->irq_cnt > 1) {
9887 		/* We want as many rx rings enabled as there are cpus.
9888 		 * In multiqueue MSI-X mode, the first MSI-X vector
9889 		 * only deals with link interrupts, etc, so we add
9890 		 * one to the number of vectors we are requesting.
9891 		 */
9892 		tp->irq_cnt = min_t(unsigned, tp->irq_cnt + 1, tp->irq_max);
9893 	}
9894 
9895 	for (i = 0; i < tp->irq_max; i++) {
9896 		msix_ent[i].entry  = i;
9897 		msix_ent[i].vector = 0;
9898 	}
9899 
9900 	rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
9901 	if (rc < 0) {
9902 		return false;
9903 	} else if (rc != 0) {
9904 		if (pci_enable_msix(tp->pdev, msix_ent, rc))
9905 			return false;
9906 		netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
9907 			      tp->irq_cnt, rc);
9908 		tp->irq_cnt = rc;
9909 	}
9910 
9911 	for (i = 0; i < tp->irq_max; i++)
9912 		tp->napi[i].irq_vec = msix_ent[i].vector;
9913 
9914 	netif_set_real_num_tx_queues(tp->dev, 1);
9915 	rc = tp->irq_cnt > 1 ? tp->irq_cnt - 1 : 1;
9916 	if (netif_set_real_num_rx_queues(tp->dev, rc)) {
9917 		pci_disable_msix(tp->pdev);
9918 		return false;
9919 	}
9920 
9921 	if (tp->irq_cnt > 1) {
9922 		tg3_flag_set(tp, ENABLE_RSS);
9923 
9924 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
9925 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9926 			tg3_flag_set(tp, ENABLE_TSS);
9927 			netif_set_real_num_tx_queues(tp->dev, tp->irq_cnt - 1);
9928 		}
9929 	}
9930 
9931 	return true;
9932 }
9933 
9934 static void tg3_ints_init(struct tg3 *tp)
9935 {
9936 	if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
9937 	    !tg3_flag(tp, TAGGED_STATUS)) {
9938 		/* All MSI supporting chips should support tagged
9939 		 * status.  Assert that this is the case.
9940 		 */
9941 		netdev_warn(tp->dev,
9942 			    "MSI without TAGGED_STATUS? Not using MSI\n");
9943 		goto defcfg;
9944 	}
9945 
9946 	if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
9947 		tg3_flag_set(tp, USING_MSIX);
9948 	else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
9949 		tg3_flag_set(tp, USING_MSI);
9950 
9951 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
9952 		u32 msi_mode = tr32(MSGINT_MODE);
9953 		if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
9954 			msi_mode |= MSGINT_MODE_MULTIVEC_EN;
9955 		if (!tg3_flag(tp, 1SHOT_MSI))
9956 			msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
9957 		tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
9958 	}
9959 defcfg:
9960 	if (!tg3_flag(tp, USING_MSIX)) {
9961 		tp->irq_cnt = 1;
9962 		tp->napi[0].irq_vec = tp->pdev->irq;
9963 		netif_set_real_num_tx_queues(tp->dev, 1);
9964 		netif_set_real_num_rx_queues(tp->dev, 1);
9965 	}
9966 }
9967 
9968 static void tg3_ints_fini(struct tg3 *tp)
9969 {
9970 	if (tg3_flag(tp, USING_MSIX))
9971 		pci_disable_msix(tp->pdev);
9972 	else if (tg3_flag(tp, USING_MSI))
9973 		pci_disable_msi(tp->pdev);
9974 	tg3_flag_clear(tp, USING_MSI);
9975 	tg3_flag_clear(tp, USING_MSIX);
9976 	tg3_flag_clear(tp, ENABLE_RSS);
9977 	tg3_flag_clear(tp, ENABLE_TSS);
9978 }
9979 
9980 static int tg3_open(struct net_device *dev)
9981 {
9982 	struct tg3 *tp = netdev_priv(dev);
9983 	int i, err;
9984 
9985 	if (tp->fw_needed) {
9986 		err = tg3_request_firmware(tp);
9987 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9988 			if (err)
9989 				return err;
9990 		} else if (err) {
9991 			netdev_warn(tp->dev, "TSO capability disabled\n");
9992 			tg3_flag_clear(tp, TSO_CAPABLE);
9993 		} else if (!tg3_flag(tp, TSO_CAPABLE)) {
9994 			netdev_notice(tp->dev, "TSO capability restored\n");
9995 			tg3_flag_set(tp, TSO_CAPABLE);
9996 		}
9997 	}
9998 
9999 	netif_carrier_off(tp->dev);
10000 
10001 	err = tg3_power_up(tp);
10002 	if (err)
10003 		return err;
10004 
10005 	tg3_full_lock(tp, 0);
10006 
10007 	tg3_disable_ints(tp);
10008 	tg3_flag_clear(tp, INIT_COMPLETE);
10009 
10010 	tg3_full_unlock(tp);
10011 
10012 	/*
10013 	 * Setup interrupts first so we know how
10014 	 * many NAPI resources to allocate
10015 	 */
10016 	tg3_ints_init(tp);
10017 
10018 	tg3_rss_check_indir_tbl(tp);
10019 
10020 	/* The placement of this call is tied
10021 	 * to the setup and use of Host TX descriptors.
10022 	 */
10023 	err = tg3_alloc_consistent(tp);
10024 	if (err)
10025 		goto err_out1;
10026 
10027 	tg3_napi_init(tp);
10028 
10029 	tg3_napi_enable(tp);
10030 
10031 	for (i = 0; i < tp->irq_cnt; i++) {
10032 		struct tg3_napi *tnapi = &tp->napi[i];
10033 		err = tg3_request_irq(tp, i);
10034 		if (err) {
10035 			for (i--; i >= 0; i--) {
10036 				tnapi = &tp->napi[i];
10037 				free_irq(tnapi->irq_vec, tnapi);
10038 			}
10039 			goto err_out2;
10040 		}
10041 	}
10042 
10043 	tg3_full_lock(tp, 0);
10044 
10045 	err = tg3_init_hw(tp, 1);
10046 	if (err) {
10047 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10048 		tg3_free_rings(tp);
10049 	}
10050 
10051 	tg3_full_unlock(tp);
10052 
10053 	if (err)
10054 		goto err_out3;
10055 
10056 	if (tg3_flag(tp, USING_MSI)) {
10057 		err = tg3_test_msi(tp);
10058 
10059 		if (err) {
10060 			tg3_full_lock(tp, 0);
10061 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10062 			tg3_free_rings(tp);
10063 			tg3_full_unlock(tp);
10064 
10065 			goto err_out2;
10066 		}
10067 
10068 		if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
10069 			u32 val = tr32(PCIE_TRANSACTION_CFG);
10070 
10071 			tw32(PCIE_TRANSACTION_CFG,
10072 			     val | PCIE_TRANS_CFG_1SHOT_MSI);
10073 		}
10074 	}
10075 
10076 	tg3_phy_start(tp);
10077 
10078 	tg3_full_lock(tp, 0);
10079 
10080 	tg3_timer_start(tp);
10081 	tg3_flag_set(tp, INIT_COMPLETE);
10082 	tg3_enable_ints(tp);
10083 
10084 	tg3_full_unlock(tp);
10085 
10086 	netif_tx_start_all_queues(dev);
10087 
10088 	/*
10089 	 * Reset loopback feature if it was turned on while the device was down
10090 	 * make sure that it's installed properly now.
10091 	 */
10092 	if (dev->features & NETIF_F_LOOPBACK)
10093 		tg3_set_loopback(dev, dev->features);
10094 
10095 	return 0;
10096 
10097 err_out3:
10098 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10099 		struct tg3_napi *tnapi = &tp->napi[i];
10100 		free_irq(tnapi->irq_vec, tnapi);
10101 	}
10102 
10103 err_out2:
10104 	tg3_napi_disable(tp);
10105 	tg3_napi_fini(tp);
10106 	tg3_free_consistent(tp);
10107 
10108 err_out1:
10109 	tg3_ints_fini(tp);
10110 	tg3_frob_aux_power(tp, false);
10111 	pci_set_power_state(tp->pdev, PCI_D3hot);
10112 	return err;
10113 }
10114 
10115 static int tg3_close(struct net_device *dev)
10116 {
10117 	int i;
10118 	struct tg3 *tp = netdev_priv(dev);
10119 
10120 	tg3_napi_disable(tp);
10121 	tg3_reset_task_cancel(tp);
10122 
10123 	netif_tx_stop_all_queues(dev);
10124 
10125 	tg3_timer_stop(tp);
10126 
10127 	tg3_phy_stop(tp);
10128 
10129 	tg3_full_lock(tp, 1);
10130 
10131 	tg3_disable_ints(tp);
10132 
10133 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10134 	tg3_free_rings(tp);
10135 	tg3_flag_clear(tp, INIT_COMPLETE);
10136 
10137 	tg3_full_unlock(tp);
10138 
10139 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10140 		struct tg3_napi *tnapi = &tp->napi[i];
10141 		free_irq(tnapi->irq_vec, tnapi);
10142 	}
10143 
10144 	tg3_ints_fini(tp);
10145 
10146 	/* Clear stats across close / open calls */
10147 	memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
10148 	memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));
10149 
10150 	tg3_napi_fini(tp);
10151 
10152 	tg3_free_consistent(tp);
10153 
10154 	tg3_power_down(tp);
10155 
10156 	netif_carrier_off(tp->dev);
10157 
10158 	return 0;
10159 }
10160 
10161 static inline u64 get_stat64(tg3_stat64_t *val)
10162 {
10163        return ((u64)val->high << 32) | ((u64)val->low);
10164 }
10165 
10166 static u64 tg3_calc_crc_errors(struct tg3 *tp)
10167 {
10168 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10169 
10170 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10171 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10172 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
10173 		u32 val;
10174 
10175 		if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
10176 			tg3_writephy(tp, MII_TG3_TEST1,
10177 				     val | MII_TG3_TEST1_CRC_EN);
10178 			tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
10179 		} else
10180 			val = 0;
10181 
10182 		tp->phy_crc_errors += val;
10183 
10184 		return tp->phy_crc_errors;
10185 	}
10186 
10187 	return get_stat64(&hw_stats->rx_fcs_errors);
10188 }
10189 
10190 #define ESTAT_ADD(member) \
10191 	estats->member =	old_estats->member + \
10192 				get_stat64(&hw_stats->member)
10193 
10194 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
10195 {
10196 	struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
10197 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10198 
10199 	ESTAT_ADD(rx_octets);
10200 	ESTAT_ADD(rx_fragments);
10201 	ESTAT_ADD(rx_ucast_packets);
10202 	ESTAT_ADD(rx_mcast_packets);
10203 	ESTAT_ADD(rx_bcast_packets);
10204 	ESTAT_ADD(rx_fcs_errors);
10205 	ESTAT_ADD(rx_align_errors);
10206 	ESTAT_ADD(rx_xon_pause_rcvd);
10207 	ESTAT_ADD(rx_xoff_pause_rcvd);
10208 	ESTAT_ADD(rx_mac_ctrl_rcvd);
10209 	ESTAT_ADD(rx_xoff_entered);
10210 	ESTAT_ADD(rx_frame_too_long_errors);
10211 	ESTAT_ADD(rx_jabbers);
10212 	ESTAT_ADD(rx_undersize_packets);
10213 	ESTAT_ADD(rx_in_length_errors);
10214 	ESTAT_ADD(rx_out_length_errors);
10215 	ESTAT_ADD(rx_64_or_less_octet_packets);
10216 	ESTAT_ADD(rx_65_to_127_octet_packets);
10217 	ESTAT_ADD(rx_128_to_255_octet_packets);
10218 	ESTAT_ADD(rx_256_to_511_octet_packets);
10219 	ESTAT_ADD(rx_512_to_1023_octet_packets);
10220 	ESTAT_ADD(rx_1024_to_1522_octet_packets);
10221 	ESTAT_ADD(rx_1523_to_2047_octet_packets);
10222 	ESTAT_ADD(rx_2048_to_4095_octet_packets);
10223 	ESTAT_ADD(rx_4096_to_8191_octet_packets);
10224 	ESTAT_ADD(rx_8192_to_9022_octet_packets);
10225 
10226 	ESTAT_ADD(tx_octets);
10227 	ESTAT_ADD(tx_collisions);
10228 	ESTAT_ADD(tx_xon_sent);
10229 	ESTAT_ADD(tx_xoff_sent);
10230 	ESTAT_ADD(tx_flow_control);
10231 	ESTAT_ADD(tx_mac_errors);
10232 	ESTAT_ADD(tx_single_collisions);
10233 	ESTAT_ADD(tx_mult_collisions);
10234 	ESTAT_ADD(tx_deferred);
10235 	ESTAT_ADD(tx_excessive_collisions);
10236 	ESTAT_ADD(tx_late_collisions);
10237 	ESTAT_ADD(tx_collide_2times);
10238 	ESTAT_ADD(tx_collide_3times);
10239 	ESTAT_ADD(tx_collide_4times);
10240 	ESTAT_ADD(tx_collide_5times);
10241 	ESTAT_ADD(tx_collide_6times);
10242 	ESTAT_ADD(tx_collide_7times);
10243 	ESTAT_ADD(tx_collide_8times);
10244 	ESTAT_ADD(tx_collide_9times);
10245 	ESTAT_ADD(tx_collide_10times);
10246 	ESTAT_ADD(tx_collide_11times);
10247 	ESTAT_ADD(tx_collide_12times);
10248 	ESTAT_ADD(tx_collide_13times);
10249 	ESTAT_ADD(tx_collide_14times);
10250 	ESTAT_ADD(tx_collide_15times);
10251 	ESTAT_ADD(tx_ucast_packets);
10252 	ESTAT_ADD(tx_mcast_packets);
10253 	ESTAT_ADD(tx_bcast_packets);
10254 	ESTAT_ADD(tx_carrier_sense_errors);
10255 	ESTAT_ADD(tx_discards);
10256 	ESTAT_ADD(tx_errors);
10257 
10258 	ESTAT_ADD(dma_writeq_full);
10259 	ESTAT_ADD(dma_write_prioq_full);
10260 	ESTAT_ADD(rxbds_empty);
10261 	ESTAT_ADD(rx_discards);
10262 	ESTAT_ADD(rx_errors);
10263 	ESTAT_ADD(rx_threshold_hit);
10264 
10265 	ESTAT_ADD(dma_readq_full);
10266 	ESTAT_ADD(dma_read_prioq_full);
10267 	ESTAT_ADD(tx_comp_queue_full);
10268 
10269 	ESTAT_ADD(ring_set_send_prod_index);
10270 	ESTAT_ADD(ring_status_update);
10271 	ESTAT_ADD(nic_irqs);
10272 	ESTAT_ADD(nic_avoided_irqs);
10273 	ESTAT_ADD(nic_tx_threshold_hit);
10274 
10275 	ESTAT_ADD(mbuf_lwm_thresh_hit);
10276 }
10277 
10278 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
10279 {
10280 	struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
10281 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10282 
10283 	stats->rx_packets = old_stats->rx_packets +
10284 		get_stat64(&hw_stats->rx_ucast_packets) +
10285 		get_stat64(&hw_stats->rx_mcast_packets) +
10286 		get_stat64(&hw_stats->rx_bcast_packets);
10287 
10288 	stats->tx_packets = old_stats->tx_packets +
10289 		get_stat64(&hw_stats->tx_ucast_packets) +
10290 		get_stat64(&hw_stats->tx_mcast_packets) +
10291 		get_stat64(&hw_stats->tx_bcast_packets);
10292 
10293 	stats->rx_bytes = old_stats->rx_bytes +
10294 		get_stat64(&hw_stats->rx_octets);
10295 	stats->tx_bytes = old_stats->tx_bytes +
10296 		get_stat64(&hw_stats->tx_octets);
10297 
10298 	stats->rx_errors = old_stats->rx_errors +
10299 		get_stat64(&hw_stats->rx_errors);
10300 	stats->tx_errors = old_stats->tx_errors +
10301 		get_stat64(&hw_stats->tx_errors) +
10302 		get_stat64(&hw_stats->tx_mac_errors) +
10303 		get_stat64(&hw_stats->tx_carrier_sense_errors) +
10304 		get_stat64(&hw_stats->tx_discards);
10305 
10306 	stats->multicast = old_stats->multicast +
10307 		get_stat64(&hw_stats->rx_mcast_packets);
10308 	stats->collisions = old_stats->collisions +
10309 		get_stat64(&hw_stats->tx_collisions);
10310 
10311 	stats->rx_length_errors = old_stats->rx_length_errors +
10312 		get_stat64(&hw_stats->rx_frame_too_long_errors) +
10313 		get_stat64(&hw_stats->rx_undersize_packets);
10314 
10315 	stats->rx_over_errors = old_stats->rx_over_errors +
10316 		get_stat64(&hw_stats->rxbds_empty);
10317 	stats->rx_frame_errors = old_stats->rx_frame_errors +
10318 		get_stat64(&hw_stats->rx_align_errors);
10319 	stats->tx_aborted_errors = old_stats->tx_aborted_errors +
10320 		get_stat64(&hw_stats->tx_discards);
10321 	stats->tx_carrier_errors = old_stats->tx_carrier_errors +
10322 		get_stat64(&hw_stats->tx_carrier_sense_errors);
10323 
10324 	stats->rx_crc_errors = old_stats->rx_crc_errors +
10325 		tg3_calc_crc_errors(tp);
10326 
10327 	stats->rx_missed_errors = old_stats->rx_missed_errors +
10328 		get_stat64(&hw_stats->rx_discards);
10329 
10330 	stats->rx_dropped = tp->rx_dropped;
10331 	stats->tx_dropped = tp->tx_dropped;
10332 }
10333 
10334 static int tg3_get_regs_len(struct net_device *dev)
10335 {
10336 	return TG3_REG_BLK_SIZE;
10337 }
10338 
10339 static void tg3_get_regs(struct net_device *dev,
10340 		struct ethtool_regs *regs, void *_p)
10341 {
10342 	struct tg3 *tp = netdev_priv(dev);
10343 
10344 	regs->version = 0;
10345 
10346 	memset(_p, 0, TG3_REG_BLK_SIZE);
10347 
10348 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10349 		return;
10350 
10351 	tg3_full_lock(tp, 0);
10352 
10353 	tg3_dump_legacy_regs(tp, (u32 *)_p);
10354 
10355 	tg3_full_unlock(tp);
10356 }
10357 
10358 static int tg3_get_eeprom_len(struct net_device *dev)
10359 {
10360 	struct tg3 *tp = netdev_priv(dev);
10361 
10362 	return tp->nvram_size;
10363 }
10364 
10365 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10366 {
10367 	struct tg3 *tp = netdev_priv(dev);
10368 	int ret;
10369 	u8  *pd;
10370 	u32 i, offset, len, b_offset, b_count;
10371 	__be32 val;
10372 
10373 	if (tg3_flag(tp, NO_NVRAM))
10374 		return -EINVAL;
10375 
10376 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10377 		return -EAGAIN;
10378 
10379 	offset = eeprom->offset;
10380 	len = eeprom->len;
10381 	eeprom->len = 0;
10382 
10383 	eeprom->magic = TG3_EEPROM_MAGIC;
10384 
10385 	if (offset & 3) {
10386 		/* adjustments to start on required 4 byte boundary */
10387 		b_offset = offset & 3;
10388 		b_count = 4 - b_offset;
10389 		if (b_count > len) {
10390 			/* i.e. offset=1 len=2 */
10391 			b_count = len;
10392 		}
10393 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
10394 		if (ret)
10395 			return ret;
10396 		memcpy(data, ((char *)&val) + b_offset, b_count);
10397 		len -= b_count;
10398 		offset += b_count;
10399 		eeprom->len += b_count;
10400 	}
10401 
10402 	/* read bytes up to the last 4 byte boundary */
10403 	pd = &data[eeprom->len];
10404 	for (i = 0; i < (len - (len & 3)); i += 4) {
10405 		ret = tg3_nvram_read_be32(tp, offset + i, &val);
10406 		if (ret) {
10407 			eeprom->len += i;
10408 			return ret;
10409 		}
10410 		memcpy(pd + i, &val, 4);
10411 	}
10412 	eeprom->len += i;
10413 
10414 	if (len & 3) {
10415 		/* read last bytes not ending on 4 byte boundary */
10416 		pd = &data[eeprom->len];
10417 		b_count = len & 3;
10418 		b_offset = offset + len - b_count;
10419 		ret = tg3_nvram_read_be32(tp, b_offset, &val);
10420 		if (ret)
10421 			return ret;
10422 		memcpy(pd, &val, b_count);
10423 		eeprom->len += b_count;
10424 	}
10425 	return 0;
10426 }
10427 
10428 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10429 {
10430 	struct tg3 *tp = netdev_priv(dev);
10431 	int ret;
10432 	u32 offset, len, b_offset, odd_len;
10433 	u8 *buf;
10434 	__be32 start, end;
10435 
10436 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10437 		return -EAGAIN;
10438 
10439 	if (tg3_flag(tp, NO_NVRAM) ||
10440 	    eeprom->magic != TG3_EEPROM_MAGIC)
10441 		return -EINVAL;
10442 
10443 	offset = eeprom->offset;
10444 	len = eeprom->len;
10445 
10446 	if ((b_offset = (offset & 3))) {
10447 		/* adjustments to start on required 4 byte boundary */
10448 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
10449 		if (ret)
10450 			return ret;
10451 		len += b_offset;
10452 		offset &= ~3;
10453 		if (len < 4)
10454 			len = 4;
10455 	}
10456 
10457 	odd_len = 0;
10458 	if (len & 3) {
10459 		/* adjustments to end on required 4 byte boundary */
10460 		odd_len = 1;
10461 		len = (len + 3) & ~3;
10462 		ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
10463 		if (ret)
10464 			return ret;
10465 	}
10466 
10467 	buf = data;
10468 	if (b_offset || odd_len) {
10469 		buf = kmalloc(len, GFP_KERNEL);
10470 		if (!buf)
10471 			return -ENOMEM;
10472 		if (b_offset)
10473 			memcpy(buf, &start, 4);
10474 		if (odd_len)
10475 			memcpy(buf+len-4, &end, 4);
10476 		memcpy(buf + b_offset, data, eeprom->len);
10477 	}
10478 
10479 	ret = tg3_nvram_write_block(tp, offset, len, buf);
10480 
10481 	if (buf != data)
10482 		kfree(buf);
10483 
10484 	return ret;
10485 }
10486 
10487 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10488 {
10489 	struct tg3 *tp = netdev_priv(dev);
10490 
10491 	if (tg3_flag(tp, USE_PHYLIB)) {
10492 		struct phy_device *phydev;
10493 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10494 			return -EAGAIN;
10495 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10496 		return phy_ethtool_gset(phydev, cmd);
10497 	}
10498 
10499 	cmd->supported = (SUPPORTED_Autoneg);
10500 
10501 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10502 		cmd->supported |= (SUPPORTED_1000baseT_Half |
10503 				   SUPPORTED_1000baseT_Full);
10504 
10505 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10506 		cmd->supported |= (SUPPORTED_100baseT_Half |
10507 				  SUPPORTED_100baseT_Full |
10508 				  SUPPORTED_10baseT_Half |
10509 				  SUPPORTED_10baseT_Full |
10510 				  SUPPORTED_TP);
10511 		cmd->port = PORT_TP;
10512 	} else {
10513 		cmd->supported |= SUPPORTED_FIBRE;
10514 		cmd->port = PORT_FIBRE;
10515 	}
10516 
10517 	cmd->advertising = tp->link_config.advertising;
10518 	if (tg3_flag(tp, PAUSE_AUTONEG)) {
10519 		if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
10520 			if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10521 				cmd->advertising |= ADVERTISED_Pause;
10522 			} else {
10523 				cmd->advertising |= ADVERTISED_Pause |
10524 						    ADVERTISED_Asym_Pause;
10525 			}
10526 		} else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10527 			cmd->advertising |= ADVERTISED_Asym_Pause;
10528 		}
10529 	}
10530 	if (netif_running(dev) && netif_carrier_ok(dev)) {
10531 		ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
10532 		cmd->duplex = tp->link_config.active_duplex;
10533 		cmd->lp_advertising = tp->link_config.rmt_adv;
10534 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10535 			if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
10536 				cmd->eth_tp_mdix = ETH_TP_MDI_X;
10537 			else
10538 				cmd->eth_tp_mdix = ETH_TP_MDI;
10539 		}
10540 	} else {
10541 		ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
10542 		cmd->duplex = DUPLEX_UNKNOWN;
10543 		cmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
10544 	}
10545 	cmd->phy_address = tp->phy_addr;
10546 	cmd->transceiver = XCVR_INTERNAL;
10547 	cmd->autoneg = tp->link_config.autoneg;
10548 	cmd->maxtxpkt = 0;
10549 	cmd->maxrxpkt = 0;
10550 	return 0;
10551 }
10552 
10553 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10554 {
10555 	struct tg3 *tp = netdev_priv(dev);
10556 	u32 speed = ethtool_cmd_speed(cmd);
10557 
10558 	if (tg3_flag(tp, USE_PHYLIB)) {
10559 		struct phy_device *phydev;
10560 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10561 			return -EAGAIN;
10562 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10563 		return phy_ethtool_sset(phydev, cmd);
10564 	}
10565 
10566 	if (cmd->autoneg != AUTONEG_ENABLE &&
10567 	    cmd->autoneg != AUTONEG_DISABLE)
10568 		return -EINVAL;
10569 
10570 	if (cmd->autoneg == AUTONEG_DISABLE &&
10571 	    cmd->duplex != DUPLEX_FULL &&
10572 	    cmd->duplex != DUPLEX_HALF)
10573 		return -EINVAL;
10574 
10575 	if (cmd->autoneg == AUTONEG_ENABLE) {
10576 		u32 mask = ADVERTISED_Autoneg |
10577 			   ADVERTISED_Pause |
10578 			   ADVERTISED_Asym_Pause;
10579 
10580 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10581 			mask |= ADVERTISED_1000baseT_Half |
10582 				ADVERTISED_1000baseT_Full;
10583 
10584 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
10585 			mask |= ADVERTISED_100baseT_Half |
10586 				ADVERTISED_100baseT_Full |
10587 				ADVERTISED_10baseT_Half |
10588 				ADVERTISED_10baseT_Full |
10589 				ADVERTISED_TP;
10590 		else
10591 			mask |= ADVERTISED_FIBRE;
10592 
10593 		if (cmd->advertising & ~mask)
10594 			return -EINVAL;
10595 
10596 		mask &= (ADVERTISED_1000baseT_Half |
10597 			 ADVERTISED_1000baseT_Full |
10598 			 ADVERTISED_100baseT_Half |
10599 			 ADVERTISED_100baseT_Full |
10600 			 ADVERTISED_10baseT_Half |
10601 			 ADVERTISED_10baseT_Full);
10602 
10603 		cmd->advertising &= mask;
10604 	} else {
10605 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
10606 			if (speed != SPEED_1000)
10607 				return -EINVAL;
10608 
10609 			if (cmd->duplex != DUPLEX_FULL)
10610 				return -EINVAL;
10611 		} else {
10612 			if (speed != SPEED_100 &&
10613 			    speed != SPEED_10)
10614 				return -EINVAL;
10615 		}
10616 	}
10617 
10618 	tg3_full_lock(tp, 0);
10619 
10620 	tp->link_config.autoneg = cmd->autoneg;
10621 	if (cmd->autoneg == AUTONEG_ENABLE) {
10622 		tp->link_config.advertising = (cmd->advertising |
10623 					      ADVERTISED_Autoneg);
10624 		tp->link_config.speed = SPEED_UNKNOWN;
10625 		tp->link_config.duplex = DUPLEX_UNKNOWN;
10626 	} else {
10627 		tp->link_config.advertising = 0;
10628 		tp->link_config.speed = speed;
10629 		tp->link_config.duplex = cmd->duplex;
10630 	}
10631 
10632 	if (netif_running(dev))
10633 		tg3_setup_phy(tp, 1);
10634 
10635 	tg3_full_unlock(tp);
10636 
10637 	return 0;
10638 }
10639 
10640 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
10641 {
10642 	struct tg3 *tp = netdev_priv(dev);
10643 
10644 	strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
10645 	strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
10646 	strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
10647 	strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
10648 }
10649 
10650 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
10651 {
10652 	struct tg3 *tp = netdev_priv(dev);
10653 
10654 	if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
10655 		wol->supported = WAKE_MAGIC;
10656 	else
10657 		wol->supported = 0;
10658 	wol->wolopts = 0;
10659 	if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
10660 		wol->wolopts = WAKE_MAGIC;
10661 	memset(&wol->sopass, 0, sizeof(wol->sopass));
10662 }
10663 
10664 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
10665 {
10666 	struct tg3 *tp = netdev_priv(dev);
10667 	struct device *dp = &tp->pdev->dev;
10668 
10669 	if (wol->wolopts & ~WAKE_MAGIC)
10670 		return -EINVAL;
10671 	if ((wol->wolopts & WAKE_MAGIC) &&
10672 	    !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
10673 		return -EINVAL;
10674 
10675 	device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
10676 
10677 	spin_lock_bh(&tp->lock);
10678 	if (device_may_wakeup(dp))
10679 		tg3_flag_set(tp, WOL_ENABLE);
10680 	else
10681 		tg3_flag_clear(tp, WOL_ENABLE);
10682 	spin_unlock_bh(&tp->lock);
10683 
10684 	return 0;
10685 }
10686 
10687 static u32 tg3_get_msglevel(struct net_device *dev)
10688 {
10689 	struct tg3 *tp = netdev_priv(dev);
10690 	return tp->msg_enable;
10691 }
10692 
10693 static void tg3_set_msglevel(struct net_device *dev, u32 value)
10694 {
10695 	struct tg3 *tp = netdev_priv(dev);
10696 	tp->msg_enable = value;
10697 }
10698 
10699 static int tg3_nway_reset(struct net_device *dev)
10700 {
10701 	struct tg3 *tp = netdev_priv(dev);
10702 	int r;
10703 
10704 	if (!netif_running(dev))
10705 		return -EAGAIN;
10706 
10707 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
10708 		return -EINVAL;
10709 
10710 	if (tg3_flag(tp, USE_PHYLIB)) {
10711 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10712 			return -EAGAIN;
10713 		r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
10714 	} else {
10715 		u32 bmcr;
10716 
10717 		spin_lock_bh(&tp->lock);
10718 		r = -EINVAL;
10719 		tg3_readphy(tp, MII_BMCR, &bmcr);
10720 		if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
10721 		    ((bmcr & BMCR_ANENABLE) ||
10722 		     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
10723 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
10724 						   BMCR_ANENABLE);
10725 			r = 0;
10726 		}
10727 		spin_unlock_bh(&tp->lock);
10728 	}
10729 
10730 	return r;
10731 }
10732 
10733 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
10734 {
10735 	struct tg3 *tp = netdev_priv(dev);
10736 
10737 	ering->rx_max_pending = tp->rx_std_ring_mask;
10738 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
10739 		ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
10740 	else
10741 		ering->rx_jumbo_max_pending = 0;
10742 
10743 	ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
10744 
10745 	ering->rx_pending = tp->rx_pending;
10746 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
10747 		ering->rx_jumbo_pending = tp->rx_jumbo_pending;
10748 	else
10749 		ering->rx_jumbo_pending = 0;
10750 
10751 	ering->tx_pending = tp->napi[0].tx_pending;
10752 }
10753 
10754 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
10755 {
10756 	struct tg3 *tp = netdev_priv(dev);
10757 	int i, irq_sync = 0, err = 0;
10758 
10759 	if ((ering->rx_pending > tp->rx_std_ring_mask) ||
10760 	    (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
10761 	    (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
10762 	    (ering->tx_pending <= MAX_SKB_FRAGS) ||
10763 	    (tg3_flag(tp, TSO_BUG) &&
10764 	     (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
10765 		return -EINVAL;
10766 
10767 	if (netif_running(dev)) {
10768 		tg3_phy_stop(tp);
10769 		tg3_netif_stop(tp);
10770 		irq_sync = 1;
10771 	}
10772 
10773 	tg3_full_lock(tp, irq_sync);
10774 
10775 	tp->rx_pending = ering->rx_pending;
10776 
10777 	if (tg3_flag(tp, MAX_RXPEND_64) &&
10778 	    tp->rx_pending > 63)
10779 		tp->rx_pending = 63;
10780 	tp->rx_jumbo_pending = ering->rx_jumbo_pending;
10781 
10782 	for (i = 0; i < tp->irq_max; i++)
10783 		tp->napi[i].tx_pending = ering->tx_pending;
10784 
10785 	if (netif_running(dev)) {
10786 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10787 		err = tg3_restart_hw(tp, 1);
10788 		if (!err)
10789 			tg3_netif_start(tp);
10790 	}
10791 
10792 	tg3_full_unlock(tp);
10793 
10794 	if (irq_sync && !err)
10795 		tg3_phy_start(tp);
10796 
10797 	return err;
10798 }
10799 
10800 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
10801 {
10802 	struct tg3 *tp = netdev_priv(dev);
10803 
10804 	epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
10805 
10806 	if (tp->link_config.flowctrl & FLOW_CTRL_RX)
10807 		epause->rx_pause = 1;
10808 	else
10809 		epause->rx_pause = 0;
10810 
10811 	if (tp->link_config.flowctrl & FLOW_CTRL_TX)
10812 		epause->tx_pause = 1;
10813 	else
10814 		epause->tx_pause = 0;
10815 }
10816 
10817 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
10818 {
10819 	struct tg3 *tp = netdev_priv(dev);
10820 	int err = 0;
10821 
10822 	if (tg3_flag(tp, USE_PHYLIB)) {
10823 		u32 newadv;
10824 		struct phy_device *phydev;
10825 
10826 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10827 
10828 		if (!(phydev->supported & SUPPORTED_Pause) ||
10829 		    (!(phydev->supported & SUPPORTED_Asym_Pause) &&
10830 		     (epause->rx_pause != epause->tx_pause)))
10831 			return -EINVAL;
10832 
10833 		tp->link_config.flowctrl = 0;
10834 		if (epause->rx_pause) {
10835 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
10836 
10837 			if (epause->tx_pause) {
10838 				tp->link_config.flowctrl |= FLOW_CTRL_TX;
10839 				newadv = ADVERTISED_Pause;
10840 			} else
10841 				newadv = ADVERTISED_Pause |
10842 					 ADVERTISED_Asym_Pause;
10843 		} else if (epause->tx_pause) {
10844 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
10845 			newadv = ADVERTISED_Asym_Pause;
10846 		} else
10847 			newadv = 0;
10848 
10849 		if (epause->autoneg)
10850 			tg3_flag_set(tp, PAUSE_AUTONEG);
10851 		else
10852 			tg3_flag_clear(tp, PAUSE_AUTONEG);
10853 
10854 		if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
10855 			u32 oldadv = phydev->advertising &
10856 				     (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
10857 			if (oldadv != newadv) {
10858 				phydev->advertising &=
10859 					~(ADVERTISED_Pause |
10860 					  ADVERTISED_Asym_Pause);
10861 				phydev->advertising |= newadv;
10862 				if (phydev->autoneg) {
10863 					/*
10864 					 * Always renegotiate the link to
10865 					 * inform our link partner of our
10866 					 * flow control settings, even if the
10867 					 * flow control is forced.  Let
10868 					 * tg3_adjust_link() do the final
10869 					 * flow control setup.
10870 					 */
10871 					return phy_start_aneg(phydev);
10872 				}
10873 			}
10874 
10875 			if (!epause->autoneg)
10876 				tg3_setup_flow_control(tp, 0, 0);
10877 		} else {
10878 			tp->link_config.advertising &=
10879 					~(ADVERTISED_Pause |
10880 					  ADVERTISED_Asym_Pause);
10881 			tp->link_config.advertising |= newadv;
10882 		}
10883 	} else {
10884 		int irq_sync = 0;
10885 
10886 		if (netif_running(dev)) {
10887 			tg3_netif_stop(tp);
10888 			irq_sync = 1;
10889 		}
10890 
10891 		tg3_full_lock(tp, irq_sync);
10892 
10893 		if (epause->autoneg)
10894 			tg3_flag_set(tp, PAUSE_AUTONEG);
10895 		else
10896 			tg3_flag_clear(tp, PAUSE_AUTONEG);
10897 		if (epause->rx_pause)
10898 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
10899 		else
10900 			tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
10901 		if (epause->tx_pause)
10902 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
10903 		else
10904 			tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
10905 
10906 		if (netif_running(dev)) {
10907 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10908 			err = tg3_restart_hw(tp, 1);
10909 			if (!err)
10910 				tg3_netif_start(tp);
10911 		}
10912 
10913 		tg3_full_unlock(tp);
10914 	}
10915 
10916 	return err;
10917 }
10918 
10919 static int tg3_get_sset_count(struct net_device *dev, int sset)
10920 {
10921 	switch (sset) {
10922 	case ETH_SS_TEST:
10923 		return TG3_NUM_TEST;
10924 	case ETH_SS_STATS:
10925 		return TG3_NUM_STATS;
10926 	default:
10927 		return -EOPNOTSUPP;
10928 	}
10929 }
10930 
10931 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
10932 			 u32 *rules __always_unused)
10933 {
10934 	struct tg3 *tp = netdev_priv(dev);
10935 
10936 	if (!tg3_flag(tp, SUPPORT_MSIX))
10937 		return -EOPNOTSUPP;
10938 
10939 	switch (info->cmd) {
10940 	case ETHTOOL_GRXRINGS:
10941 		if (netif_running(tp->dev))
10942 			info->data = tp->irq_cnt;
10943 		else {
10944 			info->data = num_online_cpus();
10945 			if (info->data > TG3_IRQ_MAX_VECS_RSS)
10946 				info->data = TG3_IRQ_MAX_VECS_RSS;
10947 		}
10948 
10949 		/* The first interrupt vector only
10950 		 * handles link interrupts.
10951 		 */
10952 		info->data -= 1;
10953 		return 0;
10954 
10955 	default:
10956 		return -EOPNOTSUPP;
10957 	}
10958 }
10959 
10960 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
10961 {
10962 	u32 size = 0;
10963 	struct tg3 *tp = netdev_priv(dev);
10964 
10965 	if (tg3_flag(tp, SUPPORT_MSIX))
10966 		size = TG3_RSS_INDIR_TBL_SIZE;
10967 
10968 	return size;
10969 }
10970 
10971 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir)
10972 {
10973 	struct tg3 *tp = netdev_priv(dev);
10974 	int i;
10975 
10976 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
10977 		indir[i] = tp->rss_ind_tbl[i];
10978 
10979 	return 0;
10980 }
10981 
10982 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir)
10983 {
10984 	struct tg3 *tp = netdev_priv(dev);
10985 	size_t i;
10986 
10987 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
10988 		tp->rss_ind_tbl[i] = indir[i];
10989 
10990 	if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
10991 		return 0;
10992 
10993 	/* It is legal to write the indirection
10994 	 * table while the device is running.
10995 	 */
10996 	tg3_full_lock(tp, 0);
10997 	tg3_rss_write_indir_tbl(tp);
10998 	tg3_full_unlock(tp);
10999 
11000 	return 0;
11001 }
11002 
11003 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
11004 {
11005 	switch (stringset) {
11006 	case ETH_SS_STATS:
11007 		memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
11008 		break;
11009 	case ETH_SS_TEST:
11010 		memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
11011 		break;
11012 	default:
11013 		WARN_ON(1);	/* we need a WARN() */
11014 		break;
11015 	}
11016 }
11017 
11018 static int tg3_set_phys_id(struct net_device *dev,
11019 			    enum ethtool_phys_id_state state)
11020 {
11021 	struct tg3 *tp = netdev_priv(dev);
11022 
11023 	if (!netif_running(tp->dev))
11024 		return -EAGAIN;
11025 
11026 	switch (state) {
11027 	case ETHTOOL_ID_ACTIVE:
11028 		return 1;	/* cycle on/off once per second */
11029 
11030 	case ETHTOOL_ID_ON:
11031 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11032 		     LED_CTRL_1000MBPS_ON |
11033 		     LED_CTRL_100MBPS_ON |
11034 		     LED_CTRL_10MBPS_ON |
11035 		     LED_CTRL_TRAFFIC_OVERRIDE |
11036 		     LED_CTRL_TRAFFIC_BLINK |
11037 		     LED_CTRL_TRAFFIC_LED);
11038 		break;
11039 
11040 	case ETHTOOL_ID_OFF:
11041 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11042 		     LED_CTRL_TRAFFIC_OVERRIDE);
11043 		break;
11044 
11045 	case ETHTOOL_ID_INACTIVE:
11046 		tw32(MAC_LED_CTRL, tp->led_ctrl);
11047 		break;
11048 	}
11049 
11050 	return 0;
11051 }
11052 
11053 static void tg3_get_ethtool_stats(struct net_device *dev,
11054 				   struct ethtool_stats *estats, u64 *tmp_stats)
11055 {
11056 	struct tg3 *tp = netdev_priv(dev);
11057 
11058 	if (tp->hw_stats)
11059 		tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
11060 	else
11061 		memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
11062 }
11063 
11064 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
11065 {
11066 	int i;
11067 	__be32 *buf;
11068 	u32 offset = 0, len = 0;
11069 	u32 magic, val;
11070 
11071 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
11072 		return NULL;
11073 
11074 	if (magic == TG3_EEPROM_MAGIC) {
11075 		for (offset = TG3_NVM_DIR_START;
11076 		     offset < TG3_NVM_DIR_END;
11077 		     offset += TG3_NVM_DIRENT_SIZE) {
11078 			if (tg3_nvram_read(tp, offset, &val))
11079 				return NULL;
11080 
11081 			if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
11082 			    TG3_NVM_DIRTYPE_EXTVPD)
11083 				break;
11084 		}
11085 
11086 		if (offset != TG3_NVM_DIR_END) {
11087 			len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
11088 			if (tg3_nvram_read(tp, offset + 4, &offset))
11089 				return NULL;
11090 
11091 			offset = tg3_nvram_logical_addr(tp, offset);
11092 		}
11093 	}
11094 
11095 	if (!offset || !len) {
11096 		offset = TG3_NVM_VPD_OFF;
11097 		len = TG3_NVM_VPD_LEN;
11098 	}
11099 
11100 	buf = kmalloc(len, GFP_KERNEL);
11101 	if (buf == NULL)
11102 		return NULL;
11103 
11104 	if (magic == TG3_EEPROM_MAGIC) {
11105 		for (i = 0; i < len; i += 4) {
11106 			/* The data is in little-endian format in NVRAM.
11107 			 * Use the big-endian read routines to preserve
11108 			 * the byte order as it exists in NVRAM.
11109 			 */
11110 			if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
11111 				goto error;
11112 		}
11113 	} else {
11114 		u8 *ptr;
11115 		ssize_t cnt;
11116 		unsigned int pos = 0;
11117 
11118 		ptr = (u8 *)&buf[0];
11119 		for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
11120 			cnt = pci_read_vpd(tp->pdev, pos,
11121 					   len - pos, ptr);
11122 			if (cnt == -ETIMEDOUT || cnt == -EINTR)
11123 				cnt = 0;
11124 			else if (cnt < 0)
11125 				goto error;
11126 		}
11127 		if (pos != len)
11128 			goto error;
11129 	}
11130 
11131 	*vpdlen = len;
11132 
11133 	return buf;
11134 
11135 error:
11136 	kfree(buf);
11137 	return NULL;
11138 }
11139 
11140 #define NVRAM_TEST_SIZE 0x100
11141 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE	0x14
11142 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE	0x18
11143 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE	0x1c
11144 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE	0x20
11145 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE	0x24
11146 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE	0x50
11147 #define NVRAM_SELFBOOT_HW_SIZE 0x20
11148 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
11149 
11150 static int tg3_test_nvram(struct tg3 *tp)
11151 {
11152 	u32 csum, magic, len;
11153 	__be32 *buf;
11154 	int i, j, k, err = 0, size;
11155 
11156 	if (tg3_flag(tp, NO_NVRAM))
11157 		return 0;
11158 
11159 	if (tg3_nvram_read(tp, 0, &magic) != 0)
11160 		return -EIO;
11161 
11162 	if (magic == TG3_EEPROM_MAGIC)
11163 		size = NVRAM_TEST_SIZE;
11164 	else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
11165 		if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
11166 		    TG3_EEPROM_SB_FORMAT_1) {
11167 			switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
11168 			case TG3_EEPROM_SB_REVISION_0:
11169 				size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
11170 				break;
11171 			case TG3_EEPROM_SB_REVISION_2:
11172 				size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
11173 				break;
11174 			case TG3_EEPROM_SB_REVISION_3:
11175 				size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
11176 				break;
11177 			case TG3_EEPROM_SB_REVISION_4:
11178 				size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
11179 				break;
11180 			case TG3_EEPROM_SB_REVISION_5:
11181 				size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
11182 				break;
11183 			case TG3_EEPROM_SB_REVISION_6:
11184 				size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
11185 				break;
11186 			default:
11187 				return -EIO;
11188 			}
11189 		} else
11190 			return 0;
11191 	} else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
11192 		size = NVRAM_SELFBOOT_HW_SIZE;
11193 	else
11194 		return -EIO;
11195 
11196 	buf = kmalloc(size, GFP_KERNEL);
11197 	if (buf == NULL)
11198 		return -ENOMEM;
11199 
11200 	err = -EIO;
11201 	for (i = 0, j = 0; i < size; i += 4, j++) {
11202 		err = tg3_nvram_read_be32(tp, i, &buf[j]);
11203 		if (err)
11204 			break;
11205 	}
11206 	if (i < size)
11207 		goto out;
11208 
11209 	/* Selfboot format */
11210 	magic = be32_to_cpu(buf[0]);
11211 	if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
11212 	    TG3_EEPROM_MAGIC_FW) {
11213 		u8 *buf8 = (u8 *) buf, csum8 = 0;
11214 
11215 		if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
11216 		    TG3_EEPROM_SB_REVISION_2) {
11217 			/* For rev 2, the csum doesn't include the MBA. */
11218 			for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
11219 				csum8 += buf8[i];
11220 			for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
11221 				csum8 += buf8[i];
11222 		} else {
11223 			for (i = 0; i < size; i++)
11224 				csum8 += buf8[i];
11225 		}
11226 
11227 		if (csum8 == 0) {
11228 			err = 0;
11229 			goto out;
11230 		}
11231 
11232 		err = -EIO;
11233 		goto out;
11234 	}
11235 
11236 	if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
11237 	    TG3_EEPROM_MAGIC_HW) {
11238 		u8 data[NVRAM_SELFBOOT_DATA_SIZE];
11239 		u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
11240 		u8 *buf8 = (u8 *) buf;
11241 
11242 		/* Separate the parity bits and the data bytes.  */
11243 		for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
11244 			if ((i == 0) || (i == 8)) {
11245 				int l;
11246 				u8 msk;
11247 
11248 				for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
11249 					parity[k++] = buf8[i] & msk;
11250 				i++;
11251 			} else if (i == 16) {
11252 				int l;
11253 				u8 msk;
11254 
11255 				for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
11256 					parity[k++] = buf8[i] & msk;
11257 				i++;
11258 
11259 				for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
11260 					parity[k++] = buf8[i] & msk;
11261 				i++;
11262 			}
11263 			data[j++] = buf8[i];
11264 		}
11265 
11266 		err = -EIO;
11267 		for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
11268 			u8 hw8 = hweight8(data[i]);
11269 
11270 			if ((hw8 & 0x1) && parity[i])
11271 				goto out;
11272 			else if (!(hw8 & 0x1) && !parity[i])
11273 				goto out;
11274 		}
11275 		err = 0;
11276 		goto out;
11277 	}
11278 
11279 	err = -EIO;
11280 
11281 	/* Bootstrap checksum at offset 0x10 */
11282 	csum = calc_crc((unsigned char *) buf, 0x10);
11283 	if (csum != le32_to_cpu(buf[0x10/4]))
11284 		goto out;
11285 
11286 	/* Manufacturing block starts at offset 0x74, checksum at 0xfc */
11287 	csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
11288 	if (csum != le32_to_cpu(buf[0xfc/4]))
11289 		goto out;
11290 
11291 	kfree(buf);
11292 
11293 	buf = tg3_vpd_readblock(tp, &len);
11294 	if (!buf)
11295 		return -ENOMEM;
11296 
11297 	i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
11298 	if (i > 0) {
11299 		j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
11300 		if (j < 0)
11301 			goto out;
11302 
11303 		if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
11304 			goto out;
11305 
11306 		i += PCI_VPD_LRDT_TAG_SIZE;
11307 		j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
11308 					      PCI_VPD_RO_KEYWORD_CHKSUM);
11309 		if (j > 0) {
11310 			u8 csum8 = 0;
11311 
11312 			j += PCI_VPD_INFO_FLD_HDR_SIZE;
11313 
11314 			for (i = 0; i <= j; i++)
11315 				csum8 += ((u8 *)buf)[i];
11316 
11317 			if (csum8)
11318 				goto out;
11319 		}
11320 	}
11321 
11322 	err = 0;
11323 
11324 out:
11325 	kfree(buf);
11326 	return err;
11327 }
11328 
11329 #define TG3_SERDES_TIMEOUT_SEC	2
11330 #define TG3_COPPER_TIMEOUT_SEC	6
11331 
11332 static int tg3_test_link(struct tg3 *tp)
11333 {
11334 	int i, max;
11335 
11336 	if (!netif_running(tp->dev))
11337 		return -ENODEV;
11338 
11339 	if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
11340 		max = TG3_SERDES_TIMEOUT_SEC;
11341 	else
11342 		max = TG3_COPPER_TIMEOUT_SEC;
11343 
11344 	for (i = 0; i < max; i++) {
11345 		if (netif_carrier_ok(tp->dev))
11346 			return 0;
11347 
11348 		if (msleep_interruptible(1000))
11349 			break;
11350 	}
11351 
11352 	return -EIO;
11353 }
11354 
11355 /* Only test the commonly used registers */
11356 static int tg3_test_registers(struct tg3 *tp)
11357 {
11358 	int i, is_5705, is_5750;
11359 	u32 offset, read_mask, write_mask, val, save_val, read_val;
11360 	static struct {
11361 		u16 offset;
11362 		u16 flags;
11363 #define TG3_FL_5705	0x1
11364 #define TG3_FL_NOT_5705	0x2
11365 #define TG3_FL_NOT_5788	0x4
11366 #define TG3_FL_NOT_5750	0x8
11367 		u32 read_mask;
11368 		u32 write_mask;
11369 	} reg_tbl[] = {
11370 		/* MAC Control Registers */
11371 		{ MAC_MODE, TG3_FL_NOT_5705,
11372 			0x00000000, 0x00ef6f8c },
11373 		{ MAC_MODE, TG3_FL_5705,
11374 			0x00000000, 0x01ef6b8c },
11375 		{ MAC_STATUS, TG3_FL_NOT_5705,
11376 			0x03800107, 0x00000000 },
11377 		{ MAC_STATUS, TG3_FL_5705,
11378 			0x03800100, 0x00000000 },
11379 		{ MAC_ADDR_0_HIGH, 0x0000,
11380 			0x00000000, 0x0000ffff },
11381 		{ MAC_ADDR_0_LOW, 0x0000,
11382 			0x00000000, 0xffffffff },
11383 		{ MAC_RX_MTU_SIZE, 0x0000,
11384 			0x00000000, 0x0000ffff },
11385 		{ MAC_TX_MODE, 0x0000,
11386 			0x00000000, 0x00000070 },
11387 		{ MAC_TX_LENGTHS, 0x0000,
11388 			0x00000000, 0x00003fff },
11389 		{ MAC_RX_MODE, TG3_FL_NOT_5705,
11390 			0x00000000, 0x000007fc },
11391 		{ MAC_RX_MODE, TG3_FL_5705,
11392 			0x00000000, 0x000007dc },
11393 		{ MAC_HASH_REG_0, 0x0000,
11394 			0x00000000, 0xffffffff },
11395 		{ MAC_HASH_REG_1, 0x0000,
11396 			0x00000000, 0xffffffff },
11397 		{ MAC_HASH_REG_2, 0x0000,
11398 			0x00000000, 0xffffffff },
11399 		{ MAC_HASH_REG_3, 0x0000,
11400 			0x00000000, 0xffffffff },
11401 
11402 		/* Receive Data and Receive BD Initiator Control Registers. */
11403 		{ RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
11404 			0x00000000, 0xffffffff },
11405 		{ RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
11406 			0x00000000, 0xffffffff },
11407 		{ RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
11408 			0x00000000, 0x00000003 },
11409 		{ RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
11410 			0x00000000, 0xffffffff },
11411 		{ RCVDBDI_STD_BD+0, 0x0000,
11412 			0x00000000, 0xffffffff },
11413 		{ RCVDBDI_STD_BD+4, 0x0000,
11414 			0x00000000, 0xffffffff },
11415 		{ RCVDBDI_STD_BD+8, 0x0000,
11416 			0x00000000, 0xffff0002 },
11417 		{ RCVDBDI_STD_BD+0xc, 0x0000,
11418 			0x00000000, 0xffffffff },
11419 
11420 		/* Receive BD Initiator Control Registers. */
11421 		{ RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
11422 			0x00000000, 0xffffffff },
11423 		{ RCVBDI_STD_THRESH, TG3_FL_5705,
11424 			0x00000000, 0x000003ff },
11425 		{ RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
11426 			0x00000000, 0xffffffff },
11427 
11428 		/* Host Coalescing Control Registers. */
11429 		{ HOSTCC_MODE, TG3_FL_NOT_5705,
11430 			0x00000000, 0x00000004 },
11431 		{ HOSTCC_MODE, TG3_FL_5705,
11432 			0x00000000, 0x000000f6 },
11433 		{ HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
11434 			0x00000000, 0xffffffff },
11435 		{ HOSTCC_RXCOL_TICKS, TG3_FL_5705,
11436 			0x00000000, 0x000003ff },
11437 		{ HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
11438 			0x00000000, 0xffffffff },
11439 		{ HOSTCC_TXCOL_TICKS, TG3_FL_5705,
11440 			0x00000000, 0x000003ff },
11441 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
11442 			0x00000000, 0xffffffff },
11443 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11444 			0x00000000, 0x000000ff },
11445 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
11446 			0x00000000, 0xffffffff },
11447 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11448 			0x00000000, 0x000000ff },
11449 		{ HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
11450 			0x00000000, 0xffffffff },
11451 		{ HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
11452 			0x00000000, 0xffffffff },
11453 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11454 			0x00000000, 0xffffffff },
11455 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11456 			0x00000000, 0x000000ff },
11457 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11458 			0x00000000, 0xffffffff },
11459 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11460 			0x00000000, 0x000000ff },
11461 		{ HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
11462 			0x00000000, 0xffffffff },
11463 		{ HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
11464 			0x00000000, 0xffffffff },
11465 		{ HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
11466 			0x00000000, 0xffffffff },
11467 		{ HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
11468 			0x00000000, 0xffffffff },
11469 		{ HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
11470 			0x00000000, 0xffffffff },
11471 		{ HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
11472 			0xffffffff, 0x00000000 },
11473 		{ HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
11474 			0xffffffff, 0x00000000 },
11475 
11476 		/* Buffer Manager Control Registers. */
11477 		{ BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
11478 			0x00000000, 0x007fff80 },
11479 		{ BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
11480 			0x00000000, 0x007fffff },
11481 		{ BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
11482 			0x00000000, 0x0000003f },
11483 		{ BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
11484 			0x00000000, 0x000001ff },
11485 		{ BUFMGR_MB_HIGH_WATER, 0x0000,
11486 			0x00000000, 0x000001ff },
11487 		{ BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
11488 			0xffffffff, 0x00000000 },
11489 		{ BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
11490 			0xffffffff, 0x00000000 },
11491 
11492 		/* Mailbox Registers */
11493 		{ GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
11494 			0x00000000, 0x000001ff },
11495 		{ GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
11496 			0x00000000, 0x000001ff },
11497 		{ GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
11498 			0x00000000, 0x000007ff },
11499 		{ GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
11500 			0x00000000, 0x000001ff },
11501 
11502 		{ 0xffff, 0x0000, 0x00000000, 0x00000000 },
11503 	};
11504 
11505 	is_5705 = is_5750 = 0;
11506 	if (tg3_flag(tp, 5705_PLUS)) {
11507 		is_5705 = 1;
11508 		if (tg3_flag(tp, 5750_PLUS))
11509 			is_5750 = 1;
11510 	}
11511 
11512 	for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
11513 		if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
11514 			continue;
11515 
11516 		if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
11517 			continue;
11518 
11519 		if (tg3_flag(tp, IS_5788) &&
11520 		    (reg_tbl[i].flags & TG3_FL_NOT_5788))
11521 			continue;
11522 
11523 		if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
11524 			continue;
11525 
11526 		offset = (u32) reg_tbl[i].offset;
11527 		read_mask = reg_tbl[i].read_mask;
11528 		write_mask = reg_tbl[i].write_mask;
11529 
11530 		/* Save the original register content */
11531 		save_val = tr32(offset);
11532 
11533 		/* Determine the read-only value. */
11534 		read_val = save_val & read_mask;
11535 
11536 		/* Write zero to the register, then make sure the read-only bits
11537 		 * are not changed and the read/write bits are all zeros.
11538 		 */
11539 		tw32(offset, 0);
11540 
11541 		val = tr32(offset);
11542 
11543 		/* Test the read-only and read/write bits. */
11544 		if (((val & read_mask) != read_val) || (val & write_mask))
11545 			goto out;
11546 
11547 		/* Write ones to all the bits defined by RdMask and WrMask, then
11548 		 * make sure the read-only bits are not changed and the
11549 		 * read/write bits are all ones.
11550 		 */
11551 		tw32(offset, read_mask | write_mask);
11552 
11553 		val = tr32(offset);
11554 
11555 		/* Test the read-only bits. */
11556 		if ((val & read_mask) != read_val)
11557 			goto out;
11558 
11559 		/* Test the read/write bits. */
11560 		if ((val & write_mask) != write_mask)
11561 			goto out;
11562 
11563 		tw32(offset, save_val);
11564 	}
11565 
11566 	return 0;
11567 
11568 out:
11569 	if (netif_msg_hw(tp))
11570 		netdev_err(tp->dev,
11571 			   "Register test failed at offset %x\n", offset);
11572 	tw32(offset, save_val);
11573 	return -EIO;
11574 }
11575 
11576 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
11577 {
11578 	static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
11579 	int i;
11580 	u32 j;
11581 
11582 	for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
11583 		for (j = 0; j < len; j += 4) {
11584 			u32 val;
11585 
11586 			tg3_write_mem(tp, offset + j, test_pattern[i]);
11587 			tg3_read_mem(tp, offset + j, &val);
11588 			if (val != test_pattern[i])
11589 				return -EIO;
11590 		}
11591 	}
11592 	return 0;
11593 }
11594 
11595 static int tg3_test_memory(struct tg3 *tp)
11596 {
11597 	static struct mem_entry {
11598 		u32 offset;
11599 		u32 len;
11600 	} mem_tbl_570x[] = {
11601 		{ 0x00000000, 0x00b50},
11602 		{ 0x00002000, 0x1c000},
11603 		{ 0xffffffff, 0x00000}
11604 	}, mem_tbl_5705[] = {
11605 		{ 0x00000100, 0x0000c},
11606 		{ 0x00000200, 0x00008},
11607 		{ 0x00004000, 0x00800},
11608 		{ 0x00006000, 0x01000},
11609 		{ 0x00008000, 0x02000},
11610 		{ 0x00010000, 0x0e000},
11611 		{ 0xffffffff, 0x00000}
11612 	}, mem_tbl_5755[] = {
11613 		{ 0x00000200, 0x00008},
11614 		{ 0x00004000, 0x00800},
11615 		{ 0x00006000, 0x00800},
11616 		{ 0x00008000, 0x02000},
11617 		{ 0x00010000, 0x0c000},
11618 		{ 0xffffffff, 0x00000}
11619 	}, mem_tbl_5906[] = {
11620 		{ 0x00000200, 0x00008},
11621 		{ 0x00004000, 0x00400},
11622 		{ 0x00006000, 0x00400},
11623 		{ 0x00008000, 0x01000},
11624 		{ 0x00010000, 0x01000},
11625 		{ 0xffffffff, 0x00000}
11626 	}, mem_tbl_5717[] = {
11627 		{ 0x00000200, 0x00008},
11628 		{ 0x00010000, 0x0a000},
11629 		{ 0x00020000, 0x13c00},
11630 		{ 0xffffffff, 0x00000}
11631 	}, mem_tbl_57765[] = {
11632 		{ 0x00000200, 0x00008},
11633 		{ 0x00004000, 0x00800},
11634 		{ 0x00006000, 0x09800},
11635 		{ 0x00010000, 0x0a000},
11636 		{ 0xffffffff, 0x00000}
11637 	};
11638 	struct mem_entry *mem_tbl;
11639 	int err = 0;
11640 	int i;
11641 
11642 	if (tg3_flag(tp, 5717_PLUS))
11643 		mem_tbl = mem_tbl_5717;
11644 	else if (tg3_flag(tp, 57765_CLASS))
11645 		mem_tbl = mem_tbl_57765;
11646 	else if (tg3_flag(tp, 5755_PLUS))
11647 		mem_tbl = mem_tbl_5755;
11648 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11649 		mem_tbl = mem_tbl_5906;
11650 	else if (tg3_flag(tp, 5705_PLUS))
11651 		mem_tbl = mem_tbl_5705;
11652 	else
11653 		mem_tbl = mem_tbl_570x;
11654 
11655 	for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
11656 		err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
11657 		if (err)
11658 			break;
11659 	}
11660 
11661 	return err;
11662 }
11663 
11664 #define TG3_TSO_MSS		500
11665 
11666 #define TG3_TSO_IP_HDR_LEN	20
11667 #define TG3_TSO_TCP_HDR_LEN	20
11668 #define TG3_TSO_TCP_OPT_LEN	12
11669 
11670 static const u8 tg3_tso_header[] = {
11671 0x08, 0x00,
11672 0x45, 0x00, 0x00, 0x00,
11673 0x00, 0x00, 0x40, 0x00,
11674 0x40, 0x06, 0x00, 0x00,
11675 0x0a, 0x00, 0x00, 0x01,
11676 0x0a, 0x00, 0x00, 0x02,
11677 0x0d, 0x00, 0xe0, 0x00,
11678 0x00, 0x00, 0x01, 0x00,
11679 0x00, 0x00, 0x02, 0x00,
11680 0x80, 0x10, 0x10, 0x00,
11681 0x14, 0x09, 0x00, 0x00,
11682 0x01, 0x01, 0x08, 0x0a,
11683 0x11, 0x11, 0x11, 0x11,
11684 0x11, 0x11, 0x11, 0x11,
11685 };
11686 
11687 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
11688 {
11689 	u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
11690 	u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
11691 	u32 budget;
11692 	struct sk_buff *skb;
11693 	u8 *tx_data, *rx_data;
11694 	dma_addr_t map;
11695 	int num_pkts, tx_len, rx_len, i, err;
11696 	struct tg3_rx_buffer_desc *desc;
11697 	struct tg3_napi *tnapi, *rnapi;
11698 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
11699 
11700 	tnapi = &tp->napi[0];
11701 	rnapi = &tp->napi[0];
11702 	if (tp->irq_cnt > 1) {
11703 		if (tg3_flag(tp, ENABLE_RSS))
11704 			rnapi = &tp->napi[1];
11705 		if (tg3_flag(tp, ENABLE_TSS))
11706 			tnapi = &tp->napi[1];
11707 	}
11708 	coal_now = tnapi->coal_now | rnapi->coal_now;
11709 
11710 	err = -EIO;
11711 
11712 	tx_len = pktsz;
11713 	skb = netdev_alloc_skb(tp->dev, tx_len);
11714 	if (!skb)
11715 		return -ENOMEM;
11716 
11717 	tx_data = skb_put(skb, tx_len);
11718 	memcpy(tx_data, tp->dev->dev_addr, 6);
11719 	memset(tx_data + 6, 0x0, 8);
11720 
11721 	tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
11722 
11723 	if (tso_loopback) {
11724 		struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
11725 
11726 		u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
11727 			      TG3_TSO_TCP_OPT_LEN;
11728 
11729 		memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
11730 		       sizeof(tg3_tso_header));
11731 		mss = TG3_TSO_MSS;
11732 
11733 		val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
11734 		num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
11735 
11736 		/* Set the total length field in the IP header */
11737 		iph->tot_len = htons((u16)(mss + hdr_len));
11738 
11739 		base_flags = (TXD_FLAG_CPU_PRE_DMA |
11740 			      TXD_FLAG_CPU_POST_DMA);
11741 
11742 		if (tg3_flag(tp, HW_TSO_1) ||
11743 		    tg3_flag(tp, HW_TSO_2) ||
11744 		    tg3_flag(tp, HW_TSO_3)) {
11745 			struct tcphdr *th;
11746 			val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
11747 			th = (struct tcphdr *)&tx_data[val];
11748 			th->check = 0;
11749 		} else
11750 			base_flags |= TXD_FLAG_TCPUDP_CSUM;
11751 
11752 		if (tg3_flag(tp, HW_TSO_3)) {
11753 			mss |= (hdr_len & 0xc) << 12;
11754 			if (hdr_len & 0x10)
11755 				base_flags |= 0x00000010;
11756 			base_flags |= (hdr_len & 0x3e0) << 5;
11757 		} else if (tg3_flag(tp, HW_TSO_2))
11758 			mss |= hdr_len << 9;
11759 		else if (tg3_flag(tp, HW_TSO_1) ||
11760 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
11761 			mss |= (TG3_TSO_TCP_OPT_LEN << 9);
11762 		} else {
11763 			base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
11764 		}
11765 
11766 		data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
11767 	} else {
11768 		num_pkts = 1;
11769 		data_off = ETH_HLEN;
11770 
11771 		if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
11772 		    tx_len > VLAN_ETH_FRAME_LEN)
11773 			base_flags |= TXD_FLAG_JMB_PKT;
11774 	}
11775 
11776 	for (i = data_off; i < tx_len; i++)
11777 		tx_data[i] = (u8) (i & 0xff);
11778 
11779 	map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
11780 	if (pci_dma_mapping_error(tp->pdev, map)) {
11781 		dev_kfree_skb(skb);
11782 		return -EIO;
11783 	}
11784 
11785 	val = tnapi->tx_prod;
11786 	tnapi->tx_buffers[val].skb = skb;
11787 	dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
11788 
11789 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11790 	       rnapi->coal_now);
11791 
11792 	udelay(10);
11793 
11794 	rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
11795 
11796 	budget = tg3_tx_avail(tnapi);
11797 	if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
11798 			    base_flags | TXD_FLAG_END, mss, 0)) {
11799 		tnapi->tx_buffers[val].skb = NULL;
11800 		dev_kfree_skb(skb);
11801 		return -EIO;
11802 	}
11803 
11804 	tnapi->tx_prod++;
11805 
11806 	/* Sync BD data before updating mailbox */
11807 	wmb();
11808 
11809 	tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
11810 	tr32_mailbox(tnapi->prodmbox);
11811 
11812 	udelay(10);
11813 
11814 	/* 350 usec to allow enough time on some 10/100 Mbps devices.  */
11815 	for (i = 0; i < 35; i++) {
11816 		tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11817 		       coal_now);
11818 
11819 		udelay(10);
11820 
11821 		tx_idx = tnapi->hw_status->idx[0].tx_consumer;
11822 		rx_idx = rnapi->hw_status->idx[0].rx_producer;
11823 		if ((tx_idx == tnapi->tx_prod) &&
11824 		    (rx_idx == (rx_start_idx + num_pkts)))
11825 			break;
11826 	}
11827 
11828 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
11829 	dev_kfree_skb(skb);
11830 
11831 	if (tx_idx != tnapi->tx_prod)
11832 		goto out;
11833 
11834 	if (rx_idx != rx_start_idx + num_pkts)
11835 		goto out;
11836 
11837 	val = data_off;
11838 	while (rx_idx != rx_start_idx) {
11839 		desc = &rnapi->rx_rcb[rx_start_idx++];
11840 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
11841 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
11842 
11843 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
11844 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
11845 			goto out;
11846 
11847 		rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
11848 			 - ETH_FCS_LEN;
11849 
11850 		if (!tso_loopback) {
11851 			if (rx_len != tx_len)
11852 				goto out;
11853 
11854 			if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
11855 				if (opaque_key != RXD_OPAQUE_RING_STD)
11856 					goto out;
11857 			} else {
11858 				if (opaque_key != RXD_OPAQUE_RING_JUMBO)
11859 					goto out;
11860 			}
11861 		} else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
11862 			   (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
11863 			    >> RXD_TCPCSUM_SHIFT != 0xffff) {
11864 			goto out;
11865 		}
11866 
11867 		if (opaque_key == RXD_OPAQUE_RING_STD) {
11868 			rx_data = tpr->rx_std_buffers[desc_idx].data;
11869 			map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
11870 					     mapping);
11871 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
11872 			rx_data = tpr->rx_jmb_buffers[desc_idx].data;
11873 			map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
11874 					     mapping);
11875 		} else
11876 			goto out;
11877 
11878 		pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
11879 					    PCI_DMA_FROMDEVICE);
11880 
11881 		rx_data += TG3_RX_OFFSET(tp);
11882 		for (i = data_off; i < rx_len; i++, val++) {
11883 			if (*(rx_data + i) != (u8) (val & 0xff))
11884 				goto out;
11885 		}
11886 	}
11887 
11888 	err = 0;
11889 
11890 	/* tg3_free_rings will unmap and free the rx_data */
11891 out:
11892 	return err;
11893 }
11894 
11895 #define TG3_STD_LOOPBACK_FAILED		1
11896 #define TG3_JMB_LOOPBACK_FAILED		2
11897 #define TG3_TSO_LOOPBACK_FAILED		4
11898 #define TG3_LOOPBACK_FAILED \
11899 	(TG3_STD_LOOPBACK_FAILED | \
11900 	 TG3_JMB_LOOPBACK_FAILED | \
11901 	 TG3_TSO_LOOPBACK_FAILED)
11902 
11903 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
11904 {
11905 	int err = -EIO;
11906 	u32 eee_cap;
11907 	u32 jmb_pkt_sz = 9000;
11908 
11909 	if (tp->dma_limit)
11910 		jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
11911 
11912 	eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
11913 	tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11914 
11915 	if (!netif_running(tp->dev)) {
11916 		data[0] = TG3_LOOPBACK_FAILED;
11917 		data[1] = TG3_LOOPBACK_FAILED;
11918 		if (do_extlpbk)
11919 			data[2] = TG3_LOOPBACK_FAILED;
11920 		goto done;
11921 	}
11922 
11923 	err = tg3_reset_hw(tp, 1);
11924 	if (err) {
11925 		data[0] = TG3_LOOPBACK_FAILED;
11926 		data[1] = TG3_LOOPBACK_FAILED;
11927 		if (do_extlpbk)
11928 			data[2] = TG3_LOOPBACK_FAILED;
11929 		goto done;
11930 	}
11931 
11932 	if (tg3_flag(tp, ENABLE_RSS)) {
11933 		int i;
11934 
11935 		/* Reroute all rx packets to the 1st queue */
11936 		for (i = MAC_RSS_INDIR_TBL_0;
11937 		     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
11938 			tw32(i, 0x0);
11939 	}
11940 
11941 	/* HW errata - mac loopback fails in some cases on 5780.
11942 	 * Normal traffic and PHY loopback are not affected by
11943 	 * errata.  Also, the MAC loopback test is deprecated for
11944 	 * all newer ASIC revisions.
11945 	 */
11946 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
11947 	    !tg3_flag(tp, CPMU_PRESENT)) {
11948 		tg3_mac_loopback(tp, true);
11949 
11950 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
11951 			data[0] |= TG3_STD_LOOPBACK_FAILED;
11952 
11953 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
11954 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
11955 			data[0] |= TG3_JMB_LOOPBACK_FAILED;
11956 
11957 		tg3_mac_loopback(tp, false);
11958 	}
11959 
11960 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11961 	    !tg3_flag(tp, USE_PHYLIB)) {
11962 		int i;
11963 
11964 		tg3_phy_lpbk_set(tp, 0, false);
11965 
11966 		/* Wait for link */
11967 		for (i = 0; i < 100; i++) {
11968 			if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
11969 				break;
11970 			mdelay(1);
11971 		}
11972 
11973 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
11974 			data[1] |= TG3_STD_LOOPBACK_FAILED;
11975 		if (tg3_flag(tp, TSO_CAPABLE) &&
11976 		    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
11977 			data[1] |= TG3_TSO_LOOPBACK_FAILED;
11978 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
11979 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
11980 			data[1] |= TG3_JMB_LOOPBACK_FAILED;
11981 
11982 		if (do_extlpbk) {
11983 			tg3_phy_lpbk_set(tp, 0, true);
11984 
11985 			/* All link indications report up, but the hardware
11986 			 * isn't really ready for about 20 msec.  Double it
11987 			 * to be sure.
11988 			 */
11989 			mdelay(40);
11990 
11991 			if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
11992 				data[2] |= TG3_STD_LOOPBACK_FAILED;
11993 			if (tg3_flag(tp, TSO_CAPABLE) &&
11994 			    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
11995 				data[2] |= TG3_TSO_LOOPBACK_FAILED;
11996 			if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
11997 			    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
11998 				data[2] |= TG3_JMB_LOOPBACK_FAILED;
11999 		}
12000 
12001 		/* Re-enable gphy autopowerdown. */
12002 		if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
12003 			tg3_phy_toggle_apd(tp, true);
12004 	}
12005 
12006 	err = (data[0] | data[1] | data[2]) ? -EIO : 0;
12007 
12008 done:
12009 	tp->phy_flags |= eee_cap;
12010 
12011 	return err;
12012 }
12013 
12014 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
12015 			  u64 *data)
12016 {
12017 	struct tg3 *tp = netdev_priv(dev);
12018 	bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
12019 
12020 	if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
12021 	    tg3_power_up(tp)) {
12022 		etest->flags |= ETH_TEST_FL_FAILED;
12023 		memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
12024 		return;
12025 	}
12026 
12027 	memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
12028 
12029 	if (tg3_test_nvram(tp) != 0) {
12030 		etest->flags |= ETH_TEST_FL_FAILED;
12031 		data[0] = 1;
12032 	}
12033 	if (!doextlpbk && tg3_test_link(tp)) {
12034 		etest->flags |= ETH_TEST_FL_FAILED;
12035 		data[1] = 1;
12036 	}
12037 	if (etest->flags & ETH_TEST_FL_OFFLINE) {
12038 		int err, err2 = 0, irq_sync = 0;
12039 
12040 		if (netif_running(dev)) {
12041 			tg3_phy_stop(tp);
12042 			tg3_netif_stop(tp);
12043 			irq_sync = 1;
12044 		}
12045 
12046 		tg3_full_lock(tp, irq_sync);
12047 
12048 		tg3_halt(tp, RESET_KIND_SUSPEND, 1);
12049 		err = tg3_nvram_lock(tp);
12050 		tg3_halt_cpu(tp, RX_CPU_BASE);
12051 		if (!tg3_flag(tp, 5705_PLUS))
12052 			tg3_halt_cpu(tp, TX_CPU_BASE);
12053 		if (!err)
12054 			tg3_nvram_unlock(tp);
12055 
12056 		if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
12057 			tg3_phy_reset(tp);
12058 
12059 		if (tg3_test_registers(tp) != 0) {
12060 			etest->flags |= ETH_TEST_FL_FAILED;
12061 			data[2] = 1;
12062 		}
12063 
12064 		if (tg3_test_memory(tp) != 0) {
12065 			etest->flags |= ETH_TEST_FL_FAILED;
12066 			data[3] = 1;
12067 		}
12068 
12069 		if (doextlpbk)
12070 			etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
12071 
12072 		if (tg3_test_loopback(tp, &data[4], doextlpbk))
12073 			etest->flags |= ETH_TEST_FL_FAILED;
12074 
12075 		tg3_full_unlock(tp);
12076 
12077 		if (tg3_test_interrupt(tp) != 0) {
12078 			etest->flags |= ETH_TEST_FL_FAILED;
12079 			data[7] = 1;
12080 		}
12081 
12082 		tg3_full_lock(tp, 0);
12083 
12084 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12085 		if (netif_running(dev)) {
12086 			tg3_flag_set(tp, INIT_COMPLETE);
12087 			err2 = tg3_restart_hw(tp, 1);
12088 			if (!err2)
12089 				tg3_netif_start(tp);
12090 		}
12091 
12092 		tg3_full_unlock(tp);
12093 
12094 		if (irq_sync && !err2)
12095 			tg3_phy_start(tp);
12096 	}
12097 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
12098 		tg3_power_down(tp);
12099 
12100 }
12101 
12102 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
12103 {
12104 	struct mii_ioctl_data *data = if_mii(ifr);
12105 	struct tg3 *tp = netdev_priv(dev);
12106 	int err;
12107 
12108 	if (tg3_flag(tp, USE_PHYLIB)) {
12109 		struct phy_device *phydev;
12110 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12111 			return -EAGAIN;
12112 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
12113 		return phy_mii_ioctl(phydev, ifr, cmd);
12114 	}
12115 
12116 	switch (cmd) {
12117 	case SIOCGMIIPHY:
12118 		data->phy_id = tp->phy_addr;
12119 
12120 		/* fallthru */
12121 	case SIOCGMIIREG: {
12122 		u32 mii_regval;
12123 
12124 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12125 			break;			/* We have no PHY */
12126 
12127 		if (!netif_running(dev))
12128 			return -EAGAIN;
12129 
12130 		spin_lock_bh(&tp->lock);
12131 		err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
12132 		spin_unlock_bh(&tp->lock);
12133 
12134 		data->val_out = mii_regval;
12135 
12136 		return err;
12137 	}
12138 
12139 	case SIOCSMIIREG:
12140 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12141 			break;			/* We have no PHY */
12142 
12143 		if (!netif_running(dev))
12144 			return -EAGAIN;
12145 
12146 		spin_lock_bh(&tp->lock);
12147 		err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
12148 		spin_unlock_bh(&tp->lock);
12149 
12150 		return err;
12151 
12152 	default:
12153 		/* do nothing */
12154 		break;
12155 	}
12156 	return -EOPNOTSUPP;
12157 }
12158 
12159 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12160 {
12161 	struct tg3 *tp = netdev_priv(dev);
12162 
12163 	memcpy(ec, &tp->coal, sizeof(*ec));
12164 	return 0;
12165 }
12166 
12167 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12168 {
12169 	struct tg3 *tp = netdev_priv(dev);
12170 	u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
12171 	u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
12172 
12173 	if (!tg3_flag(tp, 5705_PLUS)) {
12174 		max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
12175 		max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
12176 		max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
12177 		min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
12178 	}
12179 
12180 	if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
12181 	    (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
12182 	    (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
12183 	    (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
12184 	    (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
12185 	    (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
12186 	    (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
12187 	    (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
12188 	    (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
12189 	    (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
12190 		return -EINVAL;
12191 
12192 	/* No rx interrupts will be generated if both are zero */
12193 	if ((ec->rx_coalesce_usecs == 0) &&
12194 	    (ec->rx_max_coalesced_frames == 0))
12195 		return -EINVAL;
12196 
12197 	/* No tx interrupts will be generated if both are zero */
12198 	if ((ec->tx_coalesce_usecs == 0) &&
12199 	    (ec->tx_max_coalesced_frames == 0))
12200 		return -EINVAL;
12201 
12202 	/* Only copy relevant parameters, ignore all others. */
12203 	tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
12204 	tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
12205 	tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
12206 	tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
12207 	tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
12208 	tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
12209 	tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
12210 	tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
12211 	tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
12212 
12213 	if (netif_running(dev)) {
12214 		tg3_full_lock(tp, 0);
12215 		__tg3_set_coalesce(tp, &tp->coal);
12216 		tg3_full_unlock(tp);
12217 	}
12218 	return 0;
12219 }
12220 
12221 static const struct ethtool_ops tg3_ethtool_ops = {
12222 	.get_settings		= tg3_get_settings,
12223 	.set_settings		= tg3_set_settings,
12224 	.get_drvinfo		= tg3_get_drvinfo,
12225 	.get_regs_len		= tg3_get_regs_len,
12226 	.get_regs		= tg3_get_regs,
12227 	.get_wol		= tg3_get_wol,
12228 	.set_wol		= tg3_set_wol,
12229 	.get_msglevel		= tg3_get_msglevel,
12230 	.set_msglevel		= tg3_set_msglevel,
12231 	.nway_reset		= tg3_nway_reset,
12232 	.get_link		= ethtool_op_get_link,
12233 	.get_eeprom_len		= tg3_get_eeprom_len,
12234 	.get_eeprom		= tg3_get_eeprom,
12235 	.set_eeprom		= tg3_set_eeprom,
12236 	.get_ringparam		= tg3_get_ringparam,
12237 	.set_ringparam		= tg3_set_ringparam,
12238 	.get_pauseparam		= tg3_get_pauseparam,
12239 	.set_pauseparam		= tg3_set_pauseparam,
12240 	.self_test		= tg3_self_test,
12241 	.get_strings		= tg3_get_strings,
12242 	.set_phys_id		= tg3_set_phys_id,
12243 	.get_ethtool_stats	= tg3_get_ethtool_stats,
12244 	.get_coalesce		= tg3_get_coalesce,
12245 	.set_coalesce		= tg3_set_coalesce,
12246 	.get_sset_count		= tg3_get_sset_count,
12247 	.get_rxnfc		= tg3_get_rxnfc,
12248 	.get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
12249 	.get_rxfh_indir		= tg3_get_rxfh_indir,
12250 	.set_rxfh_indir		= tg3_set_rxfh_indir,
12251 };
12252 
12253 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
12254 						struct rtnl_link_stats64 *stats)
12255 {
12256 	struct tg3 *tp = netdev_priv(dev);
12257 
12258 	if (!tp->hw_stats)
12259 		return &tp->net_stats_prev;
12260 
12261 	spin_lock_bh(&tp->lock);
12262 	tg3_get_nstats(tp, stats);
12263 	spin_unlock_bh(&tp->lock);
12264 
12265 	return stats;
12266 }
12267 
12268 static void tg3_set_rx_mode(struct net_device *dev)
12269 {
12270 	struct tg3 *tp = netdev_priv(dev);
12271 
12272 	if (!netif_running(dev))
12273 		return;
12274 
12275 	tg3_full_lock(tp, 0);
12276 	__tg3_set_rx_mode(dev);
12277 	tg3_full_unlock(tp);
12278 }
12279 
12280 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
12281 			       int new_mtu)
12282 {
12283 	dev->mtu = new_mtu;
12284 
12285 	if (new_mtu > ETH_DATA_LEN) {
12286 		if (tg3_flag(tp, 5780_CLASS)) {
12287 			netdev_update_features(dev);
12288 			tg3_flag_clear(tp, TSO_CAPABLE);
12289 		} else {
12290 			tg3_flag_set(tp, JUMBO_RING_ENABLE);
12291 		}
12292 	} else {
12293 		if (tg3_flag(tp, 5780_CLASS)) {
12294 			tg3_flag_set(tp, TSO_CAPABLE);
12295 			netdev_update_features(dev);
12296 		}
12297 		tg3_flag_clear(tp, JUMBO_RING_ENABLE);
12298 	}
12299 }
12300 
12301 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
12302 {
12303 	struct tg3 *tp = netdev_priv(dev);
12304 	int err, reset_phy = 0;
12305 
12306 	if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
12307 		return -EINVAL;
12308 
12309 	if (!netif_running(dev)) {
12310 		/* We'll just catch it later when the
12311 		 * device is up'd.
12312 		 */
12313 		tg3_set_mtu(dev, tp, new_mtu);
12314 		return 0;
12315 	}
12316 
12317 	tg3_phy_stop(tp);
12318 
12319 	tg3_netif_stop(tp);
12320 
12321 	tg3_full_lock(tp, 1);
12322 
12323 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12324 
12325 	tg3_set_mtu(dev, tp, new_mtu);
12326 
12327 	/* Reset PHY, otherwise the read DMA engine will be in a mode that
12328 	 * breaks all requests to 256 bytes.
12329 	 */
12330 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
12331 		reset_phy = 1;
12332 
12333 	err = tg3_restart_hw(tp, reset_phy);
12334 
12335 	if (!err)
12336 		tg3_netif_start(tp);
12337 
12338 	tg3_full_unlock(tp);
12339 
12340 	if (!err)
12341 		tg3_phy_start(tp);
12342 
12343 	return err;
12344 }
12345 
12346 static const struct net_device_ops tg3_netdev_ops = {
12347 	.ndo_open		= tg3_open,
12348 	.ndo_stop		= tg3_close,
12349 	.ndo_start_xmit		= tg3_start_xmit,
12350 	.ndo_get_stats64	= tg3_get_stats64,
12351 	.ndo_validate_addr	= eth_validate_addr,
12352 	.ndo_set_rx_mode	= tg3_set_rx_mode,
12353 	.ndo_set_mac_address	= tg3_set_mac_addr,
12354 	.ndo_do_ioctl		= tg3_ioctl,
12355 	.ndo_tx_timeout		= tg3_tx_timeout,
12356 	.ndo_change_mtu		= tg3_change_mtu,
12357 	.ndo_fix_features	= tg3_fix_features,
12358 	.ndo_set_features	= tg3_set_features,
12359 #ifdef CONFIG_NET_POLL_CONTROLLER
12360 	.ndo_poll_controller	= tg3_poll_controller,
12361 #endif
12362 };
12363 
12364 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
12365 {
12366 	u32 cursize, val, magic;
12367 
12368 	tp->nvram_size = EEPROM_CHIP_SIZE;
12369 
12370 	if (tg3_nvram_read(tp, 0, &magic) != 0)
12371 		return;
12372 
12373 	if ((magic != TG3_EEPROM_MAGIC) &&
12374 	    ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
12375 	    ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
12376 		return;
12377 
12378 	/*
12379 	 * Size the chip by reading offsets at increasing powers of two.
12380 	 * When we encounter our validation signature, we know the addressing
12381 	 * has wrapped around, and thus have our chip size.
12382 	 */
12383 	cursize = 0x10;
12384 
12385 	while (cursize < tp->nvram_size) {
12386 		if (tg3_nvram_read(tp, cursize, &val) != 0)
12387 			return;
12388 
12389 		if (val == magic)
12390 			break;
12391 
12392 		cursize <<= 1;
12393 	}
12394 
12395 	tp->nvram_size = cursize;
12396 }
12397 
12398 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
12399 {
12400 	u32 val;
12401 
12402 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
12403 		return;
12404 
12405 	/* Selfboot format */
12406 	if (val != TG3_EEPROM_MAGIC) {
12407 		tg3_get_eeprom_size(tp);
12408 		return;
12409 	}
12410 
12411 	if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
12412 		if (val != 0) {
12413 			/* This is confusing.  We want to operate on the
12414 			 * 16-bit value at offset 0xf2.  The tg3_nvram_read()
12415 			 * call will read from NVRAM and byteswap the data
12416 			 * according to the byteswapping settings for all
12417 			 * other register accesses.  This ensures the data we
12418 			 * want will always reside in the lower 16-bits.
12419 			 * However, the data in NVRAM is in LE format, which
12420 			 * means the data from the NVRAM read will always be
12421 			 * opposite the endianness of the CPU.  The 16-bit
12422 			 * byteswap then brings the data to CPU endianness.
12423 			 */
12424 			tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
12425 			return;
12426 		}
12427 	}
12428 	tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12429 }
12430 
12431 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
12432 {
12433 	u32 nvcfg1;
12434 
12435 	nvcfg1 = tr32(NVRAM_CFG1);
12436 	if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
12437 		tg3_flag_set(tp, FLASH);
12438 	} else {
12439 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12440 		tw32(NVRAM_CFG1, nvcfg1);
12441 	}
12442 
12443 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
12444 	    tg3_flag(tp, 5780_CLASS)) {
12445 		switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
12446 		case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
12447 			tp->nvram_jedecnum = JEDEC_ATMEL;
12448 			tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
12449 			tg3_flag_set(tp, NVRAM_BUFFERED);
12450 			break;
12451 		case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
12452 			tp->nvram_jedecnum = JEDEC_ATMEL;
12453 			tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
12454 			break;
12455 		case FLASH_VENDOR_ATMEL_EEPROM:
12456 			tp->nvram_jedecnum = JEDEC_ATMEL;
12457 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12458 			tg3_flag_set(tp, NVRAM_BUFFERED);
12459 			break;
12460 		case FLASH_VENDOR_ST:
12461 			tp->nvram_jedecnum = JEDEC_ST;
12462 			tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
12463 			tg3_flag_set(tp, NVRAM_BUFFERED);
12464 			break;
12465 		case FLASH_VENDOR_SAIFUN:
12466 			tp->nvram_jedecnum = JEDEC_SAIFUN;
12467 			tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
12468 			break;
12469 		case FLASH_VENDOR_SST_SMALL:
12470 		case FLASH_VENDOR_SST_LARGE:
12471 			tp->nvram_jedecnum = JEDEC_SST;
12472 			tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
12473 			break;
12474 		}
12475 	} else {
12476 		tp->nvram_jedecnum = JEDEC_ATMEL;
12477 		tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
12478 		tg3_flag_set(tp, NVRAM_BUFFERED);
12479 	}
12480 }
12481 
12482 static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
12483 {
12484 	switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
12485 	case FLASH_5752PAGE_SIZE_256:
12486 		tp->nvram_pagesize = 256;
12487 		break;
12488 	case FLASH_5752PAGE_SIZE_512:
12489 		tp->nvram_pagesize = 512;
12490 		break;
12491 	case FLASH_5752PAGE_SIZE_1K:
12492 		tp->nvram_pagesize = 1024;
12493 		break;
12494 	case FLASH_5752PAGE_SIZE_2K:
12495 		tp->nvram_pagesize = 2048;
12496 		break;
12497 	case FLASH_5752PAGE_SIZE_4K:
12498 		tp->nvram_pagesize = 4096;
12499 		break;
12500 	case FLASH_5752PAGE_SIZE_264:
12501 		tp->nvram_pagesize = 264;
12502 		break;
12503 	case FLASH_5752PAGE_SIZE_528:
12504 		tp->nvram_pagesize = 528;
12505 		break;
12506 	}
12507 }
12508 
12509 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
12510 {
12511 	u32 nvcfg1;
12512 
12513 	nvcfg1 = tr32(NVRAM_CFG1);
12514 
12515 	/* NVRAM protection for TPM */
12516 	if (nvcfg1 & (1 << 27))
12517 		tg3_flag_set(tp, PROTECTED_NVRAM);
12518 
12519 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12520 	case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
12521 	case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
12522 		tp->nvram_jedecnum = JEDEC_ATMEL;
12523 		tg3_flag_set(tp, NVRAM_BUFFERED);
12524 		break;
12525 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12526 		tp->nvram_jedecnum = JEDEC_ATMEL;
12527 		tg3_flag_set(tp, NVRAM_BUFFERED);
12528 		tg3_flag_set(tp, FLASH);
12529 		break;
12530 	case FLASH_5752VENDOR_ST_M45PE10:
12531 	case FLASH_5752VENDOR_ST_M45PE20:
12532 	case FLASH_5752VENDOR_ST_M45PE40:
12533 		tp->nvram_jedecnum = JEDEC_ST;
12534 		tg3_flag_set(tp, NVRAM_BUFFERED);
12535 		tg3_flag_set(tp, FLASH);
12536 		break;
12537 	}
12538 
12539 	if (tg3_flag(tp, FLASH)) {
12540 		tg3_nvram_get_pagesize(tp, nvcfg1);
12541 	} else {
12542 		/* For eeprom, set pagesize to maximum eeprom size */
12543 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12544 
12545 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12546 		tw32(NVRAM_CFG1, nvcfg1);
12547 	}
12548 }
12549 
12550 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
12551 {
12552 	u32 nvcfg1, protect = 0;
12553 
12554 	nvcfg1 = tr32(NVRAM_CFG1);
12555 
12556 	/* NVRAM protection for TPM */
12557 	if (nvcfg1 & (1 << 27)) {
12558 		tg3_flag_set(tp, PROTECTED_NVRAM);
12559 		protect = 1;
12560 	}
12561 
12562 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12563 	switch (nvcfg1) {
12564 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
12565 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
12566 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
12567 	case FLASH_5755VENDOR_ATMEL_FLASH_5:
12568 		tp->nvram_jedecnum = JEDEC_ATMEL;
12569 		tg3_flag_set(tp, NVRAM_BUFFERED);
12570 		tg3_flag_set(tp, FLASH);
12571 		tp->nvram_pagesize = 264;
12572 		if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
12573 		    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
12574 			tp->nvram_size = (protect ? 0x3e200 :
12575 					  TG3_NVRAM_SIZE_512KB);
12576 		else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
12577 			tp->nvram_size = (protect ? 0x1f200 :
12578 					  TG3_NVRAM_SIZE_256KB);
12579 		else
12580 			tp->nvram_size = (protect ? 0x1f200 :
12581 					  TG3_NVRAM_SIZE_128KB);
12582 		break;
12583 	case FLASH_5752VENDOR_ST_M45PE10:
12584 	case FLASH_5752VENDOR_ST_M45PE20:
12585 	case FLASH_5752VENDOR_ST_M45PE40:
12586 		tp->nvram_jedecnum = JEDEC_ST;
12587 		tg3_flag_set(tp, NVRAM_BUFFERED);
12588 		tg3_flag_set(tp, FLASH);
12589 		tp->nvram_pagesize = 256;
12590 		if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
12591 			tp->nvram_size = (protect ?
12592 					  TG3_NVRAM_SIZE_64KB :
12593 					  TG3_NVRAM_SIZE_128KB);
12594 		else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
12595 			tp->nvram_size = (protect ?
12596 					  TG3_NVRAM_SIZE_64KB :
12597 					  TG3_NVRAM_SIZE_256KB);
12598 		else
12599 			tp->nvram_size = (protect ?
12600 					  TG3_NVRAM_SIZE_128KB :
12601 					  TG3_NVRAM_SIZE_512KB);
12602 		break;
12603 	}
12604 }
12605 
12606 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
12607 {
12608 	u32 nvcfg1;
12609 
12610 	nvcfg1 = tr32(NVRAM_CFG1);
12611 
12612 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12613 	case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
12614 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
12615 	case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
12616 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
12617 		tp->nvram_jedecnum = JEDEC_ATMEL;
12618 		tg3_flag_set(tp, NVRAM_BUFFERED);
12619 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12620 
12621 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12622 		tw32(NVRAM_CFG1, nvcfg1);
12623 		break;
12624 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12625 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
12626 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
12627 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
12628 		tp->nvram_jedecnum = JEDEC_ATMEL;
12629 		tg3_flag_set(tp, NVRAM_BUFFERED);
12630 		tg3_flag_set(tp, FLASH);
12631 		tp->nvram_pagesize = 264;
12632 		break;
12633 	case FLASH_5752VENDOR_ST_M45PE10:
12634 	case FLASH_5752VENDOR_ST_M45PE20:
12635 	case FLASH_5752VENDOR_ST_M45PE40:
12636 		tp->nvram_jedecnum = JEDEC_ST;
12637 		tg3_flag_set(tp, NVRAM_BUFFERED);
12638 		tg3_flag_set(tp, FLASH);
12639 		tp->nvram_pagesize = 256;
12640 		break;
12641 	}
12642 }
12643 
12644 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
12645 {
12646 	u32 nvcfg1, protect = 0;
12647 
12648 	nvcfg1 = tr32(NVRAM_CFG1);
12649 
12650 	/* NVRAM protection for TPM */
12651 	if (nvcfg1 & (1 << 27)) {
12652 		tg3_flag_set(tp, PROTECTED_NVRAM);
12653 		protect = 1;
12654 	}
12655 
12656 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12657 	switch (nvcfg1) {
12658 	case FLASH_5761VENDOR_ATMEL_ADB021D:
12659 	case FLASH_5761VENDOR_ATMEL_ADB041D:
12660 	case FLASH_5761VENDOR_ATMEL_ADB081D:
12661 	case FLASH_5761VENDOR_ATMEL_ADB161D:
12662 	case FLASH_5761VENDOR_ATMEL_MDB021D:
12663 	case FLASH_5761VENDOR_ATMEL_MDB041D:
12664 	case FLASH_5761VENDOR_ATMEL_MDB081D:
12665 	case FLASH_5761VENDOR_ATMEL_MDB161D:
12666 		tp->nvram_jedecnum = JEDEC_ATMEL;
12667 		tg3_flag_set(tp, NVRAM_BUFFERED);
12668 		tg3_flag_set(tp, FLASH);
12669 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
12670 		tp->nvram_pagesize = 256;
12671 		break;
12672 	case FLASH_5761VENDOR_ST_A_M45PE20:
12673 	case FLASH_5761VENDOR_ST_A_M45PE40:
12674 	case FLASH_5761VENDOR_ST_A_M45PE80:
12675 	case FLASH_5761VENDOR_ST_A_M45PE16:
12676 	case FLASH_5761VENDOR_ST_M_M45PE20:
12677 	case FLASH_5761VENDOR_ST_M_M45PE40:
12678 	case FLASH_5761VENDOR_ST_M_M45PE80:
12679 	case FLASH_5761VENDOR_ST_M_M45PE16:
12680 		tp->nvram_jedecnum = JEDEC_ST;
12681 		tg3_flag_set(tp, NVRAM_BUFFERED);
12682 		tg3_flag_set(tp, FLASH);
12683 		tp->nvram_pagesize = 256;
12684 		break;
12685 	}
12686 
12687 	if (protect) {
12688 		tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
12689 	} else {
12690 		switch (nvcfg1) {
12691 		case FLASH_5761VENDOR_ATMEL_ADB161D:
12692 		case FLASH_5761VENDOR_ATMEL_MDB161D:
12693 		case FLASH_5761VENDOR_ST_A_M45PE16:
12694 		case FLASH_5761VENDOR_ST_M_M45PE16:
12695 			tp->nvram_size = TG3_NVRAM_SIZE_2MB;
12696 			break;
12697 		case FLASH_5761VENDOR_ATMEL_ADB081D:
12698 		case FLASH_5761VENDOR_ATMEL_MDB081D:
12699 		case FLASH_5761VENDOR_ST_A_M45PE80:
12700 		case FLASH_5761VENDOR_ST_M_M45PE80:
12701 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12702 			break;
12703 		case FLASH_5761VENDOR_ATMEL_ADB041D:
12704 		case FLASH_5761VENDOR_ATMEL_MDB041D:
12705 		case FLASH_5761VENDOR_ST_A_M45PE40:
12706 		case FLASH_5761VENDOR_ST_M_M45PE40:
12707 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12708 			break;
12709 		case FLASH_5761VENDOR_ATMEL_ADB021D:
12710 		case FLASH_5761VENDOR_ATMEL_MDB021D:
12711 		case FLASH_5761VENDOR_ST_A_M45PE20:
12712 		case FLASH_5761VENDOR_ST_M_M45PE20:
12713 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12714 			break;
12715 		}
12716 	}
12717 }
12718 
12719 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
12720 {
12721 	tp->nvram_jedecnum = JEDEC_ATMEL;
12722 	tg3_flag_set(tp, NVRAM_BUFFERED);
12723 	tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12724 }
12725 
12726 static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp)
12727 {
12728 	u32 nvcfg1;
12729 
12730 	nvcfg1 = tr32(NVRAM_CFG1);
12731 
12732 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12733 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
12734 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
12735 		tp->nvram_jedecnum = JEDEC_ATMEL;
12736 		tg3_flag_set(tp, NVRAM_BUFFERED);
12737 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12738 
12739 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12740 		tw32(NVRAM_CFG1, nvcfg1);
12741 		return;
12742 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12743 	case FLASH_57780VENDOR_ATMEL_AT45DB011D:
12744 	case FLASH_57780VENDOR_ATMEL_AT45DB011B:
12745 	case FLASH_57780VENDOR_ATMEL_AT45DB021D:
12746 	case FLASH_57780VENDOR_ATMEL_AT45DB021B:
12747 	case FLASH_57780VENDOR_ATMEL_AT45DB041D:
12748 	case FLASH_57780VENDOR_ATMEL_AT45DB041B:
12749 		tp->nvram_jedecnum = JEDEC_ATMEL;
12750 		tg3_flag_set(tp, NVRAM_BUFFERED);
12751 		tg3_flag_set(tp, FLASH);
12752 
12753 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12754 		case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12755 		case FLASH_57780VENDOR_ATMEL_AT45DB011D:
12756 		case FLASH_57780VENDOR_ATMEL_AT45DB011B:
12757 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12758 			break;
12759 		case FLASH_57780VENDOR_ATMEL_AT45DB021D:
12760 		case FLASH_57780VENDOR_ATMEL_AT45DB021B:
12761 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12762 			break;
12763 		case FLASH_57780VENDOR_ATMEL_AT45DB041D:
12764 		case FLASH_57780VENDOR_ATMEL_AT45DB041B:
12765 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12766 			break;
12767 		}
12768 		break;
12769 	case FLASH_5752VENDOR_ST_M45PE10:
12770 	case FLASH_5752VENDOR_ST_M45PE20:
12771 	case FLASH_5752VENDOR_ST_M45PE40:
12772 		tp->nvram_jedecnum = JEDEC_ST;
12773 		tg3_flag_set(tp, NVRAM_BUFFERED);
12774 		tg3_flag_set(tp, FLASH);
12775 
12776 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12777 		case FLASH_5752VENDOR_ST_M45PE10:
12778 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12779 			break;
12780 		case FLASH_5752VENDOR_ST_M45PE20:
12781 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12782 			break;
12783 		case FLASH_5752VENDOR_ST_M45PE40:
12784 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12785 			break;
12786 		}
12787 		break;
12788 	default:
12789 		tg3_flag_set(tp, NO_NVRAM);
12790 		return;
12791 	}
12792 
12793 	tg3_nvram_get_pagesize(tp, nvcfg1);
12794 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
12795 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
12796 }
12797 
12798 
12799 static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp)
12800 {
12801 	u32 nvcfg1;
12802 
12803 	nvcfg1 = tr32(NVRAM_CFG1);
12804 
12805 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12806 	case FLASH_5717VENDOR_ATMEL_EEPROM:
12807 	case FLASH_5717VENDOR_MICRO_EEPROM:
12808 		tp->nvram_jedecnum = JEDEC_ATMEL;
12809 		tg3_flag_set(tp, NVRAM_BUFFERED);
12810 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12811 
12812 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12813 		tw32(NVRAM_CFG1, nvcfg1);
12814 		return;
12815 	case FLASH_5717VENDOR_ATMEL_MDB011D:
12816 	case FLASH_5717VENDOR_ATMEL_ADB011B:
12817 	case FLASH_5717VENDOR_ATMEL_ADB011D:
12818 	case FLASH_5717VENDOR_ATMEL_MDB021D:
12819 	case FLASH_5717VENDOR_ATMEL_ADB021B:
12820 	case FLASH_5717VENDOR_ATMEL_ADB021D:
12821 	case FLASH_5717VENDOR_ATMEL_45USPT:
12822 		tp->nvram_jedecnum = JEDEC_ATMEL;
12823 		tg3_flag_set(tp, NVRAM_BUFFERED);
12824 		tg3_flag_set(tp, FLASH);
12825 
12826 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12827 		case FLASH_5717VENDOR_ATMEL_MDB021D:
12828 			/* Detect size with tg3_nvram_get_size() */
12829 			break;
12830 		case FLASH_5717VENDOR_ATMEL_ADB021B:
12831 		case FLASH_5717VENDOR_ATMEL_ADB021D:
12832 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12833 			break;
12834 		default:
12835 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12836 			break;
12837 		}
12838 		break;
12839 	case FLASH_5717VENDOR_ST_M_M25PE10:
12840 	case FLASH_5717VENDOR_ST_A_M25PE10:
12841 	case FLASH_5717VENDOR_ST_M_M45PE10:
12842 	case FLASH_5717VENDOR_ST_A_M45PE10:
12843 	case FLASH_5717VENDOR_ST_M_M25PE20:
12844 	case FLASH_5717VENDOR_ST_A_M25PE20:
12845 	case FLASH_5717VENDOR_ST_M_M45PE20:
12846 	case FLASH_5717VENDOR_ST_A_M45PE20:
12847 	case FLASH_5717VENDOR_ST_25USPT:
12848 	case FLASH_5717VENDOR_ST_45USPT:
12849 		tp->nvram_jedecnum = JEDEC_ST;
12850 		tg3_flag_set(tp, NVRAM_BUFFERED);
12851 		tg3_flag_set(tp, FLASH);
12852 
12853 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12854 		case FLASH_5717VENDOR_ST_M_M25PE20:
12855 		case FLASH_5717VENDOR_ST_M_M45PE20:
12856 			/* Detect size with tg3_nvram_get_size() */
12857 			break;
12858 		case FLASH_5717VENDOR_ST_A_M25PE20:
12859 		case FLASH_5717VENDOR_ST_A_M45PE20:
12860 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12861 			break;
12862 		default:
12863 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12864 			break;
12865 		}
12866 		break;
12867 	default:
12868 		tg3_flag_set(tp, NO_NVRAM);
12869 		return;
12870 	}
12871 
12872 	tg3_nvram_get_pagesize(tp, nvcfg1);
12873 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
12874 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
12875 }
12876 
12877 static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp)
12878 {
12879 	u32 nvcfg1, nvmpinstrp;
12880 
12881 	nvcfg1 = tr32(NVRAM_CFG1);
12882 	nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
12883 
12884 	switch (nvmpinstrp) {
12885 	case FLASH_5720_EEPROM_HD:
12886 	case FLASH_5720_EEPROM_LD:
12887 		tp->nvram_jedecnum = JEDEC_ATMEL;
12888 		tg3_flag_set(tp, NVRAM_BUFFERED);
12889 
12890 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12891 		tw32(NVRAM_CFG1, nvcfg1);
12892 		if (nvmpinstrp == FLASH_5720_EEPROM_HD)
12893 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12894 		else
12895 			tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
12896 		return;
12897 	case FLASH_5720VENDOR_M_ATMEL_DB011D:
12898 	case FLASH_5720VENDOR_A_ATMEL_DB011B:
12899 	case FLASH_5720VENDOR_A_ATMEL_DB011D:
12900 	case FLASH_5720VENDOR_M_ATMEL_DB021D:
12901 	case FLASH_5720VENDOR_A_ATMEL_DB021B:
12902 	case FLASH_5720VENDOR_A_ATMEL_DB021D:
12903 	case FLASH_5720VENDOR_M_ATMEL_DB041D:
12904 	case FLASH_5720VENDOR_A_ATMEL_DB041B:
12905 	case FLASH_5720VENDOR_A_ATMEL_DB041D:
12906 	case FLASH_5720VENDOR_M_ATMEL_DB081D:
12907 	case FLASH_5720VENDOR_A_ATMEL_DB081D:
12908 	case FLASH_5720VENDOR_ATMEL_45USPT:
12909 		tp->nvram_jedecnum = JEDEC_ATMEL;
12910 		tg3_flag_set(tp, NVRAM_BUFFERED);
12911 		tg3_flag_set(tp, FLASH);
12912 
12913 		switch (nvmpinstrp) {
12914 		case FLASH_5720VENDOR_M_ATMEL_DB021D:
12915 		case FLASH_5720VENDOR_A_ATMEL_DB021B:
12916 		case FLASH_5720VENDOR_A_ATMEL_DB021D:
12917 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12918 			break;
12919 		case FLASH_5720VENDOR_M_ATMEL_DB041D:
12920 		case FLASH_5720VENDOR_A_ATMEL_DB041B:
12921 		case FLASH_5720VENDOR_A_ATMEL_DB041D:
12922 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12923 			break;
12924 		case FLASH_5720VENDOR_M_ATMEL_DB081D:
12925 		case FLASH_5720VENDOR_A_ATMEL_DB081D:
12926 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12927 			break;
12928 		default:
12929 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12930 			break;
12931 		}
12932 		break;
12933 	case FLASH_5720VENDOR_M_ST_M25PE10:
12934 	case FLASH_5720VENDOR_M_ST_M45PE10:
12935 	case FLASH_5720VENDOR_A_ST_M25PE10:
12936 	case FLASH_5720VENDOR_A_ST_M45PE10:
12937 	case FLASH_5720VENDOR_M_ST_M25PE20:
12938 	case FLASH_5720VENDOR_M_ST_M45PE20:
12939 	case FLASH_5720VENDOR_A_ST_M25PE20:
12940 	case FLASH_5720VENDOR_A_ST_M45PE20:
12941 	case FLASH_5720VENDOR_M_ST_M25PE40:
12942 	case FLASH_5720VENDOR_M_ST_M45PE40:
12943 	case FLASH_5720VENDOR_A_ST_M25PE40:
12944 	case FLASH_5720VENDOR_A_ST_M45PE40:
12945 	case FLASH_5720VENDOR_M_ST_M25PE80:
12946 	case FLASH_5720VENDOR_M_ST_M45PE80:
12947 	case FLASH_5720VENDOR_A_ST_M25PE80:
12948 	case FLASH_5720VENDOR_A_ST_M45PE80:
12949 	case FLASH_5720VENDOR_ST_25USPT:
12950 	case FLASH_5720VENDOR_ST_45USPT:
12951 		tp->nvram_jedecnum = JEDEC_ST;
12952 		tg3_flag_set(tp, NVRAM_BUFFERED);
12953 		tg3_flag_set(tp, FLASH);
12954 
12955 		switch (nvmpinstrp) {
12956 		case FLASH_5720VENDOR_M_ST_M25PE20:
12957 		case FLASH_5720VENDOR_M_ST_M45PE20:
12958 		case FLASH_5720VENDOR_A_ST_M25PE20:
12959 		case FLASH_5720VENDOR_A_ST_M45PE20:
12960 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12961 			break;
12962 		case FLASH_5720VENDOR_M_ST_M25PE40:
12963 		case FLASH_5720VENDOR_M_ST_M45PE40:
12964 		case FLASH_5720VENDOR_A_ST_M25PE40:
12965 		case FLASH_5720VENDOR_A_ST_M45PE40:
12966 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12967 			break;
12968 		case FLASH_5720VENDOR_M_ST_M25PE80:
12969 		case FLASH_5720VENDOR_M_ST_M45PE80:
12970 		case FLASH_5720VENDOR_A_ST_M25PE80:
12971 		case FLASH_5720VENDOR_A_ST_M45PE80:
12972 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12973 			break;
12974 		default:
12975 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
12976 			break;
12977 		}
12978 		break;
12979 	default:
12980 		tg3_flag_set(tp, NO_NVRAM);
12981 		return;
12982 	}
12983 
12984 	tg3_nvram_get_pagesize(tp, nvcfg1);
12985 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
12986 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
12987 }
12988 
12989 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
12990 static void __devinit tg3_nvram_init(struct tg3 *tp)
12991 {
12992 	tw32_f(GRC_EEPROM_ADDR,
12993 	     (EEPROM_ADDR_FSM_RESET |
12994 	      (EEPROM_DEFAULT_CLOCK_PERIOD <<
12995 	       EEPROM_ADDR_CLKPERD_SHIFT)));
12996 
12997 	msleep(1);
12998 
12999 	/* Enable seeprom accesses. */
13000 	tw32_f(GRC_LOCAL_CTRL,
13001 	     tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
13002 	udelay(100);
13003 
13004 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13005 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
13006 		tg3_flag_set(tp, NVRAM);
13007 
13008 		if (tg3_nvram_lock(tp)) {
13009 			netdev_warn(tp->dev,
13010 				    "Cannot get nvram lock, %s failed\n",
13011 				    __func__);
13012 			return;
13013 		}
13014 		tg3_enable_nvram_access(tp);
13015 
13016 		tp->nvram_size = 0;
13017 
13018 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
13019 			tg3_get_5752_nvram_info(tp);
13020 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
13021 			tg3_get_5755_nvram_info(tp);
13022 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
13023 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
13024 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13025 			tg3_get_5787_nvram_info(tp);
13026 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
13027 			tg3_get_5761_nvram_info(tp);
13028 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
13029 			tg3_get_5906_nvram_info(tp);
13030 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
13031 			 tg3_flag(tp, 57765_CLASS))
13032 			tg3_get_57780_nvram_info(tp);
13033 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
13034 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
13035 			tg3_get_5717_nvram_info(tp);
13036 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
13037 			tg3_get_5720_nvram_info(tp);
13038 		else
13039 			tg3_get_nvram_info(tp);
13040 
13041 		if (tp->nvram_size == 0)
13042 			tg3_get_nvram_size(tp);
13043 
13044 		tg3_disable_nvram_access(tp);
13045 		tg3_nvram_unlock(tp);
13046 
13047 	} else {
13048 		tg3_flag_clear(tp, NVRAM);
13049 		tg3_flag_clear(tp, NVRAM_BUFFERED);
13050 
13051 		tg3_get_eeprom_size(tp);
13052 	}
13053 }
13054 
13055 struct subsys_tbl_ent {
13056 	u16 subsys_vendor, subsys_devid;
13057 	u32 phy_id;
13058 };
13059 
13060 static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = {
13061 	/* Broadcom boards. */
13062 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13063 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
13064 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13065 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
13066 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13067 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
13068 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13069 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
13070 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13071 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
13072 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13073 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
13074 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13075 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
13076 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13077 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
13078 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13079 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
13080 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13081 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
13082 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13083 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
13084 
13085 	/* 3com boards. */
13086 	{ TG3PCI_SUBVENDOR_ID_3COM,
13087 	  TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
13088 	{ TG3PCI_SUBVENDOR_ID_3COM,
13089 	  TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
13090 	{ TG3PCI_SUBVENDOR_ID_3COM,
13091 	  TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
13092 	{ TG3PCI_SUBVENDOR_ID_3COM,
13093 	  TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
13094 	{ TG3PCI_SUBVENDOR_ID_3COM,
13095 	  TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
13096 
13097 	/* DELL boards. */
13098 	{ TG3PCI_SUBVENDOR_ID_DELL,
13099 	  TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
13100 	{ TG3PCI_SUBVENDOR_ID_DELL,
13101 	  TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
13102 	{ TG3PCI_SUBVENDOR_ID_DELL,
13103 	  TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
13104 	{ TG3PCI_SUBVENDOR_ID_DELL,
13105 	  TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
13106 
13107 	/* Compaq boards. */
13108 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13109 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
13110 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13111 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
13112 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13113 	  TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
13114 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13115 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
13116 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13117 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
13118 
13119 	/* IBM boards. */
13120 	{ TG3PCI_SUBVENDOR_ID_IBM,
13121 	  TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
13122 };
13123 
13124 static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp)
13125 {
13126 	int i;
13127 
13128 	for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
13129 		if ((subsys_id_to_phy_id[i].subsys_vendor ==
13130 		     tp->pdev->subsystem_vendor) &&
13131 		    (subsys_id_to_phy_id[i].subsys_devid ==
13132 		     tp->pdev->subsystem_device))
13133 			return &subsys_id_to_phy_id[i];
13134 	}
13135 	return NULL;
13136 }
13137 
13138 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
13139 {
13140 	u32 val;
13141 
13142 	tp->phy_id = TG3_PHY_ID_INVALID;
13143 	tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13144 
13145 	/* Assume an onboard device and WOL capable by default.  */
13146 	tg3_flag_set(tp, EEPROM_WRITE_PROT);
13147 	tg3_flag_set(tp, WOL_CAP);
13148 
13149 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
13150 		if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
13151 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13152 			tg3_flag_set(tp, IS_NIC);
13153 		}
13154 		val = tr32(VCPU_CFGSHDW);
13155 		if (val & VCPU_CFGSHDW_ASPM_DBNC)
13156 			tg3_flag_set(tp, ASPM_WORKAROUND);
13157 		if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
13158 		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
13159 			tg3_flag_set(tp, WOL_ENABLE);
13160 			device_set_wakeup_enable(&tp->pdev->dev, true);
13161 		}
13162 		goto done;
13163 	}
13164 
13165 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
13166 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
13167 		u32 nic_cfg, led_cfg;
13168 		u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
13169 		int eeprom_phy_serdes = 0;
13170 
13171 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
13172 		tp->nic_sram_data_cfg = nic_cfg;
13173 
13174 		tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
13175 		ver >>= NIC_SRAM_DATA_VER_SHIFT;
13176 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13177 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
13178 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 &&
13179 		    (ver > 0) && (ver < 0x100))
13180 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
13181 
13182 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13183 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
13184 
13185 		if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
13186 		    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
13187 			eeprom_phy_serdes = 1;
13188 
13189 		tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
13190 		if (nic_phy_id != 0) {
13191 			u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
13192 			u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
13193 
13194 			eeprom_phy_id  = (id1 >> 16) << 10;
13195 			eeprom_phy_id |= (id2 & 0xfc00) << 16;
13196 			eeprom_phy_id |= (id2 & 0x03ff) <<  0;
13197 		} else
13198 			eeprom_phy_id = 0;
13199 
13200 		tp->phy_id = eeprom_phy_id;
13201 		if (eeprom_phy_serdes) {
13202 			if (!tg3_flag(tp, 5705_PLUS))
13203 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13204 			else
13205 				tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
13206 		}
13207 
13208 		if (tg3_flag(tp, 5750_PLUS))
13209 			led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
13210 				    SHASTA_EXT_LED_MODE_MASK);
13211 		else
13212 			led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
13213 
13214 		switch (led_cfg) {
13215 		default:
13216 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
13217 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13218 			break;
13219 
13220 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
13221 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13222 			break;
13223 
13224 		case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
13225 			tp->led_ctrl = LED_CTRL_MODE_MAC;
13226 
13227 			/* Default to PHY_1_MODE if 0 (MAC_MODE) is
13228 			 * read on some older 5700/5701 bootcode.
13229 			 */
13230 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
13231 			    ASIC_REV_5700 ||
13232 			    GET_ASIC_REV(tp->pci_chip_rev_id) ==
13233 			    ASIC_REV_5701)
13234 				tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13235 
13236 			break;
13237 
13238 		case SHASTA_EXT_LED_SHARED:
13239 			tp->led_ctrl = LED_CTRL_MODE_SHARED;
13240 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
13241 			    tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
13242 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13243 						 LED_CTRL_MODE_PHY_2);
13244 			break;
13245 
13246 		case SHASTA_EXT_LED_MAC:
13247 			tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
13248 			break;
13249 
13250 		case SHASTA_EXT_LED_COMBO:
13251 			tp->led_ctrl = LED_CTRL_MODE_COMBO;
13252 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
13253 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13254 						 LED_CTRL_MODE_PHY_2);
13255 			break;
13256 
13257 		}
13258 
13259 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
13260 		     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
13261 		    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
13262 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13263 
13264 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
13265 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13266 
13267 		if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
13268 			tg3_flag_set(tp, EEPROM_WRITE_PROT);
13269 			if ((tp->pdev->subsystem_vendor ==
13270 			     PCI_VENDOR_ID_ARIMA) &&
13271 			    (tp->pdev->subsystem_device == 0x205a ||
13272 			     tp->pdev->subsystem_device == 0x2063))
13273 				tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13274 		} else {
13275 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13276 			tg3_flag_set(tp, IS_NIC);
13277 		}
13278 
13279 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
13280 			tg3_flag_set(tp, ENABLE_ASF);
13281 			if (tg3_flag(tp, 5750_PLUS))
13282 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
13283 		}
13284 
13285 		if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
13286 		    tg3_flag(tp, 5750_PLUS))
13287 			tg3_flag_set(tp, ENABLE_APE);
13288 
13289 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
13290 		    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
13291 			tg3_flag_clear(tp, WOL_CAP);
13292 
13293 		if (tg3_flag(tp, WOL_CAP) &&
13294 		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
13295 			tg3_flag_set(tp, WOL_ENABLE);
13296 			device_set_wakeup_enable(&tp->pdev->dev, true);
13297 		}
13298 
13299 		if (cfg2 & (1 << 17))
13300 			tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
13301 
13302 		/* serdes signal pre-emphasis in register 0x590 set by */
13303 		/* bootcode if bit 18 is set */
13304 		if (cfg2 & (1 << 18))
13305 			tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
13306 
13307 		if ((tg3_flag(tp, 57765_PLUS) ||
13308 		     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
13309 		      GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) &&
13310 		    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
13311 			tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
13312 
13313 		if (tg3_flag(tp, PCI_EXPRESS) &&
13314 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
13315 		    !tg3_flag(tp, 57765_PLUS)) {
13316 			u32 cfg3;
13317 
13318 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
13319 			if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
13320 				tg3_flag_set(tp, ASPM_WORKAROUND);
13321 		}
13322 
13323 		if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
13324 			tg3_flag_set(tp, RGMII_INBAND_DISABLE);
13325 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
13326 			tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
13327 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
13328 			tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
13329 	}
13330 done:
13331 	if (tg3_flag(tp, WOL_CAP))
13332 		device_set_wakeup_enable(&tp->pdev->dev,
13333 					 tg3_flag(tp, WOL_ENABLE));
13334 	else
13335 		device_set_wakeup_capable(&tp->pdev->dev, false);
13336 }
13337 
13338 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
13339 {
13340 	int i;
13341 	u32 val;
13342 
13343 	tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
13344 	tw32(OTP_CTRL, cmd);
13345 
13346 	/* Wait for up to 1 ms for command to execute. */
13347 	for (i = 0; i < 100; i++) {
13348 		val = tr32(OTP_STATUS);
13349 		if (val & OTP_STATUS_CMD_DONE)
13350 			break;
13351 		udelay(10);
13352 	}
13353 
13354 	return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
13355 }
13356 
13357 /* Read the gphy configuration from the OTP region of the chip.  The gphy
13358  * configuration is a 32-bit value that straddles the alignment boundary.
13359  * We do two 32-bit reads and then shift and merge the results.
13360  */
13361 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
13362 {
13363 	u32 bhalf_otp, thalf_otp;
13364 
13365 	tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
13366 
13367 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
13368 		return 0;
13369 
13370 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
13371 
13372 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13373 		return 0;
13374 
13375 	thalf_otp = tr32(OTP_READ_DATA);
13376 
13377 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
13378 
13379 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13380 		return 0;
13381 
13382 	bhalf_otp = tr32(OTP_READ_DATA);
13383 
13384 	return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
13385 }
13386 
13387 static void __devinit tg3_phy_init_link_config(struct tg3 *tp)
13388 {
13389 	u32 adv = ADVERTISED_Autoneg;
13390 
13391 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
13392 		adv |= ADVERTISED_1000baseT_Half |
13393 		       ADVERTISED_1000baseT_Full;
13394 
13395 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
13396 		adv |= ADVERTISED_100baseT_Half |
13397 		       ADVERTISED_100baseT_Full |
13398 		       ADVERTISED_10baseT_Half |
13399 		       ADVERTISED_10baseT_Full |
13400 		       ADVERTISED_TP;
13401 	else
13402 		adv |= ADVERTISED_FIBRE;
13403 
13404 	tp->link_config.advertising = adv;
13405 	tp->link_config.speed = SPEED_UNKNOWN;
13406 	tp->link_config.duplex = DUPLEX_UNKNOWN;
13407 	tp->link_config.autoneg = AUTONEG_ENABLE;
13408 	tp->link_config.active_speed = SPEED_UNKNOWN;
13409 	tp->link_config.active_duplex = DUPLEX_UNKNOWN;
13410 
13411 	tp->old_link = -1;
13412 }
13413 
13414 static int __devinit tg3_phy_probe(struct tg3 *tp)
13415 {
13416 	u32 hw_phy_id_1, hw_phy_id_2;
13417 	u32 hw_phy_id, hw_phy_id_masked;
13418 	int err;
13419 
13420 	/* flow control autonegotiation is default behavior */
13421 	tg3_flag_set(tp, PAUSE_AUTONEG);
13422 	tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
13423 
13424 	if (tg3_flag(tp, USE_PHYLIB))
13425 		return tg3_phy_init(tp);
13426 
13427 	/* Reading the PHY ID register can conflict with ASF
13428 	 * firmware access to the PHY hardware.
13429 	 */
13430 	err = 0;
13431 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
13432 		hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
13433 	} else {
13434 		/* Now read the physical PHY_ID from the chip and verify
13435 		 * that it is sane.  If it doesn't look good, we fall back
13436 		 * to either the hard-coded table based PHY_ID and failing
13437 		 * that the value found in the eeprom area.
13438 		 */
13439 		err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
13440 		err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
13441 
13442 		hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
13443 		hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
13444 		hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
13445 
13446 		hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
13447 	}
13448 
13449 	if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
13450 		tp->phy_id = hw_phy_id;
13451 		if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
13452 			tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13453 		else
13454 			tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
13455 	} else {
13456 		if (tp->phy_id != TG3_PHY_ID_INVALID) {
13457 			/* Do nothing, phy ID already set up in
13458 			 * tg3_get_eeprom_hw_cfg().
13459 			 */
13460 		} else {
13461 			struct subsys_tbl_ent *p;
13462 
13463 			/* No eeprom signature?  Try the hardcoded
13464 			 * subsys device table.
13465 			 */
13466 			p = tg3_lookup_by_subsys(tp);
13467 			if (!p)
13468 				return -ENODEV;
13469 
13470 			tp->phy_id = p->phy_id;
13471 			if (!tp->phy_id ||
13472 			    tp->phy_id == TG3_PHY_ID_BCM8002)
13473 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13474 		}
13475 	}
13476 
13477 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13478 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
13479 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 ||
13480 	     (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 &&
13481 	      tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) ||
13482 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 &&
13483 	      tp->pci_chip_rev_id != CHIPREV_ID_57765_A0)))
13484 		tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
13485 
13486 	tg3_phy_init_link_config(tp);
13487 
13488 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13489 	    !tg3_flag(tp, ENABLE_APE) &&
13490 	    !tg3_flag(tp, ENABLE_ASF)) {
13491 		u32 bmsr, dummy;
13492 
13493 		tg3_readphy(tp, MII_BMSR, &bmsr);
13494 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
13495 		    (bmsr & BMSR_LSTATUS))
13496 			goto skip_phy_reset;
13497 
13498 		err = tg3_phy_reset(tp);
13499 		if (err)
13500 			return err;
13501 
13502 		tg3_phy_set_wirespeed(tp);
13503 
13504 		if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
13505 			tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
13506 					    tp->link_config.flowctrl);
13507 
13508 			tg3_writephy(tp, MII_BMCR,
13509 				     BMCR_ANENABLE | BMCR_ANRESTART);
13510 		}
13511 	}
13512 
13513 skip_phy_reset:
13514 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
13515 		err = tg3_init_5401phy_dsp(tp);
13516 		if (err)
13517 			return err;
13518 
13519 		err = tg3_init_5401phy_dsp(tp);
13520 	}
13521 
13522 	return err;
13523 }
13524 
13525 static void __devinit tg3_read_vpd(struct tg3 *tp)
13526 {
13527 	u8 *vpd_data;
13528 	unsigned int block_end, rosize, len;
13529 	u32 vpdlen;
13530 	int j, i = 0;
13531 
13532 	vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
13533 	if (!vpd_data)
13534 		goto out_no_vpd;
13535 
13536 	i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
13537 	if (i < 0)
13538 		goto out_not_found;
13539 
13540 	rosize = pci_vpd_lrdt_size(&vpd_data[i]);
13541 	block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
13542 	i += PCI_VPD_LRDT_TAG_SIZE;
13543 
13544 	if (block_end > vpdlen)
13545 		goto out_not_found;
13546 
13547 	j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13548 				      PCI_VPD_RO_KEYWORD_MFR_ID);
13549 	if (j > 0) {
13550 		len = pci_vpd_info_field_size(&vpd_data[j]);
13551 
13552 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
13553 		if (j + len > block_end || len != 4 ||
13554 		    memcmp(&vpd_data[j], "1028", 4))
13555 			goto partno;
13556 
13557 		j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13558 					      PCI_VPD_RO_KEYWORD_VENDOR0);
13559 		if (j < 0)
13560 			goto partno;
13561 
13562 		len = pci_vpd_info_field_size(&vpd_data[j]);
13563 
13564 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
13565 		if (j + len > block_end)
13566 			goto partno;
13567 
13568 		memcpy(tp->fw_ver, &vpd_data[j], len);
13569 		strncat(tp->fw_ver, " bc ", vpdlen - len - 1);
13570 	}
13571 
13572 partno:
13573 	i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13574 				      PCI_VPD_RO_KEYWORD_PARTNO);
13575 	if (i < 0)
13576 		goto out_not_found;
13577 
13578 	len = pci_vpd_info_field_size(&vpd_data[i]);
13579 
13580 	i += PCI_VPD_INFO_FLD_HDR_SIZE;
13581 	if (len > TG3_BPN_SIZE ||
13582 	    (len + i) > vpdlen)
13583 		goto out_not_found;
13584 
13585 	memcpy(tp->board_part_number, &vpd_data[i], len);
13586 
13587 out_not_found:
13588 	kfree(vpd_data);
13589 	if (tp->board_part_number[0])
13590 		return;
13591 
13592 out_no_vpd:
13593 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
13594 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717)
13595 			strcpy(tp->board_part_number, "BCM5717");
13596 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
13597 			strcpy(tp->board_part_number, "BCM5718");
13598 		else
13599 			goto nomatch;
13600 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
13601 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
13602 			strcpy(tp->board_part_number, "BCM57780");
13603 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
13604 			strcpy(tp->board_part_number, "BCM57760");
13605 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
13606 			strcpy(tp->board_part_number, "BCM57790");
13607 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
13608 			strcpy(tp->board_part_number, "BCM57788");
13609 		else
13610 			goto nomatch;
13611 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
13612 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
13613 			strcpy(tp->board_part_number, "BCM57761");
13614 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
13615 			strcpy(tp->board_part_number, "BCM57765");
13616 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
13617 			strcpy(tp->board_part_number, "BCM57781");
13618 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
13619 			strcpy(tp->board_part_number, "BCM57785");
13620 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
13621 			strcpy(tp->board_part_number, "BCM57791");
13622 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
13623 			strcpy(tp->board_part_number, "BCM57795");
13624 		else
13625 			goto nomatch;
13626 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) {
13627 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
13628 			strcpy(tp->board_part_number, "BCM57762");
13629 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
13630 			strcpy(tp->board_part_number, "BCM57766");
13631 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
13632 			strcpy(tp->board_part_number, "BCM57782");
13633 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
13634 			strcpy(tp->board_part_number, "BCM57786");
13635 		else
13636 			goto nomatch;
13637 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
13638 		strcpy(tp->board_part_number, "BCM95906");
13639 	} else {
13640 nomatch:
13641 		strcpy(tp->board_part_number, "none");
13642 	}
13643 }
13644 
13645 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
13646 {
13647 	u32 val;
13648 
13649 	if (tg3_nvram_read(tp, offset, &val) ||
13650 	    (val & 0xfc000000) != 0x0c000000 ||
13651 	    tg3_nvram_read(tp, offset + 4, &val) ||
13652 	    val != 0)
13653 		return 0;
13654 
13655 	return 1;
13656 }
13657 
13658 static void __devinit tg3_read_bc_ver(struct tg3 *tp)
13659 {
13660 	u32 val, offset, start, ver_offset;
13661 	int i, dst_off;
13662 	bool newver = false;
13663 
13664 	if (tg3_nvram_read(tp, 0xc, &offset) ||
13665 	    tg3_nvram_read(tp, 0x4, &start))
13666 		return;
13667 
13668 	offset = tg3_nvram_logical_addr(tp, offset);
13669 
13670 	if (tg3_nvram_read(tp, offset, &val))
13671 		return;
13672 
13673 	if ((val & 0xfc000000) == 0x0c000000) {
13674 		if (tg3_nvram_read(tp, offset + 4, &val))
13675 			return;
13676 
13677 		if (val == 0)
13678 			newver = true;
13679 	}
13680 
13681 	dst_off = strlen(tp->fw_ver);
13682 
13683 	if (newver) {
13684 		if (TG3_VER_SIZE - dst_off < 16 ||
13685 		    tg3_nvram_read(tp, offset + 8, &ver_offset))
13686 			return;
13687 
13688 		offset = offset + ver_offset - start;
13689 		for (i = 0; i < 16; i += 4) {
13690 			__be32 v;
13691 			if (tg3_nvram_read_be32(tp, offset + i, &v))
13692 				return;
13693 
13694 			memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
13695 		}
13696 	} else {
13697 		u32 major, minor;
13698 
13699 		if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
13700 			return;
13701 
13702 		major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
13703 			TG3_NVM_BCVER_MAJSFT;
13704 		minor = ver_offset & TG3_NVM_BCVER_MINMSK;
13705 		snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
13706 			 "v%d.%02d", major, minor);
13707 	}
13708 }
13709 
13710 static void __devinit tg3_read_hwsb_ver(struct tg3 *tp)
13711 {
13712 	u32 val, major, minor;
13713 
13714 	/* Use native endian representation */
13715 	if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
13716 		return;
13717 
13718 	major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
13719 		TG3_NVM_HWSB_CFG1_MAJSFT;
13720 	minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
13721 		TG3_NVM_HWSB_CFG1_MINSFT;
13722 
13723 	snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
13724 }
13725 
13726 static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val)
13727 {
13728 	u32 offset, major, minor, build;
13729 
13730 	strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
13731 
13732 	if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
13733 		return;
13734 
13735 	switch (val & TG3_EEPROM_SB_REVISION_MASK) {
13736 	case TG3_EEPROM_SB_REVISION_0:
13737 		offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
13738 		break;
13739 	case TG3_EEPROM_SB_REVISION_2:
13740 		offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
13741 		break;
13742 	case TG3_EEPROM_SB_REVISION_3:
13743 		offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
13744 		break;
13745 	case TG3_EEPROM_SB_REVISION_4:
13746 		offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
13747 		break;
13748 	case TG3_EEPROM_SB_REVISION_5:
13749 		offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
13750 		break;
13751 	case TG3_EEPROM_SB_REVISION_6:
13752 		offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
13753 		break;
13754 	default:
13755 		return;
13756 	}
13757 
13758 	if (tg3_nvram_read(tp, offset, &val))
13759 		return;
13760 
13761 	build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
13762 		TG3_EEPROM_SB_EDH_BLD_SHFT;
13763 	major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
13764 		TG3_EEPROM_SB_EDH_MAJ_SHFT;
13765 	minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
13766 
13767 	if (minor > 99 || build > 26)
13768 		return;
13769 
13770 	offset = strlen(tp->fw_ver);
13771 	snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
13772 		 " v%d.%02d", major, minor);
13773 
13774 	if (build > 0) {
13775 		offset = strlen(tp->fw_ver);
13776 		if (offset < TG3_VER_SIZE - 1)
13777 			tp->fw_ver[offset] = 'a' + build - 1;
13778 	}
13779 }
13780 
13781 static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp)
13782 {
13783 	u32 val, offset, start;
13784 	int i, vlen;
13785 
13786 	for (offset = TG3_NVM_DIR_START;
13787 	     offset < TG3_NVM_DIR_END;
13788 	     offset += TG3_NVM_DIRENT_SIZE) {
13789 		if (tg3_nvram_read(tp, offset, &val))
13790 			return;
13791 
13792 		if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
13793 			break;
13794 	}
13795 
13796 	if (offset == TG3_NVM_DIR_END)
13797 		return;
13798 
13799 	if (!tg3_flag(tp, 5705_PLUS))
13800 		start = 0x08000000;
13801 	else if (tg3_nvram_read(tp, offset - 4, &start))
13802 		return;
13803 
13804 	if (tg3_nvram_read(tp, offset + 4, &offset) ||
13805 	    !tg3_fw_img_is_valid(tp, offset) ||
13806 	    tg3_nvram_read(tp, offset + 8, &val))
13807 		return;
13808 
13809 	offset += val - start;
13810 
13811 	vlen = strlen(tp->fw_ver);
13812 
13813 	tp->fw_ver[vlen++] = ',';
13814 	tp->fw_ver[vlen++] = ' ';
13815 
13816 	for (i = 0; i < 4; i++) {
13817 		__be32 v;
13818 		if (tg3_nvram_read_be32(tp, offset, &v))
13819 			return;
13820 
13821 		offset += sizeof(v);
13822 
13823 		if (vlen > TG3_VER_SIZE - sizeof(v)) {
13824 			memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
13825 			break;
13826 		}
13827 
13828 		memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
13829 		vlen += sizeof(v);
13830 	}
13831 }
13832 
13833 static void __devinit tg3_read_dash_ver(struct tg3 *tp)
13834 {
13835 	int vlen;
13836 	u32 apedata;
13837 	char *fwtype;
13838 
13839 	if (!tg3_flag(tp, ENABLE_APE) || !tg3_flag(tp, ENABLE_ASF))
13840 		return;
13841 
13842 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
13843 	if (apedata != APE_SEG_SIG_MAGIC)
13844 		return;
13845 
13846 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
13847 	if (!(apedata & APE_FW_STATUS_READY))
13848 		return;
13849 
13850 	apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
13851 
13852 	if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) {
13853 		tg3_flag_set(tp, APE_HAS_NCSI);
13854 		fwtype = "NCSI";
13855 	} else {
13856 		fwtype = "DASH";
13857 	}
13858 
13859 	vlen = strlen(tp->fw_ver);
13860 
13861 	snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
13862 		 fwtype,
13863 		 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
13864 		 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
13865 		 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
13866 		 (apedata & APE_FW_VERSION_BLDMSK));
13867 }
13868 
13869 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
13870 {
13871 	u32 val;
13872 	bool vpd_vers = false;
13873 
13874 	if (tp->fw_ver[0] != 0)
13875 		vpd_vers = true;
13876 
13877 	if (tg3_flag(tp, NO_NVRAM)) {
13878 		strcat(tp->fw_ver, "sb");
13879 		return;
13880 	}
13881 
13882 	if (tg3_nvram_read(tp, 0, &val))
13883 		return;
13884 
13885 	if (val == TG3_EEPROM_MAGIC)
13886 		tg3_read_bc_ver(tp);
13887 	else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
13888 		tg3_read_sb_ver(tp, val);
13889 	else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
13890 		tg3_read_hwsb_ver(tp);
13891 	else
13892 		return;
13893 
13894 	if (vpd_vers)
13895 		goto done;
13896 
13897 	if (tg3_flag(tp, ENABLE_APE)) {
13898 		if (tg3_flag(tp, ENABLE_ASF))
13899 			tg3_read_dash_ver(tp);
13900 	} else if (tg3_flag(tp, ENABLE_ASF)) {
13901 		tg3_read_mgmtfw_ver(tp);
13902 	}
13903 
13904 done:
13905 	tp->fw_ver[TG3_VER_SIZE - 1] = 0;
13906 }
13907 
13908 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
13909 {
13910 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
13911 		return TG3_RX_RET_MAX_SIZE_5717;
13912 	else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
13913 		return TG3_RX_RET_MAX_SIZE_5700;
13914 	else
13915 		return TG3_RX_RET_MAX_SIZE_5705;
13916 }
13917 
13918 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
13919 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
13920 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
13921 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
13922 	{ },
13923 };
13924 
13925 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
13926 {
13927 	struct pci_dev *peer;
13928 	unsigned int func, devnr = tp->pdev->devfn & ~7;
13929 
13930 	for (func = 0; func < 8; func++) {
13931 		peer = pci_get_slot(tp->pdev->bus, devnr | func);
13932 		if (peer && peer != tp->pdev)
13933 			break;
13934 		pci_dev_put(peer);
13935 	}
13936 	/* 5704 can be configured in single-port mode, set peer to
13937 	 * tp->pdev in that case.
13938 	 */
13939 	if (!peer) {
13940 		peer = tp->pdev;
13941 		return peer;
13942 	}
13943 
13944 	/*
13945 	 * We don't need to keep the refcount elevated; there's no way
13946 	 * to remove one half of this device without removing the other
13947 	 */
13948 	pci_dev_put(peer);
13949 
13950 	return peer;
13951 }
13952 
13953 static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
13954 {
13955 	tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
13956 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
13957 		u32 reg;
13958 
13959 		/* All devices that use the alternate
13960 		 * ASIC REV location have a CPMU.
13961 		 */
13962 		tg3_flag_set(tp, CPMU_PRESENT);
13963 
13964 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
13965 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
13966 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
13967 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720)
13968 			reg = TG3PCI_GEN2_PRODID_ASICREV;
13969 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
13970 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
13971 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
13972 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
13973 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
13974 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
13975 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
13976 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
13977 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
13978 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
13979 			reg = TG3PCI_GEN15_PRODID_ASICREV;
13980 		else
13981 			reg = TG3PCI_PRODID_ASICREV;
13982 
13983 		pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
13984 	}
13985 
13986 	/* Wrong chip ID in 5752 A0. This code can be removed later
13987 	 * as A0 is not in production.
13988 	 */
13989 	if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
13990 		tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
13991 
13992 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
13993 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
13994 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
13995 		tg3_flag_set(tp, 5717_PLUS);
13996 
13997 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 ||
13998 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
13999 		tg3_flag_set(tp, 57765_CLASS);
14000 
14001 	if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS))
14002 		tg3_flag_set(tp, 57765_PLUS);
14003 
14004 	/* Intentionally exclude ASIC_REV_5906 */
14005 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14006 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
14007 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14008 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14009 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14010 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14011 	    tg3_flag(tp, 57765_PLUS))
14012 		tg3_flag_set(tp, 5755_PLUS);
14013 
14014 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
14015 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14016 		tg3_flag_set(tp, 5780_CLASS);
14017 
14018 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
14019 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
14020 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
14021 	    tg3_flag(tp, 5755_PLUS) ||
14022 	    tg3_flag(tp, 5780_CLASS))
14023 		tg3_flag_set(tp, 5750_PLUS);
14024 
14025 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
14026 	    tg3_flag(tp, 5750_PLUS))
14027 		tg3_flag_set(tp, 5705_PLUS);
14028 }
14029 
14030 static int __devinit tg3_get_invariants(struct tg3 *tp)
14031 {
14032 	u32 misc_ctrl_reg;
14033 	u32 pci_state_reg, grc_misc_cfg;
14034 	u32 val;
14035 	u16 pci_cmd;
14036 	int err;
14037 
14038 	/* Force memory write invalidate off.  If we leave it on,
14039 	 * then on 5700_BX chips we have to enable a workaround.
14040 	 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
14041 	 * to match the cacheline size.  The Broadcom driver have this
14042 	 * workaround but turns MWI off all the times so never uses
14043 	 * it.  This seems to suggest that the workaround is insufficient.
14044 	 */
14045 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14046 	pci_cmd &= ~PCI_COMMAND_INVALIDATE;
14047 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14048 
14049 	/* Important! -- Make sure register accesses are byteswapped
14050 	 * correctly.  Also, for those chips that require it, make
14051 	 * sure that indirect register accesses are enabled before
14052 	 * the first operation.
14053 	 */
14054 	pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14055 			      &misc_ctrl_reg);
14056 	tp->misc_host_ctrl |= (misc_ctrl_reg &
14057 			       MISC_HOST_CTRL_CHIPREV);
14058 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14059 			       tp->misc_host_ctrl);
14060 
14061 	tg3_detect_asic_rev(tp, misc_ctrl_reg);
14062 
14063 	/* If we have 5702/03 A1 or A2 on certain ICH chipsets,
14064 	 * we need to disable memory and use config. cycles
14065 	 * only to access all registers. The 5702/03 chips
14066 	 * can mistakenly decode the special cycles from the
14067 	 * ICH chipsets as memory write cycles, causing corruption
14068 	 * of register and memory space. Only certain ICH bridges
14069 	 * will drive special cycles with non-zero data during the
14070 	 * address phase which can fall within the 5703's address
14071 	 * range. This is not an ICH bug as the PCI spec allows
14072 	 * non-zero address during special cycles. However, only
14073 	 * these ICH bridges are known to drive non-zero addresses
14074 	 * during special cycles.
14075 	 *
14076 	 * Since special cycles do not cross PCI bridges, we only
14077 	 * enable this workaround if the 5703 is on the secondary
14078 	 * bus of these ICH bridges.
14079 	 */
14080 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
14081 	    (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
14082 		static struct tg3_dev_id {
14083 			u32	vendor;
14084 			u32	device;
14085 			u32	rev;
14086 		} ich_chipsets[] = {
14087 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
14088 			  PCI_ANY_ID },
14089 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
14090 			  PCI_ANY_ID },
14091 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
14092 			  0xa },
14093 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
14094 			  PCI_ANY_ID },
14095 			{ },
14096 		};
14097 		struct tg3_dev_id *pci_id = &ich_chipsets[0];
14098 		struct pci_dev *bridge = NULL;
14099 
14100 		while (pci_id->vendor != 0) {
14101 			bridge = pci_get_device(pci_id->vendor, pci_id->device,
14102 						bridge);
14103 			if (!bridge) {
14104 				pci_id++;
14105 				continue;
14106 			}
14107 			if (pci_id->rev != PCI_ANY_ID) {
14108 				if (bridge->revision > pci_id->rev)
14109 					continue;
14110 			}
14111 			if (bridge->subordinate &&
14112 			    (bridge->subordinate->number ==
14113 			     tp->pdev->bus->number)) {
14114 				tg3_flag_set(tp, ICH_WORKAROUND);
14115 				pci_dev_put(bridge);
14116 				break;
14117 			}
14118 		}
14119 	}
14120 
14121 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
14122 		static struct tg3_dev_id {
14123 			u32	vendor;
14124 			u32	device;
14125 		} bridge_chipsets[] = {
14126 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
14127 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
14128 			{ },
14129 		};
14130 		struct tg3_dev_id *pci_id = &bridge_chipsets[0];
14131 		struct pci_dev *bridge = NULL;
14132 
14133 		while (pci_id->vendor != 0) {
14134 			bridge = pci_get_device(pci_id->vendor,
14135 						pci_id->device,
14136 						bridge);
14137 			if (!bridge) {
14138 				pci_id++;
14139 				continue;
14140 			}
14141 			if (bridge->subordinate &&
14142 			    (bridge->subordinate->number <=
14143 			     tp->pdev->bus->number) &&
14144 			    (bridge->subordinate->subordinate >=
14145 			     tp->pdev->bus->number)) {
14146 				tg3_flag_set(tp, 5701_DMA_BUG);
14147 				pci_dev_put(bridge);
14148 				break;
14149 			}
14150 		}
14151 	}
14152 
14153 	/* The EPB bridge inside 5714, 5715, and 5780 cannot support
14154 	 * DMA addresses > 40-bit. This bridge may have other additional
14155 	 * 57xx devices behind it in some 4-port NIC designs for example.
14156 	 * Any tg3 device found behind the bridge will also need the 40-bit
14157 	 * DMA workaround.
14158 	 */
14159 	if (tg3_flag(tp, 5780_CLASS)) {
14160 		tg3_flag_set(tp, 40BIT_DMA_BUG);
14161 		tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
14162 	} else {
14163 		struct pci_dev *bridge = NULL;
14164 
14165 		do {
14166 			bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
14167 						PCI_DEVICE_ID_SERVERWORKS_EPB,
14168 						bridge);
14169 			if (bridge && bridge->subordinate &&
14170 			    (bridge->subordinate->number <=
14171 			     tp->pdev->bus->number) &&
14172 			    (bridge->subordinate->subordinate >=
14173 			     tp->pdev->bus->number)) {
14174 				tg3_flag_set(tp, 40BIT_DMA_BUG);
14175 				pci_dev_put(bridge);
14176 				break;
14177 			}
14178 		} while (bridge);
14179 	}
14180 
14181 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14182 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14183 		tp->pdev_peer = tg3_find_peer(tp);
14184 
14185 	/* Determine TSO capabilities */
14186 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0)
14187 		; /* Do nothing. HW bug. */
14188 	else if (tg3_flag(tp, 57765_PLUS))
14189 		tg3_flag_set(tp, HW_TSO_3);
14190 	else if (tg3_flag(tp, 5755_PLUS) ||
14191 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14192 		tg3_flag_set(tp, HW_TSO_2);
14193 	else if (tg3_flag(tp, 5750_PLUS)) {
14194 		tg3_flag_set(tp, HW_TSO_1);
14195 		tg3_flag_set(tp, TSO_BUG);
14196 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 &&
14197 		    tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
14198 			tg3_flag_clear(tp, TSO_BUG);
14199 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14200 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
14201 		   tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
14202 			tg3_flag_set(tp, TSO_BUG);
14203 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
14204 			tp->fw_needed = FIRMWARE_TG3TSO5;
14205 		else
14206 			tp->fw_needed = FIRMWARE_TG3TSO;
14207 	}
14208 
14209 	/* Selectively allow TSO based on operating conditions */
14210 	if (tg3_flag(tp, HW_TSO_1) ||
14211 	    tg3_flag(tp, HW_TSO_2) ||
14212 	    tg3_flag(tp, HW_TSO_3) ||
14213 	    tp->fw_needed) {
14214 		/* For firmware TSO, assume ASF is disabled.
14215 		 * We'll disable TSO later if we discover ASF
14216 		 * is enabled in tg3_get_eeprom_hw_cfg().
14217 		 */
14218 		tg3_flag_set(tp, TSO_CAPABLE);
14219 	} else {
14220 		tg3_flag_clear(tp, TSO_CAPABLE);
14221 		tg3_flag_clear(tp, TSO_BUG);
14222 		tp->fw_needed = NULL;
14223 	}
14224 
14225 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
14226 		tp->fw_needed = FIRMWARE_TG3;
14227 
14228 	tp->irq_max = 1;
14229 
14230 	if (tg3_flag(tp, 5750_PLUS)) {
14231 		tg3_flag_set(tp, SUPPORT_MSI);
14232 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
14233 		    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
14234 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
14235 		     tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
14236 		     tp->pdev_peer == tp->pdev))
14237 			tg3_flag_clear(tp, SUPPORT_MSI);
14238 
14239 		if (tg3_flag(tp, 5755_PLUS) ||
14240 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14241 			tg3_flag_set(tp, 1SHOT_MSI);
14242 		}
14243 
14244 		if (tg3_flag(tp, 57765_PLUS)) {
14245 			tg3_flag_set(tp, SUPPORT_MSIX);
14246 			tp->irq_max = TG3_IRQ_MAX_VECS;
14247 			tg3_rss_init_dflt_indir_tbl(tp);
14248 		}
14249 	}
14250 
14251 	if (tg3_flag(tp, 5755_PLUS))
14252 		tg3_flag_set(tp, SHORT_DMA_BUG);
14253 
14254 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
14255 		tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
14256 
14257 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14258 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14259 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14260 		tg3_flag_set(tp, LRG_PROD_RING_CAP);
14261 
14262 	if (tg3_flag(tp, 57765_PLUS) &&
14263 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0)
14264 		tg3_flag_set(tp, USE_JUMBO_BDFLAG);
14265 
14266 	if (!tg3_flag(tp, 5705_PLUS) ||
14267 	    tg3_flag(tp, 5780_CLASS) ||
14268 	    tg3_flag(tp, USE_JUMBO_BDFLAG))
14269 		tg3_flag_set(tp, JUMBO_CAPABLE);
14270 
14271 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14272 			      &pci_state_reg);
14273 
14274 	if (pci_is_pcie(tp->pdev)) {
14275 		u16 lnkctl;
14276 
14277 		tg3_flag_set(tp, PCI_EXPRESS);
14278 
14279 		pci_read_config_word(tp->pdev,
14280 				     pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
14281 				     &lnkctl);
14282 		if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
14283 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
14284 			    ASIC_REV_5906) {
14285 				tg3_flag_clear(tp, HW_TSO_2);
14286 				tg3_flag_clear(tp, TSO_CAPABLE);
14287 			}
14288 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14289 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14290 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 ||
14291 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A1)
14292 				tg3_flag_set(tp, CLKREQ_BUG);
14293 		} else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) {
14294 			tg3_flag_set(tp, L1PLLPD_EN);
14295 		}
14296 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
14297 		/* BCM5785 devices are effectively PCIe devices, and should
14298 		 * follow PCIe codepaths, but do not have a PCIe capabilities
14299 		 * section.
14300 		 */
14301 		tg3_flag_set(tp, PCI_EXPRESS);
14302 	} else if (!tg3_flag(tp, 5705_PLUS) ||
14303 		   tg3_flag(tp, 5780_CLASS)) {
14304 		tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
14305 		if (!tp->pcix_cap) {
14306 			dev_err(&tp->pdev->dev,
14307 				"Cannot find PCI-X capability, aborting\n");
14308 			return -EIO;
14309 		}
14310 
14311 		if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
14312 			tg3_flag_set(tp, PCIX_MODE);
14313 	}
14314 
14315 	/* If we have an AMD 762 or VIA K8T800 chipset, write
14316 	 * reordering to the mailbox registers done by the host
14317 	 * controller can cause major troubles.  We read back from
14318 	 * every mailbox register write to force the writes to be
14319 	 * posted to the chip in order.
14320 	 */
14321 	if (pci_dev_present(tg3_write_reorder_chipsets) &&
14322 	    !tg3_flag(tp, PCI_EXPRESS))
14323 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
14324 
14325 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
14326 			     &tp->pci_cacheline_sz);
14327 	pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14328 			     &tp->pci_lat_timer);
14329 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14330 	    tp->pci_lat_timer < 64) {
14331 		tp->pci_lat_timer = 64;
14332 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14333 				      tp->pci_lat_timer);
14334 	}
14335 
14336 	/* Important! -- It is critical that the PCI-X hw workaround
14337 	 * situation is decided before the first MMIO register access.
14338 	 */
14339 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
14340 		/* 5700 BX chips need to have their TX producer index
14341 		 * mailboxes written twice to workaround a bug.
14342 		 */
14343 		tg3_flag_set(tp, TXD_MBOX_HWBUG);
14344 
14345 		/* If we are in PCI-X mode, enable register write workaround.
14346 		 *
14347 		 * The workaround is to use indirect register accesses
14348 		 * for all chip writes not to mailbox registers.
14349 		 */
14350 		if (tg3_flag(tp, PCIX_MODE)) {
14351 			u32 pm_reg;
14352 
14353 			tg3_flag_set(tp, PCIX_TARGET_HWBUG);
14354 
14355 			/* The chip can have it's power management PCI config
14356 			 * space registers clobbered due to this bug.
14357 			 * So explicitly force the chip into D0 here.
14358 			 */
14359 			pci_read_config_dword(tp->pdev,
14360 					      tp->pm_cap + PCI_PM_CTRL,
14361 					      &pm_reg);
14362 			pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
14363 			pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
14364 			pci_write_config_dword(tp->pdev,
14365 					       tp->pm_cap + PCI_PM_CTRL,
14366 					       pm_reg);
14367 
14368 			/* Also, force SERR#/PERR# in PCI command. */
14369 			pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14370 			pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
14371 			pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14372 		}
14373 	}
14374 
14375 	if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
14376 		tg3_flag_set(tp, PCI_HIGH_SPEED);
14377 	if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
14378 		tg3_flag_set(tp, PCI_32BIT);
14379 
14380 	/* Chip-specific fixup from Broadcom driver */
14381 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
14382 	    (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
14383 		pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
14384 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
14385 	}
14386 
14387 	/* Default fast path register access methods */
14388 	tp->read32 = tg3_read32;
14389 	tp->write32 = tg3_write32;
14390 	tp->read32_mbox = tg3_read32;
14391 	tp->write32_mbox = tg3_write32;
14392 	tp->write32_tx_mbox = tg3_write32;
14393 	tp->write32_rx_mbox = tg3_write32;
14394 
14395 	/* Various workaround register access methods */
14396 	if (tg3_flag(tp, PCIX_TARGET_HWBUG))
14397 		tp->write32 = tg3_write_indirect_reg32;
14398 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
14399 		 (tg3_flag(tp, PCI_EXPRESS) &&
14400 		  tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
14401 		/*
14402 		 * Back to back register writes can cause problems on these
14403 		 * chips, the workaround is to read back all reg writes
14404 		 * except those to mailbox regs.
14405 		 *
14406 		 * See tg3_write_indirect_reg32().
14407 		 */
14408 		tp->write32 = tg3_write_flush_reg32;
14409 	}
14410 
14411 	if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
14412 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
14413 		if (tg3_flag(tp, MBOX_WRITE_REORDER))
14414 			tp->write32_rx_mbox = tg3_write_flush_reg32;
14415 	}
14416 
14417 	if (tg3_flag(tp, ICH_WORKAROUND)) {
14418 		tp->read32 = tg3_read_indirect_reg32;
14419 		tp->write32 = tg3_write_indirect_reg32;
14420 		tp->read32_mbox = tg3_read_indirect_mbox;
14421 		tp->write32_mbox = tg3_write_indirect_mbox;
14422 		tp->write32_tx_mbox = tg3_write_indirect_mbox;
14423 		tp->write32_rx_mbox = tg3_write_indirect_mbox;
14424 
14425 		iounmap(tp->regs);
14426 		tp->regs = NULL;
14427 
14428 		pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14429 		pci_cmd &= ~PCI_COMMAND_MEMORY;
14430 		pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14431 	}
14432 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14433 		tp->read32_mbox = tg3_read32_mbox_5906;
14434 		tp->write32_mbox = tg3_write32_mbox_5906;
14435 		tp->write32_tx_mbox = tg3_write32_mbox_5906;
14436 		tp->write32_rx_mbox = tg3_write32_mbox_5906;
14437 	}
14438 
14439 	if (tp->write32 == tg3_write_indirect_reg32 ||
14440 	    (tg3_flag(tp, PCIX_MODE) &&
14441 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14442 	      GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
14443 		tg3_flag_set(tp, SRAM_USE_CONFIG);
14444 
14445 	/* The memory arbiter has to be enabled in order for SRAM accesses
14446 	 * to succeed.  Normally on powerup the tg3 chip firmware will make
14447 	 * sure it is enabled, but other entities such as system netboot
14448 	 * code might disable it.
14449 	 */
14450 	val = tr32(MEMARB_MODE);
14451 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
14452 
14453 	tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
14454 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14455 	    tg3_flag(tp, 5780_CLASS)) {
14456 		if (tg3_flag(tp, PCIX_MODE)) {
14457 			pci_read_config_dword(tp->pdev,
14458 					      tp->pcix_cap + PCI_X_STATUS,
14459 					      &val);
14460 			tp->pci_fn = val & 0x7;
14461 		}
14462 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
14463 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14464 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14465 		    NIC_SRAM_CPMUSTAT_SIG) {
14466 			tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717;
14467 			tp->pci_fn = tp->pci_fn ? 1 : 0;
14468 		}
14469 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14470 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
14471 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14472 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14473 		    NIC_SRAM_CPMUSTAT_SIG) {
14474 			tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
14475 				     TG3_CPMU_STATUS_FSHFT_5719;
14476 		}
14477 	}
14478 
14479 	/* Get eeprom hw config before calling tg3_set_power_state().
14480 	 * In particular, the TG3_FLAG_IS_NIC flag must be
14481 	 * determined before calling tg3_set_power_state() so that
14482 	 * we know whether or not to switch out of Vaux power.
14483 	 * When the flag is set, it means that GPIO1 is used for eeprom
14484 	 * write protect and also implies that it is a LOM where GPIOs
14485 	 * are not used to switch power.
14486 	 */
14487 	tg3_get_eeprom_hw_cfg(tp);
14488 
14489 	if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) {
14490 		tg3_flag_clear(tp, TSO_CAPABLE);
14491 		tg3_flag_clear(tp, TSO_BUG);
14492 		tp->fw_needed = NULL;
14493 	}
14494 
14495 	if (tg3_flag(tp, ENABLE_APE)) {
14496 		/* Allow reads and writes to the
14497 		 * APE register and memory space.
14498 		 */
14499 		pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
14500 				 PCISTATE_ALLOW_APE_SHMEM_WR |
14501 				 PCISTATE_ALLOW_APE_PSPACE_WR;
14502 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
14503 				       pci_state_reg);
14504 
14505 		tg3_ape_lock_init(tp);
14506 	}
14507 
14508 	/* Set up tp->grc_local_ctrl before calling
14509 	 * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
14510 	 * will bring 5700's external PHY out of reset.
14511 	 * It is also used as eeprom write protect on LOMs.
14512 	 */
14513 	tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
14514 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14515 	    tg3_flag(tp, EEPROM_WRITE_PROT))
14516 		tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
14517 				       GRC_LCLCTRL_GPIO_OUTPUT1);
14518 	/* Unused GPIO3 must be driven as output on 5752 because there
14519 	 * are no pull-up resistors on unused GPIO pins.
14520 	 */
14521 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
14522 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
14523 
14524 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14525 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14526 	    tg3_flag(tp, 57765_CLASS))
14527 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14528 
14529 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
14530 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
14531 		/* Turn off the debug UART. */
14532 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14533 		if (tg3_flag(tp, IS_NIC))
14534 			/* Keep VMain power. */
14535 			tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
14536 					      GRC_LCLCTRL_GPIO_OUTPUT0;
14537 	}
14538 
14539 	/* Switch out of Vaux if it is a NIC */
14540 	tg3_pwrsrc_switch_to_vmain(tp);
14541 
14542 	/* Derive initial jumbo mode from MTU assigned in
14543 	 * ether_setup() via the alloc_etherdev() call
14544 	 */
14545 	if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
14546 		tg3_flag_set(tp, JUMBO_RING_ENABLE);
14547 
14548 	/* Determine WakeOnLan speed to use. */
14549 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14550 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
14551 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
14552 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
14553 		tg3_flag_clear(tp, WOL_SPEED_100MB);
14554 	} else {
14555 		tg3_flag_set(tp, WOL_SPEED_100MB);
14556 	}
14557 
14558 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14559 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
14560 
14561 	/* A few boards don't want Ethernet@WireSpeed phy feature */
14562 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14563 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14564 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
14565 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
14566 	    (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
14567 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
14568 		tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
14569 
14570 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
14571 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
14572 		tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
14573 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
14574 		tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
14575 
14576 	if (tg3_flag(tp, 5705_PLUS) &&
14577 	    !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
14578 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
14579 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 &&
14580 	    !tg3_flag(tp, 57765_PLUS)) {
14581 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14582 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
14583 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14584 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
14585 			if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
14586 			    tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
14587 				tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
14588 			if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
14589 				tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
14590 		} else
14591 			tp->phy_flags |= TG3_PHYFLG_BER_BUG;
14592 	}
14593 
14594 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
14595 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
14596 		tp->phy_otp = tg3_read_otp_phycfg(tp);
14597 		if (tp->phy_otp == 0)
14598 			tp->phy_otp = TG3_OTP_DEFAULT;
14599 	}
14600 
14601 	if (tg3_flag(tp, CPMU_PRESENT))
14602 		tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
14603 	else
14604 		tp->mi_mode = MAC_MI_MODE_BASE;
14605 
14606 	tp->coalesce_mode = 0;
14607 	if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
14608 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
14609 		tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
14610 
14611 	/* Set these bits to enable statistics workaround. */
14612 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14613 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
14614 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) {
14615 		tp->coalesce_mode |= HOSTCC_MODE_ATTN;
14616 		tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
14617 	}
14618 
14619 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14620 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
14621 		tg3_flag_set(tp, USE_PHYLIB);
14622 
14623 	err = tg3_mdio_init(tp);
14624 	if (err)
14625 		return err;
14626 
14627 	/* Initialize data/descriptor byte/word swapping. */
14628 	val = tr32(GRC_MODE);
14629 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14630 		val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
14631 			GRC_MODE_WORD_SWAP_B2HRX_DATA |
14632 			GRC_MODE_B2HRX_ENABLE |
14633 			GRC_MODE_HTX2B_ENABLE |
14634 			GRC_MODE_HOST_STACKUP);
14635 	else
14636 		val &= GRC_MODE_HOST_STACKUP;
14637 
14638 	tw32(GRC_MODE, val | tp->grc_mode);
14639 
14640 	tg3_switch_clocks(tp);
14641 
14642 	/* Clear this out for sanity. */
14643 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
14644 
14645 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14646 			      &pci_state_reg);
14647 	if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
14648 	    !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
14649 		u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
14650 
14651 		if (chiprevid == CHIPREV_ID_5701_A0 ||
14652 		    chiprevid == CHIPREV_ID_5701_B0 ||
14653 		    chiprevid == CHIPREV_ID_5701_B2 ||
14654 		    chiprevid == CHIPREV_ID_5701_B5) {
14655 			void __iomem *sram_base;
14656 
14657 			/* Write some dummy words into the SRAM status block
14658 			 * area, see if it reads back correctly.  If the return
14659 			 * value is bad, force enable the PCIX workaround.
14660 			 */
14661 			sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
14662 
14663 			writel(0x00000000, sram_base);
14664 			writel(0x00000000, sram_base + 4);
14665 			writel(0xffffffff, sram_base + 4);
14666 			if (readl(sram_base) != 0x00000000)
14667 				tg3_flag_set(tp, PCIX_TARGET_HWBUG);
14668 		}
14669 	}
14670 
14671 	udelay(50);
14672 	tg3_nvram_init(tp);
14673 
14674 	grc_misc_cfg = tr32(GRC_MISC_CFG);
14675 	grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
14676 
14677 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14678 	    (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
14679 	     grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
14680 		tg3_flag_set(tp, IS_5788);
14681 
14682 	if (!tg3_flag(tp, IS_5788) &&
14683 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
14684 		tg3_flag_set(tp, TAGGED_STATUS);
14685 	if (tg3_flag(tp, TAGGED_STATUS)) {
14686 		tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
14687 				      HOSTCC_MODE_CLRTICK_TXBD);
14688 
14689 		tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
14690 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14691 				       tp->misc_host_ctrl);
14692 	}
14693 
14694 	/* Preserve the APE MAC_MODE bits */
14695 	if (tg3_flag(tp, ENABLE_APE))
14696 		tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
14697 	else
14698 		tp->mac_mode = 0;
14699 
14700 	/* these are limited to 10/100 only */
14701 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14702 	     (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
14703 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14704 	     tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
14705 	     (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
14706 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
14707 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
14708 	    (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
14709 	     (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
14710 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
14711 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
14712 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 ||
14713 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
14714 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
14715 	    (tp->phy_flags & TG3_PHYFLG_IS_FET))
14716 		tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
14717 
14718 	err = tg3_phy_probe(tp);
14719 	if (err) {
14720 		dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
14721 		/* ... but do not return immediately ... */
14722 		tg3_mdio_fini(tp);
14723 	}
14724 
14725 	tg3_read_vpd(tp);
14726 	tg3_read_fw_ver(tp);
14727 
14728 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
14729 		tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
14730 	} else {
14731 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
14732 			tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
14733 		else
14734 			tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
14735 	}
14736 
14737 	/* 5700 {AX,BX} chips have a broken status block link
14738 	 * change bit implementation, so we must use the
14739 	 * status register in those cases.
14740 	 */
14741 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
14742 		tg3_flag_set(tp, USE_LINKCHG_REG);
14743 	else
14744 		tg3_flag_clear(tp, USE_LINKCHG_REG);
14745 
14746 	/* The led_ctrl is set during tg3_phy_probe, here we might
14747 	 * have to force the link status polling mechanism based
14748 	 * upon subsystem IDs.
14749 	 */
14750 	if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
14751 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
14752 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
14753 		tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
14754 		tg3_flag_set(tp, USE_LINKCHG_REG);
14755 	}
14756 
14757 	/* For all SERDES we poll the MAC status register. */
14758 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
14759 		tg3_flag_set(tp, POLL_SERDES);
14760 	else
14761 		tg3_flag_clear(tp, POLL_SERDES);
14762 
14763 	tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
14764 	tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
14765 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
14766 	    tg3_flag(tp, PCIX_MODE)) {
14767 		tp->rx_offset = NET_SKB_PAD;
14768 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
14769 		tp->rx_copy_thresh = ~(u16)0;
14770 #endif
14771 	}
14772 
14773 	tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
14774 	tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
14775 	tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
14776 
14777 	tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
14778 
14779 	/* Increment the rx prod index on the rx std ring by at most
14780 	 * 8 for these chips to workaround hw errata.
14781 	 */
14782 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
14783 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
14784 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
14785 		tp->rx_std_max_post = 8;
14786 
14787 	if (tg3_flag(tp, ASPM_WORKAROUND))
14788 		tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
14789 				     PCIE_PWR_MGMT_L1_THRESH_MSK;
14790 
14791 	return err;
14792 }
14793 
14794 #ifdef CONFIG_SPARC
14795 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
14796 {
14797 	struct net_device *dev = tp->dev;
14798 	struct pci_dev *pdev = tp->pdev;
14799 	struct device_node *dp = pci_device_to_OF_node(pdev);
14800 	const unsigned char *addr;
14801 	int len;
14802 
14803 	addr = of_get_property(dp, "local-mac-address", &len);
14804 	if (addr && len == 6) {
14805 		memcpy(dev->dev_addr, addr, 6);
14806 		memcpy(dev->perm_addr, dev->dev_addr, 6);
14807 		return 0;
14808 	}
14809 	return -ENODEV;
14810 }
14811 
14812 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
14813 {
14814 	struct net_device *dev = tp->dev;
14815 
14816 	memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
14817 	memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
14818 	return 0;
14819 }
14820 #endif
14821 
14822 static int __devinit tg3_get_device_address(struct tg3 *tp)
14823 {
14824 	struct net_device *dev = tp->dev;
14825 	u32 hi, lo, mac_offset;
14826 	int addr_ok = 0;
14827 
14828 #ifdef CONFIG_SPARC
14829 	if (!tg3_get_macaddr_sparc(tp))
14830 		return 0;
14831 #endif
14832 
14833 	mac_offset = 0x7c;
14834 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14835 	    tg3_flag(tp, 5780_CLASS)) {
14836 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
14837 			mac_offset = 0xcc;
14838 		if (tg3_nvram_lock(tp))
14839 			tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
14840 		else
14841 			tg3_nvram_unlock(tp);
14842 	} else if (tg3_flag(tp, 5717_PLUS)) {
14843 		if (tp->pci_fn & 1)
14844 			mac_offset = 0xcc;
14845 		if (tp->pci_fn > 1)
14846 			mac_offset += 0x18c;
14847 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14848 		mac_offset = 0x10;
14849 
14850 	/* First try to get it from MAC address mailbox. */
14851 	tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
14852 	if ((hi >> 16) == 0x484b) {
14853 		dev->dev_addr[0] = (hi >>  8) & 0xff;
14854 		dev->dev_addr[1] = (hi >>  0) & 0xff;
14855 
14856 		tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
14857 		dev->dev_addr[2] = (lo >> 24) & 0xff;
14858 		dev->dev_addr[3] = (lo >> 16) & 0xff;
14859 		dev->dev_addr[4] = (lo >>  8) & 0xff;
14860 		dev->dev_addr[5] = (lo >>  0) & 0xff;
14861 
14862 		/* Some old bootcode may report a 0 MAC address in SRAM */
14863 		addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
14864 	}
14865 	if (!addr_ok) {
14866 		/* Next, try NVRAM. */
14867 		if (!tg3_flag(tp, NO_NVRAM) &&
14868 		    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
14869 		    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
14870 			memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
14871 			memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
14872 		}
14873 		/* Finally just fetch it out of the MAC control regs. */
14874 		else {
14875 			hi = tr32(MAC_ADDR_0_HIGH);
14876 			lo = tr32(MAC_ADDR_0_LOW);
14877 
14878 			dev->dev_addr[5] = lo & 0xff;
14879 			dev->dev_addr[4] = (lo >> 8) & 0xff;
14880 			dev->dev_addr[3] = (lo >> 16) & 0xff;
14881 			dev->dev_addr[2] = (lo >> 24) & 0xff;
14882 			dev->dev_addr[1] = hi & 0xff;
14883 			dev->dev_addr[0] = (hi >> 8) & 0xff;
14884 		}
14885 	}
14886 
14887 	if (!is_valid_ether_addr(&dev->dev_addr[0])) {
14888 #ifdef CONFIG_SPARC
14889 		if (!tg3_get_default_macaddr_sparc(tp))
14890 			return 0;
14891 #endif
14892 		return -EINVAL;
14893 	}
14894 	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
14895 	return 0;
14896 }
14897 
14898 #define BOUNDARY_SINGLE_CACHELINE	1
14899 #define BOUNDARY_MULTI_CACHELINE	2
14900 
14901 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
14902 {
14903 	int cacheline_size;
14904 	u8 byte;
14905 	int goal;
14906 
14907 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
14908 	if (byte == 0)
14909 		cacheline_size = 1024;
14910 	else
14911 		cacheline_size = (int) byte * 4;
14912 
14913 	/* On 5703 and later chips, the boundary bits have no
14914 	 * effect.
14915 	 */
14916 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14917 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
14918 	    !tg3_flag(tp, PCI_EXPRESS))
14919 		goto out;
14920 
14921 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
14922 	goal = BOUNDARY_MULTI_CACHELINE;
14923 #else
14924 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
14925 	goal = BOUNDARY_SINGLE_CACHELINE;
14926 #else
14927 	goal = 0;
14928 #endif
14929 #endif
14930 
14931 	if (tg3_flag(tp, 57765_PLUS)) {
14932 		val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
14933 		goto out;
14934 	}
14935 
14936 	if (!goal)
14937 		goto out;
14938 
14939 	/* PCI controllers on most RISC systems tend to disconnect
14940 	 * when a device tries to burst across a cache-line boundary.
14941 	 * Therefore, letting tg3 do so just wastes PCI bandwidth.
14942 	 *
14943 	 * Unfortunately, for PCI-E there are only limited
14944 	 * write-side controls for this, and thus for reads
14945 	 * we will still get the disconnects.  We'll also waste
14946 	 * these PCI cycles for both read and write for chips
14947 	 * other than 5700 and 5701 which do not implement the
14948 	 * boundary bits.
14949 	 */
14950 	if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
14951 		switch (cacheline_size) {
14952 		case 16:
14953 		case 32:
14954 		case 64:
14955 		case 128:
14956 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
14957 				val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
14958 					DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
14959 			} else {
14960 				val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
14961 					DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
14962 			}
14963 			break;
14964 
14965 		case 256:
14966 			val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
14967 				DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
14968 			break;
14969 
14970 		default:
14971 			val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
14972 				DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
14973 			break;
14974 		}
14975 	} else if (tg3_flag(tp, PCI_EXPRESS)) {
14976 		switch (cacheline_size) {
14977 		case 16:
14978 		case 32:
14979 		case 64:
14980 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
14981 				val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
14982 				val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
14983 				break;
14984 			}
14985 			/* fallthrough */
14986 		case 128:
14987 		default:
14988 			val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
14989 			val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
14990 			break;
14991 		}
14992 	} else {
14993 		switch (cacheline_size) {
14994 		case 16:
14995 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
14996 				val |= (DMA_RWCTRL_READ_BNDRY_16 |
14997 					DMA_RWCTRL_WRITE_BNDRY_16);
14998 				break;
14999 			}
15000 			/* fallthrough */
15001 		case 32:
15002 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15003 				val |= (DMA_RWCTRL_READ_BNDRY_32 |
15004 					DMA_RWCTRL_WRITE_BNDRY_32);
15005 				break;
15006 			}
15007 			/* fallthrough */
15008 		case 64:
15009 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15010 				val |= (DMA_RWCTRL_READ_BNDRY_64 |
15011 					DMA_RWCTRL_WRITE_BNDRY_64);
15012 				break;
15013 			}
15014 			/* fallthrough */
15015 		case 128:
15016 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15017 				val |= (DMA_RWCTRL_READ_BNDRY_128 |
15018 					DMA_RWCTRL_WRITE_BNDRY_128);
15019 				break;
15020 			}
15021 			/* fallthrough */
15022 		case 256:
15023 			val |= (DMA_RWCTRL_READ_BNDRY_256 |
15024 				DMA_RWCTRL_WRITE_BNDRY_256);
15025 			break;
15026 		case 512:
15027 			val |= (DMA_RWCTRL_READ_BNDRY_512 |
15028 				DMA_RWCTRL_WRITE_BNDRY_512);
15029 			break;
15030 		case 1024:
15031 		default:
15032 			val |= (DMA_RWCTRL_READ_BNDRY_1024 |
15033 				DMA_RWCTRL_WRITE_BNDRY_1024);
15034 			break;
15035 		}
15036 	}
15037 
15038 out:
15039 	return val;
15040 }
15041 
15042 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
15043 {
15044 	struct tg3_internal_buffer_desc test_desc;
15045 	u32 sram_dma_descs;
15046 	int i, ret;
15047 
15048 	sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
15049 
15050 	tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
15051 	tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
15052 	tw32(RDMAC_STATUS, 0);
15053 	tw32(WDMAC_STATUS, 0);
15054 
15055 	tw32(BUFMGR_MODE, 0);
15056 	tw32(FTQ_RESET, 0);
15057 
15058 	test_desc.addr_hi = ((u64) buf_dma) >> 32;
15059 	test_desc.addr_lo = buf_dma & 0xffffffff;
15060 	test_desc.nic_mbuf = 0x00002100;
15061 	test_desc.len = size;
15062 
15063 	/*
15064 	 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
15065 	 * the *second* time the tg3 driver was getting loaded after an
15066 	 * initial scan.
15067 	 *
15068 	 * Broadcom tells me:
15069 	 *   ...the DMA engine is connected to the GRC block and a DMA
15070 	 *   reset may affect the GRC block in some unpredictable way...
15071 	 *   The behavior of resets to individual blocks has not been tested.
15072 	 *
15073 	 * Broadcom noted the GRC reset will also reset all sub-components.
15074 	 */
15075 	if (to_device) {
15076 		test_desc.cqid_sqid = (13 << 8) | 2;
15077 
15078 		tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
15079 		udelay(40);
15080 	} else {
15081 		test_desc.cqid_sqid = (16 << 8) | 7;
15082 
15083 		tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
15084 		udelay(40);
15085 	}
15086 	test_desc.flags = 0x00000005;
15087 
15088 	for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
15089 		u32 val;
15090 
15091 		val = *(((u32 *)&test_desc) + i);
15092 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
15093 				       sram_dma_descs + (i * sizeof(u32)));
15094 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
15095 	}
15096 	pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
15097 
15098 	if (to_device)
15099 		tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
15100 	else
15101 		tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
15102 
15103 	ret = -ENODEV;
15104 	for (i = 0; i < 40; i++) {
15105 		u32 val;
15106 
15107 		if (to_device)
15108 			val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
15109 		else
15110 			val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
15111 		if ((val & 0xffff) == sram_dma_descs) {
15112 			ret = 0;
15113 			break;
15114 		}
15115 
15116 		udelay(100);
15117 	}
15118 
15119 	return ret;
15120 }
15121 
15122 #define TEST_BUFFER_SIZE	0x2000
15123 
15124 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
15125 	{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
15126 	{ },
15127 };
15128 
15129 static int __devinit tg3_test_dma(struct tg3 *tp)
15130 {
15131 	dma_addr_t buf_dma;
15132 	u32 *buf, saved_dma_rwctrl;
15133 	int ret = 0;
15134 
15135 	buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
15136 				 &buf_dma, GFP_KERNEL);
15137 	if (!buf) {
15138 		ret = -ENOMEM;
15139 		goto out_nofree;
15140 	}
15141 
15142 	tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
15143 			  (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
15144 
15145 	tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
15146 
15147 	if (tg3_flag(tp, 57765_PLUS))
15148 		goto out;
15149 
15150 	if (tg3_flag(tp, PCI_EXPRESS)) {
15151 		/* DMA read watermark not used on PCIE */
15152 		tp->dma_rwctrl |= 0x00180000;
15153 	} else if (!tg3_flag(tp, PCIX_MODE)) {
15154 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
15155 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
15156 			tp->dma_rwctrl |= 0x003f0000;
15157 		else
15158 			tp->dma_rwctrl |= 0x003f000f;
15159 	} else {
15160 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
15161 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
15162 			u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
15163 			u32 read_water = 0x7;
15164 
15165 			/* If the 5704 is behind the EPB bridge, we can
15166 			 * do the less restrictive ONE_DMA workaround for
15167 			 * better performance.
15168 			 */
15169 			if (tg3_flag(tp, 40BIT_DMA_BUG) &&
15170 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
15171 				tp->dma_rwctrl |= 0x8000;
15172 			else if (ccval == 0x6 || ccval == 0x7)
15173 				tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
15174 
15175 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
15176 				read_water = 4;
15177 			/* Set bit 23 to enable PCIX hw bug fix */
15178 			tp->dma_rwctrl |=
15179 				(read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
15180 				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
15181 				(1 << 23);
15182 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
15183 			/* 5780 always in PCIX mode */
15184 			tp->dma_rwctrl |= 0x00144000;
15185 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
15186 			/* 5714 always in PCIX mode */
15187 			tp->dma_rwctrl |= 0x00148000;
15188 		} else {
15189 			tp->dma_rwctrl |= 0x001b000f;
15190 		}
15191 	}
15192 
15193 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
15194 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
15195 		tp->dma_rwctrl &= 0xfffffff0;
15196 
15197 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15198 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
15199 		/* Remove this if it causes problems for some boards. */
15200 		tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
15201 
15202 		/* On 5700/5701 chips, we need to set this bit.
15203 		 * Otherwise the chip will issue cacheline transactions
15204 		 * to streamable DMA memory with not all the byte
15205 		 * enables turned on.  This is an error on several
15206 		 * RISC PCI controllers, in particular sparc64.
15207 		 *
15208 		 * On 5703/5704 chips, this bit has been reassigned
15209 		 * a different meaning.  In particular, it is used
15210 		 * on those chips to enable a PCI-X workaround.
15211 		 */
15212 		tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
15213 	}
15214 
15215 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15216 
15217 #if 0
15218 	/* Unneeded, already done by tg3_get_invariants.  */
15219 	tg3_switch_clocks(tp);
15220 #endif
15221 
15222 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15223 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
15224 		goto out;
15225 
15226 	/* It is best to perform DMA test with maximum write burst size
15227 	 * to expose the 5700/5701 write DMA bug.
15228 	 */
15229 	saved_dma_rwctrl = tp->dma_rwctrl;
15230 	tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15231 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15232 
15233 	while (1) {
15234 		u32 *p = buf, i;
15235 
15236 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
15237 			p[i] = i;
15238 
15239 		/* Send the buffer to the chip. */
15240 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
15241 		if (ret) {
15242 			dev_err(&tp->pdev->dev,
15243 				"%s: Buffer write failed. err = %d\n",
15244 				__func__, ret);
15245 			break;
15246 		}
15247 
15248 #if 0
15249 		/* validate data reached card RAM correctly. */
15250 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15251 			u32 val;
15252 			tg3_read_mem(tp, 0x2100 + (i*4), &val);
15253 			if (le32_to_cpu(val) != p[i]) {
15254 				dev_err(&tp->pdev->dev,
15255 					"%s: Buffer corrupted on device! "
15256 					"(%d != %d)\n", __func__, val, i);
15257 				/* ret = -ENODEV here? */
15258 			}
15259 			p[i] = 0;
15260 		}
15261 #endif
15262 		/* Now read it back. */
15263 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
15264 		if (ret) {
15265 			dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
15266 				"err = %d\n", __func__, ret);
15267 			break;
15268 		}
15269 
15270 		/* Verify it. */
15271 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15272 			if (p[i] == i)
15273 				continue;
15274 
15275 			if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15276 			    DMA_RWCTRL_WRITE_BNDRY_16) {
15277 				tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15278 				tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15279 				tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15280 				break;
15281 			} else {
15282 				dev_err(&tp->pdev->dev,
15283 					"%s: Buffer corrupted on read back! "
15284 					"(%d != %d)\n", __func__, p[i], i);
15285 				ret = -ENODEV;
15286 				goto out;
15287 			}
15288 		}
15289 
15290 		if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
15291 			/* Success. */
15292 			ret = 0;
15293 			break;
15294 		}
15295 	}
15296 	if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15297 	    DMA_RWCTRL_WRITE_BNDRY_16) {
15298 		/* DMA test passed without adjusting DMA boundary,
15299 		 * now look for chipsets that are known to expose the
15300 		 * DMA bug without failing the test.
15301 		 */
15302 		if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
15303 			tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15304 			tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15305 		} else {
15306 			/* Safe to use the calculated DMA boundary. */
15307 			tp->dma_rwctrl = saved_dma_rwctrl;
15308 		}
15309 
15310 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15311 	}
15312 
15313 out:
15314 	dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
15315 out_nofree:
15316 	return ret;
15317 }
15318 
15319 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
15320 {
15321 	if (tg3_flag(tp, 57765_PLUS)) {
15322 		tp->bufmgr_config.mbuf_read_dma_low_water =
15323 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15324 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15325 			DEFAULT_MB_MACRX_LOW_WATER_57765;
15326 		tp->bufmgr_config.mbuf_high_water =
15327 			DEFAULT_MB_HIGH_WATER_57765;
15328 
15329 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15330 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15331 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15332 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
15333 		tp->bufmgr_config.mbuf_high_water_jumbo =
15334 			DEFAULT_MB_HIGH_WATER_JUMBO_57765;
15335 	} else if (tg3_flag(tp, 5705_PLUS)) {
15336 		tp->bufmgr_config.mbuf_read_dma_low_water =
15337 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15338 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15339 			DEFAULT_MB_MACRX_LOW_WATER_5705;
15340 		tp->bufmgr_config.mbuf_high_water =
15341 			DEFAULT_MB_HIGH_WATER_5705;
15342 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
15343 			tp->bufmgr_config.mbuf_mac_rx_low_water =
15344 				DEFAULT_MB_MACRX_LOW_WATER_5906;
15345 			tp->bufmgr_config.mbuf_high_water =
15346 				DEFAULT_MB_HIGH_WATER_5906;
15347 		}
15348 
15349 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15350 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
15351 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15352 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
15353 		tp->bufmgr_config.mbuf_high_water_jumbo =
15354 			DEFAULT_MB_HIGH_WATER_JUMBO_5780;
15355 	} else {
15356 		tp->bufmgr_config.mbuf_read_dma_low_water =
15357 			DEFAULT_MB_RDMA_LOW_WATER;
15358 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15359 			DEFAULT_MB_MACRX_LOW_WATER;
15360 		tp->bufmgr_config.mbuf_high_water =
15361 			DEFAULT_MB_HIGH_WATER;
15362 
15363 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15364 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
15365 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15366 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
15367 		tp->bufmgr_config.mbuf_high_water_jumbo =
15368 			DEFAULT_MB_HIGH_WATER_JUMBO;
15369 	}
15370 
15371 	tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
15372 	tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
15373 }
15374 
15375 static char * __devinit tg3_phy_string(struct tg3 *tp)
15376 {
15377 	switch (tp->phy_id & TG3_PHY_ID_MASK) {
15378 	case TG3_PHY_ID_BCM5400:	return "5400";
15379 	case TG3_PHY_ID_BCM5401:	return "5401";
15380 	case TG3_PHY_ID_BCM5411:	return "5411";
15381 	case TG3_PHY_ID_BCM5701:	return "5701";
15382 	case TG3_PHY_ID_BCM5703:	return "5703";
15383 	case TG3_PHY_ID_BCM5704:	return "5704";
15384 	case TG3_PHY_ID_BCM5705:	return "5705";
15385 	case TG3_PHY_ID_BCM5750:	return "5750";
15386 	case TG3_PHY_ID_BCM5752:	return "5752";
15387 	case TG3_PHY_ID_BCM5714:	return "5714";
15388 	case TG3_PHY_ID_BCM5780:	return "5780";
15389 	case TG3_PHY_ID_BCM5755:	return "5755";
15390 	case TG3_PHY_ID_BCM5787:	return "5787";
15391 	case TG3_PHY_ID_BCM5784:	return "5784";
15392 	case TG3_PHY_ID_BCM5756:	return "5722/5756";
15393 	case TG3_PHY_ID_BCM5906:	return "5906";
15394 	case TG3_PHY_ID_BCM5761:	return "5761";
15395 	case TG3_PHY_ID_BCM5718C:	return "5718C";
15396 	case TG3_PHY_ID_BCM5718S:	return "5718S";
15397 	case TG3_PHY_ID_BCM57765:	return "57765";
15398 	case TG3_PHY_ID_BCM5719C:	return "5719C";
15399 	case TG3_PHY_ID_BCM5720C:	return "5720C";
15400 	case TG3_PHY_ID_BCM8002:	return "8002/serdes";
15401 	case 0:			return "serdes";
15402 	default:		return "unknown";
15403 	}
15404 }
15405 
15406 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
15407 {
15408 	if (tg3_flag(tp, PCI_EXPRESS)) {
15409 		strcpy(str, "PCI Express");
15410 		return str;
15411 	} else if (tg3_flag(tp, PCIX_MODE)) {
15412 		u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
15413 
15414 		strcpy(str, "PCIX:");
15415 
15416 		if ((clock_ctrl == 7) ||
15417 		    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
15418 		     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
15419 			strcat(str, "133MHz");
15420 		else if (clock_ctrl == 0)
15421 			strcat(str, "33MHz");
15422 		else if (clock_ctrl == 2)
15423 			strcat(str, "50MHz");
15424 		else if (clock_ctrl == 4)
15425 			strcat(str, "66MHz");
15426 		else if (clock_ctrl == 6)
15427 			strcat(str, "100MHz");
15428 	} else {
15429 		strcpy(str, "PCI:");
15430 		if (tg3_flag(tp, PCI_HIGH_SPEED))
15431 			strcat(str, "66MHz");
15432 		else
15433 			strcat(str, "33MHz");
15434 	}
15435 	if (tg3_flag(tp, PCI_32BIT))
15436 		strcat(str, ":32-bit");
15437 	else
15438 		strcat(str, ":64-bit");
15439 	return str;
15440 }
15441 
15442 static void __devinit tg3_init_coal(struct tg3 *tp)
15443 {
15444 	struct ethtool_coalesce *ec = &tp->coal;
15445 
15446 	memset(ec, 0, sizeof(*ec));
15447 	ec->cmd = ETHTOOL_GCOALESCE;
15448 	ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
15449 	ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
15450 	ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
15451 	ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
15452 	ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
15453 	ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
15454 	ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
15455 	ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
15456 	ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
15457 
15458 	if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
15459 				 HOSTCC_MODE_CLRTICK_TXBD)) {
15460 		ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
15461 		ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
15462 		ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
15463 		ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
15464 	}
15465 
15466 	if (tg3_flag(tp, 5705_PLUS)) {
15467 		ec->rx_coalesce_usecs_irq = 0;
15468 		ec->tx_coalesce_usecs_irq = 0;
15469 		ec->stats_block_coalesce_usecs = 0;
15470 	}
15471 }
15472 
15473 static int __devinit tg3_init_one(struct pci_dev *pdev,
15474 				  const struct pci_device_id *ent)
15475 {
15476 	struct net_device *dev;
15477 	struct tg3 *tp;
15478 	int i, err, pm_cap;
15479 	u32 sndmbx, rcvmbx, intmbx;
15480 	char str[40];
15481 	u64 dma_mask, persist_dma_mask;
15482 	netdev_features_t features = 0;
15483 
15484 	printk_once(KERN_INFO "%s\n", version);
15485 
15486 	err = pci_enable_device(pdev);
15487 	if (err) {
15488 		dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
15489 		return err;
15490 	}
15491 
15492 	err = pci_request_regions(pdev, DRV_MODULE_NAME);
15493 	if (err) {
15494 		dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
15495 		goto err_out_disable_pdev;
15496 	}
15497 
15498 	pci_set_master(pdev);
15499 
15500 	/* Find power-management capability. */
15501 	pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
15502 	if (pm_cap == 0) {
15503 		dev_err(&pdev->dev,
15504 			"Cannot find Power Management capability, aborting\n");
15505 		err = -EIO;
15506 		goto err_out_free_res;
15507 	}
15508 
15509 	err = pci_set_power_state(pdev, PCI_D0);
15510 	if (err) {
15511 		dev_err(&pdev->dev, "Transition to D0 failed, aborting\n");
15512 		goto err_out_free_res;
15513 	}
15514 
15515 	dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
15516 	if (!dev) {
15517 		err = -ENOMEM;
15518 		goto err_out_power_down;
15519 	}
15520 
15521 	SET_NETDEV_DEV(dev, &pdev->dev);
15522 
15523 	tp = netdev_priv(dev);
15524 	tp->pdev = pdev;
15525 	tp->dev = dev;
15526 	tp->pm_cap = pm_cap;
15527 	tp->rx_mode = TG3_DEF_RX_MODE;
15528 	tp->tx_mode = TG3_DEF_TX_MODE;
15529 
15530 	if (tg3_debug > 0)
15531 		tp->msg_enable = tg3_debug;
15532 	else
15533 		tp->msg_enable = TG3_DEF_MSG_ENABLE;
15534 
15535 	/* The word/byte swap controls here control register access byte
15536 	 * swapping.  DMA data byte swapping is controlled in the GRC_MODE
15537 	 * setting below.
15538 	 */
15539 	tp->misc_host_ctrl =
15540 		MISC_HOST_CTRL_MASK_PCI_INT |
15541 		MISC_HOST_CTRL_WORD_SWAP |
15542 		MISC_HOST_CTRL_INDIR_ACCESS |
15543 		MISC_HOST_CTRL_PCISTATE_RW;
15544 
15545 	/* The NONFRM (non-frame) byte/word swap controls take effect
15546 	 * on descriptor entries, anything which isn't packet data.
15547 	 *
15548 	 * The StrongARM chips on the board (one for tx, one for rx)
15549 	 * are running in big-endian mode.
15550 	 */
15551 	tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
15552 			GRC_MODE_WSWAP_NONFRM_DATA);
15553 #ifdef __BIG_ENDIAN
15554 	tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
15555 #endif
15556 	spin_lock_init(&tp->lock);
15557 	spin_lock_init(&tp->indirect_lock);
15558 	INIT_WORK(&tp->reset_task, tg3_reset_task);
15559 
15560 	tp->regs = pci_ioremap_bar(pdev, BAR_0);
15561 	if (!tp->regs) {
15562 		dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
15563 		err = -ENOMEM;
15564 		goto err_out_free_dev;
15565 	}
15566 
15567 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
15568 	    tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
15569 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
15570 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
15571 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15572 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
15573 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
15574 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) {
15575 		tg3_flag_set(tp, ENABLE_APE);
15576 		tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
15577 		if (!tp->aperegs) {
15578 			dev_err(&pdev->dev,
15579 				"Cannot map APE registers, aborting\n");
15580 			err = -ENOMEM;
15581 			goto err_out_iounmap;
15582 		}
15583 	}
15584 
15585 	tp->rx_pending = TG3_DEF_RX_RING_PENDING;
15586 	tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
15587 
15588 	dev->ethtool_ops = &tg3_ethtool_ops;
15589 	dev->watchdog_timeo = TG3_TX_TIMEOUT;
15590 	dev->netdev_ops = &tg3_netdev_ops;
15591 	dev->irq = pdev->irq;
15592 
15593 	err = tg3_get_invariants(tp);
15594 	if (err) {
15595 		dev_err(&pdev->dev,
15596 			"Problem fetching invariants of chip, aborting\n");
15597 		goto err_out_apeunmap;
15598 	}
15599 
15600 	/* The EPB bridge inside 5714, 5715, and 5780 and any
15601 	 * device behind the EPB cannot support DMA addresses > 40-bit.
15602 	 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
15603 	 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
15604 	 * do DMA address check in tg3_start_xmit().
15605 	 */
15606 	if (tg3_flag(tp, IS_5788))
15607 		persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
15608 	else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
15609 		persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
15610 #ifdef CONFIG_HIGHMEM
15611 		dma_mask = DMA_BIT_MASK(64);
15612 #endif
15613 	} else
15614 		persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
15615 
15616 	/* Configure DMA attributes. */
15617 	if (dma_mask > DMA_BIT_MASK(32)) {
15618 		err = pci_set_dma_mask(pdev, dma_mask);
15619 		if (!err) {
15620 			features |= NETIF_F_HIGHDMA;
15621 			err = pci_set_consistent_dma_mask(pdev,
15622 							  persist_dma_mask);
15623 			if (err < 0) {
15624 				dev_err(&pdev->dev, "Unable to obtain 64 bit "
15625 					"DMA for consistent allocations\n");
15626 				goto err_out_apeunmap;
15627 			}
15628 		}
15629 	}
15630 	if (err || dma_mask == DMA_BIT_MASK(32)) {
15631 		err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
15632 		if (err) {
15633 			dev_err(&pdev->dev,
15634 				"No usable DMA configuration, aborting\n");
15635 			goto err_out_apeunmap;
15636 		}
15637 	}
15638 
15639 	tg3_init_bufmgr_config(tp);
15640 
15641 	features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
15642 
15643 	/* 5700 B0 chips do not support checksumming correctly due
15644 	 * to hardware bugs.
15645 	 */
15646 	if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) {
15647 		features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
15648 
15649 		if (tg3_flag(tp, 5755_PLUS))
15650 			features |= NETIF_F_IPV6_CSUM;
15651 	}
15652 
15653 	/* TSO is on by default on chips that support hardware TSO.
15654 	 * Firmware TSO on older chips gives lower performance, so it
15655 	 * is off by default, but can be enabled using ethtool.
15656 	 */
15657 	if ((tg3_flag(tp, HW_TSO_1) ||
15658 	     tg3_flag(tp, HW_TSO_2) ||
15659 	     tg3_flag(tp, HW_TSO_3)) &&
15660 	    (features & NETIF_F_IP_CSUM))
15661 		features |= NETIF_F_TSO;
15662 	if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
15663 		if (features & NETIF_F_IPV6_CSUM)
15664 			features |= NETIF_F_TSO6;
15665 		if (tg3_flag(tp, HW_TSO_3) ||
15666 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
15667 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
15668 		     GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) ||
15669 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
15670 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
15671 			features |= NETIF_F_TSO_ECN;
15672 	}
15673 
15674 	dev->features |= features;
15675 	dev->vlan_features |= features;
15676 
15677 	/*
15678 	 * Add loopback capability only for a subset of devices that support
15679 	 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
15680 	 * loopback for the remaining devices.
15681 	 */
15682 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
15683 	    !tg3_flag(tp, CPMU_PRESENT))
15684 		/* Add the loopback capability */
15685 		features |= NETIF_F_LOOPBACK;
15686 
15687 	dev->hw_features |= features;
15688 
15689 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
15690 	    !tg3_flag(tp, TSO_CAPABLE) &&
15691 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
15692 		tg3_flag_set(tp, MAX_RXPEND_64);
15693 		tp->rx_pending = 63;
15694 	}
15695 
15696 	err = tg3_get_device_address(tp);
15697 	if (err) {
15698 		dev_err(&pdev->dev,
15699 			"Could not obtain valid ethernet address, aborting\n");
15700 		goto err_out_apeunmap;
15701 	}
15702 
15703 	/*
15704 	 * Reset chip in case UNDI or EFI driver did not shutdown
15705 	 * DMA self test will enable WDMAC and we'll see (spurious)
15706 	 * pending DMA on the PCI bus at that point.
15707 	 */
15708 	if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
15709 	    (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
15710 		tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
15711 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
15712 	}
15713 
15714 	err = tg3_test_dma(tp);
15715 	if (err) {
15716 		dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
15717 		goto err_out_apeunmap;
15718 	}
15719 
15720 	intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
15721 	rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
15722 	sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
15723 	for (i = 0; i < tp->irq_max; i++) {
15724 		struct tg3_napi *tnapi = &tp->napi[i];
15725 
15726 		tnapi->tp = tp;
15727 		tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
15728 
15729 		tnapi->int_mbox = intmbx;
15730 		if (i <= 4)
15731 			intmbx += 0x8;
15732 		else
15733 			intmbx += 0x4;
15734 
15735 		tnapi->consmbox = rcvmbx;
15736 		tnapi->prodmbox = sndmbx;
15737 
15738 		if (i)
15739 			tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
15740 		else
15741 			tnapi->coal_now = HOSTCC_MODE_NOW;
15742 
15743 		if (!tg3_flag(tp, SUPPORT_MSIX))
15744 			break;
15745 
15746 		/*
15747 		 * If we support MSIX, we'll be using RSS.  If we're using
15748 		 * RSS, the first vector only handles link interrupts and the
15749 		 * remaining vectors handle rx and tx interrupts.  Reuse the
15750 		 * mailbox values for the next iteration.  The values we setup
15751 		 * above are still useful for the single vectored mode.
15752 		 */
15753 		if (!i)
15754 			continue;
15755 
15756 		rcvmbx += 0x8;
15757 
15758 		if (sndmbx & 0x4)
15759 			sndmbx -= 0x4;
15760 		else
15761 			sndmbx += 0xc;
15762 	}
15763 
15764 	tg3_init_coal(tp);
15765 
15766 	pci_set_drvdata(pdev, dev);
15767 
15768 	if (tg3_flag(tp, 5717_PLUS)) {
15769 		/* Resume a low-power mode */
15770 		tg3_frob_aux_power(tp, false);
15771 	}
15772 
15773 	tg3_timer_init(tp);
15774 
15775 	err = register_netdev(dev);
15776 	if (err) {
15777 		dev_err(&pdev->dev, "Cannot register net device, aborting\n");
15778 		goto err_out_apeunmap;
15779 	}
15780 
15781 	netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
15782 		    tp->board_part_number,
15783 		    tp->pci_chip_rev_id,
15784 		    tg3_bus_string(tp, str),
15785 		    dev->dev_addr);
15786 
15787 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
15788 		struct phy_device *phydev;
15789 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
15790 		netdev_info(dev,
15791 			    "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
15792 			    phydev->drv->name, dev_name(&phydev->dev));
15793 	} else {
15794 		char *ethtype;
15795 
15796 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
15797 			ethtype = "10/100Base-TX";
15798 		else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
15799 			ethtype = "1000Base-SX";
15800 		else
15801 			ethtype = "10/100/1000Base-T";
15802 
15803 		netdev_info(dev, "attached PHY is %s (%s Ethernet) "
15804 			    "(WireSpeed[%d], EEE[%d])\n",
15805 			    tg3_phy_string(tp), ethtype,
15806 			    (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
15807 			    (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
15808 	}
15809 
15810 	netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
15811 		    (dev->features & NETIF_F_RXCSUM) != 0,
15812 		    tg3_flag(tp, USE_LINKCHG_REG) != 0,
15813 		    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
15814 		    tg3_flag(tp, ENABLE_ASF) != 0,
15815 		    tg3_flag(tp, TSO_CAPABLE) != 0);
15816 	netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
15817 		    tp->dma_rwctrl,
15818 		    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
15819 		    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
15820 
15821 	pci_save_state(pdev);
15822 
15823 	return 0;
15824 
15825 err_out_apeunmap:
15826 	if (tp->aperegs) {
15827 		iounmap(tp->aperegs);
15828 		tp->aperegs = NULL;
15829 	}
15830 
15831 err_out_iounmap:
15832 	if (tp->regs) {
15833 		iounmap(tp->regs);
15834 		tp->regs = NULL;
15835 	}
15836 
15837 err_out_free_dev:
15838 	free_netdev(dev);
15839 
15840 err_out_power_down:
15841 	pci_set_power_state(pdev, PCI_D3hot);
15842 
15843 err_out_free_res:
15844 	pci_release_regions(pdev);
15845 
15846 err_out_disable_pdev:
15847 	pci_disable_device(pdev);
15848 	pci_set_drvdata(pdev, NULL);
15849 	return err;
15850 }
15851 
15852 static void __devexit tg3_remove_one(struct pci_dev *pdev)
15853 {
15854 	struct net_device *dev = pci_get_drvdata(pdev);
15855 
15856 	if (dev) {
15857 		struct tg3 *tp = netdev_priv(dev);
15858 
15859 		if (tp->fw)
15860 			release_firmware(tp->fw);
15861 
15862 		tg3_reset_task_cancel(tp);
15863 
15864 		if (tg3_flag(tp, USE_PHYLIB)) {
15865 			tg3_phy_fini(tp);
15866 			tg3_mdio_fini(tp);
15867 		}
15868 
15869 		unregister_netdev(dev);
15870 		if (tp->aperegs) {
15871 			iounmap(tp->aperegs);
15872 			tp->aperegs = NULL;
15873 		}
15874 		if (tp->regs) {
15875 			iounmap(tp->regs);
15876 			tp->regs = NULL;
15877 		}
15878 		free_netdev(dev);
15879 		pci_release_regions(pdev);
15880 		pci_disable_device(pdev);
15881 		pci_set_drvdata(pdev, NULL);
15882 	}
15883 }
15884 
15885 #ifdef CONFIG_PM_SLEEP
15886 static int tg3_suspend(struct device *device)
15887 {
15888 	struct pci_dev *pdev = to_pci_dev(device);
15889 	struct net_device *dev = pci_get_drvdata(pdev);
15890 	struct tg3 *tp = netdev_priv(dev);
15891 	int err;
15892 
15893 	if (!netif_running(dev))
15894 		return 0;
15895 
15896 	tg3_reset_task_cancel(tp);
15897 	tg3_phy_stop(tp);
15898 	tg3_netif_stop(tp);
15899 
15900 	tg3_timer_stop(tp);
15901 
15902 	tg3_full_lock(tp, 1);
15903 	tg3_disable_ints(tp);
15904 	tg3_full_unlock(tp);
15905 
15906 	netif_device_detach(dev);
15907 
15908 	tg3_full_lock(tp, 0);
15909 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
15910 	tg3_flag_clear(tp, INIT_COMPLETE);
15911 	tg3_full_unlock(tp);
15912 
15913 	err = tg3_power_down_prepare(tp);
15914 	if (err) {
15915 		int err2;
15916 
15917 		tg3_full_lock(tp, 0);
15918 
15919 		tg3_flag_set(tp, INIT_COMPLETE);
15920 		err2 = tg3_restart_hw(tp, 1);
15921 		if (err2)
15922 			goto out;
15923 
15924 		tg3_timer_start(tp);
15925 
15926 		netif_device_attach(dev);
15927 		tg3_netif_start(tp);
15928 
15929 out:
15930 		tg3_full_unlock(tp);
15931 
15932 		if (!err2)
15933 			tg3_phy_start(tp);
15934 	}
15935 
15936 	return err;
15937 }
15938 
15939 static int tg3_resume(struct device *device)
15940 {
15941 	struct pci_dev *pdev = to_pci_dev(device);
15942 	struct net_device *dev = pci_get_drvdata(pdev);
15943 	struct tg3 *tp = netdev_priv(dev);
15944 	int err;
15945 
15946 	if (!netif_running(dev))
15947 		return 0;
15948 
15949 	netif_device_attach(dev);
15950 
15951 	tg3_full_lock(tp, 0);
15952 
15953 	tg3_flag_set(tp, INIT_COMPLETE);
15954 	err = tg3_restart_hw(tp, 1);
15955 	if (err)
15956 		goto out;
15957 
15958 	tg3_timer_start(tp);
15959 
15960 	tg3_netif_start(tp);
15961 
15962 out:
15963 	tg3_full_unlock(tp);
15964 
15965 	if (!err)
15966 		tg3_phy_start(tp);
15967 
15968 	return err;
15969 }
15970 
15971 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
15972 #define TG3_PM_OPS (&tg3_pm_ops)
15973 
15974 #else
15975 
15976 #define TG3_PM_OPS NULL
15977 
15978 #endif /* CONFIG_PM_SLEEP */
15979 
15980 /**
15981  * tg3_io_error_detected - called when PCI error is detected
15982  * @pdev: Pointer to PCI device
15983  * @state: The current pci connection state
15984  *
15985  * This function is called after a PCI bus error affecting
15986  * this device has been detected.
15987  */
15988 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
15989 					      pci_channel_state_t state)
15990 {
15991 	struct net_device *netdev = pci_get_drvdata(pdev);
15992 	struct tg3 *tp = netdev_priv(netdev);
15993 	pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
15994 
15995 	netdev_info(netdev, "PCI I/O error detected\n");
15996 
15997 	rtnl_lock();
15998 
15999 	if (!netif_running(netdev))
16000 		goto done;
16001 
16002 	tg3_phy_stop(tp);
16003 
16004 	tg3_netif_stop(tp);
16005 
16006 	tg3_timer_stop(tp);
16007 
16008 	/* Want to make sure that the reset task doesn't run */
16009 	tg3_reset_task_cancel(tp);
16010 
16011 	netif_device_detach(netdev);
16012 
16013 	/* Clean up software state, even if MMIO is blocked */
16014 	tg3_full_lock(tp, 0);
16015 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
16016 	tg3_full_unlock(tp);
16017 
16018 done:
16019 	if (state == pci_channel_io_perm_failure)
16020 		err = PCI_ERS_RESULT_DISCONNECT;
16021 	else
16022 		pci_disable_device(pdev);
16023 
16024 	rtnl_unlock();
16025 
16026 	return err;
16027 }
16028 
16029 /**
16030  * tg3_io_slot_reset - called after the pci bus has been reset.
16031  * @pdev: Pointer to PCI device
16032  *
16033  * Restart the card from scratch, as if from a cold-boot.
16034  * At this point, the card has exprienced a hard reset,
16035  * followed by fixups by BIOS, and has its config space
16036  * set up identically to what it was at cold boot.
16037  */
16038 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
16039 {
16040 	struct net_device *netdev = pci_get_drvdata(pdev);
16041 	struct tg3 *tp = netdev_priv(netdev);
16042 	pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
16043 	int err;
16044 
16045 	rtnl_lock();
16046 
16047 	if (pci_enable_device(pdev)) {
16048 		netdev_err(netdev, "Cannot re-enable PCI device after reset.\n");
16049 		goto done;
16050 	}
16051 
16052 	pci_set_master(pdev);
16053 	pci_restore_state(pdev);
16054 	pci_save_state(pdev);
16055 
16056 	if (!netif_running(netdev)) {
16057 		rc = PCI_ERS_RESULT_RECOVERED;
16058 		goto done;
16059 	}
16060 
16061 	err = tg3_power_up(tp);
16062 	if (err)
16063 		goto done;
16064 
16065 	rc = PCI_ERS_RESULT_RECOVERED;
16066 
16067 done:
16068 	rtnl_unlock();
16069 
16070 	return rc;
16071 }
16072 
16073 /**
16074  * tg3_io_resume - called when traffic can start flowing again.
16075  * @pdev: Pointer to PCI device
16076  *
16077  * This callback is called when the error recovery driver tells
16078  * us that its OK to resume normal operation.
16079  */
16080 static void tg3_io_resume(struct pci_dev *pdev)
16081 {
16082 	struct net_device *netdev = pci_get_drvdata(pdev);
16083 	struct tg3 *tp = netdev_priv(netdev);
16084 	int err;
16085 
16086 	rtnl_lock();
16087 
16088 	if (!netif_running(netdev))
16089 		goto done;
16090 
16091 	tg3_full_lock(tp, 0);
16092 	tg3_flag_set(tp, INIT_COMPLETE);
16093 	err = tg3_restart_hw(tp, 1);
16094 	tg3_full_unlock(tp);
16095 	if (err) {
16096 		netdev_err(netdev, "Cannot restart hardware after reset.\n");
16097 		goto done;
16098 	}
16099 
16100 	netif_device_attach(netdev);
16101 
16102 	tg3_timer_start(tp);
16103 
16104 	tg3_netif_start(tp);
16105 
16106 	tg3_phy_start(tp);
16107 
16108 done:
16109 	rtnl_unlock();
16110 }
16111 
16112 static struct pci_error_handlers tg3_err_handler = {
16113 	.error_detected	= tg3_io_error_detected,
16114 	.slot_reset	= tg3_io_slot_reset,
16115 	.resume		= tg3_io_resume
16116 };
16117 
16118 static struct pci_driver tg3_driver = {
16119 	.name		= DRV_MODULE_NAME,
16120 	.id_table	= tg3_pci_tbl,
16121 	.probe		= tg3_init_one,
16122 	.remove		= __devexit_p(tg3_remove_one),
16123 	.err_handler	= &tg3_err_handler,
16124 	.driver.pm	= TG3_PM_OPS,
16125 };
16126 
16127 static int __init tg3_init(void)
16128 {
16129 	return pci_register_driver(&tg3_driver);
16130 }
16131 
16132 static void __exit tg3_cleanup(void)
16133 {
16134 	pci_unregister_driver(&tg3_driver);
16135 }
16136 
16137 module_init(tg3_init);
16138 module_exit(tg3_cleanup);
16139