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 #include <linux/hwmon.h>
48 #include <linux/hwmon-sysfs.h>
49 
50 #include <net/checksum.h>
51 #include <net/ip.h>
52 
53 #include <linux/io.h>
54 #include <asm/byteorder.h>
55 #include <linux/uaccess.h>
56 
57 #ifdef CONFIG_SPARC
58 #include <asm/idprom.h>
59 #include <asm/prom.h>
60 #endif
61 
62 #define BAR_0	0
63 #define BAR_2	2
64 
65 #include "tg3.h"
66 
67 /* Functions & macros to verify TG3_FLAGS types */
68 
69 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
70 {
71 	return test_bit(flag, bits);
72 }
73 
74 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
75 {
76 	set_bit(flag, bits);
77 }
78 
79 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
80 {
81 	clear_bit(flag, bits);
82 }
83 
84 #define tg3_flag(tp, flag)				\
85 	_tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
86 #define tg3_flag_set(tp, flag)				\
87 	_tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
88 #define tg3_flag_clear(tp, flag)			\
89 	_tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
90 
91 #define DRV_MODULE_NAME		"tg3"
92 #define TG3_MAJ_NUM			3
93 #define TG3_MIN_NUM			125
94 #define DRV_MODULE_VERSION	\
95 	__stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
96 #define DRV_MODULE_RELDATE	"September 26, 2012"
97 
98 #define RESET_KIND_SHUTDOWN	0
99 #define RESET_KIND_INIT		1
100 #define RESET_KIND_SUSPEND	2
101 
102 #define TG3_DEF_RX_MODE		0
103 #define TG3_DEF_TX_MODE		0
104 #define TG3_DEF_MSG_ENABLE	  \
105 	(NETIF_MSG_DRV		| \
106 	 NETIF_MSG_PROBE	| \
107 	 NETIF_MSG_LINK		| \
108 	 NETIF_MSG_TIMER	| \
109 	 NETIF_MSG_IFDOWN	| \
110 	 NETIF_MSG_IFUP		| \
111 	 NETIF_MSG_RX_ERR	| \
112 	 NETIF_MSG_TX_ERR)
113 
114 #define TG3_GRC_LCLCTL_PWRSW_DELAY	100
115 
116 /* length of time before we decide the hardware is borked,
117  * and dev->tx_timeout() should be called to fix the problem
118  */
119 
120 #define TG3_TX_TIMEOUT			(5 * HZ)
121 
122 /* hardware minimum and maximum for a single frame's data payload */
123 #define TG3_MIN_MTU			60
124 #define TG3_MAX_MTU(tp)	\
125 	(tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
126 
127 /* These numbers seem to be hard coded in the NIC firmware somehow.
128  * You can't change the ring sizes, but you can change where you place
129  * them in the NIC onboard memory.
130  */
131 #define TG3_RX_STD_RING_SIZE(tp) \
132 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
133 	 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
134 #define TG3_DEF_RX_RING_PENDING		200
135 #define TG3_RX_JMB_RING_SIZE(tp) \
136 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
137 	 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
138 #define TG3_DEF_RX_JUMBO_RING_PENDING	100
139 
140 /* Do not place this n-ring entries value into the tp struct itself,
141  * we really want to expose these constants to GCC so that modulo et
142  * al.  operations are done with shifts and masks instead of with
143  * hw multiply/modulo instructions.  Another solution would be to
144  * replace things like '% foo' with '& (foo - 1)'.
145  */
146 
147 #define TG3_TX_RING_SIZE		512
148 #define TG3_DEF_TX_RING_PENDING		(TG3_TX_RING_SIZE - 1)
149 
150 #define TG3_RX_STD_RING_BYTES(tp) \
151 	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
152 #define TG3_RX_JMB_RING_BYTES(tp) \
153 	(sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
154 #define TG3_RX_RCB_RING_BYTES(tp) \
155 	(sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
156 #define TG3_TX_RING_BYTES	(sizeof(struct tg3_tx_buffer_desc) * \
157 				 TG3_TX_RING_SIZE)
158 #define NEXT_TX(N)		(((N) + 1) & (TG3_TX_RING_SIZE - 1))
159 
160 #define TG3_DMA_BYTE_ENAB		64
161 
162 #define TG3_RX_STD_DMA_SZ		1536
163 #define TG3_RX_JMB_DMA_SZ		9046
164 
165 #define TG3_RX_DMA_TO_MAP_SZ(x)		((x) + TG3_DMA_BYTE_ENAB)
166 
167 #define TG3_RX_STD_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
168 #define TG3_RX_JMB_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
169 
170 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
171 	(sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
172 
173 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
174 	(sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
175 
176 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
177  * that are at least dword aligned when used in PCIX mode.  The driver
178  * works around this bug by double copying the packet.  This workaround
179  * is built into the normal double copy length check for efficiency.
180  *
181  * However, the double copy is only necessary on those architectures
182  * where unaligned memory accesses are inefficient.  For those architectures
183  * where unaligned memory accesses incur little penalty, we can reintegrate
184  * the 5701 in the normal rx path.  Doing so saves a device structure
185  * dereference by hardcoding the double copy threshold in place.
186  */
187 #define TG3_RX_COPY_THRESHOLD		256
188 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
189 	#define TG3_RX_COPY_THRESH(tp)	TG3_RX_COPY_THRESHOLD
190 #else
191 	#define TG3_RX_COPY_THRESH(tp)	((tp)->rx_copy_thresh)
192 #endif
193 
194 #if (NET_IP_ALIGN != 0)
195 #define TG3_RX_OFFSET(tp)	((tp)->rx_offset)
196 #else
197 #define TG3_RX_OFFSET(tp)	(NET_SKB_PAD)
198 #endif
199 
200 /* minimum number of free TX descriptors required to wake up TX process */
201 #define TG3_TX_WAKEUP_THRESH(tnapi)		((tnapi)->tx_pending / 4)
202 #define TG3_TX_BD_DMA_MAX_2K		2048
203 #define TG3_TX_BD_DMA_MAX_4K		4096
204 
205 #define TG3_RAW_IP_ALIGN 2
206 
207 #define TG3_FW_UPDATE_TIMEOUT_SEC	5
208 #define TG3_FW_UPDATE_FREQ_SEC		(TG3_FW_UPDATE_TIMEOUT_SEC / 2)
209 
210 #define FIRMWARE_TG3		"tigon/tg3.bin"
211 #define FIRMWARE_TG3TSO		"tigon/tg3_tso.bin"
212 #define FIRMWARE_TG3TSO5	"tigon/tg3_tso5.bin"
213 
214 static char version[] __devinitdata =
215 	DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
216 
217 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
218 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
219 MODULE_LICENSE("GPL");
220 MODULE_VERSION(DRV_MODULE_VERSION);
221 MODULE_FIRMWARE(FIRMWARE_TG3);
222 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
223 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
224 
225 static int tg3_debug = -1;	/* -1 == use TG3_DEF_MSG_ENABLE as value */
226 module_param(tg3_debug, int, 0);
227 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
228 
229 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
230 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
231 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
232 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
233 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
234 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
235 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
236 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
237 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
238 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
239 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
240 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
241 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
242 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
243 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
244 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
245 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
246 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
247 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
248 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
249 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
250 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
251 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
252 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
253 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
254 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
255 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
256 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
257 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
258 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
259 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
260 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
261 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
262 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
263 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
264 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
265 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
266 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
267 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
268 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
269 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
270 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
271 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
272 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
273 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
274 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
275 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
276 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
277 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
278 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
279 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
280 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
281 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
282 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
283 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
284 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
285 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
286 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
287 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
288 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
289 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
290 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
291 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)},
292 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
293 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
294 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
295 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
296 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
297 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
298 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
299 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)},
300 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)},
301 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
302 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
303 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
304 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
305 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
306 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
307 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
308 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
309 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
310 	{PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
311 	{PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
312 	{}
313 };
314 
315 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
316 
317 static const struct {
318 	const char string[ETH_GSTRING_LEN];
319 } ethtool_stats_keys[] = {
320 	{ "rx_octets" },
321 	{ "rx_fragments" },
322 	{ "rx_ucast_packets" },
323 	{ "rx_mcast_packets" },
324 	{ "rx_bcast_packets" },
325 	{ "rx_fcs_errors" },
326 	{ "rx_align_errors" },
327 	{ "rx_xon_pause_rcvd" },
328 	{ "rx_xoff_pause_rcvd" },
329 	{ "rx_mac_ctrl_rcvd" },
330 	{ "rx_xoff_entered" },
331 	{ "rx_frame_too_long_errors" },
332 	{ "rx_jabbers" },
333 	{ "rx_undersize_packets" },
334 	{ "rx_in_length_errors" },
335 	{ "rx_out_length_errors" },
336 	{ "rx_64_or_less_octet_packets" },
337 	{ "rx_65_to_127_octet_packets" },
338 	{ "rx_128_to_255_octet_packets" },
339 	{ "rx_256_to_511_octet_packets" },
340 	{ "rx_512_to_1023_octet_packets" },
341 	{ "rx_1024_to_1522_octet_packets" },
342 	{ "rx_1523_to_2047_octet_packets" },
343 	{ "rx_2048_to_4095_octet_packets" },
344 	{ "rx_4096_to_8191_octet_packets" },
345 	{ "rx_8192_to_9022_octet_packets" },
346 
347 	{ "tx_octets" },
348 	{ "tx_collisions" },
349 
350 	{ "tx_xon_sent" },
351 	{ "tx_xoff_sent" },
352 	{ "tx_flow_control" },
353 	{ "tx_mac_errors" },
354 	{ "tx_single_collisions" },
355 	{ "tx_mult_collisions" },
356 	{ "tx_deferred" },
357 	{ "tx_excessive_collisions" },
358 	{ "tx_late_collisions" },
359 	{ "tx_collide_2times" },
360 	{ "tx_collide_3times" },
361 	{ "tx_collide_4times" },
362 	{ "tx_collide_5times" },
363 	{ "tx_collide_6times" },
364 	{ "tx_collide_7times" },
365 	{ "tx_collide_8times" },
366 	{ "tx_collide_9times" },
367 	{ "tx_collide_10times" },
368 	{ "tx_collide_11times" },
369 	{ "tx_collide_12times" },
370 	{ "tx_collide_13times" },
371 	{ "tx_collide_14times" },
372 	{ "tx_collide_15times" },
373 	{ "tx_ucast_packets" },
374 	{ "tx_mcast_packets" },
375 	{ "tx_bcast_packets" },
376 	{ "tx_carrier_sense_errors" },
377 	{ "tx_discards" },
378 	{ "tx_errors" },
379 
380 	{ "dma_writeq_full" },
381 	{ "dma_write_prioq_full" },
382 	{ "rxbds_empty" },
383 	{ "rx_discards" },
384 	{ "rx_errors" },
385 	{ "rx_threshold_hit" },
386 
387 	{ "dma_readq_full" },
388 	{ "dma_read_prioq_full" },
389 	{ "tx_comp_queue_full" },
390 
391 	{ "ring_set_send_prod_index" },
392 	{ "ring_status_update" },
393 	{ "nic_irqs" },
394 	{ "nic_avoided_irqs" },
395 	{ "nic_tx_threshold_hit" },
396 
397 	{ "mbuf_lwm_thresh_hit" },
398 };
399 
400 #define TG3_NUM_STATS	ARRAY_SIZE(ethtool_stats_keys)
401 
402 
403 static const struct {
404 	const char string[ETH_GSTRING_LEN];
405 } ethtool_test_keys[] = {
406 	{ "nvram test        (online) " },
407 	{ "link test         (online) " },
408 	{ "register test     (offline)" },
409 	{ "memory test       (offline)" },
410 	{ "mac loopback test (offline)" },
411 	{ "phy loopback test (offline)" },
412 	{ "ext loopback test (offline)" },
413 	{ "interrupt test    (offline)" },
414 };
415 
416 #define TG3_NUM_TEST	ARRAY_SIZE(ethtool_test_keys)
417 
418 
419 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
420 {
421 	writel(val, tp->regs + off);
422 }
423 
424 static u32 tg3_read32(struct tg3 *tp, u32 off)
425 {
426 	return readl(tp->regs + off);
427 }
428 
429 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
430 {
431 	writel(val, tp->aperegs + off);
432 }
433 
434 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
435 {
436 	return readl(tp->aperegs + off);
437 }
438 
439 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
440 {
441 	unsigned long flags;
442 
443 	spin_lock_irqsave(&tp->indirect_lock, flags);
444 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
445 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
446 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
447 }
448 
449 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
450 {
451 	writel(val, tp->regs + off);
452 	readl(tp->regs + off);
453 }
454 
455 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
456 {
457 	unsigned long flags;
458 	u32 val;
459 
460 	spin_lock_irqsave(&tp->indirect_lock, flags);
461 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
462 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
463 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
464 	return val;
465 }
466 
467 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
468 {
469 	unsigned long flags;
470 
471 	if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
472 		pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
473 				       TG3_64BIT_REG_LOW, val);
474 		return;
475 	}
476 	if (off == TG3_RX_STD_PROD_IDX_REG) {
477 		pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
478 				       TG3_64BIT_REG_LOW, val);
479 		return;
480 	}
481 
482 	spin_lock_irqsave(&tp->indirect_lock, flags);
483 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
484 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
485 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
486 
487 	/* In indirect mode when disabling interrupts, we also need
488 	 * to clear the interrupt bit in the GRC local ctrl register.
489 	 */
490 	if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
491 	    (val == 0x1)) {
492 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
493 				       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
494 	}
495 }
496 
497 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
498 {
499 	unsigned long flags;
500 	u32 val;
501 
502 	spin_lock_irqsave(&tp->indirect_lock, flags);
503 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
504 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
505 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
506 	return val;
507 }
508 
509 /* usec_wait specifies the wait time in usec when writing to certain registers
510  * where it is unsafe to read back the register without some delay.
511  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
512  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
513  */
514 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
515 {
516 	if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
517 		/* Non-posted methods */
518 		tp->write32(tp, off, val);
519 	else {
520 		/* Posted method */
521 		tg3_write32(tp, off, val);
522 		if (usec_wait)
523 			udelay(usec_wait);
524 		tp->read32(tp, off);
525 	}
526 	/* Wait again after the read for the posted method to guarantee that
527 	 * the wait time is met.
528 	 */
529 	if (usec_wait)
530 		udelay(usec_wait);
531 }
532 
533 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
534 {
535 	tp->write32_mbox(tp, off, val);
536 	if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND))
537 		tp->read32_mbox(tp, off);
538 }
539 
540 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
541 {
542 	void __iomem *mbox = tp->regs + off;
543 	writel(val, mbox);
544 	if (tg3_flag(tp, TXD_MBOX_HWBUG))
545 		writel(val, mbox);
546 	if (tg3_flag(tp, MBOX_WRITE_REORDER))
547 		readl(mbox);
548 }
549 
550 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
551 {
552 	return readl(tp->regs + off + GRCMBOX_BASE);
553 }
554 
555 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
556 {
557 	writel(val, tp->regs + off + GRCMBOX_BASE);
558 }
559 
560 #define tw32_mailbox(reg, val)		tp->write32_mbox(tp, reg, val)
561 #define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
562 #define tw32_rx_mbox(reg, val)		tp->write32_rx_mbox(tp, reg, val)
563 #define tw32_tx_mbox(reg, val)		tp->write32_tx_mbox(tp, reg, val)
564 #define tr32_mailbox(reg)		tp->read32_mbox(tp, reg)
565 
566 #define tw32(reg, val)			tp->write32(tp, reg, val)
567 #define tw32_f(reg, val)		_tw32_flush(tp, (reg), (val), 0)
568 #define tw32_wait_f(reg, val, us)	_tw32_flush(tp, (reg), (val), (us))
569 #define tr32(reg)			tp->read32(tp, reg)
570 
571 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
572 {
573 	unsigned long flags;
574 
575 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
576 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
577 		return;
578 
579 	spin_lock_irqsave(&tp->indirect_lock, flags);
580 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
581 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
582 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
583 
584 		/* Always leave this as zero. */
585 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
586 	} else {
587 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
588 		tw32_f(TG3PCI_MEM_WIN_DATA, val);
589 
590 		/* Always leave this as zero. */
591 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
592 	}
593 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
594 }
595 
596 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
597 {
598 	unsigned long flags;
599 
600 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
601 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
602 		*val = 0;
603 		return;
604 	}
605 
606 	spin_lock_irqsave(&tp->indirect_lock, flags);
607 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
608 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
609 		pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
610 
611 		/* Always leave this as zero. */
612 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
613 	} else {
614 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
615 		*val = tr32(TG3PCI_MEM_WIN_DATA);
616 
617 		/* Always leave this as zero. */
618 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
619 	}
620 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
621 }
622 
623 static void tg3_ape_lock_init(struct tg3 *tp)
624 {
625 	int i;
626 	u32 regbase, bit;
627 
628 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
629 		regbase = TG3_APE_LOCK_GRANT;
630 	else
631 		regbase = TG3_APE_PER_LOCK_GRANT;
632 
633 	/* Make sure the driver hasn't any stale locks. */
634 	for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
635 		switch (i) {
636 		case TG3_APE_LOCK_PHY0:
637 		case TG3_APE_LOCK_PHY1:
638 		case TG3_APE_LOCK_PHY2:
639 		case TG3_APE_LOCK_PHY3:
640 			bit = APE_LOCK_GRANT_DRIVER;
641 			break;
642 		default:
643 			if (!tp->pci_fn)
644 				bit = APE_LOCK_GRANT_DRIVER;
645 			else
646 				bit = 1 << tp->pci_fn;
647 		}
648 		tg3_ape_write32(tp, regbase + 4 * i, bit);
649 	}
650 
651 }
652 
653 static int tg3_ape_lock(struct tg3 *tp, int locknum)
654 {
655 	int i, off;
656 	int ret = 0;
657 	u32 status, req, gnt, bit;
658 
659 	if (!tg3_flag(tp, ENABLE_APE))
660 		return 0;
661 
662 	switch (locknum) {
663 	case TG3_APE_LOCK_GPIO:
664 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
665 			return 0;
666 	case TG3_APE_LOCK_GRC:
667 	case TG3_APE_LOCK_MEM:
668 		if (!tp->pci_fn)
669 			bit = APE_LOCK_REQ_DRIVER;
670 		else
671 			bit = 1 << tp->pci_fn;
672 		break;
673 	case TG3_APE_LOCK_PHY0:
674 	case TG3_APE_LOCK_PHY1:
675 	case TG3_APE_LOCK_PHY2:
676 	case TG3_APE_LOCK_PHY3:
677 		bit = APE_LOCK_REQ_DRIVER;
678 		break;
679 	default:
680 		return -EINVAL;
681 	}
682 
683 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
684 		req = TG3_APE_LOCK_REQ;
685 		gnt = TG3_APE_LOCK_GRANT;
686 	} else {
687 		req = TG3_APE_PER_LOCK_REQ;
688 		gnt = TG3_APE_PER_LOCK_GRANT;
689 	}
690 
691 	off = 4 * locknum;
692 
693 	tg3_ape_write32(tp, req + off, bit);
694 
695 	/* Wait for up to 1 millisecond to acquire lock. */
696 	for (i = 0; i < 100; i++) {
697 		status = tg3_ape_read32(tp, gnt + off);
698 		if (status == bit)
699 			break;
700 		udelay(10);
701 	}
702 
703 	if (status != bit) {
704 		/* Revoke the lock request. */
705 		tg3_ape_write32(tp, gnt + off, bit);
706 		ret = -EBUSY;
707 	}
708 
709 	return ret;
710 }
711 
712 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
713 {
714 	u32 gnt, bit;
715 
716 	if (!tg3_flag(tp, ENABLE_APE))
717 		return;
718 
719 	switch (locknum) {
720 	case TG3_APE_LOCK_GPIO:
721 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
722 			return;
723 	case TG3_APE_LOCK_GRC:
724 	case TG3_APE_LOCK_MEM:
725 		if (!tp->pci_fn)
726 			bit = APE_LOCK_GRANT_DRIVER;
727 		else
728 			bit = 1 << tp->pci_fn;
729 		break;
730 	case TG3_APE_LOCK_PHY0:
731 	case TG3_APE_LOCK_PHY1:
732 	case TG3_APE_LOCK_PHY2:
733 	case TG3_APE_LOCK_PHY3:
734 		bit = APE_LOCK_GRANT_DRIVER;
735 		break;
736 	default:
737 		return;
738 	}
739 
740 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
741 		gnt = TG3_APE_LOCK_GRANT;
742 	else
743 		gnt = TG3_APE_PER_LOCK_GRANT;
744 
745 	tg3_ape_write32(tp, gnt + 4 * locknum, bit);
746 }
747 
748 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
749 {
750 	u32 apedata;
751 
752 	while (timeout_us) {
753 		if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
754 			return -EBUSY;
755 
756 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
757 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
758 			break;
759 
760 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
761 
762 		udelay(10);
763 		timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
764 	}
765 
766 	return timeout_us ? 0 : -EBUSY;
767 }
768 
769 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
770 {
771 	u32 i, apedata;
772 
773 	for (i = 0; i < timeout_us / 10; i++) {
774 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
775 
776 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
777 			break;
778 
779 		udelay(10);
780 	}
781 
782 	return i == timeout_us / 10;
783 }
784 
785 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
786 				   u32 len)
787 {
788 	int err;
789 	u32 i, bufoff, msgoff, maxlen, apedata;
790 
791 	if (!tg3_flag(tp, APE_HAS_NCSI))
792 		return 0;
793 
794 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
795 	if (apedata != APE_SEG_SIG_MAGIC)
796 		return -ENODEV;
797 
798 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
799 	if (!(apedata & APE_FW_STATUS_READY))
800 		return -EAGAIN;
801 
802 	bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
803 		 TG3_APE_SHMEM_BASE;
804 	msgoff = bufoff + 2 * sizeof(u32);
805 	maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
806 
807 	while (len) {
808 		u32 length;
809 
810 		/* Cap xfer sizes to scratchpad limits. */
811 		length = (len > maxlen) ? maxlen : len;
812 		len -= length;
813 
814 		apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
815 		if (!(apedata & APE_FW_STATUS_READY))
816 			return -EAGAIN;
817 
818 		/* Wait for up to 1 msec for APE to service previous event. */
819 		err = tg3_ape_event_lock(tp, 1000);
820 		if (err)
821 			return err;
822 
823 		apedata = APE_EVENT_STATUS_DRIVER_EVNT |
824 			  APE_EVENT_STATUS_SCRTCHPD_READ |
825 			  APE_EVENT_STATUS_EVENT_PENDING;
826 		tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
827 
828 		tg3_ape_write32(tp, bufoff, base_off);
829 		tg3_ape_write32(tp, bufoff + sizeof(u32), length);
830 
831 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
832 		tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
833 
834 		base_off += length;
835 
836 		if (tg3_ape_wait_for_event(tp, 30000))
837 			return -EAGAIN;
838 
839 		for (i = 0; length; i += 4, length -= 4) {
840 			u32 val = tg3_ape_read32(tp, msgoff + i);
841 			memcpy(data, &val, sizeof(u32));
842 			data++;
843 		}
844 	}
845 
846 	return 0;
847 }
848 
849 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
850 {
851 	int err;
852 	u32 apedata;
853 
854 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
855 	if (apedata != APE_SEG_SIG_MAGIC)
856 		return -EAGAIN;
857 
858 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
859 	if (!(apedata & APE_FW_STATUS_READY))
860 		return -EAGAIN;
861 
862 	/* Wait for up to 1 millisecond for APE to service previous event. */
863 	err = tg3_ape_event_lock(tp, 1000);
864 	if (err)
865 		return err;
866 
867 	tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
868 			event | APE_EVENT_STATUS_EVENT_PENDING);
869 
870 	tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
871 	tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
872 
873 	return 0;
874 }
875 
876 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
877 {
878 	u32 event;
879 	u32 apedata;
880 
881 	if (!tg3_flag(tp, ENABLE_APE))
882 		return;
883 
884 	switch (kind) {
885 	case RESET_KIND_INIT:
886 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
887 				APE_HOST_SEG_SIG_MAGIC);
888 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
889 				APE_HOST_SEG_LEN_MAGIC);
890 		apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
891 		tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
892 		tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
893 			APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
894 		tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
895 				APE_HOST_BEHAV_NO_PHYLOCK);
896 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
897 				    TG3_APE_HOST_DRVR_STATE_START);
898 
899 		event = APE_EVENT_STATUS_STATE_START;
900 		break;
901 	case RESET_KIND_SHUTDOWN:
902 		/* With the interface we are currently using,
903 		 * APE does not track driver state.  Wiping
904 		 * out the HOST SEGMENT SIGNATURE forces
905 		 * the APE to assume OS absent status.
906 		 */
907 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
908 
909 		if (device_may_wakeup(&tp->pdev->dev) &&
910 		    tg3_flag(tp, WOL_ENABLE)) {
911 			tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
912 					    TG3_APE_HOST_WOL_SPEED_AUTO);
913 			apedata = TG3_APE_HOST_DRVR_STATE_WOL;
914 		} else
915 			apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
916 
917 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
918 
919 		event = APE_EVENT_STATUS_STATE_UNLOAD;
920 		break;
921 	case RESET_KIND_SUSPEND:
922 		event = APE_EVENT_STATUS_STATE_SUSPEND;
923 		break;
924 	default:
925 		return;
926 	}
927 
928 	event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
929 
930 	tg3_ape_send_event(tp, event);
931 }
932 
933 static void tg3_disable_ints(struct tg3 *tp)
934 {
935 	int i;
936 
937 	tw32(TG3PCI_MISC_HOST_CTRL,
938 	     (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
939 	for (i = 0; i < tp->irq_max; i++)
940 		tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
941 }
942 
943 static void tg3_enable_ints(struct tg3 *tp)
944 {
945 	int i;
946 
947 	tp->irq_sync = 0;
948 	wmb();
949 
950 	tw32(TG3PCI_MISC_HOST_CTRL,
951 	     (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
952 
953 	tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
954 	for (i = 0; i < tp->irq_cnt; i++) {
955 		struct tg3_napi *tnapi = &tp->napi[i];
956 
957 		tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
958 		if (tg3_flag(tp, 1SHOT_MSI))
959 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
960 
961 		tp->coal_now |= tnapi->coal_now;
962 	}
963 
964 	/* Force an initial interrupt */
965 	if (!tg3_flag(tp, TAGGED_STATUS) &&
966 	    (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
967 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
968 	else
969 		tw32(HOSTCC_MODE, tp->coal_now);
970 
971 	tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
972 }
973 
974 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
975 {
976 	struct tg3 *tp = tnapi->tp;
977 	struct tg3_hw_status *sblk = tnapi->hw_status;
978 	unsigned int work_exists = 0;
979 
980 	/* check for phy events */
981 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
982 		if (sblk->status & SD_STATUS_LINK_CHG)
983 			work_exists = 1;
984 	}
985 
986 	/* check for TX work to do */
987 	if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
988 		work_exists = 1;
989 
990 	/* check for RX work to do */
991 	if (tnapi->rx_rcb_prod_idx &&
992 	    *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
993 		work_exists = 1;
994 
995 	return work_exists;
996 }
997 
998 /* tg3_int_reenable
999  *  similar to tg3_enable_ints, but it accurately determines whether there
1000  *  is new work pending and can return without flushing the PIO write
1001  *  which reenables interrupts
1002  */
1003 static void tg3_int_reenable(struct tg3_napi *tnapi)
1004 {
1005 	struct tg3 *tp = tnapi->tp;
1006 
1007 	tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1008 	mmiowb();
1009 
1010 	/* When doing tagged status, this work check is unnecessary.
1011 	 * The last_tag we write above tells the chip which piece of
1012 	 * work we've completed.
1013 	 */
1014 	if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1015 		tw32(HOSTCC_MODE, tp->coalesce_mode |
1016 		     HOSTCC_MODE_ENABLE | tnapi->coal_now);
1017 }
1018 
1019 static void tg3_switch_clocks(struct tg3 *tp)
1020 {
1021 	u32 clock_ctrl;
1022 	u32 orig_clock_ctrl;
1023 
1024 	if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1025 		return;
1026 
1027 	clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1028 
1029 	orig_clock_ctrl = clock_ctrl;
1030 	clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1031 		       CLOCK_CTRL_CLKRUN_OENABLE |
1032 		       0x1f);
1033 	tp->pci_clock_ctrl = clock_ctrl;
1034 
1035 	if (tg3_flag(tp, 5705_PLUS)) {
1036 		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1037 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
1038 				    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1039 		}
1040 	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1041 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1042 			    clock_ctrl |
1043 			    (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1044 			    40);
1045 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1046 			    clock_ctrl | (CLOCK_CTRL_ALTCLK),
1047 			    40);
1048 	}
1049 	tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1050 }
1051 
1052 #define PHY_BUSY_LOOPS	5000
1053 
1054 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1055 {
1056 	u32 frame_val;
1057 	unsigned int loops;
1058 	int ret;
1059 
1060 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1061 		tw32_f(MAC_MI_MODE,
1062 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1063 		udelay(80);
1064 	}
1065 
1066 	tg3_ape_lock(tp, tp->phy_ape_lock);
1067 
1068 	*val = 0x0;
1069 
1070 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1071 		      MI_COM_PHY_ADDR_MASK);
1072 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1073 		      MI_COM_REG_ADDR_MASK);
1074 	frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1075 
1076 	tw32_f(MAC_MI_COM, frame_val);
1077 
1078 	loops = PHY_BUSY_LOOPS;
1079 	while (loops != 0) {
1080 		udelay(10);
1081 		frame_val = tr32(MAC_MI_COM);
1082 
1083 		if ((frame_val & MI_COM_BUSY) == 0) {
1084 			udelay(5);
1085 			frame_val = tr32(MAC_MI_COM);
1086 			break;
1087 		}
1088 		loops -= 1;
1089 	}
1090 
1091 	ret = -EBUSY;
1092 	if (loops != 0) {
1093 		*val = frame_val & MI_COM_DATA_MASK;
1094 		ret = 0;
1095 	}
1096 
1097 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1098 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1099 		udelay(80);
1100 	}
1101 
1102 	tg3_ape_unlock(tp, tp->phy_ape_lock);
1103 
1104 	return ret;
1105 }
1106 
1107 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1108 {
1109 	u32 frame_val;
1110 	unsigned int loops;
1111 	int ret;
1112 
1113 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1114 	    (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1115 		return 0;
1116 
1117 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1118 		tw32_f(MAC_MI_MODE,
1119 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1120 		udelay(80);
1121 	}
1122 
1123 	tg3_ape_lock(tp, tp->phy_ape_lock);
1124 
1125 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1126 		      MI_COM_PHY_ADDR_MASK);
1127 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1128 		      MI_COM_REG_ADDR_MASK);
1129 	frame_val |= (val & MI_COM_DATA_MASK);
1130 	frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1131 
1132 	tw32_f(MAC_MI_COM, frame_val);
1133 
1134 	loops = PHY_BUSY_LOOPS;
1135 	while (loops != 0) {
1136 		udelay(10);
1137 		frame_val = tr32(MAC_MI_COM);
1138 		if ((frame_val & MI_COM_BUSY) == 0) {
1139 			udelay(5);
1140 			frame_val = tr32(MAC_MI_COM);
1141 			break;
1142 		}
1143 		loops -= 1;
1144 	}
1145 
1146 	ret = -EBUSY;
1147 	if (loops != 0)
1148 		ret = 0;
1149 
1150 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1151 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1152 		udelay(80);
1153 	}
1154 
1155 	tg3_ape_unlock(tp, tp->phy_ape_lock);
1156 
1157 	return ret;
1158 }
1159 
1160 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1161 {
1162 	int err;
1163 
1164 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1165 	if (err)
1166 		goto done;
1167 
1168 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1169 	if (err)
1170 		goto done;
1171 
1172 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1173 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1174 	if (err)
1175 		goto done;
1176 
1177 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1178 
1179 done:
1180 	return err;
1181 }
1182 
1183 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1184 {
1185 	int err;
1186 
1187 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1188 	if (err)
1189 		goto done;
1190 
1191 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1192 	if (err)
1193 		goto done;
1194 
1195 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1196 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1197 	if (err)
1198 		goto done;
1199 
1200 	err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1201 
1202 done:
1203 	return err;
1204 }
1205 
1206 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1207 {
1208 	int err;
1209 
1210 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1211 	if (!err)
1212 		err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1213 
1214 	return err;
1215 }
1216 
1217 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1218 {
1219 	int err;
1220 
1221 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1222 	if (!err)
1223 		err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1224 
1225 	return err;
1226 }
1227 
1228 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1229 {
1230 	int err;
1231 
1232 	err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1233 			   (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1234 			   MII_TG3_AUXCTL_SHDWSEL_MISC);
1235 	if (!err)
1236 		err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1237 
1238 	return err;
1239 }
1240 
1241 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1242 {
1243 	if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1244 		set |= MII_TG3_AUXCTL_MISC_WREN;
1245 
1246 	return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1247 }
1248 
1249 #define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \
1250 	tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1251 			     MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \
1252 			     MII_TG3_AUXCTL_ACTL_TX_6DB)
1253 
1254 #define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \
1255 	tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1256 			     MII_TG3_AUXCTL_ACTL_TX_6DB);
1257 
1258 static int tg3_bmcr_reset(struct tg3 *tp)
1259 {
1260 	u32 phy_control;
1261 	int limit, err;
1262 
1263 	/* OK, reset it, and poll the BMCR_RESET bit until it
1264 	 * clears or we time out.
1265 	 */
1266 	phy_control = BMCR_RESET;
1267 	err = tg3_writephy(tp, MII_BMCR, phy_control);
1268 	if (err != 0)
1269 		return -EBUSY;
1270 
1271 	limit = 5000;
1272 	while (limit--) {
1273 		err = tg3_readphy(tp, MII_BMCR, &phy_control);
1274 		if (err != 0)
1275 			return -EBUSY;
1276 
1277 		if ((phy_control & BMCR_RESET) == 0) {
1278 			udelay(40);
1279 			break;
1280 		}
1281 		udelay(10);
1282 	}
1283 	if (limit < 0)
1284 		return -EBUSY;
1285 
1286 	return 0;
1287 }
1288 
1289 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1290 {
1291 	struct tg3 *tp = bp->priv;
1292 	u32 val;
1293 
1294 	spin_lock_bh(&tp->lock);
1295 
1296 	if (tg3_readphy(tp, reg, &val))
1297 		val = -EIO;
1298 
1299 	spin_unlock_bh(&tp->lock);
1300 
1301 	return val;
1302 }
1303 
1304 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1305 {
1306 	struct tg3 *tp = bp->priv;
1307 	u32 ret = 0;
1308 
1309 	spin_lock_bh(&tp->lock);
1310 
1311 	if (tg3_writephy(tp, reg, val))
1312 		ret = -EIO;
1313 
1314 	spin_unlock_bh(&tp->lock);
1315 
1316 	return ret;
1317 }
1318 
1319 static int tg3_mdio_reset(struct mii_bus *bp)
1320 {
1321 	return 0;
1322 }
1323 
1324 static void tg3_mdio_config_5785(struct tg3 *tp)
1325 {
1326 	u32 val;
1327 	struct phy_device *phydev;
1328 
1329 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1330 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1331 	case PHY_ID_BCM50610:
1332 	case PHY_ID_BCM50610M:
1333 		val = MAC_PHYCFG2_50610_LED_MODES;
1334 		break;
1335 	case PHY_ID_BCMAC131:
1336 		val = MAC_PHYCFG2_AC131_LED_MODES;
1337 		break;
1338 	case PHY_ID_RTL8211C:
1339 		val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1340 		break;
1341 	case PHY_ID_RTL8201E:
1342 		val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1343 		break;
1344 	default:
1345 		return;
1346 	}
1347 
1348 	if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1349 		tw32(MAC_PHYCFG2, val);
1350 
1351 		val = tr32(MAC_PHYCFG1);
1352 		val &= ~(MAC_PHYCFG1_RGMII_INT |
1353 			 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1354 		val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1355 		tw32(MAC_PHYCFG1, val);
1356 
1357 		return;
1358 	}
1359 
1360 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1361 		val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1362 		       MAC_PHYCFG2_FMODE_MASK_MASK |
1363 		       MAC_PHYCFG2_GMODE_MASK_MASK |
1364 		       MAC_PHYCFG2_ACT_MASK_MASK   |
1365 		       MAC_PHYCFG2_QUAL_MASK_MASK |
1366 		       MAC_PHYCFG2_INBAND_ENABLE;
1367 
1368 	tw32(MAC_PHYCFG2, val);
1369 
1370 	val = tr32(MAC_PHYCFG1);
1371 	val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1372 		 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1373 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1374 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1375 			val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1376 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1377 			val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1378 	}
1379 	val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1380 	       MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1381 	tw32(MAC_PHYCFG1, val);
1382 
1383 	val = tr32(MAC_EXT_RGMII_MODE);
1384 	val &= ~(MAC_RGMII_MODE_RX_INT_B |
1385 		 MAC_RGMII_MODE_RX_QUALITY |
1386 		 MAC_RGMII_MODE_RX_ACTIVITY |
1387 		 MAC_RGMII_MODE_RX_ENG_DET |
1388 		 MAC_RGMII_MODE_TX_ENABLE |
1389 		 MAC_RGMII_MODE_TX_LOWPWR |
1390 		 MAC_RGMII_MODE_TX_RESET);
1391 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1392 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1393 			val |= MAC_RGMII_MODE_RX_INT_B |
1394 			       MAC_RGMII_MODE_RX_QUALITY |
1395 			       MAC_RGMII_MODE_RX_ACTIVITY |
1396 			       MAC_RGMII_MODE_RX_ENG_DET;
1397 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1398 			val |= MAC_RGMII_MODE_TX_ENABLE |
1399 			       MAC_RGMII_MODE_TX_LOWPWR |
1400 			       MAC_RGMII_MODE_TX_RESET;
1401 	}
1402 	tw32(MAC_EXT_RGMII_MODE, val);
1403 }
1404 
1405 static void tg3_mdio_start(struct tg3 *tp)
1406 {
1407 	tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1408 	tw32_f(MAC_MI_MODE, tp->mi_mode);
1409 	udelay(80);
1410 
1411 	if (tg3_flag(tp, MDIOBUS_INITED) &&
1412 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1413 		tg3_mdio_config_5785(tp);
1414 }
1415 
1416 static int tg3_mdio_init(struct tg3 *tp)
1417 {
1418 	int i;
1419 	u32 reg;
1420 	struct phy_device *phydev;
1421 
1422 	if (tg3_flag(tp, 5717_PLUS)) {
1423 		u32 is_serdes;
1424 
1425 		tp->phy_addr = tp->pci_fn + 1;
1426 
1427 		if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0)
1428 			is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1429 		else
1430 			is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1431 				    TG3_CPMU_PHY_STRAP_IS_SERDES;
1432 		if (is_serdes)
1433 			tp->phy_addr += 7;
1434 	} else
1435 		tp->phy_addr = TG3_PHY_MII_ADDR;
1436 
1437 	tg3_mdio_start(tp);
1438 
1439 	if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1440 		return 0;
1441 
1442 	tp->mdio_bus = mdiobus_alloc();
1443 	if (tp->mdio_bus == NULL)
1444 		return -ENOMEM;
1445 
1446 	tp->mdio_bus->name     = "tg3 mdio bus";
1447 	snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1448 		 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1449 	tp->mdio_bus->priv     = tp;
1450 	tp->mdio_bus->parent   = &tp->pdev->dev;
1451 	tp->mdio_bus->read     = &tg3_mdio_read;
1452 	tp->mdio_bus->write    = &tg3_mdio_write;
1453 	tp->mdio_bus->reset    = &tg3_mdio_reset;
1454 	tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
1455 	tp->mdio_bus->irq      = &tp->mdio_irq[0];
1456 
1457 	for (i = 0; i < PHY_MAX_ADDR; i++)
1458 		tp->mdio_bus->irq[i] = PHY_POLL;
1459 
1460 	/* The bus registration will look for all the PHYs on the mdio bus.
1461 	 * Unfortunately, it does not ensure the PHY is powered up before
1462 	 * accessing the PHY ID registers.  A chip reset is the
1463 	 * quickest way to bring the device back to an operational state..
1464 	 */
1465 	if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1466 		tg3_bmcr_reset(tp);
1467 
1468 	i = mdiobus_register(tp->mdio_bus);
1469 	if (i) {
1470 		dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1471 		mdiobus_free(tp->mdio_bus);
1472 		return i;
1473 	}
1474 
1475 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1476 
1477 	if (!phydev || !phydev->drv) {
1478 		dev_warn(&tp->pdev->dev, "No PHY devices\n");
1479 		mdiobus_unregister(tp->mdio_bus);
1480 		mdiobus_free(tp->mdio_bus);
1481 		return -ENODEV;
1482 	}
1483 
1484 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1485 	case PHY_ID_BCM57780:
1486 		phydev->interface = PHY_INTERFACE_MODE_GMII;
1487 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1488 		break;
1489 	case PHY_ID_BCM50610:
1490 	case PHY_ID_BCM50610M:
1491 		phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1492 				     PHY_BRCM_RX_REFCLK_UNUSED |
1493 				     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1494 				     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1495 		if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1496 			phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1497 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1498 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1499 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1500 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1501 		/* fallthru */
1502 	case PHY_ID_RTL8211C:
1503 		phydev->interface = PHY_INTERFACE_MODE_RGMII;
1504 		break;
1505 	case PHY_ID_RTL8201E:
1506 	case PHY_ID_BCMAC131:
1507 		phydev->interface = PHY_INTERFACE_MODE_MII;
1508 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1509 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
1510 		break;
1511 	}
1512 
1513 	tg3_flag_set(tp, MDIOBUS_INITED);
1514 
1515 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1516 		tg3_mdio_config_5785(tp);
1517 
1518 	return 0;
1519 }
1520 
1521 static void tg3_mdio_fini(struct tg3 *tp)
1522 {
1523 	if (tg3_flag(tp, MDIOBUS_INITED)) {
1524 		tg3_flag_clear(tp, MDIOBUS_INITED);
1525 		mdiobus_unregister(tp->mdio_bus);
1526 		mdiobus_free(tp->mdio_bus);
1527 	}
1528 }
1529 
1530 /* tp->lock is held. */
1531 static inline void tg3_generate_fw_event(struct tg3 *tp)
1532 {
1533 	u32 val;
1534 
1535 	val = tr32(GRC_RX_CPU_EVENT);
1536 	val |= GRC_RX_CPU_DRIVER_EVENT;
1537 	tw32_f(GRC_RX_CPU_EVENT, val);
1538 
1539 	tp->last_event_jiffies = jiffies;
1540 }
1541 
1542 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1543 
1544 /* tp->lock is held. */
1545 static void tg3_wait_for_event_ack(struct tg3 *tp)
1546 {
1547 	int i;
1548 	unsigned int delay_cnt;
1549 	long time_remain;
1550 
1551 	/* If enough time has passed, no wait is necessary. */
1552 	time_remain = (long)(tp->last_event_jiffies + 1 +
1553 		      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1554 		      (long)jiffies;
1555 	if (time_remain < 0)
1556 		return;
1557 
1558 	/* Check if we can shorten the wait time. */
1559 	delay_cnt = jiffies_to_usecs(time_remain);
1560 	if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1561 		delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1562 	delay_cnt = (delay_cnt >> 3) + 1;
1563 
1564 	for (i = 0; i < delay_cnt; i++) {
1565 		if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1566 			break;
1567 		udelay(8);
1568 	}
1569 }
1570 
1571 /* tp->lock is held. */
1572 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1573 {
1574 	u32 reg, val;
1575 
1576 	val = 0;
1577 	if (!tg3_readphy(tp, MII_BMCR, &reg))
1578 		val = reg << 16;
1579 	if (!tg3_readphy(tp, MII_BMSR, &reg))
1580 		val |= (reg & 0xffff);
1581 	*data++ = val;
1582 
1583 	val = 0;
1584 	if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1585 		val = reg << 16;
1586 	if (!tg3_readphy(tp, MII_LPA, &reg))
1587 		val |= (reg & 0xffff);
1588 	*data++ = val;
1589 
1590 	val = 0;
1591 	if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1592 		if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1593 			val = reg << 16;
1594 		if (!tg3_readphy(tp, MII_STAT1000, &reg))
1595 			val |= (reg & 0xffff);
1596 	}
1597 	*data++ = val;
1598 
1599 	if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1600 		val = reg << 16;
1601 	else
1602 		val = 0;
1603 	*data++ = val;
1604 }
1605 
1606 /* tp->lock is held. */
1607 static void tg3_ump_link_report(struct tg3 *tp)
1608 {
1609 	u32 data[4];
1610 
1611 	if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1612 		return;
1613 
1614 	tg3_phy_gather_ump_data(tp, data);
1615 
1616 	tg3_wait_for_event_ack(tp);
1617 
1618 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1619 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1620 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1621 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1622 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1623 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1624 
1625 	tg3_generate_fw_event(tp);
1626 }
1627 
1628 /* tp->lock is held. */
1629 static void tg3_stop_fw(struct tg3 *tp)
1630 {
1631 	if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1632 		/* Wait for RX cpu to ACK the previous event. */
1633 		tg3_wait_for_event_ack(tp);
1634 
1635 		tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1636 
1637 		tg3_generate_fw_event(tp);
1638 
1639 		/* Wait for RX cpu to ACK this event. */
1640 		tg3_wait_for_event_ack(tp);
1641 	}
1642 }
1643 
1644 /* tp->lock is held. */
1645 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1646 {
1647 	tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1648 		      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1649 
1650 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1651 		switch (kind) {
1652 		case RESET_KIND_INIT:
1653 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1654 				      DRV_STATE_START);
1655 			break;
1656 
1657 		case RESET_KIND_SHUTDOWN:
1658 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1659 				      DRV_STATE_UNLOAD);
1660 			break;
1661 
1662 		case RESET_KIND_SUSPEND:
1663 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1664 				      DRV_STATE_SUSPEND);
1665 			break;
1666 
1667 		default:
1668 			break;
1669 		}
1670 	}
1671 
1672 	if (kind == RESET_KIND_INIT ||
1673 	    kind == RESET_KIND_SUSPEND)
1674 		tg3_ape_driver_state_change(tp, kind);
1675 }
1676 
1677 /* tp->lock is held. */
1678 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1679 {
1680 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1681 		switch (kind) {
1682 		case RESET_KIND_INIT:
1683 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1684 				      DRV_STATE_START_DONE);
1685 			break;
1686 
1687 		case RESET_KIND_SHUTDOWN:
1688 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1689 				      DRV_STATE_UNLOAD_DONE);
1690 			break;
1691 
1692 		default:
1693 			break;
1694 		}
1695 	}
1696 
1697 	if (kind == RESET_KIND_SHUTDOWN)
1698 		tg3_ape_driver_state_change(tp, kind);
1699 }
1700 
1701 /* tp->lock is held. */
1702 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1703 {
1704 	if (tg3_flag(tp, ENABLE_ASF)) {
1705 		switch (kind) {
1706 		case RESET_KIND_INIT:
1707 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1708 				      DRV_STATE_START);
1709 			break;
1710 
1711 		case RESET_KIND_SHUTDOWN:
1712 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1713 				      DRV_STATE_UNLOAD);
1714 			break;
1715 
1716 		case RESET_KIND_SUSPEND:
1717 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1718 				      DRV_STATE_SUSPEND);
1719 			break;
1720 
1721 		default:
1722 			break;
1723 		}
1724 	}
1725 }
1726 
1727 static int tg3_poll_fw(struct tg3 *tp)
1728 {
1729 	int i;
1730 	u32 val;
1731 
1732 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1733 		/* Wait up to 20ms for init done. */
1734 		for (i = 0; i < 200; i++) {
1735 			if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1736 				return 0;
1737 			udelay(100);
1738 		}
1739 		return -ENODEV;
1740 	}
1741 
1742 	/* Wait for firmware initialization to complete. */
1743 	for (i = 0; i < 100000; i++) {
1744 		tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1745 		if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1746 			break;
1747 		udelay(10);
1748 	}
1749 
1750 	/* Chip might not be fitted with firmware.  Some Sun onboard
1751 	 * parts are configured like that.  So don't signal the timeout
1752 	 * of the above loop as an error, but do report the lack of
1753 	 * running firmware once.
1754 	 */
1755 	if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1756 		tg3_flag_set(tp, NO_FWARE_REPORTED);
1757 
1758 		netdev_info(tp->dev, "No firmware running\n");
1759 	}
1760 
1761 	if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
1762 		/* The 57765 A0 needs a little more
1763 		 * time to do some important work.
1764 		 */
1765 		mdelay(10);
1766 	}
1767 
1768 	return 0;
1769 }
1770 
1771 static void tg3_link_report(struct tg3 *tp)
1772 {
1773 	if (!netif_carrier_ok(tp->dev)) {
1774 		netif_info(tp, link, tp->dev, "Link is down\n");
1775 		tg3_ump_link_report(tp);
1776 	} else if (netif_msg_link(tp)) {
1777 		netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1778 			    (tp->link_config.active_speed == SPEED_1000 ?
1779 			     1000 :
1780 			     (tp->link_config.active_speed == SPEED_100 ?
1781 			      100 : 10)),
1782 			    (tp->link_config.active_duplex == DUPLEX_FULL ?
1783 			     "full" : "half"));
1784 
1785 		netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1786 			    (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1787 			    "on" : "off",
1788 			    (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1789 			    "on" : "off");
1790 
1791 		if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1792 			netdev_info(tp->dev, "EEE is %s\n",
1793 				    tp->setlpicnt ? "enabled" : "disabled");
1794 
1795 		tg3_ump_link_report(tp);
1796 	}
1797 }
1798 
1799 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1800 {
1801 	u16 miireg;
1802 
1803 	if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1804 		miireg = ADVERTISE_1000XPAUSE;
1805 	else if (flow_ctrl & FLOW_CTRL_TX)
1806 		miireg = ADVERTISE_1000XPSE_ASYM;
1807 	else if (flow_ctrl & FLOW_CTRL_RX)
1808 		miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1809 	else
1810 		miireg = 0;
1811 
1812 	return miireg;
1813 }
1814 
1815 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1816 {
1817 	u8 cap = 0;
1818 
1819 	if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1820 		cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1821 	} else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1822 		if (lcladv & ADVERTISE_1000XPAUSE)
1823 			cap = FLOW_CTRL_RX;
1824 		if (rmtadv & ADVERTISE_1000XPAUSE)
1825 			cap = FLOW_CTRL_TX;
1826 	}
1827 
1828 	return cap;
1829 }
1830 
1831 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1832 {
1833 	u8 autoneg;
1834 	u8 flowctrl = 0;
1835 	u32 old_rx_mode = tp->rx_mode;
1836 	u32 old_tx_mode = tp->tx_mode;
1837 
1838 	if (tg3_flag(tp, USE_PHYLIB))
1839 		autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
1840 	else
1841 		autoneg = tp->link_config.autoneg;
1842 
1843 	if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1844 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1845 			flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1846 		else
1847 			flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1848 	} else
1849 		flowctrl = tp->link_config.flowctrl;
1850 
1851 	tp->link_config.active_flowctrl = flowctrl;
1852 
1853 	if (flowctrl & FLOW_CTRL_RX)
1854 		tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1855 	else
1856 		tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1857 
1858 	if (old_rx_mode != tp->rx_mode)
1859 		tw32_f(MAC_RX_MODE, tp->rx_mode);
1860 
1861 	if (flowctrl & FLOW_CTRL_TX)
1862 		tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1863 	else
1864 		tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1865 
1866 	if (old_tx_mode != tp->tx_mode)
1867 		tw32_f(MAC_TX_MODE, tp->tx_mode);
1868 }
1869 
1870 static void tg3_adjust_link(struct net_device *dev)
1871 {
1872 	u8 oldflowctrl, linkmesg = 0;
1873 	u32 mac_mode, lcl_adv, rmt_adv;
1874 	struct tg3 *tp = netdev_priv(dev);
1875 	struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1876 
1877 	spin_lock_bh(&tp->lock);
1878 
1879 	mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
1880 				    MAC_MODE_HALF_DUPLEX);
1881 
1882 	oldflowctrl = tp->link_config.active_flowctrl;
1883 
1884 	if (phydev->link) {
1885 		lcl_adv = 0;
1886 		rmt_adv = 0;
1887 
1888 		if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
1889 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1890 		else if (phydev->speed == SPEED_1000 ||
1891 			 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785)
1892 			mac_mode |= MAC_MODE_PORT_MODE_GMII;
1893 		else
1894 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1895 
1896 		if (phydev->duplex == DUPLEX_HALF)
1897 			mac_mode |= MAC_MODE_HALF_DUPLEX;
1898 		else {
1899 			lcl_adv = mii_advertise_flowctrl(
1900 				  tp->link_config.flowctrl);
1901 
1902 			if (phydev->pause)
1903 				rmt_adv = LPA_PAUSE_CAP;
1904 			if (phydev->asym_pause)
1905 				rmt_adv |= LPA_PAUSE_ASYM;
1906 		}
1907 
1908 		tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1909 	} else
1910 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
1911 
1912 	if (mac_mode != tp->mac_mode) {
1913 		tp->mac_mode = mac_mode;
1914 		tw32_f(MAC_MODE, tp->mac_mode);
1915 		udelay(40);
1916 	}
1917 
1918 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
1919 		if (phydev->speed == SPEED_10)
1920 			tw32(MAC_MI_STAT,
1921 			     MAC_MI_STAT_10MBPS_MODE |
1922 			     MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1923 		else
1924 			tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1925 	}
1926 
1927 	if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
1928 		tw32(MAC_TX_LENGTHS,
1929 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1930 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1931 		      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
1932 	else
1933 		tw32(MAC_TX_LENGTHS,
1934 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1935 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1936 		      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
1937 
1938 	if (phydev->link != tp->old_link ||
1939 	    phydev->speed != tp->link_config.active_speed ||
1940 	    phydev->duplex != tp->link_config.active_duplex ||
1941 	    oldflowctrl != tp->link_config.active_flowctrl)
1942 		linkmesg = 1;
1943 
1944 	tp->old_link = phydev->link;
1945 	tp->link_config.active_speed = phydev->speed;
1946 	tp->link_config.active_duplex = phydev->duplex;
1947 
1948 	spin_unlock_bh(&tp->lock);
1949 
1950 	if (linkmesg)
1951 		tg3_link_report(tp);
1952 }
1953 
1954 static int tg3_phy_init(struct tg3 *tp)
1955 {
1956 	struct phy_device *phydev;
1957 
1958 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
1959 		return 0;
1960 
1961 	/* Bring the PHY back to a known state. */
1962 	tg3_bmcr_reset(tp);
1963 
1964 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1965 
1966 	/* Attach the MAC to the PHY. */
1967 	phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link,
1968 			     phydev->dev_flags, phydev->interface);
1969 	if (IS_ERR(phydev)) {
1970 		dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
1971 		return PTR_ERR(phydev);
1972 	}
1973 
1974 	/* Mask with MAC supported features. */
1975 	switch (phydev->interface) {
1976 	case PHY_INTERFACE_MODE_GMII:
1977 	case PHY_INTERFACE_MODE_RGMII:
1978 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
1979 			phydev->supported &= (PHY_GBIT_FEATURES |
1980 					      SUPPORTED_Pause |
1981 					      SUPPORTED_Asym_Pause);
1982 			break;
1983 		}
1984 		/* fallthru */
1985 	case PHY_INTERFACE_MODE_MII:
1986 		phydev->supported &= (PHY_BASIC_FEATURES |
1987 				      SUPPORTED_Pause |
1988 				      SUPPORTED_Asym_Pause);
1989 		break;
1990 	default:
1991 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
1992 		return -EINVAL;
1993 	}
1994 
1995 	tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
1996 
1997 	phydev->advertising = phydev->supported;
1998 
1999 	return 0;
2000 }
2001 
2002 static void tg3_phy_start(struct tg3 *tp)
2003 {
2004 	struct phy_device *phydev;
2005 
2006 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2007 		return;
2008 
2009 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
2010 
2011 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2012 		tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2013 		phydev->speed = tp->link_config.speed;
2014 		phydev->duplex = tp->link_config.duplex;
2015 		phydev->autoneg = tp->link_config.autoneg;
2016 		phydev->advertising = tp->link_config.advertising;
2017 	}
2018 
2019 	phy_start(phydev);
2020 
2021 	phy_start_aneg(phydev);
2022 }
2023 
2024 static void tg3_phy_stop(struct tg3 *tp)
2025 {
2026 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2027 		return;
2028 
2029 	phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2030 }
2031 
2032 static void tg3_phy_fini(struct tg3 *tp)
2033 {
2034 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2035 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2036 		tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2037 	}
2038 }
2039 
2040 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2041 {
2042 	int err;
2043 	u32 val;
2044 
2045 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2046 		return 0;
2047 
2048 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2049 		/* Cannot do read-modify-write on 5401 */
2050 		err = tg3_phy_auxctl_write(tp,
2051 					   MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2052 					   MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2053 					   0x4c20);
2054 		goto done;
2055 	}
2056 
2057 	err = tg3_phy_auxctl_read(tp,
2058 				  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2059 	if (err)
2060 		return err;
2061 
2062 	val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2063 	err = tg3_phy_auxctl_write(tp,
2064 				   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2065 
2066 done:
2067 	return err;
2068 }
2069 
2070 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2071 {
2072 	u32 phytest;
2073 
2074 	if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2075 		u32 phy;
2076 
2077 		tg3_writephy(tp, MII_TG3_FET_TEST,
2078 			     phytest | MII_TG3_FET_SHADOW_EN);
2079 		if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2080 			if (enable)
2081 				phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2082 			else
2083 				phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2084 			tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2085 		}
2086 		tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2087 	}
2088 }
2089 
2090 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2091 {
2092 	u32 reg;
2093 
2094 	if (!tg3_flag(tp, 5705_PLUS) ||
2095 	    (tg3_flag(tp, 5717_PLUS) &&
2096 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2097 		return;
2098 
2099 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2100 		tg3_phy_fet_toggle_apd(tp, enable);
2101 		return;
2102 	}
2103 
2104 	reg = MII_TG3_MISC_SHDW_WREN |
2105 	      MII_TG3_MISC_SHDW_SCR5_SEL |
2106 	      MII_TG3_MISC_SHDW_SCR5_LPED |
2107 	      MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2108 	      MII_TG3_MISC_SHDW_SCR5_SDTL |
2109 	      MII_TG3_MISC_SHDW_SCR5_C125OE;
2110 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable)
2111 		reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2112 
2113 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2114 
2115 
2116 	reg = MII_TG3_MISC_SHDW_WREN |
2117 	      MII_TG3_MISC_SHDW_APD_SEL |
2118 	      MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2119 	if (enable)
2120 		reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2121 
2122 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2123 }
2124 
2125 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
2126 {
2127 	u32 phy;
2128 
2129 	if (!tg3_flag(tp, 5705_PLUS) ||
2130 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2131 		return;
2132 
2133 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2134 		u32 ephy;
2135 
2136 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2137 			u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2138 
2139 			tg3_writephy(tp, MII_TG3_FET_TEST,
2140 				     ephy | MII_TG3_FET_SHADOW_EN);
2141 			if (!tg3_readphy(tp, reg, &phy)) {
2142 				if (enable)
2143 					phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2144 				else
2145 					phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2146 				tg3_writephy(tp, reg, phy);
2147 			}
2148 			tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2149 		}
2150 	} else {
2151 		int ret;
2152 
2153 		ret = tg3_phy_auxctl_read(tp,
2154 					  MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2155 		if (!ret) {
2156 			if (enable)
2157 				phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2158 			else
2159 				phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2160 			tg3_phy_auxctl_write(tp,
2161 					     MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2162 		}
2163 	}
2164 }
2165 
2166 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2167 {
2168 	int ret;
2169 	u32 val;
2170 
2171 	if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2172 		return;
2173 
2174 	ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2175 	if (!ret)
2176 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2177 				     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2178 }
2179 
2180 static void tg3_phy_apply_otp(struct tg3 *tp)
2181 {
2182 	u32 otp, phy;
2183 
2184 	if (!tp->phy_otp)
2185 		return;
2186 
2187 	otp = tp->phy_otp;
2188 
2189 	if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp))
2190 		return;
2191 
2192 	phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2193 	phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2194 	tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2195 
2196 	phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2197 	      ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2198 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2199 
2200 	phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2201 	phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2202 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2203 
2204 	phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2205 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2206 
2207 	phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2208 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2209 
2210 	phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2211 	      ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2212 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2213 
2214 	TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2215 }
2216 
2217 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
2218 {
2219 	u32 val;
2220 
2221 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2222 		return;
2223 
2224 	tp->setlpicnt = 0;
2225 
2226 	if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2227 	    current_link_up == 1 &&
2228 	    tp->link_config.active_duplex == DUPLEX_FULL &&
2229 	    (tp->link_config.active_speed == SPEED_100 ||
2230 	     tp->link_config.active_speed == SPEED_1000)) {
2231 		u32 eeectl;
2232 
2233 		if (tp->link_config.active_speed == SPEED_1000)
2234 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2235 		else
2236 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2237 
2238 		tw32(TG3_CPMU_EEE_CTRL, eeectl);
2239 
2240 		tg3_phy_cl45_read(tp, MDIO_MMD_AN,
2241 				  TG3_CL45_D7_EEERES_STAT, &val);
2242 
2243 		if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2244 		    val == TG3_CL45_D7_EEERES_STAT_LP_100TX)
2245 			tp->setlpicnt = 2;
2246 	}
2247 
2248 	if (!tp->setlpicnt) {
2249 		if (current_link_up == 1 &&
2250 		   !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2251 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2252 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2253 		}
2254 
2255 		val = tr32(TG3_CPMU_EEE_MODE);
2256 		tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2257 	}
2258 }
2259 
2260 static void tg3_phy_eee_enable(struct tg3 *tp)
2261 {
2262 	u32 val;
2263 
2264 	if (tp->link_config.active_speed == SPEED_1000 &&
2265 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2266 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2267 	     tg3_flag(tp, 57765_CLASS)) &&
2268 	    !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2269 		val = MII_TG3_DSP_TAP26_ALNOKO |
2270 		      MII_TG3_DSP_TAP26_RMRXSTO;
2271 		tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2272 		TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2273 	}
2274 
2275 	val = tr32(TG3_CPMU_EEE_MODE);
2276 	tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2277 }
2278 
2279 static int tg3_wait_macro_done(struct tg3 *tp)
2280 {
2281 	int limit = 100;
2282 
2283 	while (limit--) {
2284 		u32 tmp32;
2285 
2286 		if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2287 			if ((tmp32 & 0x1000) == 0)
2288 				break;
2289 		}
2290 	}
2291 	if (limit < 0)
2292 		return -EBUSY;
2293 
2294 	return 0;
2295 }
2296 
2297 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2298 {
2299 	static const u32 test_pat[4][6] = {
2300 	{ 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2301 	{ 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2302 	{ 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2303 	{ 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2304 	};
2305 	int chan;
2306 
2307 	for (chan = 0; chan < 4; chan++) {
2308 		int i;
2309 
2310 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2311 			     (chan * 0x2000) | 0x0200);
2312 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2313 
2314 		for (i = 0; i < 6; i++)
2315 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2316 				     test_pat[chan][i]);
2317 
2318 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2319 		if (tg3_wait_macro_done(tp)) {
2320 			*resetp = 1;
2321 			return -EBUSY;
2322 		}
2323 
2324 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2325 			     (chan * 0x2000) | 0x0200);
2326 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2327 		if (tg3_wait_macro_done(tp)) {
2328 			*resetp = 1;
2329 			return -EBUSY;
2330 		}
2331 
2332 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2333 		if (tg3_wait_macro_done(tp)) {
2334 			*resetp = 1;
2335 			return -EBUSY;
2336 		}
2337 
2338 		for (i = 0; i < 6; i += 2) {
2339 			u32 low, high;
2340 
2341 			if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2342 			    tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2343 			    tg3_wait_macro_done(tp)) {
2344 				*resetp = 1;
2345 				return -EBUSY;
2346 			}
2347 			low &= 0x7fff;
2348 			high &= 0x000f;
2349 			if (low != test_pat[chan][i] ||
2350 			    high != test_pat[chan][i+1]) {
2351 				tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2352 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2353 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2354 
2355 				return -EBUSY;
2356 			}
2357 		}
2358 	}
2359 
2360 	return 0;
2361 }
2362 
2363 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2364 {
2365 	int chan;
2366 
2367 	for (chan = 0; chan < 4; chan++) {
2368 		int i;
2369 
2370 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2371 			     (chan * 0x2000) | 0x0200);
2372 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2373 		for (i = 0; i < 6; i++)
2374 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2375 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2376 		if (tg3_wait_macro_done(tp))
2377 			return -EBUSY;
2378 	}
2379 
2380 	return 0;
2381 }
2382 
2383 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2384 {
2385 	u32 reg32, phy9_orig;
2386 	int retries, do_phy_reset, err;
2387 
2388 	retries = 10;
2389 	do_phy_reset = 1;
2390 	do {
2391 		if (do_phy_reset) {
2392 			err = tg3_bmcr_reset(tp);
2393 			if (err)
2394 				return err;
2395 			do_phy_reset = 0;
2396 		}
2397 
2398 		/* Disable transmitter and interrupt.  */
2399 		if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2400 			continue;
2401 
2402 		reg32 |= 0x3000;
2403 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2404 
2405 		/* Set full-duplex, 1000 mbps.  */
2406 		tg3_writephy(tp, MII_BMCR,
2407 			     BMCR_FULLDPLX | BMCR_SPEED1000);
2408 
2409 		/* Set to master mode.  */
2410 		if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2411 			continue;
2412 
2413 		tg3_writephy(tp, MII_CTRL1000,
2414 			     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2415 
2416 		err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
2417 		if (err)
2418 			return err;
2419 
2420 		/* Block the PHY control access.  */
2421 		tg3_phydsp_write(tp, 0x8005, 0x0800);
2422 
2423 		err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2424 		if (!err)
2425 			break;
2426 	} while (--retries);
2427 
2428 	err = tg3_phy_reset_chanpat(tp);
2429 	if (err)
2430 		return err;
2431 
2432 	tg3_phydsp_write(tp, 0x8005, 0x0000);
2433 
2434 	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2435 	tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2436 
2437 	TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2438 
2439 	tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2440 
2441 	if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2442 		reg32 &= ~0x3000;
2443 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2444 	} else if (!err)
2445 		err = -EBUSY;
2446 
2447 	return err;
2448 }
2449 
2450 /* This will reset the tigon3 PHY if there is no valid
2451  * link unless the FORCE argument is non-zero.
2452  */
2453 static int tg3_phy_reset(struct tg3 *tp)
2454 {
2455 	u32 val, cpmuctrl;
2456 	int err;
2457 
2458 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2459 		val = tr32(GRC_MISC_CFG);
2460 		tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2461 		udelay(40);
2462 	}
2463 	err  = tg3_readphy(tp, MII_BMSR, &val);
2464 	err |= tg3_readphy(tp, MII_BMSR, &val);
2465 	if (err != 0)
2466 		return -EBUSY;
2467 
2468 	if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
2469 		netif_carrier_off(tp->dev);
2470 		tg3_link_report(tp);
2471 	}
2472 
2473 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2474 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2475 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
2476 		err = tg3_phy_reset_5703_4_5(tp);
2477 		if (err)
2478 			return err;
2479 		goto out;
2480 	}
2481 
2482 	cpmuctrl = 0;
2483 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
2484 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
2485 		cpmuctrl = tr32(TG3_CPMU_CTRL);
2486 		if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2487 			tw32(TG3_CPMU_CTRL,
2488 			     cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2489 	}
2490 
2491 	err = tg3_bmcr_reset(tp);
2492 	if (err)
2493 		return err;
2494 
2495 	if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2496 		val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2497 		tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2498 
2499 		tw32(TG3_CPMU_CTRL, cpmuctrl);
2500 	}
2501 
2502 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2503 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2504 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2505 		if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2506 		    CPMU_LSPD_1000MB_MACCLK_12_5) {
2507 			val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2508 			udelay(40);
2509 			tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2510 		}
2511 	}
2512 
2513 	if (tg3_flag(tp, 5717_PLUS) &&
2514 	    (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2515 		return 0;
2516 
2517 	tg3_phy_apply_otp(tp);
2518 
2519 	if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2520 		tg3_phy_toggle_apd(tp, true);
2521 	else
2522 		tg3_phy_toggle_apd(tp, false);
2523 
2524 out:
2525 	if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2526 	    !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2527 		tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2528 		tg3_phydsp_write(tp, 0x000a, 0x0323);
2529 		TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2530 	}
2531 
2532 	if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2533 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2534 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2535 	}
2536 
2537 	if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2538 		if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2539 			tg3_phydsp_write(tp, 0x000a, 0x310b);
2540 			tg3_phydsp_write(tp, 0x201f, 0x9506);
2541 			tg3_phydsp_write(tp, 0x401f, 0x14e2);
2542 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2543 		}
2544 	} else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2545 		if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2546 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2547 			if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2548 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2549 				tg3_writephy(tp, MII_TG3_TEST1,
2550 					     MII_TG3_TEST1_TRIM_EN | 0x4);
2551 			} else
2552 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2553 
2554 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2555 		}
2556 	}
2557 
2558 	/* Set Extended packet length bit (bit 14) on all chips that */
2559 	/* support jumbo frames */
2560 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2561 		/* Cannot do read-modify-write on 5401 */
2562 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2563 	} else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2564 		/* Set bit 14 with read-modify-write to preserve other bits */
2565 		err = tg3_phy_auxctl_read(tp,
2566 					  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2567 		if (!err)
2568 			tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2569 					   val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2570 	}
2571 
2572 	/* Set phy register 0x10 bit 0 to high fifo elasticity to support
2573 	 * jumbo frames transmission.
2574 	 */
2575 	if (tg3_flag(tp, JUMBO_CAPABLE)) {
2576 		if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2577 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
2578 				     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2579 	}
2580 
2581 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2582 		/* adjust output voltage */
2583 		tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2584 	}
2585 
2586 	tg3_phy_toggle_automdix(tp, 1);
2587 	tg3_phy_set_wirespeed(tp);
2588 	return 0;
2589 }
2590 
2591 #define TG3_GPIO_MSG_DRVR_PRES		 0x00000001
2592 #define TG3_GPIO_MSG_NEED_VAUX		 0x00000002
2593 #define TG3_GPIO_MSG_MASK		 (TG3_GPIO_MSG_DRVR_PRES | \
2594 					  TG3_GPIO_MSG_NEED_VAUX)
2595 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2596 	((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2597 	 (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2598 	 (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2599 	 (TG3_GPIO_MSG_DRVR_PRES << 12))
2600 
2601 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2602 	((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2603 	 (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2604 	 (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2605 	 (TG3_GPIO_MSG_NEED_VAUX << 12))
2606 
2607 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2608 {
2609 	u32 status, shift;
2610 
2611 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2612 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2613 		status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2614 	else
2615 		status = tr32(TG3_CPMU_DRV_STATUS);
2616 
2617 	shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2618 	status &= ~(TG3_GPIO_MSG_MASK << shift);
2619 	status |= (newstat << shift);
2620 
2621 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2622 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2623 		tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2624 	else
2625 		tw32(TG3_CPMU_DRV_STATUS, status);
2626 
2627 	return status >> TG3_APE_GPIO_MSG_SHIFT;
2628 }
2629 
2630 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2631 {
2632 	if (!tg3_flag(tp, IS_NIC))
2633 		return 0;
2634 
2635 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2636 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2637 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2638 		if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2639 			return -EIO;
2640 
2641 		tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2642 
2643 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2644 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2645 
2646 		tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2647 	} else {
2648 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2649 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2650 	}
2651 
2652 	return 0;
2653 }
2654 
2655 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2656 {
2657 	u32 grc_local_ctrl;
2658 
2659 	if (!tg3_flag(tp, IS_NIC) ||
2660 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2661 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)
2662 		return;
2663 
2664 	grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2665 
2666 	tw32_wait_f(GRC_LOCAL_CTRL,
2667 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2668 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2669 
2670 	tw32_wait_f(GRC_LOCAL_CTRL,
2671 		    grc_local_ctrl,
2672 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2673 
2674 	tw32_wait_f(GRC_LOCAL_CTRL,
2675 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2676 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2677 }
2678 
2679 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2680 {
2681 	if (!tg3_flag(tp, IS_NIC))
2682 		return;
2683 
2684 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2685 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2686 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2687 			    (GRC_LCLCTRL_GPIO_OE0 |
2688 			     GRC_LCLCTRL_GPIO_OE1 |
2689 			     GRC_LCLCTRL_GPIO_OE2 |
2690 			     GRC_LCLCTRL_GPIO_OUTPUT0 |
2691 			     GRC_LCLCTRL_GPIO_OUTPUT1),
2692 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2693 	} else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2694 		   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2695 		/* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2696 		u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2697 				     GRC_LCLCTRL_GPIO_OE1 |
2698 				     GRC_LCLCTRL_GPIO_OE2 |
2699 				     GRC_LCLCTRL_GPIO_OUTPUT0 |
2700 				     GRC_LCLCTRL_GPIO_OUTPUT1 |
2701 				     tp->grc_local_ctrl;
2702 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2703 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2704 
2705 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2706 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2707 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2708 
2709 		grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2710 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2711 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2712 	} else {
2713 		u32 no_gpio2;
2714 		u32 grc_local_ctrl = 0;
2715 
2716 		/* Workaround to prevent overdrawing Amps. */
2717 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2718 			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2719 			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2720 				    grc_local_ctrl,
2721 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2722 		}
2723 
2724 		/* On 5753 and variants, GPIO2 cannot be used. */
2725 		no_gpio2 = tp->nic_sram_data_cfg &
2726 			   NIC_SRAM_DATA_CFG_NO_GPIO2;
2727 
2728 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2729 				  GRC_LCLCTRL_GPIO_OE1 |
2730 				  GRC_LCLCTRL_GPIO_OE2 |
2731 				  GRC_LCLCTRL_GPIO_OUTPUT1 |
2732 				  GRC_LCLCTRL_GPIO_OUTPUT2;
2733 		if (no_gpio2) {
2734 			grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2735 					    GRC_LCLCTRL_GPIO_OUTPUT2);
2736 		}
2737 		tw32_wait_f(GRC_LOCAL_CTRL,
2738 			    tp->grc_local_ctrl | grc_local_ctrl,
2739 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2740 
2741 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2742 
2743 		tw32_wait_f(GRC_LOCAL_CTRL,
2744 			    tp->grc_local_ctrl | grc_local_ctrl,
2745 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2746 
2747 		if (!no_gpio2) {
2748 			grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2749 			tw32_wait_f(GRC_LOCAL_CTRL,
2750 				    tp->grc_local_ctrl | grc_local_ctrl,
2751 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2752 		}
2753 	}
2754 }
2755 
2756 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2757 {
2758 	u32 msg = 0;
2759 
2760 	/* Serialize power state transitions */
2761 	if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2762 		return;
2763 
2764 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2765 		msg = TG3_GPIO_MSG_NEED_VAUX;
2766 
2767 	msg = tg3_set_function_status(tp, msg);
2768 
2769 	if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2770 		goto done;
2771 
2772 	if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2773 		tg3_pwrsrc_switch_to_vaux(tp);
2774 	else
2775 		tg3_pwrsrc_die_with_vmain(tp);
2776 
2777 done:
2778 	tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2779 }
2780 
2781 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2782 {
2783 	bool need_vaux = false;
2784 
2785 	/* The GPIOs do something completely different on 57765. */
2786 	if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2787 		return;
2788 
2789 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2790 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2791 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2792 		tg3_frob_aux_power_5717(tp, include_wol ?
2793 					tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2794 		return;
2795 	}
2796 
2797 	if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2798 		struct net_device *dev_peer;
2799 
2800 		dev_peer = pci_get_drvdata(tp->pdev_peer);
2801 
2802 		/* remove_one() may have been run on the peer. */
2803 		if (dev_peer) {
2804 			struct tg3 *tp_peer = netdev_priv(dev_peer);
2805 
2806 			if (tg3_flag(tp_peer, INIT_COMPLETE))
2807 				return;
2808 
2809 			if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2810 			    tg3_flag(tp_peer, ENABLE_ASF))
2811 				need_vaux = true;
2812 		}
2813 	}
2814 
2815 	if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2816 	    tg3_flag(tp, ENABLE_ASF))
2817 		need_vaux = true;
2818 
2819 	if (need_vaux)
2820 		tg3_pwrsrc_switch_to_vaux(tp);
2821 	else
2822 		tg3_pwrsrc_die_with_vmain(tp);
2823 }
2824 
2825 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
2826 {
2827 	if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
2828 		return 1;
2829 	else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
2830 		if (speed != SPEED_10)
2831 			return 1;
2832 	} else if (speed == SPEED_10)
2833 		return 1;
2834 
2835 	return 0;
2836 }
2837 
2838 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
2839 {
2840 	u32 val;
2841 
2842 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
2843 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
2844 			u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2845 			u32 serdes_cfg = tr32(MAC_SERDES_CFG);
2846 
2847 			sg_dig_ctrl |=
2848 				SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
2849 			tw32(SG_DIG_CTRL, sg_dig_ctrl);
2850 			tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
2851 		}
2852 		return;
2853 	}
2854 
2855 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2856 		tg3_bmcr_reset(tp);
2857 		val = tr32(GRC_MISC_CFG);
2858 		tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
2859 		udelay(40);
2860 		return;
2861 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2862 		u32 phytest;
2863 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2864 			u32 phy;
2865 
2866 			tg3_writephy(tp, MII_ADVERTISE, 0);
2867 			tg3_writephy(tp, MII_BMCR,
2868 				     BMCR_ANENABLE | BMCR_ANRESTART);
2869 
2870 			tg3_writephy(tp, MII_TG3_FET_TEST,
2871 				     phytest | MII_TG3_FET_SHADOW_EN);
2872 			if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
2873 				phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
2874 				tg3_writephy(tp,
2875 					     MII_TG3_FET_SHDW_AUXMODE4,
2876 					     phy);
2877 			}
2878 			tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2879 		}
2880 		return;
2881 	} else if (do_low_power) {
2882 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
2883 			     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
2884 
2885 		val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
2886 		      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
2887 		      MII_TG3_AUXCTL_PCTL_VREG_11V;
2888 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
2889 	}
2890 
2891 	/* The PHY should not be powered down on some chips because
2892 	 * of bugs.
2893 	 */
2894 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2895 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2896 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
2897 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
2898 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 &&
2899 	     !tp->pci_fn))
2900 		return;
2901 
2902 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2903 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2904 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2905 		val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2906 		val |= CPMU_LSPD_1000MB_MACCLK_12_5;
2907 		tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2908 	}
2909 
2910 	tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
2911 }
2912 
2913 /* tp->lock is held. */
2914 static int tg3_nvram_lock(struct tg3 *tp)
2915 {
2916 	if (tg3_flag(tp, NVRAM)) {
2917 		int i;
2918 
2919 		if (tp->nvram_lock_cnt == 0) {
2920 			tw32(NVRAM_SWARB, SWARB_REQ_SET1);
2921 			for (i = 0; i < 8000; i++) {
2922 				if (tr32(NVRAM_SWARB) & SWARB_GNT1)
2923 					break;
2924 				udelay(20);
2925 			}
2926 			if (i == 8000) {
2927 				tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
2928 				return -ENODEV;
2929 			}
2930 		}
2931 		tp->nvram_lock_cnt++;
2932 	}
2933 	return 0;
2934 }
2935 
2936 /* tp->lock is held. */
2937 static void tg3_nvram_unlock(struct tg3 *tp)
2938 {
2939 	if (tg3_flag(tp, NVRAM)) {
2940 		if (tp->nvram_lock_cnt > 0)
2941 			tp->nvram_lock_cnt--;
2942 		if (tp->nvram_lock_cnt == 0)
2943 			tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
2944 	}
2945 }
2946 
2947 /* tp->lock is held. */
2948 static void tg3_enable_nvram_access(struct tg3 *tp)
2949 {
2950 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2951 		u32 nvaccess = tr32(NVRAM_ACCESS);
2952 
2953 		tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
2954 	}
2955 }
2956 
2957 /* tp->lock is held. */
2958 static void tg3_disable_nvram_access(struct tg3 *tp)
2959 {
2960 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2961 		u32 nvaccess = tr32(NVRAM_ACCESS);
2962 
2963 		tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
2964 	}
2965 }
2966 
2967 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
2968 					u32 offset, u32 *val)
2969 {
2970 	u32 tmp;
2971 	int i;
2972 
2973 	if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
2974 		return -EINVAL;
2975 
2976 	tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
2977 					EEPROM_ADDR_DEVID_MASK |
2978 					EEPROM_ADDR_READ);
2979 	tw32(GRC_EEPROM_ADDR,
2980 	     tmp |
2981 	     (0 << EEPROM_ADDR_DEVID_SHIFT) |
2982 	     ((offset << EEPROM_ADDR_ADDR_SHIFT) &
2983 	      EEPROM_ADDR_ADDR_MASK) |
2984 	     EEPROM_ADDR_READ | EEPROM_ADDR_START);
2985 
2986 	for (i = 0; i < 1000; i++) {
2987 		tmp = tr32(GRC_EEPROM_ADDR);
2988 
2989 		if (tmp & EEPROM_ADDR_COMPLETE)
2990 			break;
2991 		msleep(1);
2992 	}
2993 	if (!(tmp & EEPROM_ADDR_COMPLETE))
2994 		return -EBUSY;
2995 
2996 	tmp = tr32(GRC_EEPROM_DATA);
2997 
2998 	/*
2999 	 * The data will always be opposite the native endian
3000 	 * format.  Perform a blind byteswap to compensate.
3001 	 */
3002 	*val = swab32(tmp);
3003 
3004 	return 0;
3005 }
3006 
3007 #define NVRAM_CMD_TIMEOUT 10000
3008 
3009 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3010 {
3011 	int i;
3012 
3013 	tw32(NVRAM_CMD, nvram_cmd);
3014 	for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3015 		udelay(10);
3016 		if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3017 			udelay(10);
3018 			break;
3019 		}
3020 	}
3021 
3022 	if (i == NVRAM_CMD_TIMEOUT)
3023 		return -EBUSY;
3024 
3025 	return 0;
3026 }
3027 
3028 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3029 {
3030 	if (tg3_flag(tp, NVRAM) &&
3031 	    tg3_flag(tp, NVRAM_BUFFERED) &&
3032 	    tg3_flag(tp, FLASH) &&
3033 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3034 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3035 
3036 		addr = ((addr / tp->nvram_pagesize) <<
3037 			ATMEL_AT45DB0X1B_PAGE_POS) +
3038 		       (addr % tp->nvram_pagesize);
3039 
3040 	return addr;
3041 }
3042 
3043 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3044 {
3045 	if (tg3_flag(tp, NVRAM) &&
3046 	    tg3_flag(tp, NVRAM_BUFFERED) &&
3047 	    tg3_flag(tp, FLASH) &&
3048 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3049 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3050 
3051 		addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3052 			tp->nvram_pagesize) +
3053 		       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3054 
3055 	return addr;
3056 }
3057 
3058 /* NOTE: Data read in from NVRAM is byteswapped according to
3059  * the byteswapping settings for all other register accesses.
3060  * tg3 devices are BE devices, so on a BE machine, the data
3061  * returned will be exactly as it is seen in NVRAM.  On a LE
3062  * machine, the 32-bit value will be byteswapped.
3063  */
3064 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3065 {
3066 	int ret;
3067 
3068 	if (!tg3_flag(tp, NVRAM))
3069 		return tg3_nvram_read_using_eeprom(tp, offset, val);
3070 
3071 	offset = tg3_nvram_phys_addr(tp, offset);
3072 
3073 	if (offset > NVRAM_ADDR_MSK)
3074 		return -EINVAL;
3075 
3076 	ret = tg3_nvram_lock(tp);
3077 	if (ret)
3078 		return ret;
3079 
3080 	tg3_enable_nvram_access(tp);
3081 
3082 	tw32(NVRAM_ADDR, offset);
3083 	ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3084 		NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3085 
3086 	if (ret == 0)
3087 		*val = tr32(NVRAM_RDDATA);
3088 
3089 	tg3_disable_nvram_access(tp);
3090 
3091 	tg3_nvram_unlock(tp);
3092 
3093 	return ret;
3094 }
3095 
3096 /* Ensures NVRAM data is in bytestream format. */
3097 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3098 {
3099 	u32 v;
3100 	int res = tg3_nvram_read(tp, offset, &v);
3101 	if (!res)
3102 		*val = cpu_to_be32(v);
3103 	return res;
3104 }
3105 
3106 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3107 				    u32 offset, u32 len, u8 *buf)
3108 {
3109 	int i, j, rc = 0;
3110 	u32 val;
3111 
3112 	for (i = 0; i < len; i += 4) {
3113 		u32 addr;
3114 		__be32 data;
3115 
3116 		addr = offset + i;
3117 
3118 		memcpy(&data, buf + i, 4);
3119 
3120 		/*
3121 		 * The SEEPROM interface expects the data to always be opposite
3122 		 * the native endian format.  We accomplish this by reversing
3123 		 * all the operations that would have been performed on the
3124 		 * data from a call to tg3_nvram_read_be32().
3125 		 */
3126 		tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3127 
3128 		val = tr32(GRC_EEPROM_ADDR);
3129 		tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3130 
3131 		val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3132 			EEPROM_ADDR_READ);
3133 		tw32(GRC_EEPROM_ADDR, val |
3134 			(0 << EEPROM_ADDR_DEVID_SHIFT) |
3135 			(addr & EEPROM_ADDR_ADDR_MASK) |
3136 			EEPROM_ADDR_START |
3137 			EEPROM_ADDR_WRITE);
3138 
3139 		for (j = 0; j < 1000; j++) {
3140 			val = tr32(GRC_EEPROM_ADDR);
3141 
3142 			if (val & EEPROM_ADDR_COMPLETE)
3143 				break;
3144 			msleep(1);
3145 		}
3146 		if (!(val & EEPROM_ADDR_COMPLETE)) {
3147 			rc = -EBUSY;
3148 			break;
3149 		}
3150 	}
3151 
3152 	return rc;
3153 }
3154 
3155 /* offset and length are dword aligned */
3156 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3157 		u8 *buf)
3158 {
3159 	int ret = 0;
3160 	u32 pagesize = tp->nvram_pagesize;
3161 	u32 pagemask = pagesize - 1;
3162 	u32 nvram_cmd;
3163 	u8 *tmp;
3164 
3165 	tmp = kmalloc(pagesize, GFP_KERNEL);
3166 	if (tmp == NULL)
3167 		return -ENOMEM;
3168 
3169 	while (len) {
3170 		int j;
3171 		u32 phy_addr, page_off, size;
3172 
3173 		phy_addr = offset & ~pagemask;
3174 
3175 		for (j = 0; j < pagesize; j += 4) {
3176 			ret = tg3_nvram_read_be32(tp, phy_addr + j,
3177 						  (__be32 *) (tmp + j));
3178 			if (ret)
3179 				break;
3180 		}
3181 		if (ret)
3182 			break;
3183 
3184 		page_off = offset & pagemask;
3185 		size = pagesize;
3186 		if (len < size)
3187 			size = len;
3188 
3189 		len -= size;
3190 
3191 		memcpy(tmp + page_off, buf, size);
3192 
3193 		offset = offset + (pagesize - page_off);
3194 
3195 		tg3_enable_nvram_access(tp);
3196 
3197 		/*
3198 		 * Before we can erase the flash page, we need
3199 		 * to issue a special "write enable" command.
3200 		 */
3201 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3202 
3203 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3204 			break;
3205 
3206 		/* Erase the target page */
3207 		tw32(NVRAM_ADDR, phy_addr);
3208 
3209 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3210 			NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3211 
3212 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3213 			break;
3214 
3215 		/* Issue another write enable to start the write. */
3216 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3217 
3218 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3219 			break;
3220 
3221 		for (j = 0; j < pagesize; j += 4) {
3222 			__be32 data;
3223 
3224 			data = *((__be32 *) (tmp + j));
3225 
3226 			tw32(NVRAM_WRDATA, be32_to_cpu(data));
3227 
3228 			tw32(NVRAM_ADDR, phy_addr + j);
3229 
3230 			nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3231 				NVRAM_CMD_WR;
3232 
3233 			if (j == 0)
3234 				nvram_cmd |= NVRAM_CMD_FIRST;
3235 			else if (j == (pagesize - 4))
3236 				nvram_cmd |= NVRAM_CMD_LAST;
3237 
3238 			ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3239 			if (ret)
3240 				break;
3241 		}
3242 		if (ret)
3243 			break;
3244 	}
3245 
3246 	nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3247 	tg3_nvram_exec_cmd(tp, nvram_cmd);
3248 
3249 	kfree(tmp);
3250 
3251 	return ret;
3252 }
3253 
3254 /* offset and length are dword aligned */
3255 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3256 		u8 *buf)
3257 {
3258 	int i, ret = 0;
3259 
3260 	for (i = 0; i < len; i += 4, offset += 4) {
3261 		u32 page_off, phy_addr, nvram_cmd;
3262 		__be32 data;
3263 
3264 		memcpy(&data, buf + i, 4);
3265 		tw32(NVRAM_WRDATA, be32_to_cpu(data));
3266 
3267 		page_off = offset % tp->nvram_pagesize;
3268 
3269 		phy_addr = tg3_nvram_phys_addr(tp, offset);
3270 
3271 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3272 
3273 		if (page_off == 0 || i == 0)
3274 			nvram_cmd |= NVRAM_CMD_FIRST;
3275 		if (page_off == (tp->nvram_pagesize - 4))
3276 			nvram_cmd |= NVRAM_CMD_LAST;
3277 
3278 		if (i == (len - 4))
3279 			nvram_cmd |= NVRAM_CMD_LAST;
3280 
3281 		if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3282 		    !tg3_flag(tp, FLASH) ||
3283 		    !tg3_flag(tp, 57765_PLUS))
3284 			tw32(NVRAM_ADDR, phy_addr);
3285 
3286 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
3287 		    !tg3_flag(tp, 5755_PLUS) &&
3288 		    (tp->nvram_jedecnum == JEDEC_ST) &&
3289 		    (nvram_cmd & NVRAM_CMD_FIRST)) {
3290 			u32 cmd;
3291 
3292 			cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3293 			ret = tg3_nvram_exec_cmd(tp, cmd);
3294 			if (ret)
3295 				break;
3296 		}
3297 		if (!tg3_flag(tp, FLASH)) {
3298 			/* We always do complete word writes to eeprom. */
3299 			nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3300 		}
3301 
3302 		ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3303 		if (ret)
3304 			break;
3305 	}
3306 	return ret;
3307 }
3308 
3309 /* offset and length are dword aligned */
3310 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3311 {
3312 	int ret;
3313 
3314 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3315 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3316 		       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3317 		udelay(40);
3318 	}
3319 
3320 	if (!tg3_flag(tp, NVRAM)) {
3321 		ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3322 	} else {
3323 		u32 grc_mode;
3324 
3325 		ret = tg3_nvram_lock(tp);
3326 		if (ret)
3327 			return ret;
3328 
3329 		tg3_enable_nvram_access(tp);
3330 		if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3331 			tw32(NVRAM_WRITE1, 0x406);
3332 
3333 		grc_mode = tr32(GRC_MODE);
3334 		tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3335 
3336 		if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3337 			ret = tg3_nvram_write_block_buffered(tp, offset, len,
3338 				buf);
3339 		} else {
3340 			ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3341 				buf);
3342 		}
3343 
3344 		grc_mode = tr32(GRC_MODE);
3345 		tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3346 
3347 		tg3_disable_nvram_access(tp);
3348 		tg3_nvram_unlock(tp);
3349 	}
3350 
3351 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3352 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3353 		udelay(40);
3354 	}
3355 
3356 	return ret;
3357 }
3358 
3359 #define RX_CPU_SCRATCH_BASE	0x30000
3360 #define RX_CPU_SCRATCH_SIZE	0x04000
3361 #define TX_CPU_SCRATCH_BASE	0x34000
3362 #define TX_CPU_SCRATCH_SIZE	0x04000
3363 
3364 /* tp->lock is held. */
3365 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
3366 {
3367 	int i;
3368 
3369 	BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3370 
3371 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3372 		u32 val = tr32(GRC_VCPU_EXT_CTRL);
3373 
3374 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3375 		return 0;
3376 	}
3377 	if (offset == RX_CPU_BASE) {
3378 		for (i = 0; i < 10000; i++) {
3379 			tw32(offset + CPU_STATE, 0xffffffff);
3380 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3381 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3382 				break;
3383 		}
3384 
3385 		tw32(offset + CPU_STATE, 0xffffffff);
3386 		tw32_f(offset + CPU_MODE,  CPU_MODE_HALT);
3387 		udelay(10);
3388 	} else {
3389 		for (i = 0; i < 10000; i++) {
3390 			tw32(offset + CPU_STATE, 0xffffffff);
3391 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3392 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3393 				break;
3394 		}
3395 	}
3396 
3397 	if (i >= 10000) {
3398 		netdev_err(tp->dev, "%s timed out, %s CPU\n",
3399 			   __func__, offset == RX_CPU_BASE ? "RX" : "TX");
3400 		return -ENODEV;
3401 	}
3402 
3403 	/* Clear firmware's nvram arbitration. */
3404 	if (tg3_flag(tp, NVRAM))
3405 		tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3406 	return 0;
3407 }
3408 
3409 struct fw_info {
3410 	unsigned int fw_base;
3411 	unsigned int fw_len;
3412 	const __be32 *fw_data;
3413 };
3414 
3415 /* tp->lock is held. */
3416 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3417 				 u32 cpu_scratch_base, int cpu_scratch_size,
3418 				 struct fw_info *info)
3419 {
3420 	int err, lock_err, i;
3421 	void (*write_op)(struct tg3 *, u32, u32);
3422 
3423 	if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3424 		netdev_err(tp->dev,
3425 			   "%s: Trying to load TX cpu firmware which is 5705\n",
3426 			   __func__);
3427 		return -EINVAL;
3428 	}
3429 
3430 	if (tg3_flag(tp, 5705_PLUS))
3431 		write_op = tg3_write_mem;
3432 	else
3433 		write_op = tg3_write_indirect_reg32;
3434 
3435 	/* It is possible that bootcode is still loading at this point.
3436 	 * Get the nvram lock first before halting the cpu.
3437 	 */
3438 	lock_err = tg3_nvram_lock(tp);
3439 	err = tg3_halt_cpu(tp, cpu_base);
3440 	if (!lock_err)
3441 		tg3_nvram_unlock(tp);
3442 	if (err)
3443 		goto out;
3444 
3445 	for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3446 		write_op(tp, cpu_scratch_base + i, 0);
3447 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3448 	tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
3449 	for (i = 0; i < (info->fw_len / sizeof(u32)); i++)
3450 		write_op(tp, (cpu_scratch_base +
3451 			      (info->fw_base & 0xffff) +
3452 			      (i * sizeof(u32))),
3453 			      be32_to_cpu(info->fw_data[i]));
3454 
3455 	err = 0;
3456 
3457 out:
3458 	return err;
3459 }
3460 
3461 /* tp->lock is held. */
3462 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3463 {
3464 	struct fw_info info;
3465 	const __be32 *fw_data;
3466 	int err, i;
3467 
3468 	fw_data = (void *)tp->fw->data;
3469 
3470 	/* Firmware blob starts with version numbers, followed by
3471 	   start address and length. We are setting complete length.
3472 	   length = end_address_of_bss - start_address_of_text.
3473 	   Remainder is the blob to be loaded contiguously
3474 	   from start address. */
3475 
3476 	info.fw_base = be32_to_cpu(fw_data[1]);
3477 	info.fw_len = tp->fw->size - 12;
3478 	info.fw_data = &fw_data[3];
3479 
3480 	err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3481 				    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3482 				    &info);
3483 	if (err)
3484 		return err;
3485 
3486 	err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3487 				    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3488 				    &info);
3489 	if (err)
3490 		return err;
3491 
3492 	/* Now startup only the RX cpu. */
3493 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3494 	tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3495 
3496 	for (i = 0; i < 5; i++) {
3497 		if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base)
3498 			break;
3499 		tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3500 		tw32(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3501 		tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3502 		udelay(1000);
3503 	}
3504 	if (i >= 5) {
3505 		netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3506 			   "should be %08x\n", __func__,
3507 			   tr32(RX_CPU_BASE + CPU_PC), info.fw_base);
3508 		return -ENODEV;
3509 	}
3510 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3511 	tw32_f(RX_CPU_BASE + CPU_MODE,  0x00000000);
3512 
3513 	return 0;
3514 }
3515 
3516 /* tp->lock is held. */
3517 static int tg3_load_tso_firmware(struct tg3 *tp)
3518 {
3519 	struct fw_info info;
3520 	const __be32 *fw_data;
3521 	unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3522 	int err, i;
3523 
3524 	if (tg3_flag(tp, HW_TSO_1) ||
3525 	    tg3_flag(tp, HW_TSO_2) ||
3526 	    tg3_flag(tp, HW_TSO_3))
3527 		return 0;
3528 
3529 	fw_data = (void *)tp->fw->data;
3530 
3531 	/* Firmware blob starts with version numbers, followed by
3532 	   start address and length. We are setting complete length.
3533 	   length = end_address_of_bss - start_address_of_text.
3534 	   Remainder is the blob to be loaded contiguously
3535 	   from start address. */
3536 
3537 	info.fw_base = be32_to_cpu(fw_data[1]);
3538 	cpu_scratch_size = tp->fw_len;
3539 	info.fw_len = tp->fw->size - 12;
3540 	info.fw_data = &fw_data[3];
3541 
3542 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
3543 		cpu_base = RX_CPU_BASE;
3544 		cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3545 	} else {
3546 		cpu_base = TX_CPU_BASE;
3547 		cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3548 		cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3549 	}
3550 
3551 	err = tg3_load_firmware_cpu(tp, cpu_base,
3552 				    cpu_scratch_base, cpu_scratch_size,
3553 				    &info);
3554 	if (err)
3555 		return err;
3556 
3557 	/* Now startup the cpu. */
3558 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3559 	tw32_f(cpu_base + CPU_PC, info.fw_base);
3560 
3561 	for (i = 0; i < 5; i++) {
3562 		if (tr32(cpu_base + CPU_PC) == info.fw_base)
3563 			break;
3564 		tw32(cpu_base + CPU_STATE, 0xffffffff);
3565 		tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3566 		tw32_f(cpu_base + CPU_PC, info.fw_base);
3567 		udelay(1000);
3568 	}
3569 	if (i >= 5) {
3570 		netdev_err(tp->dev,
3571 			   "%s fails to set CPU PC, is %08x should be %08x\n",
3572 			   __func__, tr32(cpu_base + CPU_PC), info.fw_base);
3573 		return -ENODEV;
3574 	}
3575 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3576 	tw32_f(cpu_base + CPU_MODE,  0x00000000);
3577 	return 0;
3578 }
3579 
3580 
3581 /* tp->lock is held. */
3582 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
3583 {
3584 	u32 addr_high, addr_low;
3585 	int i;
3586 
3587 	addr_high = ((tp->dev->dev_addr[0] << 8) |
3588 		     tp->dev->dev_addr[1]);
3589 	addr_low = ((tp->dev->dev_addr[2] << 24) |
3590 		    (tp->dev->dev_addr[3] << 16) |
3591 		    (tp->dev->dev_addr[4] <<  8) |
3592 		    (tp->dev->dev_addr[5] <<  0));
3593 	for (i = 0; i < 4; i++) {
3594 		if (i == 1 && skip_mac_1)
3595 			continue;
3596 		tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
3597 		tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
3598 	}
3599 
3600 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
3601 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
3602 		for (i = 0; i < 12; i++) {
3603 			tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
3604 			tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
3605 		}
3606 	}
3607 
3608 	addr_high = (tp->dev->dev_addr[0] +
3609 		     tp->dev->dev_addr[1] +
3610 		     tp->dev->dev_addr[2] +
3611 		     tp->dev->dev_addr[3] +
3612 		     tp->dev->dev_addr[4] +
3613 		     tp->dev->dev_addr[5]) &
3614 		TX_BACKOFF_SEED_MASK;
3615 	tw32(MAC_TX_BACKOFF_SEED, addr_high);
3616 }
3617 
3618 static void tg3_enable_register_access(struct tg3 *tp)
3619 {
3620 	/*
3621 	 * Make sure register accesses (indirect or otherwise) will function
3622 	 * correctly.
3623 	 */
3624 	pci_write_config_dword(tp->pdev,
3625 			       TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
3626 }
3627 
3628 static int tg3_power_up(struct tg3 *tp)
3629 {
3630 	int err;
3631 
3632 	tg3_enable_register_access(tp);
3633 
3634 	err = pci_set_power_state(tp->pdev, PCI_D0);
3635 	if (!err) {
3636 		/* Switch out of Vaux if it is a NIC */
3637 		tg3_pwrsrc_switch_to_vmain(tp);
3638 	} else {
3639 		netdev_err(tp->dev, "Transition to D0 failed\n");
3640 	}
3641 
3642 	return err;
3643 }
3644 
3645 static int tg3_setup_phy(struct tg3 *, int);
3646 
3647 static int tg3_power_down_prepare(struct tg3 *tp)
3648 {
3649 	u32 misc_host_ctrl;
3650 	bool device_should_wake, do_low_power;
3651 
3652 	tg3_enable_register_access(tp);
3653 
3654 	/* Restore the CLKREQ setting. */
3655 	if (tg3_flag(tp, CLKREQ_BUG))
3656 		pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
3657 					 PCI_EXP_LNKCTL_CLKREQ_EN);
3658 
3659 	misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
3660 	tw32(TG3PCI_MISC_HOST_CTRL,
3661 	     misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
3662 
3663 	device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
3664 			     tg3_flag(tp, WOL_ENABLE);
3665 
3666 	if (tg3_flag(tp, USE_PHYLIB)) {
3667 		do_low_power = false;
3668 		if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
3669 		    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
3670 			struct phy_device *phydev;
3671 			u32 phyid, advertising;
3672 
3673 			phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
3674 
3675 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3676 
3677 			tp->link_config.speed = phydev->speed;
3678 			tp->link_config.duplex = phydev->duplex;
3679 			tp->link_config.autoneg = phydev->autoneg;
3680 			tp->link_config.advertising = phydev->advertising;
3681 
3682 			advertising = ADVERTISED_TP |
3683 				      ADVERTISED_Pause |
3684 				      ADVERTISED_Autoneg |
3685 				      ADVERTISED_10baseT_Half;
3686 
3687 			if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
3688 				if (tg3_flag(tp, WOL_SPEED_100MB))
3689 					advertising |=
3690 						ADVERTISED_100baseT_Half |
3691 						ADVERTISED_100baseT_Full |
3692 						ADVERTISED_10baseT_Full;
3693 				else
3694 					advertising |= ADVERTISED_10baseT_Full;
3695 			}
3696 
3697 			phydev->advertising = advertising;
3698 
3699 			phy_start_aneg(phydev);
3700 
3701 			phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
3702 			if (phyid != PHY_ID_BCMAC131) {
3703 				phyid &= PHY_BCM_OUI_MASK;
3704 				if (phyid == PHY_BCM_OUI_1 ||
3705 				    phyid == PHY_BCM_OUI_2 ||
3706 				    phyid == PHY_BCM_OUI_3)
3707 					do_low_power = true;
3708 			}
3709 		}
3710 	} else {
3711 		do_low_power = true;
3712 
3713 		if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
3714 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3715 
3716 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
3717 			tg3_setup_phy(tp, 0);
3718 	}
3719 
3720 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3721 		u32 val;
3722 
3723 		val = tr32(GRC_VCPU_EXT_CTRL);
3724 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
3725 	} else if (!tg3_flag(tp, ENABLE_ASF)) {
3726 		int i;
3727 		u32 val;
3728 
3729 		for (i = 0; i < 200; i++) {
3730 			tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
3731 			if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
3732 				break;
3733 			msleep(1);
3734 		}
3735 	}
3736 	if (tg3_flag(tp, WOL_CAP))
3737 		tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
3738 						     WOL_DRV_STATE_SHUTDOWN |
3739 						     WOL_DRV_WOL |
3740 						     WOL_SET_MAGIC_PKT);
3741 
3742 	if (device_should_wake) {
3743 		u32 mac_mode;
3744 
3745 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
3746 			if (do_low_power &&
3747 			    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
3748 				tg3_phy_auxctl_write(tp,
3749 					       MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
3750 					       MII_TG3_AUXCTL_PCTL_WOL_EN |
3751 					       MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3752 					       MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
3753 				udelay(40);
3754 			}
3755 
3756 			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3757 				mac_mode = MAC_MODE_PORT_MODE_GMII;
3758 			else
3759 				mac_mode = MAC_MODE_PORT_MODE_MII;
3760 
3761 			mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
3762 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3763 			    ASIC_REV_5700) {
3764 				u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
3765 					     SPEED_100 : SPEED_10;
3766 				if (tg3_5700_link_polarity(tp, speed))
3767 					mac_mode |= MAC_MODE_LINK_POLARITY;
3768 				else
3769 					mac_mode &= ~MAC_MODE_LINK_POLARITY;
3770 			}
3771 		} else {
3772 			mac_mode = MAC_MODE_PORT_MODE_TBI;
3773 		}
3774 
3775 		if (!tg3_flag(tp, 5750_PLUS))
3776 			tw32(MAC_LED_CTRL, tp->led_ctrl);
3777 
3778 		mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
3779 		if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
3780 		    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
3781 			mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
3782 
3783 		if (tg3_flag(tp, ENABLE_APE))
3784 			mac_mode |= MAC_MODE_APE_TX_EN |
3785 				    MAC_MODE_APE_RX_EN |
3786 				    MAC_MODE_TDE_ENABLE;
3787 
3788 		tw32_f(MAC_MODE, mac_mode);
3789 		udelay(100);
3790 
3791 		tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
3792 		udelay(10);
3793 	}
3794 
3795 	if (!tg3_flag(tp, WOL_SPEED_100MB) &&
3796 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3797 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
3798 		u32 base_val;
3799 
3800 		base_val = tp->pci_clock_ctrl;
3801 		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
3802 			     CLOCK_CTRL_TXCLK_DISABLE);
3803 
3804 		tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
3805 			    CLOCK_CTRL_PWRDOWN_PLL133, 40);
3806 	} else if (tg3_flag(tp, 5780_CLASS) ||
3807 		   tg3_flag(tp, CPMU_PRESENT) ||
3808 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3809 		/* do nothing */
3810 	} else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
3811 		u32 newbits1, newbits2;
3812 
3813 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3814 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3815 			newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
3816 				    CLOCK_CTRL_TXCLK_DISABLE |
3817 				    CLOCK_CTRL_ALTCLK);
3818 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3819 		} else if (tg3_flag(tp, 5705_PLUS)) {
3820 			newbits1 = CLOCK_CTRL_625_CORE;
3821 			newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
3822 		} else {
3823 			newbits1 = CLOCK_CTRL_ALTCLK;
3824 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3825 		}
3826 
3827 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
3828 			    40);
3829 
3830 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
3831 			    40);
3832 
3833 		if (!tg3_flag(tp, 5705_PLUS)) {
3834 			u32 newbits3;
3835 
3836 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3837 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3838 				newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
3839 					    CLOCK_CTRL_TXCLK_DISABLE |
3840 					    CLOCK_CTRL_44MHZ_CORE);
3841 			} else {
3842 				newbits3 = CLOCK_CTRL_44MHZ_CORE;
3843 			}
3844 
3845 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
3846 				    tp->pci_clock_ctrl | newbits3, 40);
3847 		}
3848 	}
3849 
3850 	if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
3851 		tg3_power_down_phy(tp, do_low_power);
3852 
3853 	tg3_frob_aux_power(tp, true);
3854 
3855 	/* Workaround for unstable PLL clock */
3856 	if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
3857 	    (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
3858 		u32 val = tr32(0x7d00);
3859 
3860 		val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
3861 		tw32(0x7d00, val);
3862 		if (!tg3_flag(tp, ENABLE_ASF)) {
3863 			int err;
3864 
3865 			err = tg3_nvram_lock(tp);
3866 			tg3_halt_cpu(tp, RX_CPU_BASE);
3867 			if (!err)
3868 				tg3_nvram_unlock(tp);
3869 		}
3870 	}
3871 
3872 	tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
3873 
3874 	return 0;
3875 }
3876 
3877 static void tg3_power_down(struct tg3 *tp)
3878 {
3879 	tg3_power_down_prepare(tp);
3880 
3881 	pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
3882 	pci_set_power_state(tp->pdev, PCI_D3hot);
3883 }
3884 
3885 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
3886 {
3887 	switch (val & MII_TG3_AUX_STAT_SPDMASK) {
3888 	case MII_TG3_AUX_STAT_10HALF:
3889 		*speed = SPEED_10;
3890 		*duplex = DUPLEX_HALF;
3891 		break;
3892 
3893 	case MII_TG3_AUX_STAT_10FULL:
3894 		*speed = SPEED_10;
3895 		*duplex = DUPLEX_FULL;
3896 		break;
3897 
3898 	case MII_TG3_AUX_STAT_100HALF:
3899 		*speed = SPEED_100;
3900 		*duplex = DUPLEX_HALF;
3901 		break;
3902 
3903 	case MII_TG3_AUX_STAT_100FULL:
3904 		*speed = SPEED_100;
3905 		*duplex = DUPLEX_FULL;
3906 		break;
3907 
3908 	case MII_TG3_AUX_STAT_1000HALF:
3909 		*speed = SPEED_1000;
3910 		*duplex = DUPLEX_HALF;
3911 		break;
3912 
3913 	case MII_TG3_AUX_STAT_1000FULL:
3914 		*speed = SPEED_1000;
3915 		*duplex = DUPLEX_FULL;
3916 		break;
3917 
3918 	default:
3919 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3920 			*speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
3921 				 SPEED_10;
3922 			*duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
3923 				  DUPLEX_HALF;
3924 			break;
3925 		}
3926 		*speed = SPEED_UNKNOWN;
3927 		*duplex = DUPLEX_UNKNOWN;
3928 		break;
3929 	}
3930 }
3931 
3932 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
3933 {
3934 	int err = 0;
3935 	u32 val, new_adv;
3936 
3937 	new_adv = ADVERTISE_CSMA;
3938 	new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
3939 	new_adv |= mii_advertise_flowctrl(flowctrl);
3940 
3941 	err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
3942 	if (err)
3943 		goto done;
3944 
3945 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
3946 		new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
3947 
3948 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
3949 		    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
3950 			new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
3951 
3952 		err = tg3_writephy(tp, MII_CTRL1000, new_adv);
3953 		if (err)
3954 			goto done;
3955 	}
3956 
3957 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
3958 		goto done;
3959 
3960 	tw32(TG3_CPMU_EEE_MODE,
3961 	     tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
3962 
3963 	err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
3964 	if (!err) {
3965 		u32 err2;
3966 
3967 		val = 0;
3968 		/* Advertise 100-BaseTX EEE ability */
3969 		if (advertise & ADVERTISED_100baseT_Full)
3970 			val |= MDIO_AN_EEE_ADV_100TX;
3971 		/* Advertise 1000-BaseT EEE ability */
3972 		if (advertise & ADVERTISED_1000baseT_Full)
3973 			val |= MDIO_AN_EEE_ADV_1000T;
3974 		err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
3975 		if (err)
3976 			val = 0;
3977 
3978 		switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
3979 		case ASIC_REV_5717:
3980 		case ASIC_REV_57765:
3981 		case ASIC_REV_57766:
3982 		case ASIC_REV_5719:
3983 			/* If we advertised any eee advertisements above... */
3984 			if (val)
3985 				val = MII_TG3_DSP_TAP26_ALNOKO |
3986 				      MII_TG3_DSP_TAP26_RMRXSTO |
3987 				      MII_TG3_DSP_TAP26_OPCSINPT;
3988 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
3989 			/* Fall through */
3990 		case ASIC_REV_5720:
3991 			if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
3992 				tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
3993 						 MII_TG3_DSP_CH34TP2_HIBW01);
3994 		}
3995 
3996 		err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
3997 		if (!err)
3998 			err = err2;
3999 	}
4000 
4001 done:
4002 	return err;
4003 }
4004 
4005 static void tg3_phy_copper_begin(struct tg3 *tp)
4006 {
4007 	if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4008 	    (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4009 		u32 adv, fc;
4010 
4011 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
4012 			adv = ADVERTISED_10baseT_Half |
4013 			      ADVERTISED_10baseT_Full;
4014 			if (tg3_flag(tp, WOL_SPEED_100MB))
4015 				adv |= ADVERTISED_100baseT_Half |
4016 				       ADVERTISED_100baseT_Full;
4017 
4018 			fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4019 		} else {
4020 			adv = tp->link_config.advertising;
4021 			if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4022 				adv &= ~(ADVERTISED_1000baseT_Half |
4023 					 ADVERTISED_1000baseT_Full);
4024 
4025 			fc = tp->link_config.flowctrl;
4026 		}
4027 
4028 		tg3_phy_autoneg_cfg(tp, adv, fc);
4029 
4030 		tg3_writephy(tp, MII_BMCR,
4031 			     BMCR_ANENABLE | BMCR_ANRESTART);
4032 	} else {
4033 		int i;
4034 		u32 bmcr, orig_bmcr;
4035 
4036 		tp->link_config.active_speed = tp->link_config.speed;
4037 		tp->link_config.active_duplex = tp->link_config.duplex;
4038 
4039 		bmcr = 0;
4040 		switch (tp->link_config.speed) {
4041 		default:
4042 		case SPEED_10:
4043 			break;
4044 
4045 		case SPEED_100:
4046 			bmcr |= BMCR_SPEED100;
4047 			break;
4048 
4049 		case SPEED_1000:
4050 			bmcr |= BMCR_SPEED1000;
4051 			break;
4052 		}
4053 
4054 		if (tp->link_config.duplex == DUPLEX_FULL)
4055 			bmcr |= BMCR_FULLDPLX;
4056 
4057 		if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4058 		    (bmcr != orig_bmcr)) {
4059 			tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4060 			for (i = 0; i < 1500; i++) {
4061 				u32 tmp;
4062 
4063 				udelay(10);
4064 				if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4065 				    tg3_readphy(tp, MII_BMSR, &tmp))
4066 					continue;
4067 				if (!(tmp & BMSR_LSTATUS)) {
4068 					udelay(40);
4069 					break;
4070 				}
4071 			}
4072 			tg3_writephy(tp, MII_BMCR, bmcr);
4073 			udelay(40);
4074 		}
4075 	}
4076 }
4077 
4078 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4079 {
4080 	int err;
4081 
4082 	/* Turn off tap power management. */
4083 	/* Set Extended packet length bit */
4084 	err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4085 
4086 	err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4087 	err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4088 	err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4089 	err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4090 	err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4091 
4092 	udelay(40);
4093 
4094 	return err;
4095 }
4096 
4097 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4098 {
4099 	u32 advmsk, tgtadv, advertising;
4100 
4101 	advertising = tp->link_config.advertising;
4102 	tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4103 
4104 	advmsk = ADVERTISE_ALL;
4105 	if (tp->link_config.active_duplex == DUPLEX_FULL) {
4106 		tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4107 		advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4108 	}
4109 
4110 	if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4111 		return false;
4112 
4113 	if ((*lcladv & advmsk) != tgtadv)
4114 		return false;
4115 
4116 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4117 		u32 tg3_ctrl;
4118 
4119 		tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4120 
4121 		if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4122 			return false;
4123 
4124 		if (tgtadv &&
4125 		    (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4126 		     tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) {
4127 			tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4128 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4129 				     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4130 		} else {
4131 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4132 		}
4133 
4134 		if (tg3_ctrl != tgtadv)
4135 			return false;
4136 	}
4137 
4138 	return true;
4139 }
4140 
4141 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4142 {
4143 	u32 lpeth = 0;
4144 
4145 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4146 		u32 val;
4147 
4148 		if (tg3_readphy(tp, MII_STAT1000, &val))
4149 			return false;
4150 
4151 		lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4152 	}
4153 
4154 	if (tg3_readphy(tp, MII_LPA, rmtadv))
4155 		return false;
4156 
4157 	lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4158 	tp->link_config.rmt_adv = lpeth;
4159 
4160 	return true;
4161 }
4162 
4163 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
4164 {
4165 	int current_link_up;
4166 	u32 bmsr, val;
4167 	u32 lcl_adv, rmt_adv;
4168 	u16 current_speed;
4169 	u8 current_duplex;
4170 	int i, err;
4171 
4172 	tw32(MAC_EVENT, 0);
4173 
4174 	tw32_f(MAC_STATUS,
4175 	     (MAC_STATUS_SYNC_CHANGED |
4176 	      MAC_STATUS_CFG_CHANGED |
4177 	      MAC_STATUS_MI_COMPLETION |
4178 	      MAC_STATUS_LNKSTATE_CHANGED));
4179 	udelay(40);
4180 
4181 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4182 		tw32_f(MAC_MI_MODE,
4183 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4184 		udelay(80);
4185 	}
4186 
4187 	tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4188 
4189 	/* Some third-party PHYs need to be reset on link going
4190 	 * down.
4191 	 */
4192 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
4193 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
4194 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
4195 	    netif_carrier_ok(tp->dev)) {
4196 		tg3_readphy(tp, MII_BMSR, &bmsr);
4197 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4198 		    !(bmsr & BMSR_LSTATUS))
4199 			force_reset = 1;
4200 	}
4201 	if (force_reset)
4202 		tg3_phy_reset(tp);
4203 
4204 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4205 		tg3_readphy(tp, MII_BMSR, &bmsr);
4206 		if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4207 		    !tg3_flag(tp, INIT_COMPLETE))
4208 			bmsr = 0;
4209 
4210 		if (!(bmsr & BMSR_LSTATUS)) {
4211 			err = tg3_init_5401phy_dsp(tp);
4212 			if (err)
4213 				return err;
4214 
4215 			tg3_readphy(tp, MII_BMSR, &bmsr);
4216 			for (i = 0; i < 1000; i++) {
4217 				udelay(10);
4218 				if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4219 				    (bmsr & BMSR_LSTATUS)) {
4220 					udelay(40);
4221 					break;
4222 				}
4223 			}
4224 
4225 			if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4226 			    TG3_PHY_REV_BCM5401_B0 &&
4227 			    !(bmsr & BMSR_LSTATUS) &&
4228 			    tp->link_config.active_speed == SPEED_1000) {
4229 				err = tg3_phy_reset(tp);
4230 				if (!err)
4231 					err = tg3_init_5401phy_dsp(tp);
4232 				if (err)
4233 					return err;
4234 			}
4235 		}
4236 	} else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4237 		   tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
4238 		/* 5701 {A0,B0} CRC bug workaround */
4239 		tg3_writephy(tp, 0x15, 0x0a75);
4240 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4241 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4242 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4243 	}
4244 
4245 	/* Clear pending interrupts... */
4246 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4247 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4248 
4249 	if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4250 		tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4251 	else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4252 		tg3_writephy(tp, MII_TG3_IMASK, ~0);
4253 
4254 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
4255 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
4256 		if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4257 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
4258 				     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4259 		else
4260 			tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4261 	}
4262 
4263 	current_link_up = 0;
4264 	current_speed = SPEED_UNKNOWN;
4265 	current_duplex = DUPLEX_UNKNOWN;
4266 	tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4267 	tp->link_config.rmt_adv = 0;
4268 
4269 	if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4270 		err = tg3_phy_auxctl_read(tp,
4271 					  MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4272 					  &val);
4273 		if (!err && !(val & (1 << 10))) {
4274 			tg3_phy_auxctl_write(tp,
4275 					     MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4276 					     val | (1 << 10));
4277 			goto relink;
4278 		}
4279 	}
4280 
4281 	bmsr = 0;
4282 	for (i = 0; i < 100; i++) {
4283 		tg3_readphy(tp, MII_BMSR, &bmsr);
4284 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4285 		    (bmsr & BMSR_LSTATUS))
4286 			break;
4287 		udelay(40);
4288 	}
4289 
4290 	if (bmsr & BMSR_LSTATUS) {
4291 		u32 aux_stat, bmcr;
4292 
4293 		tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4294 		for (i = 0; i < 2000; i++) {
4295 			udelay(10);
4296 			if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4297 			    aux_stat)
4298 				break;
4299 		}
4300 
4301 		tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4302 					     &current_speed,
4303 					     &current_duplex);
4304 
4305 		bmcr = 0;
4306 		for (i = 0; i < 200; i++) {
4307 			tg3_readphy(tp, MII_BMCR, &bmcr);
4308 			if (tg3_readphy(tp, MII_BMCR, &bmcr))
4309 				continue;
4310 			if (bmcr && bmcr != 0x7fff)
4311 				break;
4312 			udelay(10);
4313 		}
4314 
4315 		lcl_adv = 0;
4316 		rmt_adv = 0;
4317 
4318 		tp->link_config.active_speed = current_speed;
4319 		tp->link_config.active_duplex = current_duplex;
4320 
4321 		if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4322 			if ((bmcr & BMCR_ANENABLE) &&
4323 			    tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4324 			    tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4325 				current_link_up = 1;
4326 		} else {
4327 			if (!(bmcr & BMCR_ANENABLE) &&
4328 			    tp->link_config.speed == current_speed &&
4329 			    tp->link_config.duplex == current_duplex &&
4330 			    tp->link_config.flowctrl ==
4331 			    tp->link_config.active_flowctrl) {
4332 				current_link_up = 1;
4333 			}
4334 		}
4335 
4336 		if (current_link_up == 1 &&
4337 		    tp->link_config.active_duplex == DUPLEX_FULL) {
4338 			u32 reg, bit;
4339 
4340 			if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4341 				reg = MII_TG3_FET_GEN_STAT;
4342 				bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4343 			} else {
4344 				reg = MII_TG3_EXT_STAT;
4345 				bit = MII_TG3_EXT_STAT_MDIX;
4346 			}
4347 
4348 			if (!tg3_readphy(tp, reg, &val) && (val & bit))
4349 				tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4350 
4351 			tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4352 		}
4353 	}
4354 
4355 relink:
4356 	if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4357 		tg3_phy_copper_begin(tp);
4358 
4359 		tg3_readphy(tp, MII_BMSR, &bmsr);
4360 		if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4361 		    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4362 			current_link_up = 1;
4363 	}
4364 
4365 	tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4366 	if (current_link_up == 1) {
4367 		if (tp->link_config.active_speed == SPEED_100 ||
4368 		    tp->link_config.active_speed == SPEED_10)
4369 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4370 		else
4371 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4372 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4373 		tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4374 	else
4375 		tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4376 
4377 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
4378 	if (tp->link_config.active_duplex == DUPLEX_HALF)
4379 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
4380 
4381 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
4382 		if (current_link_up == 1 &&
4383 		    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
4384 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
4385 		else
4386 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
4387 	}
4388 
4389 	/* ??? Without this setting Netgear GA302T PHY does not
4390 	 * ??? send/receive packets...
4391 	 */
4392 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
4393 	    tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
4394 		tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
4395 		tw32_f(MAC_MI_MODE, tp->mi_mode);
4396 		udelay(80);
4397 	}
4398 
4399 	tw32_f(MAC_MODE, tp->mac_mode);
4400 	udelay(40);
4401 
4402 	tg3_phy_eee_adjust(tp, current_link_up);
4403 
4404 	if (tg3_flag(tp, USE_LINKCHG_REG)) {
4405 		/* Polled via timer. */
4406 		tw32_f(MAC_EVENT, 0);
4407 	} else {
4408 		tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
4409 	}
4410 	udelay(40);
4411 
4412 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
4413 	    current_link_up == 1 &&
4414 	    tp->link_config.active_speed == SPEED_1000 &&
4415 	    (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
4416 		udelay(120);
4417 		tw32_f(MAC_STATUS,
4418 		     (MAC_STATUS_SYNC_CHANGED |
4419 		      MAC_STATUS_CFG_CHANGED));
4420 		udelay(40);
4421 		tg3_write_mem(tp,
4422 			      NIC_SRAM_FIRMWARE_MBOX,
4423 			      NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
4424 	}
4425 
4426 	/* Prevent send BD corruption. */
4427 	if (tg3_flag(tp, CLKREQ_BUG)) {
4428 		if (tp->link_config.active_speed == SPEED_100 ||
4429 		    tp->link_config.active_speed == SPEED_10)
4430 			pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
4431 						   PCI_EXP_LNKCTL_CLKREQ_EN);
4432 		else
4433 			pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4434 						 PCI_EXP_LNKCTL_CLKREQ_EN);
4435 	}
4436 
4437 	if (current_link_up != netif_carrier_ok(tp->dev)) {
4438 		if (current_link_up)
4439 			netif_carrier_on(tp->dev);
4440 		else
4441 			netif_carrier_off(tp->dev);
4442 		tg3_link_report(tp);
4443 	}
4444 
4445 	return 0;
4446 }
4447 
4448 struct tg3_fiber_aneginfo {
4449 	int state;
4450 #define ANEG_STATE_UNKNOWN		0
4451 #define ANEG_STATE_AN_ENABLE		1
4452 #define ANEG_STATE_RESTART_INIT		2
4453 #define ANEG_STATE_RESTART		3
4454 #define ANEG_STATE_DISABLE_LINK_OK	4
4455 #define ANEG_STATE_ABILITY_DETECT_INIT	5
4456 #define ANEG_STATE_ABILITY_DETECT	6
4457 #define ANEG_STATE_ACK_DETECT_INIT	7
4458 #define ANEG_STATE_ACK_DETECT		8
4459 #define ANEG_STATE_COMPLETE_ACK_INIT	9
4460 #define ANEG_STATE_COMPLETE_ACK		10
4461 #define ANEG_STATE_IDLE_DETECT_INIT	11
4462 #define ANEG_STATE_IDLE_DETECT		12
4463 #define ANEG_STATE_LINK_OK		13
4464 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT	14
4465 #define ANEG_STATE_NEXT_PAGE_WAIT	15
4466 
4467 	u32 flags;
4468 #define MR_AN_ENABLE		0x00000001
4469 #define MR_RESTART_AN		0x00000002
4470 #define MR_AN_COMPLETE		0x00000004
4471 #define MR_PAGE_RX		0x00000008
4472 #define MR_NP_LOADED		0x00000010
4473 #define MR_TOGGLE_TX		0x00000020
4474 #define MR_LP_ADV_FULL_DUPLEX	0x00000040
4475 #define MR_LP_ADV_HALF_DUPLEX	0x00000080
4476 #define MR_LP_ADV_SYM_PAUSE	0x00000100
4477 #define MR_LP_ADV_ASYM_PAUSE	0x00000200
4478 #define MR_LP_ADV_REMOTE_FAULT1	0x00000400
4479 #define MR_LP_ADV_REMOTE_FAULT2	0x00000800
4480 #define MR_LP_ADV_NEXT_PAGE	0x00001000
4481 #define MR_TOGGLE_RX		0x00002000
4482 #define MR_NP_RX		0x00004000
4483 
4484 #define MR_LINK_OK		0x80000000
4485 
4486 	unsigned long link_time, cur_time;
4487 
4488 	u32 ability_match_cfg;
4489 	int ability_match_count;
4490 
4491 	char ability_match, idle_match, ack_match;
4492 
4493 	u32 txconfig, rxconfig;
4494 #define ANEG_CFG_NP		0x00000080
4495 #define ANEG_CFG_ACK		0x00000040
4496 #define ANEG_CFG_RF2		0x00000020
4497 #define ANEG_CFG_RF1		0x00000010
4498 #define ANEG_CFG_PS2		0x00000001
4499 #define ANEG_CFG_PS1		0x00008000
4500 #define ANEG_CFG_HD		0x00004000
4501 #define ANEG_CFG_FD		0x00002000
4502 #define ANEG_CFG_INVAL		0x00001f06
4503 
4504 };
4505 #define ANEG_OK		0
4506 #define ANEG_DONE	1
4507 #define ANEG_TIMER_ENAB	2
4508 #define ANEG_FAILED	-1
4509 
4510 #define ANEG_STATE_SETTLE_TIME	10000
4511 
4512 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
4513 				   struct tg3_fiber_aneginfo *ap)
4514 {
4515 	u16 flowctrl;
4516 	unsigned long delta;
4517 	u32 rx_cfg_reg;
4518 	int ret;
4519 
4520 	if (ap->state == ANEG_STATE_UNKNOWN) {
4521 		ap->rxconfig = 0;
4522 		ap->link_time = 0;
4523 		ap->cur_time = 0;
4524 		ap->ability_match_cfg = 0;
4525 		ap->ability_match_count = 0;
4526 		ap->ability_match = 0;
4527 		ap->idle_match = 0;
4528 		ap->ack_match = 0;
4529 	}
4530 	ap->cur_time++;
4531 
4532 	if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
4533 		rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
4534 
4535 		if (rx_cfg_reg != ap->ability_match_cfg) {
4536 			ap->ability_match_cfg = rx_cfg_reg;
4537 			ap->ability_match = 0;
4538 			ap->ability_match_count = 0;
4539 		} else {
4540 			if (++ap->ability_match_count > 1) {
4541 				ap->ability_match = 1;
4542 				ap->ability_match_cfg = rx_cfg_reg;
4543 			}
4544 		}
4545 		if (rx_cfg_reg & ANEG_CFG_ACK)
4546 			ap->ack_match = 1;
4547 		else
4548 			ap->ack_match = 0;
4549 
4550 		ap->idle_match = 0;
4551 	} else {
4552 		ap->idle_match = 1;
4553 		ap->ability_match_cfg = 0;
4554 		ap->ability_match_count = 0;
4555 		ap->ability_match = 0;
4556 		ap->ack_match = 0;
4557 
4558 		rx_cfg_reg = 0;
4559 	}
4560 
4561 	ap->rxconfig = rx_cfg_reg;
4562 	ret = ANEG_OK;
4563 
4564 	switch (ap->state) {
4565 	case ANEG_STATE_UNKNOWN:
4566 		if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
4567 			ap->state = ANEG_STATE_AN_ENABLE;
4568 
4569 		/* fallthru */
4570 	case ANEG_STATE_AN_ENABLE:
4571 		ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
4572 		if (ap->flags & MR_AN_ENABLE) {
4573 			ap->link_time = 0;
4574 			ap->cur_time = 0;
4575 			ap->ability_match_cfg = 0;
4576 			ap->ability_match_count = 0;
4577 			ap->ability_match = 0;
4578 			ap->idle_match = 0;
4579 			ap->ack_match = 0;
4580 
4581 			ap->state = ANEG_STATE_RESTART_INIT;
4582 		} else {
4583 			ap->state = ANEG_STATE_DISABLE_LINK_OK;
4584 		}
4585 		break;
4586 
4587 	case ANEG_STATE_RESTART_INIT:
4588 		ap->link_time = ap->cur_time;
4589 		ap->flags &= ~(MR_NP_LOADED);
4590 		ap->txconfig = 0;
4591 		tw32(MAC_TX_AUTO_NEG, 0);
4592 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4593 		tw32_f(MAC_MODE, tp->mac_mode);
4594 		udelay(40);
4595 
4596 		ret = ANEG_TIMER_ENAB;
4597 		ap->state = ANEG_STATE_RESTART;
4598 
4599 		/* fallthru */
4600 	case ANEG_STATE_RESTART:
4601 		delta = ap->cur_time - ap->link_time;
4602 		if (delta > ANEG_STATE_SETTLE_TIME)
4603 			ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
4604 		else
4605 			ret = ANEG_TIMER_ENAB;
4606 		break;
4607 
4608 	case ANEG_STATE_DISABLE_LINK_OK:
4609 		ret = ANEG_DONE;
4610 		break;
4611 
4612 	case ANEG_STATE_ABILITY_DETECT_INIT:
4613 		ap->flags &= ~(MR_TOGGLE_TX);
4614 		ap->txconfig = ANEG_CFG_FD;
4615 		flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4616 		if (flowctrl & ADVERTISE_1000XPAUSE)
4617 			ap->txconfig |= ANEG_CFG_PS1;
4618 		if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4619 			ap->txconfig |= ANEG_CFG_PS2;
4620 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4621 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4622 		tw32_f(MAC_MODE, tp->mac_mode);
4623 		udelay(40);
4624 
4625 		ap->state = ANEG_STATE_ABILITY_DETECT;
4626 		break;
4627 
4628 	case ANEG_STATE_ABILITY_DETECT:
4629 		if (ap->ability_match != 0 && ap->rxconfig != 0)
4630 			ap->state = ANEG_STATE_ACK_DETECT_INIT;
4631 		break;
4632 
4633 	case ANEG_STATE_ACK_DETECT_INIT:
4634 		ap->txconfig |= ANEG_CFG_ACK;
4635 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4636 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4637 		tw32_f(MAC_MODE, tp->mac_mode);
4638 		udelay(40);
4639 
4640 		ap->state = ANEG_STATE_ACK_DETECT;
4641 
4642 		/* fallthru */
4643 	case ANEG_STATE_ACK_DETECT:
4644 		if (ap->ack_match != 0) {
4645 			if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
4646 			    (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
4647 				ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
4648 			} else {
4649 				ap->state = ANEG_STATE_AN_ENABLE;
4650 			}
4651 		} else if (ap->ability_match != 0 &&
4652 			   ap->rxconfig == 0) {
4653 			ap->state = ANEG_STATE_AN_ENABLE;
4654 		}
4655 		break;
4656 
4657 	case ANEG_STATE_COMPLETE_ACK_INIT:
4658 		if (ap->rxconfig & ANEG_CFG_INVAL) {
4659 			ret = ANEG_FAILED;
4660 			break;
4661 		}
4662 		ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
4663 			       MR_LP_ADV_HALF_DUPLEX |
4664 			       MR_LP_ADV_SYM_PAUSE |
4665 			       MR_LP_ADV_ASYM_PAUSE |
4666 			       MR_LP_ADV_REMOTE_FAULT1 |
4667 			       MR_LP_ADV_REMOTE_FAULT2 |
4668 			       MR_LP_ADV_NEXT_PAGE |
4669 			       MR_TOGGLE_RX |
4670 			       MR_NP_RX);
4671 		if (ap->rxconfig & ANEG_CFG_FD)
4672 			ap->flags |= MR_LP_ADV_FULL_DUPLEX;
4673 		if (ap->rxconfig & ANEG_CFG_HD)
4674 			ap->flags |= MR_LP_ADV_HALF_DUPLEX;
4675 		if (ap->rxconfig & ANEG_CFG_PS1)
4676 			ap->flags |= MR_LP_ADV_SYM_PAUSE;
4677 		if (ap->rxconfig & ANEG_CFG_PS2)
4678 			ap->flags |= MR_LP_ADV_ASYM_PAUSE;
4679 		if (ap->rxconfig & ANEG_CFG_RF1)
4680 			ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
4681 		if (ap->rxconfig & ANEG_CFG_RF2)
4682 			ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
4683 		if (ap->rxconfig & ANEG_CFG_NP)
4684 			ap->flags |= MR_LP_ADV_NEXT_PAGE;
4685 
4686 		ap->link_time = ap->cur_time;
4687 
4688 		ap->flags ^= (MR_TOGGLE_TX);
4689 		if (ap->rxconfig & 0x0008)
4690 			ap->flags |= MR_TOGGLE_RX;
4691 		if (ap->rxconfig & ANEG_CFG_NP)
4692 			ap->flags |= MR_NP_RX;
4693 		ap->flags |= MR_PAGE_RX;
4694 
4695 		ap->state = ANEG_STATE_COMPLETE_ACK;
4696 		ret = ANEG_TIMER_ENAB;
4697 		break;
4698 
4699 	case ANEG_STATE_COMPLETE_ACK:
4700 		if (ap->ability_match != 0 &&
4701 		    ap->rxconfig == 0) {
4702 			ap->state = ANEG_STATE_AN_ENABLE;
4703 			break;
4704 		}
4705 		delta = ap->cur_time - ap->link_time;
4706 		if (delta > ANEG_STATE_SETTLE_TIME) {
4707 			if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
4708 				ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4709 			} else {
4710 				if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
4711 				    !(ap->flags & MR_NP_RX)) {
4712 					ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4713 				} else {
4714 					ret = ANEG_FAILED;
4715 				}
4716 			}
4717 		}
4718 		break;
4719 
4720 	case ANEG_STATE_IDLE_DETECT_INIT:
4721 		ap->link_time = ap->cur_time;
4722 		tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4723 		tw32_f(MAC_MODE, tp->mac_mode);
4724 		udelay(40);
4725 
4726 		ap->state = ANEG_STATE_IDLE_DETECT;
4727 		ret = ANEG_TIMER_ENAB;
4728 		break;
4729 
4730 	case ANEG_STATE_IDLE_DETECT:
4731 		if (ap->ability_match != 0 &&
4732 		    ap->rxconfig == 0) {
4733 			ap->state = ANEG_STATE_AN_ENABLE;
4734 			break;
4735 		}
4736 		delta = ap->cur_time - ap->link_time;
4737 		if (delta > ANEG_STATE_SETTLE_TIME) {
4738 			/* XXX another gem from the Broadcom driver :( */
4739 			ap->state = ANEG_STATE_LINK_OK;
4740 		}
4741 		break;
4742 
4743 	case ANEG_STATE_LINK_OK:
4744 		ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
4745 		ret = ANEG_DONE;
4746 		break;
4747 
4748 	case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
4749 		/* ??? unimplemented */
4750 		break;
4751 
4752 	case ANEG_STATE_NEXT_PAGE_WAIT:
4753 		/* ??? unimplemented */
4754 		break;
4755 
4756 	default:
4757 		ret = ANEG_FAILED;
4758 		break;
4759 	}
4760 
4761 	return ret;
4762 }
4763 
4764 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
4765 {
4766 	int res = 0;
4767 	struct tg3_fiber_aneginfo aninfo;
4768 	int status = ANEG_FAILED;
4769 	unsigned int tick;
4770 	u32 tmp;
4771 
4772 	tw32_f(MAC_TX_AUTO_NEG, 0);
4773 
4774 	tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
4775 	tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
4776 	udelay(40);
4777 
4778 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
4779 	udelay(40);
4780 
4781 	memset(&aninfo, 0, sizeof(aninfo));
4782 	aninfo.flags |= MR_AN_ENABLE;
4783 	aninfo.state = ANEG_STATE_UNKNOWN;
4784 	aninfo.cur_time = 0;
4785 	tick = 0;
4786 	while (++tick < 195000) {
4787 		status = tg3_fiber_aneg_smachine(tp, &aninfo);
4788 		if (status == ANEG_DONE || status == ANEG_FAILED)
4789 			break;
4790 
4791 		udelay(1);
4792 	}
4793 
4794 	tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4795 	tw32_f(MAC_MODE, tp->mac_mode);
4796 	udelay(40);
4797 
4798 	*txflags = aninfo.txconfig;
4799 	*rxflags = aninfo.flags;
4800 
4801 	if (status == ANEG_DONE &&
4802 	    (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
4803 			     MR_LP_ADV_FULL_DUPLEX)))
4804 		res = 1;
4805 
4806 	return res;
4807 }
4808 
4809 static void tg3_init_bcm8002(struct tg3 *tp)
4810 {
4811 	u32 mac_status = tr32(MAC_STATUS);
4812 	int i;
4813 
4814 	/* Reset when initting first time or we have a link. */
4815 	if (tg3_flag(tp, INIT_COMPLETE) &&
4816 	    !(mac_status & MAC_STATUS_PCS_SYNCED))
4817 		return;
4818 
4819 	/* Set PLL lock range. */
4820 	tg3_writephy(tp, 0x16, 0x8007);
4821 
4822 	/* SW reset */
4823 	tg3_writephy(tp, MII_BMCR, BMCR_RESET);
4824 
4825 	/* Wait for reset to complete. */
4826 	/* XXX schedule_timeout() ... */
4827 	for (i = 0; i < 500; i++)
4828 		udelay(10);
4829 
4830 	/* Config mode; select PMA/Ch 1 regs. */
4831 	tg3_writephy(tp, 0x10, 0x8411);
4832 
4833 	/* Enable auto-lock and comdet, select txclk for tx. */
4834 	tg3_writephy(tp, 0x11, 0x0a10);
4835 
4836 	tg3_writephy(tp, 0x18, 0x00a0);
4837 	tg3_writephy(tp, 0x16, 0x41ff);
4838 
4839 	/* Assert and deassert POR. */
4840 	tg3_writephy(tp, 0x13, 0x0400);
4841 	udelay(40);
4842 	tg3_writephy(tp, 0x13, 0x0000);
4843 
4844 	tg3_writephy(tp, 0x11, 0x0a50);
4845 	udelay(40);
4846 	tg3_writephy(tp, 0x11, 0x0a10);
4847 
4848 	/* Wait for signal to stabilize */
4849 	/* XXX schedule_timeout() ... */
4850 	for (i = 0; i < 15000; i++)
4851 		udelay(10);
4852 
4853 	/* Deselect the channel register so we can read the PHYID
4854 	 * later.
4855 	 */
4856 	tg3_writephy(tp, 0x10, 0x8011);
4857 }
4858 
4859 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
4860 {
4861 	u16 flowctrl;
4862 	u32 sg_dig_ctrl, sg_dig_status;
4863 	u32 serdes_cfg, expected_sg_dig_ctrl;
4864 	int workaround, port_a;
4865 	int current_link_up;
4866 
4867 	serdes_cfg = 0;
4868 	expected_sg_dig_ctrl = 0;
4869 	workaround = 0;
4870 	port_a = 1;
4871 	current_link_up = 0;
4872 
4873 	if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
4874 	    tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
4875 		workaround = 1;
4876 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
4877 			port_a = 0;
4878 
4879 		/* preserve bits 0-11,13,14 for signal pre-emphasis */
4880 		/* preserve bits 20-23 for voltage regulator */
4881 		serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
4882 	}
4883 
4884 	sg_dig_ctrl = tr32(SG_DIG_CTRL);
4885 
4886 	if (tp->link_config.autoneg != AUTONEG_ENABLE) {
4887 		if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
4888 			if (workaround) {
4889 				u32 val = serdes_cfg;
4890 
4891 				if (port_a)
4892 					val |= 0xc010000;
4893 				else
4894 					val |= 0x4010000;
4895 				tw32_f(MAC_SERDES_CFG, val);
4896 			}
4897 
4898 			tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4899 		}
4900 		if (mac_status & MAC_STATUS_PCS_SYNCED) {
4901 			tg3_setup_flow_control(tp, 0, 0);
4902 			current_link_up = 1;
4903 		}
4904 		goto out;
4905 	}
4906 
4907 	/* Want auto-negotiation.  */
4908 	expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
4909 
4910 	flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4911 	if (flowctrl & ADVERTISE_1000XPAUSE)
4912 		expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
4913 	if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4914 		expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
4915 
4916 	if (sg_dig_ctrl != expected_sg_dig_ctrl) {
4917 		if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
4918 		    tp->serdes_counter &&
4919 		    ((mac_status & (MAC_STATUS_PCS_SYNCED |
4920 				    MAC_STATUS_RCVD_CFG)) ==
4921 		     MAC_STATUS_PCS_SYNCED)) {
4922 			tp->serdes_counter--;
4923 			current_link_up = 1;
4924 			goto out;
4925 		}
4926 restart_autoneg:
4927 		if (workaround)
4928 			tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
4929 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
4930 		udelay(5);
4931 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
4932 
4933 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
4934 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4935 	} else if (mac_status & (MAC_STATUS_PCS_SYNCED |
4936 				 MAC_STATUS_SIGNAL_DET)) {
4937 		sg_dig_status = tr32(SG_DIG_STATUS);
4938 		mac_status = tr32(MAC_STATUS);
4939 
4940 		if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
4941 		    (mac_status & MAC_STATUS_PCS_SYNCED)) {
4942 			u32 local_adv = 0, remote_adv = 0;
4943 
4944 			if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
4945 				local_adv |= ADVERTISE_1000XPAUSE;
4946 			if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
4947 				local_adv |= ADVERTISE_1000XPSE_ASYM;
4948 
4949 			if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
4950 				remote_adv |= LPA_1000XPAUSE;
4951 			if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
4952 				remote_adv |= LPA_1000XPAUSE_ASYM;
4953 
4954 			tp->link_config.rmt_adv =
4955 					   mii_adv_to_ethtool_adv_x(remote_adv);
4956 
4957 			tg3_setup_flow_control(tp, local_adv, remote_adv);
4958 			current_link_up = 1;
4959 			tp->serdes_counter = 0;
4960 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4961 		} else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
4962 			if (tp->serdes_counter)
4963 				tp->serdes_counter--;
4964 			else {
4965 				if (workaround) {
4966 					u32 val = serdes_cfg;
4967 
4968 					if (port_a)
4969 						val |= 0xc010000;
4970 					else
4971 						val |= 0x4010000;
4972 
4973 					tw32_f(MAC_SERDES_CFG, val);
4974 				}
4975 
4976 				tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4977 				udelay(40);
4978 
4979 				/* Link parallel detection - link is up */
4980 				/* only if we have PCS_SYNC and not */
4981 				/* receiving config code words */
4982 				mac_status = tr32(MAC_STATUS);
4983 				if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
4984 				    !(mac_status & MAC_STATUS_RCVD_CFG)) {
4985 					tg3_setup_flow_control(tp, 0, 0);
4986 					current_link_up = 1;
4987 					tp->phy_flags |=
4988 						TG3_PHYFLG_PARALLEL_DETECT;
4989 					tp->serdes_counter =
4990 						SERDES_PARALLEL_DET_TIMEOUT;
4991 				} else
4992 					goto restart_autoneg;
4993 			}
4994 		}
4995 	} else {
4996 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
4997 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4998 	}
4999 
5000 out:
5001 	return current_link_up;
5002 }
5003 
5004 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5005 {
5006 	int current_link_up = 0;
5007 
5008 	if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5009 		goto out;
5010 
5011 	if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5012 		u32 txflags, rxflags;
5013 		int i;
5014 
5015 		if (fiber_autoneg(tp, &txflags, &rxflags)) {
5016 			u32 local_adv = 0, remote_adv = 0;
5017 
5018 			if (txflags & ANEG_CFG_PS1)
5019 				local_adv |= ADVERTISE_1000XPAUSE;
5020 			if (txflags & ANEG_CFG_PS2)
5021 				local_adv |= ADVERTISE_1000XPSE_ASYM;
5022 
5023 			if (rxflags & MR_LP_ADV_SYM_PAUSE)
5024 				remote_adv |= LPA_1000XPAUSE;
5025 			if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5026 				remote_adv |= LPA_1000XPAUSE_ASYM;
5027 
5028 			tp->link_config.rmt_adv =
5029 					   mii_adv_to_ethtool_adv_x(remote_adv);
5030 
5031 			tg3_setup_flow_control(tp, local_adv, remote_adv);
5032 
5033 			current_link_up = 1;
5034 		}
5035 		for (i = 0; i < 30; i++) {
5036 			udelay(20);
5037 			tw32_f(MAC_STATUS,
5038 			       (MAC_STATUS_SYNC_CHANGED |
5039 				MAC_STATUS_CFG_CHANGED));
5040 			udelay(40);
5041 			if ((tr32(MAC_STATUS) &
5042 			     (MAC_STATUS_SYNC_CHANGED |
5043 			      MAC_STATUS_CFG_CHANGED)) == 0)
5044 				break;
5045 		}
5046 
5047 		mac_status = tr32(MAC_STATUS);
5048 		if (current_link_up == 0 &&
5049 		    (mac_status & MAC_STATUS_PCS_SYNCED) &&
5050 		    !(mac_status & MAC_STATUS_RCVD_CFG))
5051 			current_link_up = 1;
5052 	} else {
5053 		tg3_setup_flow_control(tp, 0, 0);
5054 
5055 		/* Forcing 1000FD link up. */
5056 		current_link_up = 1;
5057 
5058 		tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5059 		udelay(40);
5060 
5061 		tw32_f(MAC_MODE, tp->mac_mode);
5062 		udelay(40);
5063 	}
5064 
5065 out:
5066 	return current_link_up;
5067 }
5068 
5069 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
5070 {
5071 	u32 orig_pause_cfg;
5072 	u16 orig_active_speed;
5073 	u8 orig_active_duplex;
5074 	u32 mac_status;
5075 	int current_link_up;
5076 	int i;
5077 
5078 	orig_pause_cfg = tp->link_config.active_flowctrl;
5079 	orig_active_speed = tp->link_config.active_speed;
5080 	orig_active_duplex = tp->link_config.active_duplex;
5081 
5082 	if (!tg3_flag(tp, HW_AUTONEG) &&
5083 	    netif_carrier_ok(tp->dev) &&
5084 	    tg3_flag(tp, INIT_COMPLETE)) {
5085 		mac_status = tr32(MAC_STATUS);
5086 		mac_status &= (MAC_STATUS_PCS_SYNCED |
5087 			       MAC_STATUS_SIGNAL_DET |
5088 			       MAC_STATUS_CFG_CHANGED |
5089 			       MAC_STATUS_RCVD_CFG);
5090 		if (mac_status == (MAC_STATUS_PCS_SYNCED |
5091 				   MAC_STATUS_SIGNAL_DET)) {
5092 			tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5093 					    MAC_STATUS_CFG_CHANGED));
5094 			return 0;
5095 		}
5096 	}
5097 
5098 	tw32_f(MAC_TX_AUTO_NEG, 0);
5099 
5100 	tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5101 	tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5102 	tw32_f(MAC_MODE, tp->mac_mode);
5103 	udelay(40);
5104 
5105 	if (tp->phy_id == TG3_PHY_ID_BCM8002)
5106 		tg3_init_bcm8002(tp);
5107 
5108 	/* Enable link change event even when serdes polling.  */
5109 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5110 	udelay(40);
5111 
5112 	current_link_up = 0;
5113 	tp->link_config.rmt_adv = 0;
5114 	mac_status = tr32(MAC_STATUS);
5115 
5116 	if (tg3_flag(tp, HW_AUTONEG))
5117 		current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5118 	else
5119 		current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5120 
5121 	tp->napi[0].hw_status->status =
5122 		(SD_STATUS_UPDATED |
5123 		 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5124 
5125 	for (i = 0; i < 100; i++) {
5126 		tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5127 				    MAC_STATUS_CFG_CHANGED));
5128 		udelay(5);
5129 		if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5130 					 MAC_STATUS_CFG_CHANGED |
5131 					 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5132 			break;
5133 	}
5134 
5135 	mac_status = tr32(MAC_STATUS);
5136 	if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5137 		current_link_up = 0;
5138 		if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5139 		    tp->serdes_counter == 0) {
5140 			tw32_f(MAC_MODE, (tp->mac_mode |
5141 					  MAC_MODE_SEND_CONFIGS));
5142 			udelay(1);
5143 			tw32_f(MAC_MODE, tp->mac_mode);
5144 		}
5145 	}
5146 
5147 	if (current_link_up == 1) {
5148 		tp->link_config.active_speed = SPEED_1000;
5149 		tp->link_config.active_duplex = DUPLEX_FULL;
5150 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5151 				    LED_CTRL_LNKLED_OVERRIDE |
5152 				    LED_CTRL_1000MBPS_ON));
5153 	} else {
5154 		tp->link_config.active_speed = SPEED_UNKNOWN;
5155 		tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5156 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5157 				    LED_CTRL_LNKLED_OVERRIDE |
5158 				    LED_CTRL_TRAFFIC_OVERRIDE));
5159 	}
5160 
5161 	if (current_link_up != netif_carrier_ok(tp->dev)) {
5162 		if (current_link_up)
5163 			netif_carrier_on(tp->dev);
5164 		else
5165 			netif_carrier_off(tp->dev);
5166 		tg3_link_report(tp);
5167 	} else {
5168 		u32 now_pause_cfg = tp->link_config.active_flowctrl;
5169 		if (orig_pause_cfg != now_pause_cfg ||
5170 		    orig_active_speed != tp->link_config.active_speed ||
5171 		    orig_active_duplex != tp->link_config.active_duplex)
5172 			tg3_link_report(tp);
5173 	}
5174 
5175 	return 0;
5176 }
5177 
5178 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
5179 {
5180 	int current_link_up, err = 0;
5181 	u32 bmsr, bmcr;
5182 	u16 current_speed;
5183 	u8 current_duplex;
5184 	u32 local_adv, remote_adv;
5185 
5186 	tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5187 	tw32_f(MAC_MODE, tp->mac_mode);
5188 	udelay(40);
5189 
5190 	tw32(MAC_EVENT, 0);
5191 
5192 	tw32_f(MAC_STATUS,
5193 	     (MAC_STATUS_SYNC_CHANGED |
5194 	      MAC_STATUS_CFG_CHANGED |
5195 	      MAC_STATUS_MI_COMPLETION |
5196 	      MAC_STATUS_LNKSTATE_CHANGED));
5197 	udelay(40);
5198 
5199 	if (force_reset)
5200 		tg3_phy_reset(tp);
5201 
5202 	current_link_up = 0;
5203 	current_speed = SPEED_UNKNOWN;
5204 	current_duplex = DUPLEX_UNKNOWN;
5205 	tp->link_config.rmt_adv = 0;
5206 
5207 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5208 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5209 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
5210 		if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5211 			bmsr |= BMSR_LSTATUS;
5212 		else
5213 			bmsr &= ~BMSR_LSTATUS;
5214 	}
5215 
5216 	err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5217 
5218 	if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5219 	    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5220 		/* do nothing, just check for link up at the end */
5221 	} else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5222 		u32 adv, newadv;
5223 
5224 		err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5225 		newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5226 				 ADVERTISE_1000XPAUSE |
5227 				 ADVERTISE_1000XPSE_ASYM |
5228 				 ADVERTISE_SLCT);
5229 
5230 		newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5231 		newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5232 
5233 		if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5234 			tg3_writephy(tp, MII_ADVERTISE, newadv);
5235 			bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5236 			tg3_writephy(tp, MII_BMCR, bmcr);
5237 
5238 			tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5239 			tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5240 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5241 
5242 			return err;
5243 		}
5244 	} else {
5245 		u32 new_bmcr;
5246 
5247 		bmcr &= ~BMCR_SPEED1000;
5248 		new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5249 
5250 		if (tp->link_config.duplex == DUPLEX_FULL)
5251 			new_bmcr |= BMCR_FULLDPLX;
5252 
5253 		if (new_bmcr != bmcr) {
5254 			/* BMCR_SPEED1000 is a reserved bit that needs
5255 			 * to be set on write.
5256 			 */
5257 			new_bmcr |= BMCR_SPEED1000;
5258 
5259 			/* Force a linkdown */
5260 			if (netif_carrier_ok(tp->dev)) {
5261 				u32 adv;
5262 
5263 				err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5264 				adv &= ~(ADVERTISE_1000XFULL |
5265 					 ADVERTISE_1000XHALF |
5266 					 ADVERTISE_SLCT);
5267 				tg3_writephy(tp, MII_ADVERTISE, adv);
5268 				tg3_writephy(tp, MII_BMCR, bmcr |
5269 							   BMCR_ANRESTART |
5270 							   BMCR_ANENABLE);
5271 				udelay(10);
5272 				netif_carrier_off(tp->dev);
5273 			}
5274 			tg3_writephy(tp, MII_BMCR, new_bmcr);
5275 			bmcr = new_bmcr;
5276 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5277 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5278 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
5279 			    ASIC_REV_5714) {
5280 				if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5281 					bmsr |= BMSR_LSTATUS;
5282 				else
5283 					bmsr &= ~BMSR_LSTATUS;
5284 			}
5285 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5286 		}
5287 	}
5288 
5289 	if (bmsr & BMSR_LSTATUS) {
5290 		current_speed = SPEED_1000;
5291 		current_link_up = 1;
5292 		if (bmcr & BMCR_FULLDPLX)
5293 			current_duplex = DUPLEX_FULL;
5294 		else
5295 			current_duplex = DUPLEX_HALF;
5296 
5297 		local_adv = 0;
5298 		remote_adv = 0;
5299 
5300 		if (bmcr & BMCR_ANENABLE) {
5301 			u32 common;
5302 
5303 			err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5304 			err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5305 			common = local_adv & remote_adv;
5306 			if (common & (ADVERTISE_1000XHALF |
5307 				      ADVERTISE_1000XFULL)) {
5308 				if (common & ADVERTISE_1000XFULL)
5309 					current_duplex = DUPLEX_FULL;
5310 				else
5311 					current_duplex = DUPLEX_HALF;
5312 
5313 				tp->link_config.rmt_adv =
5314 					   mii_adv_to_ethtool_adv_x(remote_adv);
5315 			} else if (!tg3_flag(tp, 5780_CLASS)) {
5316 				/* Link is up via parallel detect */
5317 			} else {
5318 				current_link_up = 0;
5319 			}
5320 		}
5321 	}
5322 
5323 	if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
5324 		tg3_setup_flow_control(tp, local_adv, remote_adv);
5325 
5326 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5327 	if (tp->link_config.active_duplex == DUPLEX_HALF)
5328 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5329 
5330 	tw32_f(MAC_MODE, tp->mac_mode);
5331 	udelay(40);
5332 
5333 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5334 
5335 	tp->link_config.active_speed = current_speed;
5336 	tp->link_config.active_duplex = current_duplex;
5337 
5338 	if (current_link_up != netif_carrier_ok(tp->dev)) {
5339 		if (current_link_up)
5340 			netif_carrier_on(tp->dev);
5341 		else {
5342 			netif_carrier_off(tp->dev);
5343 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5344 		}
5345 		tg3_link_report(tp);
5346 	}
5347 	return err;
5348 }
5349 
5350 static void tg3_serdes_parallel_detect(struct tg3 *tp)
5351 {
5352 	if (tp->serdes_counter) {
5353 		/* Give autoneg time to complete. */
5354 		tp->serdes_counter--;
5355 		return;
5356 	}
5357 
5358 	if (!netif_carrier_ok(tp->dev) &&
5359 	    (tp->link_config.autoneg == AUTONEG_ENABLE)) {
5360 		u32 bmcr;
5361 
5362 		tg3_readphy(tp, MII_BMCR, &bmcr);
5363 		if (bmcr & BMCR_ANENABLE) {
5364 			u32 phy1, phy2;
5365 
5366 			/* Select shadow register 0x1f */
5367 			tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
5368 			tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
5369 
5370 			/* Select expansion interrupt status register */
5371 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5372 					 MII_TG3_DSP_EXP1_INT_STAT);
5373 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5374 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5375 
5376 			if ((phy1 & 0x10) && !(phy2 & 0x20)) {
5377 				/* We have signal detect and not receiving
5378 				 * config code words, link is up by parallel
5379 				 * detection.
5380 				 */
5381 
5382 				bmcr &= ~BMCR_ANENABLE;
5383 				bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
5384 				tg3_writephy(tp, MII_BMCR, bmcr);
5385 				tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
5386 			}
5387 		}
5388 	} else if (netif_carrier_ok(tp->dev) &&
5389 		   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
5390 		   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5391 		u32 phy2;
5392 
5393 		/* Select expansion interrupt status register */
5394 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5395 				 MII_TG3_DSP_EXP1_INT_STAT);
5396 		tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5397 		if (phy2 & 0x20) {
5398 			u32 bmcr;
5399 
5400 			/* Config code words received, turn on autoneg. */
5401 			tg3_readphy(tp, MII_BMCR, &bmcr);
5402 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
5403 
5404 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5405 
5406 		}
5407 	}
5408 }
5409 
5410 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
5411 {
5412 	u32 val;
5413 	int err;
5414 
5415 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
5416 		err = tg3_setup_fiber_phy(tp, force_reset);
5417 	else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
5418 		err = tg3_setup_fiber_mii_phy(tp, force_reset);
5419 	else
5420 		err = tg3_setup_copper_phy(tp, force_reset);
5421 
5422 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
5423 		u32 scale;
5424 
5425 		val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
5426 		if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
5427 			scale = 65;
5428 		else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
5429 			scale = 6;
5430 		else
5431 			scale = 12;
5432 
5433 		val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
5434 		val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
5435 		tw32(GRC_MISC_CFG, val);
5436 	}
5437 
5438 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
5439 	      (6 << TX_LENGTHS_IPG_SHIFT);
5440 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
5441 		val |= tr32(MAC_TX_LENGTHS) &
5442 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
5443 			TX_LENGTHS_CNT_DWN_VAL_MSK);
5444 
5445 	if (tp->link_config.active_speed == SPEED_1000 &&
5446 	    tp->link_config.active_duplex == DUPLEX_HALF)
5447 		tw32(MAC_TX_LENGTHS, val |
5448 		     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
5449 	else
5450 		tw32(MAC_TX_LENGTHS, val |
5451 		     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
5452 
5453 	if (!tg3_flag(tp, 5705_PLUS)) {
5454 		if (netif_carrier_ok(tp->dev)) {
5455 			tw32(HOSTCC_STAT_COAL_TICKS,
5456 			     tp->coal.stats_block_coalesce_usecs);
5457 		} else {
5458 			tw32(HOSTCC_STAT_COAL_TICKS, 0);
5459 		}
5460 	}
5461 
5462 	if (tg3_flag(tp, ASPM_WORKAROUND)) {
5463 		val = tr32(PCIE_PWR_MGMT_THRESH);
5464 		if (!netif_carrier_ok(tp->dev))
5465 			val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
5466 			      tp->pwrmgmt_thresh;
5467 		else
5468 			val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
5469 		tw32(PCIE_PWR_MGMT_THRESH, val);
5470 	}
5471 
5472 	return err;
5473 }
5474 
5475 static inline int tg3_irq_sync(struct tg3 *tp)
5476 {
5477 	return tp->irq_sync;
5478 }
5479 
5480 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
5481 {
5482 	int i;
5483 
5484 	dst = (u32 *)((u8 *)dst + off);
5485 	for (i = 0; i < len; i += sizeof(u32))
5486 		*dst++ = tr32(off + i);
5487 }
5488 
5489 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
5490 {
5491 	tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
5492 	tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
5493 	tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
5494 	tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
5495 	tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
5496 	tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
5497 	tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
5498 	tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
5499 	tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
5500 	tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
5501 	tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
5502 	tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
5503 	tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
5504 	tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
5505 	tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
5506 	tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
5507 	tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
5508 	tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
5509 	tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
5510 
5511 	if (tg3_flag(tp, SUPPORT_MSIX))
5512 		tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
5513 
5514 	tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
5515 	tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
5516 	tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
5517 	tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
5518 	tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
5519 	tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
5520 	tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
5521 	tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
5522 
5523 	if (!tg3_flag(tp, 5705_PLUS)) {
5524 		tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
5525 		tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
5526 		tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
5527 	}
5528 
5529 	tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
5530 	tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
5531 	tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
5532 	tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
5533 	tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
5534 
5535 	if (tg3_flag(tp, NVRAM))
5536 		tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
5537 }
5538 
5539 static void tg3_dump_state(struct tg3 *tp)
5540 {
5541 	int i;
5542 	u32 *regs;
5543 
5544 	regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
5545 	if (!regs) {
5546 		netdev_err(tp->dev, "Failed allocating register dump buffer\n");
5547 		return;
5548 	}
5549 
5550 	if (tg3_flag(tp, PCI_EXPRESS)) {
5551 		/* Read up to but not including private PCI registers */
5552 		for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
5553 			regs[i / sizeof(u32)] = tr32(i);
5554 	} else
5555 		tg3_dump_legacy_regs(tp, regs);
5556 
5557 	for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
5558 		if (!regs[i + 0] && !regs[i + 1] &&
5559 		    !regs[i + 2] && !regs[i + 3])
5560 			continue;
5561 
5562 		netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
5563 			   i * 4,
5564 			   regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
5565 	}
5566 
5567 	kfree(regs);
5568 
5569 	for (i = 0; i < tp->irq_cnt; i++) {
5570 		struct tg3_napi *tnapi = &tp->napi[i];
5571 
5572 		/* SW status block */
5573 		netdev_err(tp->dev,
5574 			 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
5575 			   i,
5576 			   tnapi->hw_status->status,
5577 			   tnapi->hw_status->status_tag,
5578 			   tnapi->hw_status->rx_jumbo_consumer,
5579 			   tnapi->hw_status->rx_consumer,
5580 			   tnapi->hw_status->rx_mini_consumer,
5581 			   tnapi->hw_status->idx[0].rx_producer,
5582 			   tnapi->hw_status->idx[0].tx_consumer);
5583 
5584 		netdev_err(tp->dev,
5585 		"%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
5586 			   i,
5587 			   tnapi->last_tag, tnapi->last_irq_tag,
5588 			   tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
5589 			   tnapi->rx_rcb_ptr,
5590 			   tnapi->prodring.rx_std_prod_idx,
5591 			   tnapi->prodring.rx_std_cons_idx,
5592 			   tnapi->prodring.rx_jmb_prod_idx,
5593 			   tnapi->prodring.rx_jmb_cons_idx);
5594 	}
5595 }
5596 
5597 /* This is called whenever we suspect that the system chipset is re-
5598  * ordering the sequence of MMIO to the tx send mailbox. The symptom
5599  * is bogus tx completions. We try to recover by setting the
5600  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
5601  * in the workqueue.
5602  */
5603 static void tg3_tx_recover(struct tg3 *tp)
5604 {
5605 	BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
5606 	       tp->write32_tx_mbox == tg3_write_indirect_mbox);
5607 
5608 	netdev_warn(tp->dev,
5609 		    "The system may be re-ordering memory-mapped I/O "
5610 		    "cycles to the network device, attempting to recover. "
5611 		    "Please report the problem to the driver maintainer "
5612 		    "and include system chipset information.\n");
5613 
5614 	spin_lock(&tp->lock);
5615 	tg3_flag_set(tp, TX_RECOVERY_PENDING);
5616 	spin_unlock(&tp->lock);
5617 }
5618 
5619 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
5620 {
5621 	/* Tell compiler to fetch tx indices from memory. */
5622 	barrier();
5623 	return tnapi->tx_pending -
5624 	       ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
5625 }
5626 
5627 /* Tigon3 never reports partial packet sends.  So we do not
5628  * need special logic to handle SKBs that have not had all
5629  * of their frags sent yet, like SunGEM does.
5630  */
5631 static void tg3_tx(struct tg3_napi *tnapi)
5632 {
5633 	struct tg3 *tp = tnapi->tp;
5634 	u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
5635 	u32 sw_idx = tnapi->tx_cons;
5636 	struct netdev_queue *txq;
5637 	int index = tnapi - tp->napi;
5638 	unsigned int pkts_compl = 0, bytes_compl = 0;
5639 
5640 	if (tg3_flag(tp, ENABLE_TSS))
5641 		index--;
5642 
5643 	txq = netdev_get_tx_queue(tp->dev, index);
5644 
5645 	while (sw_idx != hw_idx) {
5646 		struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
5647 		struct sk_buff *skb = ri->skb;
5648 		int i, tx_bug = 0;
5649 
5650 		if (unlikely(skb == NULL)) {
5651 			tg3_tx_recover(tp);
5652 			return;
5653 		}
5654 
5655 		pci_unmap_single(tp->pdev,
5656 				 dma_unmap_addr(ri, mapping),
5657 				 skb_headlen(skb),
5658 				 PCI_DMA_TODEVICE);
5659 
5660 		ri->skb = NULL;
5661 
5662 		while (ri->fragmented) {
5663 			ri->fragmented = false;
5664 			sw_idx = NEXT_TX(sw_idx);
5665 			ri = &tnapi->tx_buffers[sw_idx];
5666 		}
5667 
5668 		sw_idx = NEXT_TX(sw_idx);
5669 
5670 		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
5671 			ri = &tnapi->tx_buffers[sw_idx];
5672 			if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
5673 				tx_bug = 1;
5674 
5675 			pci_unmap_page(tp->pdev,
5676 				       dma_unmap_addr(ri, mapping),
5677 				       skb_frag_size(&skb_shinfo(skb)->frags[i]),
5678 				       PCI_DMA_TODEVICE);
5679 
5680 			while (ri->fragmented) {
5681 				ri->fragmented = false;
5682 				sw_idx = NEXT_TX(sw_idx);
5683 				ri = &tnapi->tx_buffers[sw_idx];
5684 			}
5685 
5686 			sw_idx = NEXT_TX(sw_idx);
5687 		}
5688 
5689 		pkts_compl++;
5690 		bytes_compl += skb->len;
5691 
5692 		dev_kfree_skb(skb);
5693 
5694 		if (unlikely(tx_bug)) {
5695 			tg3_tx_recover(tp);
5696 			return;
5697 		}
5698 	}
5699 
5700 	netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
5701 
5702 	tnapi->tx_cons = sw_idx;
5703 
5704 	/* Need to make the tx_cons update visible to tg3_start_xmit()
5705 	 * before checking for netif_queue_stopped().  Without the
5706 	 * memory barrier, there is a small possibility that tg3_start_xmit()
5707 	 * will miss it and cause the queue to be stopped forever.
5708 	 */
5709 	smp_mb();
5710 
5711 	if (unlikely(netif_tx_queue_stopped(txq) &&
5712 		     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
5713 		__netif_tx_lock(txq, smp_processor_id());
5714 		if (netif_tx_queue_stopped(txq) &&
5715 		    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
5716 			netif_tx_wake_queue(txq);
5717 		__netif_tx_unlock(txq);
5718 	}
5719 }
5720 
5721 static void tg3_frag_free(bool is_frag, void *data)
5722 {
5723 	if (is_frag)
5724 		put_page(virt_to_head_page(data));
5725 	else
5726 		kfree(data);
5727 }
5728 
5729 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
5730 {
5731 	unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
5732 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5733 
5734 	if (!ri->data)
5735 		return;
5736 
5737 	pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
5738 			 map_sz, PCI_DMA_FROMDEVICE);
5739 	tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
5740 	ri->data = NULL;
5741 }
5742 
5743 
5744 /* Returns size of skb allocated or < 0 on error.
5745  *
5746  * We only need to fill in the address because the other members
5747  * of the RX descriptor are invariant, see tg3_init_rings.
5748  *
5749  * Note the purposeful assymetry of cpu vs. chip accesses.  For
5750  * posting buffers we only dirty the first cache line of the RX
5751  * descriptor (containing the address).  Whereas for the RX status
5752  * buffers the cpu only reads the last cacheline of the RX descriptor
5753  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
5754  */
5755 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
5756 			     u32 opaque_key, u32 dest_idx_unmasked,
5757 			     unsigned int *frag_size)
5758 {
5759 	struct tg3_rx_buffer_desc *desc;
5760 	struct ring_info *map;
5761 	u8 *data;
5762 	dma_addr_t mapping;
5763 	int skb_size, data_size, dest_idx;
5764 
5765 	switch (opaque_key) {
5766 	case RXD_OPAQUE_RING_STD:
5767 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5768 		desc = &tpr->rx_std[dest_idx];
5769 		map = &tpr->rx_std_buffers[dest_idx];
5770 		data_size = tp->rx_pkt_map_sz;
5771 		break;
5772 
5773 	case RXD_OPAQUE_RING_JUMBO:
5774 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5775 		desc = &tpr->rx_jmb[dest_idx].std;
5776 		map = &tpr->rx_jmb_buffers[dest_idx];
5777 		data_size = TG3_RX_JMB_MAP_SZ;
5778 		break;
5779 
5780 	default:
5781 		return -EINVAL;
5782 	}
5783 
5784 	/* Do not overwrite any of the map or rp information
5785 	 * until we are sure we can commit to a new buffer.
5786 	 *
5787 	 * Callers depend upon this behavior and assume that
5788 	 * we leave everything unchanged if we fail.
5789 	 */
5790 	skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
5791 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5792 	if (skb_size <= PAGE_SIZE) {
5793 		data = netdev_alloc_frag(skb_size);
5794 		*frag_size = skb_size;
5795 	} else {
5796 		data = kmalloc(skb_size, GFP_ATOMIC);
5797 		*frag_size = 0;
5798 	}
5799 	if (!data)
5800 		return -ENOMEM;
5801 
5802 	mapping = pci_map_single(tp->pdev,
5803 				 data + TG3_RX_OFFSET(tp),
5804 				 data_size,
5805 				 PCI_DMA_FROMDEVICE);
5806 	if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
5807 		tg3_frag_free(skb_size <= PAGE_SIZE, data);
5808 		return -EIO;
5809 	}
5810 
5811 	map->data = data;
5812 	dma_unmap_addr_set(map, mapping, mapping);
5813 
5814 	desc->addr_hi = ((u64)mapping >> 32);
5815 	desc->addr_lo = ((u64)mapping & 0xffffffff);
5816 
5817 	return data_size;
5818 }
5819 
5820 /* We only need to move over in the address because the other
5821  * members of the RX descriptor are invariant.  See notes above
5822  * tg3_alloc_rx_data for full details.
5823  */
5824 static void tg3_recycle_rx(struct tg3_napi *tnapi,
5825 			   struct tg3_rx_prodring_set *dpr,
5826 			   u32 opaque_key, int src_idx,
5827 			   u32 dest_idx_unmasked)
5828 {
5829 	struct tg3 *tp = tnapi->tp;
5830 	struct tg3_rx_buffer_desc *src_desc, *dest_desc;
5831 	struct ring_info *src_map, *dest_map;
5832 	struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
5833 	int dest_idx;
5834 
5835 	switch (opaque_key) {
5836 	case RXD_OPAQUE_RING_STD:
5837 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5838 		dest_desc = &dpr->rx_std[dest_idx];
5839 		dest_map = &dpr->rx_std_buffers[dest_idx];
5840 		src_desc = &spr->rx_std[src_idx];
5841 		src_map = &spr->rx_std_buffers[src_idx];
5842 		break;
5843 
5844 	case RXD_OPAQUE_RING_JUMBO:
5845 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5846 		dest_desc = &dpr->rx_jmb[dest_idx].std;
5847 		dest_map = &dpr->rx_jmb_buffers[dest_idx];
5848 		src_desc = &spr->rx_jmb[src_idx].std;
5849 		src_map = &spr->rx_jmb_buffers[src_idx];
5850 		break;
5851 
5852 	default:
5853 		return;
5854 	}
5855 
5856 	dest_map->data = src_map->data;
5857 	dma_unmap_addr_set(dest_map, mapping,
5858 			   dma_unmap_addr(src_map, mapping));
5859 	dest_desc->addr_hi = src_desc->addr_hi;
5860 	dest_desc->addr_lo = src_desc->addr_lo;
5861 
5862 	/* Ensure that the update to the skb happens after the physical
5863 	 * addresses have been transferred to the new BD location.
5864 	 */
5865 	smp_wmb();
5866 
5867 	src_map->data = NULL;
5868 }
5869 
5870 /* The RX ring scheme is composed of multiple rings which post fresh
5871  * buffers to the chip, and one special ring the chip uses to report
5872  * status back to the host.
5873  *
5874  * The special ring reports the status of received packets to the
5875  * host.  The chip does not write into the original descriptor the
5876  * RX buffer was obtained from.  The chip simply takes the original
5877  * descriptor as provided by the host, updates the status and length
5878  * field, then writes this into the next status ring entry.
5879  *
5880  * Each ring the host uses to post buffers to the chip is described
5881  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
5882  * it is first placed into the on-chip ram.  When the packet's length
5883  * is known, it walks down the TG3_BDINFO entries to select the ring.
5884  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
5885  * which is within the range of the new packet's length is chosen.
5886  *
5887  * The "separate ring for rx status" scheme may sound queer, but it makes
5888  * sense from a cache coherency perspective.  If only the host writes
5889  * to the buffer post rings, and only the chip writes to the rx status
5890  * rings, then cache lines never move beyond shared-modified state.
5891  * If both the host and chip were to write into the same ring, cache line
5892  * eviction could occur since both entities want it in an exclusive state.
5893  */
5894 static int tg3_rx(struct tg3_napi *tnapi, int budget)
5895 {
5896 	struct tg3 *tp = tnapi->tp;
5897 	u32 work_mask, rx_std_posted = 0;
5898 	u32 std_prod_idx, jmb_prod_idx;
5899 	u32 sw_idx = tnapi->rx_rcb_ptr;
5900 	u16 hw_idx;
5901 	int received;
5902 	struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
5903 
5904 	hw_idx = *(tnapi->rx_rcb_prod_idx);
5905 	/*
5906 	 * We need to order the read of hw_idx and the read of
5907 	 * the opaque cookie.
5908 	 */
5909 	rmb();
5910 	work_mask = 0;
5911 	received = 0;
5912 	std_prod_idx = tpr->rx_std_prod_idx;
5913 	jmb_prod_idx = tpr->rx_jmb_prod_idx;
5914 	while (sw_idx != hw_idx && budget > 0) {
5915 		struct ring_info *ri;
5916 		struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
5917 		unsigned int len;
5918 		struct sk_buff *skb;
5919 		dma_addr_t dma_addr;
5920 		u32 opaque_key, desc_idx, *post_ptr;
5921 		u8 *data;
5922 
5923 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
5924 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
5925 		if (opaque_key == RXD_OPAQUE_RING_STD) {
5926 			ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
5927 			dma_addr = dma_unmap_addr(ri, mapping);
5928 			data = ri->data;
5929 			post_ptr = &std_prod_idx;
5930 			rx_std_posted++;
5931 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
5932 			ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
5933 			dma_addr = dma_unmap_addr(ri, mapping);
5934 			data = ri->data;
5935 			post_ptr = &jmb_prod_idx;
5936 		} else
5937 			goto next_pkt_nopost;
5938 
5939 		work_mask |= opaque_key;
5940 
5941 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
5942 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
5943 		drop_it:
5944 			tg3_recycle_rx(tnapi, tpr, opaque_key,
5945 				       desc_idx, *post_ptr);
5946 		drop_it_no_recycle:
5947 			/* Other statistics kept track of by card. */
5948 			tp->rx_dropped++;
5949 			goto next_pkt;
5950 		}
5951 
5952 		prefetch(data + TG3_RX_OFFSET(tp));
5953 		len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
5954 		      ETH_FCS_LEN;
5955 
5956 		if (len > TG3_RX_COPY_THRESH(tp)) {
5957 			int skb_size;
5958 			unsigned int frag_size;
5959 
5960 			skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
5961 						    *post_ptr, &frag_size);
5962 			if (skb_size < 0)
5963 				goto drop_it;
5964 
5965 			pci_unmap_single(tp->pdev, dma_addr, skb_size,
5966 					 PCI_DMA_FROMDEVICE);
5967 
5968 			skb = build_skb(data, frag_size);
5969 			if (!skb) {
5970 				tg3_frag_free(frag_size != 0, data);
5971 				goto drop_it_no_recycle;
5972 			}
5973 			skb_reserve(skb, TG3_RX_OFFSET(tp));
5974 			/* Ensure that the update to the data happens
5975 			 * after the usage of the old DMA mapping.
5976 			 */
5977 			smp_wmb();
5978 
5979 			ri->data = NULL;
5980 
5981 		} else {
5982 			tg3_recycle_rx(tnapi, tpr, opaque_key,
5983 				       desc_idx, *post_ptr);
5984 
5985 			skb = netdev_alloc_skb(tp->dev,
5986 					       len + TG3_RAW_IP_ALIGN);
5987 			if (skb == NULL)
5988 				goto drop_it_no_recycle;
5989 
5990 			skb_reserve(skb, TG3_RAW_IP_ALIGN);
5991 			pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5992 			memcpy(skb->data,
5993 			       data + TG3_RX_OFFSET(tp),
5994 			       len);
5995 			pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5996 		}
5997 
5998 		skb_put(skb, len);
5999 		if ((tp->dev->features & NETIF_F_RXCSUM) &&
6000 		    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6001 		    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6002 		      >> RXD_TCPCSUM_SHIFT) == 0xffff))
6003 			skb->ip_summed = CHECKSUM_UNNECESSARY;
6004 		else
6005 			skb_checksum_none_assert(skb);
6006 
6007 		skb->protocol = eth_type_trans(skb, tp->dev);
6008 
6009 		if (len > (tp->dev->mtu + ETH_HLEN) &&
6010 		    skb->protocol != htons(ETH_P_8021Q)) {
6011 			dev_kfree_skb(skb);
6012 			goto drop_it_no_recycle;
6013 		}
6014 
6015 		if (desc->type_flags & RXD_FLAG_VLAN &&
6016 		    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6017 			__vlan_hwaccel_put_tag(skb,
6018 					       desc->err_vlan & RXD_VLAN_MASK);
6019 
6020 		napi_gro_receive(&tnapi->napi, skb);
6021 
6022 		received++;
6023 		budget--;
6024 
6025 next_pkt:
6026 		(*post_ptr)++;
6027 
6028 		if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6029 			tpr->rx_std_prod_idx = std_prod_idx &
6030 					       tp->rx_std_ring_mask;
6031 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6032 				     tpr->rx_std_prod_idx);
6033 			work_mask &= ~RXD_OPAQUE_RING_STD;
6034 			rx_std_posted = 0;
6035 		}
6036 next_pkt_nopost:
6037 		sw_idx++;
6038 		sw_idx &= tp->rx_ret_ring_mask;
6039 
6040 		/* Refresh hw_idx to see if there is new work */
6041 		if (sw_idx == hw_idx) {
6042 			hw_idx = *(tnapi->rx_rcb_prod_idx);
6043 			rmb();
6044 		}
6045 	}
6046 
6047 	/* ACK the status ring. */
6048 	tnapi->rx_rcb_ptr = sw_idx;
6049 	tw32_rx_mbox(tnapi->consmbox, sw_idx);
6050 
6051 	/* Refill RX ring(s). */
6052 	if (!tg3_flag(tp, ENABLE_RSS)) {
6053 		/* Sync BD data before updating mailbox */
6054 		wmb();
6055 
6056 		if (work_mask & RXD_OPAQUE_RING_STD) {
6057 			tpr->rx_std_prod_idx = std_prod_idx &
6058 					       tp->rx_std_ring_mask;
6059 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6060 				     tpr->rx_std_prod_idx);
6061 		}
6062 		if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6063 			tpr->rx_jmb_prod_idx = jmb_prod_idx &
6064 					       tp->rx_jmb_ring_mask;
6065 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6066 				     tpr->rx_jmb_prod_idx);
6067 		}
6068 		mmiowb();
6069 	} else if (work_mask) {
6070 		/* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6071 		 * updated before the producer indices can be updated.
6072 		 */
6073 		smp_wmb();
6074 
6075 		tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6076 		tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6077 
6078 		if (tnapi != &tp->napi[1]) {
6079 			tp->rx_refill = true;
6080 			napi_schedule(&tp->napi[1].napi);
6081 		}
6082 	}
6083 
6084 	return received;
6085 }
6086 
6087 static void tg3_poll_link(struct tg3 *tp)
6088 {
6089 	/* handle link change and other phy events */
6090 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
6091 		struct tg3_hw_status *sblk = tp->napi[0].hw_status;
6092 
6093 		if (sblk->status & SD_STATUS_LINK_CHG) {
6094 			sblk->status = SD_STATUS_UPDATED |
6095 				       (sblk->status & ~SD_STATUS_LINK_CHG);
6096 			spin_lock(&tp->lock);
6097 			if (tg3_flag(tp, USE_PHYLIB)) {
6098 				tw32_f(MAC_STATUS,
6099 				     (MAC_STATUS_SYNC_CHANGED |
6100 				      MAC_STATUS_CFG_CHANGED |
6101 				      MAC_STATUS_MI_COMPLETION |
6102 				      MAC_STATUS_LNKSTATE_CHANGED));
6103 				udelay(40);
6104 			} else
6105 				tg3_setup_phy(tp, 0);
6106 			spin_unlock(&tp->lock);
6107 		}
6108 	}
6109 }
6110 
6111 static int tg3_rx_prodring_xfer(struct tg3 *tp,
6112 				struct tg3_rx_prodring_set *dpr,
6113 				struct tg3_rx_prodring_set *spr)
6114 {
6115 	u32 si, di, cpycnt, src_prod_idx;
6116 	int i, err = 0;
6117 
6118 	while (1) {
6119 		src_prod_idx = spr->rx_std_prod_idx;
6120 
6121 		/* Make sure updates to the rx_std_buffers[] entries and the
6122 		 * standard producer index are seen in the correct order.
6123 		 */
6124 		smp_rmb();
6125 
6126 		if (spr->rx_std_cons_idx == src_prod_idx)
6127 			break;
6128 
6129 		if (spr->rx_std_cons_idx < src_prod_idx)
6130 			cpycnt = src_prod_idx - spr->rx_std_cons_idx;
6131 		else
6132 			cpycnt = tp->rx_std_ring_mask + 1 -
6133 				 spr->rx_std_cons_idx;
6134 
6135 		cpycnt = min(cpycnt,
6136 			     tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
6137 
6138 		si = spr->rx_std_cons_idx;
6139 		di = dpr->rx_std_prod_idx;
6140 
6141 		for (i = di; i < di + cpycnt; i++) {
6142 			if (dpr->rx_std_buffers[i].data) {
6143 				cpycnt = i - di;
6144 				err = -ENOSPC;
6145 				break;
6146 			}
6147 		}
6148 
6149 		if (!cpycnt)
6150 			break;
6151 
6152 		/* Ensure that updates to the rx_std_buffers ring and the
6153 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6154 		 * ordered correctly WRT the skb check above.
6155 		 */
6156 		smp_rmb();
6157 
6158 		memcpy(&dpr->rx_std_buffers[di],
6159 		       &spr->rx_std_buffers[si],
6160 		       cpycnt * sizeof(struct ring_info));
6161 
6162 		for (i = 0; i < cpycnt; i++, di++, si++) {
6163 			struct tg3_rx_buffer_desc *sbd, *dbd;
6164 			sbd = &spr->rx_std[si];
6165 			dbd = &dpr->rx_std[di];
6166 			dbd->addr_hi = sbd->addr_hi;
6167 			dbd->addr_lo = sbd->addr_lo;
6168 		}
6169 
6170 		spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
6171 				       tp->rx_std_ring_mask;
6172 		dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
6173 				       tp->rx_std_ring_mask;
6174 	}
6175 
6176 	while (1) {
6177 		src_prod_idx = spr->rx_jmb_prod_idx;
6178 
6179 		/* Make sure updates to the rx_jmb_buffers[] entries and
6180 		 * the jumbo producer index are seen in the correct order.
6181 		 */
6182 		smp_rmb();
6183 
6184 		if (spr->rx_jmb_cons_idx == src_prod_idx)
6185 			break;
6186 
6187 		if (spr->rx_jmb_cons_idx < src_prod_idx)
6188 			cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
6189 		else
6190 			cpycnt = tp->rx_jmb_ring_mask + 1 -
6191 				 spr->rx_jmb_cons_idx;
6192 
6193 		cpycnt = min(cpycnt,
6194 			     tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
6195 
6196 		si = spr->rx_jmb_cons_idx;
6197 		di = dpr->rx_jmb_prod_idx;
6198 
6199 		for (i = di; i < di + cpycnt; i++) {
6200 			if (dpr->rx_jmb_buffers[i].data) {
6201 				cpycnt = i - di;
6202 				err = -ENOSPC;
6203 				break;
6204 			}
6205 		}
6206 
6207 		if (!cpycnt)
6208 			break;
6209 
6210 		/* Ensure that updates to the rx_jmb_buffers ring and the
6211 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6212 		 * ordered correctly WRT the skb check above.
6213 		 */
6214 		smp_rmb();
6215 
6216 		memcpy(&dpr->rx_jmb_buffers[di],
6217 		       &spr->rx_jmb_buffers[si],
6218 		       cpycnt * sizeof(struct ring_info));
6219 
6220 		for (i = 0; i < cpycnt; i++, di++, si++) {
6221 			struct tg3_rx_buffer_desc *sbd, *dbd;
6222 			sbd = &spr->rx_jmb[si].std;
6223 			dbd = &dpr->rx_jmb[di].std;
6224 			dbd->addr_hi = sbd->addr_hi;
6225 			dbd->addr_lo = sbd->addr_lo;
6226 		}
6227 
6228 		spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
6229 				       tp->rx_jmb_ring_mask;
6230 		dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
6231 				       tp->rx_jmb_ring_mask;
6232 	}
6233 
6234 	return err;
6235 }
6236 
6237 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
6238 {
6239 	struct tg3 *tp = tnapi->tp;
6240 
6241 	/* run TX completion thread */
6242 	if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
6243 		tg3_tx(tnapi);
6244 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6245 			return work_done;
6246 	}
6247 
6248 	if (!tnapi->rx_rcb_prod_idx)
6249 		return work_done;
6250 
6251 	/* run RX thread, within the bounds set by NAPI.
6252 	 * All RX "locking" is done by ensuring outside
6253 	 * code synchronizes with tg3->napi.poll()
6254 	 */
6255 	if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
6256 		work_done += tg3_rx(tnapi, budget - work_done);
6257 
6258 	if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
6259 		struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
6260 		int i, err = 0;
6261 		u32 std_prod_idx = dpr->rx_std_prod_idx;
6262 		u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
6263 
6264 		tp->rx_refill = false;
6265 		for (i = 1; i <= tp->rxq_cnt; i++)
6266 			err |= tg3_rx_prodring_xfer(tp, dpr,
6267 						    &tp->napi[i].prodring);
6268 
6269 		wmb();
6270 
6271 		if (std_prod_idx != dpr->rx_std_prod_idx)
6272 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6273 				     dpr->rx_std_prod_idx);
6274 
6275 		if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
6276 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6277 				     dpr->rx_jmb_prod_idx);
6278 
6279 		mmiowb();
6280 
6281 		if (err)
6282 			tw32_f(HOSTCC_MODE, tp->coal_now);
6283 	}
6284 
6285 	return work_done;
6286 }
6287 
6288 static inline void tg3_reset_task_schedule(struct tg3 *tp)
6289 {
6290 	if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
6291 		schedule_work(&tp->reset_task);
6292 }
6293 
6294 static inline void tg3_reset_task_cancel(struct tg3 *tp)
6295 {
6296 	cancel_work_sync(&tp->reset_task);
6297 	tg3_flag_clear(tp, RESET_TASK_PENDING);
6298 	tg3_flag_clear(tp, TX_RECOVERY_PENDING);
6299 }
6300 
6301 static int tg3_poll_msix(struct napi_struct *napi, int budget)
6302 {
6303 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6304 	struct tg3 *tp = tnapi->tp;
6305 	int work_done = 0;
6306 	struct tg3_hw_status *sblk = tnapi->hw_status;
6307 
6308 	while (1) {
6309 		work_done = tg3_poll_work(tnapi, work_done, budget);
6310 
6311 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6312 			goto tx_recovery;
6313 
6314 		if (unlikely(work_done >= budget))
6315 			break;
6316 
6317 		/* tp->last_tag is used in tg3_int_reenable() below
6318 		 * to tell the hw how much work has been processed,
6319 		 * so we must read it before checking for more work.
6320 		 */
6321 		tnapi->last_tag = sblk->status_tag;
6322 		tnapi->last_irq_tag = tnapi->last_tag;
6323 		rmb();
6324 
6325 		/* check for RX/TX work to do */
6326 		if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
6327 			   *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
6328 
6329 			/* This test here is not race free, but will reduce
6330 			 * the number of interrupts by looping again.
6331 			 */
6332 			if (tnapi == &tp->napi[1] && tp->rx_refill)
6333 				continue;
6334 
6335 			napi_complete(napi);
6336 			/* Reenable interrupts. */
6337 			tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
6338 
6339 			/* This test here is synchronized by napi_schedule()
6340 			 * and napi_complete() to close the race condition.
6341 			 */
6342 			if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
6343 				tw32(HOSTCC_MODE, tp->coalesce_mode |
6344 						  HOSTCC_MODE_ENABLE |
6345 						  tnapi->coal_now);
6346 			}
6347 			mmiowb();
6348 			break;
6349 		}
6350 	}
6351 
6352 	return work_done;
6353 
6354 tx_recovery:
6355 	/* work_done is guaranteed to be less than budget. */
6356 	napi_complete(napi);
6357 	tg3_reset_task_schedule(tp);
6358 	return work_done;
6359 }
6360 
6361 static void tg3_process_error(struct tg3 *tp)
6362 {
6363 	u32 val;
6364 	bool real_error = false;
6365 
6366 	if (tg3_flag(tp, ERROR_PROCESSED))
6367 		return;
6368 
6369 	/* Check Flow Attention register */
6370 	val = tr32(HOSTCC_FLOW_ATTN);
6371 	if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
6372 		netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
6373 		real_error = true;
6374 	}
6375 
6376 	if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
6377 		netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
6378 		real_error = true;
6379 	}
6380 
6381 	if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
6382 		netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
6383 		real_error = true;
6384 	}
6385 
6386 	if (!real_error)
6387 		return;
6388 
6389 	tg3_dump_state(tp);
6390 
6391 	tg3_flag_set(tp, ERROR_PROCESSED);
6392 	tg3_reset_task_schedule(tp);
6393 }
6394 
6395 static int tg3_poll(struct napi_struct *napi, int budget)
6396 {
6397 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6398 	struct tg3 *tp = tnapi->tp;
6399 	int work_done = 0;
6400 	struct tg3_hw_status *sblk = tnapi->hw_status;
6401 
6402 	while (1) {
6403 		if (sblk->status & SD_STATUS_ERROR)
6404 			tg3_process_error(tp);
6405 
6406 		tg3_poll_link(tp);
6407 
6408 		work_done = tg3_poll_work(tnapi, work_done, budget);
6409 
6410 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6411 			goto tx_recovery;
6412 
6413 		if (unlikely(work_done >= budget))
6414 			break;
6415 
6416 		if (tg3_flag(tp, TAGGED_STATUS)) {
6417 			/* tp->last_tag is used in tg3_int_reenable() below
6418 			 * to tell the hw how much work has been processed,
6419 			 * so we must read it before checking for more work.
6420 			 */
6421 			tnapi->last_tag = sblk->status_tag;
6422 			tnapi->last_irq_tag = tnapi->last_tag;
6423 			rmb();
6424 		} else
6425 			sblk->status &= ~SD_STATUS_UPDATED;
6426 
6427 		if (likely(!tg3_has_work(tnapi))) {
6428 			napi_complete(napi);
6429 			tg3_int_reenable(tnapi);
6430 			break;
6431 		}
6432 	}
6433 
6434 	return work_done;
6435 
6436 tx_recovery:
6437 	/* work_done is guaranteed to be less than budget. */
6438 	napi_complete(napi);
6439 	tg3_reset_task_schedule(tp);
6440 	return work_done;
6441 }
6442 
6443 static void tg3_napi_disable(struct tg3 *tp)
6444 {
6445 	int i;
6446 
6447 	for (i = tp->irq_cnt - 1; i >= 0; i--)
6448 		napi_disable(&tp->napi[i].napi);
6449 }
6450 
6451 static void tg3_napi_enable(struct tg3 *tp)
6452 {
6453 	int i;
6454 
6455 	for (i = 0; i < tp->irq_cnt; i++)
6456 		napi_enable(&tp->napi[i].napi);
6457 }
6458 
6459 static void tg3_napi_init(struct tg3 *tp)
6460 {
6461 	int i;
6462 
6463 	netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
6464 	for (i = 1; i < tp->irq_cnt; i++)
6465 		netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
6466 }
6467 
6468 static void tg3_napi_fini(struct tg3 *tp)
6469 {
6470 	int i;
6471 
6472 	for (i = 0; i < tp->irq_cnt; i++)
6473 		netif_napi_del(&tp->napi[i].napi);
6474 }
6475 
6476 static inline void tg3_netif_stop(struct tg3 *tp)
6477 {
6478 	tp->dev->trans_start = jiffies;	/* prevent tx timeout */
6479 	tg3_napi_disable(tp);
6480 	netif_tx_disable(tp->dev);
6481 }
6482 
6483 static inline void tg3_netif_start(struct tg3 *tp)
6484 {
6485 	/* NOTE: unconditional netif_tx_wake_all_queues is only
6486 	 * appropriate so long as all callers are assured to
6487 	 * have free tx slots (such as after tg3_init_hw)
6488 	 */
6489 	netif_tx_wake_all_queues(tp->dev);
6490 
6491 	tg3_napi_enable(tp);
6492 	tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
6493 	tg3_enable_ints(tp);
6494 }
6495 
6496 static void tg3_irq_quiesce(struct tg3 *tp)
6497 {
6498 	int i;
6499 
6500 	BUG_ON(tp->irq_sync);
6501 
6502 	tp->irq_sync = 1;
6503 	smp_mb();
6504 
6505 	for (i = 0; i < tp->irq_cnt; i++)
6506 		synchronize_irq(tp->napi[i].irq_vec);
6507 }
6508 
6509 /* Fully shutdown all tg3 driver activity elsewhere in the system.
6510  * If irq_sync is non-zero, then the IRQ handler must be synchronized
6511  * with as well.  Most of the time, this is not necessary except when
6512  * shutting down the device.
6513  */
6514 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
6515 {
6516 	spin_lock_bh(&tp->lock);
6517 	if (irq_sync)
6518 		tg3_irq_quiesce(tp);
6519 }
6520 
6521 static inline void tg3_full_unlock(struct tg3 *tp)
6522 {
6523 	spin_unlock_bh(&tp->lock);
6524 }
6525 
6526 /* One-shot MSI handler - Chip automatically disables interrupt
6527  * after sending MSI so driver doesn't have to do it.
6528  */
6529 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
6530 {
6531 	struct tg3_napi *tnapi = dev_id;
6532 	struct tg3 *tp = tnapi->tp;
6533 
6534 	prefetch(tnapi->hw_status);
6535 	if (tnapi->rx_rcb)
6536 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6537 
6538 	if (likely(!tg3_irq_sync(tp)))
6539 		napi_schedule(&tnapi->napi);
6540 
6541 	return IRQ_HANDLED;
6542 }
6543 
6544 /* MSI ISR - No need to check for interrupt sharing and no need to
6545  * flush status block and interrupt mailbox. PCI ordering rules
6546  * guarantee that MSI will arrive after the status block.
6547  */
6548 static irqreturn_t tg3_msi(int irq, void *dev_id)
6549 {
6550 	struct tg3_napi *tnapi = dev_id;
6551 	struct tg3 *tp = tnapi->tp;
6552 
6553 	prefetch(tnapi->hw_status);
6554 	if (tnapi->rx_rcb)
6555 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6556 	/*
6557 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6558 	 * chip-internal interrupt pending events.
6559 	 * Writing non-zero to intr-mbox-0 additional tells the
6560 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6561 	 * event coalescing.
6562 	 */
6563 	tw32_mailbox(tnapi->int_mbox, 0x00000001);
6564 	if (likely(!tg3_irq_sync(tp)))
6565 		napi_schedule(&tnapi->napi);
6566 
6567 	return IRQ_RETVAL(1);
6568 }
6569 
6570 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
6571 {
6572 	struct tg3_napi *tnapi = dev_id;
6573 	struct tg3 *tp = tnapi->tp;
6574 	struct tg3_hw_status *sblk = tnapi->hw_status;
6575 	unsigned int handled = 1;
6576 
6577 	/* In INTx mode, it is possible for the interrupt to arrive at
6578 	 * the CPU before the status block posted prior to the interrupt.
6579 	 * Reading the PCI State register will confirm whether the
6580 	 * interrupt is ours and will flush the status block.
6581 	 */
6582 	if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
6583 		if (tg3_flag(tp, CHIP_RESETTING) ||
6584 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6585 			handled = 0;
6586 			goto out;
6587 		}
6588 	}
6589 
6590 	/*
6591 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6592 	 * chip-internal interrupt pending events.
6593 	 * Writing non-zero to intr-mbox-0 additional tells the
6594 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6595 	 * event coalescing.
6596 	 *
6597 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6598 	 * spurious interrupts.  The flush impacts performance but
6599 	 * excessive spurious interrupts can be worse in some cases.
6600 	 */
6601 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6602 	if (tg3_irq_sync(tp))
6603 		goto out;
6604 	sblk->status &= ~SD_STATUS_UPDATED;
6605 	if (likely(tg3_has_work(tnapi))) {
6606 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6607 		napi_schedule(&tnapi->napi);
6608 	} else {
6609 		/* No work, shared interrupt perhaps?  re-enable
6610 		 * interrupts, and flush that PCI write
6611 		 */
6612 		tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
6613 			       0x00000000);
6614 	}
6615 out:
6616 	return IRQ_RETVAL(handled);
6617 }
6618 
6619 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
6620 {
6621 	struct tg3_napi *tnapi = dev_id;
6622 	struct tg3 *tp = tnapi->tp;
6623 	struct tg3_hw_status *sblk = tnapi->hw_status;
6624 	unsigned int handled = 1;
6625 
6626 	/* In INTx mode, it is possible for the interrupt to arrive at
6627 	 * the CPU before the status block posted prior to the interrupt.
6628 	 * Reading the PCI State register will confirm whether the
6629 	 * interrupt is ours and will flush the status block.
6630 	 */
6631 	if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
6632 		if (tg3_flag(tp, CHIP_RESETTING) ||
6633 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6634 			handled = 0;
6635 			goto out;
6636 		}
6637 	}
6638 
6639 	/*
6640 	 * writing any value to intr-mbox-0 clears PCI INTA# and
6641 	 * chip-internal interrupt pending events.
6642 	 * writing non-zero to intr-mbox-0 additional tells the
6643 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6644 	 * event coalescing.
6645 	 *
6646 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6647 	 * spurious interrupts.  The flush impacts performance but
6648 	 * excessive spurious interrupts can be worse in some cases.
6649 	 */
6650 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6651 
6652 	/*
6653 	 * In a shared interrupt configuration, sometimes other devices'
6654 	 * interrupts will scream.  We record the current status tag here
6655 	 * so that the above check can report that the screaming interrupts
6656 	 * are unhandled.  Eventually they will be silenced.
6657 	 */
6658 	tnapi->last_irq_tag = sblk->status_tag;
6659 
6660 	if (tg3_irq_sync(tp))
6661 		goto out;
6662 
6663 	prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6664 
6665 	napi_schedule(&tnapi->napi);
6666 
6667 out:
6668 	return IRQ_RETVAL(handled);
6669 }
6670 
6671 /* ISR for interrupt test */
6672 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
6673 {
6674 	struct tg3_napi *tnapi = dev_id;
6675 	struct tg3 *tp = tnapi->tp;
6676 	struct tg3_hw_status *sblk = tnapi->hw_status;
6677 
6678 	if ((sblk->status & SD_STATUS_UPDATED) ||
6679 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6680 		tg3_disable_ints(tp);
6681 		return IRQ_RETVAL(1);
6682 	}
6683 	return IRQ_RETVAL(0);
6684 }
6685 
6686 #ifdef CONFIG_NET_POLL_CONTROLLER
6687 static void tg3_poll_controller(struct net_device *dev)
6688 {
6689 	int i;
6690 	struct tg3 *tp = netdev_priv(dev);
6691 
6692 	for (i = 0; i < tp->irq_cnt; i++)
6693 		tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
6694 }
6695 #endif
6696 
6697 static void tg3_tx_timeout(struct net_device *dev)
6698 {
6699 	struct tg3 *tp = netdev_priv(dev);
6700 
6701 	if (netif_msg_tx_err(tp)) {
6702 		netdev_err(dev, "transmit timed out, resetting\n");
6703 		tg3_dump_state(tp);
6704 	}
6705 
6706 	tg3_reset_task_schedule(tp);
6707 }
6708 
6709 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
6710 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
6711 {
6712 	u32 base = (u32) mapping & 0xffffffff;
6713 
6714 	return (base > 0xffffdcc0) && (base + len + 8 < base);
6715 }
6716 
6717 /* Test for DMA addresses > 40-bit */
6718 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
6719 					  int len)
6720 {
6721 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
6722 	if (tg3_flag(tp, 40BIT_DMA_BUG))
6723 		return ((u64) mapping + len) > DMA_BIT_MASK(40);
6724 	return 0;
6725 #else
6726 	return 0;
6727 #endif
6728 }
6729 
6730 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
6731 				 dma_addr_t mapping, u32 len, u32 flags,
6732 				 u32 mss, u32 vlan)
6733 {
6734 	txbd->addr_hi = ((u64) mapping >> 32);
6735 	txbd->addr_lo = ((u64) mapping & 0xffffffff);
6736 	txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
6737 	txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
6738 }
6739 
6740 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
6741 			    dma_addr_t map, u32 len, u32 flags,
6742 			    u32 mss, u32 vlan)
6743 {
6744 	struct tg3 *tp = tnapi->tp;
6745 	bool hwbug = false;
6746 
6747 	if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
6748 		hwbug = true;
6749 
6750 	if (tg3_4g_overflow_test(map, len))
6751 		hwbug = true;
6752 
6753 	if (tg3_40bit_overflow_test(tp, map, len))
6754 		hwbug = true;
6755 
6756 	if (tp->dma_limit) {
6757 		u32 prvidx = *entry;
6758 		u32 tmp_flag = flags & ~TXD_FLAG_END;
6759 		while (len > tp->dma_limit && *budget) {
6760 			u32 frag_len = tp->dma_limit;
6761 			len -= tp->dma_limit;
6762 
6763 			/* Avoid the 8byte DMA problem */
6764 			if (len <= 8) {
6765 				len += tp->dma_limit / 2;
6766 				frag_len = tp->dma_limit / 2;
6767 			}
6768 
6769 			tnapi->tx_buffers[*entry].fragmented = true;
6770 
6771 			tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6772 				      frag_len, tmp_flag, mss, vlan);
6773 			*budget -= 1;
6774 			prvidx = *entry;
6775 			*entry = NEXT_TX(*entry);
6776 
6777 			map += frag_len;
6778 		}
6779 
6780 		if (len) {
6781 			if (*budget) {
6782 				tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6783 					      len, flags, mss, vlan);
6784 				*budget -= 1;
6785 				*entry = NEXT_TX(*entry);
6786 			} else {
6787 				hwbug = true;
6788 				tnapi->tx_buffers[prvidx].fragmented = false;
6789 			}
6790 		}
6791 	} else {
6792 		tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6793 			      len, flags, mss, vlan);
6794 		*entry = NEXT_TX(*entry);
6795 	}
6796 
6797 	return hwbug;
6798 }
6799 
6800 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
6801 {
6802 	int i;
6803 	struct sk_buff *skb;
6804 	struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
6805 
6806 	skb = txb->skb;
6807 	txb->skb = NULL;
6808 
6809 	pci_unmap_single(tnapi->tp->pdev,
6810 			 dma_unmap_addr(txb, mapping),
6811 			 skb_headlen(skb),
6812 			 PCI_DMA_TODEVICE);
6813 
6814 	while (txb->fragmented) {
6815 		txb->fragmented = false;
6816 		entry = NEXT_TX(entry);
6817 		txb = &tnapi->tx_buffers[entry];
6818 	}
6819 
6820 	for (i = 0; i <= last; i++) {
6821 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6822 
6823 		entry = NEXT_TX(entry);
6824 		txb = &tnapi->tx_buffers[entry];
6825 
6826 		pci_unmap_page(tnapi->tp->pdev,
6827 			       dma_unmap_addr(txb, mapping),
6828 			       skb_frag_size(frag), PCI_DMA_TODEVICE);
6829 
6830 		while (txb->fragmented) {
6831 			txb->fragmented = false;
6832 			entry = NEXT_TX(entry);
6833 			txb = &tnapi->tx_buffers[entry];
6834 		}
6835 	}
6836 }
6837 
6838 /* Workaround 4GB and 40-bit hardware DMA bugs. */
6839 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
6840 				       struct sk_buff **pskb,
6841 				       u32 *entry, u32 *budget,
6842 				       u32 base_flags, u32 mss, u32 vlan)
6843 {
6844 	struct tg3 *tp = tnapi->tp;
6845 	struct sk_buff *new_skb, *skb = *pskb;
6846 	dma_addr_t new_addr = 0;
6847 	int ret = 0;
6848 
6849 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
6850 		new_skb = skb_copy(skb, GFP_ATOMIC);
6851 	else {
6852 		int more_headroom = 4 - ((unsigned long)skb->data & 3);
6853 
6854 		new_skb = skb_copy_expand(skb,
6855 					  skb_headroom(skb) + more_headroom,
6856 					  skb_tailroom(skb), GFP_ATOMIC);
6857 	}
6858 
6859 	if (!new_skb) {
6860 		ret = -1;
6861 	} else {
6862 		/* New SKB is guaranteed to be linear. */
6863 		new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
6864 					  PCI_DMA_TODEVICE);
6865 		/* Make sure the mapping succeeded */
6866 		if (pci_dma_mapping_error(tp->pdev, new_addr)) {
6867 			dev_kfree_skb(new_skb);
6868 			ret = -1;
6869 		} else {
6870 			u32 save_entry = *entry;
6871 
6872 			base_flags |= TXD_FLAG_END;
6873 
6874 			tnapi->tx_buffers[*entry].skb = new_skb;
6875 			dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
6876 					   mapping, new_addr);
6877 
6878 			if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
6879 					    new_skb->len, base_flags,
6880 					    mss, vlan)) {
6881 				tg3_tx_skb_unmap(tnapi, save_entry, -1);
6882 				dev_kfree_skb(new_skb);
6883 				ret = -1;
6884 			}
6885 		}
6886 	}
6887 
6888 	dev_kfree_skb(skb);
6889 	*pskb = new_skb;
6890 	return ret;
6891 }
6892 
6893 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
6894 
6895 /* Use GSO to workaround a rare TSO bug that may be triggered when the
6896  * TSO header is greater than 80 bytes.
6897  */
6898 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
6899 {
6900 	struct sk_buff *segs, *nskb;
6901 	u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
6902 
6903 	/* Estimate the number of fragments in the worst case */
6904 	if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
6905 		netif_stop_queue(tp->dev);
6906 
6907 		/* netif_tx_stop_queue() must be done before checking
6908 		 * checking tx index in tg3_tx_avail() below, because in
6909 		 * tg3_tx(), we update tx index before checking for
6910 		 * netif_tx_queue_stopped().
6911 		 */
6912 		smp_mb();
6913 		if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
6914 			return NETDEV_TX_BUSY;
6915 
6916 		netif_wake_queue(tp->dev);
6917 	}
6918 
6919 	segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
6920 	if (IS_ERR(segs))
6921 		goto tg3_tso_bug_end;
6922 
6923 	do {
6924 		nskb = segs;
6925 		segs = segs->next;
6926 		nskb->next = NULL;
6927 		tg3_start_xmit(nskb, tp->dev);
6928 	} while (segs);
6929 
6930 tg3_tso_bug_end:
6931 	dev_kfree_skb(skb);
6932 
6933 	return NETDEV_TX_OK;
6934 }
6935 
6936 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
6937  * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
6938  */
6939 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6940 {
6941 	struct tg3 *tp = netdev_priv(dev);
6942 	u32 len, entry, base_flags, mss, vlan = 0;
6943 	u32 budget;
6944 	int i = -1, would_hit_hwbug;
6945 	dma_addr_t mapping;
6946 	struct tg3_napi *tnapi;
6947 	struct netdev_queue *txq;
6948 	unsigned int last;
6949 
6950 	txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
6951 	tnapi = &tp->napi[skb_get_queue_mapping(skb)];
6952 	if (tg3_flag(tp, ENABLE_TSS))
6953 		tnapi++;
6954 
6955 	budget = tg3_tx_avail(tnapi);
6956 
6957 	/* We are running in BH disabled context with netif_tx_lock
6958 	 * and TX reclaim runs via tp->napi.poll inside of a software
6959 	 * interrupt.  Furthermore, IRQ processing runs lockless so we have
6960 	 * no IRQ context deadlocks to worry about either.  Rejoice!
6961 	 */
6962 	if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
6963 		if (!netif_tx_queue_stopped(txq)) {
6964 			netif_tx_stop_queue(txq);
6965 
6966 			/* This is a hard error, log it. */
6967 			netdev_err(dev,
6968 				   "BUG! Tx Ring full when queue awake!\n");
6969 		}
6970 		return NETDEV_TX_BUSY;
6971 	}
6972 
6973 	entry = tnapi->tx_prod;
6974 	base_flags = 0;
6975 	if (skb->ip_summed == CHECKSUM_PARTIAL)
6976 		base_flags |= TXD_FLAG_TCPUDP_CSUM;
6977 
6978 	mss = skb_shinfo(skb)->gso_size;
6979 	if (mss) {
6980 		struct iphdr *iph;
6981 		u32 tcp_opt_len, hdr_len;
6982 
6983 		if (skb_header_cloned(skb) &&
6984 		    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
6985 			goto drop;
6986 
6987 		iph = ip_hdr(skb);
6988 		tcp_opt_len = tcp_optlen(skb);
6989 
6990 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
6991 
6992 		if (!skb_is_gso_v6(skb)) {
6993 			iph->check = 0;
6994 			iph->tot_len = htons(mss + hdr_len);
6995 		}
6996 
6997 		if (unlikely((ETH_HLEN + hdr_len) > 80) &&
6998 		    tg3_flag(tp, TSO_BUG))
6999 			return tg3_tso_bug(tp, skb);
7000 
7001 		base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7002 			       TXD_FLAG_CPU_POST_DMA);
7003 
7004 		if (tg3_flag(tp, HW_TSO_1) ||
7005 		    tg3_flag(tp, HW_TSO_2) ||
7006 		    tg3_flag(tp, HW_TSO_3)) {
7007 			tcp_hdr(skb)->check = 0;
7008 			base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7009 		} else
7010 			tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
7011 								 iph->daddr, 0,
7012 								 IPPROTO_TCP,
7013 								 0);
7014 
7015 		if (tg3_flag(tp, HW_TSO_3)) {
7016 			mss |= (hdr_len & 0xc) << 12;
7017 			if (hdr_len & 0x10)
7018 				base_flags |= 0x00000010;
7019 			base_flags |= (hdr_len & 0x3e0) << 5;
7020 		} else if (tg3_flag(tp, HW_TSO_2))
7021 			mss |= hdr_len << 9;
7022 		else if (tg3_flag(tp, HW_TSO_1) ||
7023 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
7024 			if (tcp_opt_len || iph->ihl > 5) {
7025 				int tsflags;
7026 
7027 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7028 				mss |= (tsflags << 11);
7029 			}
7030 		} else {
7031 			if (tcp_opt_len || iph->ihl > 5) {
7032 				int tsflags;
7033 
7034 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7035 				base_flags |= tsflags << 12;
7036 			}
7037 		}
7038 	}
7039 
7040 	if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
7041 	    !mss && skb->len > VLAN_ETH_FRAME_LEN)
7042 		base_flags |= TXD_FLAG_JMB_PKT;
7043 
7044 	if (vlan_tx_tag_present(skb)) {
7045 		base_flags |= TXD_FLAG_VLAN;
7046 		vlan = vlan_tx_tag_get(skb);
7047 	}
7048 
7049 	len = skb_headlen(skb);
7050 
7051 	mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
7052 	if (pci_dma_mapping_error(tp->pdev, mapping))
7053 		goto drop;
7054 
7055 
7056 	tnapi->tx_buffers[entry].skb = skb;
7057 	dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
7058 
7059 	would_hit_hwbug = 0;
7060 
7061 	if (tg3_flag(tp, 5701_DMA_BUG))
7062 		would_hit_hwbug = 1;
7063 
7064 	if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
7065 			  ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
7066 			    mss, vlan)) {
7067 		would_hit_hwbug = 1;
7068 	} else if (skb_shinfo(skb)->nr_frags > 0) {
7069 		u32 tmp_mss = mss;
7070 
7071 		if (!tg3_flag(tp, HW_TSO_1) &&
7072 		    !tg3_flag(tp, HW_TSO_2) &&
7073 		    !tg3_flag(tp, HW_TSO_3))
7074 			tmp_mss = 0;
7075 
7076 		/* Now loop through additional data
7077 		 * fragments, and queue them.
7078 		 */
7079 		last = skb_shinfo(skb)->nr_frags - 1;
7080 		for (i = 0; i <= last; i++) {
7081 			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7082 
7083 			len = skb_frag_size(frag);
7084 			mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
7085 						   len, DMA_TO_DEVICE);
7086 
7087 			tnapi->tx_buffers[entry].skb = NULL;
7088 			dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
7089 					   mapping);
7090 			if (dma_mapping_error(&tp->pdev->dev, mapping))
7091 				goto dma_error;
7092 
7093 			if (!budget ||
7094 			    tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
7095 					    len, base_flags |
7096 					    ((i == last) ? TXD_FLAG_END : 0),
7097 					    tmp_mss, vlan)) {
7098 				would_hit_hwbug = 1;
7099 				break;
7100 			}
7101 		}
7102 	}
7103 
7104 	if (would_hit_hwbug) {
7105 		tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
7106 
7107 		/* If the workaround fails due to memory/mapping
7108 		 * failure, silently drop this packet.
7109 		 */
7110 		entry = tnapi->tx_prod;
7111 		budget = tg3_tx_avail(tnapi);
7112 		if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
7113 						base_flags, mss, vlan))
7114 			goto drop_nofree;
7115 	}
7116 
7117 	skb_tx_timestamp(skb);
7118 	netdev_tx_sent_queue(txq, skb->len);
7119 
7120 	/* Sync BD data before updating mailbox */
7121 	wmb();
7122 
7123 	/* Packets are ready, update Tx producer idx local and on card. */
7124 	tw32_tx_mbox(tnapi->prodmbox, entry);
7125 
7126 	tnapi->tx_prod = entry;
7127 	if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
7128 		netif_tx_stop_queue(txq);
7129 
7130 		/* netif_tx_stop_queue() must be done before checking
7131 		 * checking tx index in tg3_tx_avail() below, because in
7132 		 * tg3_tx(), we update tx index before checking for
7133 		 * netif_tx_queue_stopped().
7134 		 */
7135 		smp_mb();
7136 		if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
7137 			netif_tx_wake_queue(txq);
7138 	}
7139 
7140 	mmiowb();
7141 	return NETDEV_TX_OK;
7142 
7143 dma_error:
7144 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
7145 	tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
7146 drop:
7147 	dev_kfree_skb(skb);
7148 drop_nofree:
7149 	tp->tx_dropped++;
7150 	return NETDEV_TX_OK;
7151 }
7152 
7153 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
7154 {
7155 	if (enable) {
7156 		tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
7157 				  MAC_MODE_PORT_MODE_MASK);
7158 
7159 		tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
7160 
7161 		if (!tg3_flag(tp, 5705_PLUS))
7162 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
7163 
7164 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
7165 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
7166 		else
7167 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
7168 	} else {
7169 		tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
7170 
7171 		if (tg3_flag(tp, 5705_PLUS) ||
7172 		    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
7173 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
7174 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
7175 	}
7176 
7177 	tw32(MAC_MODE, tp->mac_mode);
7178 	udelay(40);
7179 }
7180 
7181 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
7182 {
7183 	u32 val, bmcr, mac_mode, ptest = 0;
7184 
7185 	tg3_phy_toggle_apd(tp, false);
7186 	tg3_phy_toggle_automdix(tp, 0);
7187 
7188 	if (extlpbk && tg3_phy_set_extloopbk(tp))
7189 		return -EIO;
7190 
7191 	bmcr = BMCR_FULLDPLX;
7192 	switch (speed) {
7193 	case SPEED_10:
7194 		break;
7195 	case SPEED_100:
7196 		bmcr |= BMCR_SPEED100;
7197 		break;
7198 	case SPEED_1000:
7199 	default:
7200 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
7201 			speed = SPEED_100;
7202 			bmcr |= BMCR_SPEED100;
7203 		} else {
7204 			speed = SPEED_1000;
7205 			bmcr |= BMCR_SPEED1000;
7206 		}
7207 	}
7208 
7209 	if (extlpbk) {
7210 		if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
7211 			tg3_readphy(tp, MII_CTRL1000, &val);
7212 			val |= CTL1000_AS_MASTER |
7213 			       CTL1000_ENABLE_MASTER;
7214 			tg3_writephy(tp, MII_CTRL1000, val);
7215 		} else {
7216 			ptest = MII_TG3_FET_PTEST_TRIM_SEL |
7217 				MII_TG3_FET_PTEST_TRIM_2;
7218 			tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
7219 		}
7220 	} else
7221 		bmcr |= BMCR_LOOPBACK;
7222 
7223 	tg3_writephy(tp, MII_BMCR, bmcr);
7224 
7225 	/* The write needs to be flushed for the FETs */
7226 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
7227 		tg3_readphy(tp, MII_BMCR, &bmcr);
7228 
7229 	udelay(40);
7230 
7231 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
7232 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
7233 		tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
7234 			     MII_TG3_FET_PTEST_FRC_TX_LINK |
7235 			     MII_TG3_FET_PTEST_FRC_TX_LOCK);
7236 
7237 		/* The write needs to be flushed for the AC131 */
7238 		tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
7239 	}
7240 
7241 	/* Reset to prevent losing 1st rx packet intermittently */
7242 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
7243 	    tg3_flag(tp, 5780_CLASS)) {
7244 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7245 		udelay(10);
7246 		tw32_f(MAC_RX_MODE, tp->rx_mode);
7247 	}
7248 
7249 	mac_mode = tp->mac_mode &
7250 		   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
7251 	if (speed == SPEED_1000)
7252 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
7253 	else
7254 		mac_mode |= MAC_MODE_PORT_MODE_MII;
7255 
7256 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
7257 		u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
7258 
7259 		if (masked_phy_id == TG3_PHY_ID_BCM5401)
7260 			mac_mode &= ~MAC_MODE_LINK_POLARITY;
7261 		else if (masked_phy_id == TG3_PHY_ID_BCM5411)
7262 			mac_mode |= MAC_MODE_LINK_POLARITY;
7263 
7264 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
7265 			     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
7266 	}
7267 
7268 	tw32(MAC_MODE, mac_mode);
7269 	udelay(40);
7270 
7271 	return 0;
7272 }
7273 
7274 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
7275 {
7276 	struct tg3 *tp = netdev_priv(dev);
7277 
7278 	if (features & NETIF_F_LOOPBACK) {
7279 		if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
7280 			return;
7281 
7282 		spin_lock_bh(&tp->lock);
7283 		tg3_mac_loopback(tp, true);
7284 		netif_carrier_on(tp->dev);
7285 		spin_unlock_bh(&tp->lock);
7286 		netdev_info(dev, "Internal MAC loopback mode enabled.\n");
7287 	} else {
7288 		if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
7289 			return;
7290 
7291 		spin_lock_bh(&tp->lock);
7292 		tg3_mac_loopback(tp, false);
7293 		/* Force link status check */
7294 		tg3_setup_phy(tp, 1);
7295 		spin_unlock_bh(&tp->lock);
7296 		netdev_info(dev, "Internal MAC loopback mode disabled.\n");
7297 	}
7298 }
7299 
7300 static netdev_features_t tg3_fix_features(struct net_device *dev,
7301 	netdev_features_t features)
7302 {
7303 	struct tg3 *tp = netdev_priv(dev);
7304 
7305 	if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
7306 		features &= ~NETIF_F_ALL_TSO;
7307 
7308 	return features;
7309 }
7310 
7311 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
7312 {
7313 	netdev_features_t changed = dev->features ^ features;
7314 
7315 	if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
7316 		tg3_set_loopback(dev, features);
7317 
7318 	return 0;
7319 }
7320 
7321 static void tg3_rx_prodring_free(struct tg3 *tp,
7322 				 struct tg3_rx_prodring_set *tpr)
7323 {
7324 	int i;
7325 
7326 	if (tpr != &tp->napi[0].prodring) {
7327 		for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
7328 		     i = (i + 1) & tp->rx_std_ring_mask)
7329 			tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7330 					tp->rx_pkt_map_sz);
7331 
7332 		if (tg3_flag(tp, JUMBO_CAPABLE)) {
7333 			for (i = tpr->rx_jmb_cons_idx;
7334 			     i != tpr->rx_jmb_prod_idx;
7335 			     i = (i + 1) & tp->rx_jmb_ring_mask) {
7336 				tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7337 						TG3_RX_JMB_MAP_SZ);
7338 			}
7339 		}
7340 
7341 		return;
7342 	}
7343 
7344 	for (i = 0; i <= tp->rx_std_ring_mask; i++)
7345 		tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7346 				tp->rx_pkt_map_sz);
7347 
7348 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7349 		for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
7350 			tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7351 					TG3_RX_JMB_MAP_SZ);
7352 	}
7353 }
7354 
7355 /* Initialize rx rings for packet processing.
7356  *
7357  * The chip has been shut down and the driver detached from
7358  * the networking, so no interrupts or new tx packets will
7359  * end up in the driver.  tp->{tx,}lock are held and thus
7360  * we may not sleep.
7361  */
7362 static int tg3_rx_prodring_alloc(struct tg3 *tp,
7363 				 struct tg3_rx_prodring_set *tpr)
7364 {
7365 	u32 i, rx_pkt_dma_sz;
7366 
7367 	tpr->rx_std_cons_idx = 0;
7368 	tpr->rx_std_prod_idx = 0;
7369 	tpr->rx_jmb_cons_idx = 0;
7370 	tpr->rx_jmb_prod_idx = 0;
7371 
7372 	if (tpr != &tp->napi[0].prodring) {
7373 		memset(&tpr->rx_std_buffers[0], 0,
7374 		       TG3_RX_STD_BUFF_RING_SIZE(tp));
7375 		if (tpr->rx_jmb_buffers)
7376 			memset(&tpr->rx_jmb_buffers[0], 0,
7377 			       TG3_RX_JMB_BUFF_RING_SIZE(tp));
7378 		goto done;
7379 	}
7380 
7381 	/* Zero out all descriptors. */
7382 	memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
7383 
7384 	rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
7385 	if (tg3_flag(tp, 5780_CLASS) &&
7386 	    tp->dev->mtu > ETH_DATA_LEN)
7387 		rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
7388 	tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
7389 
7390 	/* Initialize invariants of the rings, we only set this
7391 	 * stuff once.  This works because the card does not
7392 	 * write into the rx buffer posting rings.
7393 	 */
7394 	for (i = 0; i <= tp->rx_std_ring_mask; i++) {
7395 		struct tg3_rx_buffer_desc *rxd;
7396 
7397 		rxd = &tpr->rx_std[i];
7398 		rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
7399 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
7400 		rxd->opaque = (RXD_OPAQUE_RING_STD |
7401 			       (i << RXD_OPAQUE_INDEX_SHIFT));
7402 	}
7403 
7404 	/* Now allocate fresh SKBs for each rx ring. */
7405 	for (i = 0; i < tp->rx_pending; i++) {
7406 		unsigned int frag_size;
7407 
7408 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
7409 				      &frag_size) < 0) {
7410 			netdev_warn(tp->dev,
7411 				    "Using a smaller RX standard ring. Only "
7412 				    "%d out of %d buffers were allocated "
7413 				    "successfully\n", i, tp->rx_pending);
7414 			if (i == 0)
7415 				goto initfail;
7416 			tp->rx_pending = i;
7417 			break;
7418 		}
7419 	}
7420 
7421 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
7422 		goto done;
7423 
7424 	memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
7425 
7426 	if (!tg3_flag(tp, JUMBO_RING_ENABLE))
7427 		goto done;
7428 
7429 	for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
7430 		struct tg3_rx_buffer_desc *rxd;
7431 
7432 		rxd = &tpr->rx_jmb[i].std;
7433 		rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
7434 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
7435 				  RXD_FLAG_JUMBO;
7436 		rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
7437 		       (i << RXD_OPAQUE_INDEX_SHIFT));
7438 	}
7439 
7440 	for (i = 0; i < tp->rx_jumbo_pending; i++) {
7441 		unsigned int frag_size;
7442 
7443 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
7444 				      &frag_size) < 0) {
7445 			netdev_warn(tp->dev,
7446 				    "Using a smaller RX jumbo ring. Only %d "
7447 				    "out of %d buffers were allocated "
7448 				    "successfully\n", i, tp->rx_jumbo_pending);
7449 			if (i == 0)
7450 				goto initfail;
7451 			tp->rx_jumbo_pending = i;
7452 			break;
7453 		}
7454 	}
7455 
7456 done:
7457 	return 0;
7458 
7459 initfail:
7460 	tg3_rx_prodring_free(tp, tpr);
7461 	return -ENOMEM;
7462 }
7463 
7464 static void tg3_rx_prodring_fini(struct tg3 *tp,
7465 				 struct tg3_rx_prodring_set *tpr)
7466 {
7467 	kfree(tpr->rx_std_buffers);
7468 	tpr->rx_std_buffers = NULL;
7469 	kfree(tpr->rx_jmb_buffers);
7470 	tpr->rx_jmb_buffers = NULL;
7471 	if (tpr->rx_std) {
7472 		dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
7473 				  tpr->rx_std, tpr->rx_std_mapping);
7474 		tpr->rx_std = NULL;
7475 	}
7476 	if (tpr->rx_jmb) {
7477 		dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
7478 				  tpr->rx_jmb, tpr->rx_jmb_mapping);
7479 		tpr->rx_jmb = NULL;
7480 	}
7481 }
7482 
7483 static int tg3_rx_prodring_init(struct tg3 *tp,
7484 				struct tg3_rx_prodring_set *tpr)
7485 {
7486 	tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
7487 				      GFP_KERNEL);
7488 	if (!tpr->rx_std_buffers)
7489 		return -ENOMEM;
7490 
7491 	tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
7492 					 TG3_RX_STD_RING_BYTES(tp),
7493 					 &tpr->rx_std_mapping,
7494 					 GFP_KERNEL);
7495 	if (!tpr->rx_std)
7496 		goto err_out;
7497 
7498 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7499 		tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
7500 					      GFP_KERNEL);
7501 		if (!tpr->rx_jmb_buffers)
7502 			goto err_out;
7503 
7504 		tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
7505 						 TG3_RX_JMB_RING_BYTES(tp),
7506 						 &tpr->rx_jmb_mapping,
7507 						 GFP_KERNEL);
7508 		if (!tpr->rx_jmb)
7509 			goto err_out;
7510 	}
7511 
7512 	return 0;
7513 
7514 err_out:
7515 	tg3_rx_prodring_fini(tp, tpr);
7516 	return -ENOMEM;
7517 }
7518 
7519 /* Free up pending packets in all rx/tx rings.
7520  *
7521  * The chip has been shut down and the driver detached from
7522  * the networking, so no interrupts or new tx packets will
7523  * end up in the driver.  tp->{tx,}lock is not held and we are not
7524  * in an interrupt context and thus may sleep.
7525  */
7526 static void tg3_free_rings(struct tg3 *tp)
7527 {
7528 	int i, j;
7529 
7530 	for (j = 0; j < tp->irq_cnt; j++) {
7531 		struct tg3_napi *tnapi = &tp->napi[j];
7532 
7533 		tg3_rx_prodring_free(tp, &tnapi->prodring);
7534 
7535 		if (!tnapi->tx_buffers)
7536 			continue;
7537 
7538 		for (i = 0; i < TG3_TX_RING_SIZE; i++) {
7539 			struct sk_buff *skb = tnapi->tx_buffers[i].skb;
7540 
7541 			if (!skb)
7542 				continue;
7543 
7544 			tg3_tx_skb_unmap(tnapi, i,
7545 					 skb_shinfo(skb)->nr_frags - 1);
7546 
7547 			dev_kfree_skb_any(skb);
7548 		}
7549 		netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
7550 	}
7551 }
7552 
7553 /* Initialize tx/rx rings for packet processing.
7554  *
7555  * The chip has been shut down and the driver detached from
7556  * the networking, so no interrupts or new tx packets will
7557  * end up in the driver.  tp->{tx,}lock are held and thus
7558  * we may not sleep.
7559  */
7560 static int tg3_init_rings(struct tg3 *tp)
7561 {
7562 	int i;
7563 
7564 	/* Free up all the SKBs. */
7565 	tg3_free_rings(tp);
7566 
7567 	for (i = 0; i < tp->irq_cnt; i++) {
7568 		struct tg3_napi *tnapi = &tp->napi[i];
7569 
7570 		tnapi->last_tag = 0;
7571 		tnapi->last_irq_tag = 0;
7572 		tnapi->hw_status->status = 0;
7573 		tnapi->hw_status->status_tag = 0;
7574 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7575 
7576 		tnapi->tx_prod = 0;
7577 		tnapi->tx_cons = 0;
7578 		if (tnapi->tx_ring)
7579 			memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
7580 
7581 		tnapi->rx_rcb_ptr = 0;
7582 		if (tnapi->rx_rcb)
7583 			memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7584 
7585 		if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
7586 			tg3_free_rings(tp);
7587 			return -ENOMEM;
7588 		}
7589 	}
7590 
7591 	return 0;
7592 }
7593 
7594 static void tg3_mem_tx_release(struct tg3 *tp)
7595 {
7596 	int i;
7597 
7598 	for (i = 0; i < tp->irq_max; i++) {
7599 		struct tg3_napi *tnapi = &tp->napi[i];
7600 
7601 		if (tnapi->tx_ring) {
7602 			dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
7603 				tnapi->tx_ring, tnapi->tx_desc_mapping);
7604 			tnapi->tx_ring = NULL;
7605 		}
7606 
7607 		kfree(tnapi->tx_buffers);
7608 		tnapi->tx_buffers = NULL;
7609 	}
7610 }
7611 
7612 static int tg3_mem_tx_acquire(struct tg3 *tp)
7613 {
7614 	int i;
7615 	struct tg3_napi *tnapi = &tp->napi[0];
7616 
7617 	/* If multivector TSS is enabled, vector 0 does not handle
7618 	 * tx interrupts.  Don't allocate any resources for it.
7619 	 */
7620 	if (tg3_flag(tp, ENABLE_TSS))
7621 		tnapi++;
7622 
7623 	for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
7624 		tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) *
7625 					    TG3_TX_RING_SIZE, GFP_KERNEL);
7626 		if (!tnapi->tx_buffers)
7627 			goto err_out;
7628 
7629 		tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
7630 						    TG3_TX_RING_BYTES,
7631 						    &tnapi->tx_desc_mapping,
7632 						    GFP_KERNEL);
7633 		if (!tnapi->tx_ring)
7634 			goto err_out;
7635 	}
7636 
7637 	return 0;
7638 
7639 err_out:
7640 	tg3_mem_tx_release(tp);
7641 	return -ENOMEM;
7642 }
7643 
7644 static void tg3_mem_rx_release(struct tg3 *tp)
7645 {
7646 	int i;
7647 
7648 	for (i = 0; i < tp->irq_max; i++) {
7649 		struct tg3_napi *tnapi = &tp->napi[i];
7650 
7651 		tg3_rx_prodring_fini(tp, &tnapi->prodring);
7652 
7653 		if (!tnapi->rx_rcb)
7654 			continue;
7655 
7656 		dma_free_coherent(&tp->pdev->dev,
7657 				  TG3_RX_RCB_RING_BYTES(tp),
7658 				  tnapi->rx_rcb,
7659 				  tnapi->rx_rcb_mapping);
7660 		tnapi->rx_rcb = NULL;
7661 	}
7662 }
7663 
7664 static int tg3_mem_rx_acquire(struct tg3 *tp)
7665 {
7666 	unsigned int i, limit;
7667 
7668 	limit = tp->rxq_cnt;
7669 
7670 	/* If RSS is enabled, we need a (dummy) producer ring
7671 	 * set on vector zero.  This is the true hw prodring.
7672 	 */
7673 	if (tg3_flag(tp, ENABLE_RSS))
7674 		limit++;
7675 
7676 	for (i = 0; i < limit; i++) {
7677 		struct tg3_napi *tnapi = &tp->napi[i];
7678 
7679 		if (tg3_rx_prodring_init(tp, &tnapi->prodring))
7680 			goto err_out;
7681 
7682 		/* If multivector RSS is enabled, vector 0
7683 		 * does not handle rx or tx interrupts.
7684 		 * Don't allocate any resources for it.
7685 		 */
7686 		if (!i && tg3_flag(tp, ENABLE_RSS))
7687 			continue;
7688 
7689 		tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
7690 						   TG3_RX_RCB_RING_BYTES(tp),
7691 						   &tnapi->rx_rcb_mapping,
7692 						   GFP_KERNEL);
7693 		if (!tnapi->rx_rcb)
7694 			goto err_out;
7695 
7696 		memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7697 	}
7698 
7699 	return 0;
7700 
7701 err_out:
7702 	tg3_mem_rx_release(tp);
7703 	return -ENOMEM;
7704 }
7705 
7706 /*
7707  * Must not be invoked with interrupt sources disabled and
7708  * the hardware shutdown down.
7709  */
7710 static void tg3_free_consistent(struct tg3 *tp)
7711 {
7712 	int i;
7713 
7714 	for (i = 0; i < tp->irq_cnt; i++) {
7715 		struct tg3_napi *tnapi = &tp->napi[i];
7716 
7717 		if (tnapi->hw_status) {
7718 			dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
7719 					  tnapi->hw_status,
7720 					  tnapi->status_mapping);
7721 			tnapi->hw_status = NULL;
7722 		}
7723 	}
7724 
7725 	tg3_mem_rx_release(tp);
7726 	tg3_mem_tx_release(tp);
7727 
7728 	if (tp->hw_stats) {
7729 		dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
7730 				  tp->hw_stats, tp->stats_mapping);
7731 		tp->hw_stats = NULL;
7732 	}
7733 }
7734 
7735 /*
7736  * Must not be invoked with interrupt sources disabled and
7737  * the hardware shutdown down.  Can sleep.
7738  */
7739 static int tg3_alloc_consistent(struct tg3 *tp)
7740 {
7741 	int i;
7742 
7743 	tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
7744 					  sizeof(struct tg3_hw_stats),
7745 					  &tp->stats_mapping,
7746 					  GFP_KERNEL);
7747 	if (!tp->hw_stats)
7748 		goto err_out;
7749 
7750 	memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
7751 
7752 	for (i = 0; i < tp->irq_cnt; i++) {
7753 		struct tg3_napi *tnapi = &tp->napi[i];
7754 		struct tg3_hw_status *sblk;
7755 
7756 		tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
7757 						      TG3_HW_STATUS_SIZE,
7758 						      &tnapi->status_mapping,
7759 						      GFP_KERNEL);
7760 		if (!tnapi->hw_status)
7761 			goto err_out;
7762 
7763 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7764 		sblk = tnapi->hw_status;
7765 
7766 		if (tg3_flag(tp, ENABLE_RSS)) {
7767 			u16 *prodptr = NULL;
7768 
7769 			/*
7770 			 * When RSS is enabled, the status block format changes
7771 			 * slightly.  The "rx_jumbo_consumer", "reserved",
7772 			 * and "rx_mini_consumer" members get mapped to the
7773 			 * other three rx return ring producer indexes.
7774 			 */
7775 			switch (i) {
7776 			case 1:
7777 				prodptr = &sblk->idx[0].rx_producer;
7778 				break;
7779 			case 2:
7780 				prodptr = &sblk->rx_jumbo_consumer;
7781 				break;
7782 			case 3:
7783 				prodptr = &sblk->reserved;
7784 				break;
7785 			case 4:
7786 				prodptr = &sblk->rx_mini_consumer;
7787 				break;
7788 			}
7789 			tnapi->rx_rcb_prod_idx = prodptr;
7790 		} else {
7791 			tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
7792 		}
7793 	}
7794 
7795 	if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
7796 		goto err_out;
7797 
7798 	return 0;
7799 
7800 err_out:
7801 	tg3_free_consistent(tp);
7802 	return -ENOMEM;
7803 }
7804 
7805 #define MAX_WAIT_CNT 1000
7806 
7807 /* To stop a block, clear the enable bit and poll till it
7808  * clears.  tp->lock is held.
7809  */
7810 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
7811 {
7812 	unsigned int i;
7813 	u32 val;
7814 
7815 	if (tg3_flag(tp, 5705_PLUS)) {
7816 		switch (ofs) {
7817 		case RCVLSC_MODE:
7818 		case DMAC_MODE:
7819 		case MBFREE_MODE:
7820 		case BUFMGR_MODE:
7821 		case MEMARB_MODE:
7822 			/* We can't enable/disable these bits of the
7823 			 * 5705/5750, just say success.
7824 			 */
7825 			return 0;
7826 
7827 		default:
7828 			break;
7829 		}
7830 	}
7831 
7832 	val = tr32(ofs);
7833 	val &= ~enable_bit;
7834 	tw32_f(ofs, val);
7835 
7836 	for (i = 0; i < MAX_WAIT_CNT; i++) {
7837 		udelay(100);
7838 		val = tr32(ofs);
7839 		if ((val & enable_bit) == 0)
7840 			break;
7841 	}
7842 
7843 	if (i == MAX_WAIT_CNT && !silent) {
7844 		dev_err(&tp->pdev->dev,
7845 			"tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
7846 			ofs, enable_bit);
7847 		return -ENODEV;
7848 	}
7849 
7850 	return 0;
7851 }
7852 
7853 /* tp->lock is held. */
7854 static int tg3_abort_hw(struct tg3 *tp, int silent)
7855 {
7856 	int i, err;
7857 
7858 	tg3_disable_ints(tp);
7859 
7860 	tp->rx_mode &= ~RX_MODE_ENABLE;
7861 	tw32_f(MAC_RX_MODE, tp->rx_mode);
7862 	udelay(10);
7863 
7864 	err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
7865 	err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
7866 	err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
7867 	err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
7868 	err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
7869 	err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
7870 
7871 	err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
7872 	err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
7873 	err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
7874 	err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
7875 	err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
7876 	err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
7877 	err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
7878 
7879 	tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
7880 	tw32_f(MAC_MODE, tp->mac_mode);
7881 	udelay(40);
7882 
7883 	tp->tx_mode &= ~TX_MODE_ENABLE;
7884 	tw32_f(MAC_TX_MODE, tp->tx_mode);
7885 
7886 	for (i = 0; i < MAX_WAIT_CNT; i++) {
7887 		udelay(100);
7888 		if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
7889 			break;
7890 	}
7891 	if (i >= MAX_WAIT_CNT) {
7892 		dev_err(&tp->pdev->dev,
7893 			"%s timed out, TX_MODE_ENABLE will not clear "
7894 			"MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
7895 		err |= -ENODEV;
7896 	}
7897 
7898 	err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
7899 	err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
7900 	err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
7901 
7902 	tw32(FTQ_RESET, 0xffffffff);
7903 	tw32(FTQ_RESET, 0x00000000);
7904 
7905 	err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
7906 	err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
7907 
7908 	for (i = 0; i < tp->irq_cnt; i++) {
7909 		struct tg3_napi *tnapi = &tp->napi[i];
7910 		if (tnapi->hw_status)
7911 			memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7912 	}
7913 
7914 	return err;
7915 }
7916 
7917 /* Save PCI command register before chip reset */
7918 static void tg3_save_pci_state(struct tg3 *tp)
7919 {
7920 	pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
7921 }
7922 
7923 /* Restore PCI state after chip reset */
7924 static void tg3_restore_pci_state(struct tg3 *tp)
7925 {
7926 	u32 val;
7927 
7928 	/* Re-enable indirect register accesses. */
7929 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
7930 			       tp->misc_host_ctrl);
7931 
7932 	/* Set MAX PCI retry to zero. */
7933 	val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
7934 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
7935 	    tg3_flag(tp, PCIX_MODE))
7936 		val |= PCISTATE_RETRY_SAME_DMA;
7937 	/* Allow reads and writes to the APE register and memory space. */
7938 	if (tg3_flag(tp, ENABLE_APE))
7939 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
7940 		       PCISTATE_ALLOW_APE_SHMEM_WR |
7941 		       PCISTATE_ALLOW_APE_PSPACE_WR;
7942 	pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
7943 
7944 	pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
7945 
7946 	if (!tg3_flag(tp, PCI_EXPRESS)) {
7947 		pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
7948 				      tp->pci_cacheline_sz);
7949 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
7950 				      tp->pci_lat_timer);
7951 	}
7952 
7953 	/* Make sure PCI-X relaxed ordering bit is clear. */
7954 	if (tg3_flag(tp, PCIX_MODE)) {
7955 		u16 pcix_cmd;
7956 
7957 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7958 				     &pcix_cmd);
7959 		pcix_cmd &= ~PCI_X_CMD_ERO;
7960 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7961 				      pcix_cmd);
7962 	}
7963 
7964 	if (tg3_flag(tp, 5780_CLASS)) {
7965 
7966 		/* Chip reset on 5780 will reset MSI enable bit,
7967 		 * so need to restore it.
7968 		 */
7969 		if (tg3_flag(tp, USING_MSI)) {
7970 			u16 ctrl;
7971 
7972 			pci_read_config_word(tp->pdev,
7973 					     tp->msi_cap + PCI_MSI_FLAGS,
7974 					     &ctrl);
7975 			pci_write_config_word(tp->pdev,
7976 					      tp->msi_cap + PCI_MSI_FLAGS,
7977 					      ctrl | PCI_MSI_FLAGS_ENABLE);
7978 			val = tr32(MSGINT_MODE);
7979 			tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
7980 		}
7981 	}
7982 }
7983 
7984 /* tp->lock is held. */
7985 static int tg3_chip_reset(struct tg3 *tp)
7986 {
7987 	u32 val;
7988 	void (*write_op)(struct tg3 *, u32, u32);
7989 	int i, err;
7990 
7991 	tg3_nvram_lock(tp);
7992 
7993 	tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
7994 
7995 	/* No matching tg3_nvram_unlock() after this because
7996 	 * chip reset below will undo the nvram lock.
7997 	 */
7998 	tp->nvram_lock_cnt = 0;
7999 
8000 	/* GRC_MISC_CFG core clock reset will clear the memory
8001 	 * enable bit in PCI register 4 and the MSI enable bit
8002 	 * on some chips, so we save relevant registers here.
8003 	 */
8004 	tg3_save_pci_state(tp);
8005 
8006 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
8007 	    tg3_flag(tp, 5755_PLUS))
8008 		tw32(GRC_FASTBOOT_PC, 0);
8009 
8010 	/*
8011 	 * We must avoid the readl() that normally takes place.
8012 	 * It locks machines, causes machine checks, and other
8013 	 * fun things.  So, temporarily disable the 5701
8014 	 * hardware workaround, while we do the reset.
8015 	 */
8016 	write_op = tp->write32;
8017 	if (write_op == tg3_write_flush_reg32)
8018 		tp->write32 = tg3_write32;
8019 
8020 	/* Prevent the irq handler from reading or writing PCI registers
8021 	 * during chip reset when the memory enable bit in the PCI command
8022 	 * register may be cleared.  The chip does not generate interrupt
8023 	 * at this time, but the irq handler may still be called due to irq
8024 	 * sharing or irqpoll.
8025 	 */
8026 	tg3_flag_set(tp, CHIP_RESETTING);
8027 	for (i = 0; i < tp->irq_cnt; i++) {
8028 		struct tg3_napi *tnapi = &tp->napi[i];
8029 		if (tnapi->hw_status) {
8030 			tnapi->hw_status->status = 0;
8031 			tnapi->hw_status->status_tag = 0;
8032 		}
8033 		tnapi->last_tag = 0;
8034 		tnapi->last_irq_tag = 0;
8035 	}
8036 	smp_mb();
8037 
8038 	for (i = 0; i < tp->irq_cnt; i++)
8039 		synchronize_irq(tp->napi[i].irq_vec);
8040 
8041 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
8042 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8043 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
8044 	}
8045 
8046 	/* do the reset */
8047 	val = GRC_MISC_CFG_CORECLK_RESET;
8048 
8049 	if (tg3_flag(tp, PCI_EXPRESS)) {
8050 		/* Force PCIe 1.0a mode */
8051 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8052 		    !tg3_flag(tp, 57765_PLUS) &&
8053 		    tr32(TG3_PCIE_PHY_TSTCTL) ==
8054 		    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
8055 			tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
8056 
8057 		if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
8058 			tw32(GRC_MISC_CFG, (1 << 29));
8059 			val |= (1 << 29);
8060 		}
8061 	}
8062 
8063 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
8064 		tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
8065 		tw32(GRC_VCPU_EXT_CTRL,
8066 		     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
8067 	}
8068 
8069 	/* Manage gphy power for all CPMU absent PCIe devices. */
8070 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
8071 		val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
8072 
8073 	tw32(GRC_MISC_CFG, val);
8074 
8075 	/* restore 5701 hardware bug workaround write method */
8076 	tp->write32 = write_op;
8077 
8078 	/* Unfortunately, we have to delay before the PCI read back.
8079 	 * Some 575X chips even will not respond to a PCI cfg access
8080 	 * when the reset command is given to the chip.
8081 	 *
8082 	 * How do these hardware designers expect things to work
8083 	 * properly if the PCI write is posted for a long period
8084 	 * of time?  It is always necessary to have some method by
8085 	 * which a register read back can occur to push the write
8086 	 * out which does the reset.
8087 	 *
8088 	 * For most tg3 variants the trick below was working.
8089 	 * Ho hum...
8090 	 */
8091 	udelay(120);
8092 
8093 	/* Flush PCI posted writes.  The normal MMIO registers
8094 	 * are inaccessible at this time so this is the only
8095 	 * way to make this reliably (actually, this is no longer
8096 	 * the case, see above).  I tried to use indirect
8097 	 * register read/write but this upset some 5701 variants.
8098 	 */
8099 	pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
8100 
8101 	udelay(120);
8102 
8103 	if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
8104 		u16 val16;
8105 
8106 		if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
8107 			int j;
8108 			u32 cfg_val;
8109 
8110 			/* Wait for link training to complete.  */
8111 			for (j = 0; j < 5000; j++)
8112 				udelay(100);
8113 
8114 			pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
8115 			pci_write_config_dword(tp->pdev, 0xc4,
8116 					       cfg_val | (1 << 15));
8117 		}
8118 
8119 		/* Clear the "no snoop" and "relaxed ordering" bits. */
8120 		val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
8121 		/*
8122 		 * Older PCIe devices only support the 128 byte
8123 		 * MPS setting.  Enforce the restriction.
8124 		 */
8125 		if (!tg3_flag(tp, CPMU_PRESENT))
8126 			val16 |= PCI_EXP_DEVCTL_PAYLOAD;
8127 		pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
8128 
8129 		/* Clear error status */
8130 		pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
8131 				      PCI_EXP_DEVSTA_CED |
8132 				      PCI_EXP_DEVSTA_NFED |
8133 				      PCI_EXP_DEVSTA_FED |
8134 				      PCI_EXP_DEVSTA_URD);
8135 	}
8136 
8137 	tg3_restore_pci_state(tp);
8138 
8139 	tg3_flag_clear(tp, CHIP_RESETTING);
8140 	tg3_flag_clear(tp, ERROR_PROCESSED);
8141 
8142 	val = 0;
8143 	if (tg3_flag(tp, 5780_CLASS))
8144 		val = tr32(MEMARB_MODE);
8145 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
8146 
8147 	if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
8148 		tg3_stop_fw(tp);
8149 		tw32(0x5000, 0x400);
8150 	}
8151 
8152 	tw32(GRC_MODE, tp->grc_mode);
8153 
8154 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
8155 		val = tr32(0xc4);
8156 
8157 		tw32(0xc4, val | (1 << 15));
8158 	}
8159 
8160 	if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
8161 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
8162 		tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
8163 		if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
8164 			tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
8165 		tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8166 	}
8167 
8168 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
8169 		tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
8170 		val = tp->mac_mode;
8171 	} else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
8172 		tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
8173 		val = tp->mac_mode;
8174 	} else
8175 		val = 0;
8176 
8177 	tw32_f(MAC_MODE, val);
8178 	udelay(40);
8179 
8180 	tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
8181 
8182 	err = tg3_poll_fw(tp);
8183 	if (err)
8184 		return err;
8185 
8186 	tg3_mdio_start(tp);
8187 
8188 	if (tg3_flag(tp, PCI_EXPRESS) &&
8189 	    tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
8190 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8191 	    !tg3_flag(tp, 57765_PLUS)) {
8192 		val = tr32(0x7c00);
8193 
8194 		tw32(0x7c00, val | (1 << 25));
8195 	}
8196 
8197 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8198 		val = tr32(TG3_CPMU_CLCK_ORIDE);
8199 		tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
8200 	}
8201 
8202 	/* Reprobe ASF enable state.  */
8203 	tg3_flag_clear(tp, ENABLE_ASF);
8204 	tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
8205 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
8206 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
8207 		u32 nic_cfg;
8208 
8209 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
8210 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
8211 			tg3_flag_set(tp, ENABLE_ASF);
8212 			tp->last_event_jiffies = jiffies;
8213 			if (tg3_flag(tp, 5750_PLUS))
8214 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
8215 		}
8216 	}
8217 
8218 	return 0;
8219 }
8220 
8221 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
8222 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
8223 
8224 /* tp->lock is held. */
8225 static int tg3_halt(struct tg3 *tp, int kind, int silent)
8226 {
8227 	int err;
8228 
8229 	tg3_stop_fw(tp);
8230 
8231 	tg3_write_sig_pre_reset(tp, kind);
8232 
8233 	tg3_abort_hw(tp, silent);
8234 	err = tg3_chip_reset(tp);
8235 
8236 	__tg3_set_mac_addr(tp, 0);
8237 
8238 	tg3_write_sig_legacy(tp, kind);
8239 	tg3_write_sig_post_reset(tp, kind);
8240 
8241 	if (tp->hw_stats) {
8242 		/* Save the stats across chip resets... */
8243 		tg3_get_nstats(tp, &tp->net_stats_prev);
8244 		tg3_get_estats(tp, &tp->estats_prev);
8245 
8246 		/* And make sure the next sample is new data */
8247 		memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
8248 	}
8249 
8250 	if (err)
8251 		return err;
8252 
8253 	return 0;
8254 }
8255 
8256 static int tg3_set_mac_addr(struct net_device *dev, void *p)
8257 {
8258 	struct tg3 *tp = netdev_priv(dev);
8259 	struct sockaddr *addr = p;
8260 	int err = 0, skip_mac_1 = 0;
8261 
8262 	if (!is_valid_ether_addr(addr->sa_data))
8263 		return -EADDRNOTAVAIL;
8264 
8265 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
8266 
8267 	if (!netif_running(dev))
8268 		return 0;
8269 
8270 	if (tg3_flag(tp, ENABLE_ASF)) {
8271 		u32 addr0_high, addr0_low, addr1_high, addr1_low;
8272 
8273 		addr0_high = tr32(MAC_ADDR_0_HIGH);
8274 		addr0_low = tr32(MAC_ADDR_0_LOW);
8275 		addr1_high = tr32(MAC_ADDR_1_HIGH);
8276 		addr1_low = tr32(MAC_ADDR_1_LOW);
8277 
8278 		/* Skip MAC addr 1 if ASF is using it. */
8279 		if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
8280 		    !(addr1_high == 0 && addr1_low == 0))
8281 			skip_mac_1 = 1;
8282 	}
8283 	spin_lock_bh(&tp->lock);
8284 	__tg3_set_mac_addr(tp, skip_mac_1);
8285 	spin_unlock_bh(&tp->lock);
8286 
8287 	return err;
8288 }
8289 
8290 /* tp->lock is held. */
8291 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
8292 			   dma_addr_t mapping, u32 maxlen_flags,
8293 			   u32 nic_addr)
8294 {
8295 	tg3_write_mem(tp,
8296 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
8297 		      ((u64) mapping >> 32));
8298 	tg3_write_mem(tp,
8299 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
8300 		      ((u64) mapping & 0xffffffff));
8301 	tg3_write_mem(tp,
8302 		      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
8303 		       maxlen_flags);
8304 
8305 	if (!tg3_flag(tp, 5705_PLUS))
8306 		tg3_write_mem(tp,
8307 			      (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
8308 			      nic_addr);
8309 }
8310 
8311 
8312 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
8313 {
8314 	int i = 0;
8315 
8316 	if (!tg3_flag(tp, ENABLE_TSS)) {
8317 		tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
8318 		tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
8319 		tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
8320 	} else {
8321 		tw32(HOSTCC_TXCOL_TICKS, 0);
8322 		tw32(HOSTCC_TXMAX_FRAMES, 0);
8323 		tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
8324 
8325 		for (; i < tp->txq_cnt; i++) {
8326 			u32 reg;
8327 
8328 			reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
8329 			tw32(reg, ec->tx_coalesce_usecs);
8330 			reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
8331 			tw32(reg, ec->tx_max_coalesced_frames);
8332 			reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
8333 			tw32(reg, ec->tx_max_coalesced_frames_irq);
8334 		}
8335 	}
8336 
8337 	for (; i < tp->irq_max - 1; i++) {
8338 		tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
8339 		tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
8340 		tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8341 	}
8342 }
8343 
8344 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
8345 {
8346 	int i = 0;
8347 	u32 limit = tp->rxq_cnt;
8348 
8349 	if (!tg3_flag(tp, ENABLE_RSS)) {
8350 		tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
8351 		tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
8352 		tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
8353 		limit--;
8354 	} else {
8355 		tw32(HOSTCC_RXCOL_TICKS, 0);
8356 		tw32(HOSTCC_RXMAX_FRAMES, 0);
8357 		tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
8358 	}
8359 
8360 	for (; i < limit; i++) {
8361 		u32 reg;
8362 
8363 		reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
8364 		tw32(reg, ec->rx_coalesce_usecs);
8365 		reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
8366 		tw32(reg, ec->rx_max_coalesced_frames);
8367 		reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
8368 		tw32(reg, ec->rx_max_coalesced_frames_irq);
8369 	}
8370 
8371 	for (; i < tp->irq_max - 1; i++) {
8372 		tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
8373 		tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
8374 		tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8375 	}
8376 }
8377 
8378 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
8379 {
8380 	tg3_coal_tx_init(tp, ec);
8381 	tg3_coal_rx_init(tp, ec);
8382 
8383 	if (!tg3_flag(tp, 5705_PLUS)) {
8384 		u32 val = ec->stats_block_coalesce_usecs;
8385 
8386 		tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
8387 		tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
8388 
8389 		if (!netif_carrier_ok(tp->dev))
8390 			val = 0;
8391 
8392 		tw32(HOSTCC_STAT_COAL_TICKS, val);
8393 	}
8394 }
8395 
8396 /* tp->lock is held. */
8397 static void tg3_rings_reset(struct tg3 *tp)
8398 {
8399 	int i;
8400 	u32 stblk, txrcb, rxrcb, limit;
8401 	struct tg3_napi *tnapi = &tp->napi[0];
8402 
8403 	/* Disable all transmit rings but the first. */
8404 	if (!tg3_flag(tp, 5705_PLUS))
8405 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
8406 	else if (tg3_flag(tp, 5717_PLUS))
8407 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
8408 	else if (tg3_flag(tp, 57765_CLASS))
8409 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
8410 	else
8411 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8412 
8413 	for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8414 	     txrcb < limit; txrcb += TG3_BDINFO_SIZE)
8415 		tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
8416 			      BDINFO_FLAGS_DISABLED);
8417 
8418 
8419 	/* Disable all receive return rings but the first. */
8420 	if (tg3_flag(tp, 5717_PLUS))
8421 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
8422 	else if (!tg3_flag(tp, 5705_PLUS))
8423 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
8424 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8425 		 tg3_flag(tp, 57765_CLASS))
8426 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
8427 	else
8428 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8429 
8430 	for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8431 	     rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
8432 		tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
8433 			      BDINFO_FLAGS_DISABLED);
8434 
8435 	/* Disable interrupts */
8436 	tw32_mailbox_f(tp->napi[0].int_mbox, 1);
8437 	tp->napi[0].chk_msi_cnt = 0;
8438 	tp->napi[0].last_rx_cons = 0;
8439 	tp->napi[0].last_tx_cons = 0;
8440 
8441 	/* Zero mailbox registers. */
8442 	if (tg3_flag(tp, SUPPORT_MSIX)) {
8443 		for (i = 1; i < tp->irq_max; i++) {
8444 			tp->napi[i].tx_prod = 0;
8445 			tp->napi[i].tx_cons = 0;
8446 			if (tg3_flag(tp, ENABLE_TSS))
8447 				tw32_mailbox(tp->napi[i].prodmbox, 0);
8448 			tw32_rx_mbox(tp->napi[i].consmbox, 0);
8449 			tw32_mailbox_f(tp->napi[i].int_mbox, 1);
8450 			tp->napi[i].chk_msi_cnt = 0;
8451 			tp->napi[i].last_rx_cons = 0;
8452 			tp->napi[i].last_tx_cons = 0;
8453 		}
8454 		if (!tg3_flag(tp, ENABLE_TSS))
8455 			tw32_mailbox(tp->napi[0].prodmbox, 0);
8456 	} else {
8457 		tp->napi[0].tx_prod = 0;
8458 		tp->napi[0].tx_cons = 0;
8459 		tw32_mailbox(tp->napi[0].prodmbox, 0);
8460 		tw32_rx_mbox(tp->napi[0].consmbox, 0);
8461 	}
8462 
8463 	/* Make sure the NIC-based send BD rings are disabled. */
8464 	if (!tg3_flag(tp, 5705_PLUS)) {
8465 		u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
8466 		for (i = 0; i < 16; i++)
8467 			tw32_tx_mbox(mbox + i * 8, 0);
8468 	}
8469 
8470 	txrcb = NIC_SRAM_SEND_RCB;
8471 	rxrcb = NIC_SRAM_RCV_RET_RCB;
8472 
8473 	/* Clear status block in ram. */
8474 	memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8475 
8476 	/* Set status block DMA address */
8477 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
8478 	     ((u64) tnapi->status_mapping >> 32));
8479 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8480 	     ((u64) tnapi->status_mapping & 0xffffffff));
8481 
8482 	if (tnapi->tx_ring) {
8483 		tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8484 			       (TG3_TX_RING_SIZE <<
8485 				BDINFO_FLAGS_MAXLEN_SHIFT),
8486 			       NIC_SRAM_TX_BUFFER_DESC);
8487 		txrcb += TG3_BDINFO_SIZE;
8488 	}
8489 
8490 	if (tnapi->rx_rcb) {
8491 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8492 			       (tp->rx_ret_ring_mask + 1) <<
8493 				BDINFO_FLAGS_MAXLEN_SHIFT, 0);
8494 		rxrcb += TG3_BDINFO_SIZE;
8495 	}
8496 
8497 	stblk = HOSTCC_STATBLCK_RING1;
8498 
8499 	for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
8500 		u64 mapping = (u64)tnapi->status_mapping;
8501 		tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
8502 		tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
8503 
8504 		/* Clear status block in ram. */
8505 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8506 
8507 		if (tnapi->tx_ring) {
8508 			tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8509 				       (TG3_TX_RING_SIZE <<
8510 					BDINFO_FLAGS_MAXLEN_SHIFT),
8511 				       NIC_SRAM_TX_BUFFER_DESC);
8512 			txrcb += TG3_BDINFO_SIZE;
8513 		}
8514 
8515 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8516 			       ((tp->rx_ret_ring_mask + 1) <<
8517 				BDINFO_FLAGS_MAXLEN_SHIFT), 0);
8518 
8519 		stblk += 8;
8520 		rxrcb += TG3_BDINFO_SIZE;
8521 	}
8522 }
8523 
8524 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
8525 {
8526 	u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
8527 
8528 	if (!tg3_flag(tp, 5750_PLUS) ||
8529 	    tg3_flag(tp, 5780_CLASS) ||
8530 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
8531 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
8532 	    tg3_flag(tp, 57765_PLUS))
8533 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
8534 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8535 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8536 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
8537 	else
8538 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
8539 
8540 	nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
8541 	host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
8542 
8543 	val = min(nic_rep_thresh, host_rep_thresh);
8544 	tw32(RCVBDI_STD_THRESH, val);
8545 
8546 	if (tg3_flag(tp, 57765_PLUS))
8547 		tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
8548 
8549 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8550 		return;
8551 
8552 	bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
8553 
8554 	host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
8555 
8556 	val = min(bdcache_maxcnt / 2, host_rep_thresh);
8557 	tw32(RCVBDI_JUMBO_THRESH, val);
8558 
8559 	if (tg3_flag(tp, 57765_PLUS))
8560 		tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
8561 }
8562 
8563 static inline u32 calc_crc(unsigned char *buf, int len)
8564 {
8565 	u32 reg;
8566 	u32 tmp;
8567 	int j, k;
8568 
8569 	reg = 0xffffffff;
8570 
8571 	for (j = 0; j < len; j++) {
8572 		reg ^= buf[j];
8573 
8574 		for (k = 0; k < 8; k++) {
8575 			tmp = reg & 0x01;
8576 
8577 			reg >>= 1;
8578 
8579 			if (tmp)
8580 				reg ^= 0xedb88320;
8581 		}
8582 	}
8583 
8584 	return ~reg;
8585 }
8586 
8587 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8588 {
8589 	/* accept or reject all multicast frames */
8590 	tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8591 	tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8592 	tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8593 	tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8594 }
8595 
8596 static void __tg3_set_rx_mode(struct net_device *dev)
8597 {
8598 	struct tg3 *tp = netdev_priv(dev);
8599 	u32 rx_mode;
8600 
8601 	rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8602 				  RX_MODE_KEEP_VLAN_TAG);
8603 
8604 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
8605 	/* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8606 	 * flag clear.
8607 	 */
8608 	if (!tg3_flag(tp, ENABLE_ASF))
8609 		rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8610 #endif
8611 
8612 	if (dev->flags & IFF_PROMISC) {
8613 		/* Promiscuous mode. */
8614 		rx_mode |= RX_MODE_PROMISC;
8615 	} else if (dev->flags & IFF_ALLMULTI) {
8616 		/* Accept all multicast. */
8617 		tg3_set_multi(tp, 1);
8618 	} else if (netdev_mc_empty(dev)) {
8619 		/* Reject all multicast. */
8620 		tg3_set_multi(tp, 0);
8621 	} else {
8622 		/* Accept one or more multicast(s). */
8623 		struct netdev_hw_addr *ha;
8624 		u32 mc_filter[4] = { 0, };
8625 		u32 regidx;
8626 		u32 bit;
8627 		u32 crc;
8628 
8629 		netdev_for_each_mc_addr(ha, dev) {
8630 			crc = calc_crc(ha->addr, ETH_ALEN);
8631 			bit = ~crc & 0x7f;
8632 			regidx = (bit & 0x60) >> 5;
8633 			bit &= 0x1f;
8634 			mc_filter[regidx] |= (1 << bit);
8635 		}
8636 
8637 		tw32(MAC_HASH_REG_0, mc_filter[0]);
8638 		tw32(MAC_HASH_REG_1, mc_filter[1]);
8639 		tw32(MAC_HASH_REG_2, mc_filter[2]);
8640 		tw32(MAC_HASH_REG_3, mc_filter[3]);
8641 	}
8642 
8643 	if (rx_mode != tp->rx_mode) {
8644 		tp->rx_mode = rx_mode;
8645 		tw32_f(MAC_RX_MODE, rx_mode);
8646 		udelay(10);
8647 	}
8648 }
8649 
8650 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
8651 {
8652 	int i;
8653 
8654 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
8655 		tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
8656 }
8657 
8658 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
8659 {
8660 	int i;
8661 
8662 	if (!tg3_flag(tp, SUPPORT_MSIX))
8663 		return;
8664 
8665 	if (tp->irq_cnt <= 2) {
8666 		memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
8667 		return;
8668 	}
8669 
8670 	/* Validate table against current IRQ count */
8671 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
8672 		if (tp->rss_ind_tbl[i] >= tp->irq_cnt - 1)
8673 			break;
8674 	}
8675 
8676 	if (i != TG3_RSS_INDIR_TBL_SIZE)
8677 		tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
8678 }
8679 
8680 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
8681 {
8682 	int i = 0;
8683 	u32 reg = MAC_RSS_INDIR_TBL_0;
8684 
8685 	while (i < TG3_RSS_INDIR_TBL_SIZE) {
8686 		u32 val = tp->rss_ind_tbl[i];
8687 		i++;
8688 		for (; i % 8; i++) {
8689 			val <<= 4;
8690 			val |= tp->rss_ind_tbl[i];
8691 		}
8692 		tw32(reg, val);
8693 		reg += 4;
8694 	}
8695 }
8696 
8697 /* tp->lock is held. */
8698 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
8699 {
8700 	u32 val, rdmac_mode;
8701 	int i, err, limit;
8702 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
8703 
8704 	tg3_disable_ints(tp);
8705 
8706 	tg3_stop_fw(tp);
8707 
8708 	tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
8709 
8710 	if (tg3_flag(tp, INIT_COMPLETE))
8711 		tg3_abort_hw(tp, 1);
8712 
8713 	/* Enable MAC control of LPI */
8714 	if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) {
8715 		tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL,
8716 		       TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
8717 		       TG3_CPMU_EEE_LNKIDL_UART_IDL);
8718 
8719 		tw32_f(TG3_CPMU_EEE_CTRL,
8720 		       TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
8721 
8722 		val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
8723 		      TG3_CPMU_EEEMD_LPI_IN_TX |
8724 		      TG3_CPMU_EEEMD_LPI_IN_RX |
8725 		      TG3_CPMU_EEEMD_EEE_ENABLE;
8726 
8727 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8728 			val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
8729 
8730 		if (tg3_flag(tp, ENABLE_APE))
8731 			val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
8732 
8733 		tw32_f(TG3_CPMU_EEE_MODE, val);
8734 
8735 		tw32_f(TG3_CPMU_EEE_DBTMR1,
8736 		       TG3_CPMU_DBTMR1_PCIEXIT_2047US |
8737 		       TG3_CPMU_DBTMR1_LNKIDLE_2047US);
8738 
8739 		tw32_f(TG3_CPMU_EEE_DBTMR2,
8740 		       TG3_CPMU_DBTMR2_APE_TX_2047US |
8741 		       TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
8742 	}
8743 
8744 	if (reset_phy)
8745 		tg3_phy_reset(tp);
8746 
8747 	err = tg3_chip_reset(tp);
8748 	if (err)
8749 		return err;
8750 
8751 	tg3_write_sig_legacy(tp, RESET_KIND_INIT);
8752 
8753 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
8754 		val = tr32(TG3_CPMU_CTRL);
8755 		val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
8756 		tw32(TG3_CPMU_CTRL, val);
8757 
8758 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8759 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8760 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
8761 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8762 
8763 		val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
8764 		val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
8765 		val |= CPMU_LNK_AWARE_MACCLK_6_25;
8766 		tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
8767 
8768 		val = tr32(TG3_CPMU_HST_ACC);
8769 		val &= ~CPMU_HST_ACC_MACCLK_MASK;
8770 		val |= CPMU_HST_ACC_MACCLK_6_25;
8771 		tw32(TG3_CPMU_HST_ACC, val);
8772 	}
8773 
8774 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
8775 		val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
8776 		val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
8777 		       PCIE_PWR_MGMT_L1_THRESH_4MS;
8778 		tw32(PCIE_PWR_MGMT_THRESH, val);
8779 
8780 		val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
8781 		tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
8782 
8783 		tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
8784 
8785 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8786 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
8787 	}
8788 
8789 	if (tg3_flag(tp, L1PLLPD_EN)) {
8790 		u32 grc_mode = tr32(GRC_MODE);
8791 
8792 		/* Access the lower 1K of PL PCIE block registers. */
8793 		val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8794 		tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8795 
8796 		val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
8797 		tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
8798 		     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
8799 
8800 		tw32(GRC_MODE, grc_mode);
8801 	}
8802 
8803 	if (tg3_flag(tp, 57765_CLASS)) {
8804 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
8805 			u32 grc_mode = tr32(GRC_MODE);
8806 
8807 			/* Access the lower 1K of PL PCIE block registers. */
8808 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8809 			tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8810 
8811 			val = tr32(TG3_PCIE_TLDLPL_PORT +
8812 				   TG3_PCIE_PL_LO_PHYCTL5);
8813 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
8814 			     val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
8815 
8816 			tw32(GRC_MODE, grc_mode);
8817 		}
8818 
8819 		if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) {
8820 			u32 grc_mode = tr32(GRC_MODE);
8821 
8822 			/* Access the lower 1K of DL PCIE block registers. */
8823 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8824 			tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
8825 
8826 			val = tr32(TG3_PCIE_TLDLPL_PORT +
8827 				   TG3_PCIE_DL_LO_FTSMAX);
8828 			val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
8829 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
8830 			     val | TG3_PCIE_DL_LO_FTSMAX_VAL);
8831 
8832 			tw32(GRC_MODE, grc_mode);
8833 		}
8834 
8835 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8836 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8837 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
8838 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8839 	}
8840 
8841 	/* This works around an issue with Athlon chipsets on
8842 	 * B3 tigon3 silicon.  This bit has no effect on any
8843 	 * other revision.  But do not set this on PCI Express
8844 	 * chips and don't even touch the clocks if the CPMU is present.
8845 	 */
8846 	if (!tg3_flag(tp, CPMU_PRESENT)) {
8847 		if (!tg3_flag(tp, PCI_EXPRESS))
8848 			tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
8849 		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8850 	}
8851 
8852 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
8853 	    tg3_flag(tp, PCIX_MODE)) {
8854 		val = tr32(TG3PCI_PCISTATE);
8855 		val |= PCISTATE_RETRY_SAME_DMA;
8856 		tw32(TG3PCI_PCISTATE, val);
8857 	}
8858 
8859 	if (tg3_flag(tp, ENABLE_APE)) {
8860 		/* Allow reads and writes to the
8861 		 * APE register and memory space.
8862 		 */
8863 		val = tr32(TG3PCI_PCISTATE);
8864 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8865 		       PCISTATE_ALLOW_APE_SHMEM_WR |
8866 		       PCISTATE_ALLOW_APE_PSPACE_WR;
8867 		tw32(TG3PCI_PCISTATE, val);
8868 	}
8869 
8870 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
8871 		/* Enable some hw fixes.  */
8872 		val = tr32(TG3PCI_MSI_DATA);
8873 		val |= (1 << 26) | (1 << 28) | (1 << 29);
8874 		tw32(TG3PCI_MSI_DATA, val);
8875 	}
8876 
8877 	/* Descriptor ring init may make accesses to the
8878 	 * NIC SRAM area to setup the TX descriptors, so we
8879 	 * can only do this after the hardware has been
8880 	 * successfully reset.
8881 	 */
8882 	err = tg3_init_rings(tp);
8883 	if (err)
8884 		return err;
8885 
8886 	if (tg3_flag(tp, 57765_PLUS)) {
8887 		val = tr32(TG3PCI_DMA_RW_CTRL) &
8888 		      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
8889 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0)
8890 			val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
8891 		if (!tg3_flag(tp, 57765_CLASS) &&
8892 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8893 			val |= DMA_RWCTRL_TAGGED_STAT_WA;
8894 		tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
8895 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
8896 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
8897 		/* This value is determined during the probe time DMA
8898 		 * engine test, tg3_test_dma.
8899 		 */
8900 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
8901 	}
8902 
8903 	tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
8904 			  GRC_MODE_4X_NIC_SEND_RINGS |
8905 			  GRC_MODE_NO_TX_PHDR_CSUM |
8906 			  GRC_MODE_NO_RX_PHDR_CSUM);
8907 	tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
8908 
8909 	/* Pseudo-header checksum is done by hardware logic and not
8910 	 * the offload processers, so make the chip do the pseudo-
8911 	 * header checksums on receive.  For transmit it is more
8912 	 * convenient to do the pseudo-header checksum in software
8913 	 * as Linux does that on transmit for us in all cases.
8914 	 */
8915 	tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
8916 
8917 	tw32(GRC_MODE,
8918 	     tp->grc_mode |
8919 	     (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
8920 
8921 	/* Setup the timer prescalar register.  Clock is always 66Mhz. */
8922 	val = tr32(GRC_MISC_CFG);
8923 	val &= ~0xff;
8924 	val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
8925 	tw32(GRC_MISC_CFG, val);
8926 
8927 	/* Initialize MBUF/DESC pool. */
8928 	if (tg3_flag(tp, 5750_PLUS)) {
8929 		/* Do nothing.  */
8930 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
8931 		tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
8932 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
8933 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
8934 		else
8935 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
8936 		tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
8937 		tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
8938 	} else if (tg3_flag(tp, TSO_CAPABLE)) {
8939 		int fw_len;
8940 
8941 		fw_len = tp->fw_len;
8942 		fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
8943 		tw32(BUFMGR_MB_POOL_ADDR,
8944 		     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
8945 		tw32(BUFMGR_MB_POOL_SIZE,
8946 		     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
8947 	}
8948 
8949 	if (tp->dev->mtu <= ETH_DATA_LEN) {
8950 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
8951 		     tp->bufmgr_config.mbuf_read_dma_low_water);
8952 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
8953 		     tp->bufmgr_config.mbuf_mac_rx_low_water);
8954 		tw32(BUFMGR_MB_HIGH_WATER,
8955 		     tp->bufmgr_config.mbuf_high_water);
8956 	} else {
8957 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
8958 		     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
8959 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
8960 		     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
8961 		tw32(BUFMGR_MB_HIGH_WATER,
8962 		     tp->bufmgr_config.mbuf_high_water_jumbo);
8963 	}
8964 	tw32(BUFMGR_DMA_LOW_WATER,
8965 	     tp->bufmgr_config.dma_low_water);
8966 	tw32(BUFMGR_DMA_HIGH_WATER,
8967 	     tp->bufmgr_config.dma_high_water);
8968 
8969 	val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
8970 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
8971 		val |= BUFMGR_MODE_NO_TX_UNDERRUN;
8972 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
8973 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
8974 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0)
8975 		val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
8976 	tw32(BUFMGR_MODE, val);
8977 	for (i = 0; i < 2000; i++) {
8978 		if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
8979 			break;
8980 		udelay(10);
8981 	}
8982 	if (i >= 2000) {
8983 		netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
8984 		return -ENODEV;
8985 	}
8986 
8987 	if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
8988 		tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
8989 
8990 	tg3_setup_rxbd_thresholds(tp);
8991 
8992 	/* Initialize TG3_BDINFO's at:
8993 	 *  RCVDBDI_STD_BD:	standard eth size rx ring
8994 	 *  RCVDBDI_JUMBO_BD:	jumbo frame rx ring
8995 	 *  RCVDBDI_MINI_BD:	small frame rx ring (??? does not work)
8996 	 *
8997 	 * like so:
8998 	 *  TG3_BDINFO_HOST_ADDR:	high/low parts of DMA address of ring
8999 	 *  TG3_BDINFO_MAXLEN_FLAGS:	(rx max buffer size << 16) |
9000 	 *                              ring attribute flags
9001 	 *  TG3_BDINFO_NIC_ADDR:	location of descriptors in nic SRAM
9002 	 *
9003 	 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
9004 	 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
9005 	 *
9006 	 * The size of each ring is fixed in the firmware, but the location is
9007 	 * configurable.
9008 	 */
9009 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
9010 	     ((u64) tpr->rx_std_mapping >> 32));
9011 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
9012 	     ((u64) tpr->rx_std_mapping & 0xffffffff));
9013 	if (!tg3_flag(tp, 5717_PLUS))
9014 		tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
9015 		     NIC_SRAM_RX_BUFFER_DESC);
9016 
9017 	/* Disable the mini ring */
9018 	if (!tg3_flag(tp, 5705_PLUS))
9019 		tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
9020 		     BDINFO_FLAGS_DISABLED);
9021 
9022 	/* Program the jumbo buffer descriptor ring control
9023 	 * blocks on those devices that have them.
9024 	 */
9025 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
9026 	    (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
9027 
9028 		if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
9029 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
9030 			     ((u64) tpr->rx_jmb_mapping >> 32));
9031 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
9032 			     ((u64) tpr->rx_jmb_mapping & 0xffffffff));
9033 			val = TG3_RX_JMB_RING_SIZE(tp) <<
9034 			      BDINFO_FLAGS_MAXLEN_SHIFT;
9035 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
9036 			     val | BDINFO_FLAGS_USE_EXT_RECV);
9037 			if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
9038 			    tg3_flag(tp, 57765_CLASS))
9039 				tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
9040 				     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
9041 		} else {
9042 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
9043 			     BDINFO_FLAGS_DISABLED);
9044 		}
9045 
9046 		if (tg3_flag(tp, 57765_PLUS)) {
9047 			val = TG3_RX_STD_RING_SIZE(tp);
9048 			val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
9049 			val |= (TG3_RX_STD_DMA_SZ << 2);
9050 		} else
9051 			val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
9052 	} else
9053 		val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
9054 
9055 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
9056 
9057 	tpr->rx_std_prod_idx = tp->rx_pending;
9058 	tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
9059 
9060 	tpr->rx_jmb_prod_idx =
9061 		tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
9062 	tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
9063 
9064 	tg3_rings_reset(tp);
9065 
9066 	/* Initialize MAC address and backoff seed. */
9067 	__tg3_set_mac_addr(tp, 0);
9068 
9069 	/* MTU + ethernet header + FCS + optional VLAN tag */
9070 	tw32(MAC_RX_MTU_SIZE,
9071 	     tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
9072 
9073 	/* The slot time is changed by tg3_setup_phy if we
9074 	 * run at gigabit with half duplex.
9075 	 */
9076 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
9077 	      (6 << TX_LENGTHS_IPG_SHIFT) |
9078 	      (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
9079 
9080 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
9081 		val |= tr32(MAC_TX_LENGTHS) &
9082 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
9083 			TX_LENGTHS_CNT_DWN_VAL_MSK);
9084 
9085 	tw32(MAC_TX_LENGTHS, val);
9086 
9087 	/* Receive rules. */
9088 	tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
9089 	tw32(RCVLPC_CONFIG, 0x0181);
9090 
9091 	/* Calculate RDMAC_MODE setting early, we need it to determine
9092 	 * the RCVLPC_STATE_ENABLE mask.
9093 	 */
9094 	rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
9095 		      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
9096 		      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
9097 		      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
9098 		      RDMAC_MODE_LNGREAD_ENAB);
9099 
9100 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717)
9101 		rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
9102 
9103 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9104 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9105 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
9106 		rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
9107 			      RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
9108 			      RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
9109 
9110 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9111 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9112 		if (tg3_flag(tp, TSO_CAPABLE) &&
9113 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
9114 			rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
9115 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9116 			   !tg3_flag(tp, IS_5788)) {
9117 			rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9118 		}
9119 	}
9120 
9121 	if (tg3_flag(tp, PCI_EXPRESS))
9122 		rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9123 
9124 	if (tg3_flag(tp, HW_TSO_1) ||
9125 	    tg3_flag(tp, HW_TSO_2) ||
9126 	    tg3_flag(tp, HW_TSO_3))
9127 		rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
9128 
9129 	if (tg3_flag(tp, 57765_PLUS) ||
9130 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9131 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
9132 		rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
9133 
9134 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
9135 		rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
9136 
9137 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
9138 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9139 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9140 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
9141 	    tg3_flag(tp, 57765_PLUS)) {
9142 		val = tr32(TG3_RDMA_RSRVCTRL_REG);
9143 		if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) {
9144 			val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
9145 				 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
9146 				 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
9147 			val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
9148 			       TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
9149 			       TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
9150 		}
9151 		tw32(TG3_RDMA_RSRVCTRL_REG,
9152 		     val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
9153 	}
9154 
9155 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
9156 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9157 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9158 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val |
9159 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
9160 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
9161 	}
9162 
9163 	/* Receive/send statistics. */
9164 	if (tg3_flag(tp, 5750_PLUS)) {
9165 		val = tr32(RCVLPC_STATS_ENABLE);
9166 		val &= ~RCVLPC_STATSENAB_DACK_FIX;
9167 		tw32(RCVLPC_STATS_ENABLE, val);
9168 	} else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
9169 		   tg3_flag(tp, TSO_CAPABLE)) {
9170 		val = tr32(RCVLPC_STATS_ENABLE);
9171 		val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
9172 		tw32(RCVLPC_STATS_ENABLE, val);
9173 	} else {
9174 		tw32(RCVLPC_STATS_ENABLE, 0xffffff);
9175 	}
9176 	tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
9177 	tw32(SNDDATAI_STATSENAB, 0xffffff);
9178 	tw32(SNDDATAI_STATSCTRL,
9179 	     (SNDDATAI_SCTRL_ENABLE |
9180 	      SNDDATAI_SCTRL_FASTUPD));
9181 
9182 	/* Setup host coalescing engine. */
9183 	tw32(HOSTCC_MODE, 0);
9184 	for (i = 0; i < 2000; i++) {
9185 		if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
9186 			break;
9187 		udelay(10);
9188 	}
9189 
9190 	__tg3_set_coalesce(tp, &tp->coal);
9191 
9192 	if (!tg3_flag(tp, 5705_PLUS)) {
9193 		/* Status/statistics block address.  See tg3_timer,
9194 		 * the tg3_periodic_fetch_stats call there, and
9195 		 * tg3_get_stats to see how this works for 5705/5750 chips.
9196 		 */
9197 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9198 		     ((u64) tp->stats_mapping >> 32));
9199 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9200 		     ((u64) tp->stats_mapping & 0xffffffff));
9201 		tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
9202 
9203 		tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
9204 
9205 		/* Clear statistics and status block memory areas */
9206 		for (i = NIC_SRAM_STATS_BLK;
9207 		     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
9208 		     i += sizeof(u32)) {
9209 			tg3_write_mem(tp, i, 0);
9210 			udelay(40);
9211 		}
9212 	}
9213 
9214 	tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
9215 
9216 	tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
9217 	tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
9218 	if (!tg3_flag(tp, 5705_PLUS))
9219 		tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
9220 
9221 	if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9222 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
9223 		/* reset to prevent losing 1st rx packet intermittently */
9224 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9225 		udelay(10);
9226 	}
9227 
9228 	tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
9229 			MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
9230 			MAC_MODE_FHDE_ENABLE;
9231 	if (tg3_flag(tp, ENABLE_APE))
9232 		tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
9233 	if (!tg3_flag(tp, 5705_PLUS) &&
9234 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9235 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
9236 		tp->mac_mode |= MAC_MODE_LINK_POLARITY;
9237 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
9238 	udelay(40);
9239 
9240 	/* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
9241 	 * If TG3_FLAG_IS_NIC is zero, we should read the
9242 	 * register to preserve the GPIO settings for LOMs. The GPIOs,
9243 	 * whether used as inputs or outputs, are set by boot code after
9244 	 * reset.
9245 	 */
9246 	if (!tg3_flag(tp, IS_NIC)) {
9247 		u32 gpio_mask;
9248 
9249 		gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
9250 			    GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
9251 			    GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
9252 
9253 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
9254 			gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
9255 				     GRC_LCLCTRL_GPIO_OUTPUT3;
9256 
9257 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
9258 			gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
9259 
9260 		tp->grc_local_ctrl &= ~gpio_mask;
9261 		tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
9262 
9263 		/* GPIO1 must be driven high for eeprom write protect */
9264 		if (tg3_flag(tp, EEPROM_WRITE_PROT))
9265 			tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
9266 					       GRC_LCLCTRL_GPIO_OUTPUT1);
9267 	}
9268 	tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9269 	udelay(100);
9270 
9271 	if (tg3_flag(tp, USING_MSIX)) {
9272 		val = tr32(MSGINT_MODE);
9273 		val |= MSGINT_MODE_ENABLE;
9274 		if (tp->irq_cnt > 1)
9275 			val |= MSGINT_MODE_MULTIVEC_EN;
9276 		if (!tg3_flag(tp, 1SHOT_MSI))
9277 			val |= MSGINT_MODE_ONE_SHOT_DISABLE;
9278 		tw32(MSGINT_MODE, val);
9279 	}
9280 
9281 	if (!tg3_flag(tp, 5705_PLUS)) {
9282 		tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
9283 		udelay(40);
9284 	}
9285 
9286 	val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
9287 	       WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
9288 	       WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
9289 	       WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
9290 	       WDMAC_MODE_LNGREAD_ENAB);
9291 
9292 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9293 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9294 		if (tg3_flag(tp, TSO_CAPABLE) &&
9295 		    (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
9296 		     tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
9297 			/* nothing */
9298 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9299 			   !tg3_flag(tp, IS_5788)) {
9300 			val |= WDMAC_MODE_RX_ACCEL;
9301 		}
9302 	}
9303 
9304 	/* Enable host coalescing bug fix */
9305 	if (tg3_flag(tp, 5755_PLUS))
9306 		val |= WDMAC_MODE_STATUS_TAG_FIX;
9307 
9308 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
9309 		val |= WDMAC_MODE_BURST_ALL_DATA;
9310 
9311 	tw32_f(WDMAC_MODE, val);
9312 	udelay(40);
9313 
9314 	if (tg3_flag(tp, PCIX_MODE)) {
9315 		u16 pcix_cmd;
9316 
9317 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9318 				     &pcix_cmd);
9319 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
9320 			pcix_cmd &= ~PCI_X_CMD_MAX_READ;
9321 			pcix_cmd |= PCI_X_CMD_READ_2K;
9322 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
9323 			pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
9324 			pcix_cmd |= PCI_X_CMD_READ_2K;
9325 		}
9326 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9327 				      pcix_cmd);
9328 	}
9329 
9330 	tw32_f(RDMAC_MODE, rdmac_mode);
9331 	udelay(40);
9332 
9333 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) {
9334 		for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
9335 			if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
9336 				break;
9337 		}
9338 		if (i < TG3_NUM_RDMA_CHANNELS) {
9339 			val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9340 			val |= TG3_LSO_RD_DMA_TX_LENGTH_WA;
9341 			tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
9342 			tg3_flag_set(tp, 5719_RDMA_BUG);
9343 		}
9344 	}
9345 
9346 	tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
9347 	if (!tg3_flag(tp, 5705_PLUS))
9348 		tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
9349 
9350 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
9351 		tw32(SNDDATAC_MODE,
9352 		     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
9353 	else
9354 		tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
9355 
9356 	tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
9357 	tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
9358 	val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
9359 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
9360 		val |= RCVDBDI_MODE_LRG_RING_SZ;
9361 	tw32(RCVDBDI_MODE, val);
9362 	tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
9363 	if (tg3_flag(tp, HW_TSO_1) ||
9364 	    tg3_flag(tp, HW_TSO_2) ||
9365 	    tg3_flag(tp, HW_TSO_3))
9366 		tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
9367 	val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
9368 	if (tg3_flag(tp, ENABLE_TSS))
9369 		val |= SNDBDI_MODE_MULTI_TXQ_EN;
9370 	tw32(SNDBDI_MODE, val);
9371 	tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
9372 
9373 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9374 		err = tg3_load_5701_a0_firmware_fix(tp);
9375 		if (err)
9376 			return err;
9377 	}
9378 
9379 	if (tg3_flag(tp, TSO_CAPABLE)) {
9380 		err = tg3_load_tso_firmware(tp);
9381 		if (err)
9382 			return err;
9383 	}
9384 
9385 	tp->tx_mode = TX_MODE_ENABLE;
9386 
9387 	if (tg3_flag(tp, 5755_PLUS) ||
9388 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9389 		tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
9390 
9391 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9392 		val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
9393 		tp->tx_mode &= ~val;
9394 		tp->tx_mode |= tr32(MAC_TX_MODE) & val;
9395 	}
9396 
9397 	tw32_f(MAC_TX_MODE, tp->tx_mode);
9398 	udelay(100);
9399 
9400 	if (tg3_flag(tp, ENABLE_RSS)) {
9401 		tg3_rss_write_indir_tbl(tp);
9402 
9403 		/* Setup the "secret" hash key. */
9404 		tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
9405 		tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
9406 		tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
9407 		tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
9408 		tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
9409 		tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
9410 		tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
9411 		tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
9412 		tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
9413 		tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
9414 	}
9415 
9416 	tp->rx_mode = RX_MODE_ENABLE;
9417 	if (tg3_flag(tp, 5755_PLUS))
9418 		tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
9419 
9420 	if (tg3_flag(tp, ENABLE_RSS))
9421 		tp->rx_mode |= RX_MODE_RSS_ENABLE |
9422 			       RX_MODE_RSS_ITBL_HASH_BITS_7 |
9423 			       RX_MODE_RSS_IPV6_HASH_EN |
9424 			       RX_MODE_RSS_TCP_IPV6_HASH_EN |
9425 			       RX_MODE_RSS_IPV4_HASH_EN |
9426 			       RX_MODE_RSS_TCP_IPV4_HASH_EN;
9427 
9428 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9429 	udelay(10);
9430 
9431 	tw32(MAC_LED_CTRL, tp->led_ctrl);
9432 
9433 	tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
9434 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9435 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9436 		udelay(10);
9437 	}
9438 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9439 	udelay(10);
9440 
9441 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9442 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
9443 			!(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
9444 			/* Set drive transmission level to 1.2V  */
9445 			/* only if the signal pre-emphasis bit is not set  */
9446 			val = tr32(MAC_SERDES_CFG);
9447 			val &= 0xfffff000;
9448 			val |= 0x880;
9449 			tw32(MAC_SERDES_CFG, val);
9450 		}
9451 		if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
9452 			tw32(MAC_SERDES_CFG, 0x616000);
9453 	}
9454 
9455 	/* Prevent chip from dropping frames when flow control
9456 	 * is enabled.
9457 	 */
9458 	if (tg3_flag(tp, 57765_CLASS))
9459 		val = 1;
9460 	else
9461 		val = 2;
9462 	tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
9463 
9464 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
9465 	    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
9466 		/* Use hardware link auto-negotiation */
9467 		tg3_flag_set(tp, HW_AUTONEG);
9468 	}
9469 
9470 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9471 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
9472 		u32 tmp;
9473 
9474 		tmp = tr32(SERDES_RX_CTRL);
9475 		tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
9476 		tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
9477 		tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
9478 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9479 	}
9480 
9481 	if (!tg3_flag(tp, USE_PHYLIB)) {
9482 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
9483 			tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
9484 
9485 		err = tg3_setup_phy(tp, 0);
9486 		if (err)
9487 			return err;
9488 
9489 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9490 		    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
9491 			u32 tmp;
9492 
9493 			/* Clear CRC stats. */
9494 			if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
9495 				tg3_writephy(tp, MII_TG3_TEST1,
9496 					     tmp | MII_TG3_TEST1_CRC_EN);
9497 				tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
9498 			}
9499 		}
9500 	}
9501 
9502 	__tg3_set_rx_mode(tp->dev);
9503 
9504 	/* Initialize receive rules. */
9505 	tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
9506 	tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
9507 	tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
9508 	tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
9509 
9510 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
9511 		limit = 8;
9512 	else
9513 		limit = 16;
9514 	if (tg3_flag(tp, ENABLE_ASF))
9515 		limit -= 4;
9516 	switch (limit) {
9517 	case 16:
9518 		tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
9519 	case 15:
9520 		tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
9521 	case 14:
9522 		tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
9523 	case 13:
9524 		tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
9525 	case 12:
9526 		tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
9527 	case 11:
9528 		tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
9529 	case 10:
9530 		tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
9531 	case 9:
9532 		tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
9533 	case 8:
9534 		tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
9535 	case 7:
9536 		tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
9537 	case 6:
9538 		tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
9539 	case 5:
9540 		tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
9541 	case 4:
9542 		/* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
9543 	case 3:
9544 		/* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
9545 	case 2:
9546 	case 1:
9547 
9548 	default:
9549 		break;
9550 	}
9551 
9552 	if (tg3_flag(tp, ENABLE_APE))
9553 		/* Write our heartbeat update interval to APE. */
9554 		tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
9555 				APE_HOST_HEARTBEAT_INT_DISABLE);
9556 
9557 	tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
9558 
9559 	return 0;
9560 }
9561 
9562 /* Called at device open time to get the chip ready for
9563  * packet processing.  Invoked with tp->lock held.
9564  */
9565 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
9566 {
9567 	tg3_switch_clocks(tp);
9568 
9569 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
9570 
9571 	return tg3_reset_hw(tp, reset_phy);
9572 }
9573 
9574 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
9575 {
9576 	int i;
9577 
9578 	for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
9579 		u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
9580 
9581 		tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
9582 		off += len;
9583 
9584 		if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
9585 		    !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
9586 			memset(ocir, 0, TG3_OCIR_LEN);
9587 	}
9588 }
9589 
9590 /* sysfs attributes for hwmon */
9591 static ssize_t tg3_show_temp(struct device *dev,
9592 			     struct device_attribute *devattr, char *buf)
9593 {
9594 	struct pci_dev *pdev = to_pci_dev(dev);
9595 	struct net_device *netdev = pci_get_drvdata(pdev);
9596 	struct tg3 *tp = netdev_priv(netdev);
9597 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
9598 	u32 temperature;
9599 
9600 	spin_lock_bh(&tp->lock);
9601 	tg3_ape_scratchpad_read(tp, &temperature, attr->index,
9602 				sizeof(temperature));
9603 	spin_unlock_bh(&tp->lock);
9604 	return sprintf(buf, "%u\n", temperature);
9605 }
9606 
9607 
9608 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
9609 			  TG3_TEMP_SENSOR_OFFSET);
9610 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
9611 			  TG3_TEMP_CAUTION_OFFSET);
9612 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
9613 			  TG3_TEMP_MAX_OFFSET);
9614 
9615 static struct attribute *tg3_attributes[] = {
9616 	&sensor_dev_attr_temp1_input.dev_attr.attr,
9617 	&sensor_dev_attr_temp1_crit.dev_attr.attr,
9618 	&sensor_dev_attr_temp1_max.dev_attr.attr,
9619 	NULL
9620 };
9621 
9622 static const struct attribute_group tg3_group = {
9623 	.attrs = tg3_attributes,
9624 };
9625 
9626 static void tg3_hwmon_close(struct tg3 *tp)
9627 {
9628 	if (tp->hwmon_dev) {
9629 		hwmon_device_unregister(tp->hwmon_dev);
9630 		tp->hwmon_dev = NULL;
9631 		sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group);
9632 	}
9633 }
9634 
9635 static void tg3_hwmon_open(struct tg3 *tp)
9636 {
9637 	int i, err;
9638 	u32 size = 0;
9639 	struct pci_dev *pdev = tp->pdev;
9640 	struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
9641 
9642 	tg3_sd_scan_scratchpad(tp, ocirs);
9643 
9644 	for (i = 0; i < TG3_SD_NUM_RECS; i++) {
9645 		if (!ocirs[i].src_data_length)
9646 			continue;
9647 
9648 		size += ocirs[i].src_hdr_length;
9649 		size += ocirs[i].src_data_length;
9650 	}
9651 
9652 	if (!size)
9653 		return;
9654 
9655 	/* Register hwmon sysfs hooks */
9656 	err = sysfs_create_group(&pdev->dev.kobj, &tg3_group);
9657 	if (err) {
9658 		dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n");
9659 		return;
9660 	}
9661 
9662 	tp->hwmon_dev = hwmon_device_register(&pdev->dev);
9663 	if (IS_ERR(tp->hwmon_dev)) {
9664 		tp->hwmon_dev = NULL;
9665 		dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
9666 		sysfs_remove_group(&pdev->dev.kobj, &tg3_group);
9667 	}
9668 }
9669 
9670 
9671 #define TG3_STAT_ADD32(PSTAT, REG) \
9672 do {	u32 __val = tr32(REG); \
9673 	(PSTAT)->low += __val; \
9674 	if ((PSTAT)->low < __val) \
9675 		(PSTAT)->high += 1; \
9676 } while (0)
9677 
9678 static void tg3_periodic_fetch_stats(struct tg3 *tp)
9679 {
9680 	struct tg3_hw_stats *sp = tp->hw_stats;
9681 
9682 	if (!netif_carrier_ok(tp->dev))
9683 		return;
9684 
9685 	TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
9686 	TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
9687 	TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
9688 	TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
9689 	TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
9690 	TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
9691 	TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
9692 	TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
9693 	TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
9694 	TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
9695 	TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
9696 	TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
9697 	TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
9698 	if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) &&
9699 		     (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
9700 		      sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
9701 		u32 val;
9702 
9703 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9704 		val &= ~TG3_LSO_RD_DMA_TX_LENGTH_WA;
9705 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
9706 		tg3_flag_clear(tp, 5719_RDMA_BUG);
9707 	}
9708 
9709 	TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
9710 	TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
9711 	TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
9712 	TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
9713 	TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
9714 	TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
9715 	TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
9716 	TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
9717 	TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
9718 	TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
9719 	TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
9720 	TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
9721 	TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
9722 	TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
9723 
9724 	TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
9725 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9726 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 &&
9727 	    tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) {
9728 		TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
9729 	} else {
9730 		u32 val = tr32(HOSTCC_FLOW_ATTN);
9731 		val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
9732 		if (val) {
9733 			tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
9734 			sp->rx_discards.low += val;
9735 			if (sp->rx_discards.low < val)
9736 				sp->rx_discards.high += 1;
9737 		}
9738 		sp->mbuf_lwm_thresh_hit = sp->rx_discards;
9739 	}
9740 	TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
9741 }
9742 
9743 static void tg3_chk_missed_msi(struct tg3 *tp)
9744 {
9745 	u32 i;
9746 
9747 	for (i = 0; i < tp->irq_cnt; i++) {
9748 		struct tg3_napi *tnapi = &tp->napi[i];
9749 
9750 		if (tg3_has_work(tnapi)) {
9751 			if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
9752 			    tnapi->last_tx_cons == tnapi->tx_cons) {
9753 				if (tnapi->chk_msi_cnt < 1) {
9754 					tnapi->chk_msi_cnt++;
9755 					return;
9756 				}
9757 				tg3_msi(0, tnapi);
9758 			}
9759 		}
9760 		tnapi->chk_msi_cnt = 0;
9761 		tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
9762 		tnapi->last_tx_cons = tnapi->tx_cons;
9763 	}
9764 }
9765 
9766 static void tg3_timer(unsigned long __opaque)
9767 {
9768 	struct tg3 *tp = (struct tg3 *) __opaque;
9769 
9770 	if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING))
9771 		goto restart_timer;
9772 
9773 	spin_lock(&tp->lock);
9774 
9775 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
9776 	    tg3_flag(tp, 57765_CLASS))
9777 		tg3_chk_missed_msi(tp);
9778 
9779 	if (!tg3_flag(tp, TAGGED_STATUS)) {
9780 		/* All of this garbage is because when using non-tagged
9781 		 * IRQ status the mailbox/status_block protocol the chip
9782 		 * uses with the cpu is race prone.
9783 		 */
9784 		if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
9785 			tw32(GRC_LOCAL_CTRL,
9786 			     tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
9787 		} else {
9788 			tw32(HOSTCC_MODE, tp->coalesce_mode |
9789 			     HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
9790 		}
9791 
9792 		if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
9793 			spin_unlock(&tp->lock);
9794 			tg3_reset_task_schedule(tp);
9795 			goto restart_timer;
9796 		}
9797 	}
9798 
9799 	/* This part only runs once per second. */
9800 	if (!--tp->timer_counter) {
9801 		if (tg3_flag(tp, 5705_PLUS))
9802 			tg3_periodic_fetch_stats(tp);
9803 
9804 		if (tp->setlpicnt && !--tp->setlpicnt)
9805 			tg3_phy_eee_enable(tp);
9806 
9807 		if (tg3_flag(tp, USE_LINKCHG_REG)) {
9808 			u32 mac_stat;
9809 			int phy_event;
9810 
9811 			mac_stat = tr32(MAC_STATUS);
9812 
9813 			phy_event = 0;
9814 			if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
9815 				if (mac_stat & MAC_STATUS_MI_INTERRUPT)
9816 					phy_event = 1;
9817 			} else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
9818 				phy_event = 1;
9819 
9820 			if (phy_event)
9821 				tg3_setup_phy(tp, 0);
9822 		} else if (tg3_flag(tp, POLL_SERDES)) {
9823 			u32 mac_stat = tr32(MAC_STATUS);
9824 			int need_setup = 0;
9825 
9826 			if (netif_carrier_ok(tp->dev) &&
9827 			    (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
9828 				need_setup = 1;
9829 			}
9830 			if (!netif_carrier_ok(tp->dev) &&
9831 			    (mac_stat & (MAC_STATUS_PCS_SYNCED |
9832 					 MAC_STATUS_SIGNAL_DET))) {
9833 				need_setup = 1;
9834 			}
9835 			if (need_setup) {
9836 				if (!tp->serdes_counter) {
9837 					tw32_f(MAC_MODE,
9838 					     (tp->mac_mode &
9839 					      ~MAC_MODE_PORT_MODE_MASK));
9840 					udelay(40);
9841 					tw32_f(MAC_MODE, tp->mac_mode);
9842 					udelay(40);
9843 				}
9844 				tg3_setup_phy(tp, 0);
9845 			}
9846 		} else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9847 			   tg3_flag(tp, 5780_CLASS)) {
9848 			tg3_serdes_parallel_detect(tp);
9849 		}
9850 
9851 		tp->timer_counter = tp->timer_multiplier;
9852 	}
9853 
9854 	/* Heartbeat is only sent once every 2 seconds.
9855 	 *
9856 	 * The heartbeat is to tell the ASF firmware that the host
9857 	 * driver is still alive.  In the event that the OS crashes,
9858 	 * ASF needs to reset the hardware to free up the FIFO space
9859 	 * that may be filled with rx packets destined for the host.
9860 	 * If the FIFO is full, ASF will no longer function properly.
9861 	 *
9862 	 * Unintended resets have been reported on real time kernels
9863 	 * where the timer doesn't run on time.  Netpoll will also have
9864 	 * same problem.
9865 	 *
9866 	 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
9867 	 * to check the ring condition when the heartbeat is expiring
9868 	 * before doing the reset.  This will prevent most unintended
9869 	 * resets.
9870 	 */
9871 	if (!--tp->asf_counter) {
9872 		if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
9873 			tg3_wait_for_event_ack(tp);
9874 
9875 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
9876 				      FWCMD_NICDRV_ALIVE3);
9877 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
9878 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
9879 				      TG3_FW_UPDATE_TIMEOUT_SEC);
9880 
9881 			tg3_generate_fw_event(tp);
9882 		}
9883 		tp->asf_counter = tp->asf_multiplier;
9884 	}
9885 
9886 	spin_unlock(&tp->lock);
9887 
9888 restart_timer:
9889 	tp->timer.expires = jiffies + tp->timer_offset;
9890 	add_timer(&tp->timer);
9891 }
9892 
9893 static void __devinit tg3_timer_init(struct tg3 *tp)
9894 {
9895 	if (tg3_flag(tp, TAGGED_STATUS) &&
9896 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9897 	    !tg3_flag(tp, 57765_CLASS))
9898 		tp->timer_offset = HZ;
9899 	else
9900 		tp->timer_offset = HZ / 10;
9901 
9902 	BUG_ON(tp->timer_offset > HZ);
9903 
9904 	tp->timer_multiplier = (HZ / tp->timer_offset);
9905 	tp->asf_multiplier = (HZ / tp->timer_offset) *
9906 			     TG3_FW_UPDATE_FREQ_SEC;
9907 
9908 	init_timer(&tp->timer);
9909 	tp->timer.data = (unsigned long) tp;
9910 	tp->timer.function = tg3_timer;
9911 }
9912 
9913 static void tg3_timer_start(struct tg3 *tp)
9914 {
9915 	tp->asf_counter   = tp->asf_multiplier;
9916 	tp->timer_counter = tp->timer_multiplier;
9917 
9918 	tp->timer.expires = jiffies + tp->timer_offset;
9919 	add_timer(&tp->timer);
9920 }
9921 
9922 static void tg3_timer_stop(struct tg3 *tp)
9923 {
9924 	del_timer_sync(&tp->timer);
9925 }
9926 
9927 /* Restart hardware after configuration changes, self-test, etc.
9928  * Invoked with tp->lock held.
9929  */
9930 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
9931 	__releases(tp->lock)
9932 	__acquires(tp->lock)
9933 {
9934 	int err;
9935 
9936 	err = tg3_init_hw(tp, reset_phy);
9937 	if (err) {
9938 		netdev_err(tp->dev,
9939 			   "Failed to re-initialize device, aborting\n");
9940 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9941 		tg3_full_unlock(tp);
9942 		tg3_timer_stop(tp);
9943 		tp->irq_sync = 0;
9944 		tg3_napi_enable(tp);
9945 		dev_close(tp->dev);
9946 		tg3_full_lock(tp, 0);
9947 	}
9948 	return err;
9949 }
9950 
9951 static void tg3_reset_task(struct work_struct *work)
9952 {
9953 	struct tg3 *tp = container_of(work, struct tg3, reset_task);
9954 	int err;
9955 
9956 	tg3_full_lock(tp, 0);
9957 
9958 	if (!netif_running(tp->dev)) {
9959 		tg3_flag_clear(tp, RESET_TASK_PENDING);
9960 		tg3_full_unlock(tp);
9961 		return;
9962 	}
9963 
9964 	tg3_full_unlock(tp);
9965 
9966 	tg3_phy_stop(tp);
9967 
9968 	tg3_netif_stop(tp);
9969 
9970 	tg3_full_lock(tp, 1);
9971 
9972 	if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
9973 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
9974 		tp->write32_rx_mbox = tg3_write_flush_reg32;
9975 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
9976 		tg3_flag_clear(tp, TX_RECOVERY_PENDING);
9977 	}
9978 
9979 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
9980 	err = tg3_init_hw(tp, 1);
9981 	if (err)
9982 		goto out;
9983 
9984 	tg3_netif_start(tp);
9985 
9986 out:
9987 	tg3_full_unlock(tp);
9988 
9989 	if (!err)
9990 		tg3_phy_start(tp);
9991 
9992 	tg3_flag_clear(tp, RESET_TASK_PENDING);
9993 }
9994 
9995 static int tg3_request_irq(struct tg3 *tp, int irq_num)
9996 {
9997 	irq_handler_t fn;
9998 	unsigned long flags;
9999 	char *name;
10000 	struct tg3_napi *tnapi = &tp->napi[irq_num];
10001 
10002 	if (tp->irq_cnt == 1)
10003 		name = tp->dev->name;
10004 	else {
10005 		name = &tnapi->irq_lbl[0];
10006 		snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num);
10007 		name[IFNAMSIZ-1] = 0;
10008 	}
10009 
10010 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10011 		fn = tg3_msi;
10012 		if (tg3_flag(tp, 1SHOT_MSI))
10013 			fn = tg3_msi_1shot;
10014 		flags = 0;
10015 	} else {
10016 		fn = tg3_interrupt;
10017 		if (tg3_flag(tp, TAGGED_STATUS))
10018 			fn = tg3_interrupt_tagged;
10019 		flags = IRQF_SHARED;
10020 	}
10021 
10022 	return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
10023 }
10024 
10025 static int tg3_test_interrupt(struct tg3 *tp)
10026 {
10027 	struct tg3_napi *tnapi = &tp->napi[0];
10028 	struct net_device *dev = tp->dev;
10029 	int err, i, intr_ok = 0;
10030 	u32 val;
10031 
10032 	if (!netif_running(dev))
10033 		return -ENODEV;
10034 
10035 	tg3_disable_ints(tp);
10036 
10037 	free_irq(tnapi->irq_vec, tnapi);
10038 
10039 	/*
10040 	 * Turn off MSI one shot mode.  Otherwise this test has no
10041 	 * observable way to know whether the interrupt was delivered.
10042 	 */
10043 	if (tg3_flag(tp, 57765_PLUS)) {
10044 		val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
10045 		tw32(MSGINT_MODE, val);
10046 	}
10047 
10048 	err = request_irq(tnapi->irq_vec, tg3_test_isr,
10049 			  IRQF_SHARED, dev->name, tnapi);
10050 	if (err)
10051 		return err;
10052 
10053 	tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
10054 	tg3_enable_ints(tp);
10055 
10056 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
10057 	       tnapi->coal_now);
10058 
10059 	for (i = 0; i < 5; i++) {
10060 		u32 int_mbox, misc_host_ctrl;
10061 
10062 		int_mbox = tr32_mailbox(tnapi->int_mbox);
10063 		misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
10064 
10065 		if ((int_mbox != 0) ||
10066 		    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
10067 			intr_ok = 1;
10068 			break;
10069 		}
10070 
10071 		if (tg3_flag(tp, 57765_PLUS) &&
10072 		    tnapi->hw_status->status_tag != tnapi->last_tag)
10073 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
10074 
10075 		msleep(10);
10076 	}
10077 
10078 	tg3_disable_ints(tp);
10079 
10080 	free_irq(tnapi->irq_vec, tnapi);
10081 
10082 	err = tg3_request_irq(tp, 0);
10083 
10084 	if (err)
10085 		return err;
10086 
10087 	if (intr_ok) {
10088 		/* Reenable MSI one shot mode. */
10089 		if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
10090 			val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
10091 			tw32(MSGINT_MODE, val);
10092 		}
10093 		return 0;
10094 	}
10095 
10096 	return -EIO;
10097 }
10098 
10099 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
10100  * successfully restored
10101  */
10102 static int tg3_test_msi(struct tg3 *tp)
10103 {
10104 	int err;
10105 	u16 pci_cmd;
10106 
10107 	if (!tg3_flag(tp, USING_MSI))
10108 		return 0;
10109 
10110 	/* Turn off SERR reporting in case MSI terminates with Master
10111 	 * Abort.
10112 	 */
10113 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10114 	pci_write_config_word(tp->pdev, PCI_COMMAND,
10115 			      pci_cmd & ~PCI_COMMAND_SERR);
10116 
10117 	err = tg3_test_interrupt(tp);
10118 
10119 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10120 
10121 	if (!err)
10122 		return 0;
10123 
10124 	/* other failures */
10125 	if (err != -EIO)
10126 		return err;
10127 
10128 	/* MSI test failed, go back to INTx mode */
10129 	netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
10130 		    "to INTx mode. Please report this failure to the PCI "
10131 		    "maintainer and include system chipset information\n");
10132 
10133 	free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10134 
10135 	pci_disable_msi(tp->pdev);
10136 
10137 	tg3_flag_clear(tp, USING_MSI);
10138 	tp->napi[0].irq_vec = tp->pdev->irq;
10139 
10140 	err = tg3_request_irq(tp, 0);
10141 	if (err)
10142 		return err;
10143 
10144 	/* Need to reset the chip because the MSI cycle may have terminated
10145 	 * with Master Abort.
10146 	 */
10147 	tg3_full_lock(tp, 1);
10148 
10149 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10150 	err = tg3_init_hw(tp, 1);
10151 
10152 	tg3_full_unlock(tp);
10153 
10154 	if (err)
10155 		free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10156 
10157 	return err;
10158 }
10159 
10160 static int tg3_request_firmware(struct tg3 *tp)
10161 {
10162 	const __be32 *fw_data;
10163 
10164 	if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
10165 		netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
10166 			   tp->fw_needed);
10167 		return -ENOENT;
10168 	}
10169 
10170 	fw_data = (void *)tp->fw->data;
10171 
10172 	/* Firmware blob starts with version numbers, followed by
10173 	 * start address and _full_ length including BSS sections
10174 	 * (which must be longer than the actual data, of course
10175 	 */
10176 
10177 	tp->fw_len = be32_to_cpu(fw_data[2]);	/* includes bss */
10178 	if (tp->fw_len < (tp->fw->size - 12)) {
10179 		netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
10180 			   tp->fw_len, tp->fw_needed);
10181 		release_firmware(tp->fw);
10182 		tp->fw = NULL;
10183 		return -EINVAL;
10184 	}
10185 
10186 	/* We no longer need firmware; we have it. */
10187 	tp->fw_needed = NULL;
10188 	return 0;
10189 }
10190 
10191 static u32 tg3_irq_count(struct tg3 *tp)
10192 {
10193 	u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
10194 
10195 	if (irq_cnt > 1) {
10196 		/* We want as many rx rings enabled as there are cpus.
10197 		 * In multiqueue MSI-X mode, the first MSI-X vector
10198 		 * only deals with link interrupts, etc, so we add
10199 		 * one to the number of vectors we are requesting.
10200 		 */
10201 		irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
10202 	}
10203 
10204 	return irq_cnt;
10205 }
10206 
10207 static bool tg3_enable_msix(struct tg3 *tp)
10208 {
10209 	int i, rc;
10210 	struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
10211 
10212 	tp->txq_cnt = tp->txq_req;
10213 	tp->rxq_cnt = tp->rxq_req;
10214 	if (!tp->rxq_cnt)
10215 		tp->rxq_cnt = netif_get_num_default_rss_queues();
10216 	if (tp->rxq_cnt > tp->rxq_max)
10217 		tp->rxq_cnt = tp->rxq_max;
10218 
10219 	/* Disable multiple TX rings by default.  Simple round-robin hardware
10220 	 * scheduling of the TX rings can cause starvation of rings with
10221 	 * small packets when other rings have TSO or jumbo packets.
10222 	 */
10223 	if (!tp->txq_req)
10224 		tp->txq_cnt = 1;
10225 
10226 	tp->irq_cnt = tg3_irq_count(tp);
10227 
10228 	for (i = 0; i < tp->irq_max; i++) {
10229 		msix_ent[i].entry  = i;
10230 		msix_ent[i].vector = 0;
10231 	}
10232 
10233 	rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
10234 	if (rc < 0) {
10235 		return false;
10236 	} else if (rc != 0) {
10237 		if (pci_enable_msix(tp->pdev, msix_ent, rc))
10238 			return false;
10239 		netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
10240 			      tp->irq_cnt, rc);
10241 		tp->irq_cnt = rc;
10242 		tp->rxq_cnt = max(rc - 1, 1);
10243 		if (tp->txq_cnt)
10244 			tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
10245 	}
10246 
10247 	for (i = 0; i < tp->irq_max; i++)
10248 		tp->napi[i].irq_vec = msix_ent[i].vector;
10249 
10250 	if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
10251 		pci_disable_msix(tp->pdev);
10252 		return false;
10253 	}
10254 
10255 	if (tp->irq_cnt == 1)
10256 		return true;
10257 
10258 	tg3_flag_set(tp, ENABLE_RSS);
10259 
10260 	if (tp->txq_cnt > 1)
10261 		tg3_flag_set(tp, ENABLE_TSS);
10262 
10263 	netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
10264 
10265 	return true;
10266 }
10267 
10268 static void tg3_ints_init(struct tg3 *tp)
10269 {
10270 	if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
10271 	    !tg3_flag(tp, TAGGED_STATUS)) {
10272 		/* All MSI supporting chips should support tagged
10273 		 * status.  Assert that this is the case.
10274 		 */
10275 		netdev_warn(tp->dev,
10276 			    "MSI without TAGGED_STATUS? Not using MSI\n");
10277 		goto defcfg;
10278 	}
10279 
10280 	if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
10281 		tg3_flag_set(tp, USING_MSIX);
10282 	else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
10283 		tg3_flag_set(tp, USING_MSI);
10284 
10285 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10286 		u32 msi_mode = tr32(MSGINT_MODE);
10287 		if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
10288 			msi_mode |= MSGINT_MODE_MULTIVEC_EN;
10289 		if (!tg3_flag(tp, 1SHOT_MSI))
10290 			msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
10291 		tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
10292 	}
10293 defcfg:
10294 	if (!tg3_flag(tp, USING_MSIX)) {
10295 		tp->irq_cnt = 1;
10296 		tp->napi[0].irq_vec = tp->pdev->irq;
10297 	}
10298 
10299 	if (tp->irq_cnt == 1) {
10300 		tp->txq_cnt = 1;
10301 		tp->rxq_cnt = 1;
10302 		netif_set_real_num_tx_queues(tp->dev, 1);
10303 		netif_set_real_num_rx_queues(tp->dev, 1);
10304 	}
10305 }
10306 
10307 static void tg3_ints_fini(struct tg3 *tp)
10308 {
10309 	if (tg3_flag(tp, USING_MSIX))
10310 		pci_disable_msix(tp->pdev);
10311 	else if (tg3_flag(tp, USING_MSI))
10312 		pci_disable_msi(tp->pdev);
10313 	tg3_flag_clear(tp, USING_MSI);
10314 	tg3_flag_clear(tp, USING_MSIX);
10315 	tg3_flag_clear(tp, ENABLE_RSS);
10316 	tg3_flag_clear(tp, ENABLE_TSS);
10317 }
10318 
10319 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq)
10320 {
10321 	struct net_device *dev = tp->dev;
10322 	int i, err;
10323 
10324 	/*
10325 	 * Setup interrupts first so we know how
10326 	 * many NAPI resources to allocate
10327 	 */
10328 	tg3_ints_init(tp);
10329 
10330 	tg3_rss_check_indir_tbl(tp);
10331 
10332 	/* The placement of this call is tied
10333 	 * to the setup and use of Host TX descriptors.
10334 	 */
10335 	err = tg3_alloc_consistent(tp);
10336 	if (err)
10337 		goto err_out1;
10338 
10339 	tg3_napi_init(tp);
10340 
10341 	tg3_napi_enable(tp);
10342 
10343 	for (i = 0; i < tp->irq_cnt; i++) {
10344 		struct tg3_napi *tnapi = &tp->napi[i];
10345 		err = tg3_request_irq(tp, i);
10346 		if (err) {
10347 			for (i--; i >= 0; i--) {
10348 				tnapi = &tp->napi[i];
10349 				free_irq(tnapi->irq_vec, tnapi);
10350 			}
10351 			goto err_out2;
10352 		}
10353 	}
10354 
10355 	tg3_full_lock(tp, 0);
10356 
10357 	err = tg3_init_hw(tp, reset_phy);
10358 	if (err) {
10359 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10360 		tg3_free_rings(tp);
10361 	}
10362 
10363 	tg3_full_unlock(tp);
10364 
10365 	if (err)
10366 		goto err_out3;
10367 
10368 	if (test_irq && tg3_flag(tp, USING_MSI)) {
10369 		err = tg3_test_msi(tp);
10370 
10371 		if (err) {
10372 			tg3_full_lock(tp, 0);
10373 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10374 			tg3_free_rings(tp);
10375 			tg3_full_unlock(tp);
10376 
10377 			goto err_out2;
10378 		}
10379 
10380 		if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
10381 			u32 val = tr32(PCIE_TRANSACTION_CFG);
10382 
10383 			tw32(PCIE_TRANSACTION_CFG,
10384 			     val | PCIE_TRANS_CFG_1SHOT_MSI);
10385 		}
10386 	}
10387 
10388 	tg3_phy_start(tp);
10389 
10390 	tg3_hwmon_open(tp);
10391 
10392 	tg3_full_lock(tp, 0);
10393 
10394 	tg3_timer_start(tp);
10395 	tg3_flag_set(tp, INIT_COMPLETE);
10396 	tg3_enable_ints(tp);
10397 
10398 	tg3_full_unlock(tp);
10399 
10400 	netif_tx_start_all_queues(dev);
10401 
10402 	/*
10403 	 * Reset loopback feature if it was turned on while the device was down
10404 	 * make sure that it's installed properly now.
10405 	 */
10406 	if (dev->features & NETIF_F_LOOPBACK)
10407 		tg3_set_loopback(dev, dev->features);
10408 
10409 	return 0;
10410 
10411 err_out3:
10412 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10413 		struct tg3_napi *tnapi = &tp->napi[i];
10414 		free_irq(tnapi->irq_vec, tnapi);
10415 	}
10416 
10417 err_out2:
10418 	tg3_napi_disable(tp);
10419 	tg3_napi_fini(tp);
10420 	tg3_free_consistent(tp);
10421 
10422 err_out1:
10423 	tg3_ints_fini(tp);
10424 
10425 	return err;
10426 }
10427 
10428 static void tg3_stop(struct tg3 *tp)
10429 {
10430 	int i;
10431 
10432 	tg3_napi_disable(tp);
10433 	tg3_reset_task_cancel(tp);
10434 
10435 	netif_tx_disable(tp->dev);
10436 
10437 	tg3_timer_stop(tp);
10438 
10439 	tg3_hwmon_close(tp);
10440 
10441 	tg3_phy_stop(tp);
10442 
10443 	tg3_full_lock(tp, 1);
10444 
10445 	tg3_disable_ints(tp);
10446 
10447 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10448 	tg3_free_rings(tp);
10449 	tg3_flag_clear(tp, INIT_COMPLETE);
10450 
10451 	tg3_full_unlock(tp);
10452 
10453 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10454 		struct tg3_napi *tnapi = &tp->napi[i];
10455 		free_irq(tnapi->irq_vec, tnapi);
10456 	}
10457 
10458 	tg3_ints_fini(tp);
10459 
10460 	tg3_napi_fini(tp);
10461 
10462 	tg3_free_consistent(tp);
10463 }
10464 
10465 static int tg3_open(struct net_device *dev)
10466 {
10467 	struct tg3 *tp = netdev_priv(dev);
10468 	int err;
10469 
10470 	if (tp->fw_needed) {
10471 		err = tg3_request_firmware(tp);
10472 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
10473 			if (err)
10474 				return err;
10475 		} else if (err) {
10476 			netdev_warn(tp->dev, "TSO capability disabled\n");
10477 			tg3_flag_clear(tp, TSO_CAPABLE);
10478 		} else if (!tg3_flag(tp, TSO_CAPABLE)) {
10479 			netdev_notice(tp->dev, "TSO capability restored\n");
10480 			tg3_flag_set(tp, TSO_CAPABLE);
10481 		}
10482 	}
10483 
10484 	netif_carrier_off(tp->dev);
10485 
10486 	err = tg3_power_up(tp);
10487 	if (err)
10488 		return err;
10489 
10490 	tg3_full_lock(tp, 0);
10491 
10492 	tg3_disable_ints(tp);
10493 	tg3_flag_clear(tp, INIT_COMPLETE);
10494 
10495 	tg3_full_unlock(tp);
10496 
10497 	err = tg3_start(tp, true, true);
10498 	if (err) {
10499 		tg3_frob_aux_power(tp, false);
10500 		pci_set_power_state(tp->pdev, PCI_D3hot);
10501 	}
10502 	return err;
10503 }
10504 
10505 static int tg3_close(struct net_device *dev)
10506 {
10507 	struct tg3 *tp = netdev_priv(dev);
10508 
10509 	tg3_stop(tp);
10510 
10511 	/* Clear stats across close / open calls */
10512 	memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
10513 	memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));
10514 
10515 	tg3_power_down(tp);
10516 
10517 	netif_carrier_off(tp->dev);
10518 
10519 	return 0;
10520 }
10521 
10522 static inline u64 get_stat64(tg3_stat64_t *val)
10523 {
10524        return ((u64)val->high << 32) | ((u64)val->low);
10525 }
10526 
10527 static u64 tg3_calc_crc_errors(struct tg3 *tp)
10528 {
10529 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10530 
10531 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10532 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10533 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
10534 		u32 val;
10535 
10536 		if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
10537 			tg3_writephy(tp, MII_TG3_TEST1,
10538 				     val | MII_TG3_TEST1_CRC_EN);
10539 			tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
10540 		} else
10541 			val = 0;
10542 
10543 		tp->phy_crc_errors += val;
10544 
10545 		return tp->phy_crc_errors;
10546 	}
10547 
10548 	return get_stat64(&hw_stats->rx_fcs_errors);
10549 }
10550 
10551 #define ESTAT_ADD(member) \
10552 	estats->member =	old_estats->member + \
10553 				get_stat64(&hw_stats->member)
10554 
10555 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
10556 {
10557 	struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
10558 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10559 
10560 	ESTAT_ADD(rx_octets);
10561 	ESTAT_ADD(rx_fragments);
10562 	ESTAT_ADD(rx_ucast_packets);
10563 	ESTAT_ADD(rx_mcast_packets);
10564 	ESTAT_ADD(rx_bcast_packets);
10565 	ESTAT_ADD(rx_fcs_errors);
10566 	ESTAT_ADD(rx_align_errors);
10567 	ESTAT_ADD(rx_xon_pause_rcvd);
10568 	ESTAT_ADD(rx_xoff_pause_rcvd);
10569 	ESTAT_ADD(rx_mac_ctrl_rcvd);
10570 	ESTAT_ADD(rx_xoff_entered);
10571 	ESTAT_ADD(rx_frame_too_long_errors);
10572 	ESTAT_ADD(rx_jabbers);
10573 	ESTAT_ADD(rx_undersize_packets);
10574 	ESTAT_ADD(rx_in_length_errors);
10575 	ESTAT_ADD(rx_out_length_errors);
10576 	ESTAT_ADD(rx_64_or_less_octet_packets);
10577 	ESTAT_ADD(rx_65_to_127_octet_packets);
10578 	ESTAT_ADD(rx_128_to_255_octet_packets);
10579 	ESTAT_ADD(rx_256_to_511_octet_packets);
10580 	ESTAT_ADD(rx_512_to_1023_octet_packets);
10581 	ESTAT_ADD(rx_1024_to_1522_octet_packets);
10582 	ESTAT_ADD(rx_1523_to_2047_octet_packets);
10583 	ESTAT_ADD(rx_2048_to_4095_octet_packets);
10584 	ESTAT_ADD(rx_4096_to_8191_octet_packets);
10585 	ESTAT_ADD(rx_8192_to_9022_octet_packets);
10586 
10587 	ESTAT_ADD(tx_octets);
10588 	ESTAT_ADD(tx_collisions);
10589 	ESTAT_ADD(tx_xon_sent);
10590 	ESTAT_ADD(tx_xoff_sent);
10591 	ESTAT_ADD(tx_flow_control);
10592 	ESTAT_ADD(tx_mac_errors);
10593 	ESTAT_ADD(tx_single_collisions);
10594 	ESTAT_ADD(tx_mult_collisions);
10595 	ESTAT_ADD(tx_deferred);
10596 	ESTAT_ADD(tx_excessive_collisions);
10597 	ESTAT_ADD(tx_late_collisions);
10598 	ESTAT_ADD(tx_collide_2times);
10599 	ESTAT_ADD(tx_collide_3times);
10600 	ESTAT_ADD(tx_collide_4times);
10601 	ESTAT_ADD(tx_collide_5times);
10602 	ESTAT_ADD(tx_collide_6times);
10603 	ESTAT_ADD(tx_collide_7times);
10604 	ESTAT_ADD(tx_collide_8times);
10605 	ESTAT_ADD(tx_collide_9times);
10606 	ESTAT_ADD(tx_collide_10times);
10607 	ESTAT_ADD(tx_collide_11times);
10608 	ESTAT_ADD(tx_collide_12times);
10609 	ESTAT_ADD(tx_collide_13times);
10610 	ESTAT_ADD(tx_collide_14times);
10611 	ESTAT_ADD(tx_collide_15times);
10612 	ESTAT_ADD(tx_ucast_packets);
10613 	ESTAT_ADD(tx_mcast_packets);
10614 	ESTAT_ADD(tx_bcast_packets);
10615 	ESTAT_ADD(tx_carrier_sense_errors);
10616 	ESTAT_ADD(tx_discards);
10617 	ESTAT_ADD(tx_errors);
10618 
10619 	ESTAT_ADD(dma_writeq_full);
10620 	ESTAT_ADD(dma_write_prioq_full);
10621 	ESTAT_ADD(rxbds_empty);
10622 	ESTAT_ADD(rx_discards);
10623 	ESTAT_ADD(rx_errors);
10624 	ESTAT_ADD(rx_threshold_hit);
10625 
10626 	ESTAT_ADD(dma_readq_full);
10627 	ESTAT_ADD(dma_read_prioq_full);
10628 	ESTAT_ADD(tx_comp_queue_full);
10629 
10630 	ESTAT_ADD(ring_set_send_prod_index);
10631 	ESTAT_ADD(ring_status_update);
10632 	ESTAT_ADD(nic_irqs);
10633 	ESTAT_ADD(nic_avoided_irqs);
10634 	ESTAT_ADD(nic_tx_threshold_hit);
10635 
10636 	ESTAT_ADD(mbuf_lwm_thresh_hit);
10637 }
10638 
10639 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
10640 {
10641 	struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
10642 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10643 
10644 	stats->rx_packets = old_stats->rx_packets +
10645 		get_stat64(&hw_stats->rx_ucast_packets) +
10646 		get_stat64(&hw_stats->rx_mcast_packets) +
10647 		get_stat64(&hw_stats->rx_bcast_packets);
10648 
10649 	stats->tx_packets = old_stats->tx_packets +
10650 		get_stat64(&hw_stats->tx_ucast_packets) +
10651 		get_stat64(&hw_stats->tx_mcast_packets) +
10652 		get_stat64(&hw_stats->tx_bcast_packets);
10653 
10654 	stats->rx_bytes = old_stats->rx_bytes +
10655 		get_stat64(&hw_stats->rx_octets);
10656 	stats->tx_bytes = old_stats->tx_bytes +
10657 		get_stat64(&hw_stats->tx_octets);
10658 
10659 	stats->rx_errors = old_stats->rx_errors +
10660 		get_stat64(&hw_stats->rx_errors);
10661 	stats->tx_errors = old_stats->tx_errors +
10662 		get_stat64(&hw_stats->tx_errors) +
10663 		get_stat64(&hw_stats->tx_mac_errors) +
10664 		get_stat64(&hw_stats->tx_carrier_sense_errors) +
10665 		get_stat64(&hw_stats->tx_discards);
10666 
10667 	stats->multicast = old_stats->multicast +
10668 		get_stat64(&hw_stats->rx_mcast_packets);
10669 	stats->collisions = old_stats->collisions +
10670 		get_stat64(&hw_stats->tx_collisions);
10671 
10672 	stats->rx_length_errors = old_stats->rx_length_errors +
10673 		get_stat64(&hw_stats->rx_frame_too_long_errors) +
10674 		get_stat64(&hw_stats->rx_undersize_packets);
10675 
10676 	stats->rx_over_errors = old_stats->rx_over_errors +
10677 		get_stat64(&hw_stats->rxbds_empty);
10678 	stats->rx_frame_errors = old_stats->rx_frame_errors +
10679 		get_stat64(&hw_stats->rx_align_errors);
10680 	stats->tx_aborted_errors = old_stats->tx_aborted_errors +
10681 		get_stat64(&hw_stats->tx_discards);
10682 	stats->tx_carrier_errors = old_stats->tx_carrier_errors +
10683 		get_stat64(&hw_stats->tx_carrier_sense_errors);
10684 
10685 	stats->rx_crc_errors = old_stats->rx_crc_errors +
10686 		tg3_calc_crc_errors(tp);
10687 
10688 	stats->rx_missed_errors = old_stats->rx_missed_errors +
10689 		get_stat64(&hw_stats->rx_discards);
10690 
10691 	stats->rx_dropped = tp->rx_dropped;
10692 	stats->tx_dropped = tp->tx_dropped;
10693 }
10694 
10695 static int tg3_get_regs_len(struct net_device *dev)
10696 {
10697 	return TG3_REG_BLK_SIZE;
10698 }
10699 
10700 static void tg3_get_regs(struct net_device *dev,
10701 		struct ethtool_regs *regs, void *_p)
10702 {
10703 	struct tg3 *tp = netdev_priv(dev);
10704 
10705 	regs->version = 0;
10706 
10707 	memset(_p, 0, TG3_REG_BLK_SIZE);
10708 
10709 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10710 		return;
10711 
10712 	tg3_full_lock(tp, 0);
10713 
10714 	tg3_dump_legacy_regs(tp, (u32 *)_p);
10715 
10716 	tg3_full_unlock(tp);
10717 }
10718 
10719 static int tg3_get_eeprom_len(struct net_device *dev)
10720 {
10721 	struct tg3 *tp = netdev_priv(dev);
10722 
10723 	return tp->nvram_size;
10724 }
10725 
10726 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10727 {
10728 	struct tg3 *tp = netdev_priv(dev);
10729 	int ret;
10730 	u8  *pd;
10731 	u32 i, offset, len, b_offset, b_count;
10732 	__be32 val;
10733 
10734 	if (tg3_flag(tp, NO_NVRAM))
10735 		return -EINVAL;
10736 
10737 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10738 		return -EAGAIN;
10739 
10740 	offset = eeprom->offset;
10741 	len = eeprom->len;
10742 	eeprom->len = 0;
10743 
10744 	eeprom->magic = TG3_EEPROM_MAGIC;
10745 
10746 	if (offset & 3) {
10747 		/* adjustments to start on required 4 byte boundary */
10748 		b_offset = offset & 3;
10749 		b_count = 4 - b_offset;
10750 		if (b_count > len) {
10751 			/* i.e. offset=1 len=2 */
10752 			b_count = len;
10753 		}
10754 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
10755 		if (ret)
10756 			return ret;
10757 		memcpy(data, ((char *)&val) + b_offset, b_count);
10758 		len -= b_count;
10759 		offset += b_count;
10760 		eeprom->len += b_count;
10761 	}
10762 
10763 	/* read bytes up to the last 4 byte boundary */
10764 	pd = &data[eeprom->len];
10765 	for (i = 0; i < (len - (len & 3)); i += 4) {
10766 		ret = tg3_nvram_read_be32(tp, offset + i, &val);
10767 		if (ret) {
10768 			eeprom->len += i;
10769 			return ret;
10770 		}
10771 		memcpy(pd + i, &val, 4);
10772 	}
10773 	eeprom->len += i;
10774 
10775 	if (len & 3) {
10776 		/* read last bytes not ending on 4 byte boundary */
10777 		pd = &data[eeprom->len];
10778 		b_count = len & 3;
10779 		b_offset = offset + len - b_count;
10780 		ret = tg3_nvram_read_be32(tp, b_offset, &val);
10781 		if (ret)
10782 			return ret;
10783 		memcpy(pd, &val, b_count);
10784 		eeprom->len += b_count;
10785 	}
10786 	return 0;
10787 }
10788 
10789 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10790 {
10791 	struct tg3 *tp = netdev_priv(dev);
10792 	int ret;
10793 	u32 offset, len, b_offset, odd_len;
10794 	u8 *buf;
10795 	__be32 start, end;
10796 
10797 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10798 		return -EAGAIN;
10799 
10800 	if (tg3_flag(tp, NO_NVRAM) ||
10801 	    eeprom->magic != TG3_EEPROM_MAGIC)
10802 		return -EINVAL;
10803 
10804 	offset = eeprom->offset;
10805 	len = eeprom->len;
10806 
10807 	if ((b_offset = (offset & 3))) {
10808 		/* adjustments to start on required 4 byte boundary */
10809 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
10810 		if (ret)
10811 			return ret;
10812 		len += b_offset;
10813 		offset &= ~3;
10814 		if (len < 4)
10815 			len = 4;
10816 	}
10817 
10818 	odd_len = 0;
10819 	if (len & 3) {
10820 		/* adjustments to end on required 4 byte boundary */
10821 		odd_len = 1;
10822 		len = (len + 3) & ~3;
10823 		ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
10824 		if (ret)
10825 			return ret;
10826 	}
10827 
10828 	buf = data;
10829 	if (b_offset || odd_len) {
10830 		buf = kmalloc(len, GFP_KERNEL);
10831 		if (!buf)
10832 			return -ENOMEM;
10833 		if (b_offset)
10834 			memcpy(buf, &start, 4);
10835 		if (odd_len)
10836 			memcpy(buf+len-4, &end, 4);
10837 		memcpy(buf + b_offset, data, eeprom->len);
10838 	}
10839 
10840 	ret = tg3_nvram_write_block(tp, offset, len, buf);
10841 
10842 	if (buf != data)
10843 		kfree(buf);
10844 
10845 	return ret;
10846 }
10847 
10848 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10849 {
10850 	struct tg3 *tp = netdev_priv(dev);
10851 
10852 	if (tg3_flag(tp, USE_PHYLIB)) {
10853 		struct phy_device *phydev;
10854 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10855 			return -EAGAIN;
10856 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10857 		return phy_ethtool_gset(phydev, cmd);
10858 	}
10859 
10860 	cmd->supported = (SUPPORTED_Autoneg);
10861 
10862 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10863 		cmd->supported |= (SUPPORTED_1000baseT_Half |
10864 				   SUPPORTED_1000baseT_Full);
10865 
10866 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10867 		cmd->supported |= (SUPPORTED_100baseT_Half |
10868 				  SUPPORTED_100baseT_Full |
10869 				  SUPPORTED_10baseT_Half |
10870 				  SUPPORTED_10baseT_Full |
10871 				  SUPPORTED_TP);
10872 		cmd->port = PORT_TP;
10873 	} else {
10874 		cmd->supported |= SUPPORTED_FIBRE;
10875 		cmd->port = PORT_FIBRE;
10876 	}
10877 
10878 	cmd->advertising = tp->link_config.advertising;
10879 	if (tg3_flag(tp, PAUSE_AUTONEG)) {
10880 		if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
10881 			if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10882 				cmd->advertising |= ADVERTISED_Pause;
10883 			} else {
10884 				cmd->advertising |= ADVERTISED_Pause |
10885 						    ADVERTISED_Asym_Pause;
10886 			}
10887 		} else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10888 			cmd->advertising |= ADVERTISED_Asym_Pause;
10889 		}
10890 	}
10891 	if (netif_running(dev) && netif_carrier_ok(dev)) {
10892 		ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
10893 		cmd->duplex = tp->link_config.active_duplex;
10894 		cmd->lp_advertising = tp->link_config.rmt_adv;
10895 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10896 			if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
10897 				cmd->eth_tp_mdix = ETH_TP_MDI_X;
10898 			else
10899 				cmd->eth_tp_mdix = ETH_TP_MDI;
10900 		}
10901 	} else {
10902 		ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
10903 		cmd->duplex = DUPLEX_UNKNOWN;
10904 		cmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
10905 	}
10906 	cmd->phy_address = tp->phy_addr;
10907 	cmd->transceiver = XCVR_INTERNAL;
10908 	cmd->autoneg = tp->link_config.autoneg;
10909 	cmd->maxtxpkt = 0;
10910 	cmd->maxrxpkt = 0;
10911 	return 0;
10912 }
10913 
10914 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10915 {
10916 	struct tg3 *tp = netdev_priv(dev);
10917 	u32 speed = ethtool_cmd_speed(cmd);
10918 
10919 	if (tg3_flag(tp, USE_PHYLIB)) {
10920 		struct phy_device *phydev;
10921 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10922 			return -EAGAIN;
10923 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10924 		return phy_ethtool_sset(phydev, cmd);
10925 	}
10926 
10927 	if (cmd->autoneg != AUTONEG_ENABLE &&
10928 	    cmd->autoneg != AUTONEG_DISABLE)
10929 		return -EINVAL;
10930 
10931 	if (cmd->autoneg == AUTONEG_DISABLE &&
10932 	    cmd->duplex != DUPLEX_FULL &&
10933 	    cmd->duplex != DUPLEX_HALF)
10934 		return -EINVAL;
10935 
10936 	if (cmd->autoneg == AUTONEG_ENABLE) {
10937 		u32 mask = ADVERTISED_Autoneg |
10938 			   ADVERTISED_Pause |
10939 			   ADVERTISED_Asym_Pause;
10940 
10941 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10942 			mask |= ADVERTISED_1000baseT_Half |
10943 				ADVERTISED_1000baseT_Full;
10944 
10945 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
10946 			mask |= ADVERTISED_100baseT_Half |
10947 				ADVERTISED_100baseT_Full |
10948 				ADVERTISED_10baseT_Half |
10949 				ADVERTISED_10baseT_Full |
10950 				ADVERTISED_TP;
10951 		else
10952 			mask |= ADVERTISED_FIBRE;
10953 
10954 		if (cmd->advertising & ~mask)
10955 			return -EINVAL;
10956 
10957 		mask &= (ADVERTISED_1000baseT_Half |
10958 			 ADVERTISED_1000baseT_Full |
10959 			 ADVERTISED_100baseT_Half |
10960 			 ADVERTISED_100baseT_Full |
10961 			 ADVERTISED_10baseT_Half |
10962 			 ADVERTISED_10baseT_Full);
10963 
10964 		cmd->advertising &= mask;
10965 	} else {
10966 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
10967 			if (speed != SPEED_1000)
10968 				return -EINVAL;
10969 
10970 			if (cmd->duplex != DUPLEX_FULL)
10971 				return -EINVAL;
10972 		} else {
10973 			if (speed != SPEED_100 &&
10974 			    speed != SPEED_10)
10975 				return -EINVAL;
10976 		}
10977 	}
10978 
10979 	tg3_full_lock(tp, 0);
10980 
10981 	tp->link_config.autoneg = cmd->autoneg;
10982 	if (cmd->autoneg == AUTONEG_ENABLE) {
10983 		tp->link_config.advertising = (cmd->advertising |
10984 					      ADVERTISED_Autoneg);
10985 		tp->link_config.speed = SPEED_UNKNOWN;
10986 		tp->link_config.duplex = DUPLEX_UNKNOWN;
10987 	} else {
10988 		tp->link_config.advertising = 0;
10989 		tp->link_config.speed = speed;
10990 		tp->link_config.duplex = cmd->duplex;
10991 	}
10992 
10993 	if (netif_running(dev))
10994 		tg3_setup_phy(tp, 1);
10995 
10996 	tg3_full_unlock(tp);
10997 
10998 	return 0;
10999 }
11000 
11001 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
11002 {
11003 	struct tg3 *tp = netdev_priv(dev);
11004 
11005 	strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
11006 	strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
11007 	strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
11008 	strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
11009 }
11010 
11011 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
11012 {
11013 	struct tg3 *tp = netdev_priv(dev);
11014 
11015 	if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
11016 		wol->supported = WAKE_MAGIC;
11017 	else
11018 		wol->supported = 0;
11019 	wol->wolopts = 0;
11020 	if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
11021 		wol->wolopts = WAKE_MAGIC;
11022 	memset(&wol->sopass, 0, sizeof(wol->sopass));
11023 }
11024 
11025 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
11026 {
11027 	struct tg3 *tp = netdev_priv(dev);
11028 	struct device *dp = &tp->pdev->dev;
11029 
11030 	if (wol->wolopts & ~WAKE_MAGIC)
11031 		return -EINVAL;
11032 	if ((wol->wolopts & WAKE_MAGIC) &&
11033 	    !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
11034 		return -EINVAL;
11035 
11036 	device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
11037 
11038 	spin_lock_bh(&tp->lock);
11039 	if (device_may_wakeup(dp))
11040 		tg3_flag_set(tp, WOL_ENABLE);
11041 	else
11042 		tg3_flag_clear(tp, WOL_ENABLE);
11043 	spin_unlock_bh(&tp->lock);
11044 
11045 	return 0;
11046 }
11047 
11048 static u32 tg3_get_msglevel(struct net_device *dev)
11049 {
11050 	struct tg3 *tp = netdev_priv(dev);
11051 	return tp->msg_enable;
11052 }
11053 
11054 static void tg3_set_msglevel(struct net_device *dev, u32 value)
11055 {
11056 	struct tg3 *tp = netdev_priv(dev);
11057 	tp->msg_enable = value;
11058 }
11059 
11060 static int tg3_nway_reset(struct net_device *dev)
11061 {
11062 	struct tg3 *tp = netdev_priv(dev);
11063 	int r;
11064 
11065 	if (!netif_running(dev))
11066 		return -EAGAIN;
11067 
11068 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
11069 		return -EINVAL;
11070 
11071 	if (tg3_flag(tp, USE_PHYLIB)) {
11072 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11073 			return -EAGAIN;
11074 		r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
11075 	} else {
11076 		u32 bmcr;
11077 
11078 		spin_lock_bh(&tp->lock);
11079 		r = -EINVAL;
11080 		tg3_readphy(tp, MII_BMCR, &bmcr);
11081 		if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
11082 		    ((bmcr & BMCR_ANENABLE) ||
11083 		     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
11084 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
11085 						   BMCR_ANENABLE);
11086 			r = 0;
11087 		}
11088 		spin_unlock_bh(&tp->lock);
11089 	}
11090 
11091 	return r;
11092 }
11093 
11094 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11095 {
11096 	struct tg3 *tp = netdev_priv(dev);
11097 
11098 	ering->rx_max_pending = tp->rx_std_ring_mask;
11099 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
11100 		ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
11101 	else
11102 		ering->rx_jumbo_max_pending = 0;
11103 
11104 	ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
11105 
11106 	ering->rx_pending = tp->rx_pending;
11107 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
11108 		ering->rx_jumbo_pending = tp->rx_jumbo_pending;
11109 	else
11110 		ering->rx_jumbo_pending = 0;
11111 
11112 	ering->tx_pending = tp->napi[0].tx_pending;
11113 }
11114 
11115 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11116 {
11117 	struct tg3 *tp = netdev_priv(dev);
11118 	int i, irq_sync = 0, err = 0;
11119 
11120 	if ((ering->rx_pending > tp->rx_std_ring_mask) ||
11121 	    (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
11122 	    (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
11123 	    (ering->tx_pending <= MAX_SKB_FRAGS) ||
11124 	    (tg3_flag(tp, TSO_BUG) &&
11125 	     (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
11126 		return -EINVAL;
11127 
11128 	if (netif_running(dev)) {
11129 		tg3_phy_stop(tp);
11130 		tg3_netif_stop(tp);
11131 		irq_sync = 1;
11132 	}
11133 
11134 	tg3_full_lock(tp, irq_sync);
11135 
11136 	tp->rx_pending = ering->rx_pending;
11137 
11138 	if (tg3_flag(tp, MAX_RXPEND_64) &&
11139 	    tp->rx_pending > 63)
11140 		tp->rx_pending = 63;
11141 	tp->rx_jumbo_pending = ering->rx_jumbo_pending;
11142 
11143 	for (i = 0; i < tp->irq_max; i++)
11144 		tp->napi[i].tx_pending = ering->tx_pending;
11145 
11146 	if (netif_running(dev)) {
11147 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11148 		err = tg3_restart_hw(tp, 1);
11149 		if (!err)
11150 			tg3_netif_start(tp);
11151 	}
11152 
11153 	tg3_full_unlock(tp);
11154 
11155 	if (irq_sync && !err)
11156 		tg3_phy_start(tp);
11157 
11158 	return err;
11159 }
11160 
11161 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11162 {
11163 	struct tg3 *tp = netdev_priv(dev);
11164 
11165 	epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
11166 
11167 	if (tp->link_config.flowctrl & FLOW_CTRL_RX)
11168 		epause->rx_pause = 1;
11169 	else
11170 		epause->rx_pause = 0;
11171 
11172 	if (tp->link_config.flowctrl & FLOW_CTRL_TX)
11173 		epause->tx_pause = 1;
11174 	else
11175 		epause->tx_pause = 0;
11176 }
11177 
11178 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11179 {
11180 	struct tg3 *tp = netdev_priv(dev);
11181 	int err = 0;
11182 
11183 	if (tg3_flag(tp, USE_PHYLIB)) {
11184 		u32 newadv;
11185 		struct phy_device *phydev;
11186 
11187 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
11188 
11189 		if (!(phydev->supported & SUPPORTED_Pause) ||
11190 		    (!(phydev->supported & SUPPORTED_Asym_Pause) &&
11191 		     (epause->rx_pause != epause->tx_pause)))
11192 			return -EINVAL;
11193 
11194 		tp->link_config.flowctrl = 0;
11195 		if (epause->rx_pause) {
11196 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
11197 
11198 			if (epause->tx_pause) {
11199 				tp->link_config.flowctrl |= FLOW_CTRL_TX;
11200 				newadv = ADVERTISED_Pause;
11201 			} else
11202 				newadv = ADVERTISED_Pause |
11203 					 ADVERTISED_Asym_Pause;
11204 		} else if (epause->tx_pause) {
11205 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
11206 			newadv = ADVERTISED_Asym_Pause;
11207 		} else
11208 			newadv = 0;
11209 
11210 		if (epause->autoneg)
11211 			tg3_flag_set(tp, PAUSE_AUTONEG);
11212 		else
11213 			tg3_flag_clear(tp, PAUSE_AUTONEG);
11214 
11215 		if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
11216 			u32 oldadv = phydev->advertising &
11217 				     (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
11218 			if (oldadv != newadv) {
11219 				phydev->advertising &=
11220 					~(ADVERTISED_Pause |
11221 					  ADVERTISED_Asym_Pause);
11222 				phydev->advertising |= newadv;
11223 				if (phydev->autoneg) {
11224 					/*
11225 					 * Always renegotiate the link to
11226 					 * inform our link partner of our
11227 					 * flow control settings, even if the
11228 					 * flow control is forced.  Let
11229 					 * tg3_adjust_link() do the final
11230 					 * flow control setup.
11231 					 */
11232 					return phy_start_aneg(phydev);
11233 				}
11234 			}
11235 
11236 			if (!epause->autoneg)
11237 				tg3_setup_flow_control(tp, 0, 0);
11238 		} else {
11239 			tp->link_config.advertising &=
11240 					~(ADVERTISED_Pause |
11241 					  ADVERTISED_Asym_Pause);
11242 			tp->link_config.advertising |= newadv;
11243 		}
11244 	} else {
11245 		int irq_sync = 0;
11246 
11247 		if (netif_running(dev)) {
11248 			tg3_netif_stop(tp);
11249 			irq_sync = 1;
11250 		}
11251 
11252 		tg3_full_lock(tp, irq_sync);
11253 
11254 		if (epause->autoneg)
11255 			tg3_flag_set(tp, PAUSE_AUTONEG);
11256 		else
11257 			tg3_flag_clear(tp, PAUSE_AUTONEG);
11258 		if (epause->rx_pause)
11259 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
11260 		else
11261 			tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
11262 		if (epause->tx_pause)
11263 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
11264 		else
11265 			tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
11266 
11267 		if (netif_running(dev)) {
11268 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11269 			err = tg3_restart_hw(tp, 1);
11270 			if (!err)
11271 				tg3_netif_start(tp);
11272 		}
11273 
11274 		tg3_full_unlock(tp);
11275 	}
11276 
11277 	return err;
11278 }
11279 
11280 static int tg3_get_sset_count(struct net_device *dev, int sset)
11281 {
11282 	switch (sset) {
11283 	case ETH_SS_TEST:
11284 		return TG3_NUM_TEST;
11285 	case ETH_SS_STATS:
11286 		return TG3_NUM_STATS;
11287 	default:
11288 		return -EOPNOTSUPP;
11289 	}
11290 }
11291 
11292 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
11293 			 u32 *rules __always_unused)
11294 {
11295 	struct tg3 *tp = netdev_priv(dev);
11296 
11297 	if (!tg3_flag(tp, SUPPORT_MSIX))
11298 		return -EOPNOTSUPP;
11299 
11300 	switch (info->cmd) {
11301 	case ETHTOOL_GRXRINGS:
11302 		if (netif_running(tp->dev))
11303 			info->data = tp->rxq_cnt;
11304 		else {
11305 			info->data = num_online_cpus();
11306 			if (info->data > TG3_RSS_MAX_NUM_QS)
11307 				info->data = TG3_RSS_MAX_NUM_QS;
11308 		}
11309 
11310 		/* The first interrupt vector only
11311 		 * handles link interrupts.
11312 		 */
11313 		info->data -= 1;
11314 		return 0;
11315 
11316 	default:
11317 		return -EOPNOTSUPP;
11318 	}
11319 }
11320 
11321 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
11322 {
11323 	u32 size = 0;
11324 	struct tg3 *tp = netdev_priv(dev);
11325 
11326 	if (tg3_flag(tp, SUPPORT_MSIX))
11327 		size = TG3_RSS_INDIR_TBL_SIZE;
11328 
11329 	return size;
11330 }
11331 
11332 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir)
11333 {
11334 	struct tg3 *tp = netdev_priv(dev);
11335 	int i;
11336 
11337 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11338 		indir[i] = tp->rss_ind_tbl[i];
11339 
11340 	return 0;
11341 }
11342 
11343 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir)
11344 {
11345 	struct tg3 *tp = netdev_priv(dev);
11346 	size_t i;
11347 
11348 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11349 		tp->rss_ind_tbl[i] = indir[i];
11350 
11351 	if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
11352 		return 0;
11353 
11354 	/* It is legal to write the indirection
11355 	 * table while the device is running.
11356 	 */
11357 	tg3_full_lock(tp, 0);
11358 	tg3_rss_write_indir_tbl(tp);
11359 	tg3_full_unlock(tp);
11360 
11361 	return 0;
11362 }
11363 
11364 static void tg3_get_channels(struct net_device *dev,
11365 			     struct ethtool_channels *channel)
11366 {
11367 	struct tg3 *tp = netdev_priv(dev);
11368 	u32 deflt_qs = netif_get_num_default_rss_queues();
11369 
11370 	channel->max_rx = tp->rxq_max;
11371 	channel->max_tx = tp->txq_max;
11372 
11373 	if (netif_running(dev)) {
11374 		channel->rx_count = tp->rxq_cnt;
11375 		channel->tx_count = tp->txq_cnt;
11376 	} else {
11377 		if (tp->rxq_req)
11378 			channel->rx_count = tp->rxq_req;
11379 		else
11380 			channel->rx_count = min(deflt_qs, tp->rxq_max);
11381 
11382 		if (tp->txq_req)
11383 			channel->tx_count = tp->txq_req;
11384 		else
11385 			channel->tx_count = min(deflt_qs, tp->txq_max);
11386 	}
11387 }
11388 
11389 static int tg3_set_channels(struct net_device *dev,
11390 			    struct ethtool_channels *channel)
11391 {
11392 	struct tg3 *tp = netdev_priv(dev);
11393 
11394 	if (!tg3_flag(tp, SUPPORT_MSIX))
11395 		return -EOPNOTSUPP;
11396 
11397 	if (channel->rx_count > tp->rxq_max ||
11398 	    channel->tx_count > tp->txq_max)
11399 		return -EINVAL;
11400 
11401 	tp->rxq_req = channel->rx_count;
11402 	tp->txq_req = channel->tx_count;
11403 
11404 	if (!netif_running(dev))
11405 		return 0;
11406 
11407 	tg3_stop(tp);
11408 
11409 	netif_carrier_off(dev);
11410 
11411 	tg3_start(tp, true, false);
11412 
11413 	return 0;
11414 }
11415 
11416 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
11417 {
11418 	switch (stringset) {
11419 	case ETH_SS_STATS:
11420 		memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
11421 		break;
11422 	case ETH_SS_TEST:
11423 		memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
11424 		break;
11425 	default:
11426 		WARN_ON(1);	/* we need a WARN() */
11427 		break;
11428 	}
11429 }
11430 
11431 static int tg3_set_phys_id(struct net_device *dev,
11432 			    enum ethtool_phys_id_state state)
11433 {
11434 	struct tg3 *tp = netdev_priv(dev);
11435 
11436 	if (!netif_running(tp->dev))
11437 		return -EAGAIN;
11438 
11439 	switch (state) {
11440 	case ETHTOOL_ID_ACTIVE:
11441 		return 1;	/* cycle on/off once per second */
11442 
11443 	case ETHTOOL_ID_ON:
11444 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11445 		     LED_CTRL_1000MBPS_ON |
11446 		     LED_CTRL_100MBPS_ON |
11447 		     LED_CTRL_10MBPS_ON |
11448 		     LED_CTRL_TRAFFIC_OVERRIDE |
11449 		     LED_CTRL_TRAFFIC_BLINK |
11450 		     LED_CTRL_TRAFFIC_LED);
11451 		break;
11452 
11453 	case ETHTOOL_ID_OFF:
11454 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11455 		     LED_CTRL_TRAFFIC_OVERRIDE);
11456 		break;
11457 
11458 	case ETHTOOL_ID_INACTIVE:
11459 		tw32(MAC_LED_CTRL, tp->led_ctrl);
11460 		break;
11461 	}
11462 
11463 	return 0;
11464 }
11465 
11466 static void tg3_get_ethtool_stats(struct net_device *dev,
11467 				   struct ethtool_stats *estats, u64 *tmp_stats)
11468 {
11469 	struct tg3 *tp = netdev_priv(dev);
11470 
11471 	if (tp->hw_stats)
11472 		tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
11473 	else
11474 		memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
11475 }
11476 
11477 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
11478 {
11479 	int i;
11480 	__be32 *buf;
11481 	u32 offset = 0, len = 0;
11482 	u32 magic, val;
11483 
11484 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
11485 		return NULL;
11486 
11487 	if (magic == TG3_EEPROM_MAGIC) {
11488 		for (offset = TG3_NVM_DIR_START;
11489 		     offset < TG3_NVM_DIR_END;
11490 		     offset += TG3_NVM_DIRENT_SIZE) {
11491 			if (tg3_nvram_read(tp, offset, &val))
11492 				return NULL;
11493 
11494 			if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
11495 			    TG3_NVM_DIRTYPE_EXTVPD)
11496 				break;
11497 		}
11498 
11499 		if (offset != TG3_NVM_DIR_END) {
11500 			len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
11501 			if (tg3_nvram_read(tp, offset + 4, &offset))
11502 				return NULL;
11503 
11504 			offset = tg3_nvram_logical_addr(tp, offset);
11505 		}
11506 	}
11507 
11508 	if (!offset || !len) {
11509 		offset = TG3_NVM_VPD_OFF;
11510 		len = TG3_NVM_VPD_LEN;
11511 	}
11512 
11513 	buf = kmalloc(len, GFP_KERNEL);
11514 	if (buf == NULL)
11515 		return NULL;
11516 
11517 	if (magic == TG3_EEPROM_MAGIC) {
11518 		for (i = 0; i < len; i += 4) {
11519 			/* The data is in little-endian format in NVRAM.
11520 			 * Use the big-endian read routines to preserve
11521 			 * the byte order as it exists in NVRAM.
11522 			 */
11523 			if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
11524 				goto error;
11525 		}
11526 	} else {
11527 		u8 *ptr;
11528 		ssize_t cnt;
11529 		unsigned int pos = 0;
11530 
11531 		ptr = (u8 *)&buf[0];
11532 		for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
11533 			cnt = pci_read_vpd(tp->pdev, pos,
11534 					   len - pos, ptr);
11535 			if (cnt == -ETIMEDOUT || cnt == -EINTR)
11536 				cnt = 0;
11537 			else if (cnt < 0)
11538 				goto error;
11539 		}
11540 		if (pos != len)
11541 			goto error;
11542 	}
11543 
11544 	*vpdlen = len;
11545 
11546 	return buf;
11547 
11548 error:
11549 	kfree(buf);
11550 	return NULL;
11551 }
11552 
11553 #define NVRAM_TEST_SIZE 0x100
11554 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE	0x14
11555 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE	0x18
11556 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE	0x1c
11557 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE	0x20
11558 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE	0x24
11559 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE	0x50
11560 #define NVRAM_SELFBOOT_HW_SIZE 0x20
11561 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
11562 
11563 static int tg3_test_nvram(struct tg3 *tp)
11564 {
11565 	u32 csum, magic, len;
11566 	__be32 *buf;
11567 	int i, j, k, err = 0, size;
11568 
11569 	if (tg3_flag(tp, NO_NVRAM))
11570 		return 0;
11571 
11572 	if (tg3_nvram_read(tp, 0, &magic) != 0)
11573 		return -EIO;
11574 
11575 	if (magic == TG3_EEPROM_MAGIC)
11576 		size = NVRAM_TEST_SIZE;
11577 	else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
11578 		if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
11579 		    TG3_EEPROM_SB_FORMAT_1) {
11580 			switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
11581 			case TG3_EEPROM_SB_REVISION_0:
11582 				size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
11583 				break;
11584 			case TG3_EEPROM_SB_REVISION_2:
11585 				size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
11586 				break;
11587 			case TG3_EEPROM_SB_REVISION_3:
11588 				size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
11589 				break;
11590 			case TG3_EEPROM_SB_REVISION_4:
11591 				size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
11592 				break;
11593 			case TG3_EEPROM_SB_REVISION_5:
11594 				size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
11595 				break;
11596 			case TG3_EEPROM_SB_REVISION_6:
11597 				size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
11598 				break;
11599 			default:
11600 				return -EIO;
11601 			}
11602 		} else
11603 			return 0;
11604 	} else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
11605 		size = NVRAM_SELFBOOT_HW_SIZE;
11606 	else
11607 		return -EIO;
11608 
11609 	buf = kmalloc(size, GFP_KERNEL);
11610 	if (buf == NULL)
11611 		return -ENOMEM;
11612 
11613 	err = -EIO;
11614 	for (i = 0, j = 0; i < size; i += 4, j++) {
11615 		err = tg3_nvram_read_be32(tp, i, &buf[j]);
11616 		if (err)
11617 			break;
11618 	}
11619 	if (i < size)
11620 		goto out;
11621 
11622 	/* Selfboot format */
11623 	magic = be32_to_cpu(buf[0]);
11624 	if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
11625 	    TG3_EEPROM_MAGIC_FW) {
11626 		u8 *buf8 = (u8 *) buf, csum8 = 0;
11627 
11628 		if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
11629 		    TG3_EEPROM_SB_REVISION_2) {
11630 			/* For rev 2, the csum doesn't include the MBA. */
11631 			for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
11632 				csum8 += buf8[i];
11633 			for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
11634 				csum8 += buf8[i];
11635 		} else {
11636 			for (i = 0; i < size; i++)
11637 				csum8 += buf8[i];
11638 		}
11639 
11640 		if (csum8 == 0) {
11641 			err = 0;
11642 			goto out;
11643 		}
11644 
11645 		err = -EIO;
11646 		goto out;
11647 	}
11648 
11649 	if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
11650 	    TG3_EEPROM_MAGIC_HW) {
11651 		u8 data[NVRAM_SELFBOOT_DATA_SIZE];
11652 		u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
11653 		u8 *buf8 = (u8 *) buf;
11654 
11655 		/* Separate the parity bits and the data bytes.  */
11656 		for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
11657 			if ((i == 0) || (i == 8)) {
11658 				int l;
11659 				u8 msk;
11660 
11661 				for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
11662 					parity[k++] = buf8[i] & msk;
11663 				i++;
11664 			} else if (i == 16) {
11665 				int l;
11666 				u8 msk;
11667 
11668 				for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
11669 					parity[k++] = buf8[i] & msk;
11670 				i++;
11671 
11672 				for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
11673 					parity[k++] = buf8[i] & msk;
11674 				i++;
11675 			}
11676 			data[j++] = buf8[i];
11677 		}
11678 
11679 		err = -EIO;
11680 		for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
11681 			u8 hw8 = hweight8(data[i]);
11682 
11683 			if ((hw8 & 0x1) && parity[i])
11684 				goto out;
11685 			else if (!(hw8 & 0x1) && !parity[i])
11686 				goto out;
11687 		}
11688 		err = 0;
11689 		goto out;
11690 	}
11691 
11692 	err = -EIO;
11693 
11694 	/* Bootstrap checksum at offset 0x10 */
11695 	csum = calc_crc((unsigned char *) buf, 0x10);
11696 	if (csum != le32_to_cpu(buf[0x10/4]))
11697 		goto out;
11698 
11699 	/* Manufacturing block starts at offset 0x74, checksum at 0xfc */
11700 	csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
11701 	if (csum != le32_to_cpu(buf[0xfc/4]))
11702 		goto out;
11703 
11704 	kfree(buf);
11705 
11706 	buf = tg3_vpd_readblock(tp, &len);
11707 	if (!buf)
11708 		return -ENOMEM;
11709 
11710 	i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
11711 	if (i > 0) {
11712 		j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
11713 		if (j < 0)
11714 			goto out;
11715 
11716 		if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
11717 			goto out;
11718 
11719 		i += PCI_VPD_LRDT_TAG_SIZE;
11720 		j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
11721 					      PCI_VPD_RO_KEYWORD_CHKSUM);
11722 		if (j > 0) {
11723 			u8 csum8 = 0;
11724 
11725 			j += PCI_VPD_INFO_FLD_HDR_SIZE;
11726 
11727 			for (i = 0; i <= j; i++)
11728 				csum8 += ((u8 *)buf)[i];
11729 
11730 			if (csum8)
11731 				goto out;
11732 		}
11733 	}
11734 
11735 	err = 0;
11736 
11737 out:
11738 	kfree(buf);
11739 	return err;
11740 }
11741 
11742 #define TG3_SERDES_TIMEOUT_SEC	2
11743 #define TG3_COPPER_TIMEOUT_SEC	6
11744 
11745 static int tg3_test_link(struct tg3 *tp)
11746 {
11747 	int i, max;
11748 
11749 	if (!netif_running(tp->dev))
11750 		return -ENODEV;
11751 
11752 	if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
11753 		max = TG3_SERDES_TIMEOUT_SEC;
11754 	else
11755 		max = TG3_COPPER_TIMEOUT_SEC;
11756 
11757 	for (i = 0; i < max; i++) {
11758 		if (netif_carrier_ok(tp->dev))
11759 			return 0;
11760 
11761 		if (msleep_interruptible(1000))
11762 			break;
11763 	}
11764 
11765 	return -EIO;
11766 }
11767 
11768 /* Only test the commonly used registers */
11769 static int tg3_test_registers(struct tg3 *tp)
11770 {
11771 	int i, is_5705, is_5750;
11772 	u32 offset, read_mask, write_mask, val, save_val, read_val;
11773 	static struct {
11774 		u16 offset;
11775 		u16 flags;
11776 #define TG3_FL_5705	0x1
11777 #define TG3_FL_NOT_5705	0x2
11778 #define TG3_FL_NOT_5788	0x4
11779 #define TG3_FL_NOT_5750	0x8
11780 		u32 read_mask;
11781 		u32 write_mask;
11782 	} reg_tbl[] = {
11783 		/* MAC Control Registers */
11784 		{ MAC_MODE, TG3_FL_NOT_5705,
11785 			0x00000000, 0x00ef6f8c },
11786 		{ MAC_MODE, TG3_FL_5705,
11787 			0x00000000, 0x01ef6b8c },
11788 		{ MAC_STATUS, TG3_FL_NOT_5705,
11789 			0x03800107, 0x00000000 },
11790 		{ MAC_STATUS, TG3_FL_5705,
11791 			0x03800100, 0x00000000 },
11792 		{ MAC_ADDR_0_HIGH, 0x0000,
11793 			0x00000000, 0x0000ffff },
11794 		{ MAC_ADDR_0_LOW, 0x0000,
11795 			0x00000000, 0xffffffff },
11796 		{ MAC_RX_MTU_SIZE, 0x0000,
11797 			0x00000000, 0x0000ffff },
11798 		{ MAC_TX_MODE, 0x0000,
11799 			0x00000000, 0x00000070 },
11800 		{ MAC_TX_LENGTHS, 0x0000,
11801 			0x00000000, 0x00003fff },
11802 		{ MAC_RX_MODE, TG3_FL_NOT_5705,
11803 			0x00000000, 0x000007fc },
11804 		{ MAC_RX_MODE, TG3_FL_5705,
11805 			0x00000000, 0x000007dc },
11806 		{ MAC_HASH_REG_0, 0x0000,
11807 			0x00000000, 0xffffffff },
11808 		{ MAC_HASH_REG_1, 0x0000,
11809 			0x00000000, 0xffffffff },
11810 		{ MAC_HASH_REG_2, 0x0000,
11811 			0x00000000, 0xffffffff },
11812 		{ MAC_HASH_REG_3, 0x0000,
11813 			0x00000000, 0xffffffff },
11814 
11815 		/* Receive Data and Receive BD Initiator Control Registers. */
11816 		{ RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
11817 			0x00000000, 0xffffffff },
11818 		{ RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
11819 			0x00000000, 0xffffffff },
11820 		{ RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
11821 			0x00000000, 0x00000003 },
11822 		{ RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
11823 			0x00000000, 0xffffffff },
11824 		{ RCVDBDI_STD_BD+0, 0x0000,
11825 			0x00000000, 0xffffffff },
11826 		{ RCVDBDI_STD_BD+4, 0x0000,
11827 			0x00000000, 0xffffffff },
11828 		{ RCVDBDI_STD_BD+8, 0x0000,
11829 			0x00000000, 0xffff0002 },
11830 		{ RCVDBDI_STD_BD+0xc, 0x0000,
11831 			0x00000000, 0xffffffff },
11832 
11833 		/* Receive BD Initiator Control Registers. */
11834 		{ RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
11835 			0x00000000, 0xffffffff },
11836 		{ RCVBDI_STD_THRESH, TG3_FL_5705,
11837 			0x00000000, 0x000003ff },
11838 		{ RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
11839 			0x00000000, 0xffffffff },
11840 
11841 		/* Host Coalescing Control Registers. */
11842 		{ HOSTCC_MODE, TG3_FL_NOT_5705,
11843 			0x00000000, 0x00000004 },
11844 		{ HOSTCC_MODE, TG3_FL_5705,
11845 			0x00000000, 0x000000f6 },
11846 		{ HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
11847 			0x00000000, 0xffffffff },
11848 		{ HOSTCC_RXCOL_TICKS, TG3_FL_5705,
11849 			0x00000000, 0x000003ff },
11850 		{ HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
11851 			0x00000000, 0xffffffff },
11852 		{ HOSTCC_TXCOL_TICKS, TG3_FL_5705,
11853 			0x00000000, 0x000003ff },
11854 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
11855 			0x00000000, 0xffffffff },
11856 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11857 			0x00000000, 0x000000ff },
11858 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
11859 			0x00000000, 0xffffffff },
11860 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11861 			0x00000000, 0x000000ff },
11862 		{ HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
11863 			0x00000000, 0xffffffff },
11864 		{ HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
11865 			0x00000000, 0xffffffff },
11866 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11867 			0x00000000, 0xffffffff },
11868 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11869 			0x00000000, 0x000000ff },
11870 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11871 			0x00000000, 0xffffffff },
11872 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11873 			0x00000000, 0x000000ff },
11874 		{ HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
11875 			0x00000000, 0xffffffff },
11876 		{ HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
11877 			0x00000000, 0xffffffff },
11878 		{ HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
11879 			0x00000000, 0xffffffff },
11880 		{ HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
11881 			0x00000000, 0xffffffff },
11882 		{ HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
11883 			0x00000000, 0xffffffff },
11884 		{ HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
11885 			0xffffffff, 0x00000000 },
11886 		{ HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
11887 			0xffffffff, 0x00000000 },
11888 
11889 		/* Buffer Manager Control Registers. */
11890 		{ BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
11891 			0x00000000, 0x007fff80 },
11892 		{ BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
11893 			0x00000000, 0x007fffff },
11894 		{ BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
11895 			0x00000000, 0x0000003f },
11896 		{ BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
11897 			0x00000000, 0x000001ff },
11898 		{ BUFMGR_MB_HIGH_WATER, 0x0000,
11899 			0x00000000, 0x000001ff },
11900 		{ BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
11901 			0xffffffff, 0x00000000 },
11902 		{ BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
11903 			0xffffffff, 0x00000000 },
11904 
11905 		/* Mailbox Registers */
11906 		{ GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
11907 			0x00000000, 0x000001ff },
11908 		{ GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
11909 			0x00000000, 0x000001ff },
11910 		{ GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
11911 			0x00000000, 0x000007ff },
11912 		{ GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
11913 			0x00000000, 0x000001ff },
11914 
11915 		{ 0xffff, 0x0000, 0x00000000, 0x00000000 },
11916 	};
11917 
11918 	is_5705 = is_5750 = 0;
11919 	if (tg3_flag(tp, 5705_PLUS)) {
11920 		is_5705 = 1;
11921 		if (tg3_flag(tp, 5750_PLUS))
11922 			is_5750 = 1;
11923 	}
11924 
11925 	for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
11926 		if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
11927 			continue;
11928 
11929 		if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
11930 			continue;
11931 
11932 		if (tg3_flag(tp, IS_5788) &&
11933 		    (reg_tbl[i].flags & TG3_FL_NOT_5788))
11934 			continue;
11935 
11936 		if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
11937 			continue;
11938 
11939 		offset = (u32) reg_tbl[i].offset;
11940 		read_mask = reg_tbl[i].read_mask;
11941 		write_mask = reg_tbl[i].write_mask;
11942 
11943 		/* Save the original register content */
11944 		save_val = tr32(offset);
11945 
11946 		/* Determine the read-only value. */
11947 		read_val = save_val & read_mask;
11948 
11949 		/* Write zero to the register, then make sure the read-only bits
11950 		 * are not changed and the read/write bits are all zeros.
11951 		 */
11952 		tw32(offset, 0);
11953 
11954 		val = tr32(offset);
11955 
11956 		/* Test the read-only and read/write bits. */
11957 		if (((val & read_mask) != read_val) || (val & write_mask))
11958 			goto out;
11959 
11960 		/* Write ones to all the bits defined by RdMask and WrMask, then
11961 		 * make sure the read-only bits are not changed and the
11962 		 * read/write bits are all ones.
11963 		 */
11964 		tw32(offset, read_mask | write_mask);
11965 
11966 		val = tr32(offset);
11967 
11968 		/* Test the read-only bits. */
11969 		if ((val & read_mask) != read_val)
11970 			goto out;
11971 
11972 		/* Test the read/write bits. */
11973 		if ((val & write_mask) != write_mask)
11974 			goto out;
11975 
11976 		tw32(offset, save_val);
11977 	}
11978 
11979 	return 0;
11980 
11981 out:
11982 	if (netif_msg_hw(tp))
11983 		netdev_err(tp->dev,
11984 			   "Register test failed at offset %x\n", offset);
11985 	tw32(offset, save_val);
11986 	return -EIO;
11987 }
11988 
11989 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
11990 {
11991 	static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
11992 	int i;
11993 	u32 j;
11994 
11995 	for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
11996 		for (j = 0; j < len; j += 4) {
11997 			u32 val;
11998 
11999 			tg3_write_mem(tp, offset + j, test_pattern[i]);
12000 			tg3_read_mem(tp, offset + j, &val);
12001 			if (val != test_pattern[i])
12002 				return -EIO;
12003 		}
12004 	}
12005 	return 0;
12006 }
12007 
12008 static int tg3_test_memory(struct tg3 *tp)
12009 {
12010 	static struct mem_entry {
12011 		u32 offset;
12012 		u32 len;
12013 	} mem_tbl_570x[] = {
12014 		{ 0x00000000, 0x00b50},
12015 		{ 0x00002000, 0x1c000},
12016 		{ 0xffffffff, 0x00000}
12017 	}, mem_tbl_5705[] = {
12018 		{ 0x00000100, 0x0000c},
12019 		{ 0x00000200, 0x00008},
12020 		{ 0x00004000, 0x00800},
12021 		{ 0x00006000, 0x01000},
12022 		{ 0x00008000, 0x02000},
12023 		{ 0x00010000, 0x0e000},
12024 		{ 0xffffffff, 0x00000}
12025 	}, mem_tbl_5755[] = {
12026 		{ 0x00000200, 0x00008},
12027 		{ 0x00004000, 0x00800},
12028 		{ 0x00006000, 0x00800},
12029 		{ 0x00008000, 0x02000},
12030 		{ 0x00010000, 0x0c000},
12031 		{ 0xffffffff, 0x00000}
12032 	}, mem_tbl_5906[] = {
12033 		{ 0x00000200, 0x00008},
12034 		{ 0x00004000, 0x00400},
12035 		{ 0x00006000, 0x00400},
12036 		{ 0x00008000, 0x01000},
12037 		{ 0x00010000, 0x01000},
12038 		{ 0xffffffff, 0x00000}
12039 	}, mem_tbl_5717[] = {
12040 		{ 0x00000200, 0x00008},
12041 		{ 0x00010000, 0x0a000},
12042 		{ 0x00020000, 0x13c00},
12043 		{ 0xffffffff, 0x00000}
12044 	}, mem_tbl_57765[] = {
12045 		{ 0x00000200, 0x00008},
12046 		{ 0x00004000, 0x00800},
12047 		{ 0x00006000, 0x09800},
12048 		{ 0x00010000, 0x0a000},
12049 		{ 0xffffffff, 0x00000}
12050 	};
12051 	struct mem_entry *mem_tbl;
12052 	int err = 0;
12053 	int i;
12054 
12055 	if (tg3_flag(tp, 5717_PLUS))
12056 		mem_tbl = mem_tbl_5717;
12057 	else if (tg3_flag(tp, 57765_CLASS))
12058 		mem_tbl = mem_tbl_57765;
12059 	else if (tg3_flag(tp, 5755_PLUS))
12060 		mem_tbl = mem_tbl_5755;
12061 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
12062 		mem_tbl = mem_tbl_5906;
12063 	else if (tg3_flag(tp, 5705_PLUS))
12064 		mem_tbl = mem_tbl_5705;
12065 	else
12066 		mem_tbl = mem_tbl_570x;
12067 
12068 	for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
12069 		err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
12070 		if (err)
12071 			break;
12072 	}
12073 
12074 	return err;
12075 }
12076 
12077 #define TG3_TSO_MSS		500
12078 
12079 #define TG3_TSO_IP_HDR_LEN	20
12080 #define TG3_TSO_TCP_HDR_LEN	20
12081 #define TG3_TSO_TCP_OPT_LEN	12
12082 
12083 static const u8 tg3_tso_header[] = {
12084 0x08, 0x00,
12085 0x45, 0x00, 0x00, 0x00,
12086 0x00, 0x00, 0x40, 0x00,
12087 0x40, 0x06, 0x00, 0x00,
12088 0x0a, 0x00, 0x00, 0x01,
12089 0x0a, 0x00, 0x00, 0x02,
12090 0x0d, 0x00, 0xe0, 0x00,
12091 0x00, 0x00, 0x01, 0x00,
12092 0x00, 0x00, 0x02, 0x00,
12093 0x80, 0x10, 0x10, 0x00,
12094 0x14, 0x09, 0x00, 0x00,
12095 0x01, 0x01, 0x08, 0x0a,
12096 0x11, 0x11, 0x11, 0x11,
12097 0x11, 0x11, 0x11, 0x11,
12098 };
12099 
12100 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
12101 {
12102 	u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
12103 	u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
12104 	u32 budget;
12105 	struct sk_buff *skb;
12106 	u8 *tx_data, *rx_data;
12107 	dma_addr_t map;
12108 	int num_pkts, tx_len, rx_len, i, err;
12109 	struct tg3_rx_buffer_desc *desc;
12110 	struct tg3_napi *tnapi, *rnapi;
12111 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
12112 
12113 	tnapi = &tp->napi[0];
12114 	rnapi = &tp->napi[0];
12115 	if (tp->irq_cnt > 1) {
12116 		if (tg3_flag(tp, ENABLE_RSS))
12117 			rnapi = &tp->napi[1];
12118 		if (tg3_flag(tp, ENABLE_TSS))
12119 			tnapi = &tp->napi[1];
12120 	}
12121 	coal_now = tnapi->coal_now | rnapi->coal_now;
12122 
12123 	err = -EIO;
12124 
12125 	tx_len = pktsz;
12126 	skb = netdev_alloc_skb(tp->dev, tx_len);
12127 	if (!skb)
12128 		return -ENOMEM;
12129 
12130 	tx_data = skb_put(skb, tx_len);
12131 	memcpy(tx_data, tp->dev->dev_addr, 6);
12132 	memset(tx_data + 6, 0x0, 8);
12133 
12134 	tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
12135 
12136 	if (tso_loopback) {
12137 		struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
12138 
12139 		u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
12140 			      TG3_TSO_TCP_OPT_LEN;
12141 
12142 		memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
12143 		       sizeof(tg3_tso_header));
12144 		mss = TG3_TSO_MSS;
12145 
12146 		val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
12147 		num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
12148 
12149 		/* Set the total length field in the IP header */
12150 		iph->tot_len = htons((u16)(mss + hdr_len));
12151 
12152 		base_flags = (TXD_FLAG_CPU_PRE_DMA |
12153 			      TXD_FLAG_CPU_POST_DMA);
12154 
12155 		if (tg3_flag(tp, HW_TSO_1) ||
12156 		    tg3_flag(tp, HW_TSO_2) ||
12157 		    tg3_flag(tp, HW_TSO_3)) {
12158 			struct tcphdr *th;
12159 			val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
12160 			th = (struct tcphdr *)&tx_data[val];
12161 			th->check = 0;
12162 		} else
12163 			base_flags |= TXD_FLAG_TCPUDP_CSUM;
12164 
12165 		if (tg3_flag(tp, HW_TSO_3)) {
12166 			mss |= (hdr_len & 0xc) << 12;
12167 			if (hdr_len & 0x10)
12168 				base_flags |= 0x00000010;
12169 			base_flags |= (hdr_len & 0x3e0) << 5;
12170 		} else if (tg3_flag(tp, HW_TSO_2))
12171 			mss |= hdr_len << 9;
12172 		else if (tg3_flag(tp, HW_TSO_1) ||
12173 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
12174 			mss |= (TG3_TSO_TCP_OPT_LEN << 9);
12175 		} else {
12176 			base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
12177 		}
12178 
12179 		data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
12180 	} else {
12181 		num_pkts = 1;
12182 		data_off = ETH_HLEN;
12183 
12184 		if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
12185 		    tx_len > VLAN_ETH_FRAME_LEN)
12186 			base_flags |= TXD_FLAG_JMB_PKT;
12187 	}
12188 
12189 	for (i = data_off; i < tx_len; i++)
12190 		tx_data[i] = (u8) (i & 0xff);
12191 
12192 	map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
12193 	if (pci_dma_mapping_error(tp->pdev, map)) {
12194 		dev_kfree_skb(skb);
12195 		return -EIO;
12196 	}
12197 
12198 	val = tnapi->tx_prod;
12199 	tnapi->tx_buffers[val].skb = skb;
12200 	dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
12201 
12202 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
12203 	       rnapi->coal_now);
12204 
12205 	udelay(10);
12206 
12207 	rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
12208 
12209 	budget = tg3_tx_avail(tnapi);
12210 	if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
12211 			    base_flags | TXD_FLAG_END, mss, 0)) {
12212 		tnapi->tx_buffers[val].skb = NULL;
12213 		dev_kfree_skb(skb);
12214 		return -EIO;
12215 	}
12216 
12217 	tnapi->tx_prod++;
12218 
12219 	/* Sync BD data before updating mailbox */
12220 	wmb();
12221 
12222 	tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
12223 	tr32_mailbox(tnapi->prodmbox);
12224 
12225 	udelay(10);
12226 
12227 	/* 350 usec to allow enough time on some 10/100 Mbps devices.  */
12228 	for (i = 0; i < 35; i++) {
12229 		tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
12230 		       coal_now);
12231 
12232 		udelay(10);
12233 
12234 		tx_idx = tnapi->hw_status->idx[0].tx_consumer;
12235 		rx_idx = rnapi->hw_status->idx[0].rx_producer;
12236 		if ((tx_idx == tnapi->tx_prod) &&
12237 		    (rx_idx == (rx_start_idx + num_pkts)))
12238 			break;
12239 	}
12240 
12241 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
12242 	dev_kfree_skb(skb);
12243 
12244 	if (tx_idx != tnapi->tx_prod)
12245 		goto out;
12246 
12247 	if (rx_idx != rx_start_idx + num_pkts)
12248 		goto out;
12249 
12250 	val = data_off;
12251 	while (rx_idx != rx_start_idx) {
12252 		desc = &rnapi->rx_rcb[rx_start_idx++];
12253 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
12254 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
12255 
12256 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
12257 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
12258 			goto out;
12259 
12260 		rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
12261 			 - ETH_FCS_LEN;
12262 
12263 		if (!tso_loopback) {
12264 			if (rx_len != tx_len)
12265 				goto out;
12266 
12267 			if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
12268 				if (opaque_key != RXD_OPAQUE_RING_STD)
12269 					goto out;
12270 			} else {
12271 				if (opaque_key != RXD_OPAQUE_RING_JUMBO)
12272 					goto out;
12273 			}
12274 		} else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
12275 			   (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
12276 			    >> RXD_TCPCSUM_SHIFT != 0xffff) {
12277 			goto out;
12278 		}
12279 
12280 		if (opaque_key == RXD_OPAQUE_RING_STD) {
12281 			rx_data = tpr->rx_std_buffers[desc_idx].data;
12282 			map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
12283 					     mapping);
12284 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
12285 			rx_data = tpr->rx_jmb_buffers[desc_idx].data;
12286 			map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
12287 					     mapping);
12288 		} else
12289 			goto out;
12290 
12291 		pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
12292 					    PCI_DMA_FROMDEVICE);
12293 
12294 		rx_data += TG3_RX_OFFSET(tp);
12295 		for (i = data_off; i < rx_len; i++, val++) {
12296 			if (*(rx_data + i) != (u8) (val & 0xff))
12297 				goto out;
12298 		}
12299 	}
12300 
12301 	err = 0;
12302 
12303 	/* tg3_free_rings will unmap and free the rx_data */
12304 out:
12305 	return err;
12306 }
12307 
12308 #define TG3_STD_LOOPBACK_FAILED		1
12309 #define TG3_JMB_LOOPBACK_FAILED		2
12310 #define TG3_TSO_LOOPBACK_FAILED		4
12311 #define TG3_LOOPBACK_FAILED \
12312 	(TG3_STD_LOOPBACK_FAILED | \
12313 	 TG3_JMB_LOOPBACK_FAILED | \
12314 	 TG3_TSO_LOOPBACK_FAILED)
12315 
12316 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
12317 {
12318 	int err = -EIO;
12319 	u32 eee_cap;
12320 	u32 jmb_pkt_sz = 9000;
12321 
12322 	if (tp->dma_limit)
12323 		jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
12324 
12325 	eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
12326 	tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
12327 
12328 	if (!netif_running(tp->dev)) {
12329 		data[0] = TG3_LOOPBACK_FAILED;
12330 		data[1] = TG3_LOOPBACK_FAILED;
12331 		if (do_extlpbk)
12332 			data[2] = TG3_LOOPBACK_FAILED;
12333 		goto done;
12334 	}
12335 
12336 	err = tg3_reset_hw(tp, 1);
12337 	if (err) {
12338 		data[0] = TG3_LOOPBACK_FAILED;
12339 		data[1] = TG3_LOOPBACK_FAILED;
12340 		if (do_extlpbk)
12341 			data[2] = TG3_LOOPBACK_FAILED;
12342 		goto done;
12343 	}
12344 
12345 	if (tg3_flag(tp, ENABLE_RSS)) {
12346 		int i;
12347 
12348 		/* Reroute all rx packets to the 1st queue */
12349 		for (i = MAC_RSS_INDIR_TBL_0;
12350 		     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
12351 			tw32(i, 0x0);
12352 	}
12353 
12354 	/* HW errata - mac loopback fails in some cases on 5780.
12355 	 * Normal traffic and PHY loopback are not affected by
12356 	 * errata.  Also, the MAC loopback test is deprecated for
12357 	 * all newer ASIC revisions.
12358 	 */
12359 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
12360 	    !tg3_flag(tp, CPMU_PRESENT)) {
12361 		tg3_mac_loopback(tp, true);
12362 
12363 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12364 			data[0] |= TG3_STD_LOOPBACK_FAILED;
12365 
12366 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12367 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12368 			data[0] |= TG3_JMB_LOOPBACK_FAILED;
12369 
12370 		tg3_mac_loopback(tp, false);
12371 	}
12372 
12373 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
12374 	    !tg3_flag(tp, USE_PHYLIB)) {
12375 		int i;
12376 
12377 		tg3_phy_lpbk_set(tp, 0, false);
12378 
12379 		/* Wait for link */
12380 		for (i = 0; i < 100; i++) {
12381 			if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
12382 				break;
12383 			mdelay(1);
12384 		}
12385 
12386 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12387 			data[1] |= TG3_STD_LOOPBACK_FAILED;
12388 		if (tg3_flag(tp, TSO_CAPABLE) &&
12389 		    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12390 			data[1] |= TG3_TSO_LOOPBACK_FAILED;
12391 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12392 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12393 			data[1] |= TG3_JMB_LOOPBACK_FAILED;
12394 
12395 		if (do_extlpbk) {
12396 			tg3_phy_lpbk_set(tp, 0, true);
12397 
12398 			/* All link indications report up, but the hardware
12399 			 * isn't really ready for about 20 msec.  Double it
12400 			 * to be sure.
12401 			 */
12402 			mdelay(40);
12403 
12404 			if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12405 				data[2] |= TG3_STD_LOOPBACK_FAILED;
12406 			if (tg3_flag(tp, TSO_CAPABLE) &&
12407 			    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12408 				data[2] |= TG3_TSO_LOOPBACK_FAILED;
12409 			if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12410 			    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12411 				data[2] |= TG3_JMB_LOOPBACK_FAILED;
12412 		}
12413 
12414 		/* Re-enable gphy autopowerdown. */
12415 		if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
12416 			tg3_phy_toggle_apd(tp, true);
12417 	}
12418 
12419 	err = (data[0] | data[1] | data[2]) ? -EIO : 0;
12420 
12421 done:
12422 	tp->phy_flags |= eee_cap;
12423 
12424 	return err;
12425 }
12426 
12427 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
12428 			  u64 *data)
12429 {
12430 	struct tg3 *tp = netdev_priv(dev);
12431 	bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
12432 
12433 	if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
12434 	    tg3_power_up(tp)) {
12435 		etest->flags |= ETH_TEST_FL_FAILED;
12436 		memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
12437 		return;
12438 	}
12439 
12440 	memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
12441 
12442 	if (tg3_test_nvram(tp) != 0) {
12443 		etest->flags |= ETH_TEST_FL_FAILED;
12444 		data[0] = 1;
12445 	}
12446 	if (!doextlpbk && tg3_test_link(tp)) {
12447 		etest->flags |= ETH_TEST_FL_FAILED;
12448 		data[1] = 1;
12449 	}
12450 	if (etest->flags & ETH_TEST_FL_OFFLINE) {
12451 		int err, err2 = 0, irq_sync = 0;
12452 
12453 		if (netif_running(dev)) {
12454 			tg3_phy_stop(tp);
12455 			tg3_netif_stop(tp);
12456 			irq_sync = 1;
12457 		}
12458 
12459 		tg3_full_lock(tp, irq_sync);
12460 
12461 		tg3_halt(tp, RESET_KIND_SUSPEND, 1);
12462 		err = tg3_nvram_lock(tp);
12463 		tg3_halt_cpu(tp, RX_CPU_BASE);
12464 		if (!tg3_flag(tp, 5705_PLUS))
12465 			tg3_halt_cpu(tp, TX_CPU_BASE);
12466 		if (!err)
12467 			tg3_nvram_unlock(tp);
12468 
12469 		if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
12470 			tg3_phy_reset(tp);
12471 
12472 		if (tg3_test_registers(tp) != 0) {
12473 			etest->flags |= ETH_TEST_FL_FAILED;
12474 			data[2] = 1;
12475 		}
12476 
12477 		if (tg3_test_memory(tp) != 0) {
12478 			etest->flags |= ETH_TEST_FL_FAILED;
12479 			data[3] = 1;
12480 		}
12481 
12482 		if (doextlpbk)
12483 			etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
12484 
12485 		if (tg3_test_loopback(tp, &data[4], doextlpbk))
12486 			etest->flags |= ETH_TEST_FL_FAILED;
12487 
12488 		tg3_full_unlock(tp);
12489 
12490 		if (tg3_test_interrupt(tp) != 0) {
12491 			etest->flags |= ETH_TEST_FL_FAILED;
12492 			data[7] = 1;
12493 		}
12494 
12495 		tg3_full_lock(tp, 0);
12496 
12497 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12498 		if (netif_running(dev)) {
12499 			tg3_flag_set(tp, INIT_COMPLETE);
12500 			err2 = tg3_restart_hw(tp, 1);
12501 			if (!err2)
12502 				tg3_netif_start(tp);
12503 		}
12504 
12505 		tg3_full_unlock(tp);
12506 
12507 		if (irq_sync && !err2)
12508 			tg3_phy_start(tp);
12509 	}
12510 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
12511 		tg3_power_down(tp);
12512 
12513 }
12514 
12515 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
12516 {
12517 	struct mii_ioctl_data *data = if_mii(ifr);
12518 	struct tg3 *tp = netdev_priv(dev);
12519 	int err;
12520 
12521 	if (tg3_flag(tp, USE_PHYLIB)) {
12522 		struct phy_device *phydev;
12523 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12524 			return -EAGAIN;
12525 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
12526 		return phy_mii_ioctl(phydev, ifr, cmd);
12527 	}
12528 
12529 	switch (cmd) {
12530 	case SIOCGMIIPHY:
12531 		data->phy_id = tp->phy_addr;
12532 
12533 		/* fallthru */
12534 	case SIOCGMIIREG: {
12535 		u32 mii_regval;
12536 
12537 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12538 			break;			/* We have no PHY */
12539 
12540 		if (!netif_running(dev))
12541 			return -EAGAIN;
12542 
12543 		spin_lock_bh(&tp->lock);
12544 		err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
12545 		spin_unlock_bh(&tp->lock);
12546 
12547 		data->val_out = mii_regval;
12548 
12549 		return err;
12550 	}
12551 
12552 	case SIOCSMIIREG:
12553 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12554 			break;			/* We have no PHY */
12555 
12556 		if (!netif_running(dev))
12557 			return -EAGAIN;
12558 
12559 		spin_lock_bh(&tp->lock);
12560 		err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
12561 		spin_unlock_bh(&tp->lock);
12562 
12563 		return err;
12564 
12565 	default:
12566 		/* do nothing */
12567 		break;
12568 	}
12569 	return -EOPNOTSUPP;
12570 }
12571 
12572 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12573 {
12574 	struct tg3 *tp = netdev_priv(dev);
12575 
12576 	memcpy(ec, &tp->coal, sizeof(*ec));
12577 	return 0;
12578 }
12579 
12580 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12581 {
12582 	struct tg3 *tp = netdev_priv(dev);
12583 	u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
12584 	u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
12585 
12586 	if (!tg3_flag(tp, 5705_PLUS)) {
12587 		max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
12588 		max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
12589 		max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
12590 		min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
12591 	}
12592 
12593 	if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
12594 	    (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
12595 	    (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
12596 	    (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
12597 	    (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
12598 	    (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
12599 	    (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
12600 	    (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
12601 	    (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
12602 	    (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
12603 		return -EINVAL;
12604 
12605 	/* No rx interrupts will be generated if both are zero */
12606 	if ((ec->rx_coalesce_usecs == 0) &&
12607 	    (ec->rx_max_coalesced_frames == 0))
12608 		return -EINVAL;
12609 
12610 	/* No tx interrupts will be generated if both are zero */
12611 	if ((ec->tx_coalesce_usecs == 0) &&
12612 	    (ec->tx_max_coalesced_frames == 0))
12613 		return -EINVAL;
12614 
12615 	/* Only copy relevant parameters, ignore all others. */
12616 	tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
12617 	tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
12618 	tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
12619 	tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
12620 	tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
12621 	tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
12622 	tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
12623 	tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
12624 	tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
12625 
12626 	if (netif_running(dev)) {
12627 		tg3_full_lock(tp, 0);
12628 		__tg3_set_coalesce(tp, &tp->coal);
12629 		tg3_full_unlock(tp);
12630 	}
12631 	return 0;
12632 }
12633 
12634 static const struct ethtool_ops tg3_ethtool_ops = {
12635 	.get_settings		= tg3_get_settings,
12636 	.set_settings		= tg3_set_settings,
12637 	.get_drvinfo		= tg3_get_drvinfo,
12638 	.get_regs_len		= tg3_get_regs_len,
12639 	.get_regs		= tg3_get_regs,
12640 	.get_wol		= tg3_get_wol,
12641 	.set_wol		= tg3_set_wol,
12642 	.get_msglevel		= tg3_get_msglevel,
12643 	.set_msglevel		= tg3_set_msglevel,
12644 	.nway_reset		= tg3_nway_reset,
12645 	.get_link		= ethtool_op_get_link,
12646 	.get_eeprom_len		= tg3_get_eeprom_len,
12647 	.get_eeprom		= tg3_get_eeprom,
12648 	.set_eeprom		= tg3_set_eeprom,
12649 	.get_ringparam		= tg3_get_ringparam,
12650 	.set_ringparam		= tg3_set_ringparam,
12651 	.get_pauseparam		= tg3_get_pauseparam,
12652 	.set_pauseparam		= tg3_set_pauseparam,
12653 	.self_test		= tg3_self_test,
12654 	.get_strings		= tg3_get_strings,
12655 	.set_phys_id		= tg3_set_phys_id,
12656 	.get_ethtool_stats	= tg3_get_ethtool_stats,
12657 	.get_coalesce		= tg3_get_coalesce,
12658 	.set_coalesce		= tg3_set_coalesce,
12659 	.get_sset_count		= tg3_get_sset_count,
12660 	.get_rxnfc		= tg3_get_rxnfc,
12661 	.get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
12662 	.get_rxfh_indir		= tg3_get_rxfh_indir,
12663 	.set_rxfh_indir		= tg3_set_rxfh_indir,
12664 	.get_channels		= tg3_get_channels,
12665 	.set_channels		= tg3_set_channels,
12666 	.get_ts_info		= ethtool_op_get_ts_info,
12667 };
12668 
12669 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
12670 						struct rtnl_link_stats64 *stats)
12671 {
12672 	struct tg3 *tp = netdev_priv(dev);
12673 
12674 	spin_lock_bh(&tp->lock);
12675 	if (!tp->hw_stats) {
12676 		spin_unlock_bh(&tp->lock);
12677 		return &tp->net_stats_prev;
12678 	}
12679 
12680 	tg3_get_nstats(tp, stats);
12681 	spin_unlock_bh(&tp->lock);
12682 
12683 	return stats;
12684 }
12685 
12686 static void tg3_set_rx_mode(struct net_device *dev)
12687 {
12688 	struct tg3 *tp = netdev_priv(dev);
12689 
12690 	if (!netif_running(dev))
12691 		return;
12692 
12693 	tg3_full_lock(tp, 0);
12694 	__tg3_set_rx_mode(dev);
12695 	tg3_full_unlock(tp);
12696 }
12697 
12698 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
12699 			       int new_mtu)
12700 {
12701 	dev->mtu = new_mtu;
12702 
12703 	if (new_mtu > ETH_DATA_LEN) {
12704 		if (tg3_flag(tp, 5780_CLASS)) {
12705 			netdev_update_features(dev);
12706 			tg3_flag_clear(tp, TSO_CAPABLE);
12707 		} else {
12708 			tg3_flag_set(tp, JUMBO_RING_ENABLE);
12709 		}
12710 	} else {
12711 		if (tg3_flag(tp, 5780_CLASS)) {
12712 			tg3_flag_set(tp, TSO_CAPABLE);
12713 			netdev_update_features(dev);
12714 		}
12715 		tg3_flag_clear(tp, JUMBO_RING_ENABLE);
12716 	}
12717 }
12718 
12719 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
12720 {
12721 	struct tg3 *tp = netdev_priv(dev);
12722 	int err, reset_phy = 0;
12723 
12724 	if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
12725 		return -EINVAL;
12726 
12727 	if (!netif_running(dev)) {
12728 		/* We'll just catch it later when the
12729 		 * device is up'd.
12730 		 */
12731 		tg3_set_mtu(dev, tp, new_mtu);
12732 		return 0;
12733 	}
12734 
12735 	tg3_phy_stop(tp);
12736 
12737 	tg3_netif_stop(tp);
12738 
12739 	tg3_full_lock(tp, 1);
12740 
12741 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12742 
12743 	tg3_set_mtu(dev, tp, new_mtu);
12744 
12745 	/* Reset PHY, otherwise the read DMA engine will be in a mode that
12746 	 * breaks all requests to 256 bytes.
12747 	 */
12748 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
12749 		reset_phy = 1;
12750 
12751 	err = tg3_restart_hw(tp, reset_phy);
12752 
12753 	if (!err)
12754 		tg3_netif_start(tp);
12755 
12756 	tg3_full_unlock(tp);
12757 
12758 	if (!err)
12759 		tg3_phy_start(tp);
12760 
12761 	return err;
12762 }
12763 
12764 static const struct net_device_ops tg3_netdev_ops = {
12765 	.ndo_open		= tg3_open,
12766 	.ndo_stop		= tg3_close,
12767 	.ndo_start_xmit		= tg3_start_xmit,
12768 	.ndo_get_stats64	= tg3_get_stats64,
12769 	.ndo_validate_addr	= eth_validate_addr,
12770 	.ndo_set_rx_mode	= tg3_set_rx_mode,
12771 	.ndo_set_mac_address	= tg3_set_mac_addr,
12772 	.ndo_do_ioctl		= tg3_ioctl,
12773 	.ndo_tx_timeout		= tg3_tx_timeout,
12774 	.ndo_change_mtu		= tg3_change_mtu,
12775 	.ndo_fix_features	= tg3_fix_features,
12776 	.ndo_set_features	= tg3_set_features,
12777 #ifdef CONFIG_NET_POLL_CONTROLLER
12778 	.ndo_poll_controller	= tg3_poll_controller,
12779 #endif
12780 };
12781 
12782 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
12783 {
12784 	u32 cursize, val, magic;
12785 
12786 	tp->nvram_size = EEPROM_CHIP_SIZE;
12787 
12788 	if (tg3_nvram_read(tp, 0, &magic) != 0)
12789 		return;
12790 
12791 	if ((magic != TG3_EEPROM_MAGIC) &&
12792 	    ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
12793 	    ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
12794 		return;
12795 
12796 	/*
12797 	 * Size the chip by reading offsets at increasing powers of two.
12798 	 * When we encounter our validation signature, we know the addressing
12799 	 * has wrapped around, and thus have our chip size.
12800 	 */
12801 	cursize = 0x10;
12802 
12803 	while (cursize < tp->nvram_size) {
12804 		if (tg3_nvram_read(tp, cursize, &val) != 0)
12805 			return;
12806 
12807 		if (val == magic)
12808 			break;
12809 
12810 		cursize <<= 1;
12811 	}
12812 
12813 	tp->nvram_size = cursize;
12814 }
12815 
12816 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
12817 {
12818 	u32 val;
12819 
12820 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
12821 		return;
12822 
12823 	/* Selfboot format */
12824 	if (val != TG3_EEPROM_MAGIC) {
12825 		tg3_get_eeprom_size(tp);
12826 		return;
12827 	}
12828 
12829 	if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
12830 		if (val != 0) {
12831 			/* This is confusing.  We want to operate on the
12832 			 * 16-bit value at offset 0xf2.  The tg3_nvram_read()
12833 			 * call will read from NVRAM and byteswap the data
12834 			 * according to the byteswapping settings for all
12835 			 * other register accesses.  This ensures the data we
12836 			 * want will always reside in the lower 16-bits.
12837 			 * However, the data in NVRAM is in LE format, which
12838 			 * means the data from the NVRAM read will always be
12839 			 * opposite the endianness of the CPU.  The 16-bit
12840 			 * byteswap then brings the data to CPU endianness.
12841 			 */
12842 			tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
12843 			return;
12844 		}
12845 	}
12846 	tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12847 }
12848 
12849 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
12850 {
12851 	u32 nvcfg1;
12852 
12853 	nvcfg1 = tr32(NVRAM_CFG1);
12854 	if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
12855 		tg3_flag_set(tp, FLASH);
12856 	} else {
12857 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12858 		tw32(NVRAM_CFG1, nvcfg1);
12859 	}
12860 
12861 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
12862 	    tg3_flag(tp, 5780_CLASS)) {
12863 		switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
12864 		case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
12865 			tp->nvram_jedecnum = JEDEC_ATMEL;
12866 			tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
12867 			tg3_flag_set(tp, NVRAM_BUFFERED);
12868 			break;
12869 		case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
12870 			tp->nvram_jedecnum = JEDEC_ATMEL;
12871 			tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
12872 			break;
12873 		case FLASH_VENDOR_ATMEL_EEPROM:
12874 			tp->nvram_jedecnum = JEDEC_ATMEL;
12875 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12876 			tg3_flag_set(tp, NVRAM_BUFFERED);
12877 			break;
12878 		case FLASH_VENDOR_ST:
12879 			tp->nvram_jedecnum = JEDEC_ST;
12880 			tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
12881 			tg3_flag_set(tp, NVRAM_BUFFERED);
12882 			break;
12883 		case FLASH_VENDOR_SAIFUN:
12884 			tp->nvram_jedecnum = JEDEC_SAIFUN;
12885 			tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
12886 			break;
12887 		case FLASH_VENDOR_SST_SMALL:
12888 		case FLASH_VENDOR_SST_LARGE:
12889 			tp->nvram_jedecnum = JEDEC_SST;
12890 			tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
12891 			break;
12892 		}
12893 	} else {
12894 		tp->nvram_jedecnum = JEDEC_ATMEL;
12895 		tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
12896 		tg3_flag_set(tp, NVRAM_BUFFERED);
12897 	}
12898 }
12899 
12900 static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
12901 {
12902 	switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
12903 	case FLASH_5752PAGE_SIZE_256:
12904 		tp->nvram_pagesize = 256;
12905 		break;
12906 	case FLASH_5752PAGE_SIZE_512:
12907 		tp->nvram_pagesize = 512;
12908 		break;
12909 	case FLASH_5752PAGE_SIZE_1K:
12910 		tp->nvram_pagesize = 1024;
12911 		break;
12912 	case FLASH_5752PAGE_SIZE_2K:
12913 		tp->nvram_pagesize = 2048;
12914 		break;
12915 	case FLASH_5752PAGE_SIZE_4K:
12916 		tp->nvram_pagesize = 4096;
12917 		break;
12918 	case FLASH_5752PAGE_SIZE_264:
12919 		tp->nvram_pagesize = 264;
12920 		break;
12921 	case FLASH_5752PAGE_SIZE_528:
12922 		tp->nvram_pagesize = 528;
12923 		break;
12924 	}
12925 }
12926 
12927 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
12928 {
12929 	u32 nvcfg1;
12930 
12931 	nvcfg1 = tr32(NVRAM_CFG1);
12932 
12933 	/* NVRAM protection for TPM */
12934 	if (nvcfg1 & (1 << 27))
12935 		tg3_flag_set(tp, PROTECTED_NVRAM);
12936 
12937 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12938 	case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
12939 	case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
12940 		tp->nvram_jedecnum = JEDEC_ATMEL;
12941 		tg3_flag_set(tp, NVRAM_BUFFERED);
12942 		break;
12943 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12944 		tp->nvram_jedecnum = JEDEC_ATMEL;
12945 		tg3_flag_set(tp, NVRAM_BUFFERED);
12946 		tg3_flag_set(tp, FLASH);
12947 		break;
12948 	case FLASH_5752VENDOR_ST_M45PE10:
12949 	case FLASH_5752VENDOR_ST_M45PE20:
12950 	case FLASH_5752VENDOR_ST_M45PE40:
12951 		tp->nvram_jedecnum = JEDEC_ST;
12952 		tg3_flag_set(tp, NVRAM_BUFFERED);
12953 		tg3_flag_set(tp, FLASH);
12954 		break;
12955 	}
12956 
12957 	if (tg3_flag(tp, FLASH)) {
12958 		tg3_nvram_get_pagesize(tp, nvcfg1);
12959 	} else {
12960 		/* For eeprom, set pagesize to maximum eeprom size */
12961 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12962 
12963 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12964 		tw32(NVRAM_CFG1, nvcfg1);
12965 	}
12966 }
12967 
12968 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
12969 {
12970 	u32 nvcfg1, protect = 0;
12971 
12972 	nvcfg1 = tr32(NVRAM_CFG1);
12973 
12974 	/* NVRAM protection for TPM */
12975 	if (nvcfg1 & (1 << 27)) {
12976 		tg3_flag_set(tp, PROTECTED_NVRAM);
12977 		protect = 1;
12978 	}
12979 
12980 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12981 	switch (nvcfg1) {
12982 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
12983 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
12984 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
12985 	case FLASH_5755VENDOR_ATMEL_FLASH_5:
12986 		tp->nvram_jedecnum = JEDEC_ATMEL;
12987 		tg3_flag_set(tp, NVRAM_BUFFERED);
12988 		tg3_flag_set(tp, FLASH);
12989 		tp->nvram_pagesize = 264;
12990 		if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
12991 		    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
12992 			tp->nvram_size = (protect ? 0x3e200 :
12993 					  TG3_NVRAM_SIZE_512KB);
12994 		else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
12995 			tp->nvram_size = (protect ? 0x1f200 :
12996 					  TG3_NVRAM_SIZE_256KB);
12997 		else
12998 			tp->nvram_size = (protect ? 0x1f200 :
12999 					  TG3_NVRAM_SIZE_128KB);
13000 		break;
13001 	case FLASH_5752VENDOR_ST_M45PE10:
13002 	case FLASH_5752VENDOR_ST_M45PE20:
13003 	case FLASH_5752VENDOR_ST_M45PE40:
13004 		tp->nvram_jedecnum = JEDEC_ST;
13005 		tg3_flag_set(tp, NVRAM_BUFFERED);
13006 		tg3_flag_set(tp, FLASH);
13007 		tp->nvram_pagesize = 256;
13008 		if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
13009 			tp->nvram_size = (protect ?
13010 					  TG3_NVRAM_SIZE_64KB :
13011 					  TG3_NVRAM_SIZE_128KB);
13012 		else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
13013 			tp->nvram_size = (protect ?
13014 					  TG3_NVRAM_SIZE_64KB :
13015 					  TG3_NVRAM_SIZE_256KB);
13016 		else
13017 			tp->nvram_size = (protect ?
13018 					  TG3_NVRAM_SIZE_128KB :
13019 					  TG3_NVRAM_SIZE_512KB);
13020 		break;
13021 	}
13022 }
13023 
13024 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
13025 {
13026 	u32 nvcfg1;
13027 
13028 	nvcfg1 = tr32(NVRAM_CFG1);
13029 
13030 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13031 	case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
13032 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
13033 	case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
13034 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
13035 		tp->nvram_jedecnum = JEDEC_ATMEL;
13036 		tg3_flag_set(tp, NVRAM_BUFFERED);
13037 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13038 
13039 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13040 		tw32(NVRAM_CFG1, nvcfg1);
13041 		break;
13042 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13043 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
13044 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
13045 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
13046 		tp->nvram_jedecnum = JEDEC_ATMEL;
13047 		tg3_flag_set(tp, NVRAM_BUFFERED);
13048 		tg3_flag_set(tp, FLASH);
13049 		tp->nvram_pagesize = 264;
13050 		break;
13051 	case FLASH_5752VENDOR_ST_M45PE10:
13052 	case FLASH_5752VENDOR_ST_M45PE20:
13053 	case FLASH_5752VENDOR_ST_M45PE40:
13054 		tp->nvram_jedecnum = JEDEC_ST;
13055 		tg3_flag_set(tp, NVRAM_BUFFERED);
13056 		tg3_flag_set(tp, FLASH);
13057 		tp->nvram_pagesize = 256;
13058 		break;
13059 	}
13060 }
13061 
13062 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
13063 {
13064 	u32 nvcfg1, protect = 0;
13065 
13066 	nvcfg1 = tr32(NVRAM_CFG1);
13067 
13068 	/* NVRAM protection for TPM */
13069 	if (nvcfg1 & (1 << 27)) {
13070 		tg3_flag_set(tp, PROTECTED_NVRAM);
13071 		protect = 1;
13072 	}
13073 
13074 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
13075 	switch (nvcfg1) {
13076 	case FLASH_5761VENDOR_ATMEL_ADB021D:
13077 	case FLASH_5761VENDOR_ATMEL_ADB041D:
13078 	case FLASH_5761VENDOR_ATMEL_ADB081D:
13079 	case FLASH_5761VENDOR_ATMEL_ADB161D:
13080 	case FLASH_5761VENDOR_ATMEL_MDB021D:
13081 	case FLASH_5761VENDOR_ATMEL_MDB041D:
13082 	case FLASH_5761VENDOR_ATMEL_MDB081D:
13083 	case FLASH_5761VENDOR_ATMEL_MDB161D:
13084 		tp->nvram_jedecnum = JEDEC_ATMEL;
13085 		tg3_flag_set(tp, NVRAM_BUFFERED);
13086 		tg3_flag_set(tp, FLASH);
13087 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13088 		tp->nvram_pagesize = 256;
13089 		break;
13090 	case FLASH_5761VENDOR_ST_A_M45PE20:
13091 	case FLASH_5761VENDOR_ST_A_M45PE40:
13092 	case FLASH_5761VENDOR_ST_A_M45PE80:
13093 	case FLASH_5761VENDOR_ST_A_M45PE16:
13094 	case FLASH_5761VENDOR_ST_M_M45PE20:
13095 	case FLASH_5761VENDOR_ST_M_M45PE40:
13096 	case FLASH_5761VENDOR_ST_M_M45PE80:
13097 	case FLASH_5761VENDOR_ST_M_M45PE16:
13098 		tp->nvram_jedecnum = JEDEC_ST;
13099 		tg3_flag_set(tp, NVRAM_BUFFERED);
13100 		tg3_flag_set(tp, FLASH);
13101 		tp->nvram_pagesize = 256;
13102 		break;
13103 	}
13104 
13105 	if (protect) {
13106 		tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
13107 	} else {
13108 		switch (nvcfg1) {
13109 		case FLASH_5761VENDOR_ATMEL_ADB161D:
13110 		case FLASH_5761VENDOR_ATMEL_MDB161D:
13111 		case FLASH_5761VENDOR_ST_A_M45PE16:
13112 		case FLASH_5761VENDOR_ST_M_M45PE16:
13113 			tp->nvram_size = TG3_NVRAM_SIZE_2MB;
13114 			break;
13115 		case FLASH_5761VENDOR_ATMEL_ADB081D:
13116 		case FLASH_5761VENDOR_ATMEL_MDB081D:
13117 		case FLASH_5761VENDOR_ST_A_M45PE80:
13118 		case FLASH_5761VENDOR_ST_M_M45PE80:
13119 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13120 			break;
13121 		case FLASH_5761VENDOR_ATMEL_ADB041D:
13122 		case FLASH_5761VENDOR_ATMEL_MDB041D:
13123 		case FLASH_5761VENDOR_ST_A_M45PE40:
13124 		case FLASH_5761VENDOR_ST_M_M45PE40:
13125 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13126 			break;
13127 		case FLASH_5761VENDOR_ATMEL_ADB021D:
13128 		case FLASH_5761VENDOR_ATMEL_MDB021D:
13129 		case FLASH_5761VENDOR_ST_A_M45PE20:
13130 		case FLASH_5761VENDOR_ST_M_M45PE20:
13131 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13132 			break;
13133 		}
13134 	}
13135 }
13136 
13137 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
13138 {
13139 	tp->nvram_jedecnum = JEDEC_ATMEL;
13140 	tg3_flag_set(tp, NVRAM_BUFFERED);
13141 	tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13142 }
13143 
13144 static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp)
13145 {
13146 	u32 nvcfg1;
13147 
13148 	nvcfg1 = tr32(NVRAM_CFG1);
13149 
13150 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13151 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
13152 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
13153 		tp->nvram_jedecnum = JEDEC_ATMEL;
13154 		tg3_flag_set(tp, NVRAM_BUFFERED);
13155 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13156 
13157 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13158 		tw32(NVRAM_CFG1, nvcfg1);
13159 		return;
13160 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13161 	case FLASH_57780VENDOR_ATMEL_AT45DB011D:
13162 	case FLASH_57780VENDOR_ATMEL_AT45DB011B:
13163 	case FLASH_57780VENDOR_ATMEL_AT45DB021D:
13164 	case FLASH_57780VENDOR_ATMEL_AT45DB021B:
13165 	case FLASH_57780VENDOR_ATMEL_AT45DB041D:
13166 	case FLASH_57780VENDOR_ATMEL_AT45DB041B:
13167 		tp->nvram_jedecnum = JEDEC_ATMEL;
13168 		tg3_flag_set(tp, NVRAM_BUFFERED);
13169 		tg3_flag_set(tp, FLASH);
13170 
13171 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13172 		case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13173 		case FLASH_57780VENDOR_ATMEL_AT45DB011D:
13174 		case FLASH_57780VENDOR_ATMEL_AT45DB011B:
13175 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13176 			break;
13177 		case FLASH_57780VENDOR_ATMEL_AT45DB021D:
13178 		case FLASH_57780VENDOR_ATMEL_AT45DB021B:
13179 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13180 			break;
13181 		case FLASH_57780VENDOR_ATMEL_AT45DB041D:
13182 		case FLASH_57780VENDOR_ATMEL_AT45DB041B:
13183 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13184 			break;
13185 		}
13186 		break;
13187 	case FLASH_5752VENDOR_ST_M45PE10:
13188 	case FLASH_5752VENDOR_ST_M45PE20:
13189 	case FLASH_5752VENDOR_ST_M45PE40:
13190 		tp->nvram_jedecnum = JEDEC_ST;
13191 		tg3_flag_set(tp, NVRAM_BUFFERED);
13192 		tg3_flag_set(tp, FLASH);
13193 
13194 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13195 		case FLASH_5752VENDOR_ST_M45PE10:
13196 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13197 			break;
13198 		case FLASH_5752VENDOR_ST_M45PE20:
13199 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13200 			break;
13201 		case FLASH_5752VENDOR_ST_M45PE40:
13202 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13203 			break;
13204 		}
13205 		break;
13206 	default:
13207 		tg3_flag_set(tp, NO_NVRAM);
13208 		return;
13209 	}
13210 
13211 	tg3_nvram_get_pagesize(tp, nvcfg1);
13212 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13213 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13214 }
13215 
13216 
13217 static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp)
13218 {
13219 	u32 nvcfg1;
13220 
13221 	nvcfg1 = tr32(NVRAM_CFG1);
13222 
13223 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13224 	case FLASH_5717VENDOR_ATMEL_EEPROM:
13225 	case FLASH_5717VENDOR_MICRO_EEPROM:
13226 		tp->nvram_jedecnum = JEDEC_ATMEL;
13227 		tg3_flag_set(tp, NVRAM_BUFFERED);
13228 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13229 
13230 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13231 		tw32(NVRAM_CFG1, nvcfg1);
13232 		return;
13233 	case FLASH_5717VENDOR_ATMEL_MDB011D:
13234 	case FLASH_5717VENDOR_ATMEL_ADB011B:
13235 	case FLASH_5717VENDOR_ATMEL_ADB011D:
13236 	case FLASH_5717VENDOR_ATMEL_MDB021D:
13237 	case FLASH_5717VENDOR_ATMEL_ADB021B:
13238 	case FLASH_5717VENDOR_ATMEL_ADB021D:
13239 	case FLASH_5717VENDOR_ATMEL_45USPT:
13240 		tp->nvram_jedecnum = JEDEC_ATMEL;
13241 		tg3_flag_set(tp, NVRAM_BUFFERED);
13242 		tg3_flag_set(tp, FLASH);
13243 
13244 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13245 		case FLASH_5717VENDOR_ATMEL_MDB021D:
13246 			/* Detect size with tg3_nvram_get_size() */
13247 			break;
13248 		case FLASH_5717VENDOR_ATMEL_ADB021B:
13249 		case FLASH_5717VENDOR_ATMEL_ADB021D:
13250 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13251 			break;
13252 		default:
13253 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13254 			break;
13255 		}
13256 		break;
13257 	case FLASH_5717VENDOR_ST_M_M25PE10:
13258 	case FLASH_5717VENDOR_ST_A_M25PE10:
13259 	case FLASH_5717VENDOR_ST_M_M45PE10:
13260 	case FLASH_5717VENDOR_ST_A_M45PE10:
13261 	case FLASH_5717VENDOR_ST_M_M25PE20:
13262 	case FLASH_5717VENDOR_ST_A_M25PE20:
13263 	case FLASH_5717VENDOR_ST_M_M45PE20:
13264 	case FLASH_5717VENDOR_ST_A_M45PE20:
13265 	case FLASH_5717VENDOR_ST_25USPT:
13266 	case FLASH_5717VENDOR_ST_45USPT:
13267 		tp->nvram_jedecnum = JEDEC_ST;
13268 		tg3_flag_set(tp, NVRAM_BUFFERED);
13269 		tg3_flag_set(tp, FLASH);
13270 
13271 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13272 		case FLASH_5717VENDOR_ST_M_M25PE20:
13273 		case FLASH_5717VENDOR_ST_M_M45PE20:
13274 			/* Detect size with tg3_nvram_get_size() */
13275 			break;
13276 		case FLASH_5717VENDOR_ST_A_M25PE20:
13277 		case FLASH_5717VENDOR_ST_A_M45PE20:
13278 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13279 			break;
13280 		default:
13281 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13282 			break;
13283 		}
13284 		break;
13285 	default:
13286 		tg3_flag_set(tp, NO_NVRAM);
13287 		return;
13288 	}
13289 
13290 	tg3_nvram_get_pagesize(tp, nvcfg1);
13291 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13292 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13293 }
13294 
13295 static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp)
13296 {
13297 	u32 nvcfg1, nvmpinstrp;
13298 
13299 	nvcfg1 = tr32(NVRAM_CFG1);
13300 	nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
13301 
13302 	switch (nvmpinstrp) {
13303 	case FLASH_5720_EEPROM_HD:
13304 	case FLASH_5720_EEPROM_LD:
13305 		tp->nvram_jedecnum = JEDEC_ATMEL;
13306 		tg3_flag_set(tp, NVRAM_BUFFERED);
13307 
13308 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13309 		tw32(NVRAM_CFG1, nvcfg1);
13310 		if (nvmpinstrp == FLASH_5720_EEPROM_HD)
13311 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13312 		else
13313 			tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
13314 		return;
13315 	case FLASH_5720VENDOR_M_ATMEL_DB011D:
13316 	case FLASH_5720VENDOR_A_ATMEL_DB011B:
13317 	case FLASH_5720VENDOR_A_ATMEL_DB011D:
13318 	case FLASH_5720VENDOR_M_ATMEL_DB021D:
13319 	case FLASH_5720VENDOR_A_ATMEL_DB021B:
13320 	case FLASH_5720VENDOR_A_ATMEL_DB021D:
13321 	case FLASH_5720VENDOR_M_ATMEL_DB041D:
13322 	case FLASH_5720VENDOR_A_ATMEL_DB041B:
13323 	case FLASH_5720VENDOR_A_ATMEL_DB041D:
13324 	case FLASH_5720VENDOR_M_ATMEL_DB081D:
13325 	case FLASH_5720VENDOR_A_ATMEL_DB081D:
13326 	case FLASH_5720VENDOR_ATMEL_45USPT:
13327 		tp->nvram_jedecnum = JEDEC_ATMEL;
13328 		tg3_flag_set(tp, NVRAM_BUFFERED);
13329 		tg3_flag_set(tp, FLASH);
13330 
13331 		switch (nvmpinstrp) {
13332 		case FLASH_5720VENDOR_M_ATMEL_DB021D:
13333 		case FLASH_5720VENDOR_A_ATMEL_DB021B:
13334 		case FLASH_5720VENDOR_A_ATMEL_DB021D:
13335 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13336 			break;
13337 		case FLASH_5720VENDOR_M_ATMEL_DB041D:
13338 		case FLASH_5720VENDOR_A_ATMEL_DB041B:
13339 		case FLASH_5720VENDOR_A_ATMEL_DB041D:
13340 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13341 			break;
13342 		case FLASH_5720VENDOR_M_ATMEL_DB081D:
13343 		case FLASH_5720VENDOR_A_ATMEL_DB081D:
13344 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13345 			break;
13346 		default:
13347 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13348 			break;
13349 		}
13350 		break;
13351 	case FLASH_5720VENDOR_M_ST_M25PE10:
13352 	case FLASH_5720VENDOR_M_ST_M45PE10:
13353 	case FLASH_5720VENDOR_A_ST_M25PE10:
13354 	case FLASH_5720VENDOR_A_ST_M45PE10:
13355 	case FLASH_5720VENDOR_M_ST_M25PE20:
13356 	case FLASH_5720VENDOR_M_ST_M45PE20:
13357 	case FLASH_5720VENDOR_A_ST_M25PE20:
13358 	case FLASH_5720VENDOR_A_ST_M45PE20:
13359 	case FLASH_5720VENDOR_M_ST_M25PE40:
13360 	case FLASH_5720VENDOR_M_ST_M45PE40:
13361 	case FLASH_5720VENDOR_A_ST_M25PE40:
13362 	case FLASH_5720VENDOR_A_ST_M45PE40:
13363 	case FLASH_5720VENDOR_M_ST_M25PE80:
13364 	case FLASH_5720VENDOR_M_ST_M45PE80:
13365 	case FLASH_5720VENDOR_A_ST_M25PE80:
13366 	case FLASH_5720VENDOR_A_ST_M45PE80:
13367 	case FLASH_5720VENDOR_ST_25USPT:
13368 	case FLASH_5720VENDOR_ST_45USPT:
13369 		tp->nvram_jedecnum = JEDEC_ST;
13370 		tg3_flag_set(tp, NVRAM_BUFFERED);
13371 		tg3_flag_set(tp, FLASH);
13372 
13373 		switch (nvmpinstrp) {
13374 		case FLASH_5720VENDOR_M_ST_M25PE20:
13375 		case FLASH_5720VENDOR_M_ST_M45PE20:
13376 		case FLASH_5720VENDOR_A_ST_M25PE20:
13377 		case FLASH_5720VENDOR_A_ST_M45PE20:
13378 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13379 			break;
13380 		case FLASH_5720VENDOR_M_ST_M25PE40:
13381 		case FLASH_5720VENDOR_M_ST_M45PE40:
13382 		case FLASH_5720VENDOR_A_ST_M25PE40:
13383 		case FLASH_5720VENDOR_A_ST_M45PE40:
13384 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13385 			break;
13386 		case FLASH_5720VENDOR_M_ST_M25PE80:
13387 		case FLASH_5720VENDOR_M_ST_M45PE80:
13388 		case FLASH_5720VENDOR_A_ST_M25PE80:
13389 		case FLASH_5720VENDOR_A_ST_M45PE80:
13390 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13391 			break;
13392 		default:
13393 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13394 			break;
13395 		}
13396 		break;
13397 	default:
13398 		tg3_flag_set(tp, NO_NVRAM);
13399 		return;
13400 	}
13401 
13402 	tg3_nvram_get_pagesize(tp, nvcfg1);
13403 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13404 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13405 }
13406 
13407 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
13408 static void __devinit tg3_nvram_init(struct tg3 *tp)
13409 {
13410 	tw32_f(GRC_EEPROM_ADDR,
13411 	     (EEPROM_ADDR_FSM_RESET |
13412 	      (EEPROM_DEFAULT_CLOCK_PERIOD <<
13413 	       EEPROM_ADDR_CLKPERD_SHIFT)));
13414 
13415 	msleep(1);
13416 
13417 	/* Enable seeprom accesses. */
13418 	tw32_f(GRC_LOCAL_CTRL,
13419 	     tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
13420 	udelay(100);
13421 
13422 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13423 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
13424 		tg3_flag_set(tp, NVRAM);
13425 
13426 		if (tg3_nvram_lock(tp)) {
13427 			netdev_warn(tp->dev,
13428 				    "Cannot get nvram lock, %s failed\n",
13429 				    __func__);
13430 			return;
13431 		}
13432 		tg3_enable_nvram_access(tp);
13433 
13434 		tp->nvram_size = 0;
13435 
13436 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
13437 			tg3_get_5752_nvram_info(tp);
13438 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
13439 			tg3_get_5755_nvram_info(tp);
13440 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
13441 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
13442 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13443 			tg3_get_5787_nvram_info(tp);
13444 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
13445 			tg3_get_5761_nvram_info(tp);
13446 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
13447 			tg3_get_5906_nvram_info(tp);
13448 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
13449 			 tg3_flag(tp, 57765_CLASS))
13450 			tg3_get_57780_nvram_info(tp);
13451 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
13452 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
13453 			tg3_get_5717_nvram_info(tp);
13454 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
13455 			tg3_get_5720_nvram_info(tp);
13456 		else
13457 			tg3_get_nvram_info(tp);
13458 
13459 		if (tp->nvram_size == 0)
13460 			tg3_get_nvram_size(tp);
13461 
13462 		tg3_disable_nvram_access(tp);
13463 		tg3_nvram_unlock(tp);
13464 
13465 	} else {
13466 		tg3_flag_clear(tp, NVRAM);
13467 		tg3_flag_clear(tp, NVRAM_BUFFERED);
13468 
13469 		tg3_get_eeprom_size(tp);
13470 	}
13471 }
13472 
13473 struct subsys_tbl_ent {
13474 	u16 subsys_vendor, subsys_devid;
13475 	u32 phy_id;
13476 };
13477 
13478 static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = {
13479 	/* Broadcom boards. */
13480 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13481 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
13482 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13483 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
13484 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13485 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
13486 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13487 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
13488 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13489 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
13490 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13491 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
13492 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13493 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
13494 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13495 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
13496 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13497 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
13498 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13499 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
13500 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13501 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
13502 
13503 	/* 3com boards. */
13504 	{ TG3PCI_SUBVENDOR_ID_3COM,
13505 	  TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
13506 	{ TG3PCI_SUBVENDOR_ID_3COM,
13507 	  TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
13508 	{ TG3PCI_SUBVENDOR_ID_3COM,
13509 	  TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
13510 	{ TG3PCI_SUBVENDOR_ID_3COM,
13511 	  TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
13512 	{ TG3PCI_SUBVENDOR_ID_3COM,
13513 	  TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
13514 
13515 	/* DELL boards. */
13516 	{ TG3PCI_SUBVENDOR_ID_DELL,
13517 	  TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
13518 	{ TG3PCI_SUBVENDOR_ID_DELL,
13519 	  TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
13520 	{ TG3PCI_SUBVENDOR_ID_DELL,
13521 	  TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
13522 	{ TG3PCI_SUBVENDOR_ID_DELL,
13523 	  TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
13524 
13525 	/* Compaq boards. */
13526 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13527 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
13528 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13529 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
13530 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13531 	  TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
13532 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13533 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
13534 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13535 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
13536 
13537 	/* IBM boards. */
13538 	{ TG3PCI_SUBVENDOR_ID_IBM,
13539 	  TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
13540 };
13541 
13542 static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp)
13543 {
13544 	int i;
13545 
13546 	for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
13547 		if ((subsys_id_to_phy_id[i].subsys_vendor ==
13548 		     tp->pdev->subsystem_vendor) &&
13549 		    (subsys_id_to_phy_id[i].subsys_devid ==
13550 		     tp->pdev->subsystem_device))
13551 			return &subsys_id_to_phy_id[i];
13552 	}
13553 	return NULL;
13554 }
13555 
13556 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
13557 {
13558 	u32 val;
13559 
13560 	tp->phy_id = TG3_PHY_ID_INVALID;
13561 	tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13562 
13563 	/* Assume an onboard device and WOL capable by default.  */
13564 	tg3_flag_set(tp, EEPROM_WRITE_PROT);
13565 	tg3_flag_set(tp, WOL_CAP);
13566 
13567 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
13568 		if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
13569 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13570 			tg3_flag_set(tp, IS_NIC);
13571 		}
13572 		val = tr32(VCPU_CFGSHDW);
13573 		if (val & VCPU_CFGSHDW_ASPM_DBNC)
13574 			tg3_flag_set(tp, ASPM_WORKAROUND);
13575 		if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
13576 		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
13577 			tg3_flag_set(tp, WOL_ENABLE);
13578 			device_set_wakeup_enable(&tp->pdev->dev, true);
13579 		}
13580 		goto done;
13581 	}
13582 
13583 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
13584 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
13585 		u32 nic_cfg, led_cfg;
13586 		u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
13587 		int eeprom_phy_serdes = 0;
13588 
13589 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
13590 		tp->nic_sram_data_cfg = nic_cfg;
13591 
13592 		tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
13593 		ver >>= NIC_SRAM_DATA_VER_SHIFT;
13594 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13595 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
13596 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 &&
13597 		    (ver > 0) && (ver < 0x100))
13598 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
13599 
13600 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13601 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
13602 
13603 		if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
13604 		    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
13605 			eeprom_phy_serdes = 1;
13606 
13607 		tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
13608 		if (nic_phy_id != 0) {
13609 			u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
13610 			u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
13611 
13612 			eeprom_phy_id  = (id1 >> 16) << 10;
13613 			eeprom_phy_id |= (id2 & 0xfc00) << 16;
13614 			eeprom_phy_id |= (id2 & 0x03ff) <<  0;
13615 		} else
13616 			eeprom_phy_id = 0;
13617 
13618 		tp->phy_id = eeprom_phy_id;
13619 		if (eeprom_phy_serdes) {
13620 			if (!tg3_flag(tp, 5705_PLUS))
13621 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13622 			else
13623 				tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
13624 		}
13625 
13626 		if (tg3_flag(tp, 5750_PLUS))
13627 			led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
13628 				    SHASTA_EXT_LED_MODE_MASK);
13629 		else
13630 			led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
13631 
13632 		switch (led_cfg) {
13633 		default:
13634 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
13635 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13636 			break;
13637 
13638 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
13639 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13640 			break;
13641 
13642 		case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
13643 			tp->led_ctrl = LED_CTRL_MODE_MAC;
13644 
13645 			/* Default to PHY_1_MODE if 0 (MAC_MODE) is
13646 			 * read on some older 5700/5701 bootcode.
13647 			 */
13648 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
13649 			    ASIC_REV_5700 ||
13650 			    GET_ASIC_REV(tp->pci_chip_rev_id) ==
13651 			    ASIC_REV_5701)
13652 				tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13653 
13654 			break;
13655 
13656 		case SHASTA_EXT_LED_SHARED:
13657 			tp->led_ctrl = LED_CTRL_MODE_SHARED;
13658 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
13659 			    tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
13660 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13661 						 LED_CTRL_MODE_PHY_2);
13662 			break;
13663 
13664 		case SHASTA_EXT_LED_MAC:
13665 			tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
13666 			break;
13667 
13668 		case SHASTA_EXT_LED_COMBO:
13669 			tp->led_ctrl = LED_CTRL_MODE_COMBO;
13670 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
13671 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13672 						 LED_CTRL_MODE_PHY_2);
13673 			break;
13674 
13675 		}
13676 
13677 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
13678 		     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
13679 		    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
13680 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13681 
13682 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
13683 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13684 
13685 		if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
13686 			tg3_flag_set(tp, EEPROM_WRITE_PROT);
13687 			if ((tp->pdev->subsystem_vendor ==
13688 			     PCI_VENDOR_ID_ARIMA) &&
13689 			    (tp->pdev->subsystem_device == 0x205a ||
13690 			     tp->pdev->subsystem_device == 0x2063))
13691 				tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13692 		} else {
13693 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13694 			tg3_flag_set(tp, IS_NIC);
13695 		}
13696 
13697 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
13698 			tg3_flag_set(tp, ENABLE_ASF);
13699 			if (tg3_flag(tp, 5750_PLUS))
13700 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
13701 		}
13702 
13703 		if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
13704 		    tg3_flag(tp, 5750_PLUS))
13705 			tg3_flag_set(tp, ENABLE_APE);
13706 
13707 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
13708 		    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
13709 			tg3_flag_clear(tp, WOL_CAP);
13710 
13711 		if (tg3_flag(tp, WOL_CAP) &&
13712 		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
13713 			tg3_flag_set(tp, WOL_ENABLE);
13714 			device_set_wakeup_enable(&tp->pdev->dev, true);
13715 		}
13716 
13717 		if (cfg2 & (1 << 17))
13718 			tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
13719 
13720 		/* serdes signal pre-emphasis in register 0x590 set by */
13721 		/* bootcode if bit 18 is set */
13722 		if (cfg2 & (1 << 18))
13723 			tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
13724 
13725 		if ((tg3_flag(tp, 57765_PLUS) ||
13726 		     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
13727 		      GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) &&
13728 		    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
13729 			tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
13730 
13731 		if (tg3_flag(tp, PCI_EXPRESS) &&
13732 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
13733 		    !tg3_flag(tp, 57765_PLUS)) {
13734 			u32 cfg3;
13735 
13736 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
13737 			if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
13738 				tg3_flag_set(tp, ASPM_WORKAROUND);
13739 		}
13740 
13741 		if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
13742 			tg3_flag_set(tp, RGMII_INBAND_DISABLE);
13743 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
13744 			tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
13745 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
13746 			tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
13747 	}
13748 done:
13749 	if (tg3_flag(tp, WOL_CAP))
13750 		device_set_wakeup_enable(&tp->pdev->dev,
13751 					 tg3_flag(tp, WOL_ENABLE));
13752 	else
13753 		device_set_wakeup_capable(&tp->pdev->dev, false);
13754 }
13755 
13756 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
13757 {
13758 	int i;
13759 	u32 val;
13760 
13761 	tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
13762 	tw32(OTP_CTRL, cmd);
13763 
13764 	/* Wait for up to 1 ms for command to execute. */
13765 	for (i = 0; i < 100; i++) {
13766 		val = tr32(OTP_STATUS);
13767 		if (val & OTP_STATUS_CMD_DONE)
13768 			break;
13769 		udelay(10);
13770 	}
13771 
13772 	return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
13773 }
13774 
13775 /* Read the gphy configuration from the OTP region of the chip.  The gphy
13776  * configuration is a 32-bit value that straddles the alignment boundary.
13777  * We do two 32-bit reads and then shift and merge the results.
13778  */
13779 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
13780 {
13781 	u32 bhalf_otp, thalf_otp;
13782 
13783 	tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
13784 
13785 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
13786 		return 0;
13787 
13788 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
13789 
13790 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13791 		return 0;
13792 
13793 	thalf_otp = tr32(OTP_READ_DATA);
13794 
13795 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
13796 
13797 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13798 		return 0;
13799 
13800 	bhalf_otp = tr32(OTP_READ_DATA);
13801 
13802 	return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
13803 }
13804 
13805 static void __devinit tg3_phy_init_link_config(struct tg3 *tp)
13806 {
13807 	u32 adv = ADVERTISED_Autoneg;
13808 
13809 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
13810 		adv |= ADVERTISED_1000baseT_Half |
13811 		       ADVERTISED_1000baseT_Full;
13812 
13813 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
13814 		adv |= ADVERTISED_100baseT_Half |
13815 		       ADVERTISED_100baseT_Full |
13816 		       ADVERTISED_10baseT_Half |
13817 		       ADVERTISED_10baseT_Full |
13818 		       ADVERTISED_TP;
13819 	else
13820 		adv |= ADVERTISED_FIBRE;
13821 
13822 	tp->link_config.advertising = adv;
13823 	tp->link_config.speed = SPEED_UNKNOWN;
13824 	tp->link_config.duplex = DUPLEX_UNKNOWN;
13825 	tp->link_config.autoneg = AUTONEG_ENABLE;
13826 	tp->link_config.active_speed = SPEED_UNKNOWN;
13827 	tp->link_config.active_duplex = DUPLEX_UNKNOWN;
13828 
13829 	tp->old_link = -1;
13830 }
13831 
13832 static int __devinit tg3_phy_probe(struct tg3 *tp)
13833 {
13834 	u32 hw_phy_id_1, hw_phy_id_2;
13835 	u32 hw_phy_id, hw_phy_id_masked;
13836 	int err;
13837 
13838 	/* flow control autonegotiation is default behavior */
13839 	tg3_flag_set(tp, PAUSE_AUTONEG);
13840 	tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
13841 
13842 	if (tg3_flag(tp, ENABLE_APE)) {
13843 		switch (tp->pci_fn) {
13844 		case 0:
13845 			tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
13846 			break;
13847 		case 1:
13848 			tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
13849 			break;
13850 		case 2:
13851 			tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
13852 			break;
13853 		case 3:
13854 			tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
13855 			break;
13856 		}
13857 	}
13858 
13859 	if (tg3_flag(tp, USE_PHYLIB))
13860 		return tg3_phy_init(tp);
13861 
13862 	/* Reading the PHY ID register can conflict with ASF
13863 	 * firmware access to the PHY hardware.
13864 	 */
13865 	err = 0;
13866 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
13867 		hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
13868 	} else {
13869 		/* Now read the physical PHY_ID from the chip and verify
13870 		 * that it is sane.  If it doesn't look good, we fall back
13871 		 * to either the hard-coded table based PHY_ID and failing
13872 		 * that the value found in the eeprom area.
13873 		 */
13874 		err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
13875 		err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
13876 
13877 		hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
13878 		hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
13879 		hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
13880 
13881 		hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
13882 	}
13883 
13884 	if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
13885 		tp->phy_id = hw_phy_id;
13886 		if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
13887 			tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13888 		else
13889 			tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
13890 	} else {
13891 		if (tp->phy_id != TG3_PHY_ID_INVALID) {
13892 			/* Do nothing, phy ID already set up in
13893 			 * tg3_get_eeprom_hw_cfg().
13894 			 */
13895 		} else {
13896 			struct subsys_tbl_ent *p;
13897 
13898 			/* No eeprom signature?  Try the hardcoded
13899 			 * subsys device table.
13900 			 */
13901 			p = tg3_lookup_by_subsys(tp);
13902 			if (!p)
13903 				return -ENODEV;
13904 
13905 			tp->phy_id = p->phy_id;
13906 			if (!tp->phy_id ||
13907 			    tp->phy_id == TG3_PHY_ID_BCM8002)
13908 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13909 		}
13910 	}
13911 
13912 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13913 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
13914 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 ||
13915 	     (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 &&
13916 	      tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) ||
13917 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 &&
13918 	      tp->pci_chip_rev_id != CHIPREV_ID_57765_A0)))
13919 		tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
13920 
13921 	tg3_phy_init_link_config(tp);
13922 
13923 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13924 	    !tg3_flag(tp, ENABLE_APE) &&
13925 	    !tg3_flag(tp, ENABLE_ASF)) {
13926 		u32 bmsr, dummy;
13927 
13928 		tg3_readphy(tp, MII_BMSR, &bmsr);
13929 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
13930 		    (bmsr & BMSR_LSTATUS))
13931 			goto skip_phy_reset;
13932 
13933 		err = tg3_phy_reset(tp);
13934 		if (err)
13935 			return err;
13936 
13937 		tg3_phy_set_wirespeed(tp);
13938 
13939 		if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
13940 			tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
13941 					    tp->link_config.flowctrl);
13942 
13943 			tg3_writephy(tp, MII_BMCR,
13944 				     BMCR_ANENABLE | BMCR_ANRESTART);
13945 		}
13946 	}
13947 
13948 skip_phy_reset:
13949 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
13950 		err = tg3_init_5401phy_dsp(tp);
13951 		if (err)
13952 			return err;
13953 
13954 		err = tg3_init_5401phy_dsp(tp);
13955 	}
13956 
13957 	return err;
13958 }
13959 
13960 static void __devinit tg3_read_vpd(struct tg3 *tp)
13961 {
13962 	u8 *vpd_data;
13963 	unsigned int block_end, rosize, len;
13964 	u32 vpdlen;
13965 	int j, i = 0;
13966 
13967 	vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
13968 	if (!vpd_data)
13969 		goto out_no_vpd;
13970 
13971 	i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
13972 	if (i < 0)
13973 		goto out_not_found;
13974 
13975 	rosize = pci_vpd_lrdt_size(&vpd_data[i]);
13976 	block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
13977 	i += PCI_VPD_LRDT_TAG_SIZE;
13978 
13979 	if (block_end > vpdlen)
13980 		goto out_not_found;
13981 
13982 	j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13983 				      PCI_VPD_RO_KEYWORD_MFR_ID);
13984 	if (j > 0) {
13985 		len = pci_vpd_info_field_size(&vpd_data[j]);
13986 
13987 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
13988 		if (j + len > block_end || len != 4 ||
13989 		    memcmp(&vpd_data[j], "1028", 4))
13990 			goto partno;
13991 
13992 		j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13993 					      PCI_VPD_RO_KEYWORD_VENDOR0);
13994 		if (j < 0)
13995 			goto partno;
13996 
13997 		len = pci_vpd_info_field_size(&vpd_data[j]);
13998 
13999 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
14000 		if (j + len > block_end)
14001 			goto partno;
14002 
14003 		memcpy(tp->fw_ver, &vpd_data[j], len);
14004 		strncat(tp->fw_ver, " bc ", vpdlen - len - 1);
14005 	}
14006 
14007 partno:
14008 	i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
14009 				      PCI_VPD_RO_KEYWORD_PARTNO);
14010 	if (i < 0)
14011 		goto out_not_found;
14012 
14013 	len = pci_vpd_info_field_size(&vpd_data[i]);
14014 
14015 	i += PCI_VPD_INFO_FLD_HDR_SIZE;
14016 	if (len > TG3_BPN_SIZE ||
14017 	    (len + i) > vpdlen)
14018 		goto out_not_found;
14019 
14020 	memcpy(tp->board_part_number, &vpd_data[i], len);
14021 
14022 out_not_found:
14023 	kfree(vpd_data);
14024 	if (tp->board_part_number[0])
14025 		return;
14026 
14027 out_no_vpd:
14028 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
14029 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717)
14030 			strcpy(tp->board_part_number, "BCM5717");
14031 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
14032 			strcpy(tp->board_part_number, "BCM5718");
14033 		else
14034 			goto nomatch;
14035 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
14036 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
14037 			strcpy(tp->board_part_number, "BCM57780");
14038 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
14039 			strcpy(tp->board_part_number, "BCM57760");
14040 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
14041 			strcpy(tp->board_part_number, "BCM57790");
14042 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
14043 			strcpy(tp->board_part_number, "BCM57788");
14044 		else
14045 			goto nomatch;
14046 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
14047 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
14048 			strcpy(tp->board_part_number, "BCM57761");
14049 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
14050 			strcpy(tp->board_part_number, "BCM57765");
14051 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
14052 			strcpy(tp->board_part_number, "BCM57781");
14053 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
14054 			strcpy(tp->board_part_number, "BCM57785");
14055 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
14056 			strcpy(tp->board_part_number, "BCM57791");
14057 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
14058 			strcpy(tp->board_part_number, "BCM57795");
14059 		else
14060 			goto nomatch;
14061 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) {
14062 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
14063 			strcpy(tp->board_part_number, "BCM57762");
14064 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
14065 			strcpy(tp->board_part_number, "BCM57766");
14066 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
14067 			strcpy(tp->board_part_number, "BCM57782");
14068 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14069 			strcpy(tp->board_part_number, "BCM57786");
14070 		else
14071 			goto nomatch;
14072 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14073 		strcpy(tp->board_part_number, "BCM95906");
14074 	} else {
14075 nomatch:
14076 		strcpy(tp->board_part_number, "none");
14077 	}
14078 }
14079 
14080 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
14081 {
14082 	u32 val;
14083 
14084 	if (tg3_nvram_read(tp, offset, &val) ||
14085 	    (val & 0xfc000000) != 0x0c000000 ||
14086 	    tg3_nvram_read(tp, offset + 4, &val) ||
14087 	    val != 0)
14088 		return 0;
14089 
14090 	return 1;
14091 }
14092 
14093 static void __devinit tg3_read_bc_ver(struct tg3 *tp)
14094 {
14095 	u32 val, offset, start, ver_offset;
14096 	int i, dst_off;
14097 	bool newver = false;
14098 
14099 	if (tg3_nvram_read(tp, 0xc, &offset) ||
14100 	    tg3_nvram_read(tp, 0x4, &start))
14101 		return;
14102 
14103 	offset = tg3_nvram_logical_addr(tp, offset);
14104 
14105 	if (tg3_nvram_read(tp, offset, &val))
14106 		return;
14107 
14108 	if ((val & 0xfc000000) == 0x0c000000) {
14109 		if (tg3_nvram_read(tp, offset + 4, &val))
14110 			return;
14111 
14112 		if (val == 0)
14113 			newver = true;
14114 	}
14115 
14116 	dst_off = strlen(tp->fw_ver);
14117 
14118 	if (newver) {
14119 		if (TG3_VER_SIZE - dst_off < 16 ||
14120 		    tg3_nvram_read(tp, offset + 8, &ver_offset))
14121 			return;
14122 
14123 		offset = offset + ver_offset - start;
14124 		for (i = 0; i < 16; i += 4) {
14125 			__be32 v;
14126 			if (tg3_nvram_read_be32(tp, offset + i, &v))
14127 				return;
14128 
14129 			memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
14130 		}
14131 	} else {
14132 		u32 major, minor;
14133 
14134 		if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
14135 			return;
14136 
14137 		major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
14138 			TG3_NVM_BCVER_MAJSFT;
14139 		minor = ver_offset & TG3_NVM_BCVER_MINMSK;
14140 		snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
14141 			 "v%d.%02d", major, minor);
14142 	}
14143 }
14144 
14145 static void __devinit tg3_read_hwsb_ver(struct tg3 *tp)
14146 {
14147 	u32 val, major, minor;
14148 
14149 	/* Use native endian representation */
14150 	if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
14151 		return;
14152 
14153 	major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
14154 		TG3_NVM_HWSB_CFG1_MAJSFT;
14155 	minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
14156 		TG3_NVM_HWSB_CFG1_MINSFT;
14157 
14158 	snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
14159 }
14160 
14161 static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val)
14162 {
14163 	u32 offset, major, minor, build;
14164 
14165 	strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
14166 
14167 	if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
14168 		return;
14169 
14170 	switch (val & TG3_EEPROM_SB_REVISION_MASK) {
14171 	case TG3_EEPROM_SB_REVISION_0:
14172 		offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
14173 		break;
14174 	case TG3_EEPROM_SB_REVISION_2:
14175 		offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
14176 		break;
14177 	case TG3_EEPROM_SB_REVISION_3:
14178 		offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
14179 		break;
14180 	case TG3_EEPROM_SB_REVISION_4:
14181 		offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
14182 		break;
14183 	case TG3_EEPROM_SB_REVISION_5:
14184 		offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
14185 		break;
14186 	case TG3_EEPROM_SB_REVISION_6:
14187 		offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
14188 		break;
14189 	default:
14190 		return;
14191 	}
14192 
14193 	if (tg3_nvram_read(tp, offset, &val))
14194 		return;
14195 
14196 	build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
14197 		TG3_EEPROM_SB_EDH_BLD_SHFT;
14198 	major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
14199 		TG3_EEPROM_SB_EDH_MAJ_SHFT;
14200 	minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
14201 
14202 	if (minor > 99 || build > 26)
14203 		return;
14204 
14205 	offset = strlen(tp->fw_ver);
14206 	snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
14207 		 " v%d.%02d", major, minor);
14208 
14209 	if (build > 0) {
14210 		offset = strlen(tp->fw_ver);
14211 		if (offset < TG3_VER_SIZE - 1)
14212 			tp->fw_ver[offset] = 'a' + build - 1;
14213 	}
14214 }
14215 
14216 static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp)
14217 {
14218 	u32 val, offset, start;
14219 	int i, vlen;
14220 
14221 	for (offset = TG3_NVM_DIR_START;
14222 	     offset < TG3_NVM_DIR_END;
14223 	     offset += TG3_NVM_DIRENT_SIZE) {
14224 		if (tg3_nvram_read(tp, offset, &val))
14225 			return;
14226 
14227 		if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
14228 			break;
14229 	}
14230 
14231 	if (offset == TG3_NVM_DIR_END)
14232 		return;
14233 
14234 	if (!tg3_flag(tp, 5705_PLUS))
14235 		start = 0x08000000;
14236 	else if (tg3_nvram_read(tp, offset - 4, &start))
14237 		return;
14238 
14239 	if (tg3_nvram_read(tp, offset + 4, &offset) ||
14240 	    !tg3_fw_img_is_valid(tp, offset) ||
14241 	    tg3_nvram_read(tp, offset + 8, &val))
14242 		return;
14243 
14244 	offset += val - start;
14245 
14246 	vlen = strlen(tp->fw_ver);
14247 
14248 	tp->fw_ver[vlen++] = ',';
14249 	tp->fw_ver[vlen++] = ' ';
14250 
14251 	for (i = 0; i < 4; i++) {
14252 		__be32 v;
14253 		if (tg3_nvram_read_be32(tp, offset, &v))
14254 			return;
14255 
14256 		offset += sizeof(v);
14257 
14258 		if (vlen > TG3_VER_SIZE - sizeof(v)) {
14259 			memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
14260 			break;
14261 		}
14262 
14263 		memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
14264 		vlen += sizeof(v);
14265 	}
14266 }
14267 
14268 static void __devinit tg3_probe_ncsi(struct tg3 *tp)
14269 {
14270 	u32 apedata;
14271 
14272 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
14273 	if (apedata != APE_SEG_SIG_MAGIC)
14274 		return;
14275 
14276 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
14277 	if (!(apedata & APE_FW_STATUS_READY))
14278 		return;
14279 
14280 	if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
14281 		tg3_flag_set(tp, APE_HAS_NCSI);
14282 }
14283 
14284 static void __devinit tg3_read_dash_ver(struct tg3 *tp)
14285 {
14286 	int vlen;
14287 	u32 apedata;
14288 	char *fwtype;
14289 
14290 	apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
14291 
14292 	if (tg3_flag(tp, APE_HAS_NCSI))
14293 		fwtype = "NCSI";
14294 	else
14295 		fwtype = "DASH";
14296 
14297 	vlen = strlen(tp->fw_ver);
14298 
14299 	snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
14300 		 fwtype,
14301 		 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
14302 		 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
14303 		 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
14304 		 (apedata & APE_FW_VERSION_BLDMSK));
14305 }
14306 
14307 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
14308 {
14309 	u32 val;
14310 	bool vpd_vers = false;
14311 
14312 	if (tp->fw_ver[0] != 0)
14313 		vpd_vers = true;
14314 
14315 	if (tg3_flag(tp, NO_NVRAM)) {
14316 		strcat(tp->fw_ver, "sb");
14317 		return;
14318 	}
14319 
14320 	if (tg3_nvram_read(tp, 0, &val))
14321 		return;
14322 
14323 	if (val == TG3_EEPROM_MAGIC)
14324 		tg3_read_bc_ver(tp);
14325 	else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
14326 		tg3_read_sb_ver(tp, val);
14327 	else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
14328 		tg3_read_hwsb_ver(tp);
14329 
14330 	if (tg3_flag(tp, ENABLE_ASF)) {
14331 		if (tg3_flag(tp, ENABLE_APE)) {
14332 			tg3_probe_ncsi(tp);
14333 			if (!vpd_vers)
14334 				tg3_read_dash_ver(tp);
14335 		} else if (!vpd_vers) {
14336 			tg3_read_mgmtfw_ver(tp);
14337 		}
14338 	}
14339 
14340 	tp->fw_ver[TG3_VER_SIZE - 1] = 0;
14341 }
14342 
14343 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
14344 {
14345 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
14346 		return TG3_RX_RET_MAX_SIZE_5717;
14347 	else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
14348 		return TG3_RX_RET_MAX_SIZE_5700;
14349 	else
14350 		return TG3_RX_RET_MAX_SIZE_5705;
14351 }
14352 
14353 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
14354 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
14355 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
14356 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
14357 	{ },
14358 };
14359 
14360 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
14361 {
14362 	struct pci_dev *peer;
14363 	unsigned int func, devnr = tp->pdev->devfn & ~7;
14364 
14365 	for (func = 0; func < 8; func++) {
14366 		peer = pci_get_slot(tp->pdev->bus, devnr | func);
14367 		if (peer && peer != tp->pdev)
14368 			break;
14369 		pci_dev_put(peer);
14370 	}
14371 	/* 5704 can be configured in single-port mode, set peer to
14372 	 * tp->pdev in that case.
14373 	 */
14374 	if (!peer) {
14375 		peer = tp->pdev;
14376 		return peer;
14377 	}
14378 
14379 	/*
14380 	 * We don't need to keep the refcount elevated; there's no way
14381 	 * to remove one half of this device without removing the other
14382 	 */
14383 	pci_dev_put(peer);
14384 
14385 	return peer;
14386 }
14387 
14388 static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
14389 {
14390 	tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
14391 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
14392 		u32 reg;
14393 
14394 		/* All devices that use the alternate
14395 		 * ASIC REV location have a CPMU.
14396 		 */
14397 		tg3_flag_set(tp, CPMU_PRESENT);
14398 
14399 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
14400 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
14401 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
14402 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720)
14403 			reg = TG3PCI_GEN2_PRODID_ASICREV;
14404 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
14405 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
14406 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
14407 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
14408 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
14409 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
14410 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
14411 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
14412 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
14413 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14414 			reg = TG3PCI_GEN15_PRODID_ASICREV;
14415 		else
14416 			reg = TG3PCI_PRODID_ASICREV;
14417 
14418 		pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
14419 	}
14420 
14421 	/* Wrong chip ID in 5752 A0. This code can be removed later
14422 	 * as A0 is not in production.
14423 	 */
14424 	if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
14425 		tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
14426 
14427 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14428 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14429 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14430 		tg3_flag_set(tp, 5717_PLUS);
14431 
14432 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 ||
14433 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
14434 		tg3_flag_set(tp, 57765_CLASS);
14435 
14436 	if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS))
14437 		tg3_flag_set(tp, 57765_PLUS);
14438 
14439 	/* Intentionally exclude ASIC_REV_5906 */
14440 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14441 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
14442 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14443 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14444 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14445 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14446 	    tg3_flag(tp, 57765_PLUS))
14447 		tg3_flag_set(tp, 5755_PLUS);
14448 
14449 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
14450 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14451 		tg3_flag_set(tp, 5780_CLASS);
14452 
14453 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
14454 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
14455 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
14456 	    tg3_flag(tp, 5755_PLUS) ||
14457 	    tg3_flag(tp, 5780_CLASS))
14458 		tg3_flag_set(tp, 5750_PLUS);
14459 
14460 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
14461 	    tg3_flag(tp, 5750_PLUS))
14462 		tg3_flag_set(tp, 5705_PLUS);
14463 }
14464 
14465 static int __devinit tg3_get_invariants(struct tg3 *tp)
14466 {
14467 	u32 misc_ctrl_reg;
14468 	u32 pci_state_reg, grc_misc_cfg;
14469 	u32 val;
14470 	u16 pci_cmd;
14471 	int err;
14472 
14473 	/* Force memory write invalidate off.  If we leave it on,
14474 	 * then on 5700_BX chips we have to enable a workaround.
14475 	 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
14476 	 * to match the cacheline size.  The Broadcom driver have this
14477 	 * workaround but turns MWI off all the times so never uses
14478 	 * it.  This seems to suggest that the workaround is insufficient.
14479 	 */
14480 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14481 	pci_cmd &= ~PCI_COMMAND_INVALIDATE;
14482 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14483 
14484 	/* Important! -- Make sure register accesses are byteswapped
14485 	 * correctly.  Also, for those chips that require it, make
14486 	 * sure that indirect register accesses are enabled before
14487 	 * the first operation.
14488 	 */
14489 	pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14490 			      &misc_ctrl_reg);
14491 	tp->misc_host_ctrl |= (misc_ctrl_reg &
14492 			       MISC_HOST_CTRL_CHIPREV);
14493 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14494 			       tp->misc_host_ctrl);
14495 
14496 	tg3_detect_asic_rev(tp, misc_ctrl_reg);
14497 
14498 	/* If we have 5702/03 A1 or A2 on certain ICH chipsets,
14499 	 * we need to disable memory and use config. cycles
14500 	 * only to access all registers. The 5702/03 chips
14501 	 * can mistakenly decode the special cycles from the
14502 	 * ICH chipsets as memory write cycles, causing corruption
14503 	 * of register and memory space. Only certain ICH bridges
14504 	 * will drive special cycles with non-zero data during the
14505 	 * address phase which can fall within the 5703's address
14506 	 * range. This is not an ICH bug as the PCI spec allows
14507 	 * non-zero address during special cycles. However, only
14508 	 * these ICH bridges are known to drive non-zero addresses
14509 	 * during special cycles.
14510 	 *
14511 	 * Since special cycles do not cross PCI bridges, we only
14512 	 * enable this workaround if the 5703 is on the secondary
14513 	 * bus of these ICH bridges.
14514 	 */
14515 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
14516 	    (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
14517 		static struct tg3_dev_id {
14518 			u32	vendor;
14519 			u32	device;
14520 			u32	rev;
14521 		} ich_chipsets[] = {
14522 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
14523 			  PCI_ANY_ID },
14524 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
14525 			  PCI_ANY_ID },
14526 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
14527 			  0xa },
14528 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
14529 			  PCI_ANY_ID },
14530 			{ },
14531 		};
14532 		struct tg3_dev_id *pci_id = &ich_chipsets[0];
14533 		struct pci_dev *bridge = NULL;
14534 
14535 		while (pci_id->vendor != 0) {
14536 			bridge = pci_get_device(pci_id->vendor, pci_id->device,
14537 						bridge);
14538 			if (!bridge) {
14539 				pci_id++;
14540 				continue;
14541 			}
14542 			if (pci_id->rev != PCI_ANY_ID) {
14543 				if (bridge->revision > pci_id->rev)
14544 					continue;
14545 			}
14546 			if (bridge->subordinate &&
14547 			    (bridge->subordinate->number ==
14548 			     tp->pdev->bus->number)) {
14549 				tg3_flag_set(tp, ICH_WORKAROUND);
14550 				pci_dev_put(bridge);
14551 				break;
14552 			}
14553 		}
14554 	}
14555 
14556 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
14557 		static struct tg3_dev_id {
14558 			u32	vendor;
14559 			u32	device;
14560 		} bridge_chipsets[] = {
14561 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
14562 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
14563 			{ },
14564 		};
14565 		struct tg3_dev_id *pci_id = &bridge_chipsets[0];
14566 		struct pci_dev *bridge = NULL;
14567 
14568 		while (pci_id->vendor != 0) {
14569 			bridge = pci_get_device(pci_id->vendor,
14570 						pci_id->device,
14571 						bridge);
14572 			if (!bridge) {
14573 				pci_id++;
14574 				continue;
14575 			}
14576 			if (bridge->subordinate &&
14577 			    (bridge->subordinate->number <=
14578 			     tp->pdev->bus->number) &&
14579 			    (bridge->subordinate->busn_res.end >=
14580 			     tp->pdev->bus->number)) {
14581 				tg3_flag_set(tp, 5701_DMA_BUG);
14582 				pci_dev_put(bridge);
14583 				break;
14584 			}
14585 		}
14586 	}
14587 
14588 	/* The EPB bridge inside 5714, 5715, and 5780 cannot support
14589 	 * DMA addresses > 40-bit. This bridge may have other additional
14590 	 * 57xx devices behind it in some 4-port NIC designs for example.
14591 	 * Any tg3 device found behind the bridge will also need the 40-bit
14592 	 * DMA workaround.
14593 	 */
14594 	if (tg3_flag(tp, 5780_CLASS)) {
14595 		tg3_flag_set(tp, 40BIT_DMA_BUG);
14596 		tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
14597 	} else {
14598 		struct pci_dev *bridge = NULL;
14599 
14600 		do {
14601 			bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
14602 						PCI_DEVICE_ID_SERVERWORKS_EPB,
14603 						bridge);
14604 			if (bridge && bridge->subordinate &&
14605 			    (bridge->subordinate->number <=
14606 			     tp->pdev->bus->number) &&
14607 			    (bridge->subordinate->busn_res.end >=
14608 			     tp->pdev->bus->number)) {
14609 				tg3_flag_set(tp, 40BIT_DMA_BUG);
14610 				pci_dev_put(bridge);
14611 				break;
14612 			}
14613 		} while (bridge);
14614 	}
14615 
14616 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14617 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14618 		tp->pdev_peer = tg3_find_peer(tp);
14619 
14620 	/* Determine TSO capabilities */
14621 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0)
14622 		; /* Do nothing. HW bug. */
14623 	else if (tg3_flag(tp, 57765_PLUS))
14624 		tg3_flag_set(tp, HW_TSO_3);
14625 	else if (tg3_flag(tp, 5755_PLUS) ||
14626 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14627 		tg3_flag_set(tp, HW_TSO_2);
14628 	else if (tg3_flag(tp, 5750_PLUS)) {
14629 		tg3_flag_set(tp, HW_TSO_1);
14630 		tg3_flag_set(tp, TSO_BUG);
14631 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 &&
14632 		    tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
14633 			tg3_flag_clear(tp, TSO_BUG);
14634 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14635 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
14636 		   tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
14637 			tg3_flag_set(tp, TSO_BUG);
14638 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
14639 			tp->fw_needed = FIRMWARE_TG3TSO5;
14640 		else
14641 			tp->fw_needed = FIRMWARE_TG3TSO;
14642 	}
14643 
14644 	/* Selectively allow TSO based on operating conditions */
14645 	if (tg3_flag(tp, HW_TSO_1) ||
14646 	    tg3_flag(tp, HW_TSO_2) ||
14647 	    tg3_flag(tp, HW_TSO_3) ||
14648 	    tp->fw_needed) {
14649 		/* For firmware TSO, assume ASF is disabled.
14650 		 * We'll disable TSO later if we discover ASF
14651 		 * is enabled in tg3_get_eeprom_hw_cfg().
14652 		 */
14653 		tg3_flag_set(tp, TSO_CAPABLE);
14654 	} else {
14655 		tg3_flag_clear(tp, TSO_CAPABLE);
14656 		tg3_flag_clear(tp, TSO_BUG);
14657 		tp->fw_needed = NULL;
14658 	}
14659 
14660 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
14661 		tp->fw_needed = FIRMWARE_TG3;
14662 
14663 	tp->irq_max = 1;
14664 
14665 	if (tg3_flag(tp, 5750_PLUS)) {
14666 		tg3_flag_set(tp, SUPPORT_MSI);
14667 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
14668 		    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
14669 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
14670 		     tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
14671 		     tp->pdev_peer == tp->pdev))
14672 			tg3_flag_clear(tp, SUPPORT_MSI);
14673 
14674 		if (tg3_flag(tp, 5755_PLUS) ||
14675 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14676 			tg3_flag_set(tp, 1SHOT_MSI);
14677 		}
14678 
14679 		if (tg3_flag(tp, 57765_PLUS)) {
14680 			tg3_flag_set(tp, SUPPORT_MSIX);
14681 			tp->irq_max = TG3_IRQ_MAX_VECS;
14682 		}
14683 	}
14684 
14685 	tp->txq_max = 1;
14686 	tp->rxq_max = 1;
14687 	if (tp->irq_max > 1) {
14688 		tp->rxq_max = TG3_RSS_MAX_NUM_QS;
14689 		tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
14690 
14691 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14692 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14693 			tp->txq_max = tp->irq_max - 1;
14694 	}
14695 
14696 	if (tg3_flag(tp, 5755_PLUS) ||
14697 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14698 		tg3_flag_set(tp, SHORT_DMA_BUG);
14699 
14700 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
14701 		tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
14702 
14703 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14704 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14705 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14706 		tg3_flag_set(tp, LRG_PROD_RING_CAP);
14707 
14708 	if (tg3_flag(tp, 57765_PLUS) &&
14709 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0)
14710 		tg3_flag_set(tp, USE_JUMBO_BDFLAG);
14711 
14712 	if (!tg3_flag(tp, 5705_PLUS) ||
14713 	    tg3_flag(tp, 5780_CLASS) ||
14714 	    tg3_flag(tp, USE_JUMBO_BDFLAG))
14715 		tg3_flag_set(tp, JUMBO_CAPABLE);
14716 
14717 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14718 			      &pci_state_reg);
14719 
14720 	if (pci_is_pcie(tp->pdev)) {
14721 		u16 lnkctl;
14722 
14723 		tg3_flag_set(tp, PCI_EXPRESS);
14724 
14725 		pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
14726 		if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
14727 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
14728 			    ASIC_REV_5906) {
14729 				tg3_flag_clear(tp, HW_TSO_2);
14730 				tg3_flag_clear(tp, TSO_CAPABLE);
14731 			}
14732 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14733 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14734 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 ||
14735 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A1)
14736 				tg3_flag_set(tp, CLKREQ_BUG);
14737 		} else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) {
14738 			tg3_flag_set(tp, L1PLLPD_EN);
14739 		}
14740 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
14741 		/* BCM5785 devices are effectively PCIe devices, and should
14742 		 * follow PCIe codepaths, but do not have a PCIe capabilities
14743 		 * section.
14744 		 */
14745 		tg3_flag_set(tp, PCI_EXPRESS);
14746 	} else if (!tg3_flag(tp, 5705_PLUS) ||
14747 		   tg3_flag(tp, 5780_CLASS)) {
14748 		tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
14749 		if (!tp->pcix_cap) {
14750 			dev_err(&tp->pdev->dev,
14751 				"Cannot find PCI-X capability, aborting\n");
14752 			return -EIO;
14753 		}
14754 
14755 		if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
14756 			tg3_flag_set(tp, PCIX_MODE);
14757 	}
14758 
14759 	/* If we have an AMD 762 or VIA K8T800 chipset, write
14760 	 * reordering to the mailbox registers done by the host
14761 	 * controller can cause major troubles.  We read back from
14762 	 * every mailbox register write to force the writes to be
14763 	 * posted to the chip in order.
14764 	 */
14765 	if (pci_dev_present(tg3_write_reorder_chipsets) &&
14766 	    !tg3_flag(tp, PCI_EXPRESS))
14767 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
14768 
14769 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
14770 			     &tp->pci_cacheline_sz);
14771 	pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14772 			     &tp->pci_lat_timer);
14773 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14774 	    tp->pci_lat_timer < 64) {
14775 		tp->pci_lat_timer = 64;
14776 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14777 				      tp->pci_lat_timer);
14778 	}
14779 
14780 	/* Important! -- It is critical that the PCI-X hw workaround
14781 	 * situation is decided before the first MMIO register access.
14782 	 */
14783 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
14784 		/* 5700 BX chips need to have their TX producer index
14785 		 * mailboxes written twice to workaround a bug.
14786 		 */
14787 		tg3_flag_set(tp, TXD_MBOX_HWBUG);
14788 
14789 		/* If we are in PCI-X mode, enable register write workaround.
14790 		 *
14791 		 * The workaround is to use indirect register accesses
14792 		 * for all chip writes not to mailbox registers.
14793 		 */
14794 		if (tg3_flag(tp, PCIX_MODE)) {
14795 			u32 pm_reg;
14796 
14797 			tg3_flag_set(tp, PCIX_TARGET_HWBUG);
14798 
14799 			/* The chip can have it's power management PCI config
14800 			 * space registers clobbered due to this bug.
14801 			 * So explicitly force the chip into D0 here.
14802 			 */
14803 			pci_read_config_dword(tp->pdev,
14804 					      tp->pm_cap + PCI_PM_CTRL,
14805 					      &pm_reg);
14806 			pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
14807 			pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
14808 			pci_write_config_dword(tp->pdev,
14809 					       tp->pm_cap + PCI_PM_CTRL,
14810 					       pm_reg);
14811 
14812 			/* Also, force SERR#/PERR# in PCI command. */
14813 			pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14814 			pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
14815 			pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14816 		}
14817 	}
14818 
14819 	if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
14820 		tg3_flag_set(tp, PCI_HIGH_SPEED);
14821 	if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
14822 		tg3_flag_set(tp, PCI_32BIT);
14823 
14824 	/* Chip-specific fixup from Broadcom driver */
14825 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
14826 	    (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
14827 		pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
14828 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
14829 	}
14830 
14831 	/* Default fast path register access methods */
14832 	tp->read32 = tg3_read32;
14833 	tp->write32 = tg3_write32;
14834 	tp->read32_mbox = tg3_read32;
14835 	tp->write32_mbox = tg3_write32;
14836 	tp->write32_tx_mbox = tg3_write32;
14837 	tp->write32_rx_mbox = tg3_write32;
14838 
14839 	/* Various workaround register access methods */
14840 	if (tg3_flag(tp, PCIX_TARGET_HWBUG))
14841 		tp->write32 = tg3_write_indirect_reg32;
14842 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
14843 		 (tg3_flag(tp, PCI_EXPRESS) &&
14844 		  tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
14845 		/*
14846 		 * Back to back register writes can cause problems on these
14847 		 * chips, the workaround is to read back all reg writes
14848 		 * except those to mailbox regs.
14849 		 *
14850 		 * See tg3_write_indirect_reg32().
14851 		 */
14852 		tp->write32 = tg3_write_flush_reg32;
14853 	}
14854 
14855 	if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
14856 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
14857 		if (tg3_flag(tp, MBOX_WRITE_REORDER))
14858 			tp->write32_rx_mbox = tg3_write_flush_reg32;
14859 	}
14860 
14861 	if (tg3_flag(tp, ICH_WORKAROUND)) {
14862 		tp->read32 = tg3_read_indirect_reg32;
14863 		tp->write32 = tg3_write_indirect_reg32;
14864 		tp->read32_mbox = tg3_read_indirect_mbox;
14865 		tp->write32_mbox = tg3_write_indirect_mbox;
14866 		tp->write32_tx_mbox = tg3_write_indirect_mbox;
14867 		tp->write32_rx_mbox = tg3_write_indirect_mbox;
14868 
14869 		iounmap(tp->regs);
14870 		tp->regs = NULL;
14871 
14872 		pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14873 		pci_cmd &= ~PCI_COMMAND_MEMORY;
14874 		pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14875 	}
14876 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14877 		tp->read32_mbox = tg3_read32_mbox_5906;
14878 		tp->write32_mbox = tg3_write32_mbox_5906;
14879 		tp->write32_tx_mbox = tg3_write32_mbox_5906;
14880 		tp->write32_rx_mbox = tg3_write32_mbox_5906;
14881 	}
14882 
14883 	if (tp->write32 == tg3_write_indirect_reg32 ||
14884 	    (tg3_flag(tp, PCIX_MODE) &&
14885 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14886 	      GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
14887 		tg3_flag_set(tp, SRAM_USE_CONFIG);
14888 
14889 	/* The memory arbiter has to be enabled in order for SRAM accesses
14890 	 * to succeed.  Normally on powerup the tg3 chip firmware will make
14891 	 * sure it is enabled, but other entities such as system netboot
14892 	 * code might disable it.
14893 	 */
14894 	val = tr32(MEMARB_MODE);
14895 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
14896 
14897 	tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
14898 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14899 	    tg3_flag(tp, 5780_CLASS)) {
14900 		if (tg3_flag(tp, PCIX_MODE)) {
14901 			pci_read_config_dword(tp->pdev,
14902 					      tp->pcix_cap + PCI_X_STATUS,
14903 					      &val);
14904 			tp->pci_fn = val & 0x7;
14905 		}
14906 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
14907 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14908 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14909 		    NIC_SRAM_CPMUSTAT_SIG) {
14910 			tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717;
14911 			tp->pci_fn = tp->pci_fn ? 1 : 0;
14912 		}
14913 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14914 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
14915 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14916 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14917 		    NIC_SRAM_CPMUSTAT_SIG) {
14918 			tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
14919 				     TG3_CPMU_STATUS_FSHFT_5719;
14920 		}
14921 	}
14922 
14923 	/* Get eeprom hw config before calling tg3_set_power_state().
14924 	 * In particular, the TG3_FLAG_IS_NIC flag must be
14925 	 * determined before calling tg3_set_power_state() so that
14926 	 * we know whether or not to switch out of Vaux power.
14927 	 * When the flag is set, it means that GPIO1 is used for eeprom
14928 	 * write protect and also implies that it is a LOM where GPIOs
14929 	 * are not used to switch power.
14930 	 */
14931 	tg3_get_eeprom_hw_cfg(tp);
14932 
14933 	if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) {
14934 		tg3_flag_clear(tp, TSO_CAPABLE);
14935 		tg3_flag_clear(tp, TSO_BUG);
14936 		tp->fw_needed = NULL;
14937 	}
14938 
14939 	if (tg3_flag(tp, ENABLE_APE)) {
14940 		/* Allow reads and writes to the
14941 		 * APE register and memory space.
14942 		 */
14943 		pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
14944 				 PCISTATE_ALLOW_APE_SHMEM_WR |
14945 				 PCISTATE_ALLOW_APE_PSPACE_WR;
14946 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
14947 				       pci_state_reg);
14948 
14949 		tg3_ape_lock_init(tp);
14950 	}
14951 
14952 	/* Set up tp->grc_local_ctrl before calling
14953 	 * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
14954 	 * will bring 5700's external PHY out of reset.
14955 	 * It is also used as eeprom write protect on LOMs.
14956 	 */
14957 	tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
14958 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14959 	    tg3_flag(tp, EEPROM_WRITE_PROT))
14960 		tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
14961 				       GRC_LCLCTRL_GPIO_OUTPUT1);
14962 	/* Unused GPIO3 must be driven as output on 5752 because there
14963 	 * are no pull-up resistors on unused GPIO pins.
14964 	 */
14965 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
14966 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
14967 
14968 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14969 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14970 	    tg3_flag(tp, 57765_CLASS))
14971 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14972 
14973 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
14974 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
14975 		/* Turn off the debug UART. */
14976 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14977 		if (tg3_flag(tp, IS_NIC))
14978 			/* Keep VMain power. */
14979 			tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
14980 					      GRC_LCLCTRL_GPIO_OUTPUT0;
14981 	}
14982 
14983 	/* Switch out of Vaux if it is a NIC */
14984 	tg3_pwrsrc_switch_to_vmain(tp);
14985 
14986 	/* Derive initial jumbo mode from MTU assigned in
14987 	 * ether_setup() via the alloc_etherdev() call
14988 	 */
14989 	if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
14990 		tg3_flag_set(tp, JUMBO_RING_ENABLE);
14991 
14992 	/* Determine WakeOnLan speed to use. */
14993 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14994 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
14995 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
14996 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
14997 		tg3_flag_clear(tp, WOL_SPEED_100MB);
14998 	} else {
14999 		tg3_flag_set(tp, WOL_SPEED_100MB);
15000 	}
15001 
15002 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15003 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
15004 
15005 	/* A few boards don't want Ethernet@WireSpeed phy feature */
15006 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15007 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
15008 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
15009 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
15010 	    (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
15011 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15012 		tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
15013 
15014 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
15015 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
15016 		tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
15017 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
15018 		tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
15019 
15020 	if (tg3_flag(tp, 5705_PLUS) &&
15021 	    !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
15022 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
15023 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 &&
15024 	    !tg3_flag(tp, 57765_PLUS)) {
15025 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
15026 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
15027 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
15028 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
15029 			if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
15030 			    tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
15031 				tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
15032 			if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
15033 				tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
15034 		} else
15035 			tp->phy_flags |= TG3_PHYFLG_BER_BUG;
15036 	}
15037 
15038 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
15039 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
15040 		tp->phy_otp = tg3_read_otp_phycfg(tp);
15041 		if (tp->phy_otp == 0)
15042 			tp->phy_otp = TG3_OTP_DEFAULT;
15043 	}
15044 
15045 	if (tg3_flag(tp, CPMU_PRESENT))
15046 		tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
15047 	else
15048 		tp->mi_mode = MAC_MI_MODE_BASE;
15049 
15050 	tp->coalesce_mode = 0;
15051 	if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
15052 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
15053 		tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
15054 
15055 	/* Set these bits to enable statistics workaround. */
15056 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
15057 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
15058 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) {
15059 		tp->coalesce_mode |= HOSTCC_MODE_ATTN;
15060 		tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
15061 	}
15062 
15063 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
15064 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
15065 		tg3_flag_set(tp, USE_PHYLIB);
15066 
15067 	err = tg3_mdio_init(tp);
15068 	if (err)
15069 		return err;
15070 
15071 	/* Initialize data/descriptor byte/word swapping. */
15072 	val = tr32(GRC_MODE);
15073 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
15074 		val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
15075 			GRC_MODE_WORD_SWAP_B2HRX_DATA |
15076 			GRC_MODE_B2HRX_ENABLE |
15077 			GRC_MODE_HTX2B_ENABLE |
15078 			GRC_MODE_HOST_STACKUP);
15079 	else
15080 		val &= GRC_MODE_HOST_STACKUP;
15081 
15082 	tw32(GRC_MODE, val | tp->grc_mode);
15083 
15084 	tg3_switch_clocks(tp);
15085 
15086 	/* Clear this out for sanity. */
15087 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
15088 
15089 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
15090 			      &pci_state_reg);
15091 	if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
15092 	    !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
15093 		u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
15094 
15095 		if (chiprevid == CHIPREV_ID_5701_A0 ||
15096 		    chiprevid == CHIPREV_ID_5701_B0 ||
15097 		    chiprevid == CHIPREV_ID_5701_B2 ||
15098 		    chiprevid == CHIPREV_ID_5701_B5) {
15099 			void __iomem *sram_base;
15100 
15101 			/* Write some dummy words into the SRAM status block
15102 			 * area, see if it reads back correctly.  If the return
15103 			 * value is bad, force enable the PCIX workaround.
15104 			 */
15105 			sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
15106 
15107 			writel(0x00000000, sram_base);
15108 			writel(0x00000000, sram_base + 4);
15109 			writel(0xffffffff, sram_base + 4);
15110 			if (readl(sram_base) != 0x00000000)
15111 				tg3_flag_set(tp, PCIX_TARGET_HWBUG);
15112 		}
15113 	}
15114 
15115 	udelay(50);
15116 	tg3_nvram_init(tp);
15117 
15118 	grc_misc_cfg = tr32(GRC_MISC_CFG);
15119 	grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
15120 
15121 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
15122 	    (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
15123 	     grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
15124 		tg3_flag_set(tp, IS_5788);
15125 
15126 	if (!tg3_flag(tp, IS_5788) &&
15127 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
15128 		tg3_flag_set(tp, TAGGED_STATUS);
15129 	if (tg3_flag(tp, TAGGED_STATUS)) {
15130 		tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
15131 				      HOSTCC_MODE_CLRTICK_TXBD);
15132 
15133 		tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
15134 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
15135 				       tp->misc_host_ctrl);
15136 	}
15137 
15138 	/* Preserve the APE MAC_MODE bits */
15139 	if (tg3_flag(tp, ENABLE_APE))
15140 		tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
15141 	else
15142 		tp->mac_mode = 0;
15143 
15144 	/* these are limited to 10/100 only */
15145 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
15146 	     (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
15147 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
15148 	     tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
15149 	     (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
15150 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
15151 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
15152 	    (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
15153 	     (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
15154 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
15155 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
15156 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 ||
15157 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
15158 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
15159 	    (tp->phy_flags & TG3_PHYFLG_IS_FET))
15160 		tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
15161 
15162 	err = tg3_phy_probe(tp);
15163 	if (err) {
15164 		dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
15165 		/* ... but do not return immediately ... */
15166 		tg3_mdio_fini(tp);
15167 	}
15168 
15169 	tg3_read_vpd(tp);
15170 	tg3_read_fw_ver(tp);
15171 
15172 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
15173 		tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
15174 	} else {
15175 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
15176 			tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
15177 		else
15178 			tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
15179 	}
15180 
15181 	/* 5700 {AX,BX} chips have a broken status block link
15182 	 * change bit implementation, so we must use the
15183 	 * status register in those cases.
15184 	 */
15185 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
15186 		tg3_flag_set(tp, USE_LINKCHG_REG);
15187 	else
15188 		tg3_flag_clear(tp, USE_LINKCHG_REG);
15189 
15190 	/* The led_ctrl is set during tg3_phy_probe, here we might
15191 	 * have to force the link status polling mechanism based
15192 	 * upon subsystem IDs.
15193 	 */
15194 	if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
15195 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
15196 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
15197 		tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
15198 		tg3_flag_set(tp, USE_LINKCHG_REG);
15199 	}
15200 
15201 	/* For all SERDES we poll the MAC status register. */
15202 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
15203 		tg3_flag_set(tp, POLL_SERDES);
15204 	else
15205 		tg3_flag_clear(tp, POLL_SERDES);
15206 
15207 	tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
15208 	tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
15209 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
15210 	    tg3_flag(tp, PCIX_MODE)) {
15211 		tp->rx_offset = NET_SKB_PAD;
15212 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
15213 		tp->rx_copy_thresh = ~(u16)0;
15214 #endif
15215 	}
15216 
15217 	tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
15218 	tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
15219 	tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
15220 
15221 	tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
15222 
15223 	/* Increment the rx prod index on the rx std ring by at most
15224 	 * 8 for these chips to workaround hw errata.
15225 	 */
15226 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
15227 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
15228 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
15229 		tp->rx_std_max_post = 8;
15230 
15231 	if (tg3_flag(tp, ASPM_WORKAROUND))
15232 		tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
15233 				     PCIE_PWR_MGMT_L1_THRESH_MSK;
15234 
15235 	return err;
15236 }
15237 
15238 #ifdef CONFIG_SPARC
15239 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
15240 {
15241 	struct net_device *dev = tp->dev;
15242 	struct pci_dev *pdev = tp->pdev;
15243 	struct device_node *dp = pci_device_to_OF_node(pdev);
15244 	const unsigned char *addr;
15245 	int len;
15246 
15247 	addr = of_get_property(dp, "local-mac-address", &len);
15248 	if (addr && len == 6) {
15249 		memcpy(dev->dev_addr, addr, 6);
15250 		memcpy(dev->perm_addr, dev->dev_addr, 6);
15251 		return 0;
15252 	}
15253 	return -ENODEV;
15254 }
15255 
15256 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
15257 {
15258 	struct net_device *dev = tp->dev;
15259 
15260 	memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
15261 	memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
15262 	return 0;
15263 }
15264 #endif
15265 
15266 static int __devinit tg3_get_device_address(struct tg3 *tp)
15267 {
15268 	struct net_device *dev = tp->dev;
15269 	u32 hi, lo, mac_offset;
15270 	int addr_ok = 0;
15271 
15272 #ifdef CONFIG_SPARC
15273 	if (!tg3_get_macaddr_sparc(tp))
15274 		return 0;
15275 #endif
15276 
15277 	mac_offset = 0x7c;
15278 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
15279 	    tg3_flag(tp, 5780_CLASS)) {
15280 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
15281 			mac_offset = 0xcc;
15282 		if (tg3_nvram_lock(tp))
15283 			tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
15284 		else
15285 			tg3_nvram_unlock(tp);
15286 	} else if (tg3_flag(tp, 5717_PLUS)) {
15287 		if (tp->pci_fn & 1)
15288 			mac_offset = 0xcc;
15289 		if (tp->pci_fn > 1)
15290 			mac_offset += 0x18c;
15291 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15292 		mac_offset = 0x10;
15293 
15294 	/* First try to get it from MAC address mailbox. */
15295 	tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
15296 	if ((hi >> 16) == 0x484b) {
15297 		dev->dev_addr[0] = (hi >>  8) & 0xff;
15298 		dev->dev_addr[1] = (hi >>  0) & 0xff;
15299 
15300 		tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
15301 		dev->dev_addr[2] = (lo >> 24) & 0xff;
15302 		dev->dev_addr[3] = (lo >> 16) & 0xff;
15303 		dev->dev_addr[4] = (lo >>  8) & 0xff;
15304 		dev->dev_addr[5] = (lo >>  0) & 0xff;
15305 
15306 		/* Some old bootcode may report a 0 MAC address in SRAM */
15307 		addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
15308 	}
15309 	if (!addr_ok) {
15310 		/* Next, try NVRAM. */
15311 		if (!tg3_flag(tp, NO_NVRAM) &&
15312 		    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
15313 		    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
15314 			memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
15315 			memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
15316 		}
15317 		/* Finally just fetch it out of the MAC control regs. */
15318 		else {
15319 			hi = tr32(MAC_ADDR_0_HIGH);
15320 			lo = tr32(MAC_ADDR_0_LOW);
15321 
15322 			dev->dev_addr[5] = lo & 0xff;
15323 			dev->dev_addr[4] = (lo >> 8) & 0xff;
15324 			dev->dev_addr[3] = (lo >> 16) & 0xff;
15325 			dev->dev_addr[2] = (lo >> 24) & 0xff;
15326 			dev->dev_addr[1] = hi & 0xff;
15327 			dev->dev_addr[0] = (hi >> 8) & 0xff;
15328 		}
15329 	}
15330 
15331 	if (!is_valid_ether_addr(&dev->dev_addr[0])) {
15332 #ifdef CONFIG_SPARC
15333 		if (!tg3_get_default_macaddr_sparc(tp))
15334 			return 0;
15335 #endif
15336 		return -EINVAL;
15337 	}
15338 	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
15339 	return 0;
15340 }
15341 
15342 #define BOUNDARY_SINGLE_CACHELINE	1
15343 #define BOUNDARY_MULTI_CACHELINE	2
15344 
15345 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
15346 {
15347 	int cacheline_size;
15348 	u8 byte;
15349 	int goal;
15350 
15351 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
15352 	if (byte == 0)
15353 		cacheline_size = 1024;
15354 	else
15355 		cacheline_size = (int) byte * 4;
15356 
15357 	/* On 5703 and later chips, the boundary bits have no
15358 	 * effect.
15359 	 */
15360 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15361 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
15362 	    !tg3_flag(tp, PCI_EXPRESS))
15363 		goto out;
15364 
15365 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
15366 	goal = BOUNDARY_MULTI_CACHELINE;
15367 #else
15368 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
15369 	goal = BOUNDARY_SINGLE_CACHELINE;
15370 #else
15371 	goal = 0;
15372 #endif
15373 #endif
15374 
15375 	if (tg3_flag(tp, 57765_PLUS)) {
15376 		val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
15377 		goto out;
15378 	}
15379 
15380 	if (!goal)
15381 		goto out;
15382 
15383 	/* PCI controllers on most RISC systems tend to disconnect
15384 	 * when a device tries to burst across a cache-line boundary.
15385 	 * Therefore, letting tg3 do so just wastes PCI bandwidth.
15386 	 *
15387 	 * Unfortunately, for PCI-E there are only limited
15388 	 * write-side controls for this, and thus for reads
15389 	 * we will still get the disconnects.  We'll also waste
15390 	 * these PCI cycles for both read and write for chips
15391 	 * other than 5700 and 5701 which do not implement the
15392 	 * boundary bits.
15393 	 */
15394 	if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
15395 		switch (cacheline_size) {
15396 		case 16:
15397 		case 32:
15398 		case 64:
15399 		case 128:
15400 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15401 				val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
15402 					DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
15403 			} else {
15404 				val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
15405 					DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
15406 			}
15407 			break;
15408 
15409 		case 256:
15410 			val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
15411 				DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
15412 			break;
15413 
15414 		default:
15415 			val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
15416 				DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
15417 			break;
15418 		}
15419 	} else if (tg3_flag(tp, PCI_EXPRESS)) {
15420 		switch (cacheline_size) {
15421 		case 16:
15422 		case 32:
15423 		case 64:
15424 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15425 				val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
15426 				val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
15427 				break;
15428 			}
15429 			/* fallthrough */
15430 		case 128:
15431 		default:
15432 			val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
15433 			val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
15434 			break;
15435 		}
15436 	} else {
15437 		switch (cacheline_size) {
15438 		case 16:
15439 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15440 				val |= (DMA_RWCTRL_READ_BNDRY_16 |
15441 					DMA_RWCTRL_WRITE_BNDRY_16);
15442 				break;
15443 			}
15444 			/* fallthrough */
15445 		case 32:
15446 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15447 				val |= (DMA_RWCTRL_READ_BNDRY_32 |
15448 					DMA_RWCTRL_WRITE_BNDRY_32);
15449 				break;
15450 			}
15451 			/* fallthrough */
15452 		case 64:
15453 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15454 				val |= (DMA_RWCTRL_READ_BNDRY_64 |
15455 					DMA_RWCTRL_WRITE_BNDRY_64);
15456 				break;
15457 			}
15458 			/* fallthrough */
15459 		case 128:
15460 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15461 				val |= (DMA_RWCTRL_READ_BNDRY_128 |
15462 					DMA_RWCTRL_WRITE_BNDRY_128);
15463 				break;
15464 			}
15465 			/* fallthrough */
15466 		case 256:
15467 			val |= (DMA_RWCTRL_READ_BNDRY_256 |
15468 				DMA_RWCTRL_WRITE_BNDRY_256);
15469 			break;
15470 		case 512:
15471 			val |= (DMA_RWCTRL_READ_BNDRY_512 |
15472 				DMA_RWCTRL_WRITE_BNDRY_512);
15473 			break;
15474 		case 1024:
15475 		default:
15476 			val |= (DMA_RWCTRL_READ_BNDRY_1024 |
15477 				DMA_RWCTRL_WRITE_BNDRY_1024);
15478 			break;
15479 		}
15480 	}
15481 
15482 out:
15483 	return val;
15484 }
15485 
15486 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
15487 {
15488 	struct tg3_internal_buffer_desc test_desc;
15489 	u32 sram_dma_descs;
15490 	int i, ret;
15491 
15492 	sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
15493 
15494 	tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
15495 	tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
15496 	tw32(RDMAC_STATUS, 0);
15497 	tw32(WDMAC_STATUS, 0);
15498 
15499 	tw32(BUFMGR_MODE, 0);
15500 	tw32(FTQ_RESET, 0);
15501 
15502 	test_desc.addr_hi = ((u64) buf_dma) >> 32;
15503 	test_desc.addr_lo = buf_dma & 0xffffffff;
15504 	test_desc.nic_mbuf = 0x00002100;
15505 	test_desc.len = size;
15506 
15507 	/*
15508 	 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
15509 	 * the *second* time the tg3 driver was getting loaded after an
15510 	 * initial scan.
15511 	 *
15512 	 * Broadcom tells me:
15513 	 *   ...the DMA engine is connected to the GRC block and a DMA
15514 	 *   reset may affect the GRC block in some unpredictable way...
15515 	 *   The behavior of resets to individual blocks has not been tested.
15516 	 *
15517 	 * Broadcom noted the GRC reset will also reset all sub-components.
15518 	 */
15519 	if (to_device) {
15520 		test_desc.cqid_sqid = (13 << 8) | 2;
15521 
15522 		tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
15523 		udelay(40);
15524 	} else {
15525 		test_desc.cqid_sqid = (16 << 8) | 7;
15526 
15527 		tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
15528 		udelay(40);
15529 	}
15530 	test_desc.flags = 0x00000005;
15531 
15532 	for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
15533 		u32 val;
15534 
15535 		val = *(((u32 *)&test_desc) + i);
15536 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
15537 				       sram_dma_descs + (i * sizeof(u32)));
15538 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
15539 	}
15540 	pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
15541 
15542 	if (to_device)
15543 		tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
15544 	else
15545 		tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
15546 
15547 	ret = -ENODEV;
15548 	for (i = 0; i < 40; i++) {
15549 		u32 val;
15550 
15551 		if (to_device)
15552 			val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
15553 		else
15554 			val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
15555 		if ((val & 0xffff) == sram_dma_descs) {
15556 			ret = 0;
15557 			break;
15558 		}
15559 
15560 		udelay(100);
15561 	}
15562 
15563 	return ret;
15564 }
15565 
15566 #define TEST_BUFFER_SIZE	0x2000
15567 
15568 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
15569 	{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
15570 	{ },
15571 };
15572 
15573 static int __devinit tg3_test_dma(struct tg3 *tp)
15574 {
15575 	dma_addr_t buf_dma;
15576 	u32 *buf, saved_dma_rwctrl;
15577 	int ret = 0;
15578 
15579 	buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
15580 				 &buf_dma, GFP_KERNEL);
15581 	if (!buf) {
15582 		ret = -ENOMEM;
15583 		goto out_nofree;
15584 	}
15585 
15586 	tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
15587 			  (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
15588 
15589 	tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
15590 
15591 	if (tg3_flag(tp, 57765_PLUS))
15592 		goto out;
15593 
15594 	if (tg3_flag(tp, PCI_EXPRESS)) {
15595 		/* DMA read watermark not used on PCIE */
15596 		tp->dma_rwctrl |= 0x00180000;
15597 	} else if (!tg3_flag(tp, PCIX_MODE)) {
15598 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
15599 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
15600 			tp->dma_rwctrl |= 0x003f0000;
15601 		else
15602 			tp->dma_rwctrl |= 0x003f000f;
15603 	} else {
15604 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
15605 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
15606 			u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
15607 			u32 read_water = 0x7;
15608 
15609 			/* If the 5704 is behind the EPB bridge, we can
15610 			 * do the less restrictive ONE_DMA workaround for
15611 			 * better performance.
15612 			 */
15613 			if (tg3_flag(tp, 40BIT_DMA_BUG) &&
15614 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
15615 				tp->dma_rwctrl |= 0x8000;
15616 			else if (ccval == 0x6 || ccval == 0x7)
15617 				tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
15618 
15619 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
15620 				read_water = 4;
15621 			/* Set bit 23 to enable PCIX hw bug fix */
15622 			tp->dma_rwctrl |=
15623 				(read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
15624 				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
15625 				(1 << 23);
15626 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
15627 			/* 5780 always in PCIX mode */
15628 			tp->dma_rwctrl |= 0x00144000;
15629 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
15630 			/* 5714 always in PCIX mode */
15631 			tp->dma_rwctrl |= 0x00148000;
15632 		} else {
15633 			tp->dma_rwctrl |= 0x001b000f;
15634 		}
15635 	}
15636 
15637 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
15638 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
15639 		tp->dma_rwctrl &= 0xfffffff0;
15640 
15641 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15642 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
15643 		/* Remove this if it causes problems for some boards. */
15644 		tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
15645 
15646 		/* On 5700/5701 chips, we need to set this bit.
15647 		 * Otherwise the chip will issue cacheline transactions
15648 		 * to streamable DMA memory with not all the byte
15649 		 * enables turned on.  This is an error on several
15650 		 * RISC PCI controllers, in particular sparc64.
15651 		 *
15652 		 * On 5703/5704 chips, this bit has been reassigned
15653 		 * a different meaning.  In particular, it is used
15654 		 * on those chips to enable a PCI-X workaround.
15655 		 */
15656 		tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
15657 	}
15658 
15659 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15660 
15661 #if 0
15662 	/* Unneeded, already done by tg3_get_invariants.  */
15663 	tg3_switch_clocks(tp);
15664 #endif
15665 
15666 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15667 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
15668 		goto out;
15669 
15670 	/* It is best to perform DMA test with maximum write burst size
15671 	 * to expose the 5700/5701 write DMA bug.
15672 	 */
15673 	saved_dma_rwctrl = tp->dma_rwctrl;
15674 	tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15675 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15676 
15677 	while (1) {
15678 		u32 *p = buf, i;
15679 
15680 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
15681 			p[i] = i;
15682 
15683 		/* Send the buffer to the chip. */
15684 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
15685 		if (ret) {
15686 			dev_err(&tp->pdev->dev,
15687 				"%s: Buffer write failed. err = %d\n",
15688 				__func__, ret);
15689 			break;
15690 		}
15691 
15692 #if 0
15693 		/* validate data reached card RAM correctly. */
15694 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15695 			u32 val;
15696 			tg3_read_mem(tp, 0x2100 + (i*4), &val);
15697 			if (le32_to_cpu(val) != p[i]) {
15698 				dev_err(&tp->pdev->dev,
15699 					"%s: Buffer corrupted on device! "
15700 					"(%d != %d)\n", __func__, val, i);
15701 				/* ret = -ENODEV here? */
15702 			}
15703 			p[i] = 0;
15704 		}
15705 #endif
15706 		/* Now read it back. */
15707 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
15708 		if (ret) {
15709 			dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
15710 				"err = %d\n", __func__, ret);
15711 			break;
15712 		}
15713 
15714 		/* Verify it. */
15715 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15716 			if (p[i] == i)
15717 				continue;
15718 
15719 			if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15720 			    DMA_RWCTRL_WRITE_BNDRY_16) {
15721 				tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15722 				tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15723 				tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15724 				break;
15725 			} else {
15726 				dev_err(&tp->pdev->dev,
15727 					"%s: Buffer corrupted on read back! "
15728 					"(%d != %d)\n", __func__, p[i], i);
15729 				ret = -ENODEV;
15730 				goto out;
15731 			}
15732 		}
15733 
15734 		if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
15735 			/* Success. */
15736 			ret = 0;
15737 			break;
15738 		}
15739 	}
15740 	if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15741 	    DMA_RWCTRL_WRITE_BNDRY_16) {
15742 		/* DMA test passed without adjusting DMA boundary,
15743 		 * now look for chipsets that are known to expose the
15744 		 * DMA bug without failing the test.
15745 		 */
15746 		if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
15747 			tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15748 			tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15749 		} else {
15750 			/* Safe to use the calculated DMA boundary. */
15751 			tp->dma_rwctrl = saved_dma_rwctrl;
15752 		}
15753 
15754 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15755 	}
15756 
15757 out:
15758 	dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
15759 out_nofree:
15760 	return ret;
15761 }
15762 
15763 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
15764 {
15765 	if (tg3_flag(tp, 57765_PLUS)) {
15766 		tp->bufmgr_config.mbuf_read_dma_low_water =
15767 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15768 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15769 			DEFAULT_MB_MACRX_LOW_WATER_57765;
15770 		tp->bufmgr_config.mbuf_high_water =
15771 			DEFAULT_MB_HIGH_WATER_57765;
15772 
15773 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15774 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15775 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15776 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
15777 		tp->bufmgr_config.mbuf_high_water_jumbo =
15778 			DEFAULT_MB_HIGH_WATER_JUMBO_57765;
15779 	} else if (tg3_flag(tp, 5705_PLUS)) {
15780 		tp->bufmgr_config.mbuf_read_dma_low_water =
15781 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15782 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15783 			DEFAULT_MB_MACRX_LOW_WATER_5705;
15784 		tp->bufmgr_config.mbuf_high_water =
15785 			DEFAULT_MB_HIGH_WATER_5705;
15786 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
15787 			tp->bufmgr_config.mbuf_mac_rx_low_water =
15788 				DEFAULT_MB_MACRX_LOW_WATER_5906;
15789 			tp->bufmgr_config.mbuf_high_water =
15790 				DEFAULT_MB_HIGH_WATER_5906;
15791 		}
15792 
15793 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15794 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
15795 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15796 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
15797 		tp->bufmgr_config.mbuf_high_water_jumbo =
15798 			DEFAULT_MB_HIGH_WATER_JUMBO_5780;
15799 	} else {
15800 		tp->bufmgr_config.mbuf_read_dma_low_water =
15801 			DEFAULT_MB_RDMA_LOW_WATER;
15802 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15803 			DEFAULT_MB_MACRX_LOW_WATER;
15804 		tp->bufmgr_config.mbuf_high_water =
15805 			DEFAULT_MB_HIGH_WATER;
15806 
15807 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15808 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
15809 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15810 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
15811 		tp->bufmgr_config.mbuf_high_water_jumbo =
15812 			DEFAULT_MB_HIGH_WATER_JUMBO;
15813 	}
15814 
15815 	tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
15816 	tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
15817 }
15818 
15819 static char * __devinit tg3_phy_string(struct tg3 *tp)
15820 {
15821 	switch (tp->phy_id & TG3_PHY_ID_MASK) {
15822 	case TG3_PHY_ID_BCM5400:	return "5400";
15823 	case TG3_PHY_ID_BCM5401:	return "5401";
15824 	case TG3_PHY_ID_BCM5411:	return "5411";
15825 	case TG3_PHY_ID_BCM5701:	return "5701";
15826 	case TG3_PHY_ID_BCM5703:	return "5703";
15827 	case TG3_PHY_ID_BCM5704:	return "5704";
15828 	case TG3_PHY_ID_BCM5705:	return "5705";
15829 	case TG3_PHY_ID_BCM5750:	return "5750";
15830 	case TG3_PHY_ID_BCM5752:	return "5752";
15831 	case TG3_PHY_ID_BCM5714:	return "5714";
15832 	case TG3_PHY_ID_BCM5780:	return "5780";
15833 	case TG3_PHY_ID_BCM5755:	return "5755";
15834 	case TG3_PHY_ID_BCM5787:	return "5787";
15835 	case TG3_PHY_ID_BCM5784:	return "5784";
15836 	case TG3_PHY_ID_BCM5756:	return "5722/5756";
15837 	case TG3_PHY_ID_BCM5906:	return "5906";
15838 	case TG3_PHY_ID_BCM5761:	return "5761";
15839 	case TG3_PHY_ID_BCM5718C:	return "5718C";
15840 	case TG3_PHY_ID_BCM5718S:	return "5718S";
15841 	case TG3_PHY_ID_BCM57765:	return "57765";
15842 	case TG3_PHY_ID_BCM5719C:	return "5719C";
15843 	case TG3_PHY_ID_BCM5720C:	return "5720C";
15844 	case TG3_PHY_ID_BCM8002:	return "8002/serdes";
15845 	case 0:			return "serdes";
15846 	default:		return "unknown";
15847 	}
15848 }
15849 
15850 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
15851 {
15852 	if (tg3_flag(tp, PCI_EXPRESS)) {
15853 		strcpy(str, "PCI Express");
15854 		return str;
15855 	} else if (tg3_flag(tp, PCIX_MODE)) {
15856 		u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
15857 
15858 		strcpy(str, "PCIX:");
15859 
15860 		if ((clock_ctrl == 7) ||
15861 		    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
15862 		     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
15863 			strcat(str, "133MHz");
15864 		else if (clock_ctrl == 0)
15865 			strcat(str, "33MHz");
15866 		else if (clock_ctrl == 2)
15867 			strcat(str, "50MHz");
15868 		else if (clock_ctrl == 4)
15869 			strcat(str, "66MHz");
15870 		else if (clock_ctrl == 6)
15871 			strcat(str, "100MHz");
15872 	} else {
15873 		strcpy(str, "PCI:");
15874 		if (tg3_flag(tp, PCI_HIGH_SPEED))
15875 			strcat(str, "66MHz");
15876 		else
15877 			strcat(str, "33MHz");
15878 	}
15879 	if (tg3_flag(tp, PCI_32BIT))
15880 		strcat(str, ":32-bit");
15881 	else
15882 		strcat(str, ":64-bit");
15883 	return str;
15884 }
15885 
15886 static void __devinit tg3_init_coal(struct tg3 *tp)
15887 {
15888 	struct ethtool_coalesce *ec = &tp->coal;
15889 
15890 	memset(ec, 0, sizeof(*ec));
15891 	ec->cmd = ETHTOOL_GCOALESCE;
15892 	ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
15893 	ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
15894 	ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
15895 	ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
15896 	ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
15897 	ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
15898 	ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
15899 	ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
15900 	ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
15901 
15902 	if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
15903 				 HOSTCC_MODE_CLRTICK_TXBD)) {
15904 		ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
15905 		ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
15906 		ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
15907 		ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
15908 	}
15909 
15910 	if (tg3_flag(tp, 5705_PLUS)) {
15911 		ec->rx_coalesce_usecs_irq = 0;
15912 		ec->tx_coalesce_usecs_irq = 0;
15913 		ec->stats_block_coalesce_usecs = 0;
15914 	}
15915 }
15916 
15917 static int __devinit tg3_init_one(struct pci_dev *pdev,
15918 				  const struct pci_device_id *ent)
15919 {
15920 	struct net_device *dev;
15921 	struct tg3 *tp;
15922 	int i, err, pm_cap;
15923 	u32 sndmbx, rcvmbx, intmbx;
15924 	char str[40];
15925 	u64 dma_mask, persist_dma_mask;
15926 	netdev_features_t features = 0;
15927 
15928 	printk_once(KERN_INFO "%s\n", version);
15929 
15930 	err = pci_enable_device(pdev);
15931 	if (err) {
15932 		dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
15933 		return err;
15934 	}
15935 
15936 	err = pci_request_regions(pdev, DRV_MODULE_NAME);
15937 	if (err) {
15938 		dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
15939 		goto err_out_disable_pdev;
15940 	}
15941 
15942 	pci_set_master(pdev);
15943 
15944 	/* Find power-management capability. */
15945 	pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
15946 	if (pm_cap == 0) {
15947 		dev_err(&pdev->dev,
15948 			"Cannot find Power Management capability, aborting\n");
15949 		err = -EIO;
15950 		goto err_out_free_res;
15951 	}
15952 
15953 	err = pci_set_power_state(pdev, PCI_D0);
15954 	if (err) {
15955 		dev_err(&pdev->dev, "Transition to D0 failed, aborting\n");
15956 		goto err_out_free_res;
15957 	}
15958 
15959 	dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
15960 	if (!dev) {
15961 		err = -ENOMEM;
15962 		goto err_out_power_down;
15963 	}
15964 
15965 	SET_NETDEV_DEV(dev, &pdev->dev);
15966 
15967 	tp = netdev_priv(dev);
15968 	tp->pdev = pdev;
15969 	tp->dev = dev;
15970 	tp->pm_cap = pm_cap;
15971 	tp->rx_mode = TG3_DEF_RX_MODE;
15972 	tp->tx_mode = TG3_DEF_TX_MODE;
15973 
15974 	if (tg3_debug > 0)
15975 		tp->msg_enable = tg3_debug;
15976 	else
15977 		tp->msg_enable = TG3_DEF_MSG_ENABLE;
15978 
15979 	/* The word/byte swap controls here control register access byte
15980 	 * swapping.  DMA data byte swapping is controlled in the GRC_MODE
15981 	 * setting below.
15982 	 */
15983 	tp->misc_host_ctrl =
15984 		MISC_HOST_CTRL_MASK_PCI_INT |
15985 		MISC_HOST_CTRL_WORD_SWAP |
15986 		MISC_HOST_CTRL_INDIR_ACCESS |
15987 		MISC_HOST_CTRL_PCISTATE_RW;
15988 
15989 	/* The NONFRM (non-frame) byte/word swap controls take effect
15990 	 * on descriptor entries, anything which isn't packet data.
15991 	 *
15992 	 * The StrongARM chips on the board (one for tx, one for rx)
15993 	 * are running in big-endian mode.
15994 	 */
15995 	tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
15996 			GRC_MODE_WSWAP_NONFRM_DATA);
15997 #ifdef __BIG_ENDIAN
15998 	tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
15999 #endif
16000 	spin_lock_init(&tp->lock);
16001 	spin_lock_init(&tp->indirect_lock);
16002 	INIT_WORK(&tp->reset_task, tg3_reset_task);
16003 
16004 	tp->regs = pci_ioremap_bar(pdev, BAR_0);
16005 	if (!tp->regs) {
16006 		dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
16007 		err = -ENOMEM;
16008 		goto err_out_free_dev;
16009 	}
16010 
16011 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16012 	    tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
16013 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
16014 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
16015 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16016 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16017 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16018 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) {
16019 		tg3_flag_set(tp, ENABLE_APE);
16020 		tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
16021 		if (!tp->aperegs) {
16022 			dev_err(&pdev->dev,
16023 				"Cannot map APE registers, aborting\n");
16024 			err = -ENOMEM;
16025 			goto err_out_iounmap;
16026 		}
16027 	}
16028 
16029 	tp->rx_pending = TG3_DEF_RX_RING_PENDING;
16030 	tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
16031 
16032 	dev->ethtool_ops = &tg3_ethtool_ops;
16033 	dev->watchdog_timeo = TG3_TX_TIMEOUT;
16034 	dev->netdev_ops = &tg3_netdev_ops;
16035 	dev->irq = pdev->irq;
16036 
16037 	err = tg3_get_invariants(tp);
16038 	if (err) {
16039 		dev_err(&pdev->dev,
16040 			"Problem fetching invariants of chip, aborting\n");
16041 		goto err_out_apeunmap;
16042 	}
16043 
16044 	/* The EPB bridge inside 5714, 5715, and 5780 and any
16045 	 * device behind the EPB cannot support DMA addresses > 40-bit.
16046 	 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
16047 	 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
16048 	 * do DMA address check in tg3_start_xmit().
16049 	 */
16050 	if (tg3_flag(tp, IS_5788))
16051 		persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
16052 	else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
16053 		persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
16054 #ifdef CONFIG_HIGHMEM
16055 		dma_mask = DMA_BIT_MASK(64);
16056 #endif
16057 	} else
16058 		persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
16059 
16060 	/* Configure DMA attributes. */
16061 	if (dma_mask > DMA_BIT_MASK(32)) {
16062 		err = pci_set_dma_mask(pdev, dma_mask);
16063 		if (!err) {
16064 			features |= NETIF_F_HIGHDMA;
16065 			err = pci_set_consistent_dma_mask(pdev,
16066 							  persist_dma_mask);
16067 			if (err < 0) {
16068 				dev_err(&pdev->dev, "Unable to obtain 64 bit "
16069 					"DMA for consistent allocations\n");
16070 				goto err_out_apeunmap;
16071 			}
16072 		}
16073 	}
16074 	if (err || dma_mask == DMA_BIT_MASK(32)) {
16075 		err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
16076 		if (err) {
16077 			dev_err(&pdev->dev,
16078 				"No usable DMA configuration, aborting\n");
16079 			goto err_out_apeunmap;
16080 		}
16081 	}
16082 
16083 	tg3_init_bufmgr_config(tp);
16084 
16085 	features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
16086 
16087 	/* 5700 B0 chips do not support checksumming correctly due
16088 	 * to hardware bugs.
16089 	 */
16090 	if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) {
16091 		features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
16092 
16093 		if (tg3_flag(tp, 5755_PLUS))
16094 			features |= NETIF_F_IPV6_CSUM;
16095 	}
16096 
16097 	/* TSO is on by default on chips that support hardware TSO.
16098 	 * Firmware TSO on older chips gives lower performance, so it
16099 	 * is off by default, but can be enabled using ethtool.
16100 	 */
16101 	if ((tg3_flag(tp, HW_TSO_1) ||
16102 	     tg3_flag(tp, HW_TSO_2) ||
16103 	     tg3_flag(tp, HW_TSO_3)) &&
16104 	    (features & NETIF_F_IP_CSUM))
16105 		features |= NETIF_F_TSO;
16106 	if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
16107 		if (features & NETIF_F_IPV6_CSUM)
16108 			features |= NETIF_F_TSO6;
16109 		if (tg3_flag(tp, HW_TSO_3) ||
16110 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
16111 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
16112 		     GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) ||
16113 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
16114 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
16115 			features |= NETIF_F_TSO_ECN;
16116 	}
16117 
16118 	dev->features |= features;
16119 	dev->vlan_features |= features;
16120 
16121 	/*
16122 	 * Add loopback capability only for a subset of devices that support
16123 	 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
16124 	 * loopback for the remaining devices.
16125 	 */
16126 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
16127 	    !tg3_flag(tp, CPMU_PRESENT))
16128 		/* Add the loopback capability */
16129 		features |= NETIF_F_LOOPBACK;
16130 
16131 	dev->hw_features |= features;
16132 
16133 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
16134 	    !tg3_flag(tp, TSO_CAPABLE) &&
16135 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
16136 		tg3_flag_set(tp, MAX_RXPEND_64);
16137 		tp->rx_pending = 63;
16138 	}
16139 
16140 	err = tg3_get_device_address(tp);
16141 	if (err) {
16142 		dev_err(&pdev->dev,
16143 			"Could not obtain valid ethernet address, aborting\n");
16144 		goto err_out_apeunmap;
16145 	}
16146 
16147 	/*
16148 	 * Reset chip in case UNDI or EFI driver did not shutdown
16149 	 * DMA self test will enable WDMAC and we'll see (spurious)
16150 	 * pending DMA on the PCI bus at that point.
16151 	 */
16152 	if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
16153 	    (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
16154 		tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
16155 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16156 	}
16157 
16158 	err = tg3_test_dma(tp);
16159 	if (err) {
16160 		dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
16161 		goto err_out_apeunmap;
16162 	}
16163 
16164 	intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
16165 	rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
16166 	sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
16167 	for (i = 0; i < tp->irq_max; i++) {
16168 		struct tg3_napi *tnapi = &tp->napi[i];
16169 
16170 		tnapi->tp = tp;
16171 		tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
16172 
16173 		tnapi->int_mbox = intmbx;
16174 		if (i <= 4)
16175 			intmbx += 0x8;
16176 		else
16177 			intmbx += 0x4;
16178 
16179 		tnapi->consmbox = rcvmbx;
16180 		tnapi->prodmbox = sndmbx;
16181 
16182 		if (i)
16183 			tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
16184 		else
16185 			tnapi->coal_now = HOSTCC_MODE_NOW;
16186 
16187 		if (!tg3_flag(tp, SUPPORT_MSIX))
16188 			break;
16189 
16190 		/*
16191 		 * If we support MSIX, we'll be using RSS.  If we're using
16192 		 * RSS, the first vector only handles link interrupts and the
16193 		 * remaining vectors handle rx and tx interrupts.  Reuse the
16194 		 * mailbox values for the next iteration.  The values we setup
16195 		 * above are still useful for the single vectored mode.
16196 		 */
16197 		if (!i)
16198 			continue;
16199 
16200 		rcvmbx += 0x8;
16201 
16202 		if (sndmbx & 0x4)
16203 			sndmbx -= 0x4;
16204 		else
16205 			sndmbx += 0xc;
16206 	}
16207 
16208 	tg3_init_coal(tp);
16209 
16210 	pci_set_drvdata(pdev, dev);
16211 
16212 	if (tg3_flag(tp, 5717_PLUS)) {
16213 		/* Resume a low-power mode */
16214 		tg3_frob_aux_power(tp, false);
16215 	}
16216 
16217 	tg3_timer_init(tp);
16218 
16219 	err = register_netdev(dev);
16220 	if (err) {
16221 		dev_err(&pdev->dev, "Cannot register net device, aborting\n");
16222 		goto err_out_apeunmap;
16223 	}
16224 
16225 	netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
16226 		    tp->board_part_number,
16227 		    tp->pci_chip_rev_id,
16228 		    tg3_bus_string(tp, str),
16229 		    dev->dev_addr);
16230 
16231 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
16232 		struct phy_device *phydev;
16233 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
16234 		netdev_info(dev,
16235 			    "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
16236 			    phydev->drv->name, dev_name(&phydev->dev));
16237 	} else {
16238 		char *ethtype;
16239 
16240 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
16241 			ethtype = "10/100Base-TX";
16242 		else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
16243 			ethtype = "1000Base-SX";
16244 		else
16245 			ethtype = "10/100/1000Base-T";
16246 
16247 		netdev_info(dev, "attached PHY is %s (%s Ethernet) "
16248 			    "(WireSpeed[%d], EEE[%d])\n",
16249 			    tg3_phy_string(tp), ethtype,
16250 			    (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
16251 			    (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
16252 	}
16253 
16254 	netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
16255 		    (dev->features & NETIF_F_RXCSUM) != 0,
16256 		    tg3_flag(tp, USE_LINKCHG_REG) != 0,
16257 		    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
16258 		    tg3_flag(tp, ENABLE_ASF) != 0,
16259 		    tg3_flag(tp, TSO_CAPABLE) != 0);
16260 	netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
16261 		    tp->dma_rwctrl,
16262 		    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
16263 		    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
16264 
16265 	pci_save_state(pdev);
16266 
16267 	return 0;
16268 
16269 err_out_apeunmap:
16270 	if (tp->aperegs) {
16271 		iounmap(tp->aperegs);
16272 		tp->aperegs = NULL;
16273 	}
16274 
16275 err_out_iounmap:
16276 	if (tp->regs) {
16277 		iounmap(tp->regs);
16278 		tp->regs = NULL;
16279 	}
16280 
16281 err_out_free_dev:
16282 	free_netdev(dev);
16283 
16284 err_out_power_down:
16285 	pci_set_power_state(pdev, PCI_D3hot);
16286 
16287 err_out_free_res:
16288 	pci_release_regions(pdev);
16289 
16290 err_out_disable_pdev:
16291 	pci_disable_device(pdev);
16292 	pci_set_drvdata(pdev, NULL);
16293 	return err;
16294 }
16295 
16296 static void __devexit tg3_remove_one(struct pci_dev *pdev)
16297 {
16298 	struct net_device *dev = pci_get_drvdata(pdev);
16299 
16300 	if (dev) {
16301 		struct tg3 *tp = netdev_priv(dev);
16302 
16303 		release_firmware(tp->fw);
16304 
16305 		tg3_reset_task_cancel(tp);
16306 
16307 		if (tg3_flag(tp, USE_PHYLIB)) {
16308 			tg3_phy_fini(tp);
16309 			tg3_mdio_fini(tp);
16310 		}
16311 
16312 		unregister_netdev(dev);
16313 		if (tp->aperegs) {
16314 			iounmap(tp->aperegs);
16315 			tp->aperegs = NULL;
16316 		}
16317 		if (tp->regs) {
16318 			iounmap(tp->regs);
16319 			tp->regs = NULL;
16320 		}
16321 		free_netdev(dev);
16322 		pci_release_regions(pdev);
16323 		pci_disable_device(pdev);
16324 		pci_set_drvdata(pdev, NULL);
16325 	}
16326 }
16327 
16328 #ifdef CONFIG_PM_SLEEP
16329 static int tg3_suspend(struct device *device)
16330 {
16331 	struct pci_dev *pdev = to_pci_dev(device);
16332 	struct net_device *dev = pci_get_drvdata(pdev);
16333 	struct tg3 *tp = netdev_priv(dev);
16334 	int err;
16335 
16336 	if (!netif_running(dev))
16337 		return 0;
16338 
16339 	tg3_reset_task_cancel(tp);
16340 	tg3_phy_stop(tp);
16341 	tg3_netif_stop(tp);
16342 
16343 	tg3_timer_stop(tp);
16344 
16345 	tg3_full_lock(tp, 1);
16346 	tg3_disable_ints(tp);
16347 	tg3_full_unlock(tp);
16348 
16349 	netif_device_detach(dev);
16350 
16351 	tg3_full_lock(tp, 0);
16352 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16353 	tg3_flag_clear(tp, INIT_COMPLETE);
16354 	tg3_full_unlock(tp);
16355 
16356 	err = tg3_power_down_prepare(tp);
16357 	if (err) {
16358 		int err2;
16359 
16360 		tg3_full_lock(tp, 0);
16361 
16362 		tg3_flag_set(tp, INIT_COMPLETE);
16363 		err2 = tg3_restart_hw(tp, 1);
16364 		if (err2)
16365 			goto out;
16366 
16367 		tg3_timer_start(tp);
16368 
16369 		netif_device_attach(dev);
16370 		tg3_netif_start(tp);
16371 
16372 out:
16373 		tg3_full_unlock(tp);
16374 
16375 		if (!err2)
16376 			tg3_phy_start(tp);
16377 	}
16378 
16379 	return err;
16380 }
16381 
16382 static int tg3_resume(struct device *device)
16383 {
16384 	struct pci_dev *pdev = to_pci_dev(device);
16385 	struct net_device *dev = pci_get_drvdata(pdev);
16386 	struct tg3 *tp = netdev_priv(dev);
16387 	int err;
16388 
16389 	if (!netif_running(dev))
16390 		return 0;
16391 
16392 	netif_device_attach(dev);
16393 
16394 	tg3_full_lock(tp, 0);
16395 
16396 	tg3_flag_set(tp, INIT_COMPLETE);
16397 	err = tg3_restart_hw(tp, 1);
16398 	if (err)
16399 		goto out;
16400 
16401 	tg3_timer_start(tp);
16402 
16403 	tg3_netif_start(tp);
16404 
16405 out:
16406 	tg3_full_unlock(tp);
16407 
16408 	if (!err)
16409 		tg3_phy_start(tp);
16410 
16411 	return err;
16412 }
16413 
16414 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
16415 #define TG3_PM_OPS (&tg3_pm_ops)
16416 
16417 #else
16418 
16419 #define TG3_PM_OPS NULL
16420 
16421 #endif /* CONFIG_PM_SLEEP */
16422 
16423 /**
16424  * tg3_io_error_detected - called when PCI error is detected
16425  * @pdev: Pointer to PCI device
16426  * @state: The current pci connection state
16427  *
16428  * This function is called after a PCI bus error affecting
16429  * this device has been detected.
16430  */
16431 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
16432 					      pci_channel_state_t state)
16433 {
16434 	struct net_device *netdev = pci_get_drvdata(pdev);
16435 	struct tg3 *tp = netdev_priv(netdev);
16436 	pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
16437 
16438 	netdev_info(netdev, "PCI I/O error detected\n");
16439 
16440 	rtnl_lock();
16441 
16442 	if (!netif_running(netdev))
16443 		goto done;
16444 
16445 	tg3_phy_stop(tp);
16446 
16447 	tg3_netif_stop(tp);
16448 
16449 	tg3_timer_stop(tp);
16450 
16451 	/* Want to make sure that the reset task doesn't run */
16452 	tg3_reset_task_cancel(tp);
16453 
16454 	netif_device_detach(netdev);
16455 
16456 	/* Clean up software state, even if MMIO is blocked */
16457 	tg3_full_lock(tp, 0);
16458 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
16459 	tg3_full_unlock(tp);
16460 
16461 done:
16462 	if (state == pci_channel_io_perm_failure)
16463 		err = PCI_ERS_RESULT_DISCONNECT;
16464 	else
16465 		pci_disable_device(pdev);
16466 
16467 	rtnl_unlock();
16468 
16469 	return err;
16470 }
16471 
16472 /**
16473  * tg3_io_slot_reset - called after the pci bus has been reset.
16474  * @pdev: Pointer to PCI device
16475  *
16476  * Restart the card from scratch, as if from a cold-boot.
16477  * At this point, the card has exprienced a hard reset,
16478  * followed by fixups by BIOS, and has its config space
16479  * set up identically to what it was at cold boot.
16480  */
16481 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
16482 {
16483 	struct net_device *netdev = pci_get_drvdata(pdev);
16484 	struct tg3 *tp = netdev_priv(netdev);
16485 	pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
16486 	int err;
16487 
16488 	rtnl_lock();
16489 
16490 	if (pci_enable_device(pdev)) {
16491 		netdev_err(netdev, "Cannot re-enable PCI device after reset.\n");
16492 		goto done;
16493 	}
16494 
16495 	pci_set_master(pdev);
16496 	pci_restore_state(pdev);
16497 	pci_save_state(pdev);
16498 
16499 	if (!netif_running(netdev)) {
16500 		rc = PCI_ERS_RESULT_RECOVERED;
16501 		goto done;
16502 	}
16503 
16504 	err = tg3_power_up(tp);
16505 	if (err)
16506 		goto done;
16507 
16508 	rc = PCI_ERS_RESULT_RECOVERED;
16509 
16510 done:
16511 	rtnl_unlock();
16512 
16513 	return rc;
16514 }
16515 
16516 /**
16517  * tg3_io_resume - called when traffic can start flowing again.
16518  * @pdev: Pointer to PCI device
16519  *
16520  * This callback is called when the error recovery driver tells
16521  * us that its OK to resume normal operation.
16522  */
16523 static void tg3_io_resume(struct pci_dev *pdev)
16524 {
16525 	struct net_device *netdev = pci_get_drvdata(pdev);
16526 	struct tg3 *tp = netdev_priv(netdev);
16527 	int err;
16528 
16529 	rtnl_lock();
16530 
16531 	if (!netif_running(netdev))
16532 		goto done;
16533 
16534 	tg3_full_lock(tp, 0);
16535 	tg3_flag_set(tp, INIT_COMPLETE);
16536 	err = tg3_restart_hw(tp, 1);
16537 	tg3_full_unlock(tp);
16538 	if (err) {
16539 		netdev_err(netdev, "Cannot restart hardware after reset.\n");
16540 		goto done;
16541 	}
16542 
16543 	netif_device_attach(netdev);
16544 
16545 	tg3_timer_start(tp);
16546 
16547 	tg3_netif_start(tp);
16548 
16549 	tg3_phy_start(tp);
16550 
16551 done:
16552 	rtnl_unlock();
16553 }
16554 
16555 static const struct pci_error_handlers tg3_err_handler = {
16556 	.error_detected	= tg3_io_error_detected,
16557 	.slot_reset	= tg3_io_slot_reset,
16558 	.resume		= tg3_io_resume
16559 };
16560 
16561 static struct pci_driver tg3_driver = {
16562 	.name		= DRV_MODULE_NAME,
16563 	.id_table	= tg3_pci_tbl,
16564 	.probe		= tg3_init_one,
16565 	.remove		= __devexit_p(tg3_remove_one),
16566 	.err_handler	= &tg3_err_handler,
16567 	.driver.pm	= TG3_PM_OPS,
16568 };
16569 
16570 static int __init tg3_init(void)
16571 {
16572 	return pci_register_driver(&tg3_driver);
16573 }
16574 
16575 static void __exit tg3_cleanup(void)
16576 {
16577 	pci_unregister_driver(&tg3_driver);
16578 }
16579 
16580 module_init(tg3_init);
16581 module_exit(tg3_cleanup);
16582