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 #if IS_ENABLED(CONFIG_HWMON)
48 #include <linux/hwmon.h>
49 #include <linux/hwmon-sysfs.h>
50 #endif
51 
52 #include <net/checksum.h>
53 #include <net/ip.h>
54 
55 #include <linux/io.h>
56 #include <asm/byteorder.h>
57 #include <linux/uaccess.h>
58 
59 #ifdef CONFIG_SPARC
60 #include <asm/idprom.h>
61 #include <asm/prom.h>
62 #endif
63 
64 #define BAR_0	0
65 #define BAR_2	2
66 
67 #include "tg3.h"
68 
69 /* Functions & macros to verify TG3_FLAGS types */
70 
71 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
72 {
73 	return test_bit(flag, bits);
74 }
75 
76 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
77 {
78 	set_bit(flag, bits);
79 }
80 
81 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
82 {
83 	clear_bit(flag, bits);
84 }
85 
86 #define tg3_flag(tp, flag)				\
87 	_tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
88 #define tg3_flag_set(tp, flag)				\
89 	_tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
90 #define tg3_flag_clear(tp, flag)			\
91 	_tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
92 
93 #define DRV_MODULE_NAME		"tg3"
94 #define TG3_MAJ_NUM			3
95 #define TG3_MIN_NUM			124
96 #define DRV_MODULE_VERSION	\
97 	__stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
98 #define DRV_MODULE_RELDATE	"March 21, 2012"
99 
100 #define RESET_KIND_SHUTDOWN	0
101 #define RESET_KIND_INIT		1
102 #define RESET_KIND_SUSPEND	2
103 
104 #define TG3_DEF_RX_MODE		0
105 #define TG3_DEF_TX_MODE		0
106 #define TG3_DEF_MSG_ENABLE	  \
107 	(NETIF_MSG_DRV		| \
108 	 NETIF_MSG_PROBE	| \
109 	 NETIF_MSG_LINK		| \
110 	 NETIF_MSG_TIMER	| \
111 	 NETIF_MSG_IFDOWN	| \
112 	 NETIF_MSG_IFUP		| \
113 	 NETIF_MSG_RX_ERR	| \
114 	 NETIF_MSG_TX_ERR)
115 
116 #define TG3_GRC_LCLCTL_PWRSW_DELAY	100
117 
118 /* length of time before we decide the hardware is borked,
119  * and dev->tx_timeout() should be called to fix the problem
120  */
121 
122 #define TG3_TX_TIMEOUT			(5 * HZ)
123 
124 /* hardware minimum and maximum for a single frame's data payload */
125 #define TG3_MIN_MTU			60
126 #define TG3_MAX_MTU(tp)	\
127 	(tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
128 
129 /* These numbers seem to be hard coded in the NIC firmware somehow.
130  * You can't change the ring sizes, but you can change where you place
131  * them in the NIC onboard memory.
132  */
133 #define TG3_RX_STD_RING_SIZE(tp) \
134 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
135 	 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
136 #define TG3_DEF_RX_RING_PENDING		200
137 #define TG3_RX_JMB_RING_SIZE(tp) \
138 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
139 	 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
140 #define TG3_DEF_RX_JUMBO_RING_PENDING	100
141 
142 /* Do not place this n-ring entries value into the tp struct itself,
143  * we really want to expose these constants to GCC so that modulo et
144  * al.  operations are done with shifts and masks instead of with
145  * hw multiply/modulo instructions.  Another solution would be to
146  * replace things like '% foo' with '& (foo - 1)'.
147  */
148 
149 #define TG3_TX_RING_SIZE		512
150 #define TG3_DEF_TX_RING_PENDING		(TG3_TX_RING_SIZE - 1)
151 
152 #define TG3_RX_STD_RING_BYTES(tp) \
153 	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
154 #define TG3_RX_JMB_RING_BYTES(tp) \
155 	(sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
156 #define TG3_RX_RCB_RING_BYTES(tp) \
157 	(sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
158 #define TG3_TX_RING_BYTES	(sizeof(struct tg3_tx_buffer_desc) * \
159 				 TG3_TX_RING_SIZE)
160 #define NEXT_TX(N)		(((N) + 1) & (TG3_TX_RING_SIZE - 1))
161 
162 #define TG3_DMA_BYTE_ENAB		64
163 
164 #define TG3_RX_STD_DMA_SZ		1536
165 #define TG3_RX_JMB_DMA_SZ		9046
166 
167 #define TG3_RX_DMA_TO_MAP_SZ(x)		((x) + TG3_DMA_BYTE_ENAB)
168 
169 #define TG3_RX_STD_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
170 #define TG3_RX_JMB_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
171 
172 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
173 	(sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
174 
175 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
176 	(sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
177 
178 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
179  * that are at least dword aligned when used in PCIX mode.  The driver
180  * works around this bug by double copying the packet.  This workaround
181  * is built into the normal double copy length check for efficiency.
182  *
183  * However, the double copy is only necessary on those architectures
184  * where unaligned memory accesses are inefficient.  For those architectures
185  * where unaligned memory accesses incur little penalty, we can reintegrate
186  * the 5701 in the normal rx path.  Doing so saves a device structure
187  * dereference by hardcoding the double copy threshold in place.
188  */
189 #define TG3_RX_COPY_THRESHOLD		256
190 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
191 	#define TG3_RX_COPY_THRESH(tp)	TG3_RX_COPY_THRESHOLD
192 #else
193 	#define TG3_RX_COPY_THRESH(tp)	((tp)->rx_copy_thresh)
194 #endif
195 
196 #if (NET_IP_ALIGN != 0)
197 #define TG3_RX_OFFSET(tp)	((tp)->rx_offset)
198 #else
199 #define TG3_RX_OFFSET(tp)	(NET_SKB_PAD)
200 #endif
201 
202 /* minimum number of free TX descriptors required to wake up TX process */
203 #define TG3_TX_WAKEUP_THRESH(tnapi)		((tnapi)->tx_pending / 4)
204 #define TG3_TX_BD_DMA_MAX_2K		2048
205 #define TG3_TX_BD_DMA_MAX_4K		4096
206 
207 #define TG3_RAW_IP_ALIGN 2
208 
209 #define TG3_FW_UPDATE_TIMEOUT_SEC	5
210 #define TG3_FW_UPDATE_FREQ_SEC		(TG3_FW_UPDATE_TIMEOUT_SEC / 2)
211 
212 #define FIRMWARE_TG3		"tigon/tg3.bin"
213 #define FIRMWARE_TG3TSO		"tigon/tg3_tso.bin"
214 #define FIRMWARE_TG3TSO5	"tigon/tg3_tso5.bin"
215 
216 static char version[] __devinitdata =
217 	DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
218 
219 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
220 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
221 MODULE_LICENSE("GPL");
222 MODULE_VERSION(DRV_MODULE_VERSION);
223 MODULE_FIRMWARE(FIRMWARE_TG3);
224 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
225 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
226 
227 static int tg3_debug = -1;	/* -1 == use TG3_DEF_MSG_ENABLE as value */
228 module_param(tg3_debug, int, 0);
229 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
230 
231 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
232 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
233 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
234 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
235 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
236 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
237 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
238 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
239 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
240 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
241 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
242 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
243 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
244 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
245 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
246 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
247 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
248 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
249 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
250 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
251 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
252 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
253 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
254 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
255 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
256 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
257 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
258 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
259 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
260 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
261 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
262 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
263 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
264 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
265 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
266 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
267 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
268 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
269 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
270 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
271 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
272 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
273 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
274 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
275 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
276 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
277 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
278 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
279 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
280 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
281 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
282 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
283 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
284 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
285 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
286 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
287 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
288 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
289 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
290 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
291 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
292 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
293 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)},
294 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
295 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
296 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
297 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
298 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
299 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
300 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
301 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)},
302 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)},
303 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
304 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
305 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
306 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
307 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
308 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
309 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
310 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
311 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
312 	{PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
313 	{PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
314 	{}
315 };
316 
317 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
318 
319 static const struct {
320 	const char string[ETH_GSTRING_LEN];
321 } ethtool_stats_keys[] = {
322 	{ "rx_octets" },
323 	{ "rx_fragments" },
324 	{ "rx_ucast_packets" },
325 	{ "rx_mcast_packets" },
326 	{ "rx_bcast_packets" },
327 	{ "rx_fcs_errors" },
328 	{ "rx_align_errors" },
329 	{ "rx_xon_pause_rcvd" },
330 	{ "rx_xoff_pause_rcvd" },
331 	{ "rx_mac_ctrl_rcvd" },
332 	{ "rx_xoff_entered" },
333 	{ "rx_frame_too_long_errors" },
334 	{ "rx_jabbers" },
335 	{ "rx_undersize_packets" },
336 	{ "rx_in_length_errors" },
337 	{ "rx_out_length_errors" },
338 	{ "rx_64_or_less_octet_packets" },
339 	{ "rx_65_to_127_octet_packets" },
340 	{ "rx_128_to_255_octet_packets" },
341 	{ "rx_256_to_511_octet_packets" },
342 	{ "rx_512_to_1023_octet_packets" },
343 	{ "rx_1024_to_1522_octet_packets" },
344 	{ "rx_1523_to_2047_octet_packets" },
345 	{ "rx_2048_to_4095_octet_packets" },
346 	{ "rx_4096_to_8191_octet_packets" },
347 	{ "rx_8192_to_9022_octet_packets" },
348 
349 	{ "tx_octets" },
350 	{ "tx_collisions" },
351 
352 	{ "tx_xon_sent" },
353 	{ "tx_xoff_sent" },
354 	{ "tx_flow_control" },
355 	{ "tx_mac_errors" },
356 	{ "tx_single_collisions" },
357 	{ "tx_mult_collisions" },
358 	{ "tx_deferred" },
359 	{ "tx_excessive_collisions" },
360 	{ "tx_late_collisions" },
361 	{ "tx_collide_2times" },
362 	{ "tx_collide_3times" },
363 	{ "tx_collide_4times" },
364 	{ "tx_collide_5times" },
365 	{ "tx_collide_6times" },
366 	{ "tx_collide_7times" },
367 	{ "tx_collide_8times" },
368 	{ "tx_collide_9times" },
369 	{ "tx_collide_10times" },
370 	{ "tx_collide_11times" },
371 	{ "tx_collide_12times" },
372 	{ "tx_collide_13times" },
373 	{ "tx_collide_14times" },
374 	{ "tx_collide_15times" },
375 	{ "tx_ucast_packets" },
376 	{ "tx_mcast_packets" },
377 	{ "tx_bcast_packets" },
378 	{ "tx_carrier_sense_errors" },
379 	{ "tx_discards" },
380 	{ "tx_errors" },
381 
382 	{ "dma_writeq_full" },
383 	{ "dma_write_prioq_full" },
384 	{ "rxbds_empty" },
385 	{ "rx_discards" },
386 	{ "rx_errors" },
387 	{ "rx_threshold_hit" },
388 
389 	{ "dma_readq_full" },
390 	{ "dma_read_prioq_full" },
391 	{ "tx_comp_queue_full" },
392 
393 	{ "ring_set_send_prod_index" },
394 	{ "ring_status_update" },
395 	{ "nic_irqs" },
396 	{ "nic_avoided_irqs" },
397 	{ "nic_tx_threshold_hit" },
398 
399 	{ "mbuf_lwm_thresh_hit" },
400 };
401 
402 #define TG3_NUM_STATS	ARRAY_SIZE(ethtool_stats_keys)
403 
404 
405 static const struct {
406 	const char string[ETH_GSTRING_LEN];
407 } ethtool_test_keys[] = {
408 	{ "nvram test        (online) " },
409 	{ "link test         (online) " },
410 	{ "register test     (offline)" },
411 	{ "memory test       (offline)" },
412 	{ "mac loopback test (offline)" },
413 	{ "phy loopback test (offline)" },
414 	{ "ext loopback test (offline)" },
415 	{ "interrupt test    (offline)" },
416 };
417 
418 #define TG3_NUM_TEST	ARRAY_SIZE(ethtool_test_keys)
419 
420 
421 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
422 {
423 	writel(val, tp->regs + off);
424 }
425 
426 static u32 tg3_read32(struct tg3 *tp, u32 off)
427 {
428 	return readl(tp->regs + off);
429 }
430 
431 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
432 {
433 	writel(val, tp->aperegs + off);
434 }
435 
436 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
437 {
438 	return readl(tp->aperegs + off);
439 }
440 
441 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
442 {
443 	unsigned long flags;
444 
445 	spin_lock_irqsave(&tp->indirect_lock, flags);
446 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
447 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
448 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
449 }
450 
451 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
452 {
453 	writel(val, tp->regs + off);
454 	readl(tp->regs + off);
455 }
456 
457 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
458 {
459 	unsigned long flags;
460 	u32 val;
461 
462 	spin_lock_irqsave(&tp->indirect_lock, flags);
463 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
464 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
465 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
466 	return val;
467 }
468 
469 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
470 {
471 	unsigned long flags;
472 
473 	if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
474 		pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
475 				       TG3_64BIT_REG_LOW, val);
476 		return;
477 	}
478 	if (off == TG3_RX_STD_PROD_IDX_REG) {
479 		pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
480 				       TG3_64BIT_REG_LOW, val);
481 		return;
482 	}
483 
484 	spin_lock_irqsave(&tp->indirect_lock, flags);
485 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
486 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
487 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
488 
489 	/* In indirect mode when disabling interrupts, we also need
490 	 * to clear the interrupt bit in the GRC local ctrl register.
491 	 */
492 	if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
493 	    (val == 0x1)) {
494 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
495 				       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
496 	}
497 }
498 
499 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
500 {
501 	unsigned long flags;
502 	u32 val;
503 
504 	spin_lock_irqsave(&tp->indirect_lock, flags);
505 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
506 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
507 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
508 	return val;
509 }
510 
511 /* usec_wait specifies the wait time in usec when writing to certain registers
512  * where it is unsafe to read back the register without some delay.
513  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
514  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
515  */
516 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
517 {
518 	if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
519 		/* Non-posted methods */
520 		tp->write32(tp, off, val);
521 	else {
522 		/* Posted method */
523 		tg3_write32(tp, off, val);
524 		if (usec_wait)
525 			udelay(usec_wait);
526 		tp->read32(tp, off);
527 	}
528 	/* Wait again after the read for the posted method to guarantee that
529 	 * the wait time is met.
530 	 */
531 	if (usec_wait)
532 		udelay(usec_wait);
533 }
534 
535 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
536 {
537 	tp->write32_mbox(tp, off, val);
538 	if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND))
539 		tp->read32_mbox(tp, off);
540 }
541 
542 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
543 {
544 	void __iomem *mbox = tp->regs + off;
545 	writel(val, mbox);
546 	if (tg3_flag(tp, TXD_MBOX_HWBUG))
547 		writel(val, mbox);
548 	if (tg3_flag(tp, MBOX_WRITE_REORDER))
549 		readl(mbox);
550 }
551 
552 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
553 {
554 	return readl(tp->regs + off + GRCMBOX_BASE);
555 }
556 
557 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
558 {
559 	writel(val, tp->regs + off + GRCMBOX_BASE);
560 }
561 
562 #define tw32_mailbox(reg, val)		tp->write32_mbox(tp, reg, val)
563 #define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
564 #define tw32_rx_mbox(reg, val)		tp->write32_rx_mbox(tp, reg, val)
565 #define tw32_tx_mbox(reg, val)		tp->write32_tx_mbox(tp, reg, val)
566 #define tr32_mailbox(reg)		tp->read32_mbox(tp, reg)
567 
568 #define tw32(reg, val)			tp->write32(tp, reg, val)
569 #define tw32_f(reg, val)		_tw32_flush(tp, (reg), (val), 0)
570 #define tw32_wait_f(reg, val, us)	_tw32_flush(tp, (reg), (val), (us))
571 #define tr32(reg)			tp->read32(tp, reg)
572 
573 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
574 {
575 	unsigned long flags;
576 
577 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
578 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
579 		return;
580 
581 	spin_lock_irqsave(&tp->indirect_lock, flags);
582 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
583 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
584 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
585 
586 		/* Always leave this as zero. */
587 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
588 	} else {
589 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
590 		tw32_f(TG3PCI_MEM_WIN_DATA, val);
591 
592 		/* Always leave this as zero. */
593 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
594 	}
595 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
596 }
597 
598 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
599 {
600 	unsigned long flags;
601 
602 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
603 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
604 		*val = 0;
605 		return;
606 	}
607 
608 	spin_lock_irqsave(&tp->indirect_lock, flags);
609 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
610 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
611 		pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
612 
613 		/* Always leave this as zero. */
614 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
615 	} else {
616 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
617 		*val = tr32(TG3PCI_MEM_WIN_DATA);
618 
619 		/* Always leave this as zero. */
620 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
621 	}
622 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
623 }
624 
625 static void tg3_ape_lock_init(struct tg3 *tp)
626 {
627 	int i;
628 	u32 regbase, bit;
629 
630 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
631 		regbase = TG3_APE_LOCK_GRANT;
632 	else
633 		regbase = TG3_APE_PER_LOCK_GRANT;
634 
635 	/* Make sure the driver hasn't any stale locks. */
636 	for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
637 		switch (i) {
638 		case TG3_APE_LOCK_PHY0:
639 		case TG3_APE_LOCK_PHY1:
640 		case TG3_APE_LOCK_PHY2:
641 		case TG3_APE_LOCK_PHY3:
642 			bit = APE_LOCK_GRANT_DRIVER;
643 			break;
644 		default:
645 			if (!tp->pci_fn)
646 				bit = APE_LOCK_GRANT_DRIVER;
647 			else
648 				bit = 1 << tp->pci_fn;
649 		}
650 		tg3_ape_write32(tp, regbase + 4 * i, bit);
651 	}
652 
653 }
654 
655 static int tg3_ape_lock(struct tg3 *tp, int locknum)
656 {
657 	int i, off;
658 	int ret = 0;
659 	u32 status, req, gnt, bit;
660 
661 	if (!tg3_flag(tp, ENABLE_APE))
662 		return 0;
663 
664 	switch (locknum) {
665 	case TG3_APE_LOCK_GPIO:
666 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
667 			return 0;
668 	case TG3_APE_LOCK_GRC:
669 	case TG3_APE_LOCK_MEM:
670 		if (!tp->pci_fn)
671 			bit = APE_LOCK_REQ_DRIVER;
672 		else
673 			bit = 1 << tp->pci_fn;
674 		break;
675 	case TG3_APE_LOCK_PHY0:
676 	case TG3_APE_LOCK_PHY1:
677 	case TG3_APE_LOCK_PHY2:
678 	case TG3_APE_LOCK_PHY3:
679 		bit = APE_LOCK_REQ_DRIVER;
680 		break;
681 	default:
682 		return -EINVAL;
683 	}
684 
685 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
686 		req = TG3_APE_LOCK_REQ;
687 		gnt = TG3_APE_LOCK_GRANT;
688 	} else {
689 		req = TG3_APE_PER_LOCK_REQ;
690 		gnt = TG3_APE_PER_LOCK_GRANT;
691 	}
692 
693 	off = 4 * locknum;
694 
695 	tg3_ape_write32(tp, req + off, bit);
696 
697 	/* Wait for up to 1 millisecond to acquire lock. */
698 	for (i = 0; i < 100; i++) {
699 		status = tg3_ape_read32(tp, gnt + off);
700 		if (status == bit)
701 			break;
702 		udelay(10);
703 	}
704 
705 	if (status != bit) {
706 		/* Revoke the lock request. */
707 		tg3_ape_write32(tp, gnt + off, bit);
708 		ret = -EBUSY;
709 	}
710 
711 	return ret;
712 }
713 
714 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
715 {
716 	u32 gnt, bit;
717 
718 	if (!tg3_flag(tp, ENABLE_APE))
719 		return;
720 
721 	switch (locknum) {
722 	case TG3_APE_LOCK_GPIO:
723 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
724 			return;
725 	case TG3_APE_LOCK_GRC:
726 	case TG3_APE_LOCK_MEM:
727 		if (!tp->pci_fn)
728 			bit = APE_LOCK_GRANT_DRIVER;
729 		else
730 			bit = 1 << tp->pci_fn;
731 		break;
732 	case TG3_APE_LOCK_PHY0:
733 	case TG3_APE_LOCK_PHY1:
734 	case TG3_APE_LOCK_PHY2:
735 	case TG3_APE_LOCK_PHY3:
736 		bit = APE_LOCK_GRANT_DRIVER;
737 		break;
738 	default:
739 		return;
740 	}
741 
742 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
743 		gnt = TG3_APE_LOCK_GRANT;
744 	else
745 		gnt = TG3_APE_PER_LOCK_GRANT;
746 
747 	tg3_ape_write32(tp, gnt + 4 * locknum, bit);
748 }
749 
750 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
751 {
752 	u32 apedata;
753 
754 	while (timeout_us) {
755 		if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
756 			return -EBUSY;
757 
758 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
759 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
760 			break;
761 
762 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
763 
764 		udelay(10);
765 		timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
766 	}
767 
768 	return timeout_us ? 0 : -EBUSY;
769 }
770 
771 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
772 {
773 	u32 i, apedata;
774 
775 	for (i = 0; i < timeout_us / 10; i++) {
776 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
777 
778 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
779 			break;
780 
781 		udelay(10);
782 	}
783 
784 	return i == timeout_us / 10;
785 }
786 
787 int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, u32 len)
788 {
789 	int err;
790 	u32 i, bufoff, msgoff, maxlen, apedata;
791 
792 	if (!tg3_flag(tp, APE_HAS_NCSI))
793 		return 0;
794 
795 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
796 	if (apedata != APE_SEG_SIG_MAGIC)
797 		return -ENODEV;
798 
799 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
800 	if (!(apedata & APE_FW_STATUS_READY))
801 		return -EAGAIN;
802 
803 	bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
804 		 TG3_APE_SHMEM_BASE;
805 	msgoff = bufoff + 2 * sizeof(u32);
806 	maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
807 
808 	while (len) {
809 		u32 length;
810 
811 		/* Cap xfer sizes to scratchpad limits. */
812 		length = (len > maxlen) ? maxlen : len;
813 		len -= length;
814 
815 		apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
816 		if (!(apedata & APE_FW_STATUS_READY))
817 			return -EAGAIN;
818 
819 		/* Wait for up to 1 msec for APE to service previous event. */
820 		err = tg3_ape_event_lock(tp, 1000);
821 		if (err)
822 			return err;
823 
824 		apedata = APE_EVENT_STATUS_DRIVER_EVNT |
825 			  APE_EVENT_STATUS_SCRTCHPD_READ |
826 			  APE_EVENT_STATUS_EVENT_PENDING;
827 		tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
828 
829 		tg3_ape_write32(tp, bufoff, base_off);
830 		tg3_ape_write32(tp, bufoff + sizeof(u32), length);
831 
832 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
833 		tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
834 
835 		base_off += length;
836 
837 		if (tg3_ape_wait_for_event(tp, 30000))
838 			return -EAGAIN;
839 
840 		for (i = 0; length; i += 4, length -= 4) {
841 			u32 val = tg3_ape_read32(tp, msgoff + i);
842 			memcpy(data, &val, sizeof(u32));
843 			data++;
844 		}
845 	}
846 
847 	return 0;
848 }
849 
850 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
851 {
852 	int err;
853 	u32 apedata;
854 
855 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
856 	if (apedata != APE_SEG_SIG_MAGIC)
857 		return -EAGAIN;
858 
859 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
860 	if (!(apedata & APE_FW_STATUS_READY))
861 		return -EAGAIN;
862 
863 	/* Wait for up to 1 millisecond for APE to service previous event. */
864 	err = tg3_ape_event_lock(tp, 1000);
865 	if (err)
866 		return err;
867 
868 	tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
869 			event | APE_EVENT_STATUS_EVENT_PENDING);
870 
871 	tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
872 	tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
873 
874 	return 0;
875 }
876 
877 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
878 {
879 	u32 event;
880 	u32 apedata;
881 
882 	if (!tg3_flag(tp, ENABLE_APE))
883 		return;
884 
885 	switch (kind) {
886 	case RESET_KIND_INIT:
887 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
888 				APE_HOST_SEG_SIG_MAGIC);
889 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
890 				APE_HOST_SEG_LEN_MAGIC);
891 		apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
892 		tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
893 		tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
894 			APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
895 		tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
896 				APE_HOST_BEHAV_NO_PHYLOCK);
897 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
898 				    TG3_APE_HOST_DRVR_STATE_START);
899 
900 		event = APE_EVENT_STATUS_STATE_START;
901 		break;
902 	case RESET_KIND_SHUTDOWN:
903 		/* With the interface we are currently using,
904 		 * APE does not track driver state.  Wiping
905 		 * out the HOST SEGMENT SIGNATURE forces
906 		 * the APE to assume OS absent status.
907 		 */
908 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
909 
910 		if (device_may_wakeup(&tp->pdev->dev) &&
911 		    tg3_flag(tp, WOL_ENABLE)) {
912 			tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
913 					    TG3_APE_HOST_WOL_SPEED_AUTO);
914 			apedata = TG3_APE_HOST_DRVR_STATE_WOL;
915 		} else
916 			apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
917 
918 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
919 
920 		event = APE_EVENT_STATUS_STATE_UNLOAD;
921 		break;
922 	case RESET_KIND_SUSPEND:
923 		event = APE_EVENT_STATUS_STATE_SUSPEND;
924 		break;
925 	default:
926 		return;
927 	}
928 
929 	event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
930 
931 	tg3_ape_send_event(tp, event);
932 }
933 
934 static void tg3_disable_ints(struct tg3 *tp)
935 {
936 	int i;
937 
938 	tw32(TG3PCI_MISC_HOST_CTRL,
939 	     (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
940 	for (i = 0; i < tp->irq_max; i++)
941 		tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
942 }
943 
944 static void tg3_enable_ints(struct tg3 *tp)
945 {
946 	int i;
947 
948 	tp->irq_sync = 0;
949 	wmb();
950 
951 	tw32(TG3PCI_MISC_HOST_CTRL,
952 	     (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
953 
954 	tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
955 	for (i = 0; i < tp->irq_cnt; i++) {
956 		struct tg3_napi *tnapi = &tp->napi[i];
957 
958 		tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
959 		if (tg3_flag(tp, 1SHOT_MSI))
960 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
961 
962 		tp->coal_now |= tnapi->coal_now;
963 	}
964 
965 	/* Force an initial interrupt */
966 	if (!tg3_flag(tp, TAGGED_STATUS) &&
967 	    (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
968 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
969 	else
970 		tw32(HOSTCC_MODE, tp->coal_now);
971 
972 	tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
973 }
974 
975 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
976 {
977 	struct tg3 *tp = tnapi->tp;
978 	struct tg3_hw_status *sblk = tnapi->hw_status;
979 	unsigned int work_exists = 0;
980 
981 	/* check for phy events */
982 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
983 		if (sblk->status & SD_STATUS_LINK_CHG)
984 			work_exists = 1;
985 	}
986 
987 	/* check for TX work to do */
988 	if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
989 		work_exists = 1;
990 
991 	/* check for RX work to do */
992 	if (tnapi->rx_rcb_prod_idx &&
993 	    *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
994 		work_exists = 1;
995 
996 	return work_exists;
997 }
998 
999 /* tg3_int_reenable
1000  *  similar to tg3_enable_ints, but it accurately determines whether there
1001  *  is new work pending and can return without flushing the PIO write
1002  *  which reenables interrupts
1003  */
1004 static void tg3_int_reenable(struct tg3_napi *tnapi)
1005 {
1006 	struct tg3 *tp = tnapi->tp;
1007 
1008 	tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1009 	mmiowb();
1010 
1011 	/* When doing tagged status, this work check is unnecessary.
1012 	 * The last_tag we write above tells the chip which piece of
1013 	 * work we've completed.
1014 	 */
1015 	if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1016 		tw32(HOSTCC_MODE, tp->coalesce_mode |
1017 		     HOSTCC_MODE_ENABLE | tnapi->coal_now);
1018 }
1019 
1020 static void tg3_switch_clocks(struct tg3 *tp)
1021 {
1022 	u32 clock_ctrl;
1023 	u32 orig_clock_ctrl;
1024 
1025 	if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1026 		return;
1027 
1028 	clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1029 
1030 	orig_clock_ctrl = clock_ctrl;
1031 	clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1032 		       CLOCK_CTRL_CLKRUN_OENABLE |
1033 		       0x1f);
1034 	tp->pci_clock_ctrl = clock_ctrl;
1035 
1036 	if (tg3_flag(tp, 5705_PLUS)) {
1037 		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1038 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
1039 				    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1040 		}
1041 	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1042 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1043 			    clock_ctrl |
1044 			    (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1045 			    40);
1046 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1047 			    clock_ctrl | (CLOCK_CTRL_ALTCLK),
1048 			    40);
1049 	}
1050 	tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1051 }
1052 
1053 #define PHY_BUSY_LOOPS	5000
1054 
1055 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1056 {
1057 	u32 frame_val;
1058 	unsigned int loops;
1059 	int ret;
1060 
1061 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1062 		tw32_f(MAC_MI_MODE,
1063 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1064 		udelay(80);
1065 	}
1066 
1067 	tg3_ape_lock(tp, tp->phy_ape_lock);
1068 
1069 	*val = 0x0;
1070 
1071 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1072 		      MI_COM_PHY_ADDR_MASK);
1073 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1074 		      MI_COM_REG_ADDR_MASK);
1075 	frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1076 
1077 	tw32_f(MAC_MI_COM, frame_val);
1078 
1079 	loops = PHY_BUSY_LOOPS;
1080 	while (loops != 0) {
1081 		udelay(10);
1082 		frame_val = tr32(MAC_MI_COM);
1083 
1084 		if ((frame_val & MI_COM_BUSY) == 0) {
1085 			udelay(5);
1086 			frame_val = tr32(MAC_MI_COM);
1087 			break;
1088 		}
1089 		loops -= 1;
1090 	}
1091 
1092 	ret = -EBUSY;
1093 	if (loops != 0) {
1094 		*val = frame_val & MI_COM_DATA_MASK;
1095 		ret = 0;
1096 	}
1097 
1098 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1099 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1100 		udelay(80);
1101 	}
1102 
1103 	tg3_ape_unlock(tp, tp->phy_ape_lock);
1104 
1105 	return ret;
1106 }
1107 
1108 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1109 {
1110 	u32 frame_val;
1111 	unsigned int loops;
1112 	int ret;
1113 
1114 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1115 	    (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1116 		return 0;
1117 
1118 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1119 		tw32_f(MAC_MI_MODE,
1120 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1121 		udelay(80);
1122 	}
1123 
1124 	tg3_ape_lock(tp, tp->phy_ape_lock);
1125 
1126 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1127 		      MI_COM_PHY_ADDR_MASK);
1128 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1129 		      MI_COM_REG_ADDR_MASK);
1130 	frame_val |= (val & MI_COM_DATA_MASK);
1131 	frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1132 
1133 	tw32_f(MAC_MI_COM, frame_val);
1134 
1135 	loops = PHY_BUSY_LOOPS;
1136 	while (loops != 0) {
1137 		udelay(10);
1138 		frame_val = tr32(MAC_MI_COM);
1139 		if ((frame_val & MI_COM_BUSY) == 0) {
1140 			udelay(5);
1141 			frame_val = tr32(MAC_MI_COM);
1142 			break;
1143 		}
1144 		loops -= 1;
1145 	}
1146 
1147 	ret = -EBUSY;
1148 	if (loops != 0)
1149 		ret = 0;
1150 
1151 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1152 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1153 		udelay(80);
1154 	}
1155 
1156 	tg3_ape_unlock(tp, tp->phy_ape_lock);
1157 
1158 	return ret;
1159 }
1160 
1161 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1162 {
1163 	int err;
1164 
1165 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1166 	if (err)
1167 		goto done;
1168 
1169 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1170 	if (err)
1171 		goto done;
1172 
1173 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1174 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1175 	if (err)
1176 		goto done;
1177 
1178 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1179 
1180 done:
1181 	return err;
1182 }
1183 
1184 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1185 {
1186 	int err;
1187 
1188 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1189 	if (err)
1190 		goto done;
1191 
1192 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1193 	if (err)
1194 		goto done;
1195 
1196 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1197 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1198 	if (err)
1199 		goto done;
1200 
1201 	err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1202 
1203 done:
1204 	return err;
1205 }
1206 
1207 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1208 {
1209 	int err;
1210 
1211 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1212 	if (!err)
1213 		err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1214 
1215 	return err;
1216 }
1217 
1218 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1219 {
1220 	int err;
1221 
1222 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1223 	if (!err)
1224 		err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1225 
1226 	return err;
1227 }
1228 
1229 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1230 {
1231 	int err;
1232 
1233 	err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1234 			   (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1235 			   MII_TG3_AUXCTL_SHDWSEL_MISC);
1236 	if (!err)
1237 		err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1238 
1239 	return err;
1240 }
1241 
1242 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1243 {
1244 	if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1245 		set |= MII_TG3_AUXCTL_MISC_WREN;
1246 
1247 	return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1248 }
1249 
1250 #define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \
1251 	tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1252 			     MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \
1253 			     MII_TG3_AUXCTL_ACTL_TX_6DB)
1254 
1255 #define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \
1256 	tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1257 			     MII_TG3_AUXCTL_ACTL_TX_6DB);
1258 
1259 static int tg3_bmcr_reset(struct tg3 *tp)
1260 {
1261 	u32 phy_control;
1262 	int limit, err;
1263 
1264 	/* OK, reset it, and poll the BMCR_RESET bit until it
1265 	 * clears or we time out.
1266 	 */
1267 	phy_control = BMCR_RESET;
1268 	err = tg3_writephy(tp, MII_BMCR, phy_control);
1269 	if (err != 0)
1270 		return -EBUSY;
1271 
1272 	limit = 5000;
1273 	while (limit--) {
1274 		err = tg3_readphy(tp, MII_BMCR, &phy_control);
1275 		if (err != 0)
1276 			return -EBUSY;
1277 
1278 		if ((phy_control & BMCR_RESET) == 0) {
1279 			udelay(40);
1280 			break;
1281 		}
1282 		udelay(10);
1283 	}
1284 	if (limit < 0)
1285 		return -EBUSY;
1286 
1287 	return 0;
1288 }
1289 
1290 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1291 {
1292 	struct tg3 *tp = bp->priv;
1293 	u32 val;
1294 
1295 	spin_lock_bh(&tp->lock);
1296 
1297 	if (tg3_readphy(tp, reg, &val))
1298 		val = -EIO;
1299 
1300 	spin_unlock_bh(&tp->lock);
1301 
1302 	return val;
1303 }
1304 
1305 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1306 {
1307 	struct tg3 *tp = bp->priv;
1308 	u32 ret = 0;
1309 
1310 	spin_lock_bh(&tp->lock);
1311 
1312 	if (tg3_writephy(tp, reg, val))
1313 		ret = -EIO;
1314 
1315 	spin_unlock_bh(&tp->lock);
1316 
1317 	return ret;
1318 }
1319 
1320 static int tg3_mdio_reset(struct mii_bus *bp)
1321 {
1322 	return 0;
1323 }
1324 
1325 static void tg3_mdio_config_5785(struct tg3 *tp)
1326 {
1327 	u32 val;
1328 	struct phy_device *phydev;
1329 
1330 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1331 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1332 	case PHY_ID_BCM50610:
1333 	case PHY_ID_BCM50610M:
1334 		val = MAC_PHYCFG2_50610_LED_MODES;
1335 		break;
1336 	case PHY_ID_BCMAC131:
1337 		val = MAC_PHYCFG2_AC131_LED_MODES;
1338 		break;
1339 	case PHY_ID_RTL8211C:
1340 		val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1341 		break;
1342 	case PHY_ID_RTL8201E:
1343 		val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1344 		break;
1345 	default:
1346 		return;
1347 	}
1348 
1349 	if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1350 		tw32(MAC_PHYCFG2, val);
1351 
1352 		val = tr32(MAC_PHYCFG1);
1353 		val &= ~(MAC_PHYCFG1_RGMII_INT |
1354 			 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1355 		val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1356 		tw32(MAC_PHYCFG1, val);
1357 
1358 		return;
1359 	}
1360 
1361 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1362 		val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1363 		       MAC_PHYCFG2_FMODE_MASK_MASK |
1364 		       MAC_PHYCFG2_GMODE_MASK_MASK |
1365 		       MAC_PHYCFG2_ACT_MASK_MASK   |
1366 		       MAC_PHYCFG2_QUAL_MASK_MASK |
1367 		       MAC_PHYCFG2_INBAND_ENABLE;
1368 
1369 	tw32(MAC_PHYCFG2, val);
1370 
1371 	val = tr32(MAC_PHYCFG1);
1372 	val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1373 		 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1374 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1375 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1376 			val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1377 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1378 			val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1379 	}
1380 	val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1381 	       MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1382 	tw32(MAC_PHYCFG1, val);
1383 
1384 	val = tr32(MAC_EXT_RGMII_MODE);
1385 	val &= ~(MAC_RGMII_MODE_RX_INT_B |
1386 		 MAC_RGMII_MODE_RX_QUALITY |
1387 		 MAC_RGMII_MODE_RX_ACTIVITY |
1388 		 MAC_RGMII_MODE_RX_ENG_DET |
1389 		 MAC_RGMII_MODE_TX_ENABLE |
1390 		 MAC_RGMII_MODE_TX_LOWPWR |
1391 		 MAC_RGMII_MODE_TX_RESET);
1392 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1393 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1394 			val |= MAC_RGMII_MODE_RX_INT_B |
1395 			       MAC_RGMII_MODE_RX_QUALITY |
1396 			       MAC_RGMII_MODE_RX_ACTIVITY |
1397 			       MAC_RGMII_MODE_RX_ENG_DET;
1398 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1399 			val |= MAC_RGMII_MODE_TX_ENABLE |
1400 			       MAC_RGMII_MODE_TX_LOWPWR |
1401 			       MAC_RGMII_MODE_TX_RESET;
1402 	}
1403 	tw32(MAC_EXT_RGMII_MODE, val);
1404 }
1405 
1406 static void tg3_mdio_start(struct tg3 *tp)
1407 {
1408 	tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1409 	tw32_f(MAC_MI_MODE, tp->mi_mode);
1410 	udelay(80);
1411 
1412 	if (tg3_flag(tp, MDIOBUS_INITED) &&
1413 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1414 		tg3_mdio_config_5785(tp);
1415 }
1416 
1417 static int tg3_mdio_init(struct tg3 *tp)
1418 {
1419 	int i;
1420 	u32 reg;
1421 	struct phy_device *phydev;
1422 
1423 	if (tg3_flag(tp, 5717_PLUS)) {
1424 		u32 is_serdes;
1425 
1426 		tp->phy_addr = tp->pci_fn + 1;
1427 
1428 		if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0)
1429 			is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1430 		else
1431 			is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1432 				    TG3_CPMU_PHY_STRAP_IS_SERDES;
1433 		if (is_serdes)
1434 			tp->phy_addr += 7;
1435 	} else
1436 		tp->phy_addr = TG3_PHY_MII_ADDR;
1437 
1438 	tg3_mdio_start(tp);
1439 
1440 	if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1441 		return 0;
1442 
1443 	tp->mdio_bus = mdiobus_alloc();
1444 	if (tp->mdio_bus == NULL)
1445 		return -ENOMEM;
1446 
1447 	tp->mdio_bus->name     = "tg3 mdio bus";
1448 	snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1449 		 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1450 	tp->mdio_bus->priv     = tp;
1451 	tp->mdio_bus->parent   = &tp->pdev->dev;
1452 	tp->mdio_bus->read     = &tg3_mdio_read;
1453 	tp->mdio_bus->write    = &tg3_mdio_write;
1454 	tp->mdio_bus->reset    = &tg3_mdio_reset;
1455 	tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
1456 	tp->mdio_bus->irq      = &tp->mdio_irq[0];
1457 
1458 	for (i = 0; i < PHY_MAX_ADDR; i++)
1459 		tp->mdio_bus->irq[i] = PHY_POLL;
1460 
1461 	/* The bus registration will look for all the PHYs on the mdio bus.
1462 	 * Unfortunately, it does not ensure the PHY is powered up before
1463 	 * accessing the PHY ID registers.  A chip reset is the
1464 	 * quickest way to bring the device back to an operational state..
1465 	 */
1466 	if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1467 		tg3_bmcr_reset(tp);
1468 
1469 	i = mdiobus_register(tp->mdio_bus);
1470 	if (i) {
1471 		dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1472 		mdiobus_free(tp->mdio_bus);
1473 		return i;
1474 	}
1475 
1476 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1477 
1478 	if (!phydev || !phydev->drv) {
1479 		dev_warn(&tp->pdev->dev, "No PHY devices\n");
1480 		mdiobus_unregister(tp->mdio_bus);
1481 		mdiobus_free(tp->mdio_bus);
1482 		return -ENODEV;
1483 	}
1484 
1485 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1486 	case PHY_ID_BCM57780:
1487 		phydev->interface = PHY_INTERFACE_MODE_GMII;
1488 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1489 		break;
1490 	case PHY_ID_BCM50610:
1491 	case PHY_ID_BCM50610M:
1492 		phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1493 				     PHY_BRCM_RX_REFCLK_UNUSED |
1494 				     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1495 				     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1496 		if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1497 			phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1498 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1499 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1500 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1501 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1502 		/* fallthru */
1503 	case PHY_ID_RTL8211C:
1504 		phydev->interface = PHY_INTERFACE_MODE_RGMII;
1505 		break;
1506 	case PHY_ID_RTL8201E:
1507 	case PHY_ID_BCMAC131:
1508 		phydev->interface = PHY_INTERFACE_MODE_MII;
1509 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1510 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
1511 		break;
1512 	}
1513 
1514 	tg3_flag_set(tp, MDIOBUS_INITED);
1515 
1516 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1517 		tg3_mdio_config_5785(tp);
1518 
1519 	return 0;
1520 }
1521 
1522 static void tg3_mdio_fini(struct tg3 *tp)
1523 {
1524 	if (tg3_flag(tp, MDIOBUS_INITED)) {
1525 		tg3_flag_clear(tp, MDIOBUS_INITED);
1526 		mdiobus_unregister(tp->mdio_bus);
1527 		mdiobus_free(tp->mdio_bus);
1528 	}
1529 }
1530 
1531 /* tp->lock is held. */
1532 static inline void tg3_generate_fw_event(struct tg3 *tp)
1533 {
1534 	u32 val;
1535 
1536 	val = tr32(GRC_RX_CPU_EVENT);
1537 	val |= GRC_RX_CPU_DRIVER_EVENT;
1538 	tw32_f(GRC_RX_CPU_EVENT, val);
1539 
1540 	tp->last_event_jiffies = jiffies;
1541 }
1542 
1543 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1544 
1545 /* tp->lock is held. */
1546 static void tg3_wait_for_event_ack(struct tg3 *tp)
1547 {
1548 	int i;
1549 	unsigned int delay_cnt;
1550 	long time_remain;
1551 
1552 	/* If enough time has passed, no wait is necessary. */
1553 	time_remain = (long)(tp->last_event_jiffies + 1 +
1554 		      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1555 		      (long)jiffies;
1556 	if (time_remain < 0)
1557 		return;
1558 
1559 	/* Check if we can shorten the wait time. */
1560 	delay_cnt = jiffies_to_usecs(time_remain);
1561 	if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1562 		delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1563 	delay_cnt = (delay_cnt >> 3) + 1;
1564 
1565 	for (i = 0; i < delay_cnt; i++) {
1566 		if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1567 			break;
1568 		udelay(8);
1569 	}
1570 }
1571 
1572 /* tp->lock is held. */
1573 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1574 {
1575 	u32 reg, val;
1576 
1577 	val = 0;
1578 	if (!tg3_readphy(tp, MII_BMCR, &reg))
1579 		val = reg << 16;
1580 	if (!tg3_readphy(tp, MII_BMSR, &reg))
1581 		val |= (reg & 0xffff);
1582 	*data++ = val;
1583 
1584 	val = 0;
1585 	if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1586 		val = reg << 16;
1587 	if (!tg3_readphy(tp, MII_LPA, &reg))
1588 		val |= (reg & 0xffff);
1589 	*data++ = val;
1590 
1591 	val = 0;
1592 	if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1593 		if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1594 			val = reg << 16;
1595 		if (!tg3_readphy(tp, MII_STAT1000, &reg))
1596 			val |= (reg & 0xffff);
1597 	}
1598 	*data++ = val;
1599 
1600 	if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1601 		val = reg << 16;
1602 	else
1603 		val = 0;
1604 	*data++ = val;
1605 }
1606 
1607 /* tp->lock is held. */
1608 static void tg3_ump_link_report(struct tg3 *tp)
1609 {
1610 	u32 data[4];
1611 
1612 	if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1613 		return;
1614 
1615 	tg3_phy_gather_ump_data(tp, data);
1616 
1617 	tg3_wait_for_event_ack(tp);
1618 
1619 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1620 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1621 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1622 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1623 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1624 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1625 
1626 	tg3_generate_fw_event(tp);
1627 }
1628 
1629 /* tp->lock is held. */
1630 static void tg3_stop_fw(struct tg3 *tp)
1631 {
1632 	if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1633 		/* Wait for RX cpu to ACK the previous event. */
1634 		tg3_wait_for_event_ack(tp);
1635 
1636 		tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1637 
1638 		tg3_generate_fw_event(tp);
1639 
1640 		/* Wait for RX cpu to ACK this event. */
1641 		tg3_wait_for_event_ack(tp);
1642 	}
1643 }
1644 
1645 /* tp->lock is held. */
1646 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1647 {
1648 	tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1649 		      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1650 
1651 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1652 		switch (kind) {
1653 		case RESET_KIND_INIT:
1654 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1655 				      DRV_STATE_START);
1656 			break;
1657 
1658 		case RESET_KIND_SHUTDOWN:
1659 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1660 				      DRV_STATE_UNLOAD);
1661 			break;
1662 
1663 		case RESET_KIND_SUSPEND:
1664 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1665 				      DRV_STATE_SUSPEND);
1666 			break;
1667 
1668 		default:
1669 			break;
1670 		}
1671 	}
1672 
1673 	if (kind == RESET_KIND_INIT ||
1674 	    kind == RESET_KIND_SUSPEND)
1675 		tg3_ape_driver_state_change(tp, kind);
1676 }
1677 
1678 /* tp->lock is held. */
1679 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1680 {
1681 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1682 		switch (kind) {
1683 		case RESET_KIND_INIT:
1684 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1685 				      DRV_STATE_START_DONE);
1686 			break;
1687 
1688 		case RESET_KIND_SHUTDOWN:
1689 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1690 				      DRV_STATE_UNLOAD_DONE);
1691 			break;
1692 
1693 		default:
1694 			break;
1695 		}
1696 	}
1697 
1698 	if (kind == RESET_KIND_SHUTDOWN)
1699 		tg3_ape_driver_state_change(tp, kind);
1700 }
1701 
1702 /* tp->lock is held. */
1703 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1704 {
1705 	if (tg3_flag(tp, ENABLE_ASF)) {
1706 		switch (kind) {
1707 		case RESET_KIND_INIT:
1708 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1709 				      DRV_STATE_START);
1710 			break;
1711 
1712 		case RESET_KIND_SHUTDOWN:
1713 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1714 				      DRV_STATE_UNLOAD);
1715 			break;
1716 
1717 		case RESET_KIND_SUSPEND:
1718 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1719 				      DRV_STATE_SUSPEND);
1720 			break;
1721 
1722 		default:
1723 			break;
1724 		}
1725 	}
1726 }
1727 
1728 static int tg3_poll_fw(struct tg3 *tp)
1729 {
1730 	int i;
1731 	u32 val;
1732 
1733 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1734 		/* Wait up to 20ms for init done. */
1735 		for (i = 0; i < 200; i++) {
1736 			if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1737 				return 0;
1738 			udelay(100);
1739 		}
1740 		return -ENODEV;
1741 	}
1742 
1743 	/* Wait for firmware initialization to complete. */
1744 	for (i = 0; i < 100000; i++) {
1745 		tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1746 		if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1747 			break;
1748 		udelay(10);
1749 	}
1750 
1751 	/* Chip might not be fitted with firmware.  Some Sun onboard
1752 	 * parts are configured like that.  So don't signal the timeout
1753 	 * of the above loop as an error, but do report the lack of
1754 	 * running firmware once.
1755 	 */
1756 	if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1757 		tg3_flag_set(tp, NO_FWARE_REPORTED);
1758 
1759 		netdev_info(tp->dev, "No firmware running\n");
1760 	}
1761 
1762 	if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
1763 		/* The 57765 A0 needs a little more
1764 		 * time to do some important work.
1765 		 */
1766 		mdelay(10);
1767 	}
1768 
1769 	return 0;
1770 }
1771 
1772 static void tg3_link_report(struct tg3 *tp)
1773 {
1774 	if (!netif_carrier_ok(tp->dev)) {
1775 		netif_info(tp, link, tp->dev, "Link is down\n");
1776 		tg3_ump_link_report(tp);
1777 	} else if (netif_msg_link(tp)) {
1778 		netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1779 			    (tp->link_config.active_speed == SPEED_1000 ?
1780 			     1000 :
1781 			     (tp->link_config.active_speed == SPEED_100 ?
1782 			      100 : 10)),
1783 			    (tp->link_config.active_duplex == DUPLEX_FULL ?
1784 			     "full" : "half"));
1785 
1786 		netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1787 			    (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1788 			    "on" : "off",
1789 			    (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1790 			    "on" : "off");
1791 
1792 		if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1793 			netdev_info(tp->dev, "EEE is %s\n",
1794 				    tp->setlpicnt ? "enabled" : "disabled");
1795 
1796 		tg3_ump_link_report(tp);
1797 	}
1798 }
1799 
1800 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1801 {
1802 	u16 miireg;
1803 
1804 	if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1805 		miireg = ADVERTISE_1000XPAUSE;
1806 	else if (flow_ctrl & FLOW_CTRL_TX)
1807 		miireg = ADVERTISE_1000XPSE_ASYM;
1808 	else if (flow_ctrl & FLOW_CTRL_RX)
1809 		miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1810 	else
1811 		miireg = 0;
1812 
1813 	return miireg;
1814 }
1815 
1816 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1817 {
1818 	u8 cap = 0;
1819 
1820 	if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1821 		cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1822 	} else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1823 		if (lcladv & ADVERTISE_1000XPAUSE)
1824 			cap = FLOW_CTRL_RX;
1825 		if (rmtadv & ADVERTISE_1000XPAUSE)
1826 			cap = FLOW_CTRL_TX;
1827 	}
1828 
1829 	return cap;
1830 }
1831 
1832 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1833 {
1834 	u8 autoneg;
1835 	u8 flowctrl = 0;
1836 	u32 old_rx_mode = tp->rx_mode;
1837 	u32 old_tx_mode = tp->tx_mode;
1838 
1839 	if (tg3_flag(tp, USE_PHYLIB))
1840 		autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
1841 	else
1842 		autoneg = tp->link_config.autoneg;
1843 
1844 	if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1845 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1846 			flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1847 		else
1848 			flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1849 	} else
1850 		flowctrl = tp->link_config.flowctrl;
1851 
1852 	tp->link_config.active_flowctrl = flowctrl;
1853 
1854 	if (flowctrl & FLOW_CTRL_RX)
1855 		tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1856 	else
1857 		tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1858 
1859 	if (old_rx_mode != tp->rx_mode)
1860 		tw32_f(MAC_RX_MODE, tp->rx_mode);
1861 
1862 	if (flowctrl & FLOW_CTRL_TX)
1863 		tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1864 	else
1865 		tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1866 
1867 	if (old_tx_mode != tp->tx_mode)
1868 		tw32_f(MAC_TX_MODE, tp->tx_mode);
1869 }
1870 
1871 static void tg3_adjust_link(struct net_device *dev)
1872 {
1873 	u8 oldflowctrl, linkmesg = 0;
1874 	u32 mac_mode, lcl_adv, rmt_adv;
1875 	struct tg3 *tp = netdev_priv(dev);
1876 	struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1877 
1878 	spin_lock_bh(&tp->lock);
1879 
1880 	mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
1881 				    MAC_MODE_HALF_DUPLEX);
1882 
1883 	oldflowctrl = tp->link_config.active_flowctrl;
1884 
1885 	if (phydev->link) {
1886 		lcl_adv = 0;
1887 		rmt_adv = 0;
1888 
1889 		if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
1890 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1891 		else if (phydev->speed == SPEED_1000 ||
1892 			 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785)
1893 			mac_mode |= MAC_MODE_PORT_MODE_GMII;
1894 		else
1895 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1896 
1897 		if (phydev->duplex == DUPLEX_HALF)
1898 			mac_mode |= MAC_MODE_HALF_DUPLEX;
1899 		else {
1900 			lcl_adv = mii_advertise_flowctrl(
1901 				  tp->link_config.flowctrl);
1902 
1903 			if (phydev->pause)
1904 				rmt_adv = LPA_PAUSE_CAP;
1905 			if (phydev->asym_pause)
1906 				rmt_adv |= LPA_PAUSE_ASYM;
1907 		}
1908 
1909 		tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1910 	} else
1911 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
1912 
1913 	if (mac_mode != tp->mac_mode) {
1914 		tp->mac_mode = mac_mode;
1915 		tw32_f(MAC_MODE, tp->mac_mode);
1916 		udelay(40);
1917 	}
1918 
1919 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
1920 		if (phydev->speed == SPEED_10)
1921 			tw32(MAC_MI_STAT,
1922 			     MAC_MI_STAT_10MBPS_MODE |
1923 			     MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1924 		else
1925 			tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1926 	}
1927 
1928 	if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
1929 		tw32(MAC_TX_LENGTHS,
1930 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1931 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1932 		      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
1933 	else
1934 		tw32(MAC_TX_LENGTHS,
1935 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1936 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1937 		      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
1938 
1939 	if (phydev->link != tp->old_link ||
1940 	    phydev->speed != tp->link_config.active_speed ||
1941 	    phydev->duplex != tp->link_config.active_duplex ||
1942 	    oldflowctrl != tp->link_config.active_flowctrl)
1943 		linkmesg = 1;
1944 
1945 	tp->old_link = phydev->link;
1946 	tp->link_config.active_speed = phydev->speed;
1947 	tp->link_config.active_duplex = phydev->duplex;
1948 
1949 	spin_unlock_bh(&tp->lock);
1950 
1951 	if (linkmesg)
1952 		tg3_link_report(tp);
1953 }
1954 
1955 static int tg3_phy_init(struct tg3 *tp)
1956 {
1957 	struct phy_device *phydev;
1958 
1959 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
1960 		return 0;
1961 
1962 	/* Bring the PHY back to a known state. */
1963 	tg3_bmcr_reset(tp);
1964 
1965 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1966 
1967 	/* Attach the MAC to the PHY. */
1968 	phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link,
1969 			     phydev->dev_flags, phydev->interface);
1970 	if (IS_ERR(phydev)) {
1971 		dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
1972 		return PTR_ERR(phydev);
1973 	}
1974 
1975 	/* Mask with MAC supported features. */
1976 	switch (phydev->interface) {
1977 	case PHY_INTERFACE_MODE_GMII:
1978 	case PHY_INTERFACE_MODE_RGMII:
1979 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
1980 			phydev->supported &= (PHY_GBIT_FEATURES |
1981 					      SUPPORTED_Pause |
1982 					      SUPPORTED_Asym_Pause);
1983 			break;
1984 		}
1985 		/* fallthru */
1986 	case PHY_INTERFACE_MODE_MII:
1987 		phydev->supported &= (PHY_BASIC_FEATURES |
1988 				      SUPPORTED_Pause |
1989 				      SUPPORTED_Asym_Pause);
1990 		break;
1991 	default:
1992 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
1993 		return -EINVAL;
1994 	}
1995 
1996 	tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
1997 
1998 	phydev->advertising = phydev->supported;
1999 
2000 	return 0;
2001 }
2002 
2003 static void tg3_phy_start(struct tg3 *tp)
2004 {
2005 	struct phy_device *phydev;
2006 
2007 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2008 		return;
2009 
2010 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
2011 
2012 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2013 		tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2014 		phydev->speed = tp->link_config.speed;
2015 		phydev->duplex = tp->link_config.duplex;
2016 		phydev->autoneg = tp->link_config.autoneg;
2017 		phydev->advertising = tp->link_config.advertising;
2018 	}
2019 
2020 	phy_start(phydev);
2021 
2022 	phy_start_aneg(phydev);
2023 }
2024 
2025 static void tg3_phy_stop(struct tg3 *tp)
2026 {
2027 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2028 		return;
2029 
2030 	phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2031 }
2032 
2033 static void tg3_phy_fini(struct tg3 *tp)
2034 {
2035 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2036 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2037 		tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2038 	}
2039 }
2040 
2041 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2042 {
2043 	int err;
2044 	u32 val;
2045 
2046 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2047 		return 0;
2048 
2049 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2050 		/* Cannot do read-modify-write on 5401 */
2051 		err = tg3_phy_auxctl_write(tp,
2052 					   MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2053 					   MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2054 					   0x4c20);
2055 		goto done;
2056 	}
2057 
2058 	err = tg3_phy_auxctl_read(tp,
2059 				  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2060 	if (err)
2061 		return err;
2062 
2063 	val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2064 	err = tg3_phy_auxctl_write(tp,
2065 				   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2066 
2067 done:
2068 	return err;
2069 }
2070 
2071 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2072 {
2073 	u32 phytest;
2074 
2075 	if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2076 		u32 phy;
2077 
2078 		tg3_writephy(tp, MII_TG3_FET_TEST,
2079 			     phytest | MII_TG3_FET_SHADOW_EN);
2080 		if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2081 			if (enable)
2082 				phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2083 			else
2084 				phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2085 			tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2086 		}
2087 		tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2088 	}
2089 }
2090 
2091 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2092 {
2093 	u32 reg;
2094 
2095 	if (!tg3_flag(tp, 5705_PLUS) ||
2096 	    (tg3_flag(tp, 5717_PLUS) &&
2097 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2098 		return;
2099 
2100 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2101 		tg3_phy_fet_toggle_apd(tp, enable);
2102 		return;
2103 	}
2104 
2105 	reg = MII_TG3_MISC_SHDW_WREN |
2106 	      MII_TG3_MISC_SHDW_SCR5_SEL |
2107 	      MII_TG3_MISC_SHDW_SCR5_LPED |
2108 	      MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2109 	      MII_TG3_MISC_SHDW_SCR5_SDTL |
2110 	      MII_TG3_MISC_SHDW_SCR5_C125OE;
2111 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable)
2112 		reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2113 
2114 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2115 
2116 
2117 	reg = MII_TG3_MISC_SHDW_WREN |
2118 	      MII_TG3_MISC_SHDW_APD_SEL |
2119 	      MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2120 	if (enable)
2121 		reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2122 
2123 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2124 }
2125 
2126 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
2127 {
2128 	u32 phy;
2129 
2130 	if (!tg3_flag(tp, 5705_PLUS) ||
2131 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2132 		return;
2133 
2134 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2135 		u32 ephy;
2136 
2137 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2138 			u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2139 
2140 			tg3_writephy(tp, MII_TG3_FET_TEST,
2141 				     ephy | MII_TG3_FET_SHADOW_EN);
2142 			if (!tg3_readphy(tp, reg, &phy)) {
2143 				if (enable)
2144 					phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2145 				else
2146 					phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2147 				tg3_writephy(tp, reg, phy);
2148 			}
2149 			tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2150 		}
2151 	} else {
2152 		int ret;
2153 
2154 		ret = tg3_phy_auxctl_read(tp,
2155 					  MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2156 		if (!ret) {
2157 			if (enable)
2158 				phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2159 			else
2160 				phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2161 			tg3_phy_auxctl_write(tp,
2162 					     MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2163 		}
2164 	}
2165 }
2166 
2167 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2168 {
2169 	int ret;
2170 	u32 val;
2171 
2172 	if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2173 		return;
2174 
2175 	ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2176 	if (!ret)
2177 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2178 				     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2179 }
2180 
2181 static void tg3_phy_apply_otp(struct tg3 *tp)
2182 {
2183 	u32 otp, phy;
2184 
2185 	if (!tp->phy_otp)
2186 		return;
2187 
2188 	otp = tp->phy_otp;
2189 
2190 	if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp))
2191 		return;
2192 
2193 	phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2194 	phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2195 	tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2196 
2197 	phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2198 	      ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2199 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2200 
2201 	phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2202 	phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2203 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2204 
2205 	phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2206 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2207 
2208 	phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2209 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2210 
2211 	phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2212 	      ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2213 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2214 
2215 	TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2216 }
2217 
2218 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
2219 {
2220 	u32 val;
2221 
2222 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2223 		return;
2224 
2225 	tp->setlpicnt = 0;
2226 
2227 	if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2228 	    current_link_up == 1 &&
2229 	    tp->link_config.active_duplex == DUPLEX_FULL &&
2230 	    (tp->link_config.active_speed == SPEED_100 ||
2231 	     tp->link_config.active_speed == SPEED_1000)) {
2232 		u32 eeectl;
2233 
2234 		if (tp->link_config.active_speed == SPEED_1000)
2235 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2236 		else
2237 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2238 
2239 		tw32(TG3_CPMU_EEE_CTRL, eeectl);
2240 
2241 		tg3_phy_cl45_read(tp, MDIO_MMD_AN,
2242 				  TG3_CL45_D7_EEERES_STAT, &val);
2243 
2244 		if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2245 		    val == TG3_CL45_D7_EEERES_STAT_LP_100TX)
2246 			tp->setlpicnt = 2;
2247 	}
2248 
2249 	if (!tp->setlpicnt) {
2250 		if (current_link_up == 1 &&
2251 		   !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2252 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2253 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2254 		}
2255 
2256 		val = tr32(TG3_CPMU_EEE_MODE);
2257 		tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2258 	}
2259 }
2260 
2261 static void tg3_phy_eee_enable(struct tg3 *tp)
2262 {
2263 	u32 val;
2264 
2265 	if (tp->link_config.active_speed == SPEED_1000 &&
2266 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2267 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2268 	     tg3_flag(tp, 57765_CLASS)) &&
2269 	    !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2270 		val = MII_TG3_DSP_TAP26_ALNOKO |
2271 		      MII_TG3_DSP_TAP26_RMRXSTO;
2272 		tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2273 		TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2274 	}
2275 
2276 	val = tr32(TG3_CPMU_EEE_MODE);
2277 	tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2278 }
2279 
2280 static int tg3_wait_macro_done(struct tg3 *tp)
2281 {
2282 	int limit = 100;
2283 
2284 	while (limit--) {
2285 		u32 tmp32;
2286 
2287 		if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2288 			if ((tmp32 & 0x1000) == 0)
2289 				break;
2290 		}
2291 	}
2292 	if (limit < 0)
2293 		return -EBUSY;
2294 
2295 	return 0;
2296 }
2297 
2298 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2299 {
2300 	static const u32 test_pat[4][6] = {
2301 	{ 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2302 	{ 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2303 	{ 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2304 	{ 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2305 	};
2306 	int chan;
2307 
2308 	for (chan = 0; chan < 4; chan++) {
2309 		int i;
2310 
2311 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2312 			     (chan * 0x2000) | 0x0200);
2313 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2314 
2315 		for (i = 0; i < 6; i++)
2316 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2317 				     test_pat[chan][i]);
2318 
2319 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2320 		if (tg3_wait_macro_done(tp)) {
2321 			*resetp = 1;
2322 			return -EBUSY;
2323 		}
2324 
2325 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2326 			     (chan * 0x2000) | 0x0200);
2327 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2328 		if (tg3_wait_macro_done(tp)) {
2329 			*resetp = 1;
2330 			return -EBUSY;
2331 		}
2332 
2333 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2334 		if (tg3_wait_macro_done(tp)) {
2335 			*resetp = 1;
2336 			return -EBUSY;
2337 		}
2338 
2339 		for (i = 0; i < 6; i += 2) {
2340 			u32 low, high;
2341 
2342 			if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2343 			    tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2344 			    tg3_wait_macro_done(tp)) {
2345 				*resetp = 1;
2346 				return -EBUSY;
2347 			}
2348 			low &= 0x7fff;
2349 			high &= 0x000f;
2350 			if (low != test_pat[chan][i] ||
2351 			    high != test_pat[chan][i+1]) {
2352 				tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2353 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2354 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2355 
2356 				return -EBUSY;
2357 			}
2358 		}
2359 	}
2360 
2361 	return 0;
2362 }
2363 
2364 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2365 {
2366 	int chan;
2367 
2368 	for (chan = 0; chan < 4; chan++) {
2369 		int i;
2370 
2371 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2372 			     (chan * 0x2000) | 0x0200);
2373 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2374 		for (i = 0; i < 6; i++)
2375 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2376 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2377 		if (tg3_wait_macro_done(tp))
2378 			return -EBUSY;
2379 	}
2380 
2381 	return 0;
2382 }
2383 
2384 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2385 {
2386 	u32 reg32, phy9_orig;
2387 	int retries, do_phy_reset, err;
2388 
2389 	retries = 10;
2390 	do_phy_reset = 1;
2391 	do {
2392 		if (do_phy_reset) {
2393 			err = tg3_bmcr_reset(tp);
2394 			if (err)
2395 				return err;
2396 			do_phy_reset = 0;
2397 		}
2398 
2399 		/* Disable transmitter and interrupt.  */
2400 		if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2401 			continue;
2402 
2403 		reg32 |= 0x3000;
2404 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2405 
2406 		/* Set full-duplex, 1000 mbps.  */
2407 		tg3_writephy(tp, MII_BMCR,
2408 			     BMCR_FULLDPLX | BMCR_SPEED1000);
2409 
2410 		/* Set to master mode.  */
2411 		if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2412 			continue;
2413 
2414 		tg3_writephy(tp, MII_CTRL1000,
2415 			     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2416 
2417 		err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
2418 		if (err)
2419 			return err;
2420 
2421 		/* Block the PHY control access.  */
2422 		tg3_phydsp_write(tp, 0x8005, 0x0800);
2423 
2424 		err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2425 		if (!err)
2426 			break;
2427 	} while (--retries);
2428 
2429 	err = tg3_phy_reset_chanpat(tp);
2430 	if (err)
2431 		return err;
2432 
2433 	tg3_phydsp_write(tp, 0x8005, 0x0000);
2434 
2435 	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2436 	tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2437 
2438 	TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2439 
2440 	tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2441 
2442 	if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2443 		reg32 &= ~0x3000;
2444 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2445 	} else if (!err)
2446 		err = -EBUSY;
2447 
2448 	return err;
2449 }
2450 
2451 /* This will reset the tigon3 PHY if there is no valid
2452  * link unless the FORCE argument is non-zero.
2453  */
2454 static int tg3_phy_reset(struct tg3 *tp)
2455 {
2456 	u32 val, cpmuctrl;
2457 	int err;
2458 
2459 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2460 		val = tr32(GRC_MISC_CFG);
2461 		tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2462 		udelay(40);
2463 	}
2464 	err  = tg3_readphy(tp, MII_BMSR, &val);
2465 	err |= tg3_readphy(tp, MII_BMSR, &val);
2466 	if (err != 0)
2467 		return -EBUSY;
2468 
2469 	if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
2470 		netif_carrier_off(tp->dev);
2471 		tg3_link_report(tp);
2472 	}
2473 
2474 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2475 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2476 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
2477 		err = tg3_phy_reset_5703_4_5(tp);
2478 		if (err)
2479 			return err;
2480 		goto out;
2481 	}
2482 
2483 	cpmuctrl = 0;
2484 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
2485 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
2486 		cpmuctrl = tr32(TG3_CPMU_CTRL);
2487 		if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2488 			tw32(TG3_CPMU_CTRL,
2489 			     cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2490 	}
2491 
2492 	err = tg3_bmcr_reset(tp);
2493 	if (err)
2494 		return err;
2495 
2496 	if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2497 		val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2498 		tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2499 
2500 		tw32(TG3_CPMU_CTRL, cpmuctrl);
2501 	}
2502 
2503 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2504 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2505 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2506 		if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2507 		    CPMU_LSPD_1000MB_MACCLK_12_5) {
2508 			val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2509 			udelay(40);
2510 			tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2511 		}
2512 	}
2513 
2514 	if (tg3_flag(tp, 5717_PLUS) &&
2515 	    (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2516 		return 0;
2517 
2518 	tg3_phy_apply_otp(tp);
2519 
2520 	if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2521 		tg3_phy_toggle_apd(tp, true);
2522 	else
2523 		tg3_phy_toggle_apd(tp, false);
2524 
2525 out:
2526 	if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2527 	    !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2528 		tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2529 		tg3_phydsp_write(tp, 0x000a, 0x0323);
2530 		TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2531 	}
2532 
2533 	if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2534 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2535 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2536 	}
2537 
2538 	if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2539 		if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2540 			tg3_phydsp_write(tp, 0x000a, 0x310b);
2541 			tg3_phydsp_write(tp, 0x201f, 0x9506);
2542 			tg3_phydsp_write(tp, 0x401f, 0x14e2);
2543 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2544 		}
2545 	} else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2546 		if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2547 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2548 			if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2549 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2550 				tg3_writephy(tp, MII_TG3_TEST1,
2551 					     MII_TG3_TEST1_TRIM_EN | 0x4);
2552 			} else
2553 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2554 
2555 			TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
2556 		}
2557 	}
2558 
2559 	/* Set Extended packet length bit (bit 14) on all chips that */
2560 	/* support jumbo frames */
2561 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2562 		/* Cannot do read-modify-write on 5401 */
2563 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2564 	} else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2565 		/* Set bit 14 with read-modify-write to preserve other bits */
2566 		err = tg3_phy_auxctl_read(tp,
2567 					  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2568 		if (!err)
2569 			tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2570 					   val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2571 	}
2572 
2573 	/* Set phy register 0x10 bit 0 to high fifo elasticity to support
2574 	 * jumbo frames transmission.
2575 	 */
2576 	if (tg3_flag(tp, JUMBO_CAPABLE)) {
2577 		if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2578 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
2579 				     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2580 	}
2581 
2582 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2583 		/* adjust output voltage */
2584 		tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2585 	}
2586 
2587 	tg3_phy_toggle_automdix(tp, 1);
2588 	tg3_phy_set_wirespeed(tp);
2589 	return 0;
2590 }
2591 
2592 #define TG3_GPIO_MSG_DRVR_PRES		 0x00000001
2593 #define TG3_GPIO_MSG_NEED_VAUX		 0x00000002
2594 #define TG3_GPIO_MSG_MASK		 (TG3_GPIO_MSG_DRVR_PRES | \
2595 					  TG3_GPIO_MSG_NEED_VAUX)
2596 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2597 	((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2598 	 (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2599 	 (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2600 	 (TG3_GPIO_MSG_DRVR_PRES << 12))
2601 
2602 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2603 	((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2604 	 (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2605 	 (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2606 	 (TG3_GPIO_MSG_NEED_VAUX << 12))
2607 
2608 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2609 {
2610 	u32 status, shift;
2611 
2612 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2613 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2614 		status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2615 	else
2616 		status = tr32(TG3_CPMU_DRV_STATUS);
2617 
2618 	shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2619 	status &= ~(TG3_GPIO_MSG_MASK << shift);
2620 	status |= (newstat << shift);
2621 
2622 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2623 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2624 		tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2625 	else
2626 		tw32(TG3_CPMU_DRV_STATUS, status);
2627 
2628 	return status >> TG3_APE_GPIO_MSG_SHIFT;
2629 }
2630 
2631 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2632 {
2633 	if (!tg3_flag(tp, IS_NIC))
2634 		return 0;
2635 
2636 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2637 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2638 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2639 		if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2640 			return -EIO;
2641 
2642 		tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2643 
2644 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2645 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2646 
2647 		tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2648 	} else {
2649 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2650 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2651 	}
2652 
2653 	return 0;
2654 }
2655 
2656 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2657 {
2658 	u32 grc_local_ctrl;
2659 
2660 	if (!tg3_flag(tp, IS_NIC) ||
2661 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2662 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)
2663 		return;
2664 
2665 	grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2666 
2667 	tw32_wait_f(GRC_LOCAL_CTRL,
2668 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2669 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2670 
2671 	tw32_wait_f(GRC_LOCAL_CTRL,
2672 		    grc_local_ctrl,
2673 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2674 
2675 	tw32_wait_f(GRC_LOCAL_CTRL,
2676 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2677 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2678 }
2679 
2680 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2681 {
2682 	if (!tg3_flag(tp, IS_NIC))
2683 		return;
2684 
2685 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2686 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2687 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2688 			    (GRC_LCLCTRL_GPIO_OE0 |
2689 			     GRC_LCLCTRL_GPIO_OE1 |
2690 			     GRC_LCLCTRL_GPIO_OE2 |
2691 			     GRC_LCLCTRL_GPIO_OUTPUT0 |
2692 			     GRC_LCLCTRL_GPIO_OUTPUT1),
2693 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2694 	} else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2695 		   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2696 		/* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2697 		u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2698 				     GRC_LCLCTRL_GPIO_OE1 |
2699 				     GRC_LCLCTRL_GPIO_OE2 |
2700 				     GRC_LCLCTRL_GPIO_OUTPUT0 |
2701 				     GRC_LCLCTRL_GPIO_OUTPUT1 |
2702 				     tp->grc_local_ctrl;
2703 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2704 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2705 
2706 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2707 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2708 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2709 
2710 		grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2711 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2712 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2713 	} else {
2714 		u32 no_gpio2;
2715 		u32 grc_local_ctrl = 0;
2716 
2717 		/* Workaround to prevent overdrawing Amps. */
2718 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2719 			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2720 			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2721 				    grc_local_ctrl,
2722 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2723 		}
2724 
2725 		/* On 5753 and variants, GPIO2 cannot be used. */
2726 		no_gpio2 = tp->nic_sram_data_cfg &
2727 			   NIC_SRAM_DATA_CFG_NO_GPIO2;
2728 
2729 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2730 				  GRC_LCLCTRL_GPIO_OE1 |
2731 				  GRC_LCLCTRL_GPIO_OE2 |
2732 				  GRC_LCLCTRL_GPIO_OUTPUT1 |
2733 				  GRC_LCLCTRL_GPIO_OUTPUT2;
2734 		if (no_gpio2) {
2735 			grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2736 					    GRC_LCLCTRL_GPIO_OUTPUT2);
2737 		}
2738 		tw32_wait_f(GRC_LOCAL_CTRL,
2739 			    tp->grc_local_ctrl | grc_local_ctrl,
2740 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2741 
2742 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2743 
2744 		tw32_wait_f(GRC_LOCAL_CTRL,
2745 			    tp->grc_local_ctrl | grc_local_ctrl,
2746 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2747 
2748 		if (!no_gpio2) {
2749 			grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2750 			tw32_wait_f(GRC_LOCAL_CTRL,
2751 				    tp->grc_local_ctrl | grc_local_ctrl,
2752 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2753 		}
2754 	}
2755 }
2756 
2757 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2758 {
2759 	u32 msg = 0;
2760 
2761 	/* Serialize power state transitions */
2762 	if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2763 		return;
2764 
2765 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2766 		msg = TG3_GPIO_MSG_NEED_VAUX;
2767 
2768 	msg = tg3_set_function_status(tp, msg);
2769 
2770 	if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2771 		goto done;
2772 
2773 	if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2774 		tg3_pwrsrc_switch_to_vaux(tp);
2775 	else
2776 		tg3_pwrsrc_die_with_vmain(tp);
2777 
2778 done:
2779 	tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2780 }
2781 
2782 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2783 {
2784 	bool need_vaux = false;
2785 
2786 	/* The GPIOs do something completely different on 57765. */
2787 	if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2788 		return;
2789 
2790 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2791 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2792 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2793 		tg3_frob_aux_power_5717(tp, include_wol ?
2794 					tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2795 		return;
2796 	}
2797 
2798 	if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2799 		struct net_device *dev_peer;
2800 
2801 		dev_peer = pci_get_drvdata(tp->pdev_peer);
2802 
2803 		/* remove_one() may have been run on the peer. */
2804 		if (dev_peer) {
2805 			struct tg3 *tp_peer = netdev_priv(dev_peer);
2806 
2807 			if (tg3_flag(tp_peer, INIT_COMPLETE))
2808 				return;
2809 
2810 			if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2811 			    tg3_flag(tp_peer, ENABLE_ASF))
2812 				need_vaux = true;
2813 		}
2814 	}
2815 
2816 	if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2817 	    tg3_flag(tp, ENABLE_ASF))
2818 		need_vaux = true;
2819 
2820 	if (need_vaux)
2821 		tg3_pwrsrc_switch_to_vaux(tp);
2822 	else
2823 		tg3_pwrsrc_die_with_vmain(tp);
2824 }
2825 
2826 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
2827 {
2828 	if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
2829 		return 1;
2830 	else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
2831 		if (speed != SPEED_10)
2832 			return 1;
2833 	} else if (speed == SPEED_10)
2834 		return 1;
2835 
2836 	return 0;
2837 }
2838 
2839 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
2840 {
2841 	u32 val;
2842 
2843 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
2844 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
2845 			u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2846 			u32 serdes_cfg = tr32(MAC_SERDES_CFG);
2847 
2848 			sg_dig_ctrl |=
2849 				SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
2850 			tw32(SG_DIG_CTRL, sg_dig_ctrl);
2851 			tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
2852 		}
2853 		return;
2854 	}
2855 
2856 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2857 		tg3_bmcr_reset(tp);
2858 		val = tr32(GRC_MISC_CFG);
2859 		tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
2860 		udelay(40);
2861 		return;
2862 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2863 		u32 phytest;
2864 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2865 			u32 phy;
2866 
2867 			tg3_writephy(tp, MII_ADVERTISE, 0);
2868 			tg3_writephy(tp, MII_BMCR,
2869 				     BMCR_ANENABLE | BMCR_ANRESTART);
2870 
2871 			tg3_writephy(tp, MII_TG3_FET_TEST,
2872 				     phytest | MII_TG3_FET_SHADOW_EN);
2873 			if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
2874 				phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
2875 				tg3_writephy(tp,
2876 					     MII_TG3_FET_SHDW_AUXMODE4,
2877 					     phy);
2878 			}
2879 			tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2880 		}
2881 		return;
2882 	} else if (do_low_power) {
2883 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
2884 			     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
2885 
2886 		val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
2887 		      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
2888 		      MII_TG3_AUXCTL_PCTL_VREG_11V;
2889 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
2890 	}
2891 
2892 	/* The PHY should not be powered down on some chips because
2893 	 * of bugs.
2894 	 */
2895 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2896 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2897 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
2898 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
2899 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 &&
2900 	     !tp->pci_fn))
2901 		return;
2902 
2903 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2904 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2905 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2906 		val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2907 		val |= CPMU_LSPD_1000MB_MACCLK_12_5;
2908 		tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2909 	}
2910 
2911 	tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
2912 }
2913 
2914 /* tp->lock is held. */
2915 static int tg3_nvram_lock(struct tg3 *tp)
2916 {
2917 	if (tg3_flag(tp, NVRAM)) {
2918 		int i;
2919 
2920 		if (tp->nvram_lock_cnt == 0) {
2921 			tw32(NVRAM_SWARB, SWARB_REQ_SET1);
2922 			for (i = 0; i < 8000; i++) {
2923 				if (tr32(NVRAM_SWARB) & SWARB_GNT1)
2924 					break;
2925 				udelay(20);
2926 			}
2927 			if (i == 8000) {
2928 				tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
2929 				return -ENODEV;
2930 			}
2931 		}
2932 		tp->nvram_lock_cnt++;
2933 	}
2934 	return 0;
2935 }
2936 
2937 /* tp->lock is held. */
2938 static void tg3_nvram_unlock(struct tg3 *tp)
2939 {
2940 	if (tg3_flag(tp, NVRAM)) {
2941 		if (tp->nvram_lock_cnt > 0)
2942 			tp->nvram_lock_cnt--;
2943 		if (tp->nvram_lock_cnt == 0)
2944 			tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
2945 	}
2946 }
2947 
2948 /* tp->lock is held. */
2949 static void tg3_enable_nvram_access(struct tg3 *tp)
2950 {
2951 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2952 		u32 nvaccess = tr32(NVRAM_ACCESS);
2953 
2954 		tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
2955 	}
2956 }
2957 
2958 /* tp->lock is held. */
2959 static void tg3_disable_nvram_access(struct tg3 *tp)
2960 {
2961 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2962 		u32 nvaccess = tr32(NVRAM_ACCESS);
2963 
2964 		tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
2965 	}
2966 }
2967 
2968 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
2969 					u32 offset, u32 *val)
2970 {
2971 	u32 tmp;
2972 	int i;
2973 
2974 	if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
2975 		return -EINVAL;
2976 
2977 	tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
2978 					EEPROM_ADDR_DEVID_MASK |
2979 					EEPROM_ADDR_READ);
2980 	tw32(GRC_EEPROM_ADDR,
2981 	     tmp |
2982 	     (0 << EEPROM_ADDR_DEVID_SHIFT) |
2983 	     ((offset << EEPROM_ADDR_ADDR_SHIFT) &
2984 	      EEPROM_ADDR_ADDR_MASK) |
2985 	     EEPROM_ADDR_READ | EEPROM_ADDR_START);
2986 
2987 	for (i = 0; i < 1000; i++) {
2988 		tmp = tr32(GRC_EEPROM_ADDR);
2989 
2990 		if (tmp & EEPROM_ADDR_COMPLETE)
2991 			break;
2992 		msleep(1);
2993 	}
2994 	if (!(tmp & EEPROM_ADDR_COMPLETE))
2995 		return -EBUSY;
2996 
2997 	tmp = tr32(GRC_EEPROM_DATA);
2998 
2999 	/*
3000 	 * The data will always be opposite the native endian
3001 	 * format.  Perform a blind byteswap to compensate.
3002 	 */
3003 	*val = swab32(tmp);
3004 
3005 	return 0;
3006 }
3007 
3008 #define NVRAM_CMD_TIMEOUT 10000
3009 
3010 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3011 {
3012 	int i;
3013 
3014 	tw32(NVRAM_CMD, nvram_cmd);
3015 	for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3016 		udelay(10);
3017 		if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3018 			udelay(10);
3019 			break;
3020 		}
3021 	}
3022 
3023 	if (i == NVRAM_CMD_TIMEOUT)
3024 		return -EBUSY;
3025 
3026 	return 0;
3027 }
3028 
3029 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3030 {
3031 	if (tg3_flag(tp, NVRAM) &&
3032 	    tg3_flag(tp, NVRAM_BUFFERED) &&
3033 	    tg3_flag(tp, FLASH) &&
3034 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3035 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3036 
3037 		addr = ((addr / tp->nvram_pagesize) <<
3038 			ATMEL_AT45DB0X1B_PAGE_POS) +
3039 		       (addr % tp->nvram_pagesize);
3040 
3041 	return addr;
3042 }
3043 
3044 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3045 {
3046 	if (tg3_flag(tp, NVRAM) &&
3047 	    tg3_flag(tp, NVRAM_BUFFERED) &&
3048 	    tg3_flag(tp, FLASH) &&
3049 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3050 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3051 
3052 		addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3053 			tp->nvram_pagesize) +
3054 		       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3055 
3056 	return addr;
3057 }
3058 
3059 /* NOTE: Data read in from NVRAM is byteswapped according to
3060  * the byteswapping settings for all other register accesses.
3061  * tg3 devices are BE devices, so on a BE machine, the data
3062  * returned will be exactly as it is seen in NVRAM.  On a LE
3063  * machine, the 32-bit value will be byteswapped.
3064  */
3065 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3066 {
3067 	int ret;
3068 
3069 	if (!tg3_flag(tp, NVRAM))
3070 		return tg3_nvram_read_using_eeprom(tp, offset, val);
3071 
3072 	offset = tg3_nvram_phys_addr(tp, offset);
3073 
3074 	if (offset > NVRAM_ADDR_MSK)
3075 		return -EINVAL;
3076 
3077 	ret = tg3_nvram_lock(tp);
3078 	if (ret)
3079 		return ret;
3080 
3081 	tg3_enable_nvram_access(tp);
3082 
3083 	tw32(NVRAM_ADDR, offset);
3084 	ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3085 		NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3086 
3087 	if (ret == 0)
3088 		*val = tr32(NVRAM_RDDATA);
3089 
3090 	tg3_disable_nvram_access(tp);
3091 
3092 	tg3_nvram_unlock(tp);
3093 
3094 	return ret;
3095 }
3096 
3097 /* Ensures NVRAM data is in bytestream format. */
3098 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3099 {
3100 	u32 v;
3101 	int res = tg3_nvram_read(tp, offset, &v);
3102 	if (!res)
3103 		*val = cpu_to_be32(v);
3104 	return res;
3105 }
3106 
3107 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3108 				    u32 offset, u32 len, u8 *buf)
3109 {
3110 	int i, j, rc = 0;
3111 	u32 val;
3112 
3113 	for (i = 0; i < len; i += 4) {
3114 		u32 addr;
3115 		__be32 data;
3116 
3117 		addr = offset + i;
3118 
3119 		memcpy(&data, buf + i, 4);
3120 
3121 		/*
3122 		 * The SEEPROM interface expects the data to always be opposite
3123 		 * the native endian format.  We accomplish this by reversing
3124 		 * all the operations that would have been performed on the
3125 		 * data from a call to tg3_nvram_read_be32().
3126 		 */
3127 		tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3128 
3129 		val = tr32(GRC_EEPROM_ADDR);
3130 		tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3131 
3132 		val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3133 			EEPROM_ADDR_READ);
3134 		tw32(GRC_EEPROM_ADDR, val |
3135 			(0 << EEPROM_ADDR_DEVID_SHIFT) |
3136 			(addr & EEPROM_ADDR_ADDR_MASK) |
3137 			EEPROM_ADDR_START |
3138 			EEPROM_ADDR_WRITE);
3139 
3140 		for (j = 0; j < 1000; j++) {
3141 			val = tr32(GRC_EEPROM_ADDR);
3142 
3143 			if (val & EEPROM_ADDR_COMPLETE)
3144 				break;
3145 			msleep(1);
3146 		}
3147 		if (!(val & EEPROM_ADDR_COMPLETE)) {
3148 			rc = -EBUSY;
3149 			break;
3150 		}
3151 	}
3152 
3153 	return rc;
3154 }
3155 
3156 /* offset and length are dword aligned */
3157 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3158 		u8 *buf)
3159 {
3160 	int ret = 0;
3161 	u32 pagesize = tp->nvram_pagesize;
3162 	u32 pagemask = pagesize - 1;
3163 	u32 nvram_cmd;
3164 	u8 *tmp;
3165 
3166 	tmp = kmalloc(pagesize, GFP_KERNEL);
3167 	if (tmp == NULL)
3168 		return -ENOMEM;
3169 
3170 	while (len) {
3171 		int j;
3172 		u32 phy_addr, page_off, size;
3173 
3174 		phy_addr = offset & ~pagemask;
3175 
3176 		for (j = 0; j < pagesize; j += 4) {
3177 			ret = tg3_nvram_read_be32(tp, phy_addr + j,
3178 						  (__be32 *) (tmp + j));
3179 			if (ret)
3180 				break;
3181 		}
3182 		if (ret)
3183 			break;
3184 
3185 		page_off = offset & pagemask;
3186 		size = pagesize;
3187 		if (len < size)
3188 			size = len;
3189 
3190 		len -= size;
3191 
3192 		memcpy(tmp + page_off, buf, size);
3193 
3194 		offset = offset + (pagesize - page_off);
3195 
3196 		tg3_enable_nvram_access(tp);
3197 
3198 		/*
3199 		 * Before we can erase the flash page, we need
3200 		 * to issue a special "write enable" command.
3201 		 */
3202 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3203 
3204 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3205 			break;
3206 
3207 		/* Erase the target page */
3208 		tw32(NVRAM_ADDR, phy_addr);
3209 
3210 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3211 			NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3212 
3213 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3214 			break;
3215 
3216 		/* Issue another write enable to start the write. */
3217 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3218 
3219 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3220 			break;
3221 
3222 		for (j = 0; j < pagesize; j += 4) {
3223 			__be32 data;
3224 
3225 			data = *((__be32 *) (tmp + j));
3226 
3227 			tw32(NVRAM_WRDATA, be32_to_cpu(data));
3228 
3229 			tw32(NVRAM_ADDR, phy_addr + j);
3230 
3231 			nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3232 				NVRAM_CMD_WR;
3233 
3234 			if (j == 0)
3235 				nvram_cmd |= NVRAM_CMD_FIRST;
3236 			else if (j == (pagesize - 4))
3237 				nvram_cmd |= NVRAM_CMD_LAST;
3238 
3239 			ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3240 			if (ret)
3241 				break;
3242 		}
3243 		if (ret)
3244 			break;
3245 	}
3246 
3247 	nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3248 	tg3_nvram_exec_cmd(tp, nvram_cmd);
3249 
3250 	kfree(tmp);
3251 
3252 	return ret;
3253 }
3254 
3255 /* offset and length are dword aligned */
3256 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3257 		u8 *buf)
3258 {
3259 	int i, ret = 0;
3260 
3261 	for (i = 0; i < len; i += 4, offset += 4) {
3262 		u32 page_off, phy_addr, nvram_cmd;
3263 		__be32 data;
3264 
3265 		memcpy(&data, buf + i, 4);
3266 		tw32(NVRAM_WRDATA, be32_to_cpu(data));
3267 
3268 		page_off = offset % tp->nvram_pagesize;
3269 
3270 		phy_addr = tg3_nvram_phys_addr(tp, offset);
3271 
3272 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3273 
3274 		if (page_off == 0 || i == 0)
3275 			nvram_cmd |= NVRAM_CMD_FIRST;
3276 		if (page_off == (tp->nvram_pagesize - 4))
3277 			nvram_cmd |= NVRAM_CMD_LAST;
3278 
3279 		if (i == (len - 4))
3280 			nvram_cmd |= NVRAM_CMD_LAST;
3281 
3282 		if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3283 		    !tg3_flag(tp, FLASH) ||
3284 		    !tg3_flag(tp, 57765_PLUS))
3285 			tw32(NVRAM_ADDR, phy_addr);
3286 
3287 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
3288 		    !tg3_flag(tp, 5755_PLUS) &&
3289 		    (tp->nvram_jedecnum == JEDEC_ST) &&
3290 		    (nvram_cmd & NVRAM_CMD_FIRST)) {
3291 			u32 cmd;
3292 
3293 			cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3294 			ret = tg3_nvram_exec_cmd(tp, cmd);
3295 			if (ret)
3296 				break;
3297 		}
3298 		if (!tg3_flag(tp, FLASH)) {
3299 			/* We always do complete word writes to eeprom. */
3300 			nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3301 		}
3302 
3303 		ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3304 		if (ret)
3305 			break;
3306 	}
3307 	return ret;
3308 }
3309 
3310 /* offset and length are dword aligned */
3311 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3312 {
3313 	int ret;
3314 
3315 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3316 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3317 		       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3318 		udelay(40);
3319 	}
3320 
3321 	if (!tg3_flag(tp, NVRAM)) {
3322 		ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3323 	} else {
3324 		u32 grc_mode;
3325 
3326 		ret = tg3_nvram_lock(tp);
3327 		if (ret)
3328 			return ret;
3329 
3330 		tg3_enable_nvram_access(tp);
3331 		if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3332 			tw32(NVRAM_WRITE1, 0x406);
3333 
3334 		grc_mode = tr32(GRC_MODE);
3335 		tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3336 
3337 		if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3338 			ret = tg3_nvram_write_block_buffered(tp, offset, len,
3339 				buf);
3340 		} else {
3341 			ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3342 				buf);
3343 		}
3344 
3345 		grc_mode = tr32(GRC_MODE);
3346 		tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3347 
3348 		tg3_disable_nvram_access(tp);
3349 		tg3_nvram_unlock(tp);
3350 	}
3351 
3352 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3353 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3354 		udelay(40);
3355 	}
3356 
3357 	return ret;
3358 }
3359 
3360 #define RX_CPU_SCRATCH_BASE	0x30000
3361 #define RX_CPU_SCRATCH_SIZE	0x04000
3362 #define TX_CPU_SCRATCH_BASE	0x34000
3363 #define TX_CPU_SCRATCH_SIZE	0x04000
3364 
3365 /* tp->lock is held. */
3366 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
3367 {
3368 	int i;
3369 
3370 	BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3371 
3372 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3373 		u32 val = tr32(GRC_VCPU_EXT_CTRL);
3374 
3375 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3376 		return 0;
3377 	}
3378 	if (offset == RX_CPU_BASE) {
3379 		for (i = 0; i < 10000; i++) {
3380 			tw32(offset + CPU_STATE, 0xffffffff);
3381 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3382 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3383 				break;
3384 		}
3385 
3386 		tw32(offset + CPU_STATE, 0xffffffff);
3387 		tw32_f(offset + CPU_MODE,  CPU_MODE_HALT);
3388 		udelay(10);
3389 	} else {
3390 		for (i = 0; i < 10000; i++) {
3391 			tw32(offset + CPU_STATE, 0xffffffff);
3392 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3393 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3394 				break;
3395 		}
3396 	}
3397 
3398 	if (i >= 10000) {
3399 		netdev_err(tp->dev, "%s timed out, %s CPU\n",
3400 			   __func__, offset == RX_CPU_BASE ? "RX" : "TX");
3401 		return -ENODEV;
3402 	}
3403 
3404 	/* Clear firmware's nvram arbitration. */
3405 	if (tg3_flag(tp, NVRAM))
3406 		tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3407 	return 0;
3408 }
3409 
3410 struct fw_info {
3411 	unsigned int fw_base;
3412 	unsigned int fw_len;
3413 	const __be32 *fw_data;
3414 };
3415 
3416 /* tp->lock is held. */
3417 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3418 				 u32 cpu_scratch_base, int cpu_scratch_size,
3419 				 struct fw_info *info)
3420 {
3421 	int err, lock_err, i;
3422 	void (*write_op)(struct tg3 *, u32, u32);
3423 
3424 	if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3425 		netdev_err(tp->dev,
3426 			   "%s: Trying to load TX cpu firmware which is 5705\n",
3427 			   __func__);
3428 		return -EINVAL;
3429 	}
3430 
3431 	if (tg3_flag(tp, 5705_PLUS))
3432 		write_op = tg3_write_mem;
3433 	else
3434 		write_op = tg3_write_indirect_reg32;
3435 
3436 	/* It is possible that bootcode is still loading at this point.
3437 	 * Get the nvram lock first before halting the cpu.
3438 	 */
3439 	lock_err = tg3_nvram_lock(tp);
3440 	err = tg3_halt_cpu(tp, cpu_base);
3441 	if (!lock_err)
3442 		tg3_nvram_unlock(tp);
3443 	if (err)
3444 		goto out;
3445 
3446 	for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3447 		write_op(tp, cpu_scratch_base + i, 0);
3448 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3449 	tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
3450 	for (i = 0; i < (info->fw_len / sizeof(u32)); i++)
3451 		write_op(tp, (cpu_scratch_base +
3452 			      (info->fw_base & 0xffff) +
3453 			      (i * sizeof(u32))),
3454 			      be32_to_cpu(info->fw_data[i]));
3455 
3456 	err = 0;
3457 
3458 out:
3459 	return err;
3460 }
3461 
3462 /* tp->lock is held. */
3463 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3464 {
3465 	struct fw_info info;
3466 	const __be32 *fw_data;
3467 	int err, i;
3468 
3469 	fw_data = (void *)tp->fw->data;
3470 
3471 	/* Firmware blob starts with version numbers, followed by
3472 	   start address and length. We are setting complete length.
3473 	   length = end_address_of_bss - start_address_of_text.
3474 	   Remainder is the blob to be loaded contiguously
3475 	   from start address. */
3476 
3477 	info.fw_base = be32_to_cpu(fw_data[1]);
3478 	info.fw_len = tp->fw->size - 12;
3479 	info.fw_data = &fw_data[3];
3480 
3481 	err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3482 				    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3483 				    &info);
3484 	if (err)
3485 		return err;
3486 
3487 	err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3488 				    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3489 				    &info);
3490 	if (err)
3491 		return err;
3492 
3493 	/* Now startup only the RX cpu. */
3494 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3495 	tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3496 
3497 	for (i = 0; i < 5; i++) {
3498 		if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base)
3499 			break;
3500 		tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3501 		tw32(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3502 		tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3503 		udelay(1000);
3504 	}
3505 	if (i >= 5) {
3506 		netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3507 			   "should be %08x\n", __func__,
3508 			   tr32(RX_CPU_BASE + CPU_PC), info.fw_base);
3509 		return -ENODEV;
3510 	}
3511 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3512 	tw32_f(RX_CPU_BASE + CPU_MODE,  0x00000000);
3513 
3514 	return 0;
3515 }
3516 
3517 /* tp->lock is held. */
3518 static int tg3_load_tso_firmware(struct tg3 *tp)
3519 {
3520 	struct fw_info info;
3521 	const __be32 *fw_data;
3522 	unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3523 	int err, i;
3524 
3525 	if (tg3_flag(tp, HW_TSO_1) ||
3526 	    tg3_flag(tp, HW_TSO_2) ||
3527 	    tg3_flag(tp, HW_TSO_3))
3528 		return 0;
3529 
3530 	fw_data = (void *)tp->fw->data;
3531 
3532 	/* Firmware blob starts with version numbers, followed by
3533 	   start address and length. We are setting complete length.
3534 	   length = end_address_of_bss - start_address_of_text.
3535 	   Remainder is the blob to be loaded contiguously
3536 	   from start address. */
3537 
3538 	info.fw_base = be32_to_cpu(fw_data[1]);
3539 	cpu_scratch_size = tp->fw_len;
3540 	info.fw_len = tp->fw->size - 12;
3541 	info.fw_data = &fw_data[3];
3542 
3543 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
3544 		cpu_base = RX_CPU_BASE;
3545 		cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3546 	} else {
3547 		cpu_base = TX_CPU_BASE;
3548 		cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3549 		cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3550 	}
3551 
3552 	err = tg3_load_firmware_cpu(tp, cpu_base,
3553 				    cpu_scratch_base, cpu_scratch_size,
3554 				    &info);
3555 	if (err)
3556 		return err;
3557 
3558 	/* Now startup the cpu. */
3559 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3560 	tw32_f(cpu_base + CPU_PC, info.fw_base);
3561 
3562 	for (i = 0; i < 5; i++) {
3563 		if (tr32(cpu_base + CPU_PC) == info.fw_base)
3564 			break;
3565 		tw32(cpu_base + CPU_STATE, 0xffffffff);
3566 		tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3567 		tw32_f(cpu_base + CPU_PC, info.fw_base);
3568 		udelay(1000);
3569 	}
3570 	if (i >= 5) {
3571 		netdev_err(tp->dev,
3572 			   "%s fails to set CPU PC, is %08x should be %08x\n",
3573 			   __func__, tr32(cpu_base + CPU_PC), info.fw_base);
3574 		return -ENODEV;
3575 	}
3576 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3577 	tw32_f(cpu_base + CPU_MODE,  0x00000000);
3578 	return 0;
3579 }
3580 
3581 
3582 /* tp->lock is held. */
3583 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
3584 {
3585 	u32 addr_high, addr_low;
3586 	int i;
3587 
3588 	addr_high = ((tp->dev->dev_addr[0] << 8) |
3589 		     tp->dev->dev_addr[1]);
3590 	addr_low = ((tp->dev->dev_addr[2] << 24) |
3591 		    (tp->dev->dev_addr[3] << 16) |
3592 		    (tp->dev->dev_addr[4] <<  8) |
3593 		    (tp->dev->dev_addr[5] <<  0));
3594 	for (i = 0; i < 4; i++) {
3595 		if (i == 1 && skip_mac_1)
3596 			continue;
3597 		tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
3598 		tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
3599 	}
3600 
3601 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
3602 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
3603 		for (i = 0; i < 12; i++) {
3604 			tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
3605 			tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
3606 		}
3607 	}
3608 
3609 	addr_high = (tp->dev->dev_addr[0] +
3610 		     tp->dev->dev_addr[1] +
3611 		     tp->dev->dev_addr[2] +
3612 		     tp->dev->dev_addr[3] +
3613 		     tp->dev->dev_addr[4] +
3614 		     tp->dev->dev_addr[5]) &
3615 		TX_BACKOFF_SEED_MASK;
3616 	tw32(MAC_TX_BACKOFF_SEED, addr_high);
3617 }
3618 
3619 static void tg3_enable_register_access(struct tg3 *tp)
3620 {
3621 	/*
3622 	 * Make sure register accesses (indirect or otherwise) will function
3623 	 * correctly.
3624 	 */
3625 	pci_write_config_dword(tp->pdev,
3626 			       TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
3627 }
3628 
3629 static int tg3_power_up(struct tg3 *tp)
3630 {
3631 	int err;
3632 
3633 	tg3_enable_register_access(tp);
3634 
3635 	err = pci_set_power_state(tp->pdev, PCI_D0);
3636 	if (!err) {
3637 		/* Switch out of Vaux if it is a NIC */
3638 		tg3_pwrsrc_switch_to_vmain(tp);
3639 	} else {
3640 		netdev_err(tp->dev, "Transition to D0 failed\n");
3641 	}
3642 
3643 	return err;
3644 }
3645 
3646 static int tg3_setup_phy(struct tg3 *, int);
3647 
3648 static int tg3_power_down_prepare(struct tg3 *tp)
3649 {
3650 	u32 misc_host_ctrl;
3651 	bool device_should_wake, do_low_power;
3652 
3653 	tg3_enable_register_access(tp);
3654 
3655 	/* Restore the CLKREQ setting. */
3656 	if (tg3_flag(tp, CLKREQ_BUG)) {
3657 		u16 lnkctl;
3658 
3659 		pci_read_config_word(tp->pdev,
3660 				     pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
3661 				     &lnkctl);
3662 		lnkctl |= PCI_EXP_LNKCTL_CLKREQ_EN;
3663 		pci_write_config_word(tp->pdev,
3664 				      pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
3665 				      lnkctl);
3666 	}
3667 
3668 	misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
3669 	tw32(TG3PCI_MISC_HOST_CTRL,
3670 	     misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
3671 
3672 	device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
3673 			     tg3_flag(tp, WOL_ENABLE);
3674 
3675 	if (tg3_flag(tp, USE_PHYLIB)) {
3676 		do_low_power = false;
3677 		if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
3678 		    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
3679 			struct phy_device *phydev;
3680 			u32 phyid, advertising;
3681 
3682 			phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
3683 
3684 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3685 
3686 			tp->link_config.speed = phydev->speed;
3687 			tp->link_config.duplex = phydev->duplex;
3688 			tp->link_config.autoneg = phydev->autoneg;
3689 			tp->link_config.advertising = phydev->advertising;
3690 
3691 			advertising = ADVERTISED_TP |
3692 				      ADVERTISED_Pause |
3693 				      ADVERTISED_Autoneg |
3694 				      ADVERTISED_10baseT_Half;
3695 
3696 			if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
3697 				if (tg3_flag(tp, WOL_SPEED_100MB))
3698 					advertising |=
3699 						ADVERTISED_100baseT_Half |
3700 						ADVERTISED_100baseT_Full |
3701 						ADVERTISED_10baseT_Full;
3702 				else
3703 					advertising |= ADVERTISED_10baseT_Full;
3704 			}
3705 
3706 			phydev->advertising = advertising;
3707 
3708 			phy_start_aneg(phydev);
3709 
3710 			phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
3711 			if (phyid != PHY_ID_BCMAC131) {
3712 				phyid &= PHY_BCM_OUI_MASK;
3713 				if (phyid == PHY_BCM_OUI_1 ||
3714 				    phyid == PHY_BCM_OUI_2 ||
3715 				    phyid == PHY_BCM_OUI_3)
3716 					do_low_power = true;
3717 			}
3718 		}
3719 	} else {
3720 		do_low_power = true;
3721 
3722 		if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
3723 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3724 
3725 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
3726 			tg3_setup_phy(tp, 0);
3727 	}
3728 
3729 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3730 		u32 val;
3731 
3732 		val = tr32(GRC_VCPU_EXT_CTRL);
3733 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
3734 	} else if (!tg3_flag(tp, ENABLE_ASF)) {
3735 		int i;
3736 		u32 val;
3737 
3738 		for (i = 0; i < 200; i++) {
3739 			tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
3740 			if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
3741 				break;
3742 			msleep(1);
3743 		}
3744 	}
3745 	if (tg3_flag(tp, WOL_CAP))
3746 		tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
3747 						     WOL_DRV_STATE_SHUTDOWN |
3748 						     WOL_DRV_WOL |
3749 						     WOL_SET_MAGIC_PKT);
3750 
3751 	if (device_should_wake) {
3752 		u32 mac_mode;
3753 
3754 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
3755 			if (do_low_power &&
3756 			    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
3757 				tg3_phy_auxctl_write(tp,
3758 					       MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
3759 					       MII_TG3_AUXCTL_PCTL_WOL_EN |
3760 					       MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3761 					       MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
3762 				udelay(40);
3763 			}
3764 
3765 			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3766 				mac_mode = MAC_MODE_PORT_MODE_GMII;
3767 			else
3768 				mac_mode = MAC_MODE_PORT_MODE_MII;
3769 
3770 			mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
3771 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3772 			    ASIC_REV_5700) {
3773 				u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
3774 					     SPEED_100 : SPEED_10;
3775 				if (tg3_5700_link_polarity(tp, speed))
3776 					mac_mode |= MAC_MODE_LINK_POLARITY;
3777 				else
3778 					mac_mode &= ~MAC_MODE_LINK_POLARITY;
3779 			}
3780 		} else {
3781 			mac_mode = MAC_MODE_PORT_MODE_TBI;
3782 		}
3783 
3784 		if (!tg3_flag(tp, 5750_PLUS))
3785 			tw32(MAC_LED_CTRL, tp->led_ctrl);
3786 
3787 		mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
3788 		if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
3789 		    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
3790 			mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
3791 
3792 		if (tg3_flag(tp, ENABLE_APE))
3793 			mac_mode |= MAC_MODE_APE_TX_EN |
3794 				    MAC_MODE_APE_RX_EN |
3795 				    MAC_MODE_TDE_ENABLE;
3796 
3797 		tw32_f(MAC_MODE, mac_mode);
3798 		udelay(100);
3799 
3800 		tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
3801 		udelay(10);
3802 	}
3803 
3804 	if (!tg3_flag(tp, WOL_SPEED_100MB) &&
3805 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3806 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
3807 		u32 base_val;
3808 
3809 		base_val = tp->pci_clock_ctrl;
3810 		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
3811 			     CLOCK_CTRL_TXCLK_DISABLE);
3812 
3813 		tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
3814 			    CLOCK_CTRL_PWRDOWN_PLL133, 40);
3815 	} else if (tg3_flag(tp, 5780_CLASS) ||
3816 		   tg3_flag(tp, CPMU_PRESENT) ||
3817 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3818 		/* do nothing */
3819 	} else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
3820 		u32 newbits1, newbits2;
3821 
3822 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3823 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3824 			newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
3825 				    CLOCK_CTRL_TXCLK_DISABLE |
3826 				    CLOCK_CTRL_ALTCLK);
3827 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3828 		} else if (tg3_flag(tp, 5705_PLUS)) {
3829 			newbits1 = CLOCK_CTRL_625_CORE;
3830 			newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
3831 		} else {
3832 			newbits1 = CLOCK_CTRL_ALTCLK;
3833 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3834 		}
3835 
3836 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
3837 			    40);
3838 
3839 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
3840 			    40);
3841 
3842 		if (!tg3_flag(tp, 5705_PLUS)) {
3843 			u32 newbits3;
3844 
3845 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3846 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3847 				newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
3848 					    CLOCK_CTRL_TXCLK_DISABLE |
3849 					    CLOCK_CTRL_44MHZ_CORE);
3850 			} else {
3851 				newbits3 = CLOCK_CTRL_44MHZ_CORE;
3852 			}
3853 
3854 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
3855 				    tp->pci_clock_ctrl | newbits3, 40);
3856 		}
3857 	}
3858 
3859 	if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
3860 		tg3_power_down_phy(tp, do_low_power);
3861 
3862 	tg3_frob_aux_power(tp, true);
3863 
3864 	/* Workaround for unstable PLL clock */
3865 	if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
3866 	    (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
3867 		u32 val = tr32(0x7d00);
3868 
3869 		val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
3870 		tw32(0x7d00, val);
3871 		if (!tg3_flag(tp, ENABLE_ASF)) {
3872 			int err;
3873 
3874 			err = tg3_nvram_lock(tp);
3875 			tg3_halt_cpu(tp, RX_CPU_BASE);
3876 			if (!err)
3877 				tg3_nvram_unlock(tp);
3878 		}
3879 	}
3880 
3881 	tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
3882 
3883 	return 0;
3884 }
3885 
3886 static void tg3_power_down(struct tg3 *tp)
3887 {
3888 	tg3_power_down_prepare(tp);
3889 
3890 	pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
3891 	pci_set_power_state(tp->pdev, PCI_D3hot);
3892 }
3893 
3894 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
3895 {
3896 	switch (val & MII_TG3_AUX_STAT_SPDMASK) {
3897 	case MII_TG3_AUX_STAT_10HALF:
3898 		*speed = SPEED_10;
3899 		*duplex = DUPLEX_HALF;
3900 		break;
3901 
3902 	case MII_TG3_AUX_STAT_10FULL:
3903 		*speed = SPEED_10;
3904 		*duplex = DUPLEX_FULL;
3905 		break;
3906 
3907 	case MII_TG3_AUX_STAT_100HALF:
3908 		*speed = SPEED_100;
3909 		*duplex = DUPLEX_HALF;
3910 		break;
3911 
3912 	case MII_TG3_AUX_STAT_100FULL:
3913 		*speed = SPEED_100;
3914 		*duplex = DUPLEX_FULL;
3915 		break;
3916 
3917 	case MII_TG3_AUX_STAT_1000HALF:
3918 		*speed = SPEED_1000;
3919 		*duplex = DUPLEX_HALF;
3920 		break;
3921 
3922 	case MII_TG3_AUX_STAT_1000FULL:
3923 		*speed = SPEED_1000;
3924 		*duplex = DUPLEX_FULL;
3925 		break;
3926 
3927 	default:
3928 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3929 			*speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
3930 				 SPEED_10;
3931 			*duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
3932 				  DUPLEX_HALF;
3933 			break;
3934 		}
3935 		*speed = SPEED_UNKNOWN;
3936 		*duplex = DUPLEX_UNKNOWN;
3937 		break;
3938 	}
3939 }
3940 
3941 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
3942 {
3943 	int err = 0;
3944 	u32 val, new_adv;
3945 
3946 	new_adv = ADVERTISE_CSMA;
3947 	new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
3948 	new_adv |= mii_advertise_flowctrl(flowctrl);
3949 
3950 	err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
3951 	if (err)
3952 		goto done;
3953 
3954 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
3955 		new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
3956 
3957 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
3958 		    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
3959 			new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
3960 
3961 		err = tg3_writephy(tp, MII_CTRL1000, new_adv);
3962 		if (err)
3963 			goto done;
3964 	}
3965 
3966 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
3967 		goto done;
3968 
3969 	tw32(TG3_CPMU_EEE_MODE,
3970 	     tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
3971 
3972 	err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
3973 	if (!err) {
3974 		u32 err2;
3975 
3976 		val = 0;
3977 		/* Advertise 100-BaseTX EEE ability */
3978 		if (advertise & ADVERTISED_100baseT_Full)
3979 			val |= MDIO_AN_EEE_ADV_100TX;
3980 		/* Advertise 1000-BaseT EEE ability */
3981 		if (advertise & ADVERTISED_1000baseT_Full)
3982 			val |= MDIO_AN_EEE_ADV_1000T;
3983 		err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
3984 		if (err)
3985 			val = 0;
3986 
3987 		switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
3988 		case ASIC_REV_5717:
3989 		case ASIC_REV_57765:
3990 		case ASIC_REV_57766:
3991 		case ASIC_REV_5719:
3992 			/* If we advertised any eee advertisements above... */
3993 			if (val)
3994 				val = MII_TG3_DSP_TAP26_ALNOKO |
3995 				      MII_TG3_DSP_TAP26_RMRXSTO |
3996 				      MII_TG3_DSP_TAP26_OPCSINPT;
3997 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
3998 			/* Fall through */
3999 		case ASIC_REV_5720:
4000 			if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4001 				tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4002 						 MII_TG3_DSP_CH34TP2_HIBW01);
4003 		}
4004 
4005 		err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
4006 		if (!err)
4007 			err = err2;
4008 	}
4009 
4010 done:
4011 	return err;
4012 }
4013 
4014 static void tg3_phy_copper_begin(struct tg3 *tp)
4015 {
4016 	if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4017 	    (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4018 		u32 adv, fc;
4019 
4020 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
4021 			adv = ADVERTISED_10baseT_Half |
4022 			      ADVERTISED_10baseT_Full;
4023 			if (tg3_flag(tp, WOL_SPEED_100MB))
4024 				adv |= ADVERTISED_100baseT_Half |
4025 				       ADVERTISED_100baseT_Full;
4026 
4027 			fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4028 		} else {
4029 			adv = tp->link_config.advertising;
4030 			if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4031 				adv &= ~(ADVERTISED_1000baseT_Half |
4032 					 ADVERTISED_1000baseT_Full);
4033 
4034 			fc = tp->link_config.flowctrl;
4035 		}
4036 
4037 		tg3_phy_autoneg_cfg(tp, adv, fc);
4038 
4039 		tg3_writephy(tp, MII_BMCR,
4040 			     BMCR_ANENABLE | BMCR_ANRESTART);
4041 	} else {
4042 		int i;
4043 		u32 bmcr, orig_bmcr;
4044 
4045 		tp->link_config.active_speed = tp->link_config.speed;
4046 		tp->link_config.active_duplex = tp->link_config.duplex;
4047 
4048 		bmcr = 0;
4049 		switch (tp->link_config.speed) {
4050 		default:
4051 		case SPEED_10:
4052 			break;
4053 
4054 		case SPEED_100:
4055 			bmcr |= BMCR_SPEED100;
4056 			break;
4057 
4058 		case SPEED_1000:
4059 			bmcr |= BMCR_SPEED1000;
4060 			break;
4061 		}
4062 
4063 		if (tp->link_config.duplex == DUPLEX_FULL)
4064 			bmcr |= BMCR_FULLDPLX;
4065 
4066 		if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4067 		    (bmcr != orig_bmcr)) {
4068 			tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4069 			for (i = 0; i < 1500; i++) {
4070 				u32 tmp;
4071 
4072 				udelay(10);
4073 				if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4074 				    tg3_readphy(tp, MII_BMSR, &tmp))
4075 					continue;
4076 				if (!(tmp & BMSR_LSTATUS)) {
4077 					udelay(40);
4078 					break;
4079 				}
4080 			}
4081 			tg3_writephy(tp, MII_BMCR, bmcr);
4082 			udelay(40);
4083 		}
4084 	}
4085 }
4086 
4087 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4088 {
4089 	int err;
4090 
4091 	/* Turn off tap power management. */
4092 	/* Set Extended packet length bit */
4093 	err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4094 
4095 	err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4096 	err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4097 	err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4098 	err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4099 	err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4100 
4101 	udelay(40);
4102 
4103 	return err;
4104 }
4105 
4106 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4107 {
4108 	u32 advmsk, tgtadv, advertising;
4109 
4110 	advertising = tp->link_config.advertising;
4111 	tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4112 
4113 	advmsk = ADVERTISE_ALL;
4114 	if (tp->link_config.active_duplex == DUPLEX_FULL) {
4115 		tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4116 		advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4117 	}
4118 
4119 	if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4120 		return false;
4121 
4122 	if ((*lcladv & advmsk) != tgtadv)
4123 		return false;
4124 
4125 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4126 		u32 tg3_ctrl;
4127 
4128 		tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4129 
4130 		if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4131 			return false;
4132 
4133 		if (tgtadv &&
4134 		    (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4135 		     tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) {
4136 			tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4137 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4138 				     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4139 		} else {
4140 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4141 		}
4142 
4143 		if (tg3_ctrl != tgtadv)
4144 			return false;
4145 	}
4146 
4147 	return true;
4148 }
4149 
4150 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4151 {
4152 	u32 lpeth = 0;
4153 
4154 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4155 		u32 val;
4156 
4157 		if (tg3_readphy(tp, MII_STAT1000, &val))
4158 			return false;
4159 
4160 		lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4161 	}
4162 
4163 	if (tg3_readphy(tp, MII_LPA, rmtadv))
4164 		return false;
4165 
4166 	lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4167 	tp->link_config.rmt_adv = lpeth;
4168 
4169 	return true;
4170 }
4171 
4172 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
4173 {
4174 	int current_link_up;
4175 	u32 bmsr, val;
4176 	u32 lcl_adv, rmt_adv;
4177 	u16 current_speed;
4178 	u8 current_duplex;
4179 	int i, err;
4180 
4181 	tw32(MAC_EVENT, 0);
4182 
4183 	tw32_f(MAC_STATUS,
4184 	     (MAC_STATUS_SYNC_CHANGED |
4185 	      MAC_STATUS_CFG_CHANGED |
4186 	      MAC_STATUS_MI_COMPLETION |
4187 	      MAC_STATUS_LNKSTATE_CHANGED));
4188 	udelay(40);
4189 
4190 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4191 		tw32_f(MAC_MI_MODE,
4192 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4193 		udelay(80);
4194 	}
4195 
4196 	tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4197 
4198 	/* Some third-party PHYs need to be reset on link going
4199 	 * down.
4200 	 */
4201 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
4202 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
4203 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
4204 	    netif_carrier_ok(tp->dev)) {
4205 		tg3_readphy(tp, MII_BMSR, &bmsr);
4206 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4207 		    !(bmsr & BMSR_LSTATUS))
4208 			force_reset = 1;
4209 	}
4210 	if (force_reset)
4211 		tg3_phy_reset(tp);
4212 
4213 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4214 		tg3_readphy(tp, MII_BMSR, &bmsr);
4215 		if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4216 		    !tg3_flag(tp, INIT_COMPLETE))
4217 			bmsr = 0;
4218 
4219 		if (!(bmsr & BMSR_LSTATUS)) {
4220 			err = tg3_init_5401phy_dsp(tp);
4221 			if (err)
4222 				return err;
4223 
4224 			tg3_readphy(tp, MII_BMSR, &bmsr);
4225 			for (i = 0; i < 1000; i++) {
4226 				udelay(10);
4227 				if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4228 				    (bmsr & BMSR_LSTATUS)) {
4229 					udelay(40);
4230 					break;
4231 				}
4232 			}
4233 
4234 			if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4235 			    TG3_PHY_REV_BCM5401_B0 &&
4236 			    !(bmsr & BMSR_LSTATUS) &&
4237 			    tp->link_config.active_speed == SPEED_1000) {
4238 				err = tg3_phy_reset(tp);
4239 				if (!err)
4240 					err = tg3_init_5401phy_dsp(tp);
4241 				if (err)
4242 					return err;
4243 			}
4244 		}
4245 	} else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4246 		   tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
4247 		/* 5701 {A0,B0} CRC bug workaround */
4248 		tg3_writephy(tp, 0x15, 0x0a75);
4249 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4250 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4251 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4252 	}
4253 
4254 	/* Clear pending interrupts... */
4255 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4256 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4257 
4258 	if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4259 		tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4260 	else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4261 		tg3_writephy(tp, MII_TG3_IMASK, ~0);
4262 
4263 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
4264 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
4265 		if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4266 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
4267 				     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4268 		else
4269 			tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4270 	}
4271 
4272 	current_link_up = 0;
4273 	current_speed = SPEED_UNKNOWN;
4274 	current_duplex = DUPLEX_UNKNOWN;
4275 	tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4276 	tp->link_config.rmt_adv = 0;
4277 
4278 	if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4279 		err = tg3_phy_auxctl_read(tp,
4280 					  MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4281 					  &val);
4282 		if (!err && !(val & (1 << 10))) {
4283 			tg3_phy_auxctl_write(tp,
4284 					     MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4285 					     val | (1 << 10));
4286 			goto relink;
4287 		}
4288 	}
4289 
4290 	bmsr = 0;
4291 	for (i = 0; i < 100; i++) {
4292 		tg3_readphy(tp, MII_BMSR, &bmsr);
4293 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4294 		    (bmsr & BMSR_LSTATUS))
4295 			break;
4296 		udelay(40);
4297 	}
4298 
4299 	if (bmsr & BMSR_LSTATUS) {
4300 		u32 aux_stat, bmcr;
4301 
4302 		tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4303 		for (i = 0; i < 2000; i++) {
4304 			udelay(10);
4305 			if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4306 			    aux_stat)
4307 				break;
4308 		}
4309 
4310 		tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4311 					     &current_speed,
4312 					     &current_duplex);
4313 
4314 		bmcr = 0;
4315 		for (i = 0; i < 200; i++) {
4316 			tg3_readphy(tp, MII_BMCR, &bmcr);
4317 			if (tg3_readphy(tp, MII_BMCR, &bmcr))
4318 				continue;
4319 			if (bmcr && bmcr != 0x7fff)
4320 				break;
4321 			udelay(10);
4322 		}
4323 
4324 		lcl_adv = 0;
4325 		rmt_adv = 0;
4326 
4327 		tp->link_config.active_speed = current_speed;
4328 		tp->link_config.active_duplex = current_duplex;
4329 
4330 		if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4331 			if ((bmcr & BMCR_ANENABLE) &&
4332 			    tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4333 			    tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4334 				current_link_up = 1;
4335 		} else {
4336 			if (!(bmcr & BMCR_ANENABLE) &&
4337 			    tp->link_config.speed == current_speed &&
4338 			    tp->link_config.duplex == current_duplex &&
4339 			    tp->link_config.flowctrl ==
4340 			    tp->link_config.active_flowctrl) {
4341 				current_link_up = 1;
4342 			}
4343 		}
4344 
4345 		if (current_link_up == 1 &&
4346 		    tp->link_config.active_duplex == DUPLEX_FULL) {
4347 			u32 reg, bit;
4348 
4349 			if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4350 				reg = MII_TG3_FET_GEN_STAT;
4351 				bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4352 			} else {
4353 				reg = MII_TG3_EXT_STAT;
4354 				bit = MII_TG3_EXT_STAT_MDIX;
4355 			}
4356 
4357 			if (!tg3_readphy(tp, reg, &val) && (val & bit))
4358 				tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4359 
4360 			tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4361 		}
4362 	}
4363 
4364 relink:
4365 	if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4366 		tg3_phy_copper_begin(tp);
4367 
4368 		tg3_readphy(tp, MII_BMSR, &bmsr);
4369 		if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4370 		    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4371 			current_link_up = 1;
4372 	}
4373 
4374 	tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4375 	if (current_link_up == 1) {
4376 		if (tp->link_config.active_speed == SPEED_100 ||
4377 		    tp->link_config.active_speed == SPEED_10)
4378 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4379 		else
4380 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4381 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4382 		tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4383 	else
4384 		tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4385 
4386 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
4387 	if (tp->link_config.active_duplex == DUPLEX_HALF)
4388 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
4389 
4390 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
4391 		if (current_link_up == 1 &&
4392 		    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
4393 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
4394 		else
4395 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
4396 	}
4397 
4398 	/* ??? Without this setting Netgear GA302T PHY does not
4399 	 * ??? send/receive packets...
4400 	 */
4401 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
4402 	    tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
4403 		tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
4404 		tw32_f(MAC_MI_MODE, tp->mi_mode);
4405 		udelay(80);
4406 	}
4407 
4408 	tw32_f(MAC_MODE, tp->mac_mode);
4409 	udelay(40);
4410 
4411 	tg3_phy_eee_adjust(tp, current_link_up);
4412 
4413 	if (tg3_flag(tp, USE_LINKCHG_REG)) {
4414 		/* Polled via timer. */
4415 		tw32_f(MAC_EVENT, 0);
4416 	} else {
4417 		tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
4418 	}
4419 	udelay(40);
4420 
4421 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
4422 	    current_link_up == 1 &&
4423 	    tp->link_config.active_speed == SPEED_1000 &&
4424 	    (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
4425 		udelay(120);
4426 		tw32_f(MAC_STATUS,
4427 		     (MAC_STATUS_SYNC_CHANGED |
4428 		      MAC_STATUS_CFG_CHANGED));
4429 		udelay(40);
4430 		tg3_write_mem(tp,
4431 			      NIC_SRAM_FIRMWARE_MBOX,
4432 			      NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
4433 	}
4434 
4435 	/* Prevent send BD corruption. */
4436 	if (tg3_flag(tp, CLKREQ_BUG)) {
4437 		u16 oldlnkctl, newlnkctl;
4438 
4439 		pci_read_config_word(tp->pdev,
4440 				     pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
4441 				     &oldlnkctl);
4442 		if (tp->link_config.active_speed == SPEED_100 ||
4443 		    tp->link_config.active_speed == SPEED_10)
4444 			newlnkctl = oldlnkctl & ~PCI_EXP_LNKCTL_CLKREQ_EN;
4445 		else
4446 			newlnkctl = oldlnkctl | PCI_EXP_LNKCTL_CLKREQ_EN;
4447 		if (newlnkctl != oldlnkctl)
4448 			pci_write_config_word(tp->pdev,
4449 					      pci_pcie_cap(tp->pdev) +
4450 					      PCI_EXP_LNKCTL, newlnkctl);
4451 	}
4452 
4453 	if (current_link_up != netif_carrier_ok(tp->dev)) {
4454 		if (current_link_up)
4455 			netif_carrier_on(tp->dev);
4456 		else
4457 			netif_carrier_off(tp->dev);
4458 		tg3_link_report(tp);
4459 	}
4460 
4461 	return 0;
4462 }
4463 
4464 struct tg3_fiber_aneginfo {
4465 	int state;
4466 #define ANEG_STATE_UNKNOWN		0
4467 #define ANEG_STATE_AN_ENABLE		1
4468 #define ANEG_STATE_RESTART_INIT		2
4469 #define ANEG_STATE_RESTART		3
4470 #define ANEG_STATE_DISABLE_LINK_OK	4
4471 #define ANEG_STATE_ABILITY_DETECT_INIT	5
4472 #define ANEG_STATE_ABILITY_DETECT	6
4473 #define ANEG_STATE_ACK_DETECT_INIT	7
4474 #define ANEG_STATE_ACK_DETECT		8
4475 #define ANEG_STATE_COMPLETE_ACK_INIT	9
4476 #define ANEG_STATE_COMPLETE_ACK		10
4477 #define ANEG_STATE_IDLE_DETECT_INIT	11
4478 #define ANEG_STATE_IDLE_DETECT		12
4479 #define ANEG_STATE_LINK_OK		13
4480 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT	14
4481 #define ANEG_STATE_NEXT_PAGE_WAIT	15
4482 
4483 	u32 flags;
4484 #define MR_AN_ENABLE		0x00000001
4485 #define MR_RESTART_AN		0x00000002
4486 #define MR_AN_COMPLETE		0x00000004
4487 #define MR_PAGE_RX		0x00000008
4488 #define MR_NP_LOADED		0x00000010
4489 #define MR_TOGGLE_TX		0x00000020
4490 #define MR_LP_ADV_FULL_DUPLEX	0x00000040
4491 #define MR_LP_ADV_HALF_DUPLEX	0x00000080
4492 #define MR_LP_ADV_SYM_PAUSE	0x00000100
4493 #define MR_LP_ADV_ASYM_PAUSE	0x00000200
4494 #define MR_LP_ADV_REMOTE_FAULT1	0x00000400
4495 #define MR_LP_ADV_REMOTE_FAULT2	0x00000800
4496 #define MR_LP_ADV_NEXT_PAGE	0x00001000
4497 #define MR_TOGGLE_RX		0x00002000
4498 #define MR_NP_RX		0x00004000
4499 
4500 #define MR_LINK_OK		0x80000000
4501 
4502 	unsigned long link_time, cur_time;
4503 
4504 	u32 ability_match_cfg;
4505 	int ability_match_count;
4506 
4507 	char ability_match, idle_match, ack_match;
4508 
4509 	u32 txconfig, rxconfig;
4510 #define ANEG_CFG_NP		0x00000080
4511 #define ANEG_CFG_ACK		0x00000040
4512 #define ANEG_CFG_RF2		0x00000020
4513 #define ANEG_CFG_RF1		0x00000010
4514 #define ANEG_CFG_PS2		0x00000001
4515 #define ANEG_CFG_PS1		0x00008000
4516 #define ANEG_CFG_HD		0x00004000
4517 #define ANEG_CFG_FD		0x00002000
4518 #define ANEG_CFG_INVAL		0x00001f06
4519 
4520 };
4521 #define ANEG_OK		0
4522 #define ANEG_DONE	1
4523 #define ANEG_TIMER_ENAB	2
4524 #define ANEG_FAILED	-1
4525 
4526 #define ANEG_STATE_SETTLE_TIME	10000
4527 
4528 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
4529 				   struct tg3_fiber_aneginfo *ap)
4530 {
4531 	u16 flowctrl;
4532 	unsigned long delta;
4533 	u32 rx_cfg_reg;
4534 	int ret;
4535 
4536 	if (ap->state == ANEG_STATE_UNKNOWN) {
4537 		ap->rxconfig = 0;
4538 		ap->link_time = 0;
4539 		ap->cur_time = 0;
4540 		ap->ability_match_cfg = 0;
4541 		ap->ability_match_count = 0;
4542 		ap->ability_match = 0;
4543 		ap->idle_match = 0;
4544 		ap->ack_match = 0;
4545 	}
4546 	ap->cur_time++;
4547 
4548 	if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
4549 		rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
4550 
4551 		if (rx_cfg_reg != ap->ability_match_cfg) {
4552 			ap->ability_match_cfg = rx_cfg_reg;
4553 			ap->ability_match = 0;
4554 			ap->ability_match_count = 0;
4555 		} else {
4556 			if (++ap->ability_match_count > 1) {
4557 				ap->ability_match = 1;
4558 				ap->ability_match_cfg = rx_cfg_reg;
4559 			}
4560 		}
4561 		if (rx_cfg_reg & ANEG_CFG_ACK)
4562 			ap->ack_match = 1;
4563 		else
4564 			ap->ack_match = 0;
4565 
4566 		ap->idle_match = 0;
4567 	} else {
4568 		ap->idle_match = 1;
4569 		ap->ability_match_cfg = 0;
4570 		ap->ability_match_count = 0;
4571 		ap->ability_match = 0;
4572 		ap->ack_match = 0;
4573 
4574 		rx_cfg_reg = 0;
4575 	}
4576 
4577 	ap->rxconfig = rx_cfg_reg;
4578 	ret = ANEG_OK;
4579 
4580 	switch (ap->state) {
4581 	case ANEG_STATE_UNKNOWN:
4582 		if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
4583 			ap->state = ANEG_STATE_AN_ENABLE;
4584 
4585 		/* fallthru */
4586 	case ANEG_STATE_AN_ENABLE:
4587 		ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
4588 		if (ap->flags & MR_AN_ENABLE) {
4589 			ap->link_time = 0;
4590 			ap->cur_time = 0;
4591 			ap->ability_match_cfg = 0;
4592 			ap->ability_match_count = 0;
4593 			ap->ability_match = 0;
4594 			ap->idle_match = 0;
4595 			ap->ack_match = 0;
4596 
4597 			ap->state = ANEG_STATE_RESTART_INIT;
4598 		} else {
4599 			ap->state = ANEG_STATE_DISABLE_LINK_OK;
4600 		}
4601 		break;
4602 
4603 	case ANEG_STATE_RESTART_INIT:
4604 		ap->link_time = ap->cur_time;
4605 		ap->flags &= ~(MR_NP_LOADED);
4606 		ap->txconfig = 0;
4607 		tw32(MAC_TX_AUTO_NEG, 0);
4608 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4609 		tw32_f(MAC_MODE, tp->mac_mode);
4610 		udelay(40);
4611 
4612 		ret = ANEG_TIMER_ENAB;
4613 		ap->state = ANEG_STATE_RESTART;
4614 
4615 		/* fallthru */
4616 	case ANEG_STATE_RESTART:
4617 		delta = ap->cur_time - ap->link_time;
4618 		if (delta > ANEG_STATE_SETTLE_TIME)
4619 			ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
4620 		else
4621 			ret = ANEG_TIMER_ENAB;
4622 		break;
4623 
4624 	case ANEG_STATE_DISABLE_LINK_OK:
4625 		ret = ANEG_DONE;
4626 		break;
4627 
4628 	case ANEG_STATE_ABILITY_DETECT_INIT:
4629 		ap->flags &= ~(MR_TOGGLE_TX);
4630 		ap->txconfig = ANEG_CFG_FD;
4631 		flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4632 		if (flowctrl & ADVERTISE_1000XPAUSE)
4633 			ap->txconfig |= ANEG_CFG_PS1;
4634 		if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4635 			ap->txconfig |= ANEG_CFG_PS2;
4636 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4637 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4638 		tw32_f(MAC_MODE, tp->mac_mode);
4639 		udelay(40);
4640 
4641 		ap->state = ANEG_STATE_ABILITY_DETECT;
4642 		break;
4643 
4644 	case ANEG_STATE_ABILITY_DETECT:
4645 		if (ap->ability_match != 0 && ap->rxconfig != 0)
4646 			ap->state = ANEG_STATE_ACK_DETECT_INIT;
4647 		break;
4648 
4649 	case ANEG_STATE_ACK_DETECT_INIT:
4650 		ap->txconfig |= ANEG_CFG_ACK;
4651 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4652 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4653 		tw32_f(MAC_MODE, tp->mac_mode);
4654 		udelay(40);
4655 
4656 		ap->state = ANEG_STATE_ACK_DETECT;
4657 
4658 		/* fallthru */
4659 	case ANEG_STATE_ACK_DETECT:
4660 		if (ap->ack_match != 0) {
4661 			if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
4662 			    (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
4663 				ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
4664 			} else {
4665 				ap->state = ANEG_STATE_AN_ENABLE;
4666 			}
4667 		} else if (ap->ability_match != 0 &&
4668 			   ap->rxconfig == 0) {
4669 			ap->state = ANEG_STATE_AN_ENABLE;
4670 		}
4671 		break;
4672 
4673 	case ANEG_STATE_COMPLETE_ACK_INIT:
4674 		if (ap->rxconfig & ANEG_CFG_INVAL) {
4675 			ret = ANEG_FAILED;
4676 			break;
4677 		}
4678 		ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
4679 			       MR_LP_ADV_HALF_DUPLEX |
4680 			       MR_LP_ADV_SYM_PAUSE |
4681 			       MR_LP_ADV_ASYM_PAUSE |
4682 			       MR_LP_ADV_REMOTE_FAULT1 |
4683 			       MR_LP_ADV_REMOTE_FAULT2 |
4684 			       MR_LP_ADV_NEXT_PAGE |
4685 			       MR_TOGGLE_RX |
4686 			       MR_NP_RX);
4687 		if (ap->rxconfig & ANEG_CFG_FD)
4688 			ap->flags |= MR_LP_ADV_FULL_DUPLEX;
4689 		if (ap->rxconfig & ANEG_CFG_HD)
4690 			ap->flags |= MR_LP_ADV_HALF_DUPLEX;
4691 		if (ap->rxconfig & ANEG_CFG_PS1)
4692 			ap->flags |= MR_LP_ADV_SYM_PAUSE;
4693 		if (ap->rxconfig & ANEG_CFG_PS2)
4694 			ap->flags |= MR_LP_ADV_ASYM_PAUSE;
4695 		if (ap->rxconfig & ANEG_CFG_RF1)
4696 			ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
4697 		if (ap->rxconfig & ANEG_CFG_RF2)
4698 			ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
4699 		if (ap->rxconfig & ANEG_CFG_NP)
4700 			ap->flags |= MR_LP_ADV_NEXT_PAGE;
4701 
4702 		ap->link_time = ap->cur_time;
4703 
4704 		ap->flags ^= (MR_TOGGLE_TX);
4705 		if (ap->rxconfig & 0x0008)
4706 			ap->flags |= MR_TOGGLE_RX;
4707 		if (ap->rxconfig & ANEG_CFG_NP)
4708 			ap->flags |= MR_NP_RX;
4709 		ap->flags |= MR_PAGE_RX;
4710 
4711 		ap->state = ANEG_STATE_COMPLETE_ACK;
4712 		ret = ANEG_TIMER_ENAB;
4713 		break;
4714 
4715 	case ANEG_STATE_COMPLETE_ACK:
4716 		if (ap->ability_match != 0 &&
4717 		    ap->rxconfig == 0) {
4718 			ap->state = ANEG_STATE_AN_ENABLE;
4719 			break;
4720 		}
4721 		delta = ap->cur_time - ap->link_time;
4722 		if (delta > ANEG_STATE_SETTLE_TIME) {
4723 			if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
4724 				ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4725 			} else {
4726 				if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
4727 				    !(ap->flags & MR_NP_RX)) {
4728 					ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4729 				} else {
4730 					ret = ANEG_FAILED;
4731 				}
4732 			}
4733 		}
4734 		break;
4735 
4736 	case ANEG_STATE_IDLE_DETECT_INIT:
4737 		ap->link_time = ap->cur_time;
4738 		tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4739 		tw32_f(MAC_MODE, tp->mac_mode);
4740 		udelay(40);
4741 
4742 		ap->state = ANEG_STATE_IDLE_DETECT;
4743 		ret = ANEG_TIMER_ENAB;
4744 		break;
4745 
4746 	case ANEG_STATE_IDLE_DETECT:
4747 		if (ap->ability_match != 0 &&
4748 		    ap->rxconfig == 0) {
4749 			ap->state = ANEG_STATE_AN_ENABLE;
4750 			break;
4751 		}
4752 		delta = ap->cur_time - ap->link_time;
4753 		if (delta > ANEG_STATE_SETTLE_TIME) {
4754 			/* XXX another gem from the Broadcom driver :( */
4755 			ap->state = ANEG_STATE_LINK_OK;
4756 		}
4757 		break;
4758 
4759 	case ANEG_STATE_LINK_OK:
4760 		ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
4761 		ret = ANEG_DONE;
4762 		break;
4763 
4764 	case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
4765 		/* ??? unimplemented */
4766 		break;
4767 
4768 	case ANEG_STATE_NEXT_PAGE_WAIT:
4769 		/* ??? unimplemented */
4770 		break;
4771 
4772 	default:
4773 		ret = ANEG_FAILED;
4774 		break;
4775 	}
4776 
4777 	return ret;
4778 }
4779 
4780 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
4781 {
4782 	int res = 0;
4783 	struct tg3_fiber_aneginfo aninfo;
4784 	int status = ANEG_FAILED;
4785 	unsigned int tick;
4786 	u32 tmp;
4787 
4788 	tw32_f(MAC_TX_AUTO_NEG, 0);
4789 
4790 	tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
4791 	tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
4792 	udelay(40);
4793 
4794 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
4795 	udelay(40);
4796 
4797 	memset(&aninfo, 0, sizeof(aninfo));
4798 	aninfo.flags |= MR_AN_ENABLE;
4799 	aninfo.state = ANEG_STATE_UNKNOWN;
4800 	aninfo.cur_time = 0;
4801 	tick = 0;
4802 	while (++tick < 195000) {
4803 		status = tg3_fiber_aneg_smachine(tp, &aninfo);
4804 		if (status == ANEG_DONE || status == ANEG_FAILED)
4805 			break;
4806 
4807 		udelay(1);
4808 	}
4809 
4810 	tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4811 	tw32_f(MAC_MODE, tp->mac_mode);
4812 	udelay(40);
4813 
4814 	*txflags = aninfo.txconfig;
4815 	*rxflags = aninfo.flags;
4816 
4817 	if (status == ANEG_DONE &&
4818 	    (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
4819 			     MR_LP_ADV_FULL_DUPLEX)))
4820 		res = 1;
4821 
4822 	return res;
4823 }
4824 
4825 static void tg3_init_bcm8002(struct tg3 *tp)
4826 {
4827 	u32 mac_status = tr32(MAC_STATUS);
4828 	int i;
4829 
4830 	/* Reset when initting first time or we have a link. */
4831 	if (tg3_flag(tp, INIT_COMPLETE) &&
4832 	    !(mac_status & MAC_STATUS_PCS_SYNCED))
4833 		return;
4834 
4835 	/* Set PLL lock range. */
4836 	tg3_writephy(tp, 0x16, 0x8007);
4837 
4838 	/* SW reset */
4839 	tg3_writephy(tp, MII_BMCR, BMCR_RESET);
4840 
4841 	/* Wait for reset to complete. */
4842 	/* XXX schedule_timeout() ... */
4843 	for (i = 0; i < 500; i++)
4844 		udelay(10);
4845 
4846 	/* Config mode; select PMA/Ch 1 regs. */
4847 	tg3_writephy(tp, 0x10, 0x8411);
4848 
4849 	/* Enable auto-lock and comdet, select txclk for tx. */
4850 	tg3_writephy(tp, 0x11, 0x0a10);
4851 
4852 	tg3_writephy(tp, 0x18, 0x00a0);
4853 	tg3_writephy(tp, 0x16, 0x41ff);
4854 
4855 	/* Assert and deassert POR. */
4856 	tg3_writephy(tp, 0x13, 0x0400);
4857 	udelay(40);
4858 	tg3_writephy(tp, 0x13, 0x0000);
4859 
4860 	tg3_writephy(tp, 0x11, 0x0a50);
4861 	udelay(40);
4862 	tg3_writephy(tp, 0x11, 0x0a10);
4863 
4864 	/* Wait for signal to stabilize */
4865 	/* XXX schedule_timeout() ... */
4866 	for (i = 0; i < 15000; i++)
4867 		udelay(10);
4868 
4869 	/* Deselect the channel register so we can read the PHYID
4870 	 * later.
4871 	 */
4872 	tg3_writephy(tp, 0x10, 0x8011);
4873 }
4874 
4875 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
4876 {
4877 	u16 flowctrl;
4878 	u32 sg_dig_ctrl, sg_dig_status;
4879 	u32 serdes_cfg, expected_sg_dig_ctrl;
4880 	int workaround, port_a;
4881 	int current_link_up;
4882 
4883 	serdes_cfg = 0;
4884 	expected_sg_dig_ctrl = 0;
4885 	workaround = 0;
4886 	port_a = 1;
4887 	current_link_up = 0;
4888 
4889 	if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
4890 	    tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
4891 		workaround = 1;
4892 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
4893 			port_a = 0;
4894 
4895 		/* preserve bits 0-11,13,14 for signal pre-emphasis */
4896 		/* preserve bits 20-23 for voltage regulator */
4897 		serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
4898 	}
4899 
4900 	sg_dig_ctrl = tr32(SG_DIG_CTRL);
4901 
4902 	if (tp->link_config.autoneg != AUTONEG_ENABLE) {
4903 		if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
4904 			if (workaround) {
4905 				u32 val = serdes_cfg;
4906 
4907 				if (port_a)
4908 					val |= 0xc010000;
4909 				else
4910 					val |= 0x4010000;
4911 				tw32_f(MAC_SERDES_CFG, val);
4912 			}
4913 
4914 			tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4915 		}
4916 		if (mac_status & MAC_STATUS_PCS_SYNCED) {
4917 			tg3_setup_flow_control(tp, 0, 0);
4918 			current_link_up = 1;
4919 		}
4920 		goto out;
4921 	}
4922 
4923 	/* Want auto-negotiation.  */
4924 	expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
4925 
4926 	flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4927 	if (flowctrl & ADVERTISE_1000XPAUSE)
4928 		expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
4929 	if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4930 		expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
4931 
4932 	if (sg_dig_ctrl != expected_sg_dig_ctrl) {
4933 		if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
4934 		    tp->serdes_counter &&
4935 		    ((mac_status & (MAC_STATUS_PCS_SYNCED |
4936 				    MAC_STATUS_RCVD_CFG)) ==
4937 		     MAC_STATUS_PCS_SYNCED)) {
4938 			tp->serdes_counter--;
4939 			current_link_up = 1;
4940 			goto out;
4941 		}
4942 restart_autoneg:
4943 		if (workaround)
4944 			tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
4945 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
4946 		udelay(5);
4947 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
4948 
4949 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
4950 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4951 	} else if (mac_status & (MAC_STATUS_PCS_SYNCED |
4952 				 MAC_STATUS_SIGNAL_DET)) {
4953 		sg_dig_status = tr32(SG_DIG_STATUS);
4954 		mac_status = tr32(MAC_STATUS);
4955 
4956 		if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
4957 		    (mac_status & MAC_STATUS_PCS_SYNCED)) {
4958 			u32 local_adv = 0, remote_adv = 0;
4959 
4960 			if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
4961 				local_adv |= ADVERTISE_1000XPAUSE;
4962 			if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
4963 				local_adv |= ADVERTISE_1000XPSE_ASYM;
4964 
4965 			if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
4966 				remote_adv |= LPA_1000XPAUSE;
4967 			if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
4968 				remote_adv |= LPA_1000XPAUSE_ASYM;
4969 
4970 			tp->link_config.rmt_adv =
4971 					   mii_adv_to_ethtool_adv_x(remote_adv);
4972 
4973 			tg3_setup_flow_control(tp, local_adv, remote_adv);
4974 			current_link_up = 1;
4975 			tp->serdes_counter = 0;
4976 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4977 		} else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
4978 			if (tp->serdes_counter)
4979 				tp->serdes_counter--;
4980 			else {
4981 				if (workaround) {
4982 					u32 val = serdes_cfg;
4983 
4984 					if (port_a)
4985 						val |= 0xc010000;
4986 					else
4987 						val |= 0x4010000;
4988 
4989 					tw32_f(MAC_SERDES_CFG, val);
4990 				}
4991 
4992 				tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4993 				udelay(40);
4994 
4995 				/* Link parallel detection - link is up */
4996 				/* only if we have PCS_SYNC and not */
4997 				/* receiving config code words */
4998 				mac_status = tr32(MAC_STATUS);
4999 				if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5000 				    !(mac_status & MAC_STATUS_RCVD_CFG)) {
5001 					tg3_setup_flow_control(tp, 0, 0);
5002 					current_link_up = 1;
5003 					tp->phy_flags |=
5004 						TG3_PHYFLG_PARALLEL_DETECT;
5005 					tp->serdes_counter =
5006 						SERDES_PARALLEL_DET_TIMEOUT;
5007 				} else
5008 					goto restart_autoneg;
5009 			}
5010 		}
5011 	} else {
5012 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5013 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5014 	}
5015 
5016 out:
5017 	return current_link_up;
5018 }
5019 
5020 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5021 {
5022 	int current_link_up = 0;
5023 
5024 	if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5025 		goto out;
5026 
5027 	if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5028 		u32 txflags, rxflags;
5029 		int i;
5030 
5031 		if (fiber_autoneg(tp, &txflags, &rxflags)) {
5032 			u32 local_adv = 0, remote_adv = 0;
5033 
5034 			if (txflags & ANEG_CFG_PS1)
5035 				local_adv |= ADVERTISE_1000XPAUSE;
5036 			if (txflags & ANEG_CFG_PS2)
5037 				local_adv |= ADVERTISE_1000XPSE_ASYM;
5038 
5039 			if (rxflags & MR_LP_ADV_SYM_PAUSE)
5040 				remote_adv |= LPA_1000XPAUSE;
5041 			if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5042 				remote_adv |= LPA_1000XPAUSE_ASYM;
5043 
5044 			tp->link_config.rmt_adv =
5045 					   mii_adv_to_ethtool_adv_x(remote_adv);
5046 
5047 			tg3_setup_flow_control(tp, local_adv, remote_adv);
5048 
5049 			current_link_up = 1;
5050 		}
5051 		for (i = 0; i < 30; i++) {
5052 			udelay(20);
5053 			tw32_f(MAC_STATUS,
5054 			       (MAC_STATUS_SYNC_CHANGED |
5055 				MAC_STATUS_CFG_CHANGED));
5056 			udelay(40);
5057 			if ((tr32(MAC_STATUS) &
5058 			     (MAC_STATUS_SYNC_CHANGED |
5059 			      MAC_STATUS_CFG_CHANGED)) == 0)
5060 				break;
5061 		}
5062 
5063 		mac_status = tr32(MAC_STATUS);
5064 		if (current_link_up == 0 &&
5065 		    (mac_status & MAC_STATUS_PCS_SYNCED) &&
5066 		    !(mac_status & MAC_STATUS_RCVD_CFG))
5067 			current_link_up = 1;
5068 	} else {
5069 		tg3_setup_flow_control(tp, 0, 0);
5070 
5071 		/* Forcing 1000FD link up. */
5072 		current_link_up = 1;
5073 
5074 		tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5075 		udelay(40);
5076 
5077 		tw32_f(MAC_MODE, tp->mac_mode);
5078 		udelay(40);
5079 	}
5080 
5081 out:
5082 	return current_link_up;
5083 }
5084 
5085 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
5086 {
5087 	u32 orig_pause_cfg;
5088 	u16 orig_active_speed;
5089 	u8 orig_active_duplex;
5090 	u32 mac_status;
5091 	int current_link_up;
5092 	int i;
5093 
5094 	orig_pause_cfg = tp->link_config.active_flowctrl;
5095 	orig_active_speed = tp->link_config.active_speed;
5096 	orig_active_duplex = tp->link_config.active_duplex;
5097 
5098 	if (!tg3_flag(tp, HW_AUTONEG) &&
5099 	    netif_carrier_ok(tp->dev) &&
5100 	    tg3_flag(tp, INIT_COMPLETE)) {
5101 		mac_status = tr32(MAC_STATUS);
5102 		mac_status &= (MAC_STATUS_PCS_SYNCED |
5103 			       MAC_STATUS_SIGNAL_DET |
5104 			       MAC_STATUS_CFG_CHANGED |
5105 			       MAC_STATUS_RCVD_CFG);
5106 		if (mac_status == (MAC_STATUS_PCS_SYNCED |
5107 				   MAC_STATUS_SIGNAL_DET)) {
5108 			tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5109 					    MAC_STATUS_CFG_CHANGED));
5110 			return 0;
5111 		}
5112 	}
5113 
5114 	tw32_f(MAC_TX_AUTO_NEG, 0);
5115 
5116 	tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5117 	tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5118 	tw32_f(MAC_MODE, tp->mac_mode);
5119 	udelay(40);
5120 
5121 	if (tp->phy_id == TG3_PHY_ID_BCM8002)
5122 		tg3_init_bcm8002(tp);
5123 
5124 	/* Enable link change event even when serdes polling.  */
5125 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5126 	udelay(40);
5127 
5128 	current_link_up = 0;
5129 	tp->link_config.rmt_adv = 0;
5130 	mac_status = tr32(MAC_STATUS);
5131 
5132 	if (tg3_flag(tp, HW_AUTONEG))
5133 		current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5134 	else
5135 		current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5136 
5137 	tp->napi[0].hw_status->status =
5138 		(SD_STATUS_UPDATED |
5139 		 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5140 
5141 	for (i = 0; i < 100; i++) {
5142 		tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5143 				    MAC_STATUS_CFG_CHANGED));
5144 		udelay(5);
5145 		if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5146 					 MAC_STATUS_CFG_CHANGED |
5147 					 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5148 			break;
5149 	}
5150 
5151 	mac_status = tr32(MAC_STATUS);
5152 	if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5153 		current_link_up = 0;
5154 		if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5155 		    tp->serdes_counter == 0) {
5156 			tw32_f(MAC_MODE, (tp->mac_mode |
5157 					  MAC_MODE_SEND_CONFIGS));
5158 			udelay(1);
5159 			tw32_f(MAC_MODE, tp->mac_mode);
5160 		}
5161 	}
5162 
5163 	if (current_link_up == 1) {
5164 		tp->link_config.active_speed = SPEED_1000;
5165 		tp->link_config.active_duplex = DUPLEX_FULL;
5166 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5167 				    LED_CTRL_LNKLED_OVERRIDE |
5168 				    LED_CTRL_1000MBPS_ON));
5169 	} else {
5170 		tp->link_config.active_speed = SPEED_UNKNOWN;
5171 		tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5172 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5173 				    LED_CTRL_LNKLED_OVERRIDE |
5174 				    LED_CTRL_TRAFFIC_OVERRIDE));
5175 	}
5176 
5177 	if (current_link_up != netif_carrier_ok(tp->dev)) {
5178 		if (current_link_up)
5179 			netif_carrier_on(tp->dev);
5180 		else
5181 			netif_carrier_off(tp->dev);
5182 		tg3_link_report(tp);
5183 	} else {
5184 		u32 now_pause_cfg = tp->link_config.active_flowctrl;
5185 		if (orig_pause_cfg != now_pause_cfg ||
5186 		    orig_active_speed != tp->link_config.active_speed ||
5187 		    orig_active_duplex != tp->link_config.active_duplex)
5188 			tg3_link_report(tp);
5189 	}
5190 
5191 	return 0;
5192 }
5193 
5194 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
5195 {
5196 	int current_link_up, err = 0;
5197 	u32 bmsr, bmcr;
5198 	u16 current_speed;
5199 	u8 current_duplex;
5200 	u32 local_adv, remote_adv;
5201 
5202 	tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5203 	tw32_f(MAC_MODE, tp->mac_mode);
5204 	udelay(40);
5205 
5206 	tw32(MAC_EVENT, 0);
5207 
5208 	tw32_f(MAC_STATUS,
5209 	     (MAC_STATUS_SYNC_CHANGED |
5210 	      MAC_STATUS_CFG_CHANGED |
5211 	      MAC_STATUS_MI_COMPLETION |
5212 	      MAC_STATUS_LNKSTATE_CHANGED));
5213 	udelay(40);
5214 
5215 	if (force_reset)
5216 		tg3_phy_reset(tp);
5217 
5218 	current_link_up = 0;
5219 	current_speed = SPEED_UNKNOWN;
5220 	current_duplex = DUPLEX_UNKNOWN;
5221 	tp->link_config.rmt_adv = 0;
5222 
5223 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5224 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5225 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
5226 		if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5227 			bmsr |= BMSR_LSTATUS;
5228 		else
5229 			bmsr &= ~BMSR_LSTATUS;
5230 	}
5231 
5232 	err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5233 
5234 	if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5235 	    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5236 		/* do nothing, just check for link up at the end */
5237 	} else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5238 		u32 adv, newadv;
5239 
5240 		err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5241 		newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5242 				 ADVERTISE_1000XPAUSE |
5243 				 ADVERTISE_1000XPSE_ASYM |
5244 				 ADVERTISE_SLCT);
5245 
5246 		newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5247 		newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5248 
5249 		if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5250 			tg3_writephy(tp, MII_ADVERTISE, newadv);
5251 			bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5252 			tg3_writephy(tp, MII_BMCR, bmcr);
5253 
5254 			tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5255 			tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5256 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5257 
5258 			return err;
5259 		}
5260 	} else {
5261 		u32 new_bmcr;
5262 
5263 		bmcr &= ~BMCR_SPEED1000;
5264 		new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5265 
5266 		if (tp->link_config.duplex == DUPLEX_FULL)
5267 			new_bmcr |= BMCR_FULLDPLX;
5268 
5269 		if (new_bmcr != bmcr) {
5270 			/* BMCR_SPEED1000 is a reserved bit that needs
5271 			 * to be set on write.
5272 			 */
5273 			new_bmcr |= BMCR_SPEED1000;
5274 
5275 			/* Force a linkdown */
5276 			if (netif_carrier_ok(tp->dev)) {
5277 				u32 adv;
5278 
5279 				err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5280 				adv &= ~(ADVERTISE_1000XFULL |
5281 					 ADVERTISE_1000XHALF |
5282 					 ADVERTISE_SLCT);
5283 				tg3_writephy(tp, MII_ADVERTISE, adv);
5284 				tg3_writephy(tp, MII_BMCR, bmcr |
5285 							   BMCR_ANRESTART |
5286 							   BMCR_ANENABLE);
5287 				udelay(10);
5288 				netif_carrier_off(tp->dev);
5289 			}
5290 			tg3_writephy(tp, MII_BMCR, new_bmcr);
5291 			bmcr = new_bmcr;
5292 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5293 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5294 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
5295 			    ASIC_REV_5714) {
5296 				if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5297 					bmsr |= BMSR_LSTATUS;
5298 				else
5299 					bmsr &= ~BMSR_LSTATUS;
5300 			}
5301 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5302 		}
5303 	}
5304 
5305 	if (bmsr & BMSR_LSTATUS) {
5306 		current_speed = SPEED_1000;
5307 		current_link_up = 1;
5308 		if (bmcr & BMCR_FULLDPLX)
5309 			current_duplex = DUPLEX_FULL;
5310 		else
5311 			current_duplex = DUPLEX_HALF;
5312 
5313 		local_adv = 0;
5314 		remote_adv = 0;
5315 
5316 		if (bmcr & BMCR_ANENABLE) {
5317 			u32 common;
5318 
5319 			err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5320 			err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5321 			common = local_adv & remote_adv;
5322 			if (common & (ADVERTISE_1000XHALF |
5323 				      ADVERTISE_1000XFULL)) {
5324 				if (common & ADVERTISE_1000XFULL)
5325 					current_duplex = DUPLEX_FULL;
5326 				else
5327 					current_duplex = DUPLEX_HALF;
5328 
5329 				tp->link_config.rmt_adv =
5330 					   mii_adv_to_ethtool_adv_x(remote_adv);
5331 			} else if (!tg3_flag(tp, 5780_CLASS)) {
5332 				/* Link is up via parallel detect */
5333 			} else {
5334 				current_link_up = 0;
5335 			}
5336 		}
5337 	}
5338 
5339 	if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
5340 		tg3_setup_flow_control(tp, local_adv, remote_adv);
5341 
5342 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5343 	if (tp->link_config.active_duplex == DUPLEX_HALF)
5344 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5345 
5346 	tw32_f(MAC_MODE, tp->mac_mode);
5347 	udelay(40);
5348 
5349 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5350 
5351 	tp->link_config.active_speed = current_speed;
5352 	tp->link_config.active_duplex = current_duplex;
5353 
5354 	if (current_link_up != netif_carrier_ok(tp->dev)) {
5355 		if (current_link_up)
5356 			netif_carrier_on(tp->dev);
5357 		else {
5358 			netif_carrier_off(tp->dev);
5359 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5360 		}
5361 		tg3_link_report(tp);
5362 	}
5363 	return err;
5364 }
5365 
5366 static void tg3_serdes_parallel_detect(struct tg3 *tp)
5367 {
5368 	if (tp->serdes_counter) {
5369 		/* Give autoneg time to complete. */
5370 		tp->serdes_counter--;
5371 		return;
5372 	}
5373 
5374 	if (!netif_carrier_ok(tp->dev) &&
5375 	    (tp->link_config.autoneg == AUTONEG_ENABLE)) {
5376 		u32 bmcr;
5377 
5378 		tg3_readphy(tp, MII_BMCR, &bmcr);
5379 		if (bmcr & BMCR_ANENABLE) {
5380 			u32 phy1, phy2;
5381 
5382 			/* Select shadow register 0x1f */
5383 			tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
5384 			tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
5385 
5386 			/* Select expansion interrupt status register */
5387 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5388 					 MII_TG3_DSP_EXP1_INT_STAT);
5389 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5390 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5391 
5392 			if ((phy1 & 0x10) && !(phy2 & 0x20)) {
5393 				/* We have signal detect and not receiving
5394 				 * config code words, link is up by parallel
5395 				 * detection.
5396 				 */
5397 
5398 				bmcr &= ~BMCR_ANENABLE;
5399 				bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
5400 				tg3_writephy(tp, MII_BMCR, bmcr);
5401 				tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
5402 			}
5403 		}
5404 	} else if (netif_carrier_ok(tp->dev) &&
5405 		   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
5406 		   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5407 		u32 phy2;
5408 
5409 		/* Select expansion interrupt status register */
5410 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5411 				 MII_TG3_DSP_EXP1_INT_STAT);
5412 		tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5413 		if (phy2 & 0x20) {
5414 			u32 bmcr;
5415 
5416 			/* Config code words received, turn on autoneg. */
5417 			tg3_readphy(tp, MII_BMCR, &bmcr);
5418 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
5419 
5420 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5421 
5422 		}
5423 	}
5424 }
5425 
5426 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
5427 {
5428 	u32 val;
5429 	int err;
5430 
5431 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
5432 		err = tg3_setup_fiber_phy(tp, force_reset);
5433 	else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
5434 		err = tg3_setup_fiber_mii_phy(tp, force_reset);
5435 	else
5436 		err = tg3_setup_copper_phy(tp, force_reset);
5437 
5438 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
5439 		u32 scale;
5440 
5441 		val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
5442 		if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
5443 			scale = 65;
5444 		else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
5445 			scale = 6;
5446 		else
5447 			scale = 12;
5448 
5449 		val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
5450 		val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
5451 		tw32(GRC_MISC_CFG, val);
5452 	}
5453 
5454 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
5455 	      (6 << TX_LENGTHS_IPG_SHIFT);
5456 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
5457 		val |= tr32(MAC_TX_LENGTHS) &
5458 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
5459 			TX_LENGTHS_CNT_DWN_VAL_MSK);
5460 
5461 	if (tp->link_config.active_speed == SPEED_1000 &&
5462 	    tp->link_config.active_duplex == DUPLEX_HALF)
5463 		tw32(MAC_TX_LENGTHS, val |
5464 		     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
5465 	else
5466 		tw32(MAC_TX_LENGTHS, val |
5467 		     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
5468 
5469 	if (!tg3_flag(tp, 5705_PLUS)) {
5470 		if (netif_carrier_ok(tp->dev)) {
5471 			tw32(HOSTCC_STAT_COAL_TICKS,
5472 			     tp->coal.stats_block_coalesce_usecs);
5473 		} else {
5474 			tw32(HOSTCC_STAT_COAL_TICKS, 0);
5475 		}
5476 	}
5477 
5478 	if (tg3_flag(tp, ASPM_WORKAROUND)) {
5479 		val = tr32(PCIE_PWR_MGMT_THRESH);
5480 		if (!netif_carrier_ok(tp->dev))
5481 			val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
5482 			      tp->pwrmgmt_thresh;
5483 		else
5484 			val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
5485 		tw32(PCIE_PWR_MGMT_THRESH, val);
5486 	}
5487 
5488 	return err;
5489 }
5490 
5491 static inline int tg3_irq_sync(struct tg3 *tp)
5492 {
5493 	return tp->irq_sync;
5494 }
5495 
5496 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
5497 {
5498 	int i;
5499 
5500 	dst = (u32 *)((u8 *)dst + off);
5501 	for (i = 0; i < len; i += sizeof(u32))
5502 		*dst++ = tr32(off + i);
5503 }
5504 
5505 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
5506 {
5507 	tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
5508 	tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
5509 	tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
5510 	tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
5511 	tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
5512 	tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
5513 	tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
5514 	tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
5515 	tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
5516 	tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
5517 	tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
5518 	tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
5519 	tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
5520 	tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
5521 	tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
5522 	tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
5523 	tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
5524 	tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
5525 	tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
5526 
5527 	if (tg3_flag(tp, SUPPORT_MSIX))
5528 		tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
5529 
5530 	tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
5531 	tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
5532 	tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
5533 	tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
5534 	tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
5535 	tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
5536 	tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
5537 	tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
5538 
5539 	if (!tg3_flag(tp, 5705_PLUS)) {
5540 		tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
5541 		tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
5542 		tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
5543 	}
5544 
5545 	tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
5546 	tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
5547 	tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
5548 	tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
5549 	tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
5550 
5551 	if (tg3_flag(tp, NVRAM))
5552 		tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
5553 }
5554 
5555 static void tg3_dump_state(struct tg3 *tp)
5556 {
5557 	int i;
5558 	u32 *regs;
5559 
5560 	regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
5561 	if (!regs) {
5562 		netdev_err(tp->dev, "Failed allocating register dump buffer\n");
5563 		return;
5564 	}
5565 
5566 	if (tg3_flag(tp, PCI_EXPRESS)) {
5567 		/* Read up to but not including private PCI registers */
5568 		for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
5569 			regs[i / sizeof(u32)] = tr32(i);
5570 	} else
5571 		tg3_dump_legacy_regs(tp, regs);
5572 
5573 	for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
5574 		if (!regs[i + 0] && !regs[i + 1] &&
5575 		    !regs[i + 2] && !regs[i + 3])
5576 			continue;
5577 
5578 		netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
5579 			   i * 4,
5580 			   regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
5581 	}
5582 
5583 	kfree(regs);
5584 
5585 	for (i = 0; i < tp->irq_cnt; i++) {
5586 		struct tg3_napi *tnapi = &tp->napi[i];
5587 
5588 		/* SW status block */
5589 		netdev_err(tp->dev,
5590 			 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
5591 			   i,
5592 			   tnapi->hw_status->status,
5593 			   tnapi->hw_status->status_tag,
5594 			   tnapi->hw_status->rx_jumbo_consumer,
5595 			   tnapi->hw_status->rx_consumer,
5596 			   tnapi->hw_status->rx_mini_consumer,
5597 			   tnapi->hw_status->idx[0].rx_producer,
5598 			   tnapi->hw_status->idx[0].tx_consumer);
5599 
5600 		netdev_err(tp->dev,
5601 		"%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
5602 			   i,
5603 			   tnapi->last_tag, tnapi->last_irq_tag,
5604 			   tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
5605 			   tnapi->rx_rcb_ptr,
5606 			   tnapi->prodring.rx_std_prod_idx,
5607 			   tnapi->prodring.rx_std_cons_idx,
5608 			   tnapi->prodring.rx_jmb_prod_idx,
5609 			   tnapi->prodring.rx_jmb_cons_idx);
5610 	}
5611 }
5612 
5613 /* This is called whenever we suspect that the system chipset is re-
5614  * ordering the sequence of MMIO to the tx send mailbox. The symptom
5615  * is bogus tx completions. We try to recover by setting the
5616  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
5617  * in the workqueue.
5618  */
5619 static void tg3_tx_recover(struct tg3 *tp)
5620 {
5621 	BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
5622 	       tp->write32_tx_mbox == tg3_write_indirect_mbox);
5623 
5624 	netdev_warn(tp->dev,
5625 		    "The system may be re-ordering memory-mapped I/O "
5626 		    "cycles to the network device, attempting to recover. "
5627 		    "Please report the problem to the driver maintainer "
5628 		    "and include system chipset information.\n");
5629 
5630 	spin_lock(&tp->lock);
5631 	tg3_flag_set(tp, TX_RECOVERY_PENDING);
5632 	spin_unlock(&tp->lock);
5633 }
5634 
5635 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
5636 {
5637 	/* Tell compiler to fetch tx indices from memory. */
5638 	barrier();
5639 	return tnapi->tx_pending -
5640 	       ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
5641 }
5642 
5643 /* Tigon3 never reports partial packet sends.  So we do not
5644  * need special logic to handle SKBs that have not had all
5645  * of their frags sent yet, like SunGEM does.
5646  */
5647 static void tg3_tx(struct tg3_napi *tnapi)
5648 {
5649 	struct tg3 *tp = tnapi->tp;
5650 	u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
5651 	u32 sw_idx = tnapi->tx_cons;
5652 	struct netdev_queue *txq;
5653 	int index = tnapi - tp->napi;
5654 	unsigned int pkts_compl = 0, bytes_compl = 0;
5655 
5656 	if (tg3_flag(tp, ENABLE_TSS))
5657 		index--;
5658 
5659 	txq = netdev_get_tx_queue(tp->dev, index);
5660 
5661 	while (sw_idx != hw_idx) {
5662 		struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
5663 		struct sk_buff *skb = ri->skb;
5664 		int i, tx_bug = 0;
5665 
5666 		if (unlikely(skb == NULL)) {
5667 			tg3_tx_recover(tp);
5668 			return;
5669 		}
5670 
5671 		pci_unmap_single(tp->pdev,
5672 				 dma_unmap_addr(ri, mapping),
5673 				 skb_headlen(skb),
5674 				 PCI_DMA_TODEVICE);
5675 
5676 		ri->skb = NULL;
5677 
5678 		while (ri->fragmented) {
5679 			ri->fragmented = false;
5680 			sw_idx = NEXT_TX(sw_idx);
5681 			ri = &tnapi->tx_buffers[sw_idx];
5682 		}
5683 
5684 		sw_idx = NEXT_TX(sw_idx);
5685 
5686 		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
5687 			ri = &tnapi->tx_buffers[sw_idx];
5688 			if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
5689 				tx_bug = 1;
5690 
5691 			pci_unmap_page(tp->pdev,
5692 				       dma_unmap_addr(ri, mapping),
5693 				       skb_frag_size(&skb_shinfo(skb)->frags[i]),
5694 				       PCI_DMA_TODEVICE);
5695 
5696 			while (ri->fragmented) {
5697 				ri->fragmented = false;
5698 				sw_idx = NEXT_TX(sw_idx);
5699 				ri = &tnapi->tx_buffers[sw_idx];
5700 			}
5701 
5702 			sw_idx = NEXT_TX(sw_idx);
5703 		}
5704 
5705 		pkts_compl++;
5706 		bytes_compl += skb->len;
5707 
5708 		dev_kfree_skb(skb);
5709 
5710 		if (unlikely(tx_bug)) {
5711 			tg3_tx_recover(tp);
5712 			return;
5713 		}
5714 	}
5715 
5716 	netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
5717 
5718 	tnapi->tx_cons = sw_idx;
5719 
5720 	/* Need to make the tx_cons update visible to tg3_start_xmit()
5721 	 * before checking for netif_queue_stopped().  Without the
5722 	 * memory barrier, there is a small possibility that tg3_start_xmit()
5723 	 * will miss it and cause the queue to be stopped forever.
5724 	 */
5725 	smp_mb();
5726 
5727 	if (unlikely(netif_tx_queue_stopped(txq) &&
5728 		     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
5729 		__netif_tx_lock(txq, smp_processor_id());
5730 		if (netif_tx_queue_stopped(txq) &&
5731 		    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
5732 			netif_tx_wake_queue(txq);
5733 		__netif_tx_unlock(txq);
5734 	}
5735 }
5736 
5737 static void tg3_frag_free(bool is_frag, void *data)
5738 {
5739 	if (is_frag)
5740 		put_page(virt_to_head_page(data));
5741 	else
5742 		kfree(data);
5743 }
5744 
5745 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
5746 {
5747 	unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
5748 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5749 
5750 	if (!ri->data)
5751 		return;
5752 
5753 	pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
5754 			 map_sz, PCI_DMA_FROMDEVICE);
5755 	tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
5756 	ri->data = NULL;
5757 }
5758 
5759 
5760 /* Returns size of skb allocated or < 0 on error.
5761  *
5762  * We only need to fill in the address because the other members
5763  * of the RX descriptor are invariant, see tg3_init_rings.
5764  *
5765  * Note the purposeful assymetry of cpu vs. chip accesses.  For
5766  * posting buffers we only dirty the first cache line of the RX
5767  * descriptor (containing the address).  Whereas for the RX status
5768  * buffers the cpu only reads the last cacheline of the RX descriptor
5769  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
5770  */
5771 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
5772 			     u32 opaque_key, u32 dest_idx_unmasked,
5773 			     unsigned int *frag_size)
5774 {
5775 	struct tg3_rx_buffer_desc *desc;
5776 	struct ring_info *map;
5777 	u8 *data;
5778 	dma_addr_t mapping;
5779 	int skb_size, data_size, dest_idx;
5780 
5781 	switch (opaque_key) {
5782 	case RXD_OPAQUE_RING_STD:
5783 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5784 		desc = &tpr->rx_std[dest_idx];
5785 		map = &tpr->rx_std_buffers[dest_idx];
5786 		data_size = tp->rx_pkt_map_sz;
5787 		break;
5788 
5789 	case RXD_OPAQUE_RING_JUMBO:
5790 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5791 		desc = &tpr->rx_jmb[dest_idx].std;
5792 		map = &tpr->rx_jmb_buffers[dest_idx];
5793 		data_size = TG3_RX_JMB_MAP_SZ;
5794 		break;
5795 
5796 	default:
5797 		return -EINVAL;
5798 	}
5799 
5800 	/* Do not overwrite any of the map or rp information
5801 	 * until we are sure we can commit to a new buffer.
5802 	 *
5803 	 * Callers depend upon this behavior and assume that
5804 	 * we leave everything unchanged if we fail.
5805 	 */
5806 	skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
5807 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5808 	if (skb_size <= PAGE_SIZE) {
5809 		data = netdev_alloc_frag(skb_size);
5810 		*frag_size = skb_size;
5811 	} else {
5812 		data = kmalloc(skb_size, GFP_ATOMIC);
5813 		*frag_size = 0;
5814 	}
5815 	if (!data)
5816 		return -ENOMEM;
5817 
5818 	mapping = pci_map_single(tp->pdev,
5819 				 data + TG3_RX_OFFSET(tp),
5820 				 data_size,
5821 				 PCI_DMA_FROMDEVICE);
5822 	if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
5823 		tg3_frag_free(skb_size <= PAGE_SIZE, data);
5824 		return -EIO;
5825 	}
5826 
5827 	map->data = data;
5828 	dma_unmap_addr_set(map, mapping, mapping);
5829 
5830 	desc->addr_hi = ((u64)mapping >> 32);
5831 	desc->addr_lo = ((u64)mapping & 0xffffffff);
5832 
5833 	return data_size;
5834 }
5835 
5836 /* We only need to move over in the address because the other
5837  * members of the RX descriptor are invariant.  See notes above
5838  * tg3_alloc_rx_data for full details.
5839  */
5840 static void tg3_recycle_rx(struct tg3_napi *tnapi,
5841 			   struct tg3_rx_prodring_set *dpr,
5842 			   u32 opaque_key, int src_idx,
5843 			   u32 dest_idx_unmasked)
5844 {
5845 	struct tg3 *tp = tnapi->tp;
5846 	struct tg3_rx_buffer_desc *src_desc, *dest_desc;
5847 	struct ring_info *src_map, *dest_map;
5848 	struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
5849 	int dest_idx;
5850 
5851 	switch (opaque_key) {
5852 	case RXD_OPAQUE_RING_STD:
5853 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5854 		dest_desc = &dpr->rx_std[dest_idx];
5855 		dest_map = &dpr->rx_std_buffers[dest_idx];
5856 		src_desc = &spr->rx_std[src_idx];
5857 		src_map = &spr->rx_std_buffers[src_idx];
5858 		break;
5859 
5860 	case RXD_OPAQUE_RING_JUMBO:
5861 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5862 		dest_desc = &dpr->rx_jmb[dest_idx].std;
5863 		dest_map = &dpr->rx_jmb_buffers[dest_idx];
5864 		src_desc = &spr->rx_jmb[src_idx].std;
5865 		src_map = &spr->rx_jmb_buffers[src_idx];
5866 		break;
5867 
5868 	default:
5869 		return;
5870 	}
5871 
5872 	dest_map->data = src_map->data;
5873 	dma_unmap_addr_set(dest_map, mapping,
5874 			   dma_unmap_addr(src_map, mapping));
5875 	dest_desc->addr_hi = src_desc->addr_hi;
5876 	dest_desc->addr_lo = src_desc->addr_lo;
5877 
5878 	/* Ensure that the update to the skb happens after the physical
5879 	 * addresses have been transferred to the new BD location.
5880 	 */
5881 	smp_wmb();
5882 
5883 	src_map->data = NULL;
5884 }
5885 
5886 /* The RX ring scheme is composed of multiple rings which post fresh
5887  * buffers to the chip, and one special ring the chip uses to report
5888  * status back to the host.
5889  *
5890  * The special ring reports the status of received packets to the
5891  * host.  The chip does not write into the original descriptor the
5892  * RX buffer was obtained from.  The chip simply takes the original
5893  * descriptor as provided by the host, updates the status and length
5894  * field, then writes this into the next status ring entry.
5895  *
5896  * Each ring the host uses to post buffers to the chip is described
5897  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
5898  * it is first placed into the on-chip ram.  When the packet's length
5899  * is known, it walks down the TG3_BDINFO entries to select the ring.
5900  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
5901  * which is within the range of the new packet's length is chosen.
5902  *
5903  * The "separate ring for rx status" scheme may sound queer, but it makes
5904  * sense from a cache coherency perspective.  If only the host writes
5905  * to the buffer post rings, and only the chip writes to the rx status
5906  * rings, then cache lines never move beyond shared-modified state.
5907  * If both the host and chip were to write into the same ring, cache line
5908  * eviction could occur since both entities want it in an exclusive state.
5909  */
5910 static int tg3_rx(struct tg3_napi *tnapi, int budget)
5911 {
5912 	struct tg3 *tp = tnapi->tp;
5913 	u32 work_mask, rx_std_posted = 0;
5914 	u32 std_prod_idx, jmb_prod_idx;
5915 	u32 sw_idx = tnapi->rx_rcb_ptr;
5916 	u16 hw_idx;
5917 	int received;
5918 	struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
5919 
5920 	hw_idx = *(tnapi->rx_rcb_prod_idx);
5921 	/*
5922 	 * We need to order the read of hw_idx and the read of
5923 	 * the opaque cookie.
5924 	 */
5925 	rmb();
5926 	work_mask = 0;
5927 	received = 0;
5928 	std_prod_idx = tpr->rx_std_prod_idx;
5929 	jmb_prod_idx = tpr->rx_jmb_prod_idx;
5930 	while (sw_idx != hw_idx && budget > 0) {
5931 		struct ring_info *ri;
5932 		struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
5933 		unsigned int len;
5934 		struct sk_buff *skb;
5935 		dma_addr_t dma_addr;
5936 		u32 opaque_key, desc_idx, *post_ptr;
5937 		u8 *data;
5938 
5939 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
5940 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
5941 		if (opaque_key == RXD_OPAQUE_RING_STD) {
5942 			ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
5943 			dma_addr = dma_unmap_addr(ri, mapping);
5944 			data = ri->data;
5945 			post_ptr = &std_prod_idx;
5946 			rx_std_posted++;
5947 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
5948 			ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
5949 			dma_addr = dma_unmap_addr(ri, mapping);
5950 			data = ri->data;
5951 			post_ptr = &jmb_prod_idx;
5952 		} else
5953 			goto next_pkt_nopost;
5954 
5955 		work_mask |= opaque_key;
5956 
5957 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
5958 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
5959 		drop_it:
5960 			tg3_recycle_rx(tnapi, tpr, opaque_key,
5961 				       desc_idx, *post_ptr);
5962 		drop_it_no_recycle:
5963 			/* Other statistics kept track of by card. */
5964 			tp->rx_dropped++;
5965 			goto next_pkt;
5966 		}
5967 
5968 		prefetch(data + TG3_RX_OFFSET(tp));
5969 		len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
5970 		      ETH_FCS_LEN;
5971 
5972 		if (len > TG3_RX_COPY_THRESH(tp)) {
5973 			int skb_size;
5974 			unsigned int frag_size;
5975 
5976 			skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
5977 						    *post_ptr, &frag_size);
5978 			if (skb_size < 0)
5979 				goto drop_it;
5980 
5981 			pci_unmap_single(tp->pdev, dma_addr, skb_size,
5982 					 PCI_DMA_FROMDEVICE);
5983 
5984 			skb = build_skb(data, frag_size);
5985 			if (!skb) {
5986 				tg3_frag_free(frag_size != 0, data);
5987 				goto drop_it_no_recycle;
5988 			}
5989 			skb_reserve(skb, TG3_RX_OFFSET(tp));
5990 			/* Ensure that the update to the data happens
5991 			 * after the usage of the old DMA mapping.
5992 			 */
5993 			smp_wmb();
5994 
5995 			ri->data = NULL;
5996 
5997 		} else {
5998 			tg3_recycle_rx(tnapi, tpr, opaque_key,
5999 				       desc_idx, *post_ptr);
6000 
6001 			skb = netdev_alloc_skb(tp->dev,
6002 					       len + TG3_RAW_IP_ALIGN);
6003 			if (skb == NULL)
6004 				goto drop_it_no_recycle;
6005 
6006 			skb_reserve(skb, TG3_RAW_IP_ALIGN);
6007 			pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6008 			memcpy(skb->data,
6009 			       data + TG3_RX_OFFSET(tp),
6010 			       len);
6011 			pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6012 		}
6013 
6014 		skb_put(skb, len);
6015 		if ((tp->dev->features & NETIF_F_RXCSUM) &&
6016 		    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6017 		    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6018 		      >> RXD_TCPCSUM_SHIFT) == 0xffff))
6019 			skb->ip_summed = CHECKSUM_UNNECESSARY;
6020 		else
6021 			skb_checksum_none_assert(skb);
6022 
6023 		skb->protocol = eth_type_trans(skb, tp->dev);
6024 
6025 		if (len > (tp->dev->mtu + ETH_HLEN) &&
6026 		    skb->protocol != htons(ETH_P_8021Q)) {
6027 			dev_kfree_skb(skb);
6028 			goto drop_it_no_recycle;
6029 		}
6030 
6031 		if (desc->type_flags & RXD_FLAG_VLAN &&
6032 		    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6033 			__vlan_hwaccel_put_tag(skb,
6034 					       desc->err_vlan & RXD_VLAN_MASK);
6035 
6036 		napi_gro_receive(&tnapi->napi, skb);
6037 
6038 		received++;
6039 		budget--;
6040 
6041 next_pkt:
6042 		(*post_ptr)++;
6043 
6044 		if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6045 			tpr->rx_std_prod_idx = std_prod_idx &
6046 					       tp->rx_std_ring_mask;
6047 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6048 				     tpr->rx_std_prod_idx);
6049 			work_mask &= ~RXD_OPAQUE_RING_STD;
6050 			rx_std_posted = 0;
6051 		}
6052 next_pkt_nopost:
6053 		sw_idx++;
6054 		sw_idx &= tp->rx_ret_ring_mask;
6055 
6056 		/* Refresh hw_idx to see if there is new work */
6057 		if (sw_idx == hw_idx) {
6058 			hw_idx = *(tnapi->rx_rcb_prod_idx);
6059 			rmb();
6060 		}
6061 	}
6062 
6063 	/* ACK the status ring. */
6064 	tnapi->rx_rcb_ptr = sw_idx;
6065 	tw32_rx_mbox(tnapi->consmbox, sw_idx);
6066 
6067 	/* Refill RX ring(s). */
6068 	if (!tg3_flag(tp, ENABLE_RSS)) {
6069 		/* Sync BD data before updating mailbox */
6070 		wmb();
6071 
6072 		if (work_mask & RXD_OPAQUE_RING_STD) {
6073 			tpr->rx_std_prod_idx = std_prod_idx &
6074 					       tp->rx_std_ring_mask;
6075 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6076 				     tpr->rx_std_prod_idx);
6077 		}
6078 		if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6079 			tpr->rx_jmb_prod_idx = jmb_prod_idx &
6080 					       tp->rx_jmb_ring_mask;
6081 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6082 				     tpr->rx_jmb_prod_idx);
6083 		}
6084 		mmiowb();
6085 	} else if (work_mask) {
6086 		/* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6087 		 * updated before the producer indices can be updated.
6088 		 */
6089 		smp_wmb();
6090 
6091 		tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6092 		tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6093 
6094 		if (tnapi != &tp->napi[1]) {
6095 			tp->rx_refill = true;
6096 			napi_schedule(&tp->napi[1].napi);
6097 		}
6098 	}
6099 
6100 	return received;
6101 }
6102 
6103 static void tg3_poll_link(struct tg3 *tp)
6104 {
6105 	/* handle link change and other phy events */
6106 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
6107 		struct tg3_hw_status *sblk = tp->napi[0].hw_status;
6108 
6109 		if (sblk->status & SD_STATUS_LINK_CHG) {
6110 			sblk->status = SD_STATUS_UPDATED |
6111 				       (sblk->status & ~SD_STATUS_LINK_CHG);
6112 			spin_lock(&tp->lock);
6113 			if (tg3_flag(tp, USE_PHYLIB)) {
6114 				tw32_f(MAC_STATUS,
6115 				     (MAC_STATUS_SYNC_CHANGED |
6116 				      MAC_STATUS_CFG_CHANGED |
6117 				      MAC_STATUS_MI_COMPLETION |
6118 				      MAC_STATUS_LNKSTATE_CHANGED));
6119 				udelay(40);
6120 			} else
6121 				tg3_setup_phy(tp, 0);
6122 			spin_unlock(&tp->lock);
6123 		}
6124 	}
6125 }
6126 
6127 static int tg3_rx_prodring_xfer(struct tg3 *tp,
6128 				struct tg3_rx_prodring_set *dpr,
6129 				struct tg3_rx_prodring_set *spr)
6130 {
6131 	u32 si, di, cpycnt, src_prod_idx;
6132 	int i, err = 0;
6133 
6134 	while (1) {
6135 		src_prod_idx = spr->rx_std_prod_idx;
6136 
6137 		/* Make sure updates to the rx_std_buffers[] entries and the
6138 		 * standard producer index are seen in the correct order.
6139 		 */
6140 		smp_rmb();
6141 
6142 		if (spr->rx_std_cons_idx == src_prod_idx)
6143 			break;
6144 
6145 		if (spr->rx_std_cons_idx < src_prod_idx)
6146 			cpycnt = src_prod_idx - spr->rx_std_cons_idx;
6147 		else
6148 			cpycnt = tp->rx_std_ring_mask + 1 -
6149 				 spr->rx_std_cons_idx;
6150 
6151 		cpycnt = min(cpycnt,
6152 			     tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
6153 
6154 		si = spr->rx_std_cons_idx;
6155 		di = dpr->rx_std_prod_idx;
6156 
6157 		for (i = di; i < di + cpycnt; i++) {
6158 			if (dpr->rx_std_buffers[i].data) {
6159 				cpycnt = i - di;
6160 				err = -ENOSPC;
6161 				break;
6162 			}
6163 		}
6164 
6165 		if (!cpycnt)
6166 			break;
6167 
6168 		/* Ensure that updates to the rx_std_buffers ring and the
6169 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6170 		 * ordered correctly WRT the skb check above.
6171 		 */
6172 		smp_rmb();
6173 
6174 		memcpy(&dpr->rx_std_buffers[di],
6175 		       &spr->rx_std_buffers[si],
6176 		       cpycnt * sizeof(struct ring_info));
6177 
6178 		for (i = 0; i < cpycnt; i++, di++, si++) {
6179 			struct tg3_rx_buffer_desc *sbd, *dbd;
6180 			sbd = &spr->rx_std[si];
6181 			dbd = &dpr->rx_std[di];
6182 			dbd->addr_hi = sbd->addr_hi;
6183 			dbd->addr_lo = sbd->addr_lo;
6184 		}
6185 
6186 		spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
6187 				       tp->rx_std_ring_mask;
6188 		dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
6189 				       tp->rx_std_ring_mask;
6190 	}
6191 
6192 	while (1) {
6193 		src_prod_idx = spr->rx_jmb_prod_idx;
6194 
6195 		/* Make sure updates to the rx_jmb_buffers[] entries and
6196 		 * the jumbo producer index are seen in the correct order.
6197 		 */
6198 		smp_rmb();
6199 
6200 		if (spr->rx_jmb_cons_idx == src_prod_idx)
6201 			break;
6202 
6203 		if (spr->rx_jmb_cons_idx < src_prod_idx)
6204 			cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
6205 		else
6206 			cpycnt = tp->rx_jmb_ring_mask + 1 -
6207 				 spr->rx_jmb_cons_idx;
6208 
6209 		cpycnt = min(cpycnt,
6210 			     tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
6211 
6212 		si = spr->rx_jmb_cons_idx;
6213 		di = dpr->rx_jmb_prod_idx;
6214 
6215 		for (i = di; i < di + cpycnt; i++) {
6216 			if (dpr->rx_jmb_buffers[i].data) {
6217 				cpycnt = i - di;
6218 				err = -ENOSPC;
6219 				break;
6220 			}
6221 		}
6222 
6223 		if (!cpycnt)
6224 			break;
6225 
6226 		/* Ensure that updates to the rx_jmb_buffers ring and the
6227 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6228 		 * ordered correctly WRT the skb check above.
6229 		 */
6230 		smp_rmb();
6231 
6232 		memcpy(&dpr->rx_jmb_buffers[di],
6233 		       &spr->rx_jmb_buffers[si],
6234 		       cpycnt * sizeof(struct ring_info));
6235 
6236 		for (i = 0; i < cpycnt; i++, di++, si++) {
6237 			struct tg3_rx_buffer_desc *sbd, *dbd;
6238 			sbd = &spr->rx_jmb[si].std;
6239 			dbd = &dpr->rx_jmb[di].std;
6240 			dbd->addr_hi = sbd->addr_hi;
6241 			dbd->addr_lo = sbd->addr_lo;
6242 		}
6243 
6244 		spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
6245 				       tp->rx_jmb_ring_mask;
6246 		dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
6247 				       tp->rx_jmb_ring_mask;
6248 	}
6249 
6250 	return err;
6251 }
6252 
6253 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
6254 {
6255 	struct tg3 *tp = tnapi->tp;
6256 
6257 	/* run TX completion thread */
6258 	if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
6259 		tg3_tx(tnapi);
6260 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6261 			return work_done;
6262 	}
6263 
6264 	if (!tnapi->rx_rcb_prod_idx)
6265 		return work_done;
6266 
6267 	/* run RX thread, within the bounds set by NAPI.
6268 	 * All RX "locking" is done by ensuring outside
6269 	 * code synchronizes with tg3->napi.poll()
6270 	 */
6271 	if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
6272 		work_done += tg3_rx(tnapi, budget - work_done);
6273 
6274 	if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
6275 		struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
6276 		int i, err = 0;
6277 		u32 std_prod_idx = dpr->rx_std_prod_idx;
6278 		u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
6279 
6280 		tp->rx_refill = false;
6281 		for (i = 1; i < tp->irq_cnt; i++)
6282 			err |= tg3_rx_prodring_xfer(tp, dpr,
6283 						    &tp->napi[i].prodring);
6284 
6285 		wmb();
6286 
6287 		if (std_prod_idx != dpr->rx_std_prod_idx)
6288 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6289 				     dpr->rx_std_prod_idx);
6290 
6291 		if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
6292 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6293 				     dpr->rx_jmb_prod_idx);
6294 
6295 		mmiowb();
6296 
6297 		if (err)
6298 			tw32_f(HOSTCC_MODE, tp->coal_now);
6299 	}
6300 
6301 	return work_done;
6302 }
6303 
6304 static inline void tg3_reset_task_schedule(struct tg3 *tp)
6305 {
6306 	if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
6307 		schedule_work(&tp->reset_task);
6308 }
6309 
6310 static inline void tg3_reset_task_cancel(struct tg3 *tp)
6311 {
6312 	cancel_work_sync(&tp->reset_task);
6313 	tg3_flag_clear(tp, RESET_TASK_PENDING);
6314 	tg3_flag_clear(tp, TX_RECOVERY_PENDING);
6315 }
6316 
6317 static int tg3_poll_msix(struct napi_struct *napi, int budget)
6318 {
6319 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6320 	struct tg3 *tp = tnapi->tp;
6321 	int work_done = 0;
6322 	struct tg3_hw_status *sblk = tnapi->hw_status;
6323 
6324 	while (1) {
6325 		work_done = tg3_poll_work(tnapi, work_done, budget);
6326 
6327 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6328 			goto tx_recovery;
6329 
6330 		if (unlikely(work_done >= budget))
6331 			break;
6332 
6333 		/* tp->last_tag is used in tg3_int_reenable() below
6334 		 * to tell the hw how much work has been processed,
6335 		 * so we must read it before checking for more work.
6336 		 */
6337 		tnapi->last_tag = sblk->status_tag;
6338 		tnapi->last_irq_tag = tnapi->last_tag;
6339 		rmb();
6340 
6341 		/* check for RX/TX work to do */
6342 		if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
6343 			   *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
6344 
6345 			/* This test here is not race free, but will reduce
6346 			 * the number of interrupts by looping again.
6347 			 */
6348 			if (tnapi == &tp->napi[1] && tp->rx_refill)
6349 				continue;
6350 
6351 			napi_complete(napi);
6352 			/* Reenable interrupts. */
6353 			tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
6354 
6355 			/* This test here is synchronized by napi_schedule()
6356 			 * and napi_complete() to close the race condition.
6357 			 */
6358 			if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
6359 				tw32(HOSTCC_MODE, tp->coalesce_mode |
6360 						  HOSTCC_MODE_ENABLE |
6361 						  tnapi->coal_now);
6362 			}
6363 			mmiowb();
6364 			break;
6365 		}
6366 	}
6367 
6368 	return work_done;
6369 
6370 tx_recovery:
6371 	/* work_done is guaranteed to be less than budget. */
6372 	napi_complete(napi);
6373 	tg3_reset_task_schedule(tp);
6374 	return work_done;
6375 }
6376 
6377 static void tg3_process_error(struct tg3 *tp)
6378 {
6379 	u32 val;
6380 	bool real_error = false;
6381 
6382 	if (tg3_flag(tp, ERROR_PROCESSED))
6383 		return;
6384 
6385 	/* Check Flow Attention register */
6386 	val = tr32(HOSTCC_FLOW_ATTN);
6387 	if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
6388 		netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
6389 		real_error = true;
6390 	}
6391 
6392 	if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
6393 		netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
6394 		real_error = true;
6395 	}
6396 
6397 	if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
6398 		netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
6399 		real_error = true;
6400 	}
6401 
6402 	if (!real_error)
6403 		return;
6404 
6405 	tg3_dump_state(tp);
6406 
6407 	tg3_flag_set(tp, ERROR_PROCESSED);
6408 	tg3_reset_task_schedule(tp);
6409 }
6410 
6411 static int tg3_poll(struct napi_struct *napi, int budget)
6412 {
6413 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6414 	struct tg3 *tp = tnapi->tp;
6415 	int work_done = 0;
6416 	struct tg3_hw_status *sblk = tnapi->hw_status;
6417 
6418 	while (1) {
6419 		if (sblk->status & SD_STATUS_ERROR)
6420 			tg3_process_error(tp);
6421 
6422 		tg3_poll_link(tp);
6423 
6424 		work_done = tg3_poll_work(tnapi, work_done, budget);
6425 
6426 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6427 			goto tx_recovery;
6428 
6429 		if (unlikely(work_done >= budget))
6430 			break;
6431 
6432 		if (tg3_flag(tp, TAGGED_STATUS)) {
6433 			/* tp->last_tag is used in tg3_int_reenable() below
6434 			 * to tell the hw how much work has been processed,
6435 			 * so we must read it before checking for more work.
6436 			 */
6437 			tnapi->last_tag = sblk->status_tag;
6438 			tnapi->last_irq_tag = tnapi->last_tag;
6439 			rmb();
6440 		} else
6441 			sblk->status &= ~SD_STATUS_UPDATED;
6442 
6443 		if (likely(!tg3_has_work(tnapi))) {
6444 			napi_complete(napi);
6445 			tg3_int_reenable(tnapi);
6446 			break;
6447 		}
6448 	}
6449 
6450 	return work_done;
6451 
6452 tx_recovery:
6453 	/* work_done is guaranteed to be less than budget. */
6454 	napi_complete(napi);
6455 	tg3_reset_task_schedule(tp);
6456 	return work_done;
6457 }
6458 
6459 static void tg3_napi_disable(struct tg3 *tp)
6460 {
6461 	int i;
6462 
6463 	for (i = tp->irq_cnt - 1; i >= 0; i--)
6464 		napi_disable(&tp->napi[i].napi);
6465 }
6466 
6467 static void tg3_napi_enable(struct tg3 *tp)
6468 {
6469 	int i;
6470 
6471 	for (i = 0; i < tp->irq_cnt; i++)
6472 		napi_enable(&tp->napi[i].napi);
6473 }
6474 
6475 static void tg3_napi_init(struct tg3 *tp)
6476 {
6477 	int i;
6478 
6479 	netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
6480 	for (i = 1; i < tp->irq_cnt; i++)
6481 		netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
6482 }
6483 
6484 static void tg3_napi_fini(struct tg3 *tp)
6485 {
6486 	int i;
6487 
6488 	for (i = 0; i < tp->irq_cnt; i++)
6489 		netif_napi_del(&tp->napi[i].napi);
6490 }
6491 
6492 static inline void tg3_netif_stop(struct tg3 *tp)
6493 {
6494 	tp->dev->trans_start = jiffies;	/* prevent tx timeout */
6495 	tg3_napi_disable(tp);
6496 	netif_tx_disable(tp->dev);
6497 }
6498 
6499 static inline void tg3_netif_start(struct tg3 *tp)
6500 {
6501 	/* NOTE: unconditional netif_tx_wake_all_queues is only
6502 	 * appropriate so long as all callers are assured to
6503 	 * have free tx slots (such as after tg3_init_hw)
6504 	 */
6505 	netif_tx_wake_all_queues(tp->dev);
6506 
6507 	tg3_napi_enable(tp);
6508 	tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
6509 	tg3_enable_ints(tp);
6510 }
6511 
6512 static void tg3_irq_quiesce(struct tg3 *tp)
6513 {
6514 	int i;
6515 
6516 	BUG_ON(tp->irq_sync);
6517 
6518 	tp->irq_sync = 1;
6519 	smp_mb();
6520 
6521 	for (i = 0; i < tp->irq_cnt; i++)
6522 		synchronize_irq(tp->napi[i].irq_vec);
6523 }
6524 
6525 /* Fully shutdown all tg3 driver activity elsewhere in the system.
6526  * If irq_sync is non-zero, then the IRQ handler must be synchronized
6527  * with as well.  Most of the time, this is not necessary except when
6528  * shutting down the device.
6529  */
6530 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
6531 {
6532 	spin_lock_bh(&tp->lock);
6533 	if (irq_sync)
6534 		tg3_irq_quiesce(tp);
6535 }
6536 
6537 static inline void tg3_full_unlock(struct tg3 *tp)
6538 {
6539 	spin_unlock_bh(&tp->lock);
6540 }
6541 
6542 /* One-shot MSI handler - Chip automatically disables interrupt
6543  * after sending MSI so driver doesn't have to do it.
6544  */
6545 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
6546 {
6547 	struct tg3_napi *tnapi = dev_id;
6548 	struct tg3 *tp = tnapi->tp;
6549 
6550 	prefetch(tnapi->hw_status);
6551 	if (tnapi->rx_rcb)
6552 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6553 
6554 	if (likely(!tg3_irq_sync(tp)))
6555 		napi_schedule(&tnapi->napi);
6556 
6557 	return IRQ_HANDLED;
6558 }
6559 
6560 /* MSI ISR - No need to check for interrupt sharing and no need to
6561  * flush status block and interrupt mailbox. PCI ordering rules
6562  * guarantee that MSI will arrive after the status block.
6563  */
6564 static irqreturn_t tg3_msi(int irq, void *dev_id)
6565 {
6566 	struct tg3_napi *tnapi = dev_id;
6567 	struct tg3 *tp = tnapi->tp;
6568 
6569 	prefetch(tnapi->hw_status);
6570 	if (tnapi->rx_rcb)
6571 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6572 	/*
6573 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6574 	 * chip-internal interrupt pending events.
6575 	 * Writing non-zero to intr-mbox-0 additional tells the
6576 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6577 	 * event coalescing.
6578 	 */
6579 	tw32_mailbox(tnapi->int_mbox, 0x00000001);
6580 	if (likely(!tg3_irq_sync(tp)))
6581 		napi_schedule(&tnapi->napi);
6582 
6583 	return IRQ_RETVAL(1);
6584 }
6585 
6586 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
6587 {
6588 	struct tg3_napi *tnapi = dev_id;
6589 	struct tg3 *tp = tnapi->tp;
6590 	struct tg3_hw_status *sblk = tnapi->hw_status;
6591 	unsigned int handled = 1;
6592 
6593 	/* In INTx mode, it is possible for the interrupt to arrive at
6594 	 * the CPU before the status block posted prior to the interrupt.
6595 	 * Reading the PCI State register will confirm whether the
6596 	 * interrupt is ours and will flush the status block.
6597 	 */
6598 	if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
6599 		if (tg3_flag(tp, CHIP_RESETTING) ||
6600 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6601 			handled = 0;
6602 			goto out;
6603 		}
6604 	}
6605 
6606 	/*
6607 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6608 	 * chip-internal interrupt pending events.
6609 	 * Writing non-zero to intr-mbox-0 additional tells the
6610 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6611 	 * event coalescing.
6612 	 *
6613 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6614 	 * spurious interrupts.  The flush impacts performance but
6615 	 * excessive spurious interrupts can be worse in some cases.
6616 	 */
6617 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6618 	if (tg3_irq_sync(tp))
6619 		goto out;
6620 	sblk->status &= ~SD_STATUS_UPDATED;
6621 	if (likely(tg3_has_work(tnapi))) {
6622 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6623 		napi_schedule(&tnapi->napi);
6624 	} else {
6625 		/* No work, shared interrupt perhaps?  re-enable
6626 		 * interrupts, and flush that PCI write
6627 		 */
6628 		tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
6629 			       0x00000000);
6630 	}
6631 out:
6632 	return IRQ_RETVAL(handled);
6633 }
6634 
6635 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
6636 {
6637 	struct tg3_napi *tnapi = dev_id;
6638 	struct tg3 *tp = tnapi->tp;
6639 	struct tg3_hw_status *sblk = tnapi->hw_status;
6640 	unsigned int handled = 1;
6641 
6642 	/* In INTx mode, it is possible for the interrupt to arrive at
6643 	 * the CPU before the status block posted prior to the interrupt.
6644 	 * Reading the PCI State register will confirm whether the
6645 	 * interrupt is ours and will flush the status block.
6646 	 */
6647 	if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
6648 		if (tg3_flag(tp, CHIP_RESETTING) ||
6649 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6650 			handled = 0;
6651 			goto out;
6652 		}
6653 	}
6654 
6655 	/*
6656 	 * writing any value to intr-mbox-0 clears PCI INTA# and
6657 	 * chip-internal interrupt pending events.
6658 	 * writing non-zero to intr-mbox-0 additional tells the
6659 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6660 	 * event coalescing.
6661 	 *
6662 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6663 	 * spurious interrupts.  The flush impacts performance but
6664 	 * excessive spurious interrupts can be worse in some cases.
6665 	 */
6666 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6667 
6668 	/*
6669 	 * In a shared interrupt configuration, sometimes other devices'
6670 	 * interrupts will scream.  We record the current status tag here
6671 	 * so that the above check can report that the screaming interrupts
6672 	 * are unhandled.  Eventually they will be silenced.
6673 	 */
6674 	tnapi->last_irq_tag = sblk->status_tag;
6675 
6676 	if (tg3_irq_sync(tp))
6677 		goto out;
6678 
6679 	prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6680 
6681 	napi_schedule(&tnapi->napi);
6682 
6683 out:
6684 	return IRQ_RETVAL(handled);
6685 }
6686 
6687 /* ISR for interrupt test */
6688 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
6689 {
6690 	struct tg3_napi *tnapi = dev_id;
6691 	struct tg3 *tp = tnapi->tp;
6692 	struct tg3_hw_status *sblk = tnapi->hw_status;
6693 
6694 	if ((sblk->status & SD_STATUS_UPDATED) ||
6695 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6696 		tg3_disable_ints(tp);
6697 		return IRQ_RETVAL(1);
6698 	}
6699 	return IRQ_RETVAL(0);
6700 }
6701 
6702 #ifdef CONFIG_NET_POLL_CONTROLLER
6703 static void tg3_poll_controller(struct net_device *dev)
6704 {
6705 	int i;
6706 	struct tg3 *tp = netdev_priv(dev);
6707 
6708 	for (i = 0; i < tp->irq_cnt; i++)
6709 		tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
6710 }
6711 #endif
6712 
6713 static void tg3_tx_timeout(struct net_device *dev)
6714 {
6715 	struct tg3 *tp = netdev_priv(dev);
6716 
6717 	if (netif_msg_tx_err(tp)) {
6718 		netdev_err(dev, "transmit timed out, resetting\n");
6719 		tg3_dump_state(tp);
6720 	}
6721 
6722 	tg3_reset_task_schedule(tp);
6723 }
6724 
6725 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
6726 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
6727 {
6728 	u32 base = (u32) mapping & 0xffffffff;
6729 
6730 	return (base > 0xffffdcc0) && (base + len + 8 < base);
6731 }
6732 
6733 /* Test for DMA addresses > 40-bit */
6734 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
6735 					  int len)
6736 {
6737 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
6738 	if (tg3_flag(tp, 40BIT_DMA_BUG))
6739 		return ((u64) mapping + len) > DMA_BIT_MASK(40);
6740 	return 0;
6741 #else
6742 	return 0;
6743 #endif
6744 }
6745 
6746 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
6747 				 dma_addr_t mapping, u32 len, u32 flags,
6748 				 u32 mss, u32 vlan)
6749 {
6750 	txbd->addr_hi = ((u64) mapping >> 32);
6751 	txbd->addr_lo = ((u64) mapping & 0xffffffff);
6752 	txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
6753 	txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
6754 }
6755 
6756 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
6757 			    dma_addr_t map, u32 len, u32 flags,
6758 			    u32 mss, u32 vlan)
6759 {
6760 	struct tg3 *tp = tnapi->tp;
6761 	bool hwbug = false;
6762 
6763 	if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
6764 		hwbug = true;
6765 
6766 	if (tg3_4g_overflow_test(map, len))
6767 		hwbug = true;
6768 
6769 	if (tg3_40bit_overflow_test(tp, map, len))
6770 		hwbug = true;
6771 
6772 	if (tp->dma_limit) {
6773 		u32 prvidx = *entry;
6774 		u32 tmp_flag = flags & ~TXD_FLAG_END;
6775 		while (len > tp->dma_limit && *budget) {
6776 			u32 frag_len = tp->dma_limit;
6777 			len -= tp->dma_limit;
6778 
6779 			/* Avoid the 8byte DMA problem */
6780 			if (len <= 8) {
6781 				len += tp->dma_limit / 2;
6782 				frag_len = tp->dma_limit / 2;
6783 			}
6784 
6785 			tnapi->tx_buffers[*entry].fragmented = true;
6786 
6787 			tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6788 				      frag_len, tmp_flag, mss, vlan);
6789 			*budget -= 1;
6790 			prvidx = *entry;
6791 			*entry = NEXT_TX(*entry);
6792 
6793 			map += frag_len;
6794 		}
6795 
6796 		if (len) {
6797 			if (*budget) {
6798 				tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6799 					      len, flags, mss, vlan);
6800 				*budget -= 1;
6801 				*entry = NEXT_TX(*entry);
6802 			} else {
6803 				hwbug = true;
6804 				tnapi->tx_buffers[prvidx].fragmented = false;
6805 			}
6806 		}
6807 	} else {
6808 		tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6809 			      len, flags, mss, vlan);
6810 		*entry = NEXT_TX(*entry);
6811 	}
6812 
6813 	return hwbug;
6814 }
6815 
6816 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
6817 {
6818 	int i;
6819 	struct sk_buff *skb;
6820 	struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
6821 
6822 	skb = txb->skb;
6823 	txb->skb = NULL;
6824 
6825 	pci_unmap_single(tnapi->tp->pdev,
6826 			 dma_unmap_addr(txb, mapping),
6827 			 skb_headlen(skb),
6828 			 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 	for (i = 0; i <= last; i++) {
6837 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6838 
6839 		entry = NEXT_TX(entry);
6840 		txb = &tnapi->tx_buffers[entry];
6841 
6842 		pci_unmap_page(tnapi->tp->pdev,
6843 			       dma_unmap_addr(txb, mapping),
6844 			       skb_frag_size(frag), PCI_DMA_TODEVICE);
6845 
6846 		while (txb->fragmented) {
6847 			txb->fragmented = false;
6848 			entry = NEXT_TX(entry);
6849 			txb = &tnapi->tx_buffers[entry];
6850 		}
6851 	}
6852 }
6853 
6854 /* Workaround 4GB and 40-bit hardware DMA bugs. */
6855 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
6856 				       struct sk_buff **pskb,
6857 				       u32 *entry, u32 *budget,
6858 				       u32 base_flags, u32 mss, u32 vlan)
6859 {
6860 	struct tg3 *tp = tnapi->tp;
6861 	struct sk_buff *new_skb, *skb = *pskb;
6862 	dma_addr_t new_addr = 0;
6863 	int ret = 0;
6864 
6865 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
6866 		new_skb = skb_copy(skb, GFP_ATOMIC);
6867 	else {
6868 		int more_headroom = 4 - ((unsigned long)skb->data & 3);
6869 
6870 		new_skb = skb_copy_expand(skb,
6871 					  skb_headroom(skb) + more_headroom,
6872 					  skb_tailroom(skb), GFP_ATOMIC);
6873 	}
6874 
6875 	if (!new_skb) {
6876 		ret = -1;
6877 	} else {
6878 		/* New SKB is guaranteed to be linear. */
6879 		new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
6880 					  PCI_DMA_TODEVICE);
6881 		/* Make sure the mapping succeeded */
6882 		if (pci_dma_mapping_error(tp->pdev, new_addr)) {
6883 			dev_kfree_skb(new_skb);
6884 			ret = -1;
6885 		} else {
6886 			u32 save_entry = *entry;
6887 
6888 			base_flags |= TXD_FLAG_END;
6889 
6890 			tnapi->tx_buffers[*entry].skb = new_skb;
6891 			dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
6892 					   mapping, new_addr);
6893 
6894 			if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
6895 					    new_skb->len, base_flags,
6896 					    mss, vlan)) {
6897 				tg3_tx_skb_unmap(tnapi, save_entry, -1);
6898 				dev_kfree_skb(new_skb);
6899 				ret = -1;
6900 			}
6901 		}
6902 	}
6903 
6904 	dev_kfree_skb(skb);
6905 	*pskb = new_skb;
6906 	return ret;
6907 }
6908 
6909 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
6910 
6911 /* Use GSO to workaround a rare TSO bug that may be triggered when the
6912  * TSO header is greater than 80 bytes.
6913  */
6914 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
6915 {
6916 	struct sk_buff *segs, *nskb;
6917 	u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
6918 
6919 	/* Estimate the number of fragments in the worst case */
6920 	if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
6921 		netif_stop_queue(tp->dev);
6922 
6923 		/* netif_tx_stop_queue() must be done before checking
6924 		 * checking tx index in tg3_tx_avail() below, because in
6925 		 * tg3_tx(), we update tx index before checking for
6926 		 * netif_tx_queue_stopped().
6927 		 */
6928 		smp_mb();
6929 		if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
6930 			return NETDEV_TX_BUSY;
6931 
6932 		netif_wake_queue(tp->dev);
6933 	}
6934 
6935 	segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
6936 	if (IS_ERR(segs))
6937 		goto tg3_tso_bug_end;
6938 
6939 	do {
6940 		nskb = segs;
6941 		segs = segs->next;
6942 		nskb->next = NULL;
6943 		tg3_start_xmit(nskb, tp->dev);
6944 	} while (segs);
6945 
6946 tg3_tso_bug_end:
6947 	dev_kfree_skb(skb);
6948 
6949 	return NETDEV_TX_OK;
6950 }
6951 
6952 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
6953  * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
6954  */
6955 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6956 {
6957 	struct tg3 *tp = netdev_priv(dev);
6958 	u32 len, entry, base_flags, mss, vlan = 0;
6959 	u32 budget;
6960 	int i = -1, would_hit_hwbug;
6961 	dma_addr_t mapping;
6962 	struct tg3_napi *tnapi;
6963 	struct netdev_queue *txq;
6964 	unsigned int last;
6965 
6966 	txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
6967 	tnapi = &tp->napi[skb_get_queue_mapping(skb)];
6968 	if (tg3_flag(tp, ENABLE_TSS))
6969 		tnapi++;
6970 
6971 	budget = tg3_tx_avail(tnapi);
6972 
6973 	/* We are running in BH disabled context with netif_tx_lock
6974 	 * and TX reclaim runs via tp->napi.poll inside of a software
6975 	 * interrupt.  Furthermore, IRQ processing runs lockless so we have
6976 	 * no IRQ context deadlocks to worry about either.  Rejoice!
6977 	 */
6978 	if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
6979 		if (!netif_tx_queue_stopped(txq)) {
6980 			netif_tx_stop_queue(txq);
6981 
6982 			/* This is a hard error, log it. */
6983 			netdev_err(dev,
6984 				   "BUG! Tx Ring full when queue awake!\n");
6985 		}
6986 		return NETDEV_TX_BUSY;
6987 	}
6988 
6989 	entry = tnapi->tx_prod;
6990 	base_flags = 0;
6991 	if (skb->ip_summed == CHECKSUM_PARTIAL)
6992 		base_flags |= TXD_FLAG_TCPUDP_CSUM;
6993 
6994 	mss = skb_shinfo(skb)->gso_size;
6995 	if (mss) {
6996 		struct iphdr *iph;
6997 		u32 tcp_opt_len, hdr_len;
6998 
6999 		if (skb_header_cloned(skb) &&
7000 		    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
7001 			goto drop;
7002 
7003 		iph = ip_hdr(skb);
7004 		tcp_opt_len = tcp_optlen(skb);
7005 
7006 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7007 
7008 		if (!skb_is_gso_v6(skb)) {
7009 			iph->check = 0;
7010 			iph->tot_len = htons(mss + hdr_len);
7011 		}
7012 
7013 		if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7014 		    tg3_flag(tp, TSO_BUG))
7015 			return tg3_tso_bug(tp, skb);
7016 
7017 		base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7018 			       TXD_FLAG_CPU_POST_DMA);
7019 
7020 		if (tg3_flag(tp, HW_TSO_1) ||
7021 		    tg3_flag(tp, HW_TSO_2) ||
7022 		    tg3_flag(tp, HW_TSO_3)) {
7023 			tcp_hdr(skb)->check = 0;
7024 			base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7025 		} else
7026 			tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
7027 								 iph->daddr, 0,
7028 								 IPPROTO_TCP,
7029 								 0);
7030 
7031 		if (tg3_flag(tp, HW_TSO_3)) {
7032 			mss |= (hdr_len & 0xc) << 12;
7033 			if (hdr_len & 0x10)
7034 				base_flags |= 0x00000010;
7035 			base_flags |= (hdr_len & 0x3e0) << 5;
7036 		} else if (tg3_flag(tp, HW_TSO_2))
7037 			mss |= hdr_len << 9;
7038 		else if (tg3_flag(tp, HW_TSO_1) ||
7039 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
7040 			if (tcp_opt_len || iph->ihl > 5) {
7041 				int tsflags;
7042 
7043 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7044 				mss |= (tsflags << 11);
7045 			}
7046 		} else {
7047 			if (tcp_opt_len || iph->ihl > 5) {
7048 				int tsflags;
7049 
7050 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7051 				base_flags |= tsflags << 12;
7052 			}
7053 		}
7054 	}
7055 
7056 	if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
7057 	    !mss && skb->len > VLAN_ETH_FRAME_LEN)
7058 		base_flags |= TXD_FLAG_JMB_PKT;
7059 
7060 	if (vlan_tx_tag_present(skb)) {
7061 		base_flags |= TXD_FLAG_VLAN;
7062 		vlan = vlan_tx_tag_get(skb);
7063 	}
7064 
7065 	len = skb_headlen(skb);
7066 
7067 	mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
7068 	if (pci_dma_mapping_error(tp->pdev, mapping))
7069 		goto drop;
7070 
7071 
7072 	tnapi->tx_buffers[entry].skb = skb;
7073 	dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
7074 
7075 	would_hit_hwbug = 0;
7076 
7077 	if (tg3_flag(tp, 5701_DMA_BUG))
7078 		would_hit_hwbug = 1;
7079 
7080 	if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
7081 			  ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
7082 			    mss, vlan)) {
7083 		would_hit_hwbug = 1;
7084 	} else if (skb_shinfo(skb)->nr_frags > 0) {
7085 		u32 tmp_mss = mss;
7086 
7087 		if (!tg3_flag(tp, HW_TSO_1) &&
7088 		    !tg3_flag(tp, HW_TSO_2) &&
7089 		    !tg3_flag(tp, HW_TSO_3))
7090 			tmp_mss = 0;
7091 
7092 		/* Now loop through additional data
7093 		 * fragments, and queue them.
7094 		 */
7095 		last = skb_shinfo(skb)->nr_frags - 1;
7096 		for (i = 0; i <= last; i++) {
7097 			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7098 
7099 			len = skb_frag_size(frag);
7100 			mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
7101 						   len, DMA_TO_DEVICE);
7102 
7103 			tnapi->tx_buffers[entry].skb = NULL;
7104 			dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
7105 					   mapping);
7106 			if (dma_mapping_error(&tp->pdev->dev, mapping))
7107 				goto dma_error;
7108 
7109 			if (!budget ||
7110 			    tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
7111 					    len, base_flags |
7112 					    ((i == last) ? TXD_FLAG_END : 0),
7113 					    tmp_mss, vlan)) {
7114 				would_hit_hwbug = 1;
7115 				break;
7116 			}
7117 		}
7118 	}
7119 
7120 	if (would_hit_hwbug) {
7121 		tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
7122 
7123 		/* If the workaround fails due to memory/mapping
7124 		 * failure, silently drop this packet.
7125 		 */
7126 		entry = tnapi->tx_prod;
7127 		budget = tg3_tx_avail(tnapi);
7128 		if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
7129 						base_flags, mss, vlan))
7130 			goto drop_nofree;
7131 	}
7132 
7133 	skb_tx_timestamp(skb);
7134 	netdev_tx_sent_queue(txq, skb->len);
7135 
7136 	/* Sync BD data before updating mailbox */
7137 	wmb();
7138 
7139 	/* Packets are ready, update Tx producer idx local and on card. */
7140 	tw32_tx_mbox(tnapi->prodmbox, entry);
7141 
7142 	tnapi->tx_prod = entry;
7143 	if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
7144 		netif_tx_stop_queue(txq);
7145 
7146 		/* netif_tx_stop_queue() must be done before checking
7147 		 * checking tx index in tg3_tx_avail() below, because in
7148 		 * tg3_tx(), we update tx index before checking for
7149 		 * netif_tx_queue_stopped().
7150 		 */
7151 		smp_mb();
7152 		if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
7153 			netif_tx_wake_queue(txq);
7154 	}
7155 
7156 	mmiowb();
7157 	return NETDEV_TX_OK;
7158 
7159 dma_error:
7160 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
7161 	tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
7162 drop:
7163 	dev_kfree_skb(skb);
7164 drop_nofree:
7165 	tp->tx_dropped++;
7166 	return NETDEV_TX_OK;
7167 }
7168 
7169 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
7170 {
7171 	if (enable) {
7172 		tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
7173 				  MAC_MODE_PORT_MODE_MASK);
7174 
7175 		tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
7176 
7177 		if (!tg3_flag(tp, 5705_PLUS))
7178 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
7179 
7180 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
7181 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
7182 		else
7183 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
7184 	} else {
7185 		tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
7186 
7187 		if (tg3_flag(tp, 5705_PLUS) ||
7188 		    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
7189 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
7190 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
7191 	}
7192 
7193 	tw32(MAC_MODE, tp->mac_mode);
7194 	udelay(40);
7195 }
7196 
7197 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
7198 {
7199 	u32 val, bmcr, mac_mode, ptest = 0;
7200 
7201 	tg3_phy_toggle_apd(tp, false);
7202 	tg3_phy_toggle_automdix(tp, 0);
7203 
7204 	if (extlpbk && tg3_phy_set_extloopbk(tp))
7205 		return -EIO;
7206 
7207 	bmcr = BMCR_FULLDPLX;
7208 	switch (speed) {
7209 	case SPEED_10:
7210 		break;
7211 	case SPEED_100:
7212 		bmcr |= BMCR_SPEED100;
7213 		break;
7214 	case SPEED_1000:
7215 	default:
7216 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
7217 			speed = SPEED_100;
7218 			bmcr |= BMCR_SPEED100;
7219 		} else {
7220 			speed = SPEED_1000;
7221 			bmcr |= BMCR_SPEED1000;
7222 		}
7223 	}
7224 
7225 	if (extlpbk) {
7226 		if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
7227 			tg3_readphy(tp, MII_CTRL1000, &val);
7228 			val |= CTL1000_AS_MASTER |
7229 			       CTL1000_ENABLE_MASTER;
7230 			tg3_writephy(tp, MII_CTRL1000, val);
7231 		} else {
7232 			ptest = MII_TG3_FET_PTEST_TRIM_SEL |
7233 				MII_TG3_FET_PTEST_TRIM_2;
7234 			tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
7235 		}
7236 	} else
7237 		bmcr |= BMCR_LOOPBACK;
7238 
7239 	tg3_writephy(tp, MII_BMCR, bmcr);
7240 
7241 	/* The write needs to be flushed for the FETs */
7242 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
7243 		tg3_readphy(tp, MII_BMCR, &bmcr);
7244 
7245 	udelay(40);
7246 
7247 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
7248 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
7249 		tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
7250 			     MII_TG3_FET_PTEST_FRC_TX_LINK |
7251 			     MII_TG3_FET_PTEST_FRC_TX_LOCK);
7252 
7253 		/* The write needs to be flushed for the AC131 */
7254 		tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
7255 	}
7256 
7257 	/* Reset to prevent losing 1st rx packet intermittently */
7258 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
7259 	    tg3_flag(tp, 5780_CLASS)) {
7260 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7261 		udelay(10);
7262 		tw32_f(MAC_RX_MODE, tp->rx_mode);
7263 	}
7264 
7265 	mac_mode = tp->mac_mode &
7266 		   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
7267 	if (speed == SPEED_1000)
7268 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
7269 	else
7270 		mac_mode |= MAC_MODE_PORT_MODE_MII;
7271 
7272 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
7273 		u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
7274 
7275 		if (masked_phy_id == TG3_PHY_ID_BCM5401)
7276 			mac_mode &= ~MAC_MODE_LINK_POLARITY;
7277 		else if (masked_phy_id == TG3_PHY_ID_BCM5411)
7278 			mac_mode |= MAC_MODE_LINK_POLARITY;
7279 
7280 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
7281 			     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
7282 	}
7283 
7284 	tw32(MAC_MODE, mac_mode);
7285 	udelay(40);
7286 
7287 	return 0;
7288 }
7289 
7290 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
7291 {
7292 	struct tg3 *tp = netdev_priv(dev);
7293 
7294 	if (features & NETIF_F_LOOPBACK) {
7295 		if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
7296 			return;
7297 
7298 		spin_lock_bh(&tp->lock);
7299 		tg3_mac_loopback(tp, true);
7300 		netif_carrier_on(tp->dev);
7301 		spin_unlock_bh(&tp->lock);
7302 		netdev_info(dev, "Internal MAC loopback mode enabled.\n");
7303 	} else {
7304 		if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
7305 			return;
7306 
7307 		spin_lock_bh(&tp->lock);
7308 		tg3_mac_loopback(tp, false);
7309 		/* Force link status check */
7310 		tg3_setup_phy(tp, 1);
7311 		spin_unlock_bh(&tp->lock);
7312 		netdev_info(dev, "Internal MAC loopback mode disabled.\n");
7313 	}
7314 }
7315 
7316 static netdev_features_t tg3_fix_features(struct net_device *dev,
7317 	netdev_features_t features)
7318 {
7319 	struct tg3 *tp = netdev_priv(dev);
7320 
7321 	if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
7322 		features &= ~NETIF_F_ALL_TSO;
7323 
7324 	return features;
7325 }
7326 
7327 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
7328 {
7329 	netdev_features_t changed = dev->features ^ features;
7330 
7331 	if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
7332 		tg3_set_loopback(dev, features);
7333 
7334 	return 0;
7335 }
7336 
7337 static void tg3_rx_prodring_free(struct tg3 *tp,
7338 				 struct tg3_rx_prodring_set *tpr)
7339 {
7340 	int i;
7341 
7342 	if (tpr != &tp->napi[0].prodring) {
7343 		for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
7344 		     i = (i + 1) & tp->rx_std_ring_mask)
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)) {
7349 			for (i = tpr->rx_jmb_cons_idx;
7350 			     i != tpr->rx_jmb_prod_idx;
7351 			     i = (i + 1) & tp->rx_jmb_ring_mask) {
7352 				tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7353 						TG3_RX_JMB_MAP_SZ);
7354 			}
7355 		}
7356 
7357 		return;
7358 	}
7359 
7360 	for (i = 0; i <= tp->rx_std_ring_mask; i++)
7361 		tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7362 				tp->rx_pkt_map_sz);
7363 
7364 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7365 		for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
7366 			tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7367 					TG3_RX_JMB_MAP_SZ);
7368 	}
7369 }
7370 
7371 /* Initialize rx rings for packet processing.
7372  *
7373  * The chip has been shut down and the driver detached from
7374  * the networking, so no interrupts or new tx packets will
7375  * end up in the driver.  tp->{tx,}lock are held and thus
7376  * we may not sleep.
7377  */
7378 static int tg3_rx_prodring_alloc(struct tg3 *tp,
7379 				 struct tg3_rx_prodring_set *tpr)
7380 {
7381 	u32 i, rx_pkt_dma_sz;
7382 
7383 	tpr->rx_std_cons_idx = 0;
7384 	tpr->rx_std_prod_idx = 0;
7385 	tpr->rx_jmb_cons_idx = 0;
7386 	tpr->rx_jmb_prod_idx = 0;
7387 
7388 	if (tpr != &tp->napi[0].prodring) {
7389 		memset(&tpr->rx_std_buffers[0], 0,
7390 		       TG3_RX_STD_BUFF_RING_SIZE(tp));
7391 		if (tpr->rx_jmb_buffers)
7392 			memset(&tpr->rx_jmb_buffers[0], 0,
7393 			       TG3_RX_JMB_BUFF_RING_SIZE(tp));
7394 		goto done;
7395 	}
7396 
7397 	/* Zero out all descriptors. */
7398 	memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
7399 
7400 	rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
7401 	if (tg3_flag(tp, 5780_CLASS) &&
7402 	    tp->dev->mtu > ETH_DATA_LEN)
7403 		rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
7404 	tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
7405 
7406 	/* Initialize invariants of the rings, we only set this
7407 	 * stuff once.  This works because the card does not
7408 	 * write into the rx buffer posting rings.
7409 	 */
7410 	for (i = 0; i <= tp->rx_std_ring_mask; i++) {
7411 		struct tg3_rx_buffer_desc *rxd;
7412 
7413 		rxd = &tpr->rx_std[i];
7414 		rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
7415 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
7416 		rxd->opaque = (RXD_OPAQUE_RING_STD |
7417 			       (i << RXD_OPAQUE_INDEX_SHIFT));
7418 	}
7419 
7420 	/* Now allocate fresh SKBs for each rx ring. */
7421 	for (i = 0; i < tp->rx_pending; i++) {
7422 		unsigned int frag_size;
7423 
7424 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
7425 				      &frag_size) < 0) {
7426 			netdev_warn(tp->dev,
7427 				    "Using a smaller RX standard ring. Only "
7428 				    "%d out of %d buffers were allocated "
7429 				    "successfully\n", i, tp->rx_pending);
7430 			if (i == 0)
7431 				goto initfail;
7432 			tp->rx_pending = i;
7433 			break;
7434 		}
7435 	}
7436 
7437 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
7438 		goto done;
7439 
7440 	memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
7441 
7442 	if (!tg3_flag(tp, JUMBO_RING_ENABLE))
7443 		goto done;
7444 
7445 	for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
7446 		struct tg3_rx_buffer_desc *rxd;
7447 
7448 		rxd = &tpr->rx_jmb[i].std;
7449 		rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
7450 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
7451 				  RXD_FLAG_JUMBO;
7452 		rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
7453 		       (i << RXD_OPAQUE_INDEX_SHIFT));
7454 	}
7455 
7456 	for (i = 0; i < tp->rx_jumbo_pending; i++) {
7457 		unsigned int frag_size;
7458 
7459 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
7460 				      &frag_size) < 0) {
7461 			netdev_warn(tp->dev,
7462 				    "Using a smaller RX jumbo ring. Only %d "
7463 				    "out of %d buffers were allocated "
7464 				    "successfully\n", i, tp->rx_jumbo_pending);
7465 			if (i == 0)
7466 				goto initfail;
7467 			tp->rx_jumbo_pending = i;
7468 			break;
7469 		}
7470 	}
7471 
7472 done:
7473 	return 0;
7474 
7475 initfail:
7476 	tg3_rx_prodring_free(tp, tpr);
7477 	return -ENOMEM;
7478 }
7479 
7480 static void tg3_rx_prodring_fini(struct tg3 *tp,
7481 				 struct tg3_rx_prodring_set *tpr)
7482 {
7483 	kfree(tpr->rx_std_buffers);
7484 	tpr->rx_std_buffers = NULL;
7485 	kfree(tpr->rx_jmb_buffers);
7486 	tpr->rx_jmb_buffers = NULL;
7487 	if (tpr->rx_std) {
7488 		dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
7489 				  tpr->rx_std, tpr->rx_std_mapping);
7490 		tpr->rx_std = NULL;
7491 	}
7492 	if (tpr->rx_jmb) {
7493 		dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
7494 				  tpr->rx_jmb, tpr->rx_jmb_mapping);
7495 		tpr->rx_jmb = NULL;
7496 	}
7497 }
7498 
7499 static int tg3_rx_prodring_init(struct tg3 *tp,
7500 				struct tg3_rx_prodring_set *tpr)
7501 {
7502 	tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
7503 				      GFP_KERNEL);
7504 	if (!tpr->rx_std_buffers)
7505 		return -ENOMEM;
7506 
7507 	tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
7508 					 TG3_RX_STD_RING_BYTES(tp),
7509 					 &tpr->rx_std_mapping,
7510 					 GFP_KERNEL);
7511 	if (!tpr->rx_std)
7512 		goto err_out;
7513 
7514 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7515 		tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
7516 					      GFP_KERNEL);
7517 		if (!tpr->rx_jmb_buffers)
7518 			goto err_out;
7519 
7520 		tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
7521 						 TG3_RX_JMB_RING_BYTES(tp),
7522 						 &tpr->rx_jmb_mapping,
7523 						 GFP_KERNEL);
7524 		if (!tpr->rx_jmb)
7525 			goto err_out;
7526 	}
7527 
7528 	return 0;
7529 
7530 err_out:
7531 	tg3_rx_prodring_fini(tp, tpr);
7532 	return -ENOMEM;
7533 }
7534 
7535 /* Free up pending packets in all rx/tx rings.
7536  *
7537  * The chip has been shut down and the driver detached from
7538  * the networking, so no interrupts or new tx packets will
7539  * end up in the driver.  tp->{tx,}lock is not held and we are not
7540  * in an interrupt context and thus may sleep.
7541  */
7542 static void tg3_free_rings(struct tg3 *tp)
7543 {
7544 	int i, j;
7545 
7546 	for (j = 0; j < tp->irq_cnt; j++) {
7547 		struct tg3_napi *tnapi = &tp->napi[j];
7548 
7549 		tg3_rx_prodring_free(tp, &tnapi->prodring);
7550 
7551 		if (!tnapi->tx_buffers)
7552 			continue;
7553 
7554 		for (i = 0; i < TG3_TX_RING_SIZE; i++) {
7555 			struct sk_buff *skb = tnapi->tx_buffers[i].skb;
7556 
7557 			if (!skb)
7558 				continue;
7559 
7560 			tg3_tx_skb_unmap(tnapi, i,
7561 					 skb_shinfo(skb)->nr_frags - 1);
7562 
7563 			dev_kfree_skb_any(skb);
7564 		}
7565 		netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
7566 	}
7567 }
7568 
7569 /* Initialize tx/rx rings for packet processing.
7570  *
7571  * The chip has been shut down and the driver detached from
7572  * the networking, so no interrupts or new tx packets will
7573  * end up in the driver.  tp->{tx,}lock are held and thus
7574  * we may not sleep.
7575  */
7576 static int tg3_init_rings(struct tg3 *tp)
7577 {
7578 	int i;
7579 
7580 	/* Free up all the SKBs. */
7581 	tg3_free_rings(tp);
7582 
7583 	for (i = 0; i < tp->irq_cnt; i++) {
7584 		struct tg3_napi *tnapi = &tp->napi[i];
7585 
7586 		tnapi->last_tag = 0;
7587 		tnapi->last_irq_tag = 0;
7588 		tnapi->hw_status->status = 0;
7589 		tnapi->hw_status->status_tag = 0;
7590 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7591 
7592 		tnapi->tx_prod = 0;
7593 		tnapi->tx_cons = 0;
7594 		if (tnapi->tx_ring)
7595 			memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
7596 
7597 		tnapi->rx_rcb_ptr = 0;
7598 		if (tnapi->rx_rcb)
7599 			memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7600 
7601 		if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
7602 			tg3_free_rings(tp);
7603 			return -ENOMEM;
7604 		}
7605 	}
7606 
7607 	return 0;
7608 }
7609 
7610 /*
7611  * Must not be invoked with interrupt sources disabled and
7612  * the hardware shutdown down.
7613  */
7614 static void tg3_free_consistent(struct tg3 *tp)
7615 {
7616 	int i;
7617 
7618 	for (i = 0; i < tp->irq_cnt; i++) {
7619 		struct tg3_napi *tnapi = &tp->napi[i];
7620 
7621 		if (tnapi->tx_ring) {
7622 			dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
7623 				tnapi->tx_ring, tnapi->tx_desc_mapping);
7624 			tnapi->tx_ring = NULL;
7625 		}
7626 
7627 		kfree(tnapi->tx_buffers);
7628 		tnapi->tx_buffers = NULL;
7629 
7630 		if (tnapi->rx_rcb) {
7631 			dma_free_coherent(&tp->pdev->dev,
7632 					  TG3_RX_RCB_RING_BYTES(tp),
7633 					  tnapi->rx_rcb,
7634 					  tnapi->rx_rcb_mapping);
7635 			tnapi->rx_rcb = NULL;
7636 		}
7637 
7638 		tg3_rx_prodring_fini(tp, &tnapi->prodring);
7639 
7640 		if (tnapi->hw_status) {
7641 			dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
7642 					  tnapi->hw_status,
7643 					  tnapi->status_mapping);
7644 			tnapi->hw_status = NULL;
7645 		}
7646 	}
7647 
7648 	if (tp->hw_stats) {
7649 		dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
7650 				  tp->hw_stats, tp->stats_mapping);
7651 		tp->hw_stats = NULL;
7652 	}
7653 }
7654 
7655 /*
7656  * Must not be invoked with interrupt sources disabled and
7657  * the hardware shutdown down.  Can sleep.
7658  */
7659 static int tg3_alloc_consistent(struct tg3 *tp)
7660 {
7661 	int i;
7662 
7663 	tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
7664 					  sizeof(struct tg3_hw_stats),
7665 					  &tp->stats_mapping,
7666 					  GFP_KERNEL);
7667 	if (!tp->hw_stats)
7668 		goto err_out;
7669 
7670 	memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
7671 
7672 	for (i = 0; i < tp->irq_cnt; i++) {
7673 		struct tg3_napi *tnapi = &tp->napi[i];
7674 		struct tg3_hw_status *sblk;
7675 
7676 		tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
7677 						      TG3_HW_STATUS_SIZE,
7678 						      &tnapi->status_mapping,
7679 						      GFP_KERNEL);
7680 		if (!tnapi->hw_status)
7681 			goto err_out;
7682 
7683 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7684 		sblk = tnapi->hw_status;
7685 
7686 		if (tg3_rx_prodring_init(tp, &tnapi->prodring))
7687 			goto err_out;
7688 
7689 		/* If multivector TSS is enabled, vector 0 does not handle
7690 		 * tx interrupts.  Don't allocate any resources for it.
7691 		 */
7692 		if ((!i && !tg3_flag(tp, ENABLE_TSS)) ||
7693 		    (i && tg3_flag(tp, ENABLE_TSS))) {
7694 			tnapi->tx_buffers = kzalloc(
7695 					       sizeof(struct tg3_tx_ring_info) *
7696 					       TG3_TX_RING_SIZE, GFP_KERNEL);
7697 			if (!tnapi->tx_buffers)
7698 				goto err_out;
7699 
7700 			tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
7701 							    TG3_TX_RING_BYTES,
7702 							&tnapi->tx_desc_mapping,
7703 							    GFP_KERNEL);
7704 			if (!tnapi->tx_ring)
7705 				goto err_out;
7706 		}
7707 
7708 		/*
7709 		 * When RSS is enabled, the status block format changes
7710 		 * slightly.  The "rx_jumbo_consumer", "reserved",
7711 		 * and "rx_mini_consumer" members get mapped to the
7712 		 * other three rx return ring producer indexes.
7713 		 */
7714 		switch (i) {
7715 		default:
7716 			if (tg3_flag(tp, ENABLE_RSS)) {
7717 				tnapi->rx_rcb_prod_idx = NULL;
7718 				break;
7719 			}
7720 			/* Fall through */
7721 		case 1:
7722 			tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
7723 			break;
7724 		case 2:
7725 			tnapi->rx_rcb_prod_idx = &sblk->rx_jumbo_consumer;
7726 			break;
7727 		case 3:
7728 			tnapi->rx_rcb_prod_idx = &sblk->reserved;
7729 			break;
7730 		case 4:
7731 			tnapi->rx_rcb_prod_idx = &sblk->rx_mini_consumer;
7732 			break;
7733 		}
7734 
7735 		/*
7736 		 * If multivector RSS is enabled, vector 0 does not handle
7737 		 * rx or tx interrupts.  Don't allocate any resources for it.
7738 		 */
7739 		if (!i && tg3_flag(tp, ENABLE_RSS))
7740 			continue;
7741 
7742 		tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
7743 						   TG3_RX_RCB_RING_BYTES(tp),
7744 						   &tnapi->rx_rcb_mapping,
7745 						   GFP_KERNEL);
7746 		if (!tnapi->rx_rcb)
7747 			goto err_out;
7748 
7749 		memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7750 	}
7751 
7752 	return 0;
7753 
7754 err_out:
7755 	tg3_free_consistent(tp);
7756 	return -ENOMEM;
7757 }
7758 
7759 #define MAX_WAIT_CNT 1000
7760 
7761 /* To stop a block, clear the enable bit and poll till it
7762  * clears.  tp->lock is held.
7763  */
7764 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
7765 {
7766 	unsigned int i;
7767 	u32 val;
7768 
7769 	if (tg3_flag(tp, 5705_PLUS)) {
7770 		switch (ofs) {
7771 		case RCVLSC_MODE:
7772 		case DMAC_MODE:
7773 		case MBFREE_MODE:
7774 		case BUFMGR_MODE:
7775 		case MEMARB_MODE:
7776 			/* We can't enable/disable these bits of the
7777 			 * 5705/5750, just say success.
7778 			 */
7779 			return 0;
7780 
7781 		default:
7782 			break;
7783 		}
7784 	}
7785 
7786 	val = tr32(ofs);
7787 	val &= ~enable_bit;
7788 	tw32_f(ofs, val);
7789 
7790 	for (i = 0; i < MAX_WAIT_CNT; i++) {
7791 		udelay(100);
7792 		val = tr32(ofs);
7793 		if ((val & enable_bit) == 0)
7794 			break;
7795 	}
7796 
7797 	if (i == MAX_WAIT_CNT && !silent) {
7798 		dev_err(&tp->pdev->dev,
7799 			"tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
7800 			ofs, enable_bit);
7801 		return -ENODEV;
7802 	}
7803 
7804 	return 0;
7805 }
7806 
7807 /* tp->lock is held. */
7808 static int tg3_abort_hw(struct tg3 *tp, int silent)
7809 {
7810 	int i, err;
7811 
7812 	tg3_disable_ints(tp);
7813 
7814 	tp->rx_mode &= ~RX_MODE_ENABLE;
7815 	tw32_f(MAC_RX_MODE, tp->rx_mode);
7816 	udelay(10);
7817 
7818 	err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
7819 	err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
7820 	err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
7821 	err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
7822 	err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
7823 	err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
7824 
7825 	err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
7826 	err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
7827 	err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
7828 	err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
7829 	err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
7830 	err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
7831 	err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
7832 
7833 	tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
7834 	tw32_f(MAC_MODE, tp->mac_mode);
7835 	udelay(40);
7836 
7837 	tp->tx_mode &= ~TX_MODE_ENABLE;
7838 	tw32_f(MAC_TX_MODE, tp->tx_mode);
7839 
7840 	for (i = 0; i < MAX_WAIT_CNT; i++) {
7841 		udelay(100);
7842 		if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
7843 			break;
7844 	}
7845 	if (i >= MAX_WAIT_CNT) {
7846 		dev_err(&tp->pdev->dev,
7847 			"%s timed out, TX_MODE_ENABLE will not clear "
7848 			"MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
7849 		err |= -ENODEV;
7850 	}
7851 
7852 	err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
7853 	err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
7854 	err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
7855 
7856 	tw32(FTQ_RESET, 0xffffffff);
7857 	tw32(FTQ_RESET, 0x00000000);
7858 
7859 	err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
7860 	err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
7861 
7862 	for (i = 0; i < tp->irq_cnt; i++) {
7863 		struct tg3_napi *tnapi = &tp->napi[i];
7864 		if (tnapi->hw_status)
7865 			memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7866 	}
7867 
7868 	return err;
7869 }
7870 
7871 /* Save PCI command register before chip reset */
7872 static void tg3_save_pci_state(struct tg3 *tp)
7873 {
7874 	pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
7875 }
7876 
7877 /* Restore PCI state after chip reset */
7878 static void tg3_restore_pci_state(struct tg3 *tp)
7879 {
7880 	u32 val;
7881 
7882 	/* Re-enable indirect register accesses. */
7883 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
7884 			       tp->misc_host_ctrl);
7885 
7886 	/* Set MAX PCI retry to zero. */
7887 	val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
7888 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
7889 	    tg3_flag(tp, PCIX_MODE))
7890 		val |= PCISTATE_RETRY_SAME_DMA;
7891 	/* Allow reads and writes to the APE register and memory space. */
7892 	if (tg3_flag(tp, ENABLE_APE))
7893 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
7894 		       PCISTATE_ALLOW_APE_SHMEM_WR |
7895 		       PCISTATE_ALLOW_APE_PSPACE_WR;
7896 	pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
7897 
7898 	pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
7899 
7900 	if (!tg3_flag(tp, PCI_EXPRESS)) {
7901 		pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
7902 				      tp->pci_cacheline_sz);
7903 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
7904 				      tp->pci_lat_timer);
7905 	}
7906 
7907 	/* Make sure PCI-X relaxed ordering bit is clear. */
7908 	if (tg3_flag(tp, PCIX_MODE)) {
7909 		u16 pcix_cmd;
7910 
7911 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7912 				     &pcix_cmd);
7913 		pcix_cmd &= ~PCI_X_CMD_ERO;
7914 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7915 				      pcix_cmd);
7916 	}
7917 
7918 	if (tg3_flag(tp, 5780_CLASS)) {
7919 
7920 		/* Chip reset on 5780 will reset MSI enable bit,
7921 		 * so need to restore it.
7922 		 */
7923 		if (tg3_flag(tp, USING_MSI)) {
7924 			u16 ctrl;
7925 
7926 			pci_read_config_word(tp->pdev,
7927 					     tp->msi_cap + PCI_MSI_FLAGS,
7928 					     &ctrl);
7929 			pci_write_config_word(tp->pdev,
7930 					      tp->msi_cap + PCI_MSI_FLAGS,
7931 					      ctrl | PCI_MSI_FLAGS_ENABLE);
7932 			val = tr32(MSGINT_MODE);
7933 			tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
7934 		}
7935 	}
7936 }
7937 
7938 /* tp->lock is held. */
7939 static int tg3_chip_reset(struct tg3 *tp)
7940 {
7941 	u32 val;
7942 	void (*write_op)(struct tg3 *, u32, u32);
7943 	int i, err;
7944 
7945 	tg3_nvram_lock(tp);
7946 
7947 	tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
7948 
7949 	/* No matching tg3_nvram_unlock() after this because
7950 	 * chip reset below will undo the nvram lock.
7951 	 */
7952 	tp->nvram_lock_cnt = 0;
7953 
7954 	/* GRC_MISC_CFG core clock reset will clear the memory
7955 	 * enable bit in PCI register 4 and the MSI enable bit
7956 	 * on some chips, so we save relevant registers here.
7957 	 */
7958 	tg3_save_pci_state(tp);
7959 
7960 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
7961 	    tg3_flag(tp, 5755_PLUS))
7962 		tw32(GRC_FASTBOOT_PC, 0);
7963 
7964 	/*
7965 	 * We must avoid the readl() that normally takes place.
7966 	 * It locks machines, causes machine checks, and other
7967 	 * fun things.  So, temporarily disable the 5701
7968 	 * hardware workaround, while we do the reset.
7969 	 */
7970 	write_op = tp->write32;
7971 	if (write_op == tg3_write_flush_reg32)
7972 		tp->write32 = tg3_write32;
7973 
7974 	/* Prevent the irq handler from reading or writing PCI registers
7975 	 * during chip reset when the memory enable bit in the PCI command
7976 	 * register may be cleared.  The chip does not generate interrupt
7977 	 * at this time, but the irq handler may still be called due to irq
7978 	 * sharing or irqpoll.
7979 	 */
7980 	tg3_flag_set(tp, CHIP_RESETTING);
7981 	for (i = 0; i < tp->irq_cnt; i++) {
7982 		struct tg3_napi *tnapi = &tp->napi[i];
7983 		if (tnapi->hw_status) {
7984 			tnapi->hw_status->status = 0;
7985 			tnapi->hw_status->status_tag = 0;
7986 		}
7987 		tnapi->last_tag = 0;
7988 		tnapi->last_irq_tag = 0;
7989 	}
7990 	smp_mb();
7991 
7992 	for (i = 0; i < tp->irq_cnt; i++)
7993 		synchronize_irq(tp->napi[i].irq_vec);
7994 
7995 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
7996 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
7997 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
7998 	}
7999 
8000 	/* do the reset */
8001 	val = GRC_MISC_CFG_CORECLK_RESET;
8002 
8003 	if (tg3_flag(tp, PCI_EXPRESS)) {
8004 		/* Force PCIe 1.0a mode */
8005 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8006 		    !tg3_flag(tp, 57765_PLUS) &&
8007 		    tr32(TG3_PCIE_PHY_TSTCTL) ==
8008 		    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
8009 			tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
8010 
8011 		if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
8012 			tw32(GRC_MISC_CFG, (1 << 29));
8013 			val |= (1 << 29);
8014 		}
8015 	}
8016 
8017 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
8018 		tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
8019 		tw32(GRC_VCPU_EXT_CTRL,
8020 		     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
8021 	}
8022 
8023 	/* Manage gphy power for all CPMU absent PCIe devices. */
8024 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
8025 		val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
8026 
8027 	tw32(GRC_MISC_CFG, val);
8028 
8029 	/* restore 5701 hardware bug workaround write method */
8030 	tp->write32 = write_op;
8031 
8032 	/* Unfortunately, we have to delay before the PCI read back.
8033 	 * Some 575X chips even will not respond to a PCI cfg access
8034 	 * when the reset command is given to the chip.
8035 	 *
8036 	 * How do these hardware designers expect things to work
8037 	 * properly if the PCI write is posted for a long period
8038 	 * of time?  It is always necessary to have some method by
8039 	 * which a register read back can occur to push the write
8040 	 * out which does the reset.
8041 	 *
8042 	 * For most tg3 variants the trick below was working.
8043 	 * Ho hum...
8044 	 */
8045 	udelay(120);
8046 
8047 	/* Flush PCI posted writes.  The normal MMIO registers
8048 	 * are inaccessible at this time so this is the only
8049 	 * way to make this reliably (actually, this is no longer
8050 	 * the case, see above).  I tried to use indirect
8051 	 * register read/write but this upset some 5701 variants.
8052 	 */
8053 	pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
8054 
8055 	udelay(120);
8056 
8057 	if (tg3_flag(tp, PCI_EXPRESS) && pci_pcie_cap(tp->pdev)) {
8058 		u16 val16;
8059 
8060 		if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
8061 			int i;
8062 			u32 cfg_val;
8063 
8064 			/* Wait for link training to complete.  */
8065 			for (i = 0; i < 5000; i++)
8066 				udelay(100);
8067 
8068 			pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
8069 			pci_write_config_dword(tp->pdev, 0xc4,
8070 					       cfg_val | (1 << 15));
8071 		}
8072 
8073 		/* Clear the "no snoop" and "relaxed ordering" bits. */
8074 		pci_read_config_word(tp->pdev,
8075 				     pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL,
8076 				     &val16);
8077 		val16 &= ~(PCI_EXP_DEVCTL_RELAX_EN |
8078 			   PCI_EXP_DEVCTL_NOSNOOP_EN);
8079 		/*
8080 		 * Older PCIe devices only support the 128 byte
8081 		 * MPS setting.  Enforce the restriction.
8082 		 */
8083 		if (!tg3_flag(tp, CPMU_PRESENT))
8084 			val16 &= ~PCI_EXP_DEVCTL_PAYLOAD;
8085 		pci_write_config_word(tp->pdev,
8086 				      pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL,
8087 				      val16);
8088 
8089 		/* Clear error status */
8090 		pci_write_config_word(tp->pdev,
8091 				      pci_pcie_cap(tp->pdev) + PCI_EXP_DEVSTA,
8092 				      PCI_EXP_DEVSTA_CED |
8093 				      PCI_EXP_DEVSTA_NFED |
8094 				      PCI_EXP_DEVSTA_FED |
8095 				      PCI_EXP_DEVSTA_URD);
8096 	}
8097 
8098 	tg3_restore_pci_state(tp);
8099 
8100 	tg3_flag_clear(tp, CHIP_RESETTING);
8101 	tg3_flag_clear(tp, ERROR_PROCESSED);
8102 
8103 	val = 0;
8104 	if (tg3_flag(tp, 5780_CLASS))
8105 		val = tr32(MEMARB_MODE);
8106 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
8107 
8108 	if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
8109 		tg3_stop_fw(tp);
8110 		tw32(0x5000, 0x400);
8111 	}
8112 
8113 	tw32(GRC_MODE, tp->grc_mode);
8114 
8115 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
8116 		val = tr32(0xc4);
8117 
8118 		tw32(0xc4, val | (1 << 15));
8119 	}
8120 
8121 	if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
8122 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
8123 		tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
8124 		if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
8125 			tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
8126 		tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8127 	}
8128 
8129 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
8130 		tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
8131 		val = tp->mac_mode;
8132 	} else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
8133 		tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
8134 		val = tp->mac_mode;
8135 	} else
8136 		val = 0;
8137 
8138 	tw32_f(MAC_MODE, val);
8139 	udelay(40);
8140 
8141 	tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
8142 
8143 	err = tg3_poll_fw(tp);
8144 	if (err)
8145 		return err;
8146 
8147 	tg3_mdio_start(tp);
8148 
8149 	if (tg3_flag(tp, PCI_EXPRESS) &&
8150 	    tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
8151 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8152 	    !tg3_flag(tp, 57765_PLUS)) {
8153 		val = tr32(0x7c00);
8154 
8155 		tw32(0x7c00, val | (1 << 25));
8156 	}
8157 
8158 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8159 		val = tr32(TG3_CPMU_CLCK_ORIDE);
8160 		tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
8161 	}
8162 
8163 	/* Reprobe ASF enable state.  */
8164 	tg3_flag_clear(tp, ENABLE_ASF);
8165 	tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
8166 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
8167 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
8168 		u32 nic_cfg;
8169 
8170 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
8171 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
8172 			tg3_flag_set(tp, ENABLE_ASF);
8173 			tp->last_event_jiffies = jiffies;
8174 			if (tg3_flag(tp, 5750_PLUS))
8175 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
8176 		}
8177 	}
8178 
8179 	return 0;
8180 }
8181 
8182 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
8183 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
8184 
8185 /* tp->lock is held. */
8186 static int tg3_halt(struct tg3 *tp, int kind, int silent)
8187 {
8188 	int err;
8189 
8190 	tg3_stop_fw(tp);
8191 
8192 	tg3_write_sig_pre_reset(tp, kind);
8193 
8194 	tg3_abort_hw(tp, silent);
8195 	err = tg3_chip_reset(tp);
8196 
8197 	__tg3_set_mac_addr(tp, 0);
8198 
8199 	tg3_write_sig_legacy(tp, kind);
8200 	tg3_write_sig_post_reset(tp, kind);
8201 
8202 	if (tp->hw_stats) {
8203 		/* Save the stats across chip resets... */
8204 		tg3_get_nstats(tp, &tp->net_stats_prev);
8205 		tg3_get_estats(tp, &tp->estats_prev);
8206 
8207 		/* And make sure the next sample is new data */
8208 		memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
8209 	}
8210 
8211 	if (err)
8212 		return err;
8213 
8214 	return 0;
8215 }
8216 
8217 static int tg3_set_mac_addr(struct net_device *dev, void *p)
8218 {
8219 	struct tg3 *tp = netdev_priv(dev);
8220 	struct sockaddr *addr = p;
8221 	int err = 0, skip_mac_1 = 0;
8222 
8223 	if (!is_valid_ether_addr(addr->sa_data))
8224 		return -EADDRNOTAVAIL;
8225 
8226 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
8227 
8228 	if (!netif_running(dev))
8229 		return 0;
8230 
8231 	if (tg3_flag(tp, ENABLE_ASF)) {
8232 		u32 addr0_high, addr0_low, addr1_high, addr1_low;
8233 
8234 		addr0_high = tr32(MAC_ADDR_0_HIGH);
8235 		addr0_low = tr32(MAC_ADDR_0_LOW);
8236 		addr1_high = tr32(MAC_ADDR_1_HIGH);
8237 		addr1_low = tr32(MAC_ADDR_1_LOW);
8238 
8239 		/* Skip MAC addr 1 if ASF is using it. */
8240 		if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
8241 		    !(addr1_high == 0 && addr1_low == 0))
8242 			skip_mac_1 = 1;
8243 	}
8244 	spin_lock_bh(&tp->lock);
8245 	__tg3_set_mac_addr(tp, skip_mac_1);
8246 	spin_unlock_bh(&tp->lock);
8247 
8248 	return err;
8249 }
8250 
8251 /* tp->lock is held. */
8252 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
8253 			   dma_addr_t mapping, u32 maxlen_flags,
8254 			   u32 nic_addr)
8255 {
8256 	tg3_write_mem(tp,
8257 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
8258 		      ((u64) mapping >> 32));
8259 	tg3_write_mem(tp,
8260 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
8261 		      ((u64) mapping & 0xffffffff));
8262 	tg3_write_mem(tp,
8263 		      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
8264 		       maxlen_flags);
8265 
8266 	if (!tg3_flag(tp, 5705_PLUS))
8267 		tg3_write_mem(tp,
8268 			      (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
8269 			      nic_addr);
8270 }
8271 
8272 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
8273 {
8274 	int i;
8275 
8276 	if (!tg3_flag(tp, ENABLE_TSS)) {
8277 		tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
8278 		tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
8279 		tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
8280 	} else {
8281 		tw32(HOSTCC_TXCOL_TICKS, 0);
8282 		tw32(HOSTCC_TXMAX_FRAMES, 0);
8283 		tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
8284 	}
8285 
8286 	if (!tg3_flag(tp, ENABLE_RSS)) {
8287 		tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
8288 		tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
8289 		tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
8290 	} else {
8291 		tw32(HOSTCC_RXCOL_TICKS, 0);
8292 		tw32(HOSTCC_RXMAX_FRAMES, 0);
8293 		tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
8294 	}
8295 
8296 	if (!tg3_flag(tp, 5705_PLUS)) {
8297 		u32 val = ec->stats_block_coalesce_usecs;
8298 
8299 		tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
8300 		tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
8301 
8302 		if (!netif_carrier_ok(tp->dev))
8303 			val = 0;
8304 
8305 		tw32(HOSTCC_STAT_COAL_TICKS, val);
8306 	}
8307 
8308 	for (i = 0; i < tp->irq_cnt - 1; i++) {
8309 		u32 reg;
8310 
8311 		reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
8312 		tw32(reg, ec->rx_coalesce_usecs);
8313 		reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
8314 		tw32(reg, ec->rx_max_coalesced_frames);
8315 		reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
8316 		tw32(reg, ec->rx_max_coalesced_frames_irq);
8317 
8318 		if (tg3_flag(tp, ENABLE_TSS)) {
8319 			reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
8320 			tw32(reg, ec->tx_coalesce_usecs);
8321 			reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
8322 			tw32(reg, ec->tx_max_coalesced_frames);
8323 			reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
8324 			tw32(reg, ec->tx_max_coalesced_frames_irq);
8325 		}
8326 	}
8327 
8328 	for (; i < tp->irq_max - 1; i++) {
8329 		tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
8330 		tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
8331 		tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8332 
8333 		if (tg3_flag(tp, ENABLE_TSS)) {
8334 			tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
8335 			tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
8336 			tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8337 		}
8338 	}
8339 }
8340 
8341 /* tp->lock is held. */
8342 static void tg3_rings_reset(struct tg3 *tp)
8343 {
8344 	int i;
8345 	u32 stblk, txrcb, rxrcb, limit;
8346 	struct tg3_napi *tnapi = &tp->napi[0];
8347 
8348 	/* Disable all transmit rings but the first. */
8349 	if (!tg3_flag(tp, 5705_PLUS))
8350 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
8351 	else if (tg3_flag(tp, 5717_PLUS))
8352 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
8353 	else if (tg3_flag(tp, 57765_CLASS))
8354 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
8355 	else
8356 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8357 
8358 	for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8359 	     txrcb < limit; txrcb += TG3_BDINFO_SIZE)
8360 		tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
8361 			      BDINFO_FLAGS_DISABLED);
8362 
8363 
8364 	/* Disable all receive return rings but the first. */
8365 	if (tg3_flag(tp, 5717_PLUS))
8366 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
8367 	else if (!tg3_flag(tp, 5705_PLUS))
8368 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
8369 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8370 		 tg3_flag(tp, 57765_CLASS))
8371 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
8372 	else
8373 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8374 
8375 	for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8376 	     rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
8377 		tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
8378 			      BDINFO_FLAGS_DISABLED);
8379 
8380 	/* Disable interrupts */
8381 	tw32_mailbox_f(tp->napi[0].int_mbox, 1);
8382 	tp->napi[0].chk_msi_cnt = 0;
8383 	tp->napi[0].last_rx_cons = 0;
8384 	tp->napi[0].last_tx_cons = 0;
8385 
8386 	/* Zero mailbox registers. */
8387 	if (tg3_flag(tp, SUPPORT_MSIX)) {
8388 		for (i = 1; i < tp->irq_max; i++) {
8389 			tp->napi[i].tx_prod = 0;
8390 			tp->napi[i].tx_cons = 0;
8391 			if (tg3_flag(tp, ENABLE_TSS))
8392 				tw32_mailbox(tp->napi[i].prodmbox, 0);
8393 			tw32_rx_mbox(tp->napi[i].consmbox, 0);
8394 			tw32_mailbox_f(tp->napi[i].int_mbox, 1);
8395 			tp->napi[i].chk_msi_cnt = 0;
8396 			tp->napi[i].last_rx_cons = 0;
8397 			tp->napi[i].last_tx_cons = 0;
8398 		}
8399 		if (!tg3_flag(tp, ENABLE_TSS))
8400 			tw32_mailbox(tp->napi[0].prodmbox, 0);
8401 	} else {
8402 		tp->napi[0].tx_prod = 0;
8403 		tp->napi[0].tx_cons = 0;
8404 		tw32_mailbox(tp->napi[0].prodmbox, 0);
8405 		tw32_rx_mbox(tp->napi[0].consmbox, 0);
8406 	}
8407 
8408 	/* Make sure the NIC-based send BD rings are disabled. */
8409 	if (!tg3_flag(tp, 5705_PLUS)) {
8410 		u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
8411 		for (i = 0; i < 16; i++)
8412 			tw32_tx_mbox(mbox + i * 8, 0);
8413 	}
8414 
8415 	txrcb = NIC_SRAM_SEND_RCB;
8416 	rxrcb = NIC_SRAM_RCV_RET_RCB;
8417 
8418 	/* Clear status block in ram. */
8419 	memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8420 
8421 	/* Set status block DMA address */
8422 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
8423 	     ((u64) tnapi->status_mapping >> 32));
8424 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8425 	     ((u64) tnapi->status_mapping & 0xffffffff));
8426 
8427 	if (tnapi->tx_ring) {
8428 		tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8429 			       (TG3_TX_RING_SIZE <<
8430 				BDINFO_FLAGS_MAXLEN_SHIFT),
8431 			       NIC_SRAM_TX_BUFFER_DESC);
8432 		txrcb += TG3_BDINFO_SIZE;
8433 	}
8434 
8435 	if (tnapi->rx_rcb) {
8436 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8437 			       (tp->rx_ret_ring_mask + 1) <<
8438 				BDINFO_FLAGS_MAXLEN_SHIFT, 0);
8439 		rxrcb += TG3_BDINFO_SIZE;
8440 	}
8441 
8442 	stblk = HOSTCC_STATBLCK_RING1;
8443 
8444 	for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
8445 		u64 mapping = (u64)tnapi->status_mapping;
8446 		tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
8447 		tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
8448 
8449 		/* Clear status block in ram. */
8450 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8451 
8452 		if (tnapi->tx_ring) {
8453 			tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8454 				       (TG3_TX_RING_SIZE <<
8455 					BDINFO_FLAGS_MAXLEN_SHIFT),
8456 				       NIC_SRAM_TX_BUFFER_DESC);
8457 			txrcb += TG3_BDINFO_SIZE;
8458 		}
8459 
8460 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8461 			       ((tp->rx_ret_ring_mask + 1) <<
8462 				BDINFO_FLAGS_MAXLEN_SHIFT), 0);
8463 
8464 		stblk += 8;
8465 		rxrcb += TG3_BDINFO_SIZE;
8466 	}
8467 }
8468 
8469 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
8470 {
8471 	u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
8472 
8473 	if (!tg3_flag(tp, 5750_PLUS) ||
8474 	    tg3_flag(tp, 5780_CLASS) ||
8475 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
8476 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
8477 	    tg3_flag(tp, 57765_PLUS))
8478 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
8479 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8480 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8481 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
8482 	else
8483 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
8484 
8485 	nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
8486 	host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
8487 
8488 	val = min(nic_rep_thresh, host_rep_thresh);
8489 	tw32(RCVBDI_STD_THRESH, val);
8490 
8491 	if (tg3_flag(tp, 57765_PLUS))
8492 		tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
8493 
8494 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8495 		return;
8496 
8497 	bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
8498 
8499 	host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
8500 
8501 	val = min(bdcache_maxcnt / 2, host_rep_thresh);
8502 	tw32(RCVBDI_JUMBO_THRESH, val);
8503 
8504 	if (tg3_flag(tp, 57765_PLUS))
8505 		tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
8506 }
8507 
8508 static inline u32 calc_crc(unsigned char *buf, int len)
8509 {
8510 	u32 reg;
8511 	u32 tmp;
8512 	int j, k;
8513 
8514 	reg = 0xffffffff;
8515 
8516 	for (j = 0; j < len; j++) {
8517 		reg ^= buf[j];
8518 
8519 		for (k = 0; k < 8; k++) {
8520 			tmp = reg & 0x01;
8521 
8522 			reg >>= 1;
8523 
8524 			if (tmp)
8525 				reg ^= 0xedb88320;
8526 		}
8527 	}
8528 
8529 	return ~reg;
8530 }
8531 
8532 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8533 {
8534 	/* accept or reject all multicast frames */
8535 	tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8536 	tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8537 	tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8538 	tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8539 }
8540 
8541 static void __tg3_set_rx_mode(struct net_device *dev)
8542 {
8543 	struct tg3 *tp = netdev_priv(dev);
8544 	u32 rx_mode;
8545 
8546 	rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8547 				  RX_MODE_KEEP_VLAN_TAG);
8548 
8549 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
8550 	/* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8551 	 * flag clear.
8552 	 */
8553 	if (!tg3_flag(tp, ENABLE_ASF))
8554 		rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8555 #endif
8556 
8557 	if (dev->flags & IFF_PROMISC) {
8558 		/* Promiscuous mode. */
8559 		rx_mode |= RX_MODE_PROMISC;
8560 	} else if (dev->flags & IFF_ALLMULTI) {
8561 		/* Accept all multicast. */
8562 		tg3_set_multi(tp, 1);
8563 	} else if (netdev_mc_empty(dev)) {
8564 		/* Reject all multicast. */
8565 		tg3_set_multi(tp, 0);
8566 	} else {
8567 		/* Accept one or more multicast(s). */
8568 		struct netdev_hw_addr *ha;
8569 		u32 mc_filter[4] = { 0, };
8570 		u32 regidx;
8571 		u32 bit;
8572 		u32 crc;
8573 
8574 		netdev_for_each_mc_addr(ha, dev) {
8575 			crc = calc_crc(ha->addr, ETH_ALEN);
8576 			bit = ~crc & 0x7f;
8577 			regidx = (bit & 0x60) >> 5;
8578 			bit &= 0x1f;
8579 			mc_filter[regidx] |= (1 << bit);
8580 		}
8581 
8582 		tw32(MAC_HASH_REG_0, mc_filter[0]);
8583 		tw32(MAC_HASH_REG_1, mc_filter[1]);
8584 		tw32(MAC_HASH_REG_2, mc_filter[2]);
8585 		tw32(MAC_HASH_REG_3, mc_filter[3]);
8586 	}
8587 
8588 	if (rx_mode != tp->rx_mode) {
8589 		tp->rx_mode = rx_mode;
8590 		tw32_f(MAC_RX_MODE, rx_mode);
8591 		udelay(10);
8592 	}
8593 }
8594 
8595 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp)
8596 {
8597 	int i;
8598 
8599 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
8600 		tp->rss_ind_tbl[i] =
8601 			ethtool_rxfh_indir_default(i, tp->irq_cnt - 1);
8602 }
8603 
8604 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
8605 {
8606 	int i;
8607 
8608 	if (!tg3_flag(tp, SUPPORT_MSIX))
8609 		return;
8610 
8611 	if (tp->irq_cnt <= 2) {
8612 		memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
8613 		return;
8614 	}
8615 
8616 	/* Validate table against current IRQ count */
8617 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
8618 		if (tp->rss_ind_tbl[i] >= tp->irq_cnt - 1)
8619 			break;
8620 	}
8621 
8622 	if (i != TG3_RSS_INDIR_TBL_SIZE)
8623 		tg3_rss_init_dflt_indir_tbl(tp);
8624 }
8625 
8626 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
8627 {
8628 	int i = 0;
8629 	u32 reg = MAC_RSS_INDIR_TBL_0;
8630 
8631 	while (i < TG3_RSS_INDIR_TBL_SIZE) {
8632 		u32 val = tp->rss_ind_tbl[i];
8633 		i++;
8634 		for (; i % 8; i++) {
8635 			val <<= 4;
8636 			val |= tp->rss_ind_tbl[i];
8637 		}
8638 		tw32(reg, val);
8639 		reg += 4;
8640 	}
8641 }
8642 
8643 /* tp->lock is held. */
8644 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
8645 {
8646 	u32 val, rdmac_mode;
8647 	int i, err, limit;
8648 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
8649 
8650 	tg3_disable_ints(tp);
8651 
8652 	tg3_stop_fw(tp);
8653 
8654 	tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
8655 
8656 	if (tg3_flag(tp, INIT_COMPLETE))
8657 		tg3_abort_hw(tp, 1);
8658 
8659 	/* Enable MAC control of LPI */
8660 	if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) {
8661 		tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL,
8662 		       TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
8663 		       TG3_CPMU_EEE_LNKIDL_UART_IDL);
8664 
8665 		tw32_f(TG3_CPMU_EEE_CTRL,
8666 		       TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
8667 
8668 		val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
8669 		      TG3_CPMU_EEEMD_LPI_IN_TX |
8670 		      TG3_CPMU_EEEMD_LPI_IN_RX |
8671 		      TG3_CPMU_EEEMD_EEE_ENABLE;
8672 
8673 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8674 			val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
8675 
8676 		if (tg3_flag(tp, ENABLE_APE))
8677 			val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
8678 
8679 		tw32_f(TG3_CPMU_EEE_MODE, val);
8680 
8681 		tw32_f(TG3_CPMU_EEE_DBTMR1,
8682 		       TG3_CPMU_DBTMR1_PCIEXIT_2047US |
8683 		       TG3_CPMU_DBTMR1_LNKIDLE_2047US);
8684 
8685 		tw32_f(TG3_CPMU_EEE_DBTMR2,
8686 		       TG3_CPMU_DBTMR2_APE_TX_2047US |
8687 		       TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
8688 	}
8689 
8690 	if (reset_phy)
8691 		tg3_phy_reset(tp);
8692 
8693 	err = tg3_chip_reset(tp);
8694 	if (err)
8695 		return err;
8696 
8697 	tg3_write_sig_legacy(tp, RESET_KIND_INIT);
8698 
8699 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
8700 		val = tr32(TG3_CPMU_CTRL);
8701 		val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
8702 		tw32(TG3_CPMU_CTRL, val);
8703 
8704 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8705 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8706 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
8707 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8708 
8709 		val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
8710 		val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
8711 		val |= CPMU_LNK_AWARE_MACCLK_6_25;
8712 		tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
8713 
8714 		val = tr32(TG3_CPMU_HST_ACC);
8715 		val &= ~CPMU_HST_ACC_MACCLK_MASK;
8716 		val |= CPMU_HST_ACC_MACCLK_6_25;
8717 		tw32(TG3_CPMU_HST_ACC, val);
8718 	}
8719 
8720 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
8721 		val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
8722 		val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
8723 		       PCIE_PWR_MGMT_L1_THRESH_4MS;
8724 		tw32(PCIE_PWR_MGMT_THRESH, val);
8725 
8726 		val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
8727 		tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
8728 
8729 		tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
8730 
8731 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8732 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
8733 	}
8734 
8735 	if (tg3_flag(tp, L1PLLPD_EN)) {
8736 		u32 grc_mode = tr32(GRC_MODE);
8737 
8738 		/* Access the lower 1K of PL PCIE block registers. */
8739 		val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8740 		tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8741 
8742 		val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
8743 		tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
8744 		     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
8745 
8746 		tw32(GRC_MODE, grc_mode);
8747 	}
8748 
8749 	if (tg3_flag(tp, 57765_CLASS)) {
8750 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
8751 			u32 grc_mode = tr32(GRC_MODE);
8752 
8753 			/* Access the lower 1K of PL PCIE block registers. */
8754 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8755 			tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
8756 
8757 			val = tr32(TG3_PCIE_TLDLPL_PORT +
8758 				   TG3_PCIE_PL_LO_PHYCTL5);
8759 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
8760 			     val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
8761 
8762 			tw32(GRC_MODE, grc_mode);
8763 		}
8764 
8765 		if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) {
8766 			u32 grc_mode = tr32(GRC_MODE);
8767 
8768 			/* Access the lower 1K of DL PCIE block registers. */
8769 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8770 			tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
8771 
8772 			val = tr32(TG3_PCIE_TLDLPL_PORT +
8773 				   TG3_PCIE_DL_LO_FTSMAX);
8774 			val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
8775 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
8776 			     val | TG3_PCIE_DL_LO_FTSMAX_VAL);
8777 
8778 			tw32(GRC_MODE, grc_mode);
8779 		}
8780 
8781 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
8782 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
8783 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
8784 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
8785 	}
8786 
8787 	/* This works around an issue with Athlon chipsets on
8788 	 * B3 tigon3 silicon.  This bit has no effect on any
8789 	 * other revision.  But do not set this on PCI Express
8790 	 * chips and don't even touch the clocks if the CPMU is present.
8791 	 */
8792 	if (!tg3_flag(tp, CPMU_PRESENT)) {
8793 		if (!tg3_flag(tp, PCI_EXPRESS))
8794 			tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
8795 		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8796 	}
8797 
8798 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
8799 	    tg3_flag(tp, PCIX_MODE)) {
8800 		val = tr32(TG3PCI_PCISTATE);
8801 		val |= PCISTATE_RETRY_SAME_DMA;
8802 		tw32(TG3PCI_PCISTATE, val);
8803 	}
8804 
8805 	if (tg3_flag(tp, ENABLE_APE)) {
8806 		/* Allow reads and writes to the
8807 		 * APE register and memory space.
8808 		 */
8809 		val = tr32(TG3PCI_PCISTATE);
8810 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8811 		       PCISTATE_ALLOW_APE_SHMEM_WR |
8812 		       PCISTATE_ALLOW_APE_PSPACE_WR;
8813 		tw32(TG3PCI_PCISTATE, val);
8814 	}
8815 
8816 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
8817 		/* Enable some hw fixes.  */
8818 		val = tr32(TG3PCI_MSI_DATA);
8819 		val |= (1 << 26) | (1 << 28) | (1 << 29);
8820 		tw32(TG3PCI_MSI_DATA, val);
8821 	}
8822 
8823 	/* Descriptor ring init may make accesses to the
8824 	 * NIC SRAM area to setup the TX descriptors, so we
8825 	 * can only do this after the hardware has been
8826 	 * successfully reset.
8827 	 */
8828 	err = tg3_init_rings(tp);
8829 	if (err)
8830 		return err;
8831 
8832 	if (tg3_flag(tp, 57765_PLUS)) {
8833 		val = tr32(TG3PCI_DMA_RW_CTRL) &
8834 		      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
8835 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0)
8836 			val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
8837 		if (!tg3_flag(tp, 57765_CLASS) &&
8838 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
8839 			val |= DMA_RWCTRL_TAGGED_STAT_WA;
8840 		tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
8841 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
8842 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
8843 		/* This value is determined during the probe time DMA
8844 		 * engine test, tg3_test_dma.
8845 		 */
8846 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
8847 	}
8848 
8849 	tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
8850 			  GRC_MODE_4X_NIC_SEND_RINGS |
8851 			  GRC_MODE_NO_TX_PHDR_CSUM |
8852 			  GRC_MODE_NO_RX_PHDR_CSUM);
8853 	tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
8854 
8855 	/* Pseudo-header checksum is done by hardware logic and not
8856 	 * the offload processers, so make the chip do the pseudo-
8857 	 * header checksums on receive.  For transmit it is more
8858 	 * convenient to do the pseudo-header checksum in software
8859 	 * as Linux does that on transmit for us in all cases.
8860 	 */
8861 	tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
8862 
8863 	tw32(GRC_MODE,
8864 	     tp->grc_mode |
8865 	     (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
8866 
8867 	/* Setup the timer prescalar register.  Clock is always 66Mhz. */
8868 	val = tr32(GRC_MISC_CFG);
8869 	val &= ~0xff;
8870 	val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
8871 	tw32(GRC_MISC_CFG, val);
8872 
8873 	/* Initialize MBUF/DESC pool. */
8874 	if (tg3_flag(tp, 5750_PLUS)) {
8875 		/* Do nothing.  */
8876 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
8877 		tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
8878 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
8879 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
8880 		else
8881 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
8882 		tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
8883 		tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
8884 	} else if (tg3_flag(tp, TSO_CAPABLE)) {
8885 		int fw_len;
8886 
8887 		fw_len = tp->fw_len;
8888 		fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
8889 		tw32(BUFMGR_MB_POOL_ADDR,
8890 		     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
8891 		tw32(BUFMGR_MB_POOL_SIZE,
8892 		     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
8893 	}
8894 
8895 	if (tp->dev->mtu <= ETH_DATA_LEN) {
8896 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
8897 		     tp->bufmgr_config.mbuf_read_dma_low_water);
8898 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
8899 		     tp->bufmgr_config.mbuf_mac_rx_low_water);
8900 		tw32(BUFMGR_MB_HIGH_WATER,
8901 		     tp->bufmgr_config.mbuf_high_water);
8902 	} else {
8903 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
8904 		     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
8905 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
8906 		     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
8907 		tw32(BUFMGR_MB_HIGH_WATER,
8908 		     tp->bufmgr_config.mbuf_high_water_jumbo);
8909 	}
8910 	tw32(BUFMGR_DMA_LOW_WATER,
8911 	     tp->bufmgr_config.dma_low_water);
8912 	tw32(BUFMGR_DMA_HIGH_WATER,
8913 	     tp->bufmgr_config.dma_high_water);
8914 
8915 	val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
8916 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
8917 		val |= BUFMGR_MODE_NO_TX_UNDERRUN;
8918 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
8919 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
8920 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0)
8921 		val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
8922 	tw32(BUFMGR_MODE, val);
8923 	for (i = 0; i < 2000; i++) {
8924 		if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
8925 			break;
8926 		udelay(10);
8927 	}
8928 	if (i >= 2000) {
8929 		netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
8930 		return -ENODEV;
8931 	}
8932 
8933 	if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
8934 		tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
8935 
8936 	tg3_setup_rxbd_thresholds(tp);
8937 
8938 	/* Initialize TG3_BDINFO's at:
8939 	 *  RCVDBDI_STD_BD:	standard eth size rx ring
8940 	 *  RCVDBDI_JUMBO_BD:	jumbo frame rx ring
8941 	 *  RCVDBDI_MINI_BD:	small frame rx ring (??? does not work)
8942 	 *
8943 	 * like so:
8944 	 *  TG3_BDINFO_HOST_ADDR:	high/low parts of DMA address of ring
8945 	 *  TG3_BDINFO_MAXLEN_FLAGS:	(rx max buffer size << 16) |
8946 	 *                              ring attribute flags
8947 	 *  TG3_BDINFO_NIC_ADDR:	location of descriptors in nic SRAM
8948 	 *
8949 	 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
8950 	 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
8951 	 *
8952 	 * The size of each ring is fixed in the firmware, but the location is
8953 	 * configurable.
8954 	 */
8955 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
8956 	     ((u64) tpr->rx_std_mapping >> 32));
8957 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
8958 	     ((u64) tpr->rx_std_mapping & 0xffffffff));
8959 	if (!tg3_flag(tp, 5717_PLUS))
8960 		tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
8961 		     NIC_SRAM_RX_BUFFER_DESC);
8962 
8963 	/* Disable the mini ring */
8964 	if (!tg3_flag(tp, 5705_PLUS))
8965 		tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
8966 		     BDINFO_FLAGS_DISABLED);
8967 
8968 	/* Program the jumbo buffer descriptor ring control
8969 	 * blocks on those devices that have them.
8970 	 */
8971 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
8972 	    (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
8973 
8974 		if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
8975 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
8976 			     ((u64) tpr->rx_jmb_mapping >> 32));
8977 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
8978 			     ((u64) tpr->rx_jmb_mapping & 0xffffffff));
8979 			val = TG3_RX_JMB_RING_SIZE(tp) <<
8980 			      BDINFO_FLAGS_MAXLEN_SHIFT;
8981 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
8982 			     val | BDINFO_FLAGS_USE_EXT_RECV);
8983 			if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
8984 			    tg3_flag(tp, 57765_CLASS))
8985 				tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
8986 				     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
8987 		} else {
8988 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
8989 			     BDINFO_FLAGS_DISABLED);
8990 		}
8991 
8992 		if (tg3_flag(tp, 57765_PLUS)) {
8993 			val = TG3_RX_STD_RING_SIZE(tp);
8994 			val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
8995 			val |= (TG3_RX_STD_DMA_SZ << 2);
8996 		} else
8997 			val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
8998 	} else
8999 		val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
9000 
9001 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
9002 
9003 	tpr->rx_std_prod_idx = tp->rx_pending;
9004 	tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
9005 
9006 	tpr->rx_jmb_prod_idx =
9007 		tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
9008 	tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
9009 
9010 	tg3_rings_reset(tp);
9011 
9012 	/* Initialize MAC address and backoff seed. */
9013 	__tg3_set_mac_addr(tp, 0);
9014 
9015 	/* MTU + ethernet header + FCS + optional VLAN tag */
9016 	tw32(MAC_RX_MTU_SIZE,
9017 	     tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
9018 
9019 	/* The slot time is changed by tg3_setup_phy if we
9020 	 * run at gigabit with half duplex.
9021 	 */
9022 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
9023 	      (6 << TX_LENGTHS_IPG_SHIFT) |
9024 	      (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
9025 
9026 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
9027 		val |= tr32(MAC_TX_LENGTHS) &
9028 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
9029 			TX_LENGTHS_CNT_DWN_VAL_MSK);
9030 
9031 	tw32(MAC_TX_LENGTHS, val);
9032 
9033 	/* Receive rules. */
9034 	tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
9035 	tw32(RCVLPC_CONFIG, 0x0181);
9036 
9037 	/* Calculate RDMAC_MODE setting early, we need it to determine
9038 	 * the RCVLPC_STATE_ENABLE mask.
9039 	 */
9040 	rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
9041 		      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
9042 		      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
9043 		      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
9044 		      RDMAC_MODE_LNGREAD_ENAB);
9045 
9046 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717)
9047 		rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
9048 
9049 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9050 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9051 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
9052 		rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
9053 			      RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
9054 			      RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
9055 
9056 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9057 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9058 		if (tg3_flag(tp, TSO_CAPABLE) &&
9059 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
9060 			rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
9061 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9062 			   !tg3_flag(tp, IS_5788)) {
9063 			rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9064 		}
9065 	}
9066 
9067 	if (tg3_flag(tp, PCI_EXPRESS))
9068 		rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9069 
9070 	if (tg3_flag(tp, HW_TSO_1) ||
9071 	    tg3_flag(tp, HW_TSO_2) ||
9072 	    tg3_flag(tp, HW_TSO_3))
9073 		rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
9074 
9075 	if (tg3_flag(tp, 57765_PLUS) ||
9076 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9077 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
9078 		rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
9079 
9080 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
9081 		rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
9082 
9083 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
9084 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9085 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9086 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
9087 	    tg3_flag(tp, 57765_PLUS)) {
9088 		val = tr32(TG3_RDMA_RSRVCTRL_REG);
9089 		if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) {
9090 			val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
9091 				 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
9092 				 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
9093 			val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
9094 			       TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
9095 			       TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
9096 		}
9097 		tw32(TG3_RDMA_RSRVCTRL_REG,
9098 		     val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
9099 	}
9100 
9101 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
9102 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9103 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9104 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val |
9105 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
9106 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
9107 	}
9108 
9109 	/* Receive/send statistics. */
9110 	if (tg3_flag(tp, 5750_PLUS)) {
9111 		val = tr32(RCVLPC_STATS_ENABLE);
9112 		val &= ~RCVLPC_STATSENAB_DACK_FIX;
9113 		tw32(RCVLPC_STATS_ENABLE, val);
9114 	} else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
9115 		   tg3_flag(tp, TSO_CAPABLE)) {
9116 		val = tr32(RCVLPC_STATS_ENABLE);
9117 		val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
9118 		tw32(RCVLPC_STATS_ENABLE, val);
9119 	} else {
9120 		tw32(RCVLPC_STATS_ENABLE, 0xffffff);
9121 	}
9122 	tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
9123 	tw32(SNDDATAI_STATSENAB, 0xffffff);
9124 	tw32(SNDDATAI_STATSCTRL,
9125 	     (SNDDATAI_SCTRL_ENABLE |
9126 	      SNDDATAI_SCTRL_FASTUPD));
9127 
9128 	/* Setup host coalescing engine. */
9129 	tw32(HOSTCC_MODE, 0);
9130 	for (i = 0; i < 2000; i++) {
9131 		if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
9132 			break;
9133 		udelay(10);
9134 	}
9135 
9136 	__tg3_set_coalesce(tp, &tp->coal);
9137 
9138 	if (!tg3_flag(tp, 5705_PLUS)) {
9139 		/* Status/statistics block address.  See tg3_timer,
9140 		 * the tg3_periodic_fetch_stats call there, and
9141 		 * tg3_get_stats to see how this works for 5705/5750 chips.
9142 		 */
9143 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9144 		     ((u64) tp->stats_mapping >> 32));
9145 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9146 		     ((u64) tp->stats_mapping & 0xffffffff));
9147 		tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
9148 
9149 		tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
9150 
9151 		/* Clear statistics and status block memory areas */
9152 		for (i = NIC_SRAM_STATS_BLK;
9153 		     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
9154 		     i += sizeof(u32)) {
9155 			tg3_write_mem(tp, i, 0);
9156 			udelay(40);
9157 		}
9158 	}
9159 
9160 	tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
9161 
9162 	tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
9163 	tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
9164 	if (!tg3_flag(tp, 5705_PLUS))
9165 		tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
9166 
9167 	if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9168 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
9169 		/* reset to prevent losing 1st rx packet intermittently */
9170 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9171 		udelay(10);
9172 	}
9173 
9174 	tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
9175 			MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
9176 			MAC_MODE_FHDE_ENABLE;
9177 	if (tg3_flag(tp, ENABLE_APE))
9178 		tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
9179 	if (!tg3_flag(tp, 5705_PLUS) &&
9180 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9181 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
9182 		tp->mac_mode |= MAC_MODE_LINK_POLARITY;
9183 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
9184 	udelay(40);
9185 
9186 	/* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
9187 	 * If TG3_FLAG_IS_NIC is zero, we should read the
9188 	 * register to preserve the GPIO settings for LOMs. The GPIOs,
9189 	 * whether used as inputs or outputs, are set by boot code after
9190 	 * reset.
9191 	 */
9192 	if (!tg3_flag(tp, IS_NIC)) {
9193 		u32 gpio_mask;
9194 
9195 		gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
9196 			    GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
9197 			    GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
9198 
9199 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
9200 			gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
9201 				     GRC_LCLCTRL_GPIO_OUTPUT3;
9202 
9203 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
9204 			gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
9205 
9206 		tp->grc_local_ctrl &= ~gpio_mask;
9207 		tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
9208 
9209 		/* GPIO1 must be driven high for eeprom write protect */
9210 		if (tg3_flag(tp, EEPROM_WRITE_PROT))
9211 			tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
9212 					       GRC_LCLCTRL_GPIO_OUTPUT1);
9213 	}
9214 	tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9215 	udelay(100);
9216 
9217 	if (tg3_flag(tp, USING_MSIX)) {
9218 		val = tr32(MSGINT_MODE);
9219 		val |= MSGINT_MODE_ENABLE;
9220 		if (tp->irq_cnt > 1)
9221 			val |= MSGINT_MODE_MULTIVEC_EN;
9222 		if (!tg3_flag(tp, 1SHOT_MSI))
9223 			val |= MSGINT_MODE_ONE_SHOT_DISABLE;
9224 		tw32(MSGINT_MODE, val);
9225 	}
9226 
9227 	if (!tg3_flag(tp, 5705_PLUS)) {
9228 		tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
9229 		udelay(40);
9230 	}
9231 
9232 	val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
9233 	       WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
9234 	       WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
9235 	       WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
9236 	       WDMAC_MODE_LNGREAD_ENAB);
9237 
9238 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9239 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9240 		if (tg3_flag(tp, TSO_CAPABLE) &&
9241 		    (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
9242 		     tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
9243 			/* nothing */
9244 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9245 			   !tg3_flag(tp, IS_5788)) {
9246 			val |= WDMAC_MODE_RX_ACCEL;
9247 		}
9248 	}
9249 
9250 	/* Enable host coalescing bug fix */
9251 	if (tg3_flag(tp, 5755_PLUS))
9252 		val |= WDMAC_MODE_STATUS_TAG_FIX;
9253 
9254 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
9255 		val |= WDMAC_MODE_BURST_ALL_DATA;
9256 
9257 	tw32_f(WDMAC_MODE, val);
9258 	udelay(40);
9259 
9260 	if (tg3_flag(tp, PCIX_MODE)) {
9261 		u16 pcix_cmd;
9262 
9263 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9264 				     &pcix_cmd);
9265 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
9266 			pcix_cmd &= ~PCI_X_CMD_MAX_READ;
9267 			pcix_cmd |= PCI_X_CMD_READ_2K;
9268 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
9269 			pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
9270 			pcix_cmd |= PCI_X_CMD_READ_2K;
9271 		}
9272 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9273 				      pcix_cmd);
9274 	}
9275 
9276 	tw32_f(RDMAC_MODE, rdmac_mode);
9277 	udelay(40);
9278 
9279 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) {
9280 		for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
9281 			if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
9282 				break;
9283 		}
9284 		if (i < TG3_NUM_RDMA_CHANNELS) {
9285 			val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9286 			val |= TG3_LSO_RD_DMA_TX_LENGTH_WA;
9287 			tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
9288 			tg3_flag_set(tp, 5719_RDMA_BUG);
9289 		}
9290 	}
9291 
9292 	tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
9293 	if (!tg3_flag(tp, 5705_PLUS))
9294 		tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
9295 
9296 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
9297 		tw32(SNDDATAC_MODE,
9298 		     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
9299 	else
9300 		tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
9301 
9302 	tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
9303 	tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
9304 	val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
9305 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
9306 		val |= RCVDBDI_MODE_LRG_RING_SZ;
9307 	tw32(RCVDBDI_MODE, val);
9308 	tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
9309 	if (tg3_flag(tp, HW_TSO_1) ||
9310 	    tg3_flag(tp, HW_TSO_2) ||
9311 	    tg3_flag(tp, HW_TSO_3))
9312 		tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
9313 	val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
9314 	if (tg3_flag(tp, ENABLE_TSS))
9315 		val |= SNDBDI_MODE_MULTI_TXQ_EN;
9316 	tw32(SNDBDI_MODE, val);
9317 	tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
9318 
9319 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9320 		err = tg3_load_5701_a0_firmware_fix(tp);
9321 		if (err)
9322 			return err;
9323 	}
9324 
9325 	if (tg3_flag(tp, TSO_CAPABLE)) {
9326 		err = tg3_load_tso_firmware(tp);
9327 		if (err)
9328 			return err;
9329 	}
9330 
9331 	tp->tx_mode = TX_MODE_ENABLE;
9332 
9333 	if (tg3_flag(tp, 5755_PLUS) ||
9334 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9335 		tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
9336 
9337 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9338 		val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
9339 		tp->tx_mode &= ~val;
9340 		tp->tx_mode |= tr32(MAC_TX_MODE) & val;
9341 	}
9342 
9343 	tw32_f(MAC_TX_MODE, tp->tx_mode);
9344 	udelay(100);
9345 
9346 	if (tg3_flag(tp, ENABLE_RSS)) {
9347 		tg3_rss_write_indir_tbl(tp);
9348 
9349 		/* Setup the "secret" hash key. */
9350 		tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
9351 		tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
9352 		tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
9353 		tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
9354 		tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
9355 		tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
9356 		tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
9357 		tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
9358 		tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
9359 		tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
9360 	}
9361 
9362 	tp->rx_mode = RX_MODE_ENABLE;
9363 	if (tg3_flag(tp, 5755_PLUS))
9364 		tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
9365 
9366 	if (tg3_flag(tp, ENABLE_RSS))
9367 		tp->rx_mode |= RX_MODE_RSS_ENABLE |
9368 			       RX_MODE_RSS_ITBL_HASH_BITS_7 |
9369 			       RX_MODE_RSS_IPV6_HASH_EN |
9370 			       RX_MODE_RSS_TCP_IPV6_HASH_EN |
9371 			       RX_MODE_RSS_IPV4_HASH_EN |
9372 			       RX_MODE_RSS_TCP_IPV4_HASH_EN;
9373 
9374 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9375 	udelay(10);
9376 
9377 	tw32(MAC_LED_CTRL, tp->led_ctrl);
9378 
9379 	tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
9380 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9381 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9382 		udelay(10);
9383 	}
9384 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9385 	udelay(10);
9386 
9387 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9388 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
9389 			!(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
9390 			/* Set drive transmission level to 1.2V  */
9391 			/* only if the signal pre-emphasis bit is not set  */
9392 			val = tr32(MAC_SERDES_CFG);
9393 			val &= 0xfffff000;
9394 			val |= 0x880;
9395 			tw32(MAC_SERDES_CFG, val);
9396 		}
9397 		if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
9398 			tw32(MAC_SERDES_CFG, 0x616000);
9399 	}
9400 
9401 	/* Prevent chip from dropping frames when flow control
9402 	 * is enabled.
9403 	 */
9404 	if (tg3_flag(tp, 57765_CLASS))
9405 		val = 1;
9406 	else
9407 		val = 2;
9408 	tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
9409 
9410 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
9411 	    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
9412 		/* Use hardware link auto-negotiation */
9413 		tg3_flag_set(tp, HW_AUTONEG);
9414 	}
9415 
9416 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9417 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
9418 		u32 tmp;
9419 
9420 		tmp = tr32(SERDES_RX_CTRL);
9421 		tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
9422 		tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
9423 		tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
9424 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9425 	}
9426 
9427 	if (!tg3_flag(tp, USE_PHYLIB)) {
9428 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
9429 			tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
9430 
9431 		err = tg3_setup_phy(tp, 0);
9432 		if (err)
9433 			return err;
9434 
9435 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9436 		    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
9437 			u32 tmp;
9438 
9439 			/* Clear CRC stats. */
9440 			if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
9441 				tg3_writephy(tp, MII_TG3_TEST1,
9442 					     tmp | MII_TG3_TEST1_CRC_EN);
9443 				tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
9444 			}
9445 		}
9446 	}
9447 
9448 	__tg3_set_rx_mode(tp->dev);
9449 
9450 	/* Initialize receive rules. */
9451 	tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
9452 	tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
9453 	tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
9454 	tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
9455 
9456 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
9457 		limit = 8;
9458 	else
9459 		limit = 16;
9460 	if (tg3_flag(tp, ENABLE_ASF))
9461 		limit -= 4;
9462 	switch (limit) {
9463 	case 16:
9464 		tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
9465 	case 15:
9466 		tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
9467 	case 14:
9468 		tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
9469 	case 13:
9470 		tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
9471 	case 12:
9472 		tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
9473 	case 11:
9474 		tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
9475 	case 10:
9476 		tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
9477 	case 9:
9478 		tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
9479 	case 8:
9480 		tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
9481 	case 7:
9482 		tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
9483 	case 6:
9484 		tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
9485 	case 5:
9486 		tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
9487 	case 4:
9488 		/* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
9489 	case 3:
9490 		/* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
9491 	case 2:
9492 	case 1:
9493 
9494 	default:
9495 		break;
9496 	}
9497 
9498 	if (tg3_flag(tp, ENABLE_APE))
9499 		/* Write our heartbeat update interval to APE. */
9500 		tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
9501 				APE_HOST_HEARTBEAT_INT_DISABLE);
9502 
9503 	tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
9504 
9505 	return 0;
9506 }
9507 
9508 /* Called at device open time to get the chip ready for
9509  * packet processing.  Invoked with tp->lock held.
9510  */
9511 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
9512 {
9513 	tg3_switch_clocks(tp);
9514 
9515 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
9516 
9517 	return tg3_reset_hw(tp, reset_phy);
9518 }
9519 
9520 #if IS_ENABLED(CONFIG_HWMON)
9521 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
9522 {
9523 	int i;
9524 
9525 	for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
9526 		u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
9527 
9528 		tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
9529 		off += len;
9530 
9531 		if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
9532 		    !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
9533 			memset(ocir, 0, TG3_OCIR_LEN);
9534 	}
9535 }
9536 
9537 /* sysfs attributes for hwmon */
9538 static ssize_t tg3_show_temp(struct device *dev,
9539 			     struct device_attribute *devattr, char *buf)
9540 {
9541 	struct pci_dev *pdev = to_pci_dev(dev);
9542 	struct net_device *netdev = pci_get_drvdata(pdev);
9543 	struct tg3 *tp = netdev_priv(netdev);
9544 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
9545 	u32 temperature;
9546 
9547 	spin_lock_bh(&tp->lock);
9548 	tg3_ape_scratchpad_read(tp, &temperature, attr->index,
9549 				sizeof(temperature));
9550 	spin_unlock_bh(&tp->lock);
9551 	return sprintf(buf, "%u\n", temperature);
9552 }
9553 
9554 
9555 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
9556 			  TG3_TEMP_SENSOR_OFFSET);
9557 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
9558 			  TG3_TEMP_CAUTION_OFFSET);
9559 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
9560 			  TG3_TEMP_MAX_OFFSET);
9561 
9562 static struct attribute *tg3_attributes[] = {
9563 	&sensor_dev_attr_temp1_input.dev_attr.attr,
9564 	&sensor_dev_attr_temp1_crit.dev_attr.attr,
9565 	&sensor_dev_attr_temp1_max.dev_attr.attr,
9566 	NULL
9567 };
9568 
9569 static const struct attribute_group tg3_group = {
9570 	.attrs = tg3_attributes,
9571 };
9572 
9573 #endif
9574 
9575 static void tg3_hwmon_close(struct tg3 *tp)
9576 {
9577 #if IS_ENABLED(CONFIG_HWMON)
9578 	if (tp->hwmon_dev) {
9579 		hwmon_device_unregister(tp->hwmon_dev);
9580 		tp->hwmon_dev = NULL;
9581 		sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group);
9582 	}
9583 #endif
9584 }
9585 
9586 static void tg3_hwmon_open(struct tg3 *tp)
9587 {
9588 #if IS_ENABLED(CONFIG_HWMON)
9589 	int i, err;
9590 	u32 size = 0;
9591 	struct pci_dev *pdev = tp->pdev;
9592 	struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
9593 
9594 	tg3_sd_scan_scratchpad(tp, ocirs);
9595 
9596 	for (i = 0; i < TG3_SD_NUM_RECS; i++) {
9597 		if (!ocirs[i].src_data_length)
9598 			continue;
9599 
9600 		size += ocirs[i].src_hdr_length;
9601 		size += ocirs[i].src_data_length;
9602 	}
9603 
9604 	if (!size)
9605 		return;
9606 
9607 	/* Register hwmon sysfs hooks */
9608 	err = sysfs_create_group(&pdev->dev.kobj, &tg3_group);
9609 	if (err) {
9610 		dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n");
9611 		return;
9612 	}
9613 
9614 	tp->hwmon_dev = hwmon_device_register(&pdev->dev);
9615 	if (IS_ERR(tp->hwmon_dev)) {
9616 		tp->hwmon_dev = NULL;
9617 		dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
9618 		sysfs_remove_group(&pdev->dev.kobj, &tg3_group);
9619 	}
9620 #endif
9621 }
9622 
9623 
9624 #define TG3_STAT_ADD32(PSTAT, REG) \
9625 do {	u32 __val = tr32(REG); \
9626 	(PSTAT)->low += __val; \
9627 	if ((PSTAT)->low < __val) \
9628 		(PSTAT)->high += 1; \
9629 } while (0)
9630 
9631 static void tg3_periodic_fetch_stats(struct tg3 *tp)
9632 {
9633 	struct tg3_hw_stats *sp = tp->hw_stats;
9634 
9635 	if (!netif_carrier_ok(tp->dev))
9636 		return;
9637 
9638 	TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
9639 	TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
9640 	TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
9641 	TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
9642 	TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
9643 	TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
9644 	TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
9645 	TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
9646 	TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
9647 	TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
9648 	TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
9649 	TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
9650 	TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
9651 	if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) &&
9652 		     (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
9653 		      sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
9654 		u32 val;
9655 
9656 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9657 		val &= ~TG3_LSO_RD_DMA_TX_LENGTH_WA;
9658 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
9659 		tg3_flag_clear(tp, 5719_RDMA_BUG);
9660 	}
9661 
9662 	TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
9663 	TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
9664 	TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
9665 	TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
9666 	TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
9667 	TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
9668 	TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
9669 	TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
9670 	TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
9671 	TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
9672 	TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
9673 	TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
9674 	TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
9675 	TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
9676 
9677 	TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
9678 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9679 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 &&
9680 	    tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) {
9681 		TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
9682 	} else {
9683 		u32 val = tr32(HOSTCC_FLOW_ATTN);
9684 		val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
9685 		if (val) {
9686 			tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
9687 			sp->rx_discards.low += val;
9688 			if (sp->rx_discards.low < val)
9689 				sp->rx_discards.high += 1;
9690 		}
9691 		sp->mbuf_lwm_thresh_hit = sp->rx_discards;
9692 	}
9693 	TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
9694 }
9695 
9696 static void tg3_chk_missed_msi(struct tg3 *tp)
9697 {
9698 	u32 i;
9699 
9700 	for (i = 0; i < tp->irq_cnt; i++) {
9701 		struct tg3_napi *tnapi = &tp->napi[i];
9702 
9703 		if (tg3_has_work(tnapi)) {
9704 			if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
9705 			    tnapi->last_tx_cons == tnapi->tx_cons) {
9706 				if (tnapi->chk_msi_cnt < 1) {
9707 					tnapi->chk_msi_cnt++;
9708 					return;
9709 				}
9710 				tg3_msi(0, tnapi);
9711 			}
9712 		}
9713 		tnapi->chk_msi_cnt = 0;
9714 		tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
9715 		tnapi->last_tx_cons = tnapi->tx_cons;
9716 	}
9717 }
9718 
9719 static void tg3_timer(unsigned long __opaque)
9720 {
9721 	struct tg3 *tp = (struct tg3 *) __opaque;
9722 
9723 	if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING))
9724 		goto restart_timer;
9725 
9726 	spin_lock(&tp->lock);
9727 
9728 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
9729 	    tg3_flag(tp, 57765_CLASS))
9730 		tg3_chk_missed_msi(tp);
9731 
9732 	if (!tg3_flag(tp, TAGGED_STATUS)) {
9733 		/* All of this garbage is because when using non-tagged
9734 		 * IRQ status the mailbox/status_block protocol the chip
9735 		 * uses with the cpu is race prone.
9736 		 */
9737 		if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
9738 			tw32(GRC_LOCAL_CTRL,
9739 			     tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
9740 		} else {
9741 			tw32(HOSTCC_MODE, tp->coalesce_mode |
9742 			     HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
9743 		}
9744 
9745 		if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
9746 			spin_unlock(&tp->lock);
9747 			tg3_reset_task_schedule(tp);
9748 			goto restart_timer;
9749 		}
9750 	}
9751 
9752 	/* This part only runs once per second. */
9753 	if (!--tp->timer_counter) {
9754 		if (tg3_flag(tp, 5705_PLUS))
9755 			tg3_periodic_fetch_stats(tp);
9756 
9757 		if (tp->setlpicnt && !--tp->setlpicnt)
9758 			tg3_phy_eee_enable(tp);
9759 
9760 		if (tg3_flag(tp, USE_LINKCHG_REG)) {
9761 			u32 mac_stat;
9762 			int phy_event;
9763 
9764 			mac_stat = tr32(MAC_STATUS);
9765 
9766 			phy_event = 0;
9767 			if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
9768 				if (mac_stat & MAC_STATUS_MI_INTERRUPT)
9769 					phy_event = 1;
9770 			} else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
9771 				phy_event = 1;
9772 
9773 			if (phy_event)
9774 				tg3_setup_phy(tp, 0);
9775 		} else if (tg3_flag(tp, POLL_SERDES)) {
9776 			u32 mac_stat = tr32(MAC_STATUS);
9777 			int need_setup = 0;
9778 
9779 			if (netif_carrier_ok(tp->dev) &&
9780 			    (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
9781 				need_setup = 1;
9782 			}
9783 			if (!netif_carrier_ok(tp->dev) &&
9784 			    (mac_stat & (MAC_STATUS_PCS_SYNCED |
9785 					 MAC_STATUS_SIGNAL_DET))) {
9786 				need_setup = 1;
9787 			}
9788 			if (need_setup) {
9789 				if (!tp->serdes_counter) {
9790 					tw32_f(MAC_MODE,
9791 					     (tp->mac_mode &
9792 					      ~MAC_MODE_PORT_MODE_MASK));
9793 					udelay(40);
9794 					tw32_f(MAC_MODE, tp->mac_mode);
9795 					udelay(40);
9796 				}
9797 				tg3_setup_phy(tp, 0);
9798 			}
9799 		} else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9800 			   tg3_flag(tp, 5780_CLASS)) {
9801 			tg3_serdes_parallel_detect(tp);
9802 		}
9803 
9804 		tp->timer_counter = tp->timer_multiplier;
9805 	}
9806 
9807 	/* Heartbeat is only sent once every 2 seconds.
9808 	 *
9809 	 * The heartbeat is to tell the ASF firmware that the host
9810 	 * driver is still alive.  In the event that the OS crashes,
9811 	 * ASF needs to reset the hardware to free up the FIFO space
9812 	 * that may be filled with rx packets destined for the host.
9813 	 * If the FIFO is full, ASF will no longer function properly.
9814 	 *
9815 	 * Unintended resets have been reported on real time kernels
9816 	 * where the timer doesn't run on time.  Netpoll will also have
9817 	 * same problem.
9818 	 *
9819 	 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
9820 	 * to check the ring condition when the heartbeat is expiring
9821 	 * before doing the reset.  This will prevent most unintended
9822 	 * resets.
9823 	 */
9824 	if (!--tp->asf_counter) {
9825 		if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
9826 			tg3_wait_for_event_ack(tp);
9827 
9828 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
9829 				      FWCMD_NICDRV_ALIVE3);
9830 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
9831 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
9832 				      TG3_FW_UPDATE_TIMEOUT_SEC);
9833 
9834 			tg3_generate_fw_event(tp);
9835 		}
9836 		tp->asf_counter = tp->asf_multiplier;
9837 	}
9838 
9839 	spin_unlock(&tp->lock);
9840 
9841 restart_timer:
9842 	tp->timer.expires = jiffies + tp->timer_offset;
9843 	add_timer(&tp->timer);
9844 }
9845 
9846 static void __devinit tg3_timer_init(struct tg3 *tp)
9847 {
9848 	if (tg3_flag(tp, TAGGED_STATUS) &&
9849 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
9850 	    !tg3_flag(tp, 57765_CLASS))
9851 		tp->timer_offset = HZ;
9852 	else
9853 		tp->timer_offset = HZ / 10;
9854 
9855 	BUG_ON(tp->timer_offset > HZ);
9856 
9857 	tp->timer_multiplier = (HZ / tp->timer_offset);
9858 	tp->asf_multiplier = (HZ / tp->timer_offset) *
9859 			     TG3_FW_UPDATE_FREQ_SEC;
9860 
9861 	init_timer(&tp->timer);
9862 	tp->timer.data = (unsigned long) tp;
9863 	tp->timer.function = tg3_timer;
9864 }
9865 
9866 static void tg3_timer_start(struct tg3 *tp)
9867 {
9868 	tp->asf_counter   = tp->asf_multiplier;
9869 	tp->timer_counter = tp->timer_multiplier;
9870 
9871 	tp->timer.expires = jiffies + tp->timer_offset;
9872 	add_timer(&tp->timer);
9873 }
9874 
9875 static void tg3_timer_stop(struct tg3 *tp)
9876 {
9877 	del_timer_sync(&tp->timer);
9878 }
9879 
9880 /* Restart hardware after configuration changes, self-test, etc.
9881  * Invoked with tp->lock held.
9882  */
9883 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
9884 	__releases(tp->lock)
9885 	__acquires(tp->lock)
9886 {
9887 	int err;
9888 
9889 	err = tg3_init_hw(tp, reset_phy);
9890 	if (err) {
9891 		netdev_err(tp->dev,
9892 			   "Failed to re-initialize device, aborting\n");
9893 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9894 		tg3_full_unlock(tp);
9895 		tg3_timer_stop(tp);
9896 		tp->irq_sync = 0;
9897 		tg3_napi_enable(tp);
9898 		dev_close(tp->dev);
9899 		tg3_full_lock(tp, 0);
9900 	}
9901 	return err;
9902 }
9903 
9904 static void tg3_reset_task(struct work_struct *work)
9905 {
9906 	struct tg3 *tp = container_of(work, struct tg3, reset_task);
9907 	int err;
9908 
9909 	tg3_full_lock(tp, 0);
9910 
9911 	if (!netif_running(tp->dev)) {
9912 		tg3_flag_clear(tp, RESET_TASK_PENDING);
9913 		tg3_full_unlock(tp);
9914 		return;
9915 	}
9916 
9917 	tg3_full_unlock(tp);
9918 
9919 	tg3_phy_stop(tp);
9920 
9921 	tg3_netif_stop(tp);
9922 
9923 	tg3_full_lock(tp, 1);
9924 
9925 	if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
9926 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
9927 		tp->write32_rx_mbox = tg3_write_flush_reg32;
9928 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
9929 		tg3_flag_clear(tp, TX_RECOVERY_PENDING);
9930 	}
9931 
9932 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
9933 	err = tg3_init_hw(tp, 1);
9934 	if (err)
9935 		goto out;
9936 
9937 	tg3_netif_start(tp);
9938 
9939 out:
9940 	tg3_full_unlock(tp);
9941 
9942 	if (!err)
9943 		tg3_phy_start(tp);
9944 
9945 	tg3_flag_clear(tp, RESET_TASK_PENDING);
9946 }
9947 
9948 static int tg3_request_irq(struct tg3 *tp, int irq_num)
9949 {
9950 	irq_handler_t fn;
9951 	unsigned long flags;
9952 	char *name;
9953 	struct tg3_napi *tnapi = &tp->napi[irq_num];
9954 
9955 	if (tp->irq_cnt == 1)
9956 		name = tp->dev->name;
9957 	else {
9958 		name = &tnapi->irq_lbl[0];
9959 		snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num);
9960 		name[IFNAMSIZ-1] = 0;
9961 	}
9962 
9963 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
9964 		fn = tg3_msi;
9965 		if (tg3_flag(tp, 1SHOT_MSI))
9966 			fn = tg3_msi_1shot;
9967 		flags = 0;
9968 	} else {
9969 		fn = tg3_interrupt;
9970 		if (tg3_flag(tp, TAGGED_STATUS))
9971 			fn = tg3_interrupt_tagged;
9972 		flags = IRQF_SHARED;
9973 	}
9974 
9975 	return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
9976 }
9977 
9978 static int tg3_test_interrupt(struct tg3 *tp)
9979 {
9980 	struct tg3_napi *tnapi = &tp->napi[0];
9981 	struct net_device *dev = tp->dev;
9982 	int err, i, intr_ok = 0;
9983 	u32 val;
9984 
9985 	if (!netif_running(dev))
9986 		return -ENODEV;
9987 
9988 	tg3_disable_ints(tp);
9989 
9990 	free_irq(tnapi->irq_vec, tnapi);
9991 
9992 	/*
9993 	 * Turn off MSI one shot mode.  Otherwise this test has no
9994 	 * observable way to know whether the interrupt was delivered.
9995 	 */
9996 	if (tg3_flag(tp, 57765_PLUS)) {
9997 		val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
9998 		tw32(MSGINT_MODE, val);
9999 	}
10000 
10001 	err = request_irq(tnapi->irq_vec, tg3_test_isr,
10002 			  IRQF_SHARED, dev->name, tnapi);
10003 	if (err)
10004 		return err;
10005 
10006 	tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
10007 	tg3_enable_ints(tp);
10008 
10009 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
10010 	       tnapi->coal_now);
10011 
10012 	for (i = 0; i < 5; i++) {
10013 		u32 int_mbox, misc_host_ctrl;
10014 
10015 		int_mbox = tr32_mailbox(tnapi->int_mbox);
10016 		misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
10017 
10018 		if ((int_mbox != 0) ||
10019 		    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
10020 			intr_ok = 1;
10021 			break;
10022 		}
10023 
10024 		if (tg3_flag(tp, 57765_PLUS) &&
10025 		    tnapi->hw_status->status_tag != tnapi->last_tag)
10026 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
10027 
10028 		msleep(10);
10029 	}
10030 
10031 	tg3_disable_ints(tp);
10032 
10033 	free_irq(tnapi->irq_vec, tnapi);
10034 
10035 	err = tg3_request_irq(tp, 0);
10036 
10037 	if (err)
10038 		return err;
10039 
10040 	if (intr_ok) {
10041 		/* Reenable MSI one shot mode. */
10042 		if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
10043 			val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
10044 			tw32(MSGINT_MODE, val);
10045 		}
10046 		return 0;
10047 	}
10048 
10049 	return -EIO;
10050 }
10051 
10052 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
10053  * successfully restored
10054  */
10055 static int tg3_test_msi(struct tg3 *tp)
10056 {
10057 	int err;
10058 	u16 pci_cmd;
10059 
10060 	if (!tg3_flag(tp, USING_MSI))
10061 		return 0;
10062 
10063 	/* Turn off SERR reporting in case MSI terminates with Master
10064 	 * Abort.
10065 	 */
10066 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10067 	pci_write_config_word(tp->pdev, PCI_COMMAND,
10068 			      pci_cmd & ~PCI_COMMAND_SERR);
10069 
10070 	err = tg3_test_interrupt(tp);
10071 
10072 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10073 
10074 	if (!err)
10075 		return 0;
10076 
10077 	/* other failures */
10078 	if (err != -EIO)
10079 		return err;
10080 
10081 	/* MSI test failed, go back to INTx mode */
10082 	netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
10083 		    "to INTx mode. Please report this failure to the PCI "
10084 		    "maintainer and include system chipset information\n");
10085 
10086 	free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10087 
10088 	pci_disable_msi(tp->pdev);
10089 
10090 	tg3_flag_clear(tp, USING_MSI);
10091 	tp->napi[0].irq_vec = tp->pdev->irq;
10092 
10093 	err = tg3_request_irq(tp, 0);
10094 	if (err)
10095 		return err;
10096 
10097 	/* Need to reset the chip because the MSI cycle may have terminated
10098 	 * with Master Abort.
10099 	 */
10100 	tg3_full_lock(tp, 1);
10101 
10102 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10103 	err = tg3_init_hw(tp, 1);
10104 
10105 	tg3_full_unlock(tp);
10106 
10107 	if (err)
10108 		free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10109 
10110 	return err;
10111 }
10112 
10113 static int tg3_request_firmware(struct tg3 *tp)
10114 {
10115 	const __be32 *fw_data;
10116 
10117 	if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
10118 		netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
10119 			   tp->fw_needed);
10120 		return -ENOENT;
10121 	}
10122 
10123 	fw_data = (void *)tp->fw->data;
10124 
10125 	/* Firmware blob starts with version numbers, followed by
10126 	 * start address and _full_ length including BSS sections
10127 	 * (which must be longer than the actual data, of course
10128 	 */
10129 
10130 	tp->fw_len = be32_to_cpu(fw_data[2]);	/* includes bss */
10131 	if (tp->fw_len < (tp->fw->size - 12)) {
10132 		netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
10133 			   tp->fw_len, tp->fw_needed);
10134 		release_firmware(tp->fw);
10135 		tp->fw = NULL;
10136 		return -EINVAL;
10137 	}
10138 
10139 	/* We no longer need firmware; we have it. */
10140 	tp->fw_needed = NULL;
10141 	return 0;
10142 }
10143 
10144 static bool tg3_enable_msix(struct tg3 *tp)
10145 {
10146 	int i, rc;
10147 	struct msix_entry msix_ent[tp->irq_max];
10148 
10149 	tp->irq_cnt = netif_get_num_default_rss_queues();
10150 	if (tp->irq_cnt > 1) {
10151 		/* We want as many rx rings enabled as there are cpus.
10152 		 * In multiqueue MSI-X mode, the first MSI-X vector
10153 		 * only deals with link interrupts, etc, so we add
10154 		 * one to the number of vectors we are requesting.
10155 		 */
10156 		tp->irq_cnt = min_t(unsigned, tp->irq_cnt + 1, tp->irq_max);
10157 	}
10158 
10159 	for (i = 0; i < tp->irq_max; i++) {
10160 		msix_ent[i].entry  = i;
10161 		msix_ent[i].vector = 0;
10162 	}
10163 
10164 	rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
10165 	if (rc < 0) {
10166 		return false;
10167 	} else if (rc != 0) {
10168 		if (pci_enable_msix(tp->pdev, msix_ent, rc))
10169 			return false;
10170 		netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
10171 			      tp->irq_cnt, rc);
10172 		tp->irq_cnt = rc;
10173 	}
10174 
10175 	for (i = 0; i < tp->irq_max; i++)
10176 		tp->napi[i].irq_vec = msix_ent[i].vector;
10177 
10178 	netif_set_real_num_tx_queues(tp->dev, 1);
10179 	rc = tp->irq_cnt > 1 ? tp->irq_cnt - 1 : 1;
10180 	if (netif_set_real_num_rx_queues(tp->dev, rc)) {
10181 		pci_disable_msix(tp->pdev);
10182 		return false;
10183 	}
10184 
10185 	if (tp->irq_cnt > 1) {
10186 		tg3_flag_set(tp, ENABLE_RSS);
10187 
10188 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
10189 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
10190 			tg3_flag_set(tp, ENABLE_TSS);
10191 			netif_set_real_num_tx_queues(tp->dev, tp->irq_cnt - 1);
10192 		}
10193 	}
10194 
10195 	return true;
10196 }
10197 
10198 static void tg3_ints_init(struct tg3 *tp)
10199 {
10200 	if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
10201 	    !tg3_flag(tp, TAGGED_STATUS)) {
10202 		/* All MSI supporting chips should support tagged
10203 		 * status.  Assert that this is the case.
10204 		 */
10205 		netdev_warn(tp->dev,
10206 			    "MSI without TAGGED_STATUS? Not using MSI\n");
10207 		goto defcfg;
10208 	}
10209 
10210 	if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
10211 		tg3_flag_set(tp, USING_MSIX);
10212 	else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
10213 		tg3_flag_set(tp, USING_MSI);
10214 
10215 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10216 		u32 msi_mode = tr32(MSGINT_MODE);
10217 		if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
10218 			msi_mode |= MSGINT_MODE_MULTIVEC_EN;
10219 		if (!tg3_flag(tp, 1SHOT_MSI))
10220 			msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
10221 		tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
10222 	}
10223 defcfg:
10224 	if (!tg3_flag(tp, USING_MSIX)) {
10225 		tp->irq_cnt = 1;
10226 		tp->napi[0].irq_vec = tp->pdev->irq;
10227 		netif_set_real_num_tx_queues(tp->dev, 1);
10228 		netif_set_real_num_rx_queues(tp->dev, 1);
10229 	}
10230 }
10231 
10232 static void tg3_ints_fini(struct tg3 *tp)
10233 {
10234 	if (tg3_flag(tp, USING_MSIX))
10235 		pci_disable_msix(tp->pdev);
10236 	else if (tg3_flag(tp, USING_MSI))
10237 		pci_disable_msi(tp->pdev);
10238 	tg3_flag_clear(tp, USING_MSI);
10239 	tg3_flag_clear(tp, USING_MSIX);
10240 	tg3_flag_clear(tp, ENABLE_RSS);
10241 	tg3_flag_clear(tp, ENABLE_TSS);
10242 }
10243 
10244 static int tg3_open(struct net_device *dev)
10245 {
10246 	struct tg3 *tp = netdev_priv(dev);
10247 	int i, err;
10248 
10249 	if (tp->fw_needed) {
10250 		err = tg3_request_firmware(tp);
10251 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
10252 			if (err)
10253 				return err;
10254 		} else if (err) {
10255 			netdev_warn(tp->dev, "TSO capability disabled\n");
10256 			tg3_flag_clear(tp, TSO_CAPABLE);
10257 		} else if (!tg3_flag(tp, TSO_CAPABLE)) {
10258 			netdev_notice(tp->dev, "TSO capability restored\n");
10259 			tg3_flag_set(tp, TSO_CAPABLE);
10260 		}
10261 	}
10262 
10263 	netif_carrier_off(tp->dev);
10264 
10265 	err = tg3_power_up(tp);
10266 	if (err)
10267 		return err;
10268 
10269 	tg3_full_lock(tp, 0);
10270 
10271 	tg3_disable_ints(tp);
10272 	tg3_flag_clear(tp, INIT_COMPLETE);
10273 
10274 	tg3_full_unlock(tp);
10275 
10276 	/*
10277 	 * Setup interrupts first so we know how
10278 	 * many NAPI resources to allocate
10279 	 */
10280 	tg3_ints_init(tp);
10281 
10282 	tg3_rss_check_indir_tbl(tp);
10283 
10284 	/* The placement of this call is tied
10285 	 * to the setup and use of Host TX descriptors.
10286 	 */
10287 	err = tg3_alloc_consistent(tp);
10288 	if (err)
10289 		goto err_out1;
10290 
10291 	tg3_napi_init(tp);
10292 
10293 	tg3_napi_enable(tp);
10294 
10295 	for (i = 0; i < tp->irq_cnt; i++) {
10296 		struct tg3_napi *tnapi = &tp->napi[i];
10297 		err = tg3_request_irq(tp, i);
10298 		if (err) {
10299 			for (i--; i >= 0; i--) {
10300 				tnapi = &tp->napi[i];
10301 				free_irq(tnapi->irq_vec, tnapi);
10302 			}
10303 			goto err_out2;
10304 		}
10305 	}
10306 
10307 	tg3_full_lock(tp, 0);
10308 
10309 	err = tg3_init_hw(tp, 1);
10310 	if (err) {
10311 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10312 		tg3_free_rings(tp);
10313 	}
10314 
10315 	tg3_full_unlock(tp);
10316 
10317 	if (err)
10318 		goto err_out3;
10319 
10320 	if (tg3_flag(tp, USING_MSI)) {
10321 		err = tg3_test_msi(tp);
10322 
10323 		if (err) {
10324 			tg3_full_lock(tp, 0);
10325 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10326 			tg3_free_rings(tp);
10327 			tg3_full_unlock(tp);
10328 
10329 			goto err_out2;
10330 		}
10331 
10332 		if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
10333 			u32 val = tr32(PCIE_TRANSACTION_CFG);
10334 
10335 			tw32(PCIE_TRANSACTION_CFG,
10336 			     val | PCIE_TRANS_CFG_1SHOT_MSI);
10337 		}
10338 	}
10339 
10340 	tg3_phy_start(tp);
10341 
10342 	tg3_hwmon_open(tp);
10343 
10344 	tg3_full_lock(tp, 0);
10345 
10346 	tg3_timer_start(tp);
10347 	tg3_flag_set(tp, INIT_COMPLETE);
10348 	tg3_enable_ints(tp);
10349 
10350 	tg3_full_unlock(tp);
10351 
10352 	netif_tx_start_all_queues(dev);
10353 
10354 	/*
10355 	 * Reset loopback feature if it was turned on while the device was down
10356 	 * make sure that it's installed properly now.
10357 	 */
10358 	if (dev->features & NETIF_F_LOOPBACK)
10359 		tg3_set_loopback(dev, dev->features);
10360 
10361 	return 0;
10362 
10363 err_out3:
10364 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10365 		struct tg3_napi *tnapi = &tp->napi[i];
10366 		free_irq(tnapi->irq_vec, tnapi);
10367 	}
10368 
10369 err_out2:
10370 	tg3_napi_disable(tp);
10371 	tg3_napi_fini(tp);
10372 	tg3_free_consistent(tp);
10373 
10374 err_out1:
10375 	tg3_ints_fini(tp);
10376 	tg3_frob_aux_power(tp, false);
10377 	pci_set_power_state(tp->pdev, PCI_D3hot);
10378 	return err;
10379 }
10380 
10381 static int tg3_close(struct net_device *dev)
10382 {
10383 	int i;
10384 	struct tg3 *tp = netdev_priv(dev);
10385 
10386 	tg3_napi_disable(tp);
10387 	tg3_reset_task_cancel(tp);
10388 
10389 	netif_tx_stop_all_queues(dev);
10390 
10391 	tg3_timer_stop(tp);
10392 
10393 	tg3_hwmon_close(tp);
10394 
10395 	tg3_phy_stop(tp);
10396 
10397 	tg3_full_lock(tp, 1);
10398 
10399 	tg3_disable_ints(tp);
10400 
10401 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10402 	tg3_free_rings(tp);
10403 	tg3_flag_clear(tp, INIT_COMPLETE);
10404 
10405 	tg3_full_unlock(tp);
10406 
10407 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10408 		struct tg3_napi *tnapi = &tp->napi[i];
10409 		free_irq(tnapi->irq_vec, tnapi);
10410 	}
10411 
10412 	tg3_ints_fini(tp);
10413 
10414 	/* Clear stats across close / open calls */
10415 	memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
10416 	memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));
10417 
10418 	tg3_napi_fini(tp);
10419 
10420 	tg3_free_consistent(tp);
10421 
10422 	tg3_power_down(tp);
10423 
10424 	netif_carrier_off(tp->dev);
10425 
10426 	return 0;
10427 }
10428 
10429 static inline u64 get_stat64(tg3_stat64_t *val)
10430 {
10431        return ((u64)val->high << 32) | ((u64)val->low);
10432 }
10433 
10434 static u64 tg3_calc_crc_errors(struct tg3 *tp)
10435 {
10436 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10437 
10438 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10439 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10440 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
10441 		u32 val;
10442 
10443 		if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
10444 			tg3_writephy(tp, MII_TG3_TEST1,
10445 				     val | MII_TG3_TEST1_CRC_EN);
10446 			tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
10447 		} else
10448 			val = 0;
10449 
10450 		tp->phy_crc_errors += val;
10451 
10452 		return tp->phy_crc_errors;
10453 	}
10454 
10455 	return get_stat64(&hw_stats->rx_fcs_errors);
10456 }
10457 
10458 #define ESTAT_ADD(member) \
10459 	estats->member =	old_estats->member + \
10460 				get_stat64(&hw_stats->member)
10461 
10462 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
10463 {
10464 	struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
10465 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10466 
10467 	ESTAT_ADD(rx_octets);
10468 	ESTAT_ADD(rx_fragments);
10469 	ESTAT_ADD(rx_ucast_packets);
10470 	ESTAT_ADD(rx_mcast_packets);
10471 	ESTAT_ADD(rx_bcast_packets);
10472 	ESTAT_ADD(rx_fcs_errors);
10473 	ESTAT_ADD(rx_align_errors);
10474 	ESTAT_ADD(rx_xon_pause_rcvd);
10475 	ESTAT_ADD(rx_xoff_pause_rcvd);
10476 	ESTAT_ADD(rx_mac_ctrl_rcvd);
10477 	ESTAT_ADD(rx_xoff_entered);
10478 	ESTAT_ADD(rx_frame_too_long_errors);
10479 	ESTAT_ADD(rx_jabbers);
10480 	ESTAT_ADD(rx_undersize_packets);
10481 	ESTAT_ADD(rx_in_length_errors);
10482 	ESTAT_ADD(rx_out_length_errors);
10483 	ESTAT_ADD(rx_64_or_less_octet_packets);
10484 	ESTAT_ADD(rx_65_to_127_octet_packets);
10485 	ESTAT_ADD(rx_128_to_255_octet_packets);
10486 	ESTAT_ADD(rx_256_to_511_octet_packets);
10487 	ESTAT_ADD(rx_512_to_1023_octet_packets);
10488 	ESTAT_ADD(rx_1024_to_1522_octet_packets);
10489 	ESTAT_ADD(rx_1523_to_2047_octet_packets);
10490 	ESTAT_ADD(rx_2048_to_4095_octet_packets);
10491 	ESTAT_ADD(rx_4096_to_8191_octet_packets);
10492 	ESTAT_ADD(rx_8192_to_9022_octet_packets);
10493 
10494 	ESTAT_ADD(tx_octets);
10495 	ESTAT_ADD(tx_collisions);
10496 	ESTAT_ADD(tx_xon_sent);
10497 	ESTAT_ADD(tx_xoff_sent);
10498 	ESTAT_ADD(tx_flow_control);
10499 	ESTAT_ADD(tx_mac_errors);
10500 	ESTAT_ADD(tx_single_collisions);
10501 	ESTAT_ADD(tx_mult_collisions);
10502 	ESTAT_ADD(tx_deferred);
10503 	ESTAT_ADD(tx_excessive_collisions);
10504 	ESTAT_ADD(tx_late_collisions);
10505 	ESTAT_ADD(tx_collide_2times);
10506 	ESTAT_ADD(tx_collide_3times);
10507 	ESTAT_ADD(tx_collide_4times);
10508 	ESTAT_ADD(tx_collide_5times);
10509 	ESTAT_ADD(tx_collide_6times);
10510 	ESTAT_ADD(tx_collide_7times);
10511 	ESTAT_ADD(tx_collide_8times);
10512 	ESTAT_ADD(tx_collide_9times);
10513 	ESTAT_ADD(tx_collide_10times);
10514 	ESTAT_ADD(tx_collide_11times);
10515 	ESTAT_ADD(tx_collide_12times);
10516 	ESTAT_ADD(tx_collide_13times);
10517 	ESTAT_ADD(tx_collide_14times);
10518 	ESTAT_ADD(tx_collide_15times);
10519 	ESTAT_ADD(tx_ucast_packets);
10520 	ESTAT_ADD(tx_mcast_packets);
10521 	ESTAT_ADD(tx_bcast_packets);
10522 	ESTAT_ADD(tx_carrier_sense_errors);
10523 	ESTAT_ADD(tx_discards);
10524 	ESTAT_ADD(tx_errors);
10525 
10526 	ESTAT_ADD(dma_writeq_full);
10527 	ESTAT_ADD(dma_write_prioq_full);
10528 	ESTAT_ADD(rxbds_empty);
10529 	ESTAT_ADD(rx_discards);
10530 	ESTAT_ADD(rx_errors);
10531 	ESTAT_ADD(rx_threshold_hit);
10532 
10533 	ESTAT_ADD(dma_readq_full);
10534 	ESTAT_ADD(dma_read_prioq_full);
10535 	ESTAT_ADD(tx_comp_queue_full);
10536 
10537 	ESTAT_ADD(ring_set_send_prod_index);
10538 	ESTAT_ADD(ring_status_update);
10539 	ESTAT_ADD(nic_irqs);
10540 	ESTAT_ADD(nic_avoided_irqs);
10541 	ESTAT_ADD(nic_tx_threshold_hit);
10542 
10543 	ESTAT_ADD(mbuf_lwm_thresh_hit);
10544 }
10545 
10546 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
10547 {
10548 	struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
10549 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10550 
10551 	stats->rx_packets = old_stats->rx_packets +
10552 		get_stat64(&hw_stats->rx_ucast_packets) +
10553 		get_stat64(&hw_stats->rx_mcast_packets) +
10554 		get_stat64(&hw_stats->rx_bcast_packets);
10555 
10556 	stats->tx_packets = old_stats->tx_packets +
10557 		get_stat64(&hw_stats->tx_ucast_packets) +
10558 		get_stat64(&hw_stats->tx_mcast_packets) +
10559 		get_stat64(&hw_stats->tx_bcast_packets);
10560 
10561 	stats->rx_bytes = old_stats->rx_bytes +
10562 		get_stat64(&hw_stats->rx_octets);
10563 	stats->tx_bytes = old_stats->tx_bytes +
10564 		get_stat64(&hw_stats->tx_octets);
10565 
10566 	stats->rx_errors = old_stats->rx_errors +
10567 		get_stat64(&hw_stats->rx_errors);
10568 	stats->tx_errors = old_stats->tx_errors +
10569 		get_stat64(&hw_stats->tx_errors) +
10570 		get_stat64(&hw_stats->tx_mac_errors) +
10571 		get_stat64(&hw_stats->tx_carrier_sense_errors) +
10572 		get_stat64(&hw_stats->tx_discards);
10573 
10574 	stats->multicast = old_stats->multicast +
10575 		get_stat64(&hw_stats->rx_mcast_packets);
10576 	stats->collisions = old_stats->collisions +
10577 		get_stat64(&hw_stats->tx_collisions);
10578 
10579 	stats->rx_length_errors = old_stats->rx_length_errors +
10580 		get_stat64(&hw_stats->rx_frame_too_long_errors) +
10581 		get_stat64(&hw_stats->rx_undersize_packets);
10582 
10583 	stats->rx_over_errors = old_stats->rx_over_errors +
10584 		get_stat64(&hw_stats->rxbds_empty);
10585 	stats->rx_frame_errors = old_stats->rx_frame_errors +
10586 		get_stat64(&hw_stats->rx_align_errors);
10587 	stats->tx_aborted_errors = old_stats->tx_aborted_errors +
10588 		get_stat64(&hw_stats->tx_discards);
10589 	stats->tx_carrier_errors = old_stats->tx_carrier_errors +
10590 		get_stat64(&hw_stats->tx_carrier_sense_errors);
10591 
10592 	stats->rx_crc_errors = old_stats->rx_crc_errors +
10593 		tg3_calc_crc_errors(tp);
10594 
10595 	stats->rx_missed_errors = old_stats->rx_missed_errors +
10596 		get_stat64(&hw_stats->rx_discards);
10597 
10598 	stats->rx_dropped = tp->rx_dropped;
10599 	stats->tx_dropped = tp->tx_dropped;
10600 }
10601 
10602 static int tg3_get_regs_len(struct net_device *dev)
10603 {
10604 	return TG3_REG_BLK_SIZE;
10605 }
10606 
10607 static void tg3_get_regs(struct net_device *dev,
10608 		struct ethtool_regs *regs, void *_p)
10609 {
10610 	struct tg3 *tp = netdev_priv(dev);
10611 
10612 	regs->version = 0;
10613 
10614 	memset(_p, 0, TG3_REG_BLK_SIZE);
10615 
10616 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10617 		return;
10618 
10619 	tg3_full_lock(tp, 0);
10620 
10621 	tg3_dump_legacy_regs(tp, (u32 *)_p);
10622 
10623 	tg3_full_unlock(tp);
10624 }
10625 
10626 static int tg3_get_eeprom_len(struct net_device *dev)
10627 {
10628 	struct tg3 *tp = netdev_priv(dev);
10629 
10630 	return tp->nvram_size;
10631 }
10632 
10633 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10634 {
10635 	struct tg3 *tp = netdev_priv(dev);
10636 	int ret;
10637 	u8  *pd;
10638 	u32 i, offset, len, b_offset, b_count;
10639 	__be32 val;
10640 
10641 	if (tg3_flag(tp, NO_NVRAM))
10642 		return -EINVAL;
10643 
10644 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10645 		return -EAGAIN;
10646 
10647 	offset = eeprom->offset;
10648 	len = eeprom->len;
10649 	eeprom->len = 0;
10650 
10651 	eeprom->magic = TG3_EEPROM_MAGIC;
10652 
10653 	if (offset & 3) {
10654 		/* adjustments to start on required 4 byte boundary */
10655 		b_offset = offset & 3;
10656 		b_count = 4 - b_offset;
10657 		if (b_count > len) {
10658 			/* i.e. offset=1 len=2 */
10659 			b_count = len;
10660 		}
10661 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
10662 		if (ret)
10663 			return ret;
10664 		memcpy(data, ((char *)&val) + b_offset, b_count);
10665 		len -= b_count;
10666 		offset += b_count;
10667 		eeprom->len += b_count;
10668 	}
10669 
10670 	/* read bytes up to the last 4 byte boundary */
10671 	pd = &data[eeprom->len];
10672 	for (i = 0; i < (len - (len & 3)); i += 4) {
10673 		ret = tg3_nvram_read_be32(tp, offset + i, &val);
10674 		if (ret) {
10675 			eeprom->len += i;
10676 			return ret;
10677 		}
10678 		memcpy(pd + i, &val, 4);
10679 	}
10680 	eeprom->len += i;
10681 
10682 	if (len & 3) {
10683 		/* read last bytes not ending on 4 byte boundary */
10684 		pd = &data[eeprom->len];
10685 		b_count = len & 3;
10686 		b_offset = offset + len - b_count;
10687 		ret = tg3_nvram_read_be32(tp, b_offset, &val);
10688 		if (ret)
10689 			return ret;
10690 		memcpy(pd, &val, b_count);
10691 		eeprom->len += b_count;
10692 	}
10693 	return 0;
10694 }
10695 
10696 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10697 {
10698 	struct tg3 *tp = netdev_priv(dev);
10699 	int ret;
10700 	u32 offset, len, b_offset, odd_len;
10701 	u8 *buf;
10702 	__be32 start, end;
10703 
10704 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10705 		return -EAGAIN;
10706 
10707 	if (tg3_flag(tp, NO_NVRAM) ||
10708 	    eeprom->magic != TG3_EEPROM_MAGIC)
10709 		return -EINVAL;
10710 
10711 	offset = eeprom->offset;
10712 	len = eeprom->len;
10713 
10714 	if ((b_offset = (offset & 3))) {
10715 		/* adjustments to start on required 4 byte boundary */
10716 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
10717 		if (ret)
10718 			return ret;
10719 		len += b_offset;
10720 		offset &= ~3;
10721 		if (len < 4)
10722 			len = 4;
10723 	}
10724 
10725 	odd_len = 0;
10726 	if (len & 3) {
10727 		/* adjustments to end on required 4 byte boundary */
10728 		odd_len = 1;
10729 		len = (len + 3) & ~3;
10730 		ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
10731 		if (ret)
10732 			return ret;
10733 	}
10734 
10735 	buf = data;
10736 	if (b_offset || odd_len) {
10737 		buf = kmalloc(len, GFP_KERNEL);
10738 		if (!buf)
10739 			return -ENOMEM;
10740 		if (b_offset)
10741 			memcpy(buf, &start, 4);
10742 		if (odd_len)
10743 			memcpy(buf+len-4, &end, 4);
10744 		memcpy(buf + b_offset, data, eeprom->len);
10745 	}
10746 
10747 	ret = tg3_nvram_write_block(tp, offset, len, buf);
10748 
10749 	if (buf != data)
10750 		kfree(buf);
10751 
10752 	return ret;
10753 }
10754 
10755 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10756 {
10757 	struct tg3 *tp = netdev_priv(dev);
10758 
10759 	if (tg3_flag(tp, USE_PHYLIB)) {
10760 		struct phy_device *phydev;
10761 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10762 			return -EAGAIN;
10763 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10764 		return phy_ethtool_gset(phydev, cmd);
10765 	}
10766 
10767 	cmd->supported = (SUPPORTED_Autoneg);
10768 
10769 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10770 		cmd->supported |= (SUPPORTED_1000baseT_Half |
10771 				   SUPPORTED_1000baseT_Full);
10772 
10773 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10774 		cmd->supported |= (SUPPORTED_100baseT_Half |
10775 				  SUPPORTED_100baseT_Full |
10776 				  SUPPORTED_10baseT_Half |
10777 				  SUPPORTED_10baseT_Full |
10778 				  SUPPORTED_TP);
10779 		cmd->port = PORT_TP;
10780 	} else {
10781 		cmd->supported |= SUPPORTED_FIBRE;
10782 		cmd->port = PORT_FIBRE;
10783 	}
10784 
10785 	cmd->advertising = tp->link_config.advertising;
10786 	if (tg3_flag(tp, PAUSE_AUTONEG)) {
10787 		if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
10788 			if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10789 				cmd->advertising |= ADVERTISED_Pause;
10790 			} else {
10791 				cmd->advertising |= ADVERTISED_Pause |
10792 						    ADVERTISED_Asym_Pause;
10793 			}
10794 		} else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10795 			cmd->advertising |= ADVERTISED_Asym_Pause;
10796 		}
10797 	}
10798 	if (netif_running(dev) && netif_carrier_ok(dev)) {
10799 		ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
10800 		cmd->duplex = tp->link_config.active_duplex;
10801 		cmd->lp_advertising = tp->link_config.rmt_adv;
10802 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10803 			if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
10804 				cmd->eth_tp_mdix = ETH_TP_MDI_X;
10805 			else
10806 				cmd->eth_tp_mdix = ETH_TP_MDI;
10807 		}
10808 	} else {
10809 		ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
10810 		cmd->duplex = DUPLEX_UNKNOWN;
10811 		cmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
10812 	}
10813 	cmd->phy_address = tp->phy_addr;
10814 	cmd->transceiver = XCVR_INTERNAL;
10815 	cmd->autoneg = tp->link_config.autoneg;
10816 	cmd->maxtxpkt = 0;
10817 	cmd->maxrxpkt = 0;
10818 	return 0;
10819 }
10820 
10821 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10822 {
10823 	struct tg3 *tp = netdev_priv(dev);
10824 	u32 speed = ethtool_cmd_speed(cmd);
10825 
10826 	if (tg3_flag(tp, USE_PHYLIB)) {
10827 		struct phy_device *phydev;
10828 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10829 			return -EAGAIN;
10830 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10831 		return phy_ethtool_sset(phydev, cmd);
10832 	}
10833 
10834 	if (cmd->autoneg != AUTONEG_ENABLE &&
10835 	    cmd->autoneg != AUTONEG_DISABLE)
10836 		return -EINVAL;
10837 
10838 	if (cmd->autoneg == AUTONEG_DISABLE &&
10839 	    cmd->duplex != DUPLEX_FULL &&
10840 	    cmd->duplex != DUPLEX_HALF)
10841 		return -EINVAL;
10842 
10843 	if (cmd->autoneg == AUTONEG_ENABLE) {
10844 		u32 mask = ADVERTISED_Autoneg |
10845 			   ADVERTISED_Pause |
10846 			   ADVERTISED_Asym_Pause;
10847 
10848 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10849 			mask |= ADVERTISED_1000baseT_Half |
10850 				ADVERTISED_1000baseT_Full;
10851 
10852 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
10853 			mask |= ADVERTISED_100baseT_Half |
10854 				ADVERTISED_100baseT_Full |
10855 				ADVERTISED_10baseT_Half |
10856 				ADVERTISED_10baseT_Full |
10857 				ADVERTISED_TP;
10858 		else
10859 			mask |= ADVERTISED_FIBRE;
10860 
10861 		if (cmd->advertising & ~mask)
10862 			return -EINVAL;
10863 
10864 		mask &= (ADVERTISED_1000baseT_Half |
10865 			 ADVERTISED_1000baseT_Full |
10866 			 ADVERTISED_100baseT_Half |
10867 			 ADVERTISED_100baseT_Full |
10868 			 ADVERTISED_10baseT_Half |
10869 			 ADVERTISED_10baseT_Full);
10870 
10871 		cmd->advertising &= mask;
10872 	} else {
10873 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
10874 			if (speed != SPEED_1000)
10875 				return -EINVAL;
10876 
10877 			if (cmd->duplex != DUPLEX_FULL)
10878 				return -EINVAL;
10879 		} else {
10880 			if (speed != SPEED_100 &&
10881 			    speed != SPEED_10)
10882 				return -EINVAL;
10883 		}
10884 	}
10885 
10886 	tg3_full_lock(tp, 0);
10887 
10888 	tp->link_config.autoneg = cmd->autoneg;
10889 	if (cmd->autoneg == AUTONEG_ENABLE) {
10890 		tp->link_config.advertising = (cmd->advertising |
10891 					      ADVERTISED_Autoneg);
10892 		tp->link_config.speed = SPEED_UNKNOWN;
10893 		tp->link_config.duplex = DUPLEX_UNKNOWN;
10894 	} else {
10895 		tp->link_config.advertising = 0;
10896 		tp->link_config.speed = speed;
10897 		tp->link_config.duplex = cmd->duplex;
10898 	}
10899 
10900 	if (netif_running(dev))
10901 		tg3_setup_phy(tp, 1);
10902 
10903 	tg3_full_unlock(tp);
10904 
10905 	return 0;
10906 }
10907 
10908 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
10909 {
10910 	struct tg3 *tp = netdev_priv(dev);
10911 
10912 	strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
10913 	strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
10914 	strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
10915 	strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
10916 }
10917 
10918 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
10919 {
10920 	struct tg3 *tp = netdev_priv(dev);
10921 
10922 	if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
10923 		wol->supported = WAKE_MAGIC;
10924 	else
10925 		wol->supported = 0;
10926 	wol->wolopts = 0;
10927 	if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
10928 		wol->wolopts = WAKE_MAGIC;
10929 	memset(&wol->sopass, 0, sizeof(wol->sopass));
10930 }
10931 
10932 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
10933 {
10934 	struct tg3 *tp = netdev_priv(dev);
10935 	struct device *dp = &tp->pdev->dev;
10936 
10937 	if (wol->wolopts & ~WAKE_MAGIC)
10938 		return -EINVAL;
10939 	if ((wol->wolopts & WAKE_MAGIC) &&
10940 	    !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
10941 		return -EINVAL;
10942 
10943 	device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
10944 
10945 	spin_lock_bh(&tp->lock);
10946 	if (device_may_wakeup(dp))
10947 		tg3_flag_set(tp, WOL_ENABLE);
10948 	else
10949 		tg3_flag_clear(tp, WOL_ENABLE);
10950 	spin_unlock_bh(&tp->lock);
10951 
10952 	return 0;
10953 }
10954 
10955 static u32 tg3_get_msglevel(struct net_device *dev)
10956 {
10957 	struct tg3 *tp = netdev_priv(dev);
10958 	return tp->msg_enable;
10959 }
10960 
10961 static void tg3_set_msglevel(struct net_device *dev, u32 value)
10962 {
10963 	struct tg3 *tp = netdev_priv(dev);
10964 	tp->msg_enable = value;
10965 }
10966 
10967 static int tg3_nway_reset(struct net_device *dev)
10968 {
10969 	struct tg3 *tp = netdev_priv(dev);
10970 	int r;
10971 
10972 	if (!netif_running(dev))
10973 		return -EAGAIN;
10974 
10975 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
10976 		return -EINVAL;
10977 
10978 	if (tg3_flag(tp, USE_PHYLIB)) {
10979 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10980 			return -EAGAIN;
10981 		r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
10982 	} else {
10983 		u32 bmcr;
10984 
10985 		spin_lock_bh(&tp->lock);
10986 		r = -EINVAL;
10987 		tg3_readphy(tp, MII_BMCR, &bmcr);
10988 		if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
10989 		    ((bmcr & BMCR_ANENABLE) ||
10990 		     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
10991 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
10992 						   BMCR_ANENABLE);
10993 			r = 0;
10994 		}
10995 		spin_unlock_bh(&tp->lock);
10996 	}
10997 
10998 	return r;
10999 }
11000 
11001 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11002 {
11003 	struct tg3 *tp = netdev_priv(dev);
11004 
11005 	ering->rx_max_pending = tp->rx_std_ring_mask;
11006 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
11007 		ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
11008 	else
11009 		ering->rx_jumbo_max_pending = 0;
11010 
11011 	ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
11012 
11013 	ering->rx_pending = tp->rx_pending;
11014 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
11015 		ering->rx_jumbo_pending = tp->rx_jumbo_pending;
11016 	else
11017 		ering->rx_jumbo_pending = 0;
11018 
11019 	ering->tx_pending = tp->napi[0].tx_pending;
11020 }
11021 
11022 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11023 {
11024 	struct tg3 *tp = netdev_priv(dev);
11025 	int i, irq_sync = 0, err = 0;
11026 
11027 	if ((ering->rx_pending > tp->rx_std_ring_mask) ||
11028 	    (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
11029 	    (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
11030 	    (ering->tx_pending <= MAX_SKB_FRAGS) ||
11031 	    (tg3_flag(tp, TSO_BUG) &&
11032 	     (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
11033 		return -EINVAL;
11034 
11035 	if (netif_running(dev)) {
11036 		tg3_phy_stop(tp);
11037 		tg3_netif_stop(tp);
11038 		irq_sync = 1;
11039 	}
11040 
11041 	tg3_full_lock(tp, irq_sync);
11042 
11043 	tp->rx_pending = ering->rx_pending;
11044 
11045 	if (tg3_flag(tp, MAX_RXPEND_64) &&
11046 	    tp->rx_pending > 63)
11047 		tp->rx_pending = 63;
11048 	tp->rx_jumbo_pending = ering->rx_jumbo_pending;
11049 
11050 	for (i = 0; i < tp->irq_max; i++)
11051 		tp->napi[i].tx_pending = ering->tx_pending;
11052 
11053 	if (netif_running(dev)) {
11054 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11055 		err = tg3_restart_hw(tp, 1);
11056 		if (!err)
11057 			tg3_netif_start(tp);
11058 	}
11059 
11060 	tg3_full_unlock(tp);
11061 
11062 	if (irq_sync && !err)
11063 		tg3_phy_start(tp);
11064 
11065 	return err;
11066 }
11067 
11068 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11069 {
11070 	struct tg3 *tp = netdev_priv(dev);
11071 
11072 	epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
11073 
11074 	if (tp->link_config.flowctrl & FLOW_CTRL_RX)
11075 		epause->rx_pause = 1;
11076 	else
11077 		epause->rx_pause = 0;
11078 
11079 	if (tp->link_config.flowctrl & FLOW_CTRL_TX)
11080 		epause->tx_pause = 1;
11081 	else
11082 		epause->tx_pause = 0;
11083 }
11084 
11085 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11086 {
11087 	struct tg3 *tp = netdev_priv(dev);
11088 	int err = 0;
11089 
11090 	if (tg3_flag(tp, USE_PHYLIB)) {
11091 		u32 newadv;
11092 		struct phy_device *phydev;
11093 
11094 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
11095 
11096 		if (!(phydev->supported & SUPPORTED_Pause) ||
11097 		    (!(phydev->supported & SUPPORTED_Asym_Pause) &&
11098 		     (epause->rx_pause != epause->tx_pause)))
11099 			return -EINVAL;
11100 
11101 		tp->link_config.flowctrl = 0;
11102 		if (epause->rx_pause) {
11103 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
11104 
11105 			if (epause->tx_pause) {
11106 				tp->link_config.flowctrl |= FLOW_CTRL_TX;
11107 				newadv = ADVERTISED_Pause;
11108 			} else
11109 				newadv = ADVERTISED_Pause |
11110 					 ADVERTISED_Asym_Pause;
11111 		} else if (epause->tx_pause) {
11112 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
11113 			newadv = ADVERTISED_Asym_Pause;
11114 		} else
11115 			newadv = 0;
11116 
11117 		if (epause->autoneg)
11118 			tg3_flag_set(tp, PAUSE_AUTONEG);
11119 		else
11120 			tg3_flag_clear(tp, PAUSE_AUTONEG);
11121 
11122 		if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
11123 			u32 oldadv = phydev->advertising &
11124 				     (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
11125 			if (oldadv != newadv) {
11126 				phydev->advertising &=
11127 					~(ADVERTISED_Pause |
11128 					  ADVERTISED_Asym_Pause);
11129 				phydev->advertising |= newadv;
11130 				if (phydev->autoneg) {
11131 					/*
11132 					 * Always renegotiate the link to
11133 					 * inform our link partner of our
11134 					 * flow control settings, even if the
11135 					 * flow control is forced.  Let
11136 					 * tg3_adjust_link() do the final
11137 					 * flow control setup.
11138 					 */
11139 					return phy_start_aneg(phydev);
11140 				}
11141 			}
11142 
11143 			if (!epause->autoneg)
11144 				tg3_setup_flow_control(tp, 0, 0);
11145 		} else {
11146 			tp->link_config.advertising &=
11147 					~(ADVERTISED_Pause |
11148 					  ADVERTISED_Asym_Pause);
11149 			tp->link_config.advertising |= newadv;
11150 		}
11151 	} else {
11152 		int irq_sync = 0;
11153 
11154 		if (netif_running(dev)) {
11155 			tg3_netif_stop(tp);
11156 			irq_sync = 1;
11157 		}
11158 
11159 		tg3_full_lock(tp, irq_sync);
11160 
11161 		if (epause->autoneg)
11162 			tg3_flag_set(tp, PAUSE_AUTONEG);
11163 		else
11164 			tg3_flag_clear(tp, PAUSE_AUTONEG);
11165 		if (epause->rx_pause)
11166 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
11167 		else
11168 			tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
11169 		if (epause->tx_pause)
11170 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
11171 		else
11172 			tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
11173 
11174 		if (netif_running(dev)) {
11175 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11176 			err = tg3_restart_hw(tp, 1);
11177 			if (!err)
11178 				tg3_netif_start(tp);
11179 		}
11180 
11181 		tg3_full_unlock(tp);
11182 	}
11183 
11184 	return err;
11185 }
11186 
11187 static int tg3_get_sset_count(struct net_device *dev, int sset)
11188 {
11189 	switch (sset) {
11190 	case ETH_SS_TEST:
11191 		return TG3_NUM_TEST;
11192 	case ETH_SS_STATS:
11193 		return TG3_NUM_STATS;
11194 	default:
11195 		return -EOPNOTSUPP;
11196 	}
11197 }
11198 
11199 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
11200 			 u32 *rules __always_unused)
11201 {
11202 	struct tg3 *tp = netdev_priv(dev);
11203 
11204 	if (!tg3_flag(tp, SUPPORT_MSIX))
11205 		return -EOPNOTSUPP;
11206 
11207 	switch (info->cmd) {
11208 	case ETHTOOL_GRXRINGS:
11209 		if (netif_running(tp->dev))
11210 			info->data = tp->irq_cnt;
11211 		else {
11212 			info->data = num_online_cpus();
11213 			if (info->data > TG3_IRQ_MAX_VECS_RSS)
11214 				info->data = TG3_IRQ_MAX_VECS_RSS;
11215 		}
11216 
11217 		/* The first interrupt vector only
11218 		 * handles link interrupts.
11219 		 */
11220 		info->data -= 1;
11221 		return 0;
11222 
11223 	default:
11224 		return -EOPNOTSUPP;
11225 	}
11226 }
11227 
11228 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
11229 {
11230 	u32 size = 0;
11231 	struct tg3 *tp = netdev_priv(dev);
11232 
11233 	if (tg3_flag(tp, SUPPORT_MSIX))
11234 		size = TG3_RSS_INDIR_TBL_SIZE;
11235 
11236 	return size;
11237 }
11238 
11239 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir)
11240 {
11241 	struct tg3 *tp = netdev_priv(dev);
11242 	int i;
11243 
11244 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11245 		indir[i] = tp->rss_ind_tbl[i];
11246 
11247 	return 0;
11248 }
11249 
11250 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir)
11251 {
11252 	struct tg3 *tp = netdev_priv(dev);
11253 	size_t i;
11254 
11255 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11256 		tp->rss_ind_tbl[i] = indir[i];
11257 
11258 	if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
11259 		return 0;
11260 
11261 	/* It is legal to write the indirection
11262 	 * table while the device is running.
11263 	 */
11264 	tg3_full_lock(tp, 0);
11265 	tg3_rss_write_indir_tbl(tp);
11266 	tg3_full_unlock(tp);
11267 
11268 	return 0;
11269 }
11270 
11271 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
11272 {
11273 	switch (stringset) {
11274 	case ETH_SS_STATS:
11275 		memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
11276 		break;
11277 	case ETH_SS_TEST:
11278 		memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
11279 		break;
11280 	default:
11281 		WARN_ON(1);	/* we need a WARN() */
11282 		break;
11283 	}
11284 }
11285 
11286 static int tg3_set_phys_id(struct net_device *dev,
11287 			    enum ethtool_phys_id_state state)
11288 {
11289 	struct tg3 *tp = netdev_priv(dev);
11290 
11291 	if (!netif_running(tp->dev))
11292 		return -EAGAIN;
11293 
11294 	switch (state) {
11295 	case ETHTOOL_ID_ACTIVE:
11296 		return 1;	/* cycle on/off once per second */
11297 
11298 	case ETHTOOL_ID_ON:
11299 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11300 		     LED_CTRL_1000MBPS_ON |
11301 		     LED_CTRL_100MBPS_ON |
11302 		     LED_CTRL_10MBPS_ON |
11303 		     LED_CTRL_TRAFFIC_OVERRIDE |
11304 		     LED_CTRL_TRAFFIC_BLINK |
11305 		     LED_CTRL_TRAFFIC_LED);
11306 		break;
11307 
11308 	case ETHTOOL_ID_OFF:
11309 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11310 		     LED_CTRL_TRAFFIC_OVERRIDE);
11311 		break;
11312 
11313 	case ETHTOOL_ID_INACTIVE:
11314 		tw32(MAC_LED_CTRL, tp->led_ctrl);
11315 		break;
11316 	}
11317 
11318 	return 0;
11319 }
11320 
11321 static void tg3_get_ethtool_stats(struct net_device *dev,
11322 				   struct ethtool_stats *estats, u64 *tmp_stats)
11323 {
11324 	struct tg3 *tp = netdev_priv(dev);
11325 
11326 	if (tp->hw_stats)
11327 		tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
11328 	else
11329 		memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
11330 }
11331 
11332 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
11333 {
11334 	int i;
11335 	__be32 *buf;
11336 	u32 offset = 0, len = 0;
11337 	u32 magic, val;
11338 
11339 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
11340 		return NULL;
11341 
11342 	if (magic == TG3_EEPROM_MAGIC) {
11343 		for (offset = TG3_NVM_DIR_START;
11344 		     offset < TG3_NVM_DIR_END;
11345 		     offset += TG3_NVM_DIRENT_SIZE) {
11346 			if (tg3_nvram_read(tp, offset, &val))
11347 				return NULL;
11348 
11349 			if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
11350 			    TG3_NVM_DIRTYPE_EXTVPD)
11351 				break;
11352 		}
11353 
11354 		if (offset != TG3_NVM_DIR_END) {
11355 			len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
11356 			if (tg3_nvram_read(tp, offset + 4, &offset))
11357 				return NULL;
11358 
11359 			offset = tg3_nvram_logical_addr(tp, offset);
11360 		}
11361 	}
11362 
11363 	if (!offset || !len) {
11364 		offset = TG3_NVM_VPD_OFF;
11365 		len = TG3_NVM_VPD_LEN;
11366 	}
11367 
11368 	buf = kmalloc(len, GFP_KERNEL);
11369 	if (buf == NULL)
11370 		return NULL;
11371 
11372 	if (magic == TG3_EEPROM_MAGIC) {
11373 		for (i = 0; i < len; i += 4) {
11374 			/* The data is in little-endian format in NVRAM.
11375 			 * Use the big-endian read routines to preserve
11376 			 * the byte order as it exists in NVRAM.
11377 			 */
11378 			if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
11379 				goto error;
11380 		}
11381 	} else {
11382 		u8 *ptr;
11383 		ssize_t cnt;
11384 		unsigned int pos = 0;
11385 
11386 		ptr = (u8 *)&buf[0];
11387 		for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
11388 			cnt = pci_read_vpd(tp->pdev, pos,
11389 					   len - pos, ptr);
11390 			if (cnt == -ETIMEDOUT || cnt == -EINTR)
11391 				cnt = 0;
11392 			else if (cnt < 0)
11393 				goto error;
11394 		}
11395 		if (pos != len)
11396 			goto error;
11397 	}
11398 
11399 	*vpdlen = len;
11400 
11401 	return buf;
11402 
11403 error:
11404 	kfree(buf);
11405 	return NULL;
11406 }
11407 
11408 #define NVRAM_TEST_SIZE 0x100
11409 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE	0x14
11410 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE	0x18
11411 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE	0x1c
11412 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE	0x20
11413 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE	0x24
11414 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE	0x50
11415 #define NVRAM_SELFBOOT_HW_SIZE 0x20
11416 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
11417 
11418 static int tg3_test_nvram(struct tg3 *tp)
11419 {
11420 	u32 csum, magic, len;
11421 	__be32 *buf;
11422 	int i, j, k, err = 0, size;
11423 
11424 	if (tg3_flag(tp, NO_NVRAM))
11425 		return 0;
11426 
11427 	if (tg3_nvram_read(tp, 0, &magic) != 0)
11428 		return -EIO;
11429 
11430 	if (magic == TG3_EEPROM_MAGIC)
11431 		size = NVRAM_TEST_SIZE;
11432 	else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
11433 		if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
11434 		    TG3_EEPROM_SB_FORMAT_1) {
11435 			switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
11436 			case TG3_EEPROM_SB_REVISION_0:
11437 				size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
11438 				break;
11439 			case TG3_EEPROM_SB_REVISION_2:
11440 				size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
11441 				break;
11442 			case TG3_EEPROM_SB_REVISION_3:
11443 				size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
11444 				break;
11445 			case TG3_EEPROM_SB_REVISION_4:
11446 				size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
11447 				break;
11448 			case TG3_EEPROM_SB_REVISION_5:
11449 				size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
11450 				break;
11451 			case TG3_EEPROM_SB_REVISION_6:
11452 				size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
11453 				break;
11454 			default:
11455 				return -EIO;
11456 			}
11457 		} else
11458 			return 0;
11459 	} else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
11460 		size = NVRAM_SELFBOOT_HW_SIZE;
11461 	else
11462 		return -EIO;
11463 
11464 	buf = kmalloc(size, GFP_KERNEL);
11465 	if (buf == NULL)
11466 		return -ENOMEM;
11467 
11468 	err = -EIO;
11469 	for (i = 0, j = 0; i < size; i += 4, j++) {
11470 		err = tg3_nvram_read_be32(tp, i, &buf[j]);
11471 		if (err)
11472 			break;
11473 	}
11474 	if (i < size)
11475 		goto out;
11476 
11477 	/* Selfboot format */
11478 	magic = be32_to_cpu(buf[0]);
11479 	if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
11480 	    TG3_EEPROM_MAGIC_FW) {
11481 		u8 *buf8 = (u8 *) buf, csum8 = 0;
11482 
11483 		if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
11484 		    TG3_EEPROM_SB_REVISION_2) {
11485 			/* For rev 2, the csum doesn't include the MBA. */
11486 			for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
11487 				csum8 += buf8[i];
11488 			for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
11489 				csum8 += buf8[i];
11490 		} else {
11491 			for (i = 0; i < size; i++)
11492 				csum8 += buf8[i];
11493 		}
11494 
11495 		if (csum8 == 0) {
11496 			err = 0;
11497 			goto out;
11498 		}
11499 
11500 		err = -EIO;
11501 		goto out;
11502 	}
11503 
11504 	if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
11505 	    TG3_EEPROM_MAGIC_HW) {
11506 		u8 data[NVRAM_SELFBOOT_DATA_SIZE];
11507 		u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
11508 		u8 *buf8 = (u8 *) buf;
11509 
11510 		/* Separate the parity bits and the data bytes.  */
11511 		for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
11512 			if ((i == 0) || (i == 8)) {
11513 				int l;
11514 				u8 msk;
11515 
11516 				for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
11517 					parity[k++] = buf8[i] & msk;
11518 				i++;
11519 			} else if (i == 16) {
11520 				int l;
11521 				u8 msk;
11522 
11523 				for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
11524 					parity[k++] = buf8[i] & msk;
11525 				i++;
11526 
11527 				for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
11528 					parity[k++] = buf8[i] & msk;
11529 				i++;
11530 			}
11531 			data[j++] = buf8[i];
11532 		}
11533 
11534 		err = -EIO;
11535 		for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
11536 			u8 hw8 = hweight8(data[i]);
11537 
11538 			if ((hw8 & 0x1) && parity[i])
11539 				goto out;
11540 			else if (!(hw8 & 0x1) && !parity[i])
11541 				goto out;
11542 		}
11543 		err = 0;
11544 		goto out;
11545 	}
11546 
11547 	err = -EIO;
11548 
11549 	/* Bootstrap checksum at offset 0x10 */
11550 	csum = calc_crc((unsigned char *) buf, 0x10);
11551 	if (csum != le32_to_cpu(buf[0x10/4]))
11552 		goto out;
11553 
11554 	/* Manufacturing block starts at offset 0x74, checksum at 0xfc */
11555 	csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
11556 	if (csum != le32_to_cpu(buf[0xfc/4]))
11557 		goto out;
11558 
11559 	kfree(buf);
11560 
11561 	buf = tg3_vpd_readblock(tp, &len);
11562 	if (!buf)
11563 		return -ENOMEM;
11564 
11565 	i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
11566 	if (i > 0) {
11567 		j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
11568 		if (j < 0)
11569 			goto out;
11570 
11571 		if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
11572 			goto out;
11573 
11574 		i += PCI_VPD_LRDT_TAG_SIZE;
11575 		j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
11576 					      PCI_VPD_RO_KEYWORD_CHKSUM);
11577 		if (j > 0) {
11578 			u8 csum8 = 0;
11579 
11580 			j += PCI_VPD_INFO_FLD_HDR_SIZE;
11581 
11582 			for (i = 0; i <= j; i++)
11583 				csum8 += ((u8 *)buf)[i];
11584 
11585 			if (csum8)
11586 				goto out;
11587 		}
11588 	}
11589 
11590 	err = 0;
11591 
11592 out:
11593 	kfree(buf);
11594 	return err;
11595 }
11596 
11597 #define TG3_SERDES_TIMEOUT_SEC	2
11598 #define TG3_COPPER_TIMEOUT_SEC	6
11599 
11600 static int tg3_test_link(struct tg3 *tp)
11601 {
11602 	int i, max;
11603 
11604 	if (!netif_running(tp->dev))
11605 		return -ENODEV;
11606 
11607 	if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
11608 		max = TG3_SERDES_TIMEOUT_SEC;
11609 	else
11610 		max = TG3_COPPER_TIMEOUT_SEC;
11611 
11612 	for (i = 0; i < max; i++) {
11613 		if (netif_carrier_ok(tp->dev))
11614 			return 0;
11615 
11616 		if (msleep_interruptible(1000))
11617 			break;
11618 	}
11619 
11620 	return -EIO;
11621 }
11622 
11623 /* Only test the commonly used registers */
11624 static int tg3_test_registers(struct tg3 *tp)
11625 {
11626 	int i, is_5705, is_5750;
11627 	u32 offset, read_mask, write_mask, val, save_val, read_val;
11628 	static struct {
11629 		u16 offset;
11630 		u16 flags;
11631 #define TG3_FL_5705	0x1
11632 #define TG3_FL_NOT_5705	0x2
11633 #define TG3_FL_NOT_5788	0x4
11634 #define TG3_FL_NOT_5750	0x8
11635 		u32 read_mask;
11636 		u32 write_mask;
11637 	} reg_tbl[] = {
11638 		/* MAC Control Registers */
11639 		{ MAC_MODE, TG3_FL_NOT_5705,
11640 			0x00000000, 0x00ef6f8c },
11641 		{ MAC_MODE, TG3_FL_5705,
11642 			0x00000000, 0x01ef6b8c },
11643 		{ MAC_STATUS, TG3_FL_NOT_5705,
11644 			0x03800107, 0x00000000 },
11645 		{ MAC_STATUS, TG3_FL_5705,
11646 			0x03800100, 0x00000000 },
11647 		{ MAC_ADDR_0_HIGH, 0x0000,
11648 			0x00000000, 0x0000ffff },
11649 		{ MAC_ADDR_0_LOW, 0x0000,
11650 			0x00000000, 0xffffffff },
11651 		{ MAC_RX_MTU_SIZE, 0x0000,
11652 			0x00000000, 0x0000ffff },
11653 		{ MAC_TX_MODE, 0x0000,
11654 			0x00000000, 0x00000070 },
11655 		{ MAC_TX_LENGTHS, 0x0000,
11656 			0x00000000, 0x00003fff },
11657 		{ MAC_RX_MODE, TG3_FL_NOT_5705,
11658 			0x00000000, 0x000007fc },
11659 		{ MAC_RX_MODE, TG3_FL_5705,
11660 			0x00000000, 0x000007dc },
11661 		{ MAC_HASH_REG_0, 0x0000,
11662 			0x00000000, 0xffffffff },
11663 		{ MAC_HASH_REG_1, 0x0000,
11664 			0x00000000, 0xffffffff },
11665 		{ MAC_HASH_REG_2, 0x0000,
11666 			0x00000000, 0xffffffff },
11667 		{ MAC_HASH_REG_3, 0x0000,
11668 			0x00000000, 0xffffffff },
11669 
11670 		/* Receive Data and Receive BD Initiator Control Registers. */
11671 		{ RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
11672 			0x00000000, 0xffffffff },
11673 		{ RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
11674 			0x00000000, 0xffffffff },
11675 		{ RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
11676 			0x00000000, 0x00000003 },
11677 		{ RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
11678 			0x00000000, 0xffffffff },
11679 		{ RCVDBDI_STD_BD+0, 0x0000,
11680 			0x00000000, 0xffffffff },
11681 		{ RCVDBDI_STD_BD+4, 0x0000,
11682 			0x00000000, 0xffffffff },
11683 		{ RCVDBDI_STD_BD+8, 0x0000,
11684 			0x00000000, 0xffff0002 },
11685 		{ RCVDBDI_STD_BD+0xc, 0x0000,
11686 			0x00000000, 0xffffffff },
11687 
11688 		/* Receive BD Initiator Control Registers. */
11689 		{ RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
11690 			0x00000000, 0xffffffff },
11691 		{ RCVBDI_STD_THRESH, TG3_FL_5705,
11692 			0x00000000, 0x000003ff },
11693 		{ RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
11694 			0x00000000, 0xffffffff },
11695 
11696 		/* Host Coalescing Control Registers. */
11697 		{ HOSTCC_MODE, TG3_FL_NOT_5705,
11698 			0x00000000, 0x00000004 },
11699 		{ HOSTCC_MODE, TG3_FL_5705,
11700 			0x00000000, 0x000000f6 },
11701 		{ HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
11702 			0x00000000, 0xffffffff },
11703 		{ HOSTCC_RXCOL_TICKS, TG3_FL_5705,
11704 			0x00000000, 0x000003ff },
11705 		{ HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
11706 			0x00000000, 0xffffffff },
11707 		{ HOSTCC_TXCOL_TICKS, TG3_FL_5705,
11708 			0x00000000, 0x000003ff },
11709 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
11710 			0x00000000, 0xffffffff },
11711 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11712 			0x00000000, 0x000000ff },
11713 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
11714 			0x00000000, 0xffffffff },
11715 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
11716 			0x00000000, 0x000000ff },
11717 		{ HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
11718 			0x00000000, 0xffffffff },
11719 		{ HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
11720 			0x00000000, 0xffffffff },
11721 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11722 			0x00000000, 0xffffffff },
11723 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11724 			0x00000000, 0x000000ff },
11725 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
11726 			0x00000000, 0xffffffff },
11727 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
11728 			0x00000000, 0x000000ff },
11729 		{ HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
11730 			0x00000000, 0xffffffff },
11731 		{ HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
11732 			0x00000000, 0xffffffff },
11733 		{ HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
11734 			0x00000000, 0xffffffff },
11735 		{ HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
11736 			0x00000000, 0xffffffff },
11737 		{ HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
11738 			0x00000000, 0xffffffff },
11739 		{ HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
11740 			0xffffffff, 0x00000000 },
11741 		{ HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
11742 			0xffffffff, 0x00000000 },
11743 
11744 		/* Buffer Manager Control Registers. */
11745 		{ BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
11746 			0x00000000, 0x007fff80 },
11747 		{ BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
11748 			0x00000000, 0x007fffff },
11749 		{ BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
11750 			0x00000000, 0x0000003f },
11751 		{ BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
11752 			0x00000000, 0x000001ff },
11753 		{ BUFMGR_MB_HIGH_WATER, 0x0000,
11754 			0x00000000, 0x000001ff },
11755 		{ BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
11756 			0xffffffff, 0x00000000 },
11757 		{ BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
11758 			0xffffffff, 0x00000000 },
11759 
11760 		/* Mailbox Registers */
11761 		{ GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
11762 			0x00000000, 0x000001ff },
11763 		{ GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
11764 			0x00000000, 0x000001ff },
11765 		{ GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
11766 			0x00000000, 0x000007ff },
11767 		{ GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
11768 			0x00000000, 0x000001ff },
11769 
11770 		{ 0xffff, 0x0000, 0x00000000, 0x00000000 },
11771 	};
11772 
11773 	is_5705 = is_5750 = 0;
11774 	if (tg3_flag(tp, 5705_PLUS)) {
11775 		is_5705 = 1;
11776 		if (tg3_flag(tp, 5750_PLUS))
11777 			is_5750 = 1;
11778 	}
11779 
11780 	for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
11781 		if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
11782 			continue;
11783 
11784 		if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
11785 			continue;
11786 
11787 		if (tg3_flag(tp, IS_5788) &&
11788 		    (reg_tbl[i].flags & TG3_FL_NOT_5788))
11789 			continue;
11790 
11791 		if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
11792 			continue;
11793 
11794 		offset = (u32) reg_tbl[i].offset;
11795 		read_mask = reg_tbl[i].read_mask;
11796 		write_mask = reg_tbl[i].write_mask;
11797 
11798 		/* Save the original register content */
11799 		save_val = tr32(offset);
11800 
11801 		/* Determine the read-only value. */
11802 		read_val = save_val & read_mask;
11803 
11804 		/* Write zero to the register, then make sure the read-only bits
11805 		 * are not changed and the read/write bits are all zeros.
11806 		 */
11807 		tw32(offset, 0);
11808 
11809 		val = tr32(offset);
11810 
11811 		/* Test the read-only and read/write bits. */
11812 		if (((val & read_mask) != read_val) || (val & write_mask))
11813 			goto out;
11814 
11815 		/* Write ones to all the bits defined by RdMask and WrMask, then
11816 		 * make sure the read-only bits are not changed and the
11817 		 * read/write bits are all ones.
11818 		 */
11819 		tw32(offset, read_mask | write_mask);
11820 
11821 		val = tr32(offset);
11822 
11823 		/* Test the read-only bits. */
11824 		if ((val & read_mask) != read_val)
11825 			goto out;
11826 
11827 		/* Test the read/write bits. */
11828 		if ((val & write_mask) != write_mask)
11829 			goto out;
11830 
11831 		tw32(offset, save_val);
11832 	}
11833 
11834 	return 0;
11835 
11836 out:
11837 	if (netif_msg_hw(tp))
11838 		netdev_err(tp->dev,
11839 			   "Register test failed at offset %x\n", offset);
11840 	tw32(offset, save_val);
11841 	return -EIO;
11842 }
11843 
11844 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
11845 {
11846 	static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
11847 	int i;
11848 	u32 j;
11849 
11850 	for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
11851 		for (j = 0; j < len; j += 4) {
11852 			u32 val;
11853 
11854 			tg3_write_mem(tp, offset + j, test_pattern[i]);
11855 			tg3_read_mem(tp, offset + j, &val);
11856 			if (val != test_pattern[i])
11857 				return -EIO;
11858 		}
11859 	}
11860 	return 0;
11861 }
11862 
11863 static int tg3_test_memory(struct tg3 *tp)
11864 {
11865 	static struct mem_entry {
11866 		u32 offset;
11867 		u32 len;
11868 	} mem_tbl_570x[] = {
11869 		{ 0x00000000, 0x00b50},
11870 		{ 0x00002000, 0x1c000},
11871 		{ 0xffffffff, 0x00000}
11872 	}, mem_tbl_5705[] = {
11873 		{ 0x00000100, 0x0000c},
11874 		{ 0x00000200, 0x00008},
11875 		{ 0x00004000, 0x00800},
11876 		{ 0x00006000, 0x01000},
11877 		{ 0x00008000, 0x02000},
11878 		{ 0x00010000, 0x0e000},
11879 		{ 0xffffffff, 0x00000}
11880 	}, mem_tbl_5755[] = {
11881 		{ 0x00000200, 0x00008},
11882 		{ 0x00004000, 0x00800},
11883 		{ 0x00006000, 0x00800},
11884 		{ 0x00008000, 0x02000},
11885 		{ 0x00010000, 0x0c000},
11886 		{ 0xffffffff, 0x00000}
11887 	}, mem_tbl_5906[] = {
11888 		{ 0x00000200, 0x00008},
11889 		{ 0x00004000, 0x00400},
11890 		{ 0x00006000, 0x00400},
11891 		{ 0x00008000, 0x01000},
11892 		{ 0x00010000, 0x01000},
11893 		{ 0xffffffff, 0x00000}
11894 	}, mem_tbl_5717[] = {
11895 		{ 0x00000200, 0x00008},
11896 		{ 0x00010000, 0x0a000},
11897 		{ 0x00020000, 0x13c00},
11898 		{ 0xffffffff, 0x00000}
11899 	}, mem_tbl_57765[] = {
11900 		{ 0x00000200, 0x00008},
11901 		{ 0x00004000, 0x00800},
11902 		{ 0x00006000, 0x09800},
11903 		{ 0x00010000, 0x0a000},
11904 		{ 0xffffffff, 0x00000}
11905 	};
11906 	struct mem_entry *mem_tbl;
11907 	int err = 0;
11908 	int i;
11909 
11910 	if (tg3_flag(tp, 5717_PLUS))
11911 		mem_tbl = mem_tbl_5717;
11912 	else if (tg3_flag(tp, 57765_CLASS))
11913 		mem_tbl = mem_tbl_57765;
11914 	else if (tg3_flag(tp, 5755_PLUS))
11915 		mem_tbl = mem_tbl_5755;
11916 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11917 		mem_tbl = mem_tbl_5906;
11918 	else if (tg3_flag(tp, 5705_PLUS))
11919 		mem_tbl = mem_tbl_5705;
11920 	else
11921 		mem_tbl = mem_tbl_570x;
11922 
11923 	for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
11924 		err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
11925 		if (err)
11926 			break;
11927 	}
11928 
11929 	return err;
11930 }
11931 
11932 #define TG3_TSO_MSS		500
11933 
11934 #define TG3_TSO_IP_HDR_LEN	20
11935 #define TG3_TSO_TCP_HDR_LEN	20
11936 #define TG3_TSO_TCP_OPT_LEN	12
11937 
11938 static const u8 tg3_tso_header[] = {
11939 0x08, 0x00,
11940 0x45, 0x00, 0x00, 0x00,
11941 0x00, 0x00, 0x40, 0x00,
11942 0x40, 0x06, 0x00, 0x00,
11943 0x0a, 0x00, 0x00, 0x01,
11944 0x0a, 0x00, 0x00, 0x02,
11945 0x0d, 0x00, 0xe0, 0x00,
11946 0x00, 0x00, 0x01, 0x00,
11947 0x00, 0x00, 0x02, 0x00,
11948 0x80, 0x10, 0x10, 0x00,
11949 0x14, 0x09, 0x00, 0x00,
11950 0x01, 0x01, 0x08, 0x0a,
11951 0x11, 0x11, 0x11, 0x11,
11952 0x11, 0x11, 0x11, 0x11,
11953 };
11954 
11955 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
11956 {
11957 	u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
11958 	u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
11959 	u32 budget;
11960 	struct sk_buff *skb;
11961 	u8 *tx_data, *rx_data;
11962 	dma_addr_t map;
11963 	int num_pkts, tx_len, rx_len, i, err;
11964 	struct tg3_rx_buffer_desc *desc;
11965 	struct tg3_napi *tnapi, *rnapi;
11966 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
11967 
11968 	tnapi = &tp->napi[0];
11969 	rnapi = &tp->napi[0];
11970 	if (tp->irq_cnt > 1) {
11971 		if (tg3_flag(tp, ENABLE_RSS))
11972 			rnapi = &tp->napi[1];
11973 		if (tg3_flag(tp, ENABLE_TSS))
11974 			tnapi = &tp->napi[1];
11975 	}
11976 	coal_now = tnapi->coal_now | rnapi->coal_now;
11977 
11978 	err = -EIO;
11979 
11980 	tx_len = pktsz;
11981 	skb = netdev_alloc_skb(tp->dev, tx_len);
11982 	if (!skb)
11983 		return -ENOMEM;
11984 
11985 	tx_data = skb_put(skb, tx_len);
11986 	memcpy(tx_data, tp->dev->dev_addr, 6);
11987 	memset(tx_data + 6, 0x0, 8);
11988 
11989 	tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
11990 
11991 	if (tso_loopback) {
11992 		struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
11993 
11994 		u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
11995 			      TG3_TSO_TCP_OPT_LEN;
11996 
11997 		memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
11998 		       sizeof(tg3_tso_header));
11999 		mss = TG3_TSO_MSS;
12000 
12001 		val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
12002 		num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
12003 
12004 		/* Set the total length field in the IP header */
12005 		iph->tot_len = htons((u16)(mss + hdr_len));
12006 
12007 		base_flags = (TXD_FLAG_CPU_PRE_DMA |
12008 			      TXD_FLAG_CPU_POST_DMA);
12009 
12010 		if (tg3_flag(tp, HW_TSO_1) ||
12011 		    tg3_flag(tp, HW_TSO_2) ||
12012 		    tg3_flag(tp, HW_TSO_3)) {
12013 			struct tcphdr *th;
12014 			val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
12015 			th = (struct tcphdr *)&tx_data[val];
12016 			th->check = 0;
12017 		} else
12018 			base_flags |= TXD_FLAG_TCPUDP_CSUM;
12019 
12020 		if (tg3_flag(tp, HW_TSO_3)) {
12021 			mss |= (hdr_len & 0xc) << 12;
12022 			if (hdr_len & 0x10)
12023 				base_flags |= 0x00000010;
12024 			base_flags |= (hdr_len & 0x3e0) << 5;
12025 		} else if (tg3_flag(tp, HW_TSO_2))
12026 			mss |= hdr_len << 9;
12027 		else if (tg3_flag(tp, HW_TSO_1) ||
12028 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
12029 			mss |= (TG3_TSO_TCP_OPT_LEN << 9);
12030 		} else {
12031 			base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
12032 		}
12033 
12034 		data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
12035 	} else {
12036 		num_pkts = 1;
12037 		data_off = ETH_HLEN;
12038 
12039 		if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
12040 		    tx_len > VLAN_ETH_FRAME_LEN)
12041 			base_flags |= TXD_FLAG_JMB_PKT;
12042 	}
12043 
12044 	for (i = data_off; i < tx_len; i++)
12045 		tx_data[i] = (u8) (i & 0xff);
12046 
12047 	map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
12048 	if (pci_dma_mapping_error(tp->pdev, map)) {
12049 		dev_kfree_skb(skb);
12050 		return -EIO;
12051 	}
12052 
12053 	val = tnapi->tx_prod;
12054 	tnapi->tx_buffers[val].skb = skb;
12055 	dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
12056 
12057 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
12058 	       rnapi->coal_now);
12059 
12060 	udelay(10);
12061 
12062 	rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
12063 
12064 	budget = tg3_tx_avail(tnapi);
12065 	if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
12066 			    base_flags | TXD_FLAG_END, mss, 0)) {
12067 		tnapi->tx_buffers[val].skb = NULL;
12068 		dev_kfree_skb(skb);
12069 		return -EIO;
12070 	}
12071 
12072 	tnapi->tx_prod++;
12073 
12074 	/* Sync BD data before updating mailbox */
12075 	wmb();
12076 
12077 	tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
12078 	tr32_mailbox(tnapi->prodmbox);
12079 
12080 	udelay(10);
12081 
12082 	/* 350 usec to allow enough time on some 10/100 Mbps devices.  */
12083 	for (i = 0; i < 35; i++) {
12084 		tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
12085 		       coal_now);
12086 
12087 		udelay(10);
12088 
12089 		tx_idx = tnapi->hw_status->idx[0].tx_consumer;
12090 		rx_idx = rnapi->hw_status->idx[0].rx_producer;
12091 		if ((tx_idx == tnapi->tx_prod) &&
12092 		    (rx_idx == (rx_start_idx + num_pkts)))
12093 			break;
12094 	}
12095 
12096 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
12097 	dev_kfree_skb(skb);
12098 
12099 	if (tx_idx != tnapi->tx_prod)
12100 		goto out;
12101 
12102 	if (rx_idx != rx_start_idx + num_pkts)
12103 		goto out;
12104 
12105 	val = data_off;
12106 	while (rx_idx != rx_start_idx) {
12107 		desc = &rnapi->rx_rcb[rx_start_idx++];
12108 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
12109 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
12110 
12111 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
12112 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
12113 			goto out;
12114 
12115 		rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
12116 			 - ETH_FCS_LEN;
12117 
12118 		if (!tso_loopback) {
12119 			if (rx_len != tx_len)
12120 				goto out;
12121 
12122 			if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
12123 				if (opaque_key != RXD_OPAQUE_RING_STD)
12124 					goto out;
12125 			} else {
12126 				if (opaque_key != RXD_OPAQUE_RING_JUMBO)
12127 					goto out;
12128 			}
12129 		} else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
12130 			   (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
12131 			    >> RXD_TCPCSUM_SHIFT != 0xffff) {
12132 			goto out;
12133 		}
12134 
12135 		if (opaque_key == RXD_OPAQUE_RING_STD) {
12136 			rx_data = tpr->rx_std_buffers[desc_idx].data;
12137 			map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
12138 					     mapping);
12139 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
12140 			rx_data = tpr->rx_jmb_buffers[desc_idx].data;
12141 			map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
12142 					     mapping);
12143 		} else
12144 			goto out;
12145 
12146 		pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
12147 					    PCI_DMA_FROMDEVICE);
12148 
12149 		rx_data += TG3_RX_OFFSET(tp);
12150 		for (i = data_off; i < rx_len; i++, val++) {
12151 			if (*(rx_data + i) != (u8) (val & 0xff))
12152 				goto out;
12153 		}
12154 	}
12155 
12156 	err = 0;
12157 
12158 	/* tg3_free_rings will unmap and free the rx_data */
12159 out:
12160 	return err;
12161 }
12162 
12163 #define TG3_STD_LOOPBACK_FAILED		1
12164 #define TG3_JMB_LOOPBACK_FAILED		2
12165 #define TG3_TSO_LOOPBACK_FAILED		4
12166 #define TG3_LOOPBACK_FAILED \
12167 	(TG3_STD_LOOPBACK_FAILED | \
12168 	 TG3_JMB_LOOPBACK_FAILED | \
12169 	 TG3_TSO_LOOPBACK_FAILED)
12170 
12171 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
12172 {
12173 	int err = -EIO;
12174 	u32 eee_cap;
12175 	u32 jmb_pkt_sz = 9000;
12176 
12177 	if (tp->dma_limit)
12178 		jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
12179 
12180 	eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
12181 	tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
12182 
12183 	if (!netif_running(tp->dev)) {
12184 		data[0] = TG3_LOOPBACK_FAILED;
12185 		data[1] = TG3_LOOPBACK_FAILED;
12186 		if (do_extlpbk)
12187 			data[2] = TG3_LOOPBACK_FAILED;
12188 		goto done;
12189 	}
12190 
12191 	err = tg3_reset_hw(tp, 1);
12192 	if (err) {
12193 		data[0] = TG3_LOOPBACK_FAILED;
12194 		data[1] = TG3_LOOPBACK_FAILED;
12195 		if (do_extlpbk)
12196 			data[2] = TG3_LOOPBACK_FAILED;
12197 		goto done;
12198 	}
12199 
12200 	if (tg3_flag(tp, ENABLE_RSS)) {
12201 		int i;
12202 
12203 		/* Reroute all rx packets to the 1st queue */
12204 		for (i = MAC_RSS_INDIR_TBL_0;
12205 		     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
12206 			tw32(i, 0x0);
12207 	}
12208 
12209 	/* HW errata - mac loopback fails in some cases on 5780.
12210 	 * Normal traffic and PHY loopback are not affected by
12211 	 * errata.  Also, the MAC loopback test is deprecated for
12212 	 * all newer ASIC revisions.
12213 	 */
12214 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
12215 	    !tg3_flag(tp, CPMU_PRESENT)) {
12216 		tg3_mac_loopback(tp, true);
12217 
12218 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12219 			data[0] |= TG3_STD_LOOPBACK_FAILED;
12220 
12221 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12222 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12223 			data[0] |= TG3_JMB_LOOPBACK_FAILED;
12224 
12225 		tg3_mac_loopback(tp, false);
12226 	}
12227 
12228 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
12229 	    !tg3_flag(tp, USE_PHYLIB)) {
12230 		int i;
12231 
12232 		tg3_phy_lpbk_set(tp, 0, false);
12233 
12234 		/* Wait for link */
12235 		for (i = 0; i < 100; i++) {
12236 			if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
12237 				break;
12238 			mdelay(1);
12239 		}
12240 
12241 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12242 			data[1] |= TG3_STD_LOOPBACK_FAILED;
12243 		if (tg3_flag(tp, TSO_CAPABLE) &&
12244 		    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12245 			data[1] |= TG3_TSO_LOOPBACK_FAILED;
12246 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12247 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12248 			data[1] |= TG3_JMB_LOOPBACK_FAILED;
12249 
12250 		if (do_extlpbk) {
12251 			tg3_phy_lpbk_set(tp, 0, true);
12252 
12253 			/* All link indications report up, but the hardware
12254 			 * isn't really ready for about 20 msec.  Double it
12255 			 * to be sure.
12256 			 */
12257 			mdelay(40);
12258 
12259 			if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12260 				data[2] |= TG3_STD_LOOPBACK_FAILED;
12261 			if (tg3_flag(tp, TSO_CAPABLE) &&
12262 			    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12263 				data[2] |= TG3_TSO_LOOPBACK_FAILED;
12264 			if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12265 			    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12266 				data[2] |= TG3_JMB_LOOPBACK_FAILED;
12267 		}
12268 
12269 		/* Re-enable gphy autopowerdown. */
12270 		if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
12271 			tg3_phy_toggle_apd(tp, true);
12272 	}
12273 
12274 	err = (data[0] | data[1] | data[2]) ? -EIO : 0;
12275 
12276 done:
12277 	tp->phy_flags |= eee_cap;
12278 
12279 	return err;
12280 }
12281 
12282 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
12283 			  u64 *data)
12284 {
12285 	struct tg3 *tp = netdev_priv(dev);
12286 	bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
12287 
12288 	if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
12289 	    tg3_power_up(tp)) {
12290 		etest->flags |= ETH_TEST_FL_FAILED;
12291 		memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
12292 		return;
12293 	}
12294 
12295 	memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
12296 
12297 	if (tg3_test_nvram(tp) != 0) {
12298 		etest->flags |= ETH_TEST_FL_FAILED;
12299 		data[0] = 1;
12300 	}
12301 	if (!doextlpbk && tg3_test_link(tp)) {
12302 		etest->flags |= ETH_TEST_FL_FAILED;
12303 		data[1] = 1;
12304 	}
12305 	if (etest->flags & ETH_TEST_FL_OFFLINE) {
12306 		int err, err2 = 0, irq_sync = 0;
12307 
12308 		if (netif_running(dev)) {
12309 			tg3_phy_stop(tp);
12310 			tg3_netif_stop(tp);
12311 			irq_sync = 1;
12312 		}
12313 
12314 		tg3_full_lock(tp, irq_sync);
12315 
12316 		tg3_halt(tp, RESET_KIND_SUSPEND, 1);
12317 		err = tg3_nvram_lock(tp);
12318 		tg3_halt_cpu(tp, RX_CPU_BASE);
12319 		if (!tg3_flag(tp, 5705_PLUS))
12320 			tg3_halt_cpu(tp, TX_CPU_BASE);
12321 		if (!err)
12322 			tg3_nvram_unlock(tp);
12323 
12324 		if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
12325 			tg3_phy_reset(tp);
12326 
12327 		if (tg3_test_registers(tp) != 0) {
12328 			etest->flags |= ETH_TEST_FL_FAILED;
12329 			data[2] = 1;
12330 		}
12331 
12332 		if (tg3_test_memory(tp) != 0) {
12333 			etest->flags |= ETH_TEST_FL_FAILED;
12334 			data[3] = 1;
12335 		}
12336 
12337 		if (doextlpbk)
12338 			etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
12339 
12340 		if (tg3_test_loopback(tp, &data[4], doextlpbk))
12341 			etest->flags |= ETH_TEST_FL_FAILED;
12342 
12343 		tg3_full_unlock(tp);
12344 
12345 		if (tg3_test_interrupt(tp) != 0) {
12346 			etest->flags |= ETH_TEST_FL_FAILED;
12347 			data[7] = 1;
12348 		}
12349 
12350 		tg3_full_lock(tp, 0);
12351 
12352 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12353 		if (netif_running(dev)) {
12354 			tg3_flag_set(tp, INIT_COMPLETE);
12355 			err2 = tg3_restart_hw(tp, 1);
12356 			if (!err2)
12357 				tg3_netif_start(tp);
12358 		}
12359 
12360 		tg3_full_unlock(tp);
12361 
12362 		if (irq_sync && !err2)
12363 			tg3_phy_start(tp);
12364 	}
12365 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
12366 		tg3_power_down(tp);
12367 
12368 }
12369 
12370 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
12371 {
12372 	struct mii_ioctl_data *data = if_mii(ifr);
12373 	struct tg3 *tp = netdev_priv(dev);
12374 	int err;
12375 
12376 	if (tg3_flag(tp, USE_PHYLIB)) {
12377 		struct phy_device *phydev;
12378 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12379 			return -EAGAIN;
12380 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
12381 		return phy_mii_ioctl(phydev, ifr, cmd);
12382 	}
12383 
12384 	switch (cmd) {
12385 	case SIOCGMIIPHY:
12386 		data->phy_id = tp->phy_addr;
12387 
12388 		/* fallthru */
12389 	case SIOCGMIIREG: {
12390 		u32 mii_regval;
12391 
12392 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12393 			break;			/* We have no PHY */
12394 
12395 		if (!netif_running(dev))
12396 			return -EAGAIN;
12397 
12398 		spin_lock_bh(&tp->lock);
12399 		err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
12400 		spin_unlock_bh(&tp->lock);
12401 
12402 		data->val_out = mii_regval;
12403 
12404 		return err;
12405 	}
12406 
12407 	case SIOCSMIIREG:
12408 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12409 			break;			/* We have no PHY */
12410 
12411 		if (!netif_running(dev))
12412 			return -EAGAIN;
12413 
12414 		spin_lock_bh(&tp->lock);
12415 		err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
12416 		spin_unlock_bh(&tp->lock);
12417 
12418 		return err;
12419 
12420 	default:
12421 		/* do nothing */
12422 		break;
12423 	}
12424 	return -EOPNOTSUPP;
12425 }
12426 
12427 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12428 {
12429 	struct tg3 *tp = netdev_priv(dev);
12430 
12431 	memcpy(ec, &tp->coal, sizeof(*ec));
12432 	return 0;
12433 }
12434 
12435 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12436 {
12437 	struct tg3 *tp = netdev_priv(dev);
12438 	u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
12439 	u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
12440 
12441 	if (!tg3_flag(tp, 5705_PLUS)) {
12442 		max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
12443 		max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
12444 		max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
12445 		min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
12446 	}
12447 
12448 	if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
12449 	    (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
12450 	    (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
12451 	    (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
12452 	    (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
12453 	    (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
12454 	    (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
12455 	    (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
12456 	    (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
12457 	    (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
12458 		return -EINVAL;
12459 
12460 	/* No rx interrupts will be generated if both are zero */
12461 	if ((ec->rx_coalesce_usecs == 0) &&
12462 	    (ec->rx_max_coalesced_frames == 0))
12463 		return -EINVAL;
12464 
12465 	/* No tx interrupts will be generated if both are zero */
12466 	if ((ec->tx_coalesce_usecs == 0) &&
12467 	    (ec->tx_max_coalesced_frames == 0))
12468 		return -EINVAL;
12469 
12470 	/* Only copy relevant parameters, ignore all others. */
12471 	tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
12472 	tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
12473 	tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
12474 	tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
12475 	tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
12476 	tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
12477 	tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
12478 	tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
12479 	tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
12480 
12481 	if (netif_running(dev)) {
12482 		tg3_full_lock(tp, 0);
12483 		__tg3_set_coalesce(tp, &tp->coal);
12484 		tg3_full_unlock(tp);
12485 	}
12486 	return 0;
12487 }
12488 
12489 static const struct ethtool_ops tg3_ethtool_ops = {
12490 	.get_settings		= tg3_get_settings,
12491 	.set_settings		= tg3_set_settings,
12492 	.get_drvinfo		= tg3_get_drvinfo,
12493 	.get_regs_len		= tg3_get_regs_len,
12494 	.get_regs		= tg3_get_regs,
12495 	.get_wol		= tg3_get_wol,
12496 	.set_wol		= tg3_set_wol,
12497 	.get_msglevel		= tg3_get_msglevel,
12498 	.set_msglevel		= tg3_set_msglevel,
12499 	.nway_reset		= tg3_nway_reset,
12500 	.get_link		= ethtool_op_get_link,
12501 	.get_eeprom_len		= tg3_get_eeprom_len,
12502 	.get_eeprom		= tg3_get_eeprom,
12503 	.set_eeprom		= tg3_set_eeprom,
12504 	.get_ringparam		= tg3_get_ringparam,
12505 	.set_ringparam		= tg3_set_ringparam,
12506 	.get_pauseparam		= tg3_get_pauseparam,
12507 	.set_pauseparam		= tg3_set_pauseparam,
12508 	.self_test		= tg3_self_test,
12509 	.get_strings		= tg3_get_strings,
12510 	.set_phys_id		= tg3_set_phys_id,
12511 	.get_ethtool_stats	= tg3_get_ethtool_stats,
12512 	.get_coalesce		= tg3_get_coalesce,
12513 	.set_coalesce		= tg3_set_coalesce,
12514 	.get_sset_count		= tg3_get_sset_count,
12515 	.get_rxnfc		= tg3_get_rxnfc,
12516 	.get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
12517 	.get_rxfh_indir		= tg3_get_rxfh_indir,
12518 	.set_rxfh_indir		= tg3_set_rxfh_indir,
12519 	.get_ts_info		= ethtool_op_get_ts_info,
12520 };
12521 
12522 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
12523 						struct rtnl_link_stats64 *stats)
12524 {
12525 	struct tg3 *tp = netdev_priv(dev);
12526 
12527 	spin_lock_bh(&tp->lock);
12528 	if (!tp->hw_stats) {
12529 		spin_unlock_bh(&tp->lock);
12530 		return &tp->net_stats_prev;
12531 	}
12532 
12533 	tg3_get_nstats(tp, stats);
12534 	spin_unlock_bh(&tp->lock);
12535 
12536 	return stats;
12537 }
12538 
12539 static void tg3_set_rx_mode(struct net_device *dev)
12540 {
12541 	struct tg3 *tp = netdev_priv(dev);
12542 
12543 	if (!netif_running(dev))
12544 		return;
12545 
12546 	tg3_full_lock(tp, 0);
12547 	__tg3_set_rx_mode(dev);
12548 	tg3_full_unlock(tp);
12549 }
12550 
12551 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
12552 			       int new_mtu)
12553 {
12554 	dev->mtu = new_mtu;
12555 
12556 	if (new_mtu > ETH_DATA_LEN) {
12557 		if (tg3_flag(tp, 5780_CLASS)) {
12558 			netdev_update_features(dev);
12559 			tg3_flag_clear(tp, TSO_CAPABLE);
12560 		} else {
12561 			tg3_flag_set(tp, JUMBO_RING_ENABLE);
12562 		}
12563 	} else {
12564 		if (tg3_flag(tp, 5780_CLASS)) {
12565 			tg3_flag_set(tp, TSO_CAPABLE);
12566 			netdev_update_features(dev);
12567 		}
12568 		tg3_flag_clear(tp, JUMBO_RING_ENABLE);
12569 	}
12570 }
12571 
12572 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
12573 {
12574 	struct tg3 *tp = netdev_priv(dev);
12575 	int err, reset_phy = 0;
12576 
12577 	if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
12578 		return -EINVAL;
12579 
12580 	if (!netif_running(dev)) {
12581 		/* We'll just catch it later when the
12582 		 * device is up'd.
12583 		 */
12584 		tg3_set_mtu(dev, tp, new_mtu);
12585 		return 0;
12586 	}
12587 
12588 	tg3_phy_stop(tp);
12589 
12590 	tg3_netif_stop(tp);
12591 
12592 	tg3_full_lock(tp, 1);
12593 
12594 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12595 
12596 	tg3_set_mtu(dev, tp, new_mtu);
12597 
12598 	/* Reset PHY, otherwise the read DMA engine will be in a mode that
12599 	 * breaks all requests to 256 bytes.
12600 	 */
12601 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
12602 		reset_phy = 1;
12603 
12604 	err = tg3_restart_hw(tp, reset_phy);
12605 
12606 	if (!err)
12607 		tg3_netif_start(tp);
12608 
12609 	tg3_full_unlock(tp);
12610 
12611 	if (!err)
12612 		tg3_phy_start(tp);
12613 
12614 	return err;
12615 }
12616 
12617 static const struct net_device_ops tg3_netdev_ops = {
12618 	.ndo_open		= tg3_open,
12619 	.ndo_stop		= tg3_close,
12620 	.ndo_start_xmit		= tg3_start_xmit,
12621 	.ndo_get_stats64	= tg3_get_stats64,
12622 	.ndo_validate_addr	= eth_validate_addr,
12623 	.ndo_set_rx_mode	= tg3_set_rx_mode,
12624 	.ndo_set_mac_address	= tg3_set_mac_addr,
12625 	.ndo_do_ioctl		= tg3_ioctl,
12626 	.ndo_tx_timeout		= tg3_tx_timeout,
12627 	.ndo_change_mtu		= tg3_change_mtu,
12628 	.ndo_fix_features	= tg3_fix_features,
12629 	.ndo_set_features	= tg3_set_features,
12630 #ifdef CONFIG_NET_POLL_CONTROLLER
12631 	.ndo_poll_controller	= tg3_poll_controller,
12632 #endif
12633 };
12634 
12635 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
12636 {
12637 	u32 cursize, val, magic;
12638 
12639 	tp->nvram_size = EEPROM_CHIP_SIZE;
12640 
12641 	if (tg3_nvram_read(tp, 0, &magic) != 0)
12642 		return;
12643 
12644 	if ((magic != TG3_EEPROM_MAGIC) &&
12645 	    ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
12646 	    ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
12647 		return;
12648 
12649 	/*
12650 	 * Size the chip by reading offsets at increasing powers of two.
12651 	 * When we encounter our validation signature, we know the addressing
12652 	 * has wrapped around, and thus have our chip size.
12653 	 */
12654 	cursize = 0x10;
12655 
12656 	while (cursize < tp->nvram_size) {
12657 		if (tg3_nvram_read(tp, cursize, &val) != 0)
12658 			return;
12659 
12660 		if (val == magic)
12661 			break;
12662 
12663 		cursize <<= 1;
12664 	}
12665 
12666 	tp->nvram_size = cursize;
12667 }
12668 
12669 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
12670 {
12671 	u32 val;
12672 
12673 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
12674 		return;
12675 
12676 	/* Selfboot format */
12677 	if (val != TG3_EEPROM_MAGIC) {
12678 		tg3_get_eeprom_size(tp);
12679 		return;
12680 	}
12681 
12682 	if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
12683 		if (val != 0) {
12684 			/* This is confusing.  We want to operate on the
12685 			 * 16-bit value at offset 0xf2.  The tg3_nvram_read()
12686 			 * call will read from NVRAM and byteswap the data
12687 			 * according to the byteswapping settings for all
12688 			 * other register accesses.  This ensures the data we
12689 			 * want will always reside in the lower 16-bits.
12690 			 * However, the data in NVRAM is in LE format, which
12691 			 * means the data from the NVRAM read will always be
12692 			 * opposite the endianness of the CPU.  The 16-bit
12693 			 * byteswap then brings the data to CPU endianness.
12694 			 */
12695 			tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
12696 			return;
12697 		}
12698 	}
12699 	tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12700 }
12701 
12702 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
12703 {
12704 	u32 nvcfg1;
12705 
12706 	nvcfg1 = tr32(NVRAM_CFG1);
12707 	if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
12708 		tg3_flag_set(tp, FLASH);
12709 	} else {
12710 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12711 		tw32(NVRAM_CFG1, nvcfg1);
12712 	}
12713 
12714 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
12715 	    tg3_flag(tp, 5780_CLASS)) {
12716 		switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
12717 		case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
12718 			tp->nvram_jedecnum = JEDEC_ATMEL;
12719 			tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
12720 			tg3_flag_set(tp, NVRAM_BUFFERED);
12721 			break;
12722 		case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
12723 			tp->nvram_jedecnum = JEDEC_ATMEL;
12724 			tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
12725 			break;
12726 		case FLASH_VENDOR_ATMEL_EEPROM:
12727 			tp->nvram_jedecnum = JEDEC_ATMEL;
12728 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12729 			tg3_flag_set(tp, NVRAM_BUFFERED);
12730 			break;
12731 		case FLASH_VENDOR_ST:
12732 			tp->nvram_jedecnum = JEDEC_ST;
12733 			tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
12734 			tg3_flag_set(tp, NVRAM_BUFFERED);
12735 			break;
12736 		case FLASH_VENDOR_SAIFUN:
12737 			tp->nvram_jedecnum = JEDEC_SAIFUN;
12738 			tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
12739 			break;
12740 		case FLASH_VENDOR_SST_SMALL:
12741 		case FLASH_VENDOR_SST_LARGE:
12742 			tp->nvram_jedecnum = JEDEC_SST;
12743 			tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
12744 			break;
12745 		}
12746 	} else {
12747 		tp->nvram_jedecnum = JEDEC_ATMEL;
12748 		tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
12749 		tg3_flag_set(tp, NVRAM_BUFFERED);
12750 	}
12751 }
12752 
12753 static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
12754 {
12755 	switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
12756 	case FLASH_5752PAGE_SIZE_256:
12757 		tp->nvram_pagesize = 256;
12758 		break;
12759 	case FLASH_5752PAGE_SIZE_512:
12760 		tp->nvram_pagesize = 512;
12761 		break;
12762 	case FLASH_5752PAGE_SIZE_1K:
12763 		tp->nvram_pagesize = 1024;
12764 		break;
12765 	case FLASH_5752PAGE_SIZE_2K:
12766 		tp->nvram_pagesize = 2048;
12767 		break;
12768 	case FLASH_5752PAGE_SIZE_4K:
12769 		tp->nvram_pagesize = 4096;
12770 		break;
12771 	case FLASH_5752PAGE_SIZE_264:
12772 		tp->nvram_pagesize = 264;
12773 		break;
12774 	case FLASH_5752PAGE_SIZE_528:
12775 		tp->nvram_pagesize = 528;
12776 		break;
12777 	}
12778 }
12779 
12780 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
12781 {
12782 	u32 nvcfg1;
12783 
12784 	nvcfg1 = tr32(NVRAM_CFG1);
12785 
12786 	/* NVRAM protection for TPM */
12787 	if (nvcfg1 & (1 << 27))
12788 		tg3_flag_set(tp, PROTECTED_NVRAM);
12789 
12790 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12791 	case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
12792 	case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
12793 		tp->nvram_jedecnum = JEDEC_ATMEL;
12794 		tg3_flag_set(tp, NVRAM_BUFFERED);
12795 		break;
12796 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12797 		tp->nvram_jedecnum = JEDEC_ATMEL;
12798 		tg3_flag_set(tp, NVRAM_BUFFERED);
12799 		tg3_flag_set(tp, FLASH);
12800 		break;
12801 	case FLASH_5752VENDOR_ST_M45PE10:
12802 	case FLASH_5752VENDOR_ST_M45PE20:
12803 	case FLASH_5752VENDOR_ST_M45PE40:
12804 		tp->nvram_jedecnum = JEDEC_ST;
12805 		tg3_flag_set(tp, NVRAM_BUFFERED);
12806 		tg3_flag_set(tp, FLASH);
12807 		break;
12808 	}
12809 
12810 	if (tg3_flag(tp, FLASH)) {
12811 		tg3_nvram_get_pagesize(tp, nvcfg1);
12812 	} else {
12813 		/* For eeprom, set pagesize to maximum eeprom size */
12814 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12815 
12816 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12817 		tw32(NVRAM_CFG1, nvcfg1);
12818 	}
12819 }
12820 
12821 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
12822 {
12823 	u32 nvcfg1, protect = 0;
12824 
12825 	nvcfg1 = tr32(NVRAM_CFG1);
12826 
12827 	/* NVRAM protection for TPM */
12828 	if (nvcfg1 & (1 << 27)) {
12829 		tg3_flag_set(tp, PROTECTED_NVRAM);
12830 		protect = 1;
12831 	}
12832 
12833 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12834 	switch (nvcfg1) {
12835 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
12836 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
12837 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
12838 	case FLASH_5755VENDOR_ATMEL_FLASH_5:
12839 		tp->nvram_jedecnum = JEDEC_ATMEL;
12840 		tg3_flag_set(tp, NVRAM_BUFFERED);
12841 		tg3_flag_set(tp, FLASH);
12842 		tp->nvram_pagesize = 264;
12843 		if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
12844 		    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
12845 			tp->nvram_size = (protect ? 0x3e200 :
12846 					  TG3_NVRAM_SIZE_512KB);
12847 		else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
12848 			tp->nvram_size = (protect ? 0x1f200 :
12849 					  TG3_NVRAM_SIZE_256KB);
12850 		else
12851 			tp->nvram_size = (protect ? 0x1f200 :
12852 					  TG3_NVRAM_SIZE_128KB);
12853 		break;
12854 	case FLASH_5752VENDOR_ST_M45PE10:
12855 	case FLASH_5752VENDOR_ST_M45PE20:
12856 	case FLASH_5752VENDOR_ST_M45PE40:
12857 		tp->nvram_jedecnum = JEDEC_ST;
12858 		tg3_flag_set(tp, NVRAM_BUFFERED);
12859 		tg3_flag_set(tp, FLASH);
12860 		tp->nvram_pagesize = 256;
12861 		if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
12862 			tp->nvram_size = (protect ?
12863 					  TG3_NVRAM_SIZE_64KB :
12864 					  TG3_NVRAM_SIZE_128KB);
12865 		else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
12866 			tp->nvram_size = (protect ?
12867 					  TG3_NVRAM_SIZE_64KB :
12868 					  TG3_NVRAM_SIZE_256KB);
12869 		else
12870 			tp->nvram_size = (protect ?
12871 					  TG3_NVRAM_SIZE_128KB :
12872 					  TG3_NVRAM_SIZE_512KB);
12873 		break;
12874 	}
12875 }
12876 
12877 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
12878 {
12879 	u32 nvcfg1;
12880 
12881 	nvcfg1 = tr32(NVRAM_CFG1);
12882 
12883 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12884 	case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
12885 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
12886 	case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
12887 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
12888 		tp->nvram_jedecnum = JEDEC_ATMEL;
12889 		tg3_flag_set(tp, NVRAM_BUFFERED);
12890 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12891 
12892 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12893 		tw32(NVRAM_CFG1, nvcfg1);
12894 		break;
12895 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
12896 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
12897 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
12898 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
12899 		tp->nvram_jedecnum = JEDEC_ATMEL;
12900 		tg3_flag_set(tp, NVRAM_BUFFERED);
12901 		tg3_flag_set(tp, FLASH);
12902 		tp->nvram_pagesize = 264;
12903 		break;
12904 	case FLASH_5752VENDOR_ST_M45PE10:
12905 	case FLASH_5752VENDOR_ST_M45PE20:
12906 	case FLASH_5752VENDOR_ST_M45PE40:
12907 		tp->nvram_jedecnum = JEDEC_ST;
12908 		tg3_flag_set(tp, NVRAM_BUFFERED);
12909 		tg3_flag_set(tp, FLASH);
12910 		tp->nvram_pagesize = 256;
12911 		break;
12912 	}
12913 }
12914 
12915 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
12916 {
12917 	u32 nvcfg1, protect = 0;
12918 
12919 	nvcfg1 = tr32(NVRAM_CFG1);
12920 
12921 	/* NVRAM protection for TPM */
12922 	if (nvcfg1 & (1 << 27)) {
12923 		tg3_flag_set(tp, PROTECTED_NVRAM);
12924 		protect = 1;
12925 	}
12926 
12927 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12928 	switch (nvcfg1) {
12929 	case FLASH_5761VENDOR_ATMEL_ADB021D:
12930 	case FLASH_5761VENDOR_ATMEL_ADB041D:
12931 	case FLASH_5761VENDOR_ATMEL_ADB081D:
12932 	case FLASH_5761VENDOR_ATMEL_ADB161D:
12933 	case FLASH_5761VENDOR_ATMEL_MDB021D:
12934 	case FLASH_5761VENDOR_ATMEL_MDB041D:
12935 	case FLASH_5761VENDOR_ATMEL_MDB081D:
12936 	case FLASH_5761VENDOR_ATMEL_MDB161D:
12937 		tp->nvram_jedecnum = JEDEC_ATMEL;
12938 		tg3_flag_set(tp, NVRAM_BUFFERED);
12939 		tg3_flag_set(tp, FLASH);
12940 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
12941 		tp->nvram_pagesize = 256;
12942 		break;
12943 	case FLASH_5761VENDOR_ST_A_M45PE20:
12944 	case FLASH_5761VENDOR_ST_A_M45PE40:
12945 	case FLASH_5761VENDOR_ST_A_M45PE80:
12946 	case FLASH_5761VENDOR_ST_A_M45PE16:
12947 	case FLASH_5761VENDOR_ST_M_M45PE20:
12948 	case FLASH_5761VENDOR_ST_M_M45PE40:
12949 	case FLASH_5761VENDOR_ST_M_M45PE80:
12950 	case FLASH_5761VENDOR_ST_M_M45PE16:
12951 		tp->nvram_jedecnum = JEDEC_ST;
12952 		tg3_flag_set(tp, NVRAM_BUFFERED);
12953 		tg3_flag_set(tp, FLASH);
12954 		tp->nvram_pagesize = 256;
12955 		break;
12956 	}
12957 
12958 	if (protect) {
12959 		tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
12960 	} else {
12961 		switch (nvcfg1) {
12962 		case FLASH_5761VENDOR_ATMEL_ADB161D:
12963 		case FLASH_5761VENDOR_ATMEL_MDB161D:
12964 		case FLASH_5761VENDOR_ST_A_M45PE16:
12965 		case FLASH_5761VENDOR_ST_M_M45PE16:
12966 			tp->nvram_size = TG3_NVRAM_SIZE_2MB;
12967 			break;
12968 		case FLASH_5761VENDOR_ATMEL_ADB081D:
12969 		case FLASH_5761VENDOR_ATMEL_MDB081D:
12970 		case FLASH_5761VENDOR_ST_A_M45PE80:
12971 		case FLASH_5761VENDOR_ST_M_M45PE80:
12972 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
12973 			break;
12974 		case FLASH_5761VENDOR_ATMEL_ADB041D:
12975 		case FLASH_5761VENDOR_ATMEL_MDB041D:
12976 		case FLASH_5761VENDOR_ST_A_M45PE40:
12977 		case FLASH_5761VENDOR_ST_M_M45PE40:
12978 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
12979 			break;
12980 		case FLASH_5761VENDOR_ATMEL_ADB021D:
12981 		case FLASH_5761VENDOR_ATMEL_MDB021D:
12982 		case FLASH_5761VENDOR_ST_A_M45PE20:
12983 		case FLASH_5761VENDOR_ST_M_M45PE20:
12984 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
12985 			break;
12986 		}
12987 	}
12988 }
12989 
12990 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
12991 {
12992 	tp->nvram_jedecnum = JEDEC_ATMEL;
12993 	tg3_flag_set(tp, NVRAM_BUFFERED);
12994 	tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
12995 }
12996 
12997 static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp)
12998 {
12999 	u32 nvcfg1;
13000 
13001 	nvcfg1 = tr32(NVRAM_CFG1);
13002 
13003 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13004 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
13005 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
13006 		tp->nvram_jedecnum = JEDEC_ATMEL;
13007 		tg3_flag_set(tp, NVRAM_BUFFERED);
13008 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13009 
13010 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13011 		tw32(NVRAM_CFG1, nvcfg1);
13012 		return;
13013 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13014 	case FLASH_57780VENDOR_ATMEL_AT45DB011D:
13015 	case FLASH_57780VENDOR_ATMEL_AT45DB011B:
13016 	case FLASH_57780VENDOR_ATMEL_AT45DB021D:
13017 	case FLASH_57780VENDOR_ATMEL_AT45DB021B:
13018 	case FLASH_57780VENDOR_ATMEL_AT45DB041D:
13019 	case FLASH_57780VENDOR_ATMEL_AT45DB041B:
13020 		tp->nvram_jedecnum = JEDEC_ATMEL;
13021 		tg3_flag_set(tp, NVRAM_BUFFERED);
13022 		tg3_flag_set(tp, FLASH);
13023 
13024 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13025 		case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13026 		case FLASH_57780VENDOR_ATMEL_AT45DB011D:
13027 		case FLASH_57780VENDOR_ATMEL_AT45DB011B:
13028 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13029 			break;
13030 		case FLASH_57780VENDOR_ATMEL_AT45DB021D:
13031 		case FLASH_57780VENDOR_ATMEL_AT45DB021B:
13032 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13033 			break;
13034 		case FLASH_57780VENDOR_ATMEL_AT45DB041D:
13035 		case FLASH_57780VENDOR_ATMEL_AT45DB041B:
13036 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13037 			break;
13038 		}
13039 		break;
13040 	case FLASH_5752VENDOR_ST_M45PE10:
13041 	case FLASH_5752VENDOR_ST_M45PE20:
13042 	case FLASH_5752VENDOR_ST_M45PE40:
13043 		tp->nvram_jedecnum = JEDEC_ST;
13044 		tg3_flag_set(tp, NVRAM_BUFFERED);
13045 		tg3_flag_set(tp, FLASH);
13046 
13047 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13048 		case FLASH_5752VENDOR_ST_M45PE10:
13049 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13050 			break;
13051 		case FLASH_5752VENDOR_ST_M45PE20:
13052 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13053 			break;
13054 		case FLASH_5752VENDOR_ST_M45PE40:
13055 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13056 			break;
13057 		}
13058 		break;
13059 	default:
13060 		tg3_flag_set(tp, NO_NVRAM);
13061 		return;
13062 	}
13063 
13064 	tg3_nvram_get_pagesize(tp, nvcfg1);
13065 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13066 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13067 }
13068 
13069 
13070 static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp)
13071 {
13072 	u32 nvcfg1;
13073 
13074 	nvcfg1 = tr32(NVRAM_CFG1);
13075 
13076 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13077 	case FLASH_5717VENDOR_ATMEL_EEPROM:
13078 	case FLASH_5717VENDOR_MICRO_EEPROM:
13079 		tp->nvram_jedecnum = JEDEC_ATMEL;
13080 		tg3_flag_set(tp, NVRAM_BUFFERED);
13081 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13082 
13083 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13084 		tw32(NVRAM_CFG1, nvcfg1);
13085 		return;
13086 	case FLASH_5717VENDOR_ATMEL_MDB011D:
13087 	case FLASH_5717VENDOR_ATMEL_ADB011B:
13088 	case FLASH_5717VENDOR_ATMEL_ADB011D:
13089 	case FLASH_5717VENDOR_ATMEL_MDB021D:
13090 	case FLASH_5717VENDOR_ATMEL_ADB021B:
13091 	case FLASH_5717VENDOR_ATMEL_ADB021D:
13092 	case FLASH_5717VENDOR_ATMEL_45USPT:
13093 		tp->nvram_jedecnum = JEDEC_ATMEL;
13094 		tg3_flag_set(tp, NVRAM_BUFFERED);
13095 		tg3_flag_set(tp, FLASH);
13096 
13097 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13098 		case FLASH_5717VENDOR_ATMEL_MDB021D:
13099 			/* Detect size with tg3_nvram_get_size() */
13100 			break;
13101 		case FLASH_5717VENDOR_ATMEL_ADB021B:
13102 		case FLASH_5717VENDOR_ATMEL_ADB021D:
13103 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13104 			break;
13105 		default:
13106 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13107 			break;
13108 		}
13109 		break;
13110 	case FLASH_5717VENDOR_ST_M_M25PE10:
13111 	case FLASH_5717VENDOR_ST_A_M25PE10:
13112 	case FLASH_5717VENDOR_ST_M_M45PE10:
13113 	case FLASH_5717VENDOR_ST_A_M45PE10:
13114 	case FLASH_5717VENDOR_ST_M_M25PE20:
13115 	case FLASH_5717VENDOR_ST_A_M25PE20:
13116 	case FLASH_5717VENDOR_ST_M_M45PE20:
13117 	case FLASH_5717VENDOR_ST_A_M45PE20:
13118 	case FLASH_5717VENDOR_ST_25USPT:
13119 	case FLASH_5717VENDOR_ST_45USPT:
13120 		tp->nvram_jedecnum = JEDEC_ST;
13121 		tg3_flag_set(tp, NVRAM_BUFFERED);
13122 		tg3_flag_set(tp, FLASH);
13123 
13124 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13125 		case FLASH_5717VENDOR_ST_M_M25PE20:
13126 		case FLASH_5717VENDOR_ST_M_M45PE20:
13127 			/* Detect size with tg3_nvram_get_size() */
13128 			break;
13129 		case FLASH_5717VENDOR_ST_A_M25PE20:
13130 		case FLASH_5717VENDOR_ST_A_M45PE20:
13131 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13132 			break;
13133 		default:
13134 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13135 			break;
13136 		}
13137 		break;
13138 	default:
13139 		tg3_flag_set(tp, NO_NVRAM);
13140 		return;
13141 	}
13142 
13143 	tg3_nvram_get_pagesize(tp, nvcfg1);
13144 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13145 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13146 }
13147 
13148 static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp)
13149 {
13150 	u32 nvcfg1, nvmpinstrp;
13151 
13152 	nvcfg1 = tr32(NVRAM_CFG1);
13153 	nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
13154 
13155 	switch (nvmpinstrp) {
13156 	case FLASH_5720_EEPROM_HD:
13157 	case FLASH_5720_EEPROM_LD:
13158 		tp->nvram_jedecnum = JEDEC_ATMEL;
13159 		tg3_flag_set(tp, NVRAM_BUFFERED);
13160 
13161 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13162 		tw32(NVRAM_CFG1, nvcfg1);
13163 		if (nvmpinstrp == FLASH_5720_EEPROM_HD)
13164 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13165 		else
13166 			tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
13167 		return;
13168 	case FLASH_5720VENDOR_M_ATMEL_DB011D:
13169 	case FLASH_5720VENDOR_A_ATMEL_DB011B:
13170 	case FLASH_5720VENDOR_A_ATMEL_DB011D:
13171 	case FLASH_5720VENDOR_M_ATMEL_DB021D:
13172 	case FLASH_5720VENDOR_A_ATMEL_DB021B:
13173 	case FLASH_5720VENDOR_A_ATMEL_DB021D:
13174 	case FLASH_5720VENDOR_M_ATMEL_DB041D:
13175 	case FLASH_5720VENDOR_A_ATMEL_DB041B:
13176 	case FLASH_5720VENDOR_A_ATMEL_DB041D:
13177 	case FLASH_5720VENDOR_M_ATMEL_DB081D:
13178 	case FLASH_5720VENDOR_A_ATMEL_DB081D:
13179 	case FLASH_5720VENDOR_ATMEL_45USPT:
13180 		tp->nvram_jedecnum = JEDEC_ATMEL;
13181 		tg3_flag_set(tp, NVRAM_BUFFERED);
13182 		tg3_flag_set(tp, FLASH);
13183 
13184 		switch (nvmpinstrp) {
13185 		case FLASH_5720VENDOR_M_ATMEL_DB021D:
13186 		case FLASH_5720VENDOR_A_ATMEL_DB021B:
13187 		case FLASH_5720VENDOR_A_ATMEL_DB021D:
13188 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13189 			break;
13190 		case FLASH_5720VENDOR_M_ATMEL_DB041D:
13191 		case FLASH_5720VENDOR_A_ATMEL_DB041B:
13192 		case FLASH_5720VENDOR_A_ATMEL_DB041D:
13193 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13194 			break;
13195 		case FLASH_5720VENDOR_M_ATMEL_DB081D:
13196 		case FLASH_5720VENDOR_A_ATMEL_DB081D:
13197 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13198 			break;
13199 		default:
13200 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13201 			break;
13202 		}
13203 		break;
13204 	case FLASH_5720VENDOR_M_ST_M25PE10:
13205 	case FLASH_5720VENDOR_M_ST_M45PE10:
13206 	case FLASH_5720VENDOR_A_ST_M25PE10:
13207 	case FLASH_5720VENDOR_A_ST_M45PE10:
13208 	case FLASH_5720VENDOR_M_ST_M25PE20:
13209 	case FLASH_5720VENDOR_M_ST_M45PE20:
13210 	case FLASH_5720VENDOR_A_ST_M25PE20:
13211 	case FLASH_5720VENDOR_A_ST_M45PE20:
13212 	case FLASH_5720VENDOR_M_ST_M25PE40:
13213 	case FLASH_5720VENDOR_M_ST_M45PE40:
13214 	case FLASH_5720VENDOR_A_ST_M25PE40:
13215 	case FLASH_5720VENDOR_A_ST_M45PE40:
13216 	case FLASH_5720VENDOR_M_ST_M25PE80:
13217 	case FLASH_5720VENDOR_M_ST_M45PE80:
13218 	case FLASH_5720VENDOR_A_ST_M25PE80:
13219 	case FLASH_5720VENDOR_A_ST_M45PE80:
13220 	case FLASH_5720VENDOR_ST_25USPT:
13221 	case FLASH_5720VENDOR_ST_45USPT:
13222 		tp->nvram_jedecnum = JEDEC_ST;
13223 		tg3_flag_set(tp, NVRAM_BUFFERED);
13224 		tg3_flag_set(tp, FLASH);
13225 
13226 		switch (nvmpinstrp) {
13227 		case FLASH_5720VENDOR_M_ST_M25PE20:
13228 		case FLASH_5720VENDOR_M_ST_M45PE20:
13229 		case FLASH_5720VENDOR_A_ST_M25PE20:
13230 		case FLASH_5720VENDOR_A_ST_M45PE20:
13231 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13232 			break;
13233 		case FLASH_5720VENDOR_M_ST_M25PE40:
13234 		case FLASH_5720VENDOR_M_ST_M45PE40:
13235 		case FLASH_5720VENDOR_A_ST_M25PE40:
13236 		case FLASH_5720VENDOR_A_ST_M45PE40:
13237 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13238 			break;
13239 		case FLASH_5720VENDOR_M_ST_M25PE80:
13240 		case FLASH_5720VENDOR_M_ST_M45PE80:
13241 		case FLASH_5720VENDOR_A_ST_M25PE80:
13242 		case FLASH_5720VENDOR_A_ST_M45PE80:
13243 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13244 			break;
13245 		default:
13246 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13247 			break;
13248 		}
13249 		break;
13250 	default:
13251 		tg3_flag_set(tp, NO_NVRAM);
13252 		return;
13253 	}
13254 
13255 	tg3_nvram_get_pagesize(tp, nvcfg1);
13256 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13257 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13258 }
13259 
13260 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
13261 static void __devinit tg3_nvram_init(struct tg3 *tp)
13262 {
13263 	tw32_f(GRC_EEPROM_ADDR,
13264 	     (EEPROM_ADDR_FSM_RESET |
13265 	      (EEPROM_DEFAULT_CLOCK_PERIOD <<
13266 	       EEPROM_ADDR_CLKPERD_SHIFT)));
13267 
13268 	msleep(1);
13269 
13270 	/* Enable seeprom accesses. */
13271 	tw32_f(GRC_LOCAL_CTRL,
13272 	     tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
13273 	udelay(100);
13274 
13275 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13276 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
13277 		tg3_flag_set(tp, NVRAM);
13278 
13279 		if (tg3_nvram_lock(tp)) {
13280 			netdev_warn(tp->dev,
13281 				    "Cannot get nvram lock, %s failed\n",
13282 				    __func__);
13283 			return;
13284 		}
13285 		tg3_enable_nvram_access(tp);
13286 
13287 		tp->nvram_size = 0;
13288 
13289 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
13290 			tg3_get_5752_nvram_info(tp);
13291 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
13292 			tg3_get_5755_nvram_info(tp);
13293 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
13294 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
13295 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13296 			tg3_get_5787_nvram_info(tp);
13297 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
13298 			tg3_get_5761_nvram_info(tp);
13299 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
13300 			tg3_get_5906_nvram_info(tp);
13301 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
13302 			 tg3_flag(tp, 57765_CLASS))
13303 			tg3_get_57780_nvram_info(tp);
13304 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
13305 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
13306 			tg3_get_5717_nvram_info(tp);
13307 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
13308 			tg3_get_5720_nvram_info(tp);
13309 		else
13310 			tg3_get_nvram_info(tp);
13311 
13312 		if (tp->nvram_size == 0)
13313 			tg3_get_nvram_size(tp);
13314 
13315 		tg3_disable_nvram_access(tp);
13316 		tg3_nvram_unlock(tp);
13317 
13318 	} else {
13319 		tg3_flag_clear(tp, NVRAM);
13320 		tg3_flag_clear(tp, NVRAM_BUFFERED);
13321 
13322 		tg3_get_eeprom_size(tp);
13323 	}
13324 }
13325 
13326 struct subsys_tbl_ent {
13327 	u16 subsys_vendor, subsys_devid;
13328 	u32 phy_id;
13329 };
13330 
13331 static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = {
13332 	/* Broadcom boards. */
13333 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13334 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
13335 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13336 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
13337 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13338 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
13339 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13340 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
13341 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13342 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
13343 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13344 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
13345 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13346 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
13347 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13348 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
13349 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13350 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
13351 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13352 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
13353 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13354 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
13355 
13356 	/* 3com boards. */
13357 	{ TG3PCI_SUBVENDOR_ID_3COM,
13358 	  TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
13359 	{ TG3PCI_SUBVENDOR_ID_3COM,
13360 	  TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
13361 	{ TG3PCI_SUBVENDOR_ID_3COM,
13362 	  TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
13363 	{ TG3PCI_SUBVENDOR_ID_3COM,
13364 	  TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
13365 	{ TG3PCI_SUBVENDOR_ID_3COM,
13366 	  TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
13367 
13368 	/* DELL boards. */
13369 	{ TG3PCI_SUBVENDOR_ID_DELL,
13370 	  TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
13371 	{ TG3PCI_SUBVENDOR_ID_DELL,
13372 	  TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
13373 	{ TG3PCI_SUBVENDOR_ID_DELL,
13374 	  TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
13375 	{ TG3PCI_SUBVENDOR_ID_DELL,
13376 	  TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
13377 
13378 	/* Compaq boards. */
13379 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13380 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
13381 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13382 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
13383 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13384 	  TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
13385 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13386 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
13387 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13388 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
13389 
13390 	/* IBM boards. */
13391 	{ TG3PCI_SUBVENDOR_ID_IBM,
13392 	  TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
13393 };
13394 
13395 static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp)
13396 {
13397 	int i;
13398 
13399 	for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
13400 		if ((subsys_id_to_phy_id[i].subsys_vendor ==
13401 		     tp->pdev->subsystem_vendor) &&
13402 		    (subsys_id_to_phy_id[i].subsys_devid ==
13403 		     tp->pdev->subsystem_device))
13404 			return &subsys_id_to_phy_id[i];
13405 	}
13406 	return NULL;
13407 }
13408 
13409 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
13410 {
13411 	u32 val;
13412 
13413 	tp->phy_id = TG3_PHY_ID_INVALID;
13414 	tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13415 
13416 	/* Assume an onboard device and WOL capable by default.  */
13417 	tg3_flag_set(tp, EEPROM_WRITE_PROT);
13418 	tg3_flag_set(tp, WOL_CAP);
13419 
13420 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
13421 		if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
13422 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13423 			tg3_flag_set(tp, IS_NIC);
13424 		}
13425 		val = tr32(VCPU_CFGSHDW);
13426 		if (val & VCPU_CFGSHDW_ASPM_DBNC)
13427 			tg3_flag_set(tp, ASPM_WORKAROUND);
13428 		if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
13429 		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
13430 			tg3_flag_set(tp, WOL_ENABLE);
13431 			device_set_wakeup_enable(&tp->pdev->dev, true);
13432 		}
13433 		goto done;
13434 	}
13435 
13436 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
13437 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
13438 		u32 nic_cfg, led_cfg;
13439 		u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
13440 		int eeprom_phy_serdes = 0;
13441 
13442 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
13443 		tp->nic_sram_data_cfg = nic_cfg;
13444 
13445 		tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
13446 		ver >>= NIC_SRAM_DATA_VER_SHIFT;
13447 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13448 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
13449 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 &&
13450 		    (ver > 0) && (ver < 0x100))
13451 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
13452 
13453 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13454 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
13455 
13456 		if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
13457 		    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
13458 			eeprom_phy_serdes = 1;
13459 
13460 		tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
13461 		if (nic_phy_id != 0) {
13462 			u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
13463 			u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
13464 
13465 			eeprom_phy_id  = (id1 >> 16) << 10;
13466 			eeprom_phy_id |= (id2 & 0xfc00) << 16;
13467 			eeprom_phy_id |= (id2 & 0x03ff) <<  0;
13468 		} else
13469 			eeprom_phy_id = 0;
13470 
13471 		tp->phy_id = eeprom_phy_id;
13472 		if (eeprom_phy_serdes) {
13473 			if (!tg3_flag(tp, 5705_PLUS))
13474 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13475 			else
13476 				tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
13477 		}
13478 
13479 		if (tg3_flag(tp, 5750_PLUS))
13480 			led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
13481 				    SHASTA_EXT_LED_MODE_MASK);
13482 		else
13483 			led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
13484 
13485 		switch (led_cfg) {
13486 		default:
13487 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
13488 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13489 			break;
13490 
13491 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
13492 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13493 			break;
13494 
13495 		case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
13496 			tp->led_ctrl = LED_CTRL_MODE_MAC;
13497 
13498 			/* Default to PHY_1_MODE if 0 (MAC_MODE) is
13499 			 * read on some older 5700/5701 bootcode.
13500 			 */
13501 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
13502 			    ASIC_REV_5700 ||
13503 			    GET_ASIC_REV(tp->pci_chip_rev_id) ==
13504 			    ASIC_REV_5701)
13505 				tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13506 
13507 			break;
13508 
13509 		case SHASTA_EXT_LED_SHARED:
13510 			tp->led_ctrl = LED_CTRL_MODE_SHARED;
13511 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
13512 			    tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
13513 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13514 						 LED_CTRL_MODE_PHY_2);
13515 			break;
13516 
13517 		case SHASTA_EXT_LED_MAC:
13518 			tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
13519 			break;
13520 
13521 		case SHASTA_EXT_LED_COMBO:
13522 			tp->led_ctrl = LED_CTRL_MODE_COMBO;
13523 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
13524 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13525 						 LED_CTRL_MODE_PHY_2);
13526 			break;
13527 
13528 		}
13529 
13530 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
13531 		     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
13532 		    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
13533 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
13534 
13535 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
13536 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13537 
13538 		if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
13539 			tg3_flag_set(tp, EEPROM_WRITE_PROT);
13540 			if ((tp->pdev->subsystem_vendor ==
13541 			     PCI_VENDOR_ID_ARIMA) &&
13542 			    (tp->pdev->subsystem_device == 0x205a ||
13543 			     tp->pdev->subsystem_device == 0x2063))
13544 				tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13545 		} else {
13546 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13547 			tg3_flag_set(tp, IS_NIC);
13548 		}
13549 
13550 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
13551 			tg3_flag_set(tp, ENABLE_ASF);
13552 			if (tg3_flag(tp, 5750_PLUS))
13553 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
13554 		}
13555 
13556 		if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
13557 		    tg3_flag(tp, 5750_PLUS))
13558 			tg3_flag_set(tp, ENABLE_APE);
13559 
13560 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
13561 		    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
13562 			tg3_flag_clear(tp, WOL_CAP);
13563 
13564 		if (tg3_flag(tp, WOL_CAP) &&
13565 		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
13566 			tg3_flag_set(tp, WOL_ENABLE);
13567 			device_set_wakeup_enable(&tp->pdev->dev, true);
13568 		}
13569 
13570 		if (cfg2 & (1 << 17))
13571 			tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
13572 
13573 		/* serdes signal pre-emphasis in register 0x590 set by */
13574 		/* bootcode if bit 18 is set */
13575 		if (cfg2 & (1 << 18))
13576 			tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
13577 
13578 		if ((tg3_flag(tp, 57765_PLUS) ||
13579 		     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
13580 		      GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) &&
13581 		    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
13582 			tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
13583 
13584 		if (tg3_flag(tp, PCI_EXPRESS) &&
13585 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
13586 		    !tg3_flag(tp, 57765_PLUS)) {
13587 			u32 cfg3;
13588 
13589 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
13590 			if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
13591 				tg3_flag_set(tp, ASPM_WORKAROUND);
13592 		}
13593 
13594 		if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
13595 			tg3_flag_set(tp, RGMII_INBAND_DISABLE);
13596 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
13597 			tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
13598 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
13599 			tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
13600 	}
13601 done:
13602 	if (tg3_flag(tp, WOL_CAP))
13603 		device_set_wakeup_enable(&tp->pdev->dev,
13604 					 tg3_flag(tp, WOL_ENABLE));
13605 	else
13606 		device_set_wakeup_capable(&tp->pdev->dev, false);
13607 }
13608 
13609 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
13610 {
13611 	int i;
13612 	u32 val;
13613 
13614 	tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
13615 	tw32(OTP_CTRL, cmd);
13616 
13617 	/* Wait for up to 1 ms for command to execute. */
13618 	for (i = 0; i < 100; i++) {
13619 		val = tr32(OTP_STATUS);
13620 		if (val & OTP_STATUS_CMD_DONE)
13621 			break;
13622 		udelay(10);
13623 	}
13624 
13625 	return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
13626 }
13627 
13628 /* Read the gphy configuration from the OTP region of the chip.  The gphy
13629  * configuration is a 32-bit value that straddles the alignment boundary.
13630  * We do two 32-bit reads and then shift and merge the results.
13631  */
13632 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
13633 {
13634 	u32 bhalf_otp, thalf_otp;
13635 
13636 	tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
13637 
13638 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
13639 		return 0;
13640 
13641 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
13642 
13643 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13644 		return 0;
13645 
13646 	thalf_otp = tr32(OTP_READ_DATA);
13647 
13648 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
13649 
13650 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13651 		return 0;
13652 
13653 	bhalf_otp = tr32(OTP_READ_DATA);
13654 
13655 	return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
13656 }
13657 
13658 static void __devinit tg3_phy_init_link_config(struct tg3 *tp)
13659 {
13660 	u32 adv = ADVERTISED_Autoneg;
13661 
13662 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
13663 		adv |= ADVERTISED_1000baseT_Half |
13664 		       ADVERTISED_1000baseT_Full;
13665 
13666 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
13667 		adv |= ADVERTISED_100baseT_Half |
13668 		       ADVERTISED_100baseT_Full |
13669 		       ADVERTISED_10baseT_Half |
13670 		       ADVERTISED_10baseT_Full |
13671 		       ADVERTISED_TP;
13672 	else
13673 		adv |= ADVERTISED_FIBRE;
13674 
13675 	tp->link_config.advertising = adv;
13676 	tp->link_config.speed = SPEED_UNKNOWN;
13677 	tp->link_config.duplex = DUPLEX_UNKNOWN;
13678 	tp->link_config.autoneg = AUTONEG_ENABLE;
13679 	tp->link_config.active_speed = SPEED_UNKNOWN;
13680 	tp->link_config.active_duplex = DUPLEX_UNKNOWN;
13681 
13682 	tp->old_link = -1;
13683 }
13684 
13685 static int __devinit tg3_phy_probe(struct tg3 *tp)
13686 {
13687 	u32 hw_phy_id_1, hw_phy_id_2;
13688 	u32 hw_phy_id, hw_phy_id_masked;
13689 	int err;
13690 
13691 	/* flow control autonegotiation is default behavior */
13692 	tg3_flag_set(tp, PAUSE_AUTONEG);
13693 	tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
13694 
13695 	if (tg3_flag(tp, ENABLE_APE)) {
13696 		switch (tp->pci_fn) {
13697 		case 0:
13698 			tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
13699 			break;
13700 		case 1:
13701 			tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
13702 			break;
13703 		case 2:
13704 			tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
13705 			break;
13706 		case 3:
13707 			tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
13708 			break;
13709 		}
13710 	}
13711 
13712 	if (tg3_flag(tp, USE_PHYLIB))
13713 		return tg3_phy_init(tp);
13714 
13715 	/* Reading the PHY ID register can conflict with ASF
13716 	 * firmware access to the PHY hardware.
13717 	 */
13718 	err = 0;
13719 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
13720 		hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
13721 	} else {
13722 		/* Now read the physical PHY_ID from the chip and verify
13723 		 * that it is sane.  If it doesn't look good, we fall back
13724 		 * to either the hard-coded table based PHY_ID and failing
13725 		 * that the value found in the eeprom area.
13726 		 */
13727 		err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
13728 		err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
13729 
13730 		hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
13731 		hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
13732 		hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
13733 
13734 		hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
13735 	}
13736 
13737 	if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
13738 		tp->phy_id = hw_phy_id;
13739 		if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
13740 			tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13741 		else
13742 			tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
13743 	} else {
13744 		if (tp->phy_id != TG3_PHY_ID_INVALID) {
13745 			/* Do nothing, phy ID already set up in
13746 			 * tg3_get_eeprom_hw_cfg().
13747 			 */
13748 		} else {
13749 			struct subsys_tbl_ent *p;
13750 
13751 			/* No eeprom signature?  Try the hardcoded
13752 			 * subsys device table.
13753 			 */
13754 			p = tg3_lookup_by_subsys(tp);
13755 			if (!p)
13756 				return -ENODEV;
13757 
13758 			tp->phy_id = p->phy_id;
13759 			if (!tp->phy_id ||
13760 			    tp->phy_id == TG3_PHY_ID_BCM8002)
13761 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
13762 		}
13763 	}
13764 
13765 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13766 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
13767 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 ||
13768 	     (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 &&
13769 	      tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) ||
13770 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 &&
13771 	      tp->pci_chip_rev_id != CHIPREV_ID_57765_A0)))
13772 		tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
13773 
13774 	tg3_phy_init_link_config(tp);
13775 
13776 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13777 	    !tg3_flag(tp, ENABLE_APE) &&
13778 	    !tg3_flag(tp, ENABLE_ASF)) {
13779 		u32 bmsr, dummy;
13780 
13781 		tg3_readphy(tp, MII_BMSR, &bmsr);
13782 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
13783 		    (bmsr & BMSR_LSTATUS))
13784 			goto skip_phy_reset;
13785 
13786 		err = tg3_phy_reset(tp);
13787 		if (err)
13788 			return err;
13789 
13790 		tg3_phy_set_wirespeed(tp);
13791 
13792 		if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
13793 			tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
13794 					    tp->link_config.flowctrl);
13795 
13796 			tg3_writephy(tp, MII_BMCR,
13797 				     BMCR_ANENABLE | BMCR_ANRESTART);
13798 		}
13799 	}
13800 
13801 skip_phy_reset:
13802 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
13803 		err = tg3_init_5401phy_dsp(tp);
13804 		if (err)
13805 			return err;
13806 
13807 		err = tg3_init_5401phy_dsp(tp);
13808 	}
13809 
13810 	return err;
13811 }
13812 
13813 static void __devinit tg3_read_vpd(struct tg3 *tp)
13814 {
13815 	u8 *vpd_data;
13816 	unsigned int block_end, rosize, len;
13817 	u32 vpdlen;
13818 	int j, i = 0;
13819 
13820 	vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
13821 	if (!vpd_data)
13822 		goto out_no_vpd;
13823 
13824 	i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
13825 	if (i < 0)
13826 		goto out_not_found;
13827 
13828 	rosize = pci_vpd_lrdt_size(&vpd_data[i]);
13829 	block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
13830 	i += PCI_VPD_LRDT_TAG_SIZE;
13831 
13832 	if (block_end > vpdlen)
13833 		goto out_not_found;
13834 
13835 	j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13836 				      PCI_VPD_RO_KEYWORD_MFR_ID);
13837 	if (j > 0) {
13838 		len = pci_vpd_info_field_size(&vpd_data[j]);
13839 
13840 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
13841 		if (j + len > block_end || len != 4 ||
13842 		    memcmp(&vpd_data[j], "1028", 4))
13843 			goto partno;
13844 
13845 		j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13846 					      PCI_VPD_RO_KEYWORD_VENDOR0);
13847 		if (j < 0)
13848 			goto partno;
13849 
13850 		len = pci_vpd_info_field_size(&vpd_data[j]);
13851 
13852 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
13853 		if (j + len > block_end)
13854 			goto partno;
13855 
13856 		memcpy(tp->fw_ver, &vpd_data[j], len);
13857 		strncat(tp->fw_ver, " bc ", vpdlen - len - 1);
13858 	}
13859 
13860 partno:
13861 	i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13862 				      PCI_VPD_RO_KEYWORD_PARTNO);
13863 	if (i < 0)
13864 		goto out_not_found;
13865 
13866 	len = pci_vpd_info_field_size(&vpd_data[i]);
13867 
13868 	i += PCI_VPD_INFO_FLD_HDR_SIZE;
13869 	if (len > TG3_BPN_SIZE ||
13870 	    (len + i) > vpdlen)
13871 		goto out_not_found;
13872 
13873 	memcpy(tp->board_part_number, &vpd_data[i], len);
13874 
13875 out_not_found:
13876 	kfree(vpd_data);
13877 	if (tp->board_part_number[0])
13878 		return;
13879 
13880 out_no_vpd:
13881 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
13882 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717)
13883 			strcpy(tp->board_part_number, "BCM5717");
13884 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
13885 			strcpy(tp->board_part_number, "BCM5718");
13886 		else
13887 			goto nomatch;
13888 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
13889 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
13890 			strcpy(tp->board_part_number, "BCM57780");
13891 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
13892 			strcpy(tp->board_part_number, "BCM57760");
13893 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
13894 			strcpy(tp->board_part_number, "BCM57790");
13895 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
13896 			strcpy(tp->board_part_number, "BCM57788");
13897 		else
13898 			goto nomatch;
13899 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
13900 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
13901 			strcpy(tp->board_part_number, "BCM57761");
13902 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
13903 			strcpy(tp->board_part_number, "BCM57765");
13904 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
13905 			strcpy(tp->board_part_number, "BCM57781");
13906 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
13907 			strcpy(tp->board_part_number, "BCM57785");
13908 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
13909 			strcpy(tp->board_part_number, "BCM57791");
13910 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
13911 			strcpy(tp->board_part_number, "BCM57795");
13912 		else
13913 			goto nomatch;
13914 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) {
13915 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
13916 			strcpy(tp->board_part_number, "BCM57762");
13917 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
13918 			strcpy(tp->board_part_number, "BCM57766");
13919 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
13920 			strcpy(tp->board_part_number, "BCM57782");
13921 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
13922 			strcpy(tp->board_part_number, "BCM57786");
13923 		else
13924 			goto nomatch;
13925 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
13926 		strcpy(tp->board_part_number, "BCM95906");
13927 	} else {
13928 nomatch:
13929 		strcpy(tp->board_part_number, "none");
13930 	}
13931 }
13932 
13933 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
13934 {
13935 	u32 val;
13936 
13937 	if (tg3_nvram_read(tp, offset, &val) ||
13938 	    (val & 0xfc000000) != 0x0c000000 ||
13939 	    tg3_nvram_read(tp, offset + 4, &val) ||
13940 	    val != 0)
13941 		return 0;
13942 
13943 	return 1;
13944 }
13945 
13946 static void __devinit tg3_read_bc_ver(struct tg3 *tp)
13947 {
13948 	u32 val, offset, start, ver_offset;
13949 	int i, dst_off;
13950 	bool newver = false;
13951 
13952 	if (tg3_nvram_read(tp, 0xc, &offset) ||
13953 	    tg3_nvram_read(tp, 0x4, &start))
13954 		return;
13955 
13956 	offset = tg3_nvram_logical_addr(tp, offset);
13957 
13958 	if (tg3_nvram_read(tp, offset, &val))
13959 		return;
13960 
13961 	if ((val & 0xfc000000) == 0x0c000000) {
13962 		if (tg3_nvram_read(tp, offset + 4, &val))
13963 			return;
13964 
13965 		if (val == 0)
13966 			newver = true;
13967 	}
13968 
13969 	dst_off = strlen(tp->fw_ver);
13970 
13971 	if (newver) {
13972 		if (TG3_VER_SIZE - dst_off < 16 ||
13973 		    tg3_nvram_read(tp, offset + 8, &ver_offset))
13974 			return;
13975 
13976 		offset = offset + ver_offset - start;
13977 		for (i = 0; i < 16; i += 4) {
13978 			__be32 v;
13979 			if (tg3_nvram_read_be32(tp, offset + i, &v))
13980 				return;
13981 
13982 			memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
13983 		}
13984 	} else {
13985 		u32 major, minor;
13986 
13987 		if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
13988 			return;
13989 
13990 		major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
13991 			TG3_NVM_BCVER_MAJSFT;
13992 		minor = ver_offset & TG3_NVM_BCVER_MINMSK;
13993 		snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
13994 			 "v%d.%02d", major, minor);
13995 	}
13996 }
13997 
13998 static void __devinit tg3_read_hwsb_ver(struct tg3 *tp)
13999 {
14000 	u32 val, major, minor;
14001 
14002 	/* Use native endian representation */
14003 	if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
14004 		return;
14005 
14006 	major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
14007 		TG3_NVM_HWSB_CFG1_MAJSFT;
14008 	minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
14009 		TG3_NVM_HWSB_CFG1_MINSFT;
14010 
14011 	snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
14012 }
14013 
14014 static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val)
14015 {
14016 	u32 offset, major, minor, build;
14017 
14018 	strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
14019 
14020 	if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
14021 		return;
14022 
14023 	switch (val & TG3_EEPROM_SB_REVISION_MASK) {
14024 	case TG3_EEPROM_SB_REVISION_0:
14025 		offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
14026 		break;
14027 	case TG3_EEPROM_SB_REVISION_2:
14028 		offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
14029 		break;
14030 	case TG3_EEPROM_SB_REVISION_3:
14031 		offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
14032 		break;
14033 	case TG3_EEPROM_SB_REVISION_4:
14034 		offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
14035 		break;
14036 	case TG3_EEPROM_SB_REVISION_5:
14037 		offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
14038 		break;
14039 	case TG3_EEPROM_SB_REVISION_6:
14040 		offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
14041 		break;
14042 	default:
14043 		return;
14044 	}
14045 
14046 	if (tg3_nvram_read(tp, offset, &val))
14047 		return;
14048 
14049 	build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
14050 		TG3_EEPROM_SB_EDH_BLD_SHFT;
14051 	major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
14052 		TG3_EEPROM_SB_EDH_MAJ_SHFT;
14053 	minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
14054 
14055 	if (minor > 99 || build > 26)
14056 		return;
14057 
14058 	offset = strlen(tp->fw_ver);
14059 	snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
14060 		 " v%d.%02d", major, minor);
14061 
14062 	if (build > 0) {
14063 		offset = strlen(tp->fw_ver);
14064 		if (offset < TG3_VER_SIZE - 1)
14065 			tp->fw_ver[offset] = 'a' + build - 1;
14066 	}
14067 }
14068 
14069 static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp)
14070 {
14071 	u32 val, offset, start;
14072 	int i, vlen;
14073 
14074 	for (offset = TG3_NVM_DIR_START;
14075 	     offset < TG3_NVM_DIR_END;
14076 	     offset += TG3_NVM_DIRENT_SIZE) {
14077 		if (tg3_nvram_read(tp, offset, &val))
14078 			return;
14079 
14080 		if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
14081 			break;
14082 	}
14083 
14084 	if (offset == TG3_NVM_DIR_END)
14085 		return;
14086 
14087 	if (!tg3_flag(tp, 5705_PLUS))
14088 		start = 0x08000000;
14089 	else if (tg3_nvram_read(tp, offset - 4, &start))
14090 		return;
14091 
14092 	if (tg3_nvram_read(tp, offset + 4, &offset) ||
14093 	    !tg3_fw_img_is_valid(tp, offset) ||
14094 	    tg3_nvram_read(tp, offset + 8, &val))
14095 		return;
14096 
14097 	offset += val - start;
14098 
14099 	vlen = strlen(tp->fw_ver);
14100 
14101 	tp->fw_ver[vlen++] = ',';
14102 	tp->fw_ver[vlen++] = ' ';
14103 
14104 	for (i = 0; i < 4; i++) {
14105 		__be32 v;
14106 		if (tg3_nvram_read_be32(tp, offset, &v))
14107 			return;
14108 
14109 		offset += sizeof(v);
14110 
14111 		if (vlen > TG3_VER_SIZE - sizeof(v)) {
14112 			memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
14113 			break;
14114 		}
14115 
14116 		memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
14117 		vlen += sizeof(v);
14118 	}
14119 }
14120 
14121 static void __devinit tg3_probe_ncsi(struct tg3 *tp)
14122 {
14123 	u32 apedata;
14124 
14125 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
14126 	if (apedata != APE_SEG_SIG_MAGIC)
14127 		return;
14128 
14129 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
14130 	if (!(apedata & APE_FW_STATUS_READY))
14131 		return;
14132 
14133 	if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
14134 		tg3_flag_set(tp, APE_HAS_NCSI);
14135 }
14136 
14137 static void __devinit tg3_read_dash_ver(struct tg3 *tp)
14138 {
14139 	int vlen;
14140 	u32 apedata;
14141 	char *fwtype;
14142 
14143 	apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
14144 
14145 	if (tg3_flag(tp, APE_HAS_NCSI))
14146 		fwtype = "NCSI";
14147 	else
14148 		fwtype = "DASH";
14149 
14150 	vlen = strlen(tp->fw_ver);
14151 
14152 	snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
14153 		 fwtype,
14154 		 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
14155 		 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
14156 		 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
14157 		 (apedata & APE_FW_VERSION_BLDMSK));
14158 }
14159 
14160 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
14161 {
14162 	u32 val;
14163 	bool vpd_vers = false;
14164 
14165 	if (tp->fw_ver[0] != 0)
14166 		vpd_vers = true;
14167 
14168 	if (tg3_flag(tp, NO_NVRAM)) {
14169 		strcat(tp->fw_ver, "sb");
14170 		return;
14171 	}
14172 
14173 	if (tg3_nvram_read(tp, 0, &val))
14174 		return;
14175 
14176 	if (val == TG3_EEPROM_MAGIC)
14177 		tg3_read_bc_ver(tp);
14178 	else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
14179 		tg3_read_sb_ver(tp, val);
14180 	else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
14181 		tg3_read_hwsb_ver(tp);
14182 
14183 	if (tg3_flag(tp, ENABLE_ASF)) {
14184 		if (tg3_flag(tp, ENABLE_APE)) {
14185 			tg3_probe_ncsi(tp);
14186 			if (!vpd_vers)
14187 				tg3_read_dash_ver(tp);
14188 		} else if (!vpd_vers) {
14189 			tg3_read_mgmtfw_ver(tp);
14190 		}
14191 	}
14192 
14193 	tp->fw_ver[TG3_VER_SIZE - 1] = 0;
14194 }
14195 
14196 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
14197 {
14198 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
14199 		return TG3_RX_RET_MAX_SIZE_5717;
14200 	else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
14201 		return TG3_RX_RET_MAX_SIZE_5700;
14202 	else
14203 		return TG3_RX_RET_MAX_SIZE_5705;
14204 }
14205 
14206 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
14207 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
14208 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
14209 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
14210 	{ },
14211 };
14212 
14213 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
14214 {
14215 	struct pci_dev *peer;
14216 	unsigned int func, devnr = tp->pdev->devfn & ~7;
14217 
14218 	for (func = 0; func < 8; func++) {
14219 		peer = pci_get_slot(tp->pdev->bus, devnr | func);
14220 		if (peer && peer != tp->pdev)
14221 			break;
14222 		pci_dev_put(peer);
14223 	}
14224 	/* 5704 can be configured in single-port mode, set peer to
14225 	 * tp->pdev in that case.
14226 	 */
14227 	if (!peer) {
14228 		peer = tp->pdev;
14229 		return peer;
14230 	}
14231 
14232 	/*
14233 	 * We don't need to keep the refcount elevated; there's no way
14234 	 * to remove one half of this device without removing the other
14235 	 */
14236 	pci_dev_put(peer);
14237 
14238 	return peer;
14239 }
14240 
14241 static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
14242 {
14243 	tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
14244 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
14245 		u32 reg;
14246 
14247 		/* All devices that use the alternate
14248 		 * ASIC REV location have a CPMU.
14249 		 */
14250 		tg3_flag_set(tp, CPMU_PRESENT);
14251 
14252 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
14253 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
14254 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
14255 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720)
14256 			reg = TG3PCI_GEN2_PRODID_ASICREV;
14257 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
14258 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
14259 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
14260 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
14261 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
14262 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
14263 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
14264 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
14265 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
14266 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14267 			reg = TG3PCI_GEN15_PRODID_ASICREV;
14268 		else
14269 			reg = TG3PCI_PRODID_ASICREV;
14270 
14271 		pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
14272 	}
14273 
14274 	/* Wrong chip ID in 5752 A0. This code can be removed later
14275 	 * as A0 is not in production.
14276 	 */
14277 	if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
14278 		tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
14279 
14280 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14281 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14282 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14283 		tg3_flag_set(tp, 5717_PLUS);
14284 
14285 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 ||
14286 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
14287 		tg3_flag_set(tp, 57765_CLASS);
14288 
14289 	if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS))
14290 		tg3_flag_set(tp, 57765_PLUS);
14291 
14292 	/* Intentionally exclude ASIC_REV_5906 */
14293 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14294 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
14295 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14296 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14297 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14298 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14299 	    tg3_flag(tp, 57765_PLUS))
14300 		tg3_flag_set(tp, 5755_PLUS);
14301 
14302 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
14303 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14304 		tg3_flag_set(tp, 5780_CLASS);
14305 
14306 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
14307 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
14308 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
14309 	    tg3_flag(tp, 5755_PLUS) ||
14310 	    tg3_flag(tp, 5780_CLASS))
14311 		tg3_flag_set(tp, 5750_PLUS);
14312 
14313 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
14314 	    tg3_flag(tp, 5750_PLUS))
14315 		tg3_flag_set(tp, 5705_PLUS);
14316 }
14317 
14318 static int __devinit tg3_get_invariants(struct tg3 *tp)
14319 {
14320 	u32 misc_ctrl_reg;
14321 	u32 pci_state_reg, grc_misc_cfg;
14322 	u32 val;
14323 	u16 pci_cmd;
14324 	int err;
14325 
14326 	/* Force memory write invalidate off.  If we leave it on,
14327 	 * then on 5700_BX chips we have to enable a workaround.
14328 	 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
14329 	 * to match the cacheline size.  The Broadcom driver have this
14330 	 * workaround but turns MWI off all the times so never uses
14331 	 * it.  This seems to suggest that the workaround is insufficient.
14332 	 */
14333 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14334 	pci_cmd &= ~PCI_COMMAND_INVALIDATE;
14335 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14336 
14337 	/* Important! -- Make sure register accesses are byteswapped
14338 	 * correctly.  Also, for those chips that require it, make
14339 	 * sure that indirect register accesses are enabled before
14340 	 * the first operation.
14341 	 */
14342 	pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14343 			      &misc_ctrl_reg);
14344 	tp->misc_host_ctrl |= (misc_ctrl_reg &
14345 			       MISC_HOST_CTRL_CHIPREV);
14346 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14347 			       tp->misc_host_ctrl);
14348 
14349 	tg3_detect_asic_rev(tp, misc_ctrl_reg);
14350 
14351 	/* If we have 5702/03 A1 or A2 on certain ICH chipsets,
14352 	 * we need to disable memory and use config. cycles
14353 	 * only to access all registers. The 5702/03 chips
14354 	 * can mistakenly decode the special cycles from the
14355 	 * ICH chipsets as memory write cycles, causing corruption
14356 	 * of register and memory space. Only certain ICH bridges
14357 	 * will drive special cycles with non-zero data during the
14358 	 * address phase which can fall within the 5703's address
14359 	 * range. This is not an ICH bug as the PCI spec allows
14360 	 * non-zero address during special cycles. However, only
14361 	 * these ICH bridges are known to drive non-zero addresses
14362 	 * during special cycles.
14363 	 *
14364 	 * Since special cycles do not cross PCI bridges, we only
14365 	 * enable this workaround if the 5703 is on the secondary
14366 	 * bus of these ICH bridges.
14367 	 */
14368 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
14369 	    (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
14370 		static struct tg3_dev_id {
14371 			u32	vendor;
14372 			u32	device;
14373 			u32	rev;
14374 		} ich_chipsets[] = {
14375 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
14376 			  PCI_ANY_ID },
14377 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
14378 			  PCI_ANY_ID },
14379 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
14380 			  0xa },
14381 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
14382 			  PCI_ANY_ID },
14383 			{ },
14384 		};
14385 		struct tg3_dev_id *pci_id = &ich_chipsets[0];
14386 		struct pci_dev *bridge = NULL;
14387 
14388 		while (pci_id->vendor != 0) {
14389 			bridge = pci_get_device(pci_id->vendor, pci_id->device,
14390 						bridge);
14391 			if (!bridge) {
14392 				pci_id++;
14393 				continue;
14394 			}
14395 			if (pci_id->rev != PCI_ANY_ID) {
14396 				if (bridge->revision > pci_id->rev)
14397 					continue;
14398 			}
14399 			if (bridge->subordinate &&
14400 			    (bridge->subordinate->number ==
14401 			     tp->pdev->bus->number)) {
14402 				tg3_flag_set(tp, ICH_WORKAROUND);
14403 				pci_dev_put(bridge);
14404 				break;
14405 			}
14406 		}
14407 	}
14408 
14409 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
14410 		static struct tg3_dev_id {
14411 			u32	vendor;
14412 			u32	device;
14413 		} bridge_chipsets[] = {
14414 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
14415 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
14416 			{ },
14417 		};
14418 		struct tg3_dev_id *pci_id = &bridge_chipsets[0];
14419 		struct pci_dev *bridge = NULL;
14420 
14421 		while (pci_id->vendor != 0) {
14422 			bridge = pci_get_device(pci_id->vendor,
14423 						pci_id->device,
14424 						bridge);
14425 			if (!bridge) {
14426 				pci_id++;
14427 				continue;
14428 			}
14429 			if (bridge->subordinate &&
14430 			    (bridge->subordinate->number <=
14431 			     tp->pdev->bus->number) &&
14432 			    (bridge->subordinate->busn_res.end >=
14433 			     tp->pdev->bus->number)) {
14434 				tg3_flag_set(tp, 5701_DMA_BUG);
14435 				pci_dev_put(bridge);
14436 				break;
14437 			}
14438 		}
14439 	}
14440 
14441 	/* The EPB bridge inside 5714, 5715, and 5780 cannot support
14442 	 * DMA addresses > 40-bit. This bridge may have other additional
14443 	 * 57xx devices behind it in some 4-port NIC designs for example.
14444 	 * Any tg3 device found behind the bridge will also need the 40-bit
14445 	 * DMA workaround.
14446 	 */
14447 	if (tg3_flag(tp, 5780_CLASS)) {
14448 		tg3_flag_set(tp, 40BIT_DMA_BUG);
14449 		tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
14450 	} else {
14451 		struct pci_dev *bridge = NULL;
14452 
14453 		do {
14454 			bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
14455 						PCI_DEVICE_ID_SERVERWORKS_EPB,
14456 						bridge);
14457 			if (bridge && bridge->subordinate &&
14458 			    (bridge->subordinate->number <=
14459 			     tp->pdev->bus->number) &&
14460 			    (bridge->subordinate->busn_res.end >=
14461 			     tp->pdev->bus->number)) {
14462 				tg3_flag_set(tp, 40BIT_DMA_BUG);
14463 				pci_dev_put(bridge);
14464 				break;
14465 			}
14466 		} while (bridge);
14467 	}
14468 
14469 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14470 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14471 		tp->pdev_peer = tg3_find_peer(tp);
14472 
14473 	/* Determine TSO capabilities */
14474 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0)
14475 		; /* Do nothing. HW bug. */
14476 	else if (tg3_flag(tp, 57765_PLUS))
14477 		tg3_flag_set(tp, HW_TSO_3);
14478 	else if (tg3_flag(tp, 5755_PLUS) ||
14479 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14480 		tg3_flag_set(tp, HW_TSO_2);
14481 	else if (tg3_flag(tp, 5750_PLUS)) {
14482 		tg3_flag_set(tp, HW_TSO_1);
14483 		tg3_flag_set(tp, TSO_BUG);
14484 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 &&
14485 		    tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
14486 			tg3_flag_clear(tp, TSO_BUG);
14487 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14488 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
14489 		   tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
14490 			tg3_flag_set(tp, TSO_BUG);
14491 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
14492 			tp->fw_needed = FIRMWARE_TG3TSO5;
14493 		else
14494 			tp->fw_needed = FIRMWARE_TG3TSO;
14495 	}
14496 
14497 	/* Selectively allow TSO based on operating conditions */
14498 	if (tg3_flag(tp, HW_TSO_1) ||
14499 	    tg3_flag(tp, HW_TSO_2) ||
14500 	    tg3_flag(tp, HW_TSO_3) ||
14501 	    tp->fw_needed) {
14502 		/* For firmware TSO, assume ASF is disabled.
14503 		 * We'll disable TSO later if we discover ASF
14504 		 * is enabled in tg3_get_eeprom_hw_cfg().
14505 		 */
14506 		tg3_flag_set(tp, TSO_CAPABLE);
14507 	} else {
14508 		tg3_flag_clear(tp, TSO_CAPABLE);
14509 		tg3_flag_clear(tp, TSO_BUG);
14510 		tp->fw_needed = NULL;
14511 	}
14512 
14513 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
14514 		tp->fw_needed = FIRMWARE_TG3;
14515 
14516 	tp->irq_max = 1;
14517 
14518 	if (tg3_flag(tp, 5750_PLUS)) {
14519 		tg3_flag_set(tp, SUPPORT_MSI);
14520 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
14521 		    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
14522 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
14523 		     tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
14524 		     tp->pdev_peer == tp->pdev))
14525 			tg3_flag_clear(tp, SUPPORT_MSI);
14526 
14527 		if (tg3_flag(tp, 5755_PLUS) ||
14528 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14529 			tg3_flag_set(tp, 1SHOT_MSI);
14530 		}
14531 
14532 		if (tg3_flag(tp, 57765_PLUS)) {
14533 			tg3_flag_set(tp, SUPPORT_MSIX);
14534 			tp->irq_max = TG3_IRQ_MAX_VECS;
14535 			tg3_rss_init_dflt_indir_tbl(tp);
14536 		}
14537 	}
14538 
14539 	if (tg3_flag(tp, 5755_PLUS) ||
14540 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14541 		tg3_flag_set(tp, SHORT_DMA_BUG);
14542 
14543 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
14544 		tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
14545 
14546 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14547 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14548 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14549 		tg3_flag_set(tp, LRG_PROD_RING_CAP);
14550 
14551 	if (tg3_flag(tp, 57765_PLUS) &&
14552 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0)
14553 		tg3_flag_set(tp, USE_JUMBO_BDFLAG);
14554 
14555 	if (!tg3_flag(tp, 5705_PLUS) ||
14556 	    tg3_flag(tp, 5780_CLASS) ||
14557 	    tg3_flag(tp, USE_JUMBO_BDFLAG))
14558 		tg3_flag_set(tp, JUMBO_CAPABLE);
14559 
14560 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14561 			      &pci_state_reg);
14562 
14563 	if (pci_is_pcie(tp->pdev)) {
14564 		u16 lnkctl;
14565 
14566 		tg3_flag_set(tp, PCI_EXPRESS);
14567 
14568 		pci_read_config_word(tp->pdev,
14569 				     pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL,
14570 				     &lnkctl);
14571 		if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
14572 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
14573 			    ASIC_REV_5906) {
14574 				tg3_flag_clear(tp, HW_TSO_2);
14575 				tg3_flag_clear(tp, TSO_CAPABLE);
14576 			}
14577 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14578 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14579 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 ||
14580 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A1)
14581 				tg3_flag_set(tp, CLKREQ_BUG);
14582 		} else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) {
14583 			tg3_flag_set(tp, L1PLLPD_EN);
14584 		}
14585 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
14586 		/* BCM5785 devices are effectively PCIe devices, and should
14587 		 * follow PCIe codepaths, but do not have a PCIe capabilities
14588 		 * section.
14589 		 */
14590 		tg3_flag_set(tp, PCI_EXPRESS);
14591 	} else if (!tg3_flag(tp, 5705_PLUS) ||
14592 		   tg3_flag(tp, 5780_CLASS)) {
14593 		tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
14594 		if (!tp->pcix_cap) {
14595 			dev_err(&tp->pdev->dev,
14596 				"Cannot find PCI-X capability, aborting\n");
14597 			return -EIO;
14598 		}
14599 
14600 		if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
14601 			tg3_flag_set(tp, PCIX_MODE);
14602 	}
14603 
14604 	/* If we have an AMD 762 or VIA K8T800 chipset, write
14605 	 * reordering to the mailbox registers done by the host
14606 	 * controller can cause major troubles.  We read back from
14607 	 * every mailbox register write to force the writes to be
14608 	 * posted to the chip in order.
14609 	 */
14610 	if (pci_dev_present(tg3_write_reorder_chipsets) &&
14611 	    !tg3_flag(tp, PCI_EXPRESS))
14612 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
14613 
14614 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
14615 			     &tp->pci_cacheline_sz);
14616 	pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14617 			     &tp->pci_lat_timer);
14618 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14619 	    tp->pci_lat_timer < 64) {
14620 		tp->pci_lat_timer = 64;
14621 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14622 				      tp->pci_lat_timer);
14623 	}
14624 
14625 	/* Important! -- It is critical that the PCI-X hw workaround
14626 	 * situation is decided before the first MMIO register access.
14627 	 */
14628 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
14629 		/* 5700 BX chips need to have their TX producer index
14630 		 * mailboxes written twice to workaround a bug.
14631 		 */
14632 		tg3_flag_set(tp, TXD_MBOX_HWBUG);
14633 
14634 		/* If we are in PCI-X mode, enable register write workaround.
14635 		 *
14636 		 * The workaround is to use indirect register accesses
14637 		 * for all chip writes not to mailbox registers.
14638 		 */
14639 		if (tg3_flag(tp, PCIX_MODE)) {
14640 			u32 pm_reg;
14641 
14642 			tg3_flag_set(tp, PCIX_TARGET_HWBUG);
14643 
14644 			/* The chip can have it's power management PCI config
14645 			 * space registers clobbered due to this bug.
14646 			 * So explicitly force the chip into D0 here.
14647 			 */
14648 			pci_read_config_dword(tp->pdev,
14649 					      tp->pm_cap + PCI_PM_CTRL,
14650 					      &pm_reg);
14651 			pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
14652 			pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
14653 			pci_write_config_dword(tp->pdev,
14654 					       tp->pm_cap + PCI_PM_CTRL,
14655 					       pm_reg);
14656 
14657 			/* Also, force SERR#/PERR# in PCI command. */
14658 			pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14659 			pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
14660 			pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14661 		}
14662 	}
14663 
14664 	if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
14665 		tg3_flag_set(tp, PCI_HIGH_SPEED);
14666 	if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
14667 		tg3_flag_set(tp, PCI_32BIT);
14668 
14669 	/* Chip-specific fixup from Broadcom driver */
14670 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
14671 	    (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
14672 		pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
14673 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
14674 	}
14675 
14676 	/* Default fast path register access methods */
14677 	tp->read32 = tg3_read32;
14678 	tp->write32 = tg3_write32;
14679 	tp->read32_mbox = tg3_read32;
14680 	tp->write32_mbox = tg3_write32;
14681 	tp->write32_tx_mbox = tg3_write32;
14682 	tp->write32_rx_mbox = tg3_write32;
14683 
14684 	/* Various workaround register access methods */
14685 	if (tg3_flag(tp, PCIX_TARGET_HWBUG))
14686 		tp->write32 = tg3_write_indirect_reg32;
14687 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
14688 		 (tg3_flag(tp, PCI_EXPRESS) &&
14689 		  tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
14690 		/*
14691 		 * Back to back register writes can cause problems on these
14692 		 * chips, the workaround is to read back all reg writes
14693 		 * except those to mailbox regs.
14694 		 *
14695 		 * See tg3_write_indirect_reg32().
14696 		 */
14697 		tp->write32 = tg3_write_flush_reg32;
14698 	}
14699 
14700 	if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
14701 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
14702 		if (tg3_flag(tp, MBOX_WRITE_REORDER))
14703 			tp->write32_rx_mbox = tg3_write_flush_reg32;
14704 	}
14705 
14706 	if (tg3_flag(tp, ICH_WORKAROUND)) {
14707 		tp->read32 = tg3_read_indirect_reg32;
14708 		tp->write32 = tg3_write_indirect_reg32;
14709 		tp->read32_mbox = tg3_read_indirect_mbox;
14710 		tp->write32_mbox = tg3_write_indirect_mbox;
14711 		tp->write32_tx_mbox = tg3_write_indirect_mbox;
14712 		tp->write32_rx_mbox = tg3_write_indirect_mbox;
14713 
14714 		iounmap(tp->regs);
14715 		tp->regs = NULL;
14716 
14717 		pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14718 		pci_cmd &= ~PCI_COMMAND_MEMORY;
14719 		pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14720 	}
14721 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14722 		tp->read32_mbox = tg3_read32_mbox_5906;
14723 		tp->write32_mbox = tg3_write32_mbox_5906;
14724 		tp->write32_tx_mbox = tg3_write32_mbox_5906;
14725 		tp->write32_rx_mbox = tg3_write32_mbox_5906;
14726 	}
14727 
14728 	if (tp->write32 == tg3_write_indirect_reg32 ||
14729 	    (tg3_flag(tp, PCIX_MODE) &&
14730 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14731 	      GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
14732 		tg3_flag_set(tp, SRAM_USE_CONFIG);
14733 
14734 	/* The memory arbiter has to be enabled in order for SRAM accesses
14735 	 * to succeed.  Normally on powerup the tg3 chip firmware will make
14736 	 * sure it is enabled, but other entities such as system netboot
14737 	 * code might disable it.
14738 	 */
14739 	val = tr32(MEMARB_MODE);
14740 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
14741 
14742 	tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
14743 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
14744 	    tg3_flag(tp, 5780_CLASS)) {
14745 		if (tg3_flag(tp, PCIX_MODE)) {
14746 			pci_read_config_dword(tp->pdev,
14747 					      tp->pcix_cap + PCI_X_STATUS,
14748 					      &val);
14749 			tp->pci_fn = val & 0x7;
14750 		}
14751 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
14752 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14753 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14754 		    NIC_SRAM_CPMUSTAT_SIG) {
14755 			tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717;
14756 			tp->pci_fn = tp->pci_fn ? 1 : 0;
14757 		}
14758 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14759 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
14760 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14761 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14762 		    NIC_SRAM_CPMUSTAT_SIG) {
14763 			tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
14764 				     TG3_CPMU_STATUS_FSHFT_5719;
14765 		}
14766 	}
14767 
14768 	/* Get eeprom hw config before calling tg3_set_power_state().
14769 	 * In particular, the TG3_FLAG_IS_NIC flag must be
14770 	 * determined before calling tg3_set_power_state() so that
14771 	 * we know whether or not to switch out of Vaux power.
14772 	 * When the flag is set, it means that GPIO1 is used for eeprom
14773 	 * write protect and also implies that it is a LOM where GPIOs
14774 	 * are not used to switch power.
14775 	 */
14776 	tg3_get_eeprom_hw_cfg(tp);
14777 
14778 	if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) {
14779 		tg3_flag_clear(tp, TSO_CAPABLE);
14780 		tg3_flag_clear(tp, TSO_BUG);
14781 		tp->fw_needed = NULL;
14782 	}
14783 
14784 	if (tg3_flag(tp, ENABLE_APE)) {
14785 		/* Allow reads and writes to the
14786 		 * APE register and memory space.
14787 		 */
14788 		pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
14789 				 PCISTATE_ALLOW_APE_SHMEM_WR |
14790 				 PCISTATE_ALLOW_APE_PSPACE_WR;
14791 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
14792 				       pci_state_reg);
14793 
14794 		tg3_ape_lock_init(tp);
14795 	}
14796 
14797 	/* Set up tp->grc_local_ctrl before calling
14798 	 * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
14799 	 * will bring 5700's external PHY out of reset.
14800 	 * It is also used as eeprom write protect on LOMs.
14801 	 */
14802 	tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
14803 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14804 	    tg3_flag(tp, EEPROM_WRITE_PROT))
14805 		tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
14806 				       GRC_LCLCTRL_GPIO_OUTPUT1);
14807 	/* Unused GPIO3 must be driven as output on 5752 because there
14808 	 * are no pull-up resistors on unused GPIO pins.
14809 	 */
14810 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
14811 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
14812 
14813 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14814 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14815 	    tg3_flag(tp, 57765_CLASS))
14816 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14817 
14818 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
14819 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
14820 		/* Turn off the debug UART. */
14821 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
14822 		if (tg3_flag(tp, IS_NIC))
14823 			/* Keep VMain power. */
14824 			tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
14825 					      GRC_LCLCTRL_GPIO_OUTPUT0;
14826 	}
14827 
14828 	/* Switch out of Vaux if it is a NIC */
14829 	tg3_pwrsrc_switch_to_vmain(tp);
14830 
14831 	/* Derive initial jumbo mode from MTU assigned in
14832 	 * ether_setup() via the alloc_etherdev() call
14833 	 */
14834 	if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
14835 		tg3_flag_set(tp, JUMBO_RING_ENABLE);
14836 
14837 	/* Determine WakeOnLan speed to use. */
14838 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14839 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
14840 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
14841 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
14842 		tg3_flag_clear(tp, WOL_SPEED_100MB);
14843 	} else {
14844 		tg3_flag_set(tp, WOL_SPEED_100MB);
14845 	}
14846 
14847 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
14848 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
14849 
14850 	/* A few boards don't want Ethernet@WireSpeed phy feature */
14851 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14852 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14853 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
14854 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
14855 	    (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
14856 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
14857 		tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
14858 
14859 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
14860 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
14861 		tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
14862 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
14863 		tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
14864 
14865 	if (tg3_flag(tp, 5705_PLUS) &&
14866 	    !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
14867 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
14868 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 &&
14869 	    !tg3_flag(tp, 57765_PLUS)) {
14870 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14871 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
14872 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14873 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
14874 			if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
14875 			    tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
14876 				tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
14877 			if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
14878 				tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
14879 		} else
14880 			tp->phy_flags |= TG3_PHYFLG_BER_BUG;
14881 	}
14882 
14883 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
14884 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
14885 		tp->phy_otp = tg3_read_otp_phycfg(tp);
14886 		if (tp->phy_otp == 0)
14887 			tp->phy_otp = TG3_OTP_DEFAULT;
14888 	}
14889 
14890 	if (tg3_flag(tp, CPMU_PRESENT))
14891 		tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
14892 	else
14893 		tp->mi_mode = MAC_MI_MODE_BASE;
14894 
14895 	tp->coalesce_mode = 0;
14896 	if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
14897 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
14898 		tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
14899 
14900 	/* Set these bits to enable statistics workaround. */
14901 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14902 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
14903 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) {
14904 		tp->coalesce_mode |= HOSTCC_MODE_ATTN;
14905 		tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
14906 	}
14907 
14908 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14909 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
14910 		tg3_flag_set(tp, USE_PHYLIB);
14911 
14912 	err = tg3_mdio_init(tp);
14913 	if (err)
14914 		return err;
14915 
14916 	/* Initialize data/descriptor byte/word swapping. */
14917 	val = tr32(GRC_MODE);
14918 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14919 		val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
14920 			GRC_MODE_WORD_SWAP_B2HRX_DATA |
14921 			GRC_MODE_B2HRX_ENABLE |
14922 			GRC_MODE_HTX2B_ENABLE |
14923 			GRC_MODE_HOST_STACKUP);
14924 	else
14925 		val &= GRC_MODE_HOST_STACKUP;
14926 
14927 	tw32(GRC_MODE, val | tp->grc_mode);
14928 
14929 	tg3_switch_clocks(tp);
14930 
14931 	/* Clear this out for sanity. */
14932 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
14933 
14934 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14935 			      &pci_state_reg);
14936 	if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
14937 	    !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
14938 		u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
14939 
14940 		if (chiprevid == CHIPREV_ID_5701_A0 ||
14941 		    chiprevid == CHIPREV_ID_5701_B0 ||
14942 		    chiprevid == CHIPREV_ID_5701_B2 ||
14943 		    chiprevid == CHIPREV_ID_5701_B5) {
14944 			void __iomem *sram_base;
14945 
14946 			/* Write some dummy words into the SRAM status block
14947 			 * area, see if it reads back correctly.  If the return
14948 			 * value is bad, force enable the PCIX workaround.
14949 			 */
14950 			sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
14951 
14952 			writel(0x00000000, sram_base);
14953 			writel(0x00000000, sram_base + 4);
14954 			writel(0xffffffff, sram_base + 4);
14955 			if (readl(sram_base) != 0x00000000)
14956 				tg3_flag_set(tp, PCIX_TARGET_HWBUG);
14957 		}
14958 	}
14959 
14960 	udelay(50);
14961 	tg3_nvram_init(tp);
14962 
14963 	grc_misc_cfg = tr32(GRC_MISC_CFG);
14964 	grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
14965 
14966 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14967 	    (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
14968 	     grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
14969 		tg3_flag_set(tp, IS_5788);
14970 
14971 	if (!tg3_flag(tp, IS_5788) &&
14972 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
14973 		tg3_flag_set(tp, TAGGED_STATUS);
14974 	if (tg3_flag(tp, TAGGED_STATUS)) {
14975 		tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
14976 				      HOSTCC_MODE_CLRTICK_TXBD);
14977 
14978 		tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
14979 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14980 				       tp->misc_host_ctrl);
14981 	}
14982 
14983 	/* Preserve the APE MAC_MODE bits */
14984 	if (tg3_flag(tp, ENABLE_APE))
14985 		tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
14986 	else
14987 		tp->mac_mode = 0;
14988 
14989 	/* these are limited to 10/100 only */
14990 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14991 	     (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
14992 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
14993 	     tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
14994 	     (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
14995 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
14996 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
14997 	    (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
14998 	     (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
14999 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
15000 	      tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
15001 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 ||
15002 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
15003 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
15004 	    (tp->phy_flags & TG3_PHYFLG_IS_FET))
15005 		tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
15006 
15007 	err = tg3_phy_probe(tp);
15008 	if (err) {
15009 		dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
15010 		/* ... but do not return immediately ... */
15011 		tg3_mdio_fini(tp);
15012 	}
15013 
15014 	tg3_read_vpd(tp);
15015 	tg3_read_fw_ver(tp);
15016 
15017 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
15018 		tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
15019 	} else {
15020 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
15021 			tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
15022 		else
15023 			tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
15024 	}
15025 
15026 	/* 5700 {AX,BX} chips have a broken status block link
15027 	 * change bit implementation, so we must use the
15028 	 * status register in those cases.
15029 	 */
15030 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
15031 		tg3_flag_set(tp, USE_LINKCHG_REG);
15032 	else
15033 		tg3_flag_clear(tp, USE_LINKCHG_REG);
15034 
15035 	/* The led_ctrl is set during tg3_phy_probe, here we might
15036 	 * have to force the link status polling mechanism based
15037 	 * upon subsystem IDs.
15038 	 */
15039 	if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
15040 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
15041 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
15042 		tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
15043 		tg3_flag_set(tp, USE_LINKCHG_REG);
15044 	}
15045 
15046 	/* For all SERDES we poll the MAC status register. */
15047 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
15048 		tg3_flag_set(tp, POLL_SERDES);
15049 	else
15050 		tg3_flag_clear(tp, POLL_SERDES);
15051 
15052 	tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
15053 	tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
15054 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
15055 	    tg3_flag(tp, PCIX_MODE)) {
15056 		tp->rx_offset = NET_SKB_PAD;
15057 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
15058 		tp->rx_copy_thresh = ~(u16)0;
15059 #endif
15060 	}
15061 
15062 	tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
15063 	tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
15064 	tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
15065 
15066 	tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
15067 
15068 	/* Increment the rx prod index on the rx std ring by at most
15069 	 * 8 for these chips to workaround hw errata.
15070 	 */
15071 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
15072 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
15073 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
15074 		tp->rx_std_max_post = 8;
15075 
15076 	if (tg3_flag(tp, ASPM_WORKAROUND))
15077 		tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
15078 				     PCIE_PWR_MGMT_L1_THRESH_MSK;
15079 
15080 	return err;
15081 }
15082 
15083 #ifdef CONFIG_SPARC
15084 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
15085 {
15086 	struct net_device *dev = tp->dev;
15087 	struct pci_dev *pdev = tp->pdev;
15088 	struct device_node *dp = pci_device_to_OF_node(pdev);
15089 	const unsigned char *addr;
15090 	int len;
15091 
15092 	addr = of_get_property(dp, "local-mac-address", &len);
15093 	if (addr && len == 6) {
15094 		memcpy(dev->dev_addr, addr, 6);
15095 		memcpy(dev->perm_addr, dev->dev_addr, 6);
15096 		return 0;
15097 	}
15098 	return -ENODEV;
15099 }
15100 
15101 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
15102 {
15103 	struct net_device *dev = tp->dev;
15104 
15105 	memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
15106 	memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
15107 	return 0;
15108 }
15109 #endif
15110 
15111 static int __devinit tg3_get_device_address(struct tg3 *tp)
15112 {
15113 	struct net_device *dev = tp->dev;
15114 	u32 hi, lo, mac_offset;
15115 	int addr_ok = 0;
15116 
15117 #ifdef CONFIG_SPARC
15118 	if (!tg3_get_macaddr_sparc(tp))
15119 		return 0;
15120 #endif
15121 
15122 	mac_offset = 0x7c;
15123 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
15124 	    tg3_flag(tp, 5780_CLASS)) {
15125 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
15126 			mac_offset = 0xcc;
15127 		if (tg3_nvram_lock(tp))
15128 			tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
15129 		else
15130 			tg3_nvram_unlock(tp);
15131 	} else if (tg3_flag(tp, 5717_PLUS)) {
15132 		if (tp->pci_fn & 1)
15133 			mac_offset = 0xcc;
15134 		if (tp->pci_fn > 1)
15135 			mac_offset += 0x18c;
15136 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15137 		mac_offset = 0x10;
15138 
15139 	/* First try to get it from MAC address mailbox. */
15140 	tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
15141 	if ((hi >> 16) == 0x484b) {
15142 		dev->dev_addr[0] = (hi >>  8) & 0xff;
15143 		dev->dev_addr[1] = (hi >>  0) & 0xff;
15144 
15145 		tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
15146 		dev->dev_addr[2] = (lo >> 24) & 0xff;
15147 		dev->dev_addr[3] = (lo >> 16) & 0xff;
15148 		dev->dev_addr[4] = (lo >>  8) & 0xff;
15149 		dev->dev_addr[5] = (lo >>  0) & 0xff;
15150 
15151 		/* Some old bootcode may report a 0 MAC address in SRAM */
15152 		addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
15153 	}
15154 	if (!addr_ok) {
15155 		/* Next, try NVRAM. */
15156 		if (!tg3_flag(tp, NO_NVRAM) &&
15157 		    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
15158 		    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
15159 			memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
15160 			memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
15161 		}
15162 		/* Finally just fetch it out of the MAC control regs. */
15163 		else {
15164 			hi = tr32(MAC_ADDR_0_HIGH);
15165 			lo = tr32(MAC_ADDR_0_LOW);
15166 
15167 			dev->dev_addr[5] = lo & 0xff;
15168 			dev->dev_addr[4] = (lo >> 8) & 0xff;
15169 			dev->dev_addr[3] = (lo >> 16) & 0xff;
15170 			dev->dev_addr[2] = (lo >> 24) & 0xff;
15171 			dev->dev_addr[1] = hi & 0xff;
15172 			dev->dev_addr[0] = (hi >> 8) & 0xff;
15173 		}
15174 	}
15175 
15176 	if (!is_valid_ether_addr(&dev->dev_addr[0])) {
15177 #ifdef CONFIG_SPARC
15178 		if (!tg3_get_default_macaddr_sparc(tp))
15179 			return 0;
15180 #endif
15181 		return -EINVAL;
15182 	}
15183 	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
15184 	return 0;
15185 }
15186 
15187 #define BOUNDARY_SINGLE_CACHELINE	1
15188 #define BOUNDARY_MULTI_CACHELINE	2
15189 
15190 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
15191 {
15192 	int cacheline_size;
15193 	u8 byte;
15194 	int goal;
15195 
15196 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
15197 	if (byte == 0)
15198 		cacheline_size = 1024;
15199 	else
15200 		cacheline_size = (int) byte * 4;
15201 
15202 	/* On 5703 and later chips, the boundary bits have no
15203 	 * effect.
15204 	 */
15205 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15206 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
15207 	    !tg3_flag(tp, PCI_EXPRESS))
15208 		goto out;
15209 
15210 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
15211 	goal = BOUNDARY_MULTI_CACHELINE;
15212 #else
15213 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
15214 	goal = BOUNDARY_SINGLE_CACHELINE;
15215 #else
15216 	goal = 0;
15217 #endif
15218 #endif
15219 
15220 	if (tg3_flag(tp, 57765_PLUS)) {
15221 		val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
15222 		goto out;
15223 	}
15224 
15225 	if (!goal)
15226 		goto out;
15227 
15228 	/* PCI controllers on most RISC systems tend to disconnect
15229 	 * when a device tries to burst across a cache-line boundary.
15230 	 * Therefore, letting tg3 do so just wastes PCI bandwidth.
15231 	 *
15232 	 * Unfortunately, for PCI-E there are only limited
15233 	 * write-side controls for this, and thus for reads
15234 	 * we will still get the disconnects.  We'll also waste
15235 	 * these PCI cycles for both read and write for chips
15236 	 * other than 5700 and 5701 which do not implement the
15237 	 * boundary bits.
15238 	 */
15239 	if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
15240 		switch (cacheline_size) {
15241 		case 16:
15242 		case 32:
15243 		case 64:
15244 		case 128:
15245 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15246 				val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
15247 					DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
15248 			} else {
15249 				val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
15250 					DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
15251 			}
15252 			break;
15253 
15254 		case 256:
15255 			val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
15256 				DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
15257 			break;
15258 
15259 		default:
15260 			val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
15261 				DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
15262 			break;
15263 		}
15264 	} else if (tg3_flag(tp, PCI_EXPRESS)) {
15265 		switch (cacheline_size) {
15266 		case 16:
15267 		case 32:
15268 		case 64:
15269 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15270 				val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
15271 				val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
15272 				break;
15273 			}
15274 			/* fallthrough */
15275 		case 128:
15276 		default:
15277 			val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
15278 			val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
15279 			break;
15280 		}
15281 	} else {
15282 		switch (cacheline_size) {
15283 		case 16:
15284 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15285 				val |= (DMA_RWCTRL_READ_BNDRY_16 |
15286 					DMA_RWCTRL_WRITE_BNDRY_16);
15287 				break;
15288 			}
15289 			/* fallthrough */
15290 		case 32:
15291 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15292 				val |= (DMA_RWCTRL_READ_BNDRY_32 |
15293 					DMA_RWCTRL_WRITE_BNDRY_32);
15294 				break;
15295 			}
15296 			/* fallthrough */
15297 		case 64:
15298 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15299 				val |= (DMA_RWCTRL_READ_BNDRY_64 |
15300 					DMA_RWCTRL_WRITE_BNDRY_64);
15301 				break;
15302 			}
15303 			/* fallthrough */
15304 		case 128:
15305 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15306 				val |= (DMA_RWCTRL_READ_BNDRY_128 |
15307 					DMA_RWCTRL_WRITE_BNDRY_128);
15308 				break;
15309 			}
15310 			/* fallthrough */
15311 		case 256:
15312 			val |= (DMA_RWCTRL_READ_BNDRY_256 |
15313 				DMA_RWCTRL_WRITE_BNDRY_256);
15314 			break;
15315 		case 512:
15316 			val |= (DMA_RWCTRL_READ_BNDRY_512 |
15317 				DMA_RWCTRL_WRITE_BNDRY_512);
15318 			break;
15319 		case 1024:
15320 		default:
15321 			val |= (DMA_RWCTRL_READ_BNDRY_1024 |
15322 				DMA_RWCTRL_WRITE_BNDRY_1024);
15323 			break;
15324 		}
15325 	}
15326 
15327 out:
15328 	return val;
15329 }
15330 
15331 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
15332 {
15333 	struct tg3_internal_buffer_desc test_desc;
15334 	u32 sram_dma_descs;
15335 	int i, ret;
15336 
15337 	sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
15338 
15339 	tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
15340 	tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
15341 	tw32(RDMAC_STATUS, 0);
15342 	tw32(WDMAC_STATUS, 0);
15343 
15344 	tw32(BUFMGR_MODE, 0);
15345 	tw32(FTQ_RESET, 0);
15346 
15347 	test_desc.addr_hi = ((u64) buf_dma) >> 32;
15348 	test_desc.addr_lo = buf_dma & 0xffffffff;
15349 	test_desc.nic_mbuf = 0x00002100;
15350 	test_desc.len = size;
15351 
15352 	/*
15353 	 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
15354 	 * the *second* time the tg3 driver was getting loaded after an
15355 	 * initial scan.
15356 	 *
15357 	 * Broadcom tells me:
15358 	 *   ...the DMA engine is connected to the GRC block and a DMA
15359 	 *   reset may affect the GRC block in some unpredictable way...
15360 	 *   The behavior of resets to individual blocks has not been tested.
15361 	 *
15362 	 * Broadcom noted the GRC reset will also reset all sub-components.
15363 	 */
15364 	if (to_device) {
15365 		test_desc.cqid_sqid = (13 << 8) | 2;
15366 
15367 		tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
15368 		udelay(40);
15369 	} else {
15370 		test_desc.cqid_sqid = (16 << 8) | 7;
15371 
15372 		tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
15373 		udelay(40);
15374 	}
15375 	test_desc.flags = 0x00000005;
15376 
15377 	for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
15378 		u32 val;
15379 
15380 		val = *(((u32 *)&test_desc) + i);
15381 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
15382 				       sram_dma_descs + (i * sizeof(u32)));
15383 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
15384 	}
15385 	pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
15386 
15387 	if (to_device)
15388 		tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
15389 	else
15390 		tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
15391 
15392 	ret = -ENODEV;
15393 	for (i = 0; i < 40; i++) {
15394 		u32 val;
15395 
15396 		if (to_device)
15397 			val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
15398 		else
15399 			val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
15400 		if ((val & 0xffff) == sram_dma_descs) {
15401 			ret = 0;
15402 			break;
15403 		}
15404 
15405 		udelay(100);
15406 	}
15407 
15408 	return ret;
15409 }
15410 
15411 #define TEST_BUFFER_SIZE	0x2000
15412 
15413 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
15414 	{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
15415 	{ },
15416 };
15417 
15418 static int __devinit tg3_test_dma(struct tg3 *tp)
15419 {
15420 	dma_addr_t buf_dma;
15421 	u32 *buf, saved_dma_rwctrl;
15422 	int ret = 0;
15423 
15424 	buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
15425 				 &buf_dma, GFP_KERNEL);
15426 	if (!buf) {
15427 		ret = -ENOMEM;
15428 		goto out_nofree;
15429 	}
15430 
15431 	tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
15432 			  (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
15433 
15434 	tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
15435 
15436 	if (tg3_flag(tp, 57765_PLUS))
15437 		goto out;
15438 
15439 	if (tg3_flag(tp, PCI_EXPRESS)) {
15440 		/* DMA read watermark not used on PCIE */
15441 		tp->dma_rwctrl |= 0x00180000;
15442 	} else if (!tg3_flag(tp, PCIX_MODE)) {
15443 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
15444 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
15445 			tp->dma_rwctrl |= 0x003f0000;
15446 		else
15447 			tp->dma_rwctrl |= 0x003f000f;
15448 	} else {
15449 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
15450 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
15451 			u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
15452 			u32 read_water = 0x7;
15453 
15454 			/* If the 5704 is behind the EPB bridge, we can
15455 			 * do the less restrictive ONE_DMA workaround for
15456 			 * better performance.
15457 			 */
15458 			if (tg3_flag(tp, 40BIT_DMA_BUG) &&
15459 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
15460 				tp->dma_rwctrl |= 0x8000;
15461 			else if (ccval == 0x6 || ccval == 0x7)
15462 				tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
15463 
15464 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
15465 				read_water = 4;
15466 			/* Set bit 23 to enable PCIX hw bug fix */
15467 			tp->dma_rwctrl |=
15468 				(read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
15469 				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
15470 				(1 << 23);
15471 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
15472 			/* 5780 always in PCIX mode */
15473 			tp->dma_rwctrl |= 0x00144000;
15474 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
15475 			/* 5714 always in PCIX mode */
15476 			tp->dma_rwctrl |= 0x00148000;
15477 		} else {
15478 			tp->dma_rwctrl |= 0x001b000f;
15479 		}
15480 	}
15481 
15482 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
15483 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
15484 		tp->dma_rwctrl &= 0xfffffff0;
15485 
15486 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15487 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
15488 		/* Remove this if it causes problems for some boards. */
15489 		tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
15490 
15491 		/* On 5700/5701 chips, we need to set this bit.
15492 		 * Otherwise the chip will issue cacheline transactions
15493 		 * to streamable DMA memory with not all the byte
15494 		 * enables turned on.  This is an error on several
15495 		 * RISC PCI controllers, in particular sparc64.
15496 		 *
15497 		 * On 5703/5704 chips, this bit has been reassigned
15498 		 * a different meaning.  In particular, it is used
15499 		 * on those chips to enable a PCI-X workaround.
15500 		 */
15501 		tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
15502 	}
15503 
15504 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15505 
15506 #if 0
15507 	/* Unneeded, already done by tg3_get_invariants.  */
15508 	tg3_switch_clocks(tp);
15509 #endif
15510 
15511 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15512 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
15513 		goto out;
15514 
15515 	/* It is best to perform DMA test with maximum write burst size
15516 	 * to expose the 5700/5701 write DMA bug.
15517 	 */
15518 	saved_dma_rwctrl = tp->dma_rwctrl;
15519 	tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15520 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15521 
15522 	while (1) {
15523 		u32 *p = buf, i;
15524 
15525 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
15526 			p[i] = i;
15527 
15528 		/* Send the buffer to the chip. */
15529 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
15530 		if (ret) {
15531 			dev_err(&tp->pdev->dev,
15532 				"%s: Buffer write failed. err = %d\n",
15533 				__func__, ret);
15534 			break;
15535 		}
15536 
15537 #if 0
15538 		/* validate data reached card RAM correctly. */
15539 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15540 			u32 val;
15541 			tg3_read_mem(tp, 0x2100 + (i*4), &val);
15542 			if (le32_to_cpu(val) != p[i]) {
15543 				dev_err(&tp->pdev->dev,
15544 					"%s: Buffer corrupted on device! "
15545 					"(%d != %d)\n", __func__, val, i);
15546 				/* ret = -ENODEV here? */
15547 			}
15548 			p[i] = 0;
15549 		}
15550 #endif
15551 		/* Now read it back. */
15552 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
15553 		if (ret) {
15554 			dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
15555 				"err = %d\n", __func__, ret);
15556 			break;
15557 		}
15558 
15559 		/* Verify it. */
15560 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15561 			if (p[i] == i)
15562 				continue;
15563 
15564 			if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15565 			    DMA_RWCTRL_WRITE_BNDRY_16) {
15566 				tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15567 				tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15568 				tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15569 				break;
15570 			} else {
15571 				dev_err(&tp->pdev->dev,
15572 					"%s: Buffer corrupted on read back! "
15573 					"(%d != %d)\n", __func__, p[i], i);
15574 				ret = -ENODEV;
15575 				goto out;
15576 			}
15577 		}
15578 
15579 		if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
15580 			/* Success. */
15581 			ret = 0;
15582 			break;
15583 		}
15584 	}
15585 	if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
15586 	    DMA_RWCTRL_WRITE_BNDRY_16) {
15587 		/* DMA test passed without adjusting DMA boundary,
15588 		 * now look for chipsets that are known to expose the
15589 		 * DMA bug without failing the test.
15590 		 */
15591 		if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
15592 			tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
15593 			tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
15594 		} else {
15595 			/* Safe to use the calculated DMA boundary. */
15596 			tp->dma_rwctrl = saved_dma_rwctrl;
15597 		}
15598 
15599 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
15600 	}
15601 
15602 out:
15603 	dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
15604 out_nofree:
15605 	return ret;
15606 }
15607 
15608 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
15609 {
15610 	if (tg3_flag(tp, 57765_PLUS)) {
15611 		tp->bufmgr_config.mbuf_read_dma_low_water =
15612 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15613 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15614 			DEFAULT_MB_MACRX_LOW_WATER_57765;
15615 		tp->bufmgr_config.mbuf_high_water =
15616 			DEFAULT_MB_HIGH_WATER_57765;
15617 
15618 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15619 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15620 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15621 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
15622 		tp->bufmgr_config.mbuf_high_water_jumbo =
15623 			DEFAULT_MB_HIGH_WATER_JUMBO_57765;
15624 	} else if (tg3_flag(tp, 5705_PLUS)) {
15625 		tp->bufmgr_config.mbuf_read_dma_low_water =
15626 			DEFAULT_MB_RDMA_LOW_WATER_5705;
15627 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15628 			DEFAULT_MB_MACRX_LOW_WATER_5705;
15629 		tp->bufmgr_config.mbuf_high_water =
15630 			DEFAULT_MB_HIGH_WATER_5705;
15631 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
15632 			tp->bufmgr_config.mbuf_mac_rx_low_water =
15633 				DEFAULT_MB_MACRX_LOW_WATER_5906;
15634 			tp->bufmgr_config.mbuf_high_water =
15635 				DEFAULT_MB_HIGH_WATER_5906;
15636 		}
15637 
15638 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15639 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
15640 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15641 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
15642 		tp->bufmgr_config.mbuf_high_water_jumbo =
15643 			DEFAULT_MB_HIGH_WATER_JUMBO_5780;
15644 	} else {
15645 		tp->bufmgr_config.mbuf_read_dma_low_water =
15646 			DEFAULT_MB_RDMA_LOW_WATER;
15647 		tp->bufmgr_config.mbuf_mac_rx_low_water =
15648 			DEFAULT_MB_MACRX_LOW_WATER;
15649 		tp->bufmgr_config.mbuf_high_water =
15650 			DEFAULT_MB_HIGH_WATER;
15651 
15652 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15653 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
15654 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15655 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
15656 		tp->bufmgr_config.mbuf_high_water_jumbo =
15657 			DEFAULT_MB_HIGH_WATER_JUMBO;
15658 	}
15659 
15660 	tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
15661 	tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
15662 }
15663 
15664 static char * __devinit tg3_phy_string(struct tg3 *tp)
15665 {
15666 	switch (tp->phy_id & TG3_PHY_ID_MASK) {
15667 	case TG3_PHY_ID_BCM5400:	return "5400";
15668 	case TG3_PHY_ID_BCM5401:	return "5401";
15669 	case TG3_PHY_ID_BCM5411:	return "5411";
15670 	case TG3_PHY_ID_BCM5701:	return "5701";
15671 	case TG3_PHY_ID_BCM5703:	return "5703";
15672 	case TG3_PHY_ID_BCM5704:	return "5704";
15673 	case TG3_PHY_ID_BCM5705:	return "5705";
15674 	case TG3_PHY_ID_BCM5750:	return "5750";
15675 	case TG3_PHY_ID_BCM5752:	return "5752";
15676 	case TG3_PHY_ID_BCM5714:	return "5714";
15677 	case TG3_PHY_ID_BCM5780:	return "5780";
15678 	case TG3_PHY_ID_BCM5755:	return "5755";
15679 	case TG3_PHY_ID_BCM5787:	return "5787";
15680 	case TG3_PHY_ID_BCM5784:	return "5784";
15681 	case TG3_PHY_ID_BCM5756:	return "5722/5756";
15682 	case TG3_PHY_ID_BCM5906:	return "5906";
15683 	case TG3_PHY_ID_BCM5761:	return "5761";
15684 	case TG3_PHY_ID_BCM5718C:	return "5718C";
15685 	case TG3_PHY_ID_BCM5718S:	return "5718S";
15686 	case TG3_PHY_ID_BCM57765:	return "57765";
15687 	case TG3_PHY_ID_BCM5719C:	return "5719C";
15688 	case TG3_PHY_ID_BCM5720C:	return "5720C";
15689 	case TG3_PHY_ID_BCM8002:	return "8002/serdes";
15690 	case 0:			return "serdes";
15691 	default:		return "unknown";
15692 	}
15693 }
15694 
15695 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
15696 {
15697 	if (tg3_flag(tp, PCI_EXPRESS)) {
15698 		strcpy(str, "PCI Express");
15699 		return str;
15700 	} else if (tg3_flag(tp, PCIX_MODE)) {
15701 		u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
15702 
15703 		strcpy(str, "PCIX:");
15704 
15705 		if ((clock_ctrl == 7) ||
15706 		    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
15707 		     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
15708 			strcat(str, "133MHz");
15709 		else if (clock_ctrl == 0)
15710 			strcat(str, "33MHz");
15711 		else if (clock_ctrl == 2)
15712 			strcat(str, "50MHz");
15713 		else if (clock_ctrl == 4)
15714 			strcat(str, "66MHz");
15715 		else if (clock_ctrl == 6)
15716 			strcat(str, "100MHz");
15717 	} else {
15718 		strcpy(str, "PCI:");
15719 		if (tg3_flag(tp, PCI_HIGH_SPEED))
15720 			strcat(str, "66MHz");
15721 		else
15722 			strcat(str, "33MHz");
15723 	}
15724 	if (tg3_flag(tp, PCI_32BIT))
15725 		strcat(str, ":32-bit");
15726 	else
15727 		strcat(str, ":64-bit");
15728 	return str;
15729 }
15730 
15731 static void __devinit tg3_init_coal(struct tg3 *tp)
15732 {
15733 	struct ethtool_coalesce *ec = &tp->coal;
15734 
15735 	memset(ec, 0, sizeof(*ec));
15736 	ec->cmd = ETHTOOL_GCOALESCE;
15737 	ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
15738 	ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
15739 	ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
15740 	ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
15741 	ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
15742 	ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
15743 	ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
15744 	ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
15745 	ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
15746 
15747 	if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
15748 				 HOSTCC_MODE_CLRTICK_TXBD)) {
15749 		ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
15750 		ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
15751 		ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
15752 		ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
15753 	}
15754 
15755 	if (tg3_flag(tp, 5705_PLUS)) {
15756 		ec->rx_coalesce_usecs_irq = 0;
15757 		ec->tx_coalesce_usecs_irq = 0;
15758 		ec->stats_block_coalesce_usecs = 0;
15759 	}
15760 }
15761 
15762 static int __devinit tg3_init_one(struct pci_dev *pdev,
15763 				  const struct pci_device_id *ent)
15764 {
15765 	struct net_device *dev;
15766 	struct tg3 *tp;
15767 	int i, err, pm_cap;
15768 	u32 sndmbx, rcvmbx, intmbx;
15769 	char str[40];
15770 	u64 dma_mask, persist_dma_mask;
15771 	netdev_features_t features = 0;
15772 
15773 	printk_once(KERN_INFO "%s\n", version);
15774 
15775 	err = pci_enable_device(pdev);
15776 	if (err) {
15777 		dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
15778 		return err;
15779 	}
15780 
15781 	err = pci_request_regions(pdev, DRV_MODULE_NAME);
15782 	if (err) {
15783 		dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
15784 		goto err_out_disable_pdev;
15785 	}
15786 
15787 	pci_set_master(pdev);
15788 
15789 	/* Find power-management capability. */
15790 	pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
15791 	if (pm_cap == 0) {
15792 		dev_err(&pdev->dev,
15793 			"Cannot find Power Management capability, aborting\n");
15794 		err = -EIO;
15795 		goto err_out_free_res;
15796 	}
15797 
15798 	err = pci_set_power_state(pdev, PCI_D0);
15799 	if (err) {
15800 		dev_err(&pdev->dev, "Transition to D0 failed, aborting\n");
15801 		goto err_out_free_res;
15802 	}
15803 
15804 	dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
15805 	if (!dev) {
15806 		err = -ENOMEM;
15807 		goto err_out_power_down;
15808 	}
15809 
15810 	SET_NETDEV_DEV(dev, &pdev->dev);
15811 
15812 	tp = netdev_priv(dev);
15813 	tp->pdev = pdev;
15814 	tp->dev = dev;
15815 	tp->pm_cap = pm_cap;
15816 	tp->rx_mode = TG3_DEF_RX_MODE;
15817 	tp->tx_mode = TG3_DEF_TX_MODE;
15818 
15819 	if (tg3_debug > 0)
15820 		tp->msg_enable = tg3_debug;
15821 	else
15822 		tp->msg_enable = TG3_DEF_MSG_ENABLE;
15823 
15824 	/* The word/byte swap controls here control register access byte
15825 	 * swapping.  DMA data byte swapping is controlled in the GRC_MODE
15826 	 * setting below.
15827 	 */
15828 	tp->misc_host_ctrl =
15829 		MISC_HOST_CTRL_MASK_PCI_INT |
15830 		MISC_HOST_CTRL_WORD_SWAP |
15831 		MISC_HOST_CTRL_INDIR_ACCESS |
15832 		MISC_HOST_CTRL_PCISTATE_RW;
15833 
15834 	/* The NONFRM (non-frame) byte/word swap controls take effect
15835 	 * on descriptor entries, anything which isn't packet data.
15836 	 *
15837 	 * The StrongARM chips on the board (one for tx, one for rx)
15838 	 * are running in big-endian mode.
15839 	 */
15840 	tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
15841 			GRC_MODE_WSWAP_NONFRM_DATA);
15842 #ifdef __BIG_ENDIAN
15843 	tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
15844 #endif
15845 	spin_lock_init(&tp->lock);
15846 	spin_lock_init(&tp->indirect_lock);
15847 	INIT_WORK(&tp->reset_task, tg3_reset_task);
15848 
15849 	tp->regs = pci_ioremap_bar(pdev, BAR_0);
15850 	if (!tp->regs) {
15851 		dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
15852 		err = -ENOMEM;
15853 		goto err_out_free_dev;
15854 	}
15855 
15856 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
15857 	    tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
15858 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
15859 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
15860 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15861 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
15862 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
15863 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) {
15864 		tg3_flag_set(tp, ENABLE_APE);
15865 		tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
15866 		if (!tp->aperegs) {
15867 			dev_err(&pdev->dev,
15868 				"Cannot map APE registers, aborting\n");
15869 			err = -ENOMEM;
15870 			goto err_out_iounmap;
15871 		}
15872 	}
15873 
15874 	tp->rx_pending = TG3_DEF_RX_RING_PENDING;
15875 	tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
15876 
15877 	dev->ethtool_ops = &tg3_ethtool_ops;
15878 	dev->watchdog_timeo = TG3_TX_TIMEOUT;
15879 	dev->netdev_ops = &tg3_netdev_ops;
15880 	dev->irq = pdev->irq;
15881 
15882 	err = tg3_get_invariants(tp);
15883 	if (err) {
15884 		dev_err(&pdev->dev,
15885 			"Problem fetching invariants of chip, aborting\n");
15886 		goto err_out_apeunmap;
15887 	}
15888 
15889 	/* The EPB bridge inside 5714, 5715, and 5780 and any
15890 	 * device behind the EPB cannot support DMA addresses > 40-bit.
15891 	 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
15892 	 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
15893 	 * do DMA address check in tg3_start_xmit().
15894 	 */
15895 	if (tg3_flag(tp, IS_5788))
15896 		persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
15897 	else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
15898 		persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
15899 #ifdef CONFIG_HIGHMEM
15900 		dma_mask = DMA_BIT_MASK(64);
15901 #endif
15902 	} else
15903 		persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
15904 
15905 	/* Configure DMA attributes. */
15906 	if (dma_mask > DMA_BIT_MASK(32)) {
15907 		err = pci_set_dma_mask(pdev, dma_mask);
15908 		if (!err) {
15909 			features |= NETIF_F_HIGHDMA;
15910 			err = pci_set_consistent_dma_mask(pdev,
15911 							  persist_dma_mask);
15912 			if (err < 0) {
15913 				dev_err(&pdev->dev, "Unable to obtain 64 bit "
15914 					"DMA for consistent allocations\n");
15915 				goto err_out_apeunmap;
15916 			}
15917 		}
15918 	}
15919 	if (err || dma_mask == DMA_BIT_MASK(32)) {
15920 		err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
15921 		if (err) {
15922 			dev_err(&pdev->dev,
15923 				"No usable DMA configuration, aborting\n");
15924 			goto err_out_apeunmap;
15925 		}
15926 	}
15927 
15928 	tg3_init_bufmgr_config(tp);
15929 
15930 	features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
15931 
15932 	/* 5700 B0 chips do not support checksumming correctly due
15933 	 * to hardware bugs.
15934 	 */
15935 	if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) {
15936 		features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
15937 
15938 		if (tg3_flag(tp, 5755_PLUS))
15939 			features |= NETIF_F_IPV6_CSUM;
15940 	}
15941 
15942 	/* TSO is on by default on chips that support hardware TSO.
15943 	 * Firmware TSO on older chips gives lower performance, so it
15944 	 * is off by default, but can be enabled using ethtool.
15945 	 */
15946 	if ((tg3_flag(tp, HW_TSO_1) ||
15947 	     tg3_flag(tp, HW_TSO_2) ||
15948 	     tg3_flag(tp, HW_TSO_3)) &&
15949 	    (features & NETIF_F_IP_CSUM))
15950 		features |= NETIF_F_TSO;
15951 	if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
15952 		if (features & NETIF_F_IPV6_CSUM)
15953 			features |= NETIF_F_TSO6;
15954 		if (tg3_flag(tp, HW_TSO_3) ||
15955 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
15956 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
15957 		     GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) ||
15958 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
15959 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
15960 			features |= NETIF_F_TSO_ECN;
15961 	}
15962 
15963 	dev->features |= features;
15964 	dev->vlan_features |= features;
15965 
15966 	/*
15967 	 * Add loopback capability only for a subset of devices that support
15968 	 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
15969 	 * loopback for the remaining devices.
15970 	 */
15971 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
15972 	    !tg3_flag(tp, CPMU_PRESENT))
15973 		/* Add the loopback capability */
15974 		features |= NETIF_F_LOOPBACK;
15975 
15976 	dev->hw_features |= features;
15977 
15978 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
15979 	    !tg3_flag(tp, TSO_CAPABLE) &&
15980 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
15981 		tg3_flag_set(tp, MAX_RXPEND_64);
15982 		tp->rx_pending = 63;
15983 	}
15984 
15985 	err = tg3_get_device_address(tp);
15986 	if (err) {
15987 		dev_err(&pdev->dev,
15988 			"Could not obtain valid ethernet address, aborting\n");
15989 		goto err_out_apeunmap;
15990 	}
15991 
15992 	/*
15993 	 * Reset chip in case UNDI or EFI driver did not shutdown
15994 	 * DMA self test will enable WDMAC and we'll see (spurious)
15995 	 * pending DMA on the PCI bus at that point.
15996 	 */
15997 	if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
15998 	    (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
15999 		tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
16000 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16001 	}
16002 
16003 	err = tg3_test_dma(tp);
16004 	if (err) {
16005 		dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
16006 		goto err_out_apeunmap;
16007 	}
16008 
16009 	intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
16010 	rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
16011 	sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
16012 	for (i = 0; i < tp->irq_max; i++) {
16013 		struct tg3_napi *tnapi = &tp->napi[i];
16014 
16015 		tnapi->tp = tp;
16016 		tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
16017 
16018 		tnapi->int_mbox = intmbx;
16019 		if (i <= 4)
16020 			intmbx += 0x8;
16021 		else
16022 			intmbx += 0x4;
16023 
16024 		tnapi->consmbox = rcvmbx;
16025 		tnapi->prodmbox = sndmbx;
16026 
16027 		if (i)
16028 			tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
16029 		else
16030 			tnapi->coal_now = HOSTCC_MODE_NOW;
16031 
16032 		if (!tg3_flag(tp, SUPPORT_MSIX))
16033 			break;
16034 
16035 		/*
16036 		 * If we support MSIX, we'll be using RSS.  If we're using
16037 		 * RSS, the first vector only handles link interrupts and the
16038 		 * remaining vectors handle rx and tx interrupts.  Reuse the
16039 		 * mailbox values for the next iteration.  The values we setup
16040 		 * above are still useful for the single vectored mode.
16041 		 */
16042 		if (!i)
16043 			continue;
16044 
16045 		rcvmbx += 0x8;
16046 
16047 		if (sndmbx & 0x4)
16048 			sndmbx -= 0x4;
16049 		else
16050 			sndmbx += 0xc;
16051 	}
16052 
16053 	tg3_init_coal(tp);
16054 
16055 	pci_set_drvdata(pdev, dev);
16056 
16057 	if (tg3_flag(tp, 5717_PLUS)) {
16058 		/* Resume a low-power mode */
16059 		tg3_frob_aux_power(tp, false);
16060 	}
16061 
16062 	tg3_timer_init(tp);
16063 
16064 	err = register_netdev(dev);
16065 	if (err) {
16066 		dev_err(&pdev->dev, "Cannot register net device, aborting\n");
16067 		goto err_out_apeunmap;
16068 	}
16069 
16070 	netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
16071 		    tp->board_part_number,
16072 		    tp->pci_chip_rev_id,
16073 		    tg3_bus_string(tp, str),
16074 		    dev->dev_addr);
16075 
16076 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
16077 		struct phy_device *phydev;
16078 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
16079 		netdev_info(dev,
16080 			    "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
16081 			    phydev->drv->name, dev_name(&phydev->dev));
16082 	} else {
16083 		char *ethtype;
16084 
16085 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
16086 			ethtype = "10/100Base-TX";
16087 		else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
16088 			ethtype = "1000Base-SX";
16089 		else
16090 			ethtype = "10/100/1000Base-T";
16091 
16092 		netdev_info(dev, "attached PHY is %s (%s Ethernet) "
16093 			    "(WireSpeed[%d], EEE[%d])\n",
16094 			    tg3_phy_string(tp), ethtype,
16095 			    (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
16096 			    (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
16097 	}
16098 
16099 	netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
16100 		    (dev->features & NETIF_F_RXCSUM) != 0,
16101 		    tg3_flag(tp, USE_LINKCHG_REG) != 0,
16102 		    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
16103 		    tg3_flag(tp, ENABLE_ASF) != 0,
16104 		    tg3_flag(tp, TSO_CAPABLE) != 0);
16105 	netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
16106 		    tp->dma_rwctrl,
16107 		    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
16108 		    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
16109 
16110 	pci_save_state(pdev);
16111 
16112 	return 0;
16113 
16114 err_out_apeunmap:
16115 	if (tp->aperegs) {
16116 		iounmap(tp->aperegs);
16117 		tp->aperegs = NULL;
16118 	}
16119 
16120 err_out_iounmap:
16121 	if (tp->regs) {
16122 		iounmap(tp->regs);
16123 		tp->regs = NULL;
16124 	}
16125 
16126 err_out_free_dev:
16127 	free_netdev(dev);
16128 
16129 err_out_power_down:
16130 	pci_set_power_state(pdev, PCI_D3hot);
16131 
16132 err_out_free_res:
16133 	pci_release_regions(pdev);
16134 
16135 err_out_disable_pdev:
16136 	pci_disable_device(pdev);
16137 	pci_set_drvdata(pdev, NULL);
16138 	return err;
16139 }
16140 
16141 static void __devexit tg3_remove_one(struct pci_dev *pdev)
16142 {
16143 	struct net_device *dev = pci_get_drvdata(pdev);
16144 
16145 	if (dev) {
16146 		struct tg3 *tp = netdev_priv(dev);
16147 
16148 		release_firmware(tp->fw);
16149 
16150 		tg3_reset_task_cancel(tp);
16151 
16152 		if (tg3_flag(tp, USE_PHYLIB)) {
16153 			tg3_phy_fini(tp);
16154 			tg3_mdio_fini(tp);
16155 		}
16156 
16157 		unregister_netdev(dev);
16158 		if (tp->aperegs) {
16159 			iounmap(tp->aperegs);
16160 			tp->aperegs = NULL;
16161 		}
16162 		if (tp->regs) {
16163 			iounmap(tp->regs);
16164 			tp->regs = NULL;
16165 		}
16166 		free_netdev(dev);
16167 		pci_release_regions(pdev);
16168 		pci_disable_device(pdev);
16169 		pci_set_drvdata(pdev, NULL);
16170 	}
16171 }
16172 
16173 #ifdef CONFIG_PM_SLEEP
16174 static int tg3_suspend(struct device *device)
16175 {
16176 	struct pci_dev *pdev = to_pci_dev(device);
16177 	struct net_device *dev = pci_get_drvdata(pdev);
16178 	struct tg3 *tp = netdev_priv(dev);
16179 	int err;
16180 
16181 	if (!netif_running(dev))
16182 		return 0;
16183 
16184 	tg3_reset_task_cancel(tp);
16185 	tg3_phy_stop(tp);
16186 	tg3_netif_stop(tp);
16187 
16188 	tg3_timer_stop(tp);
16189 
16190 	tg3_full_lock(tp, 1);
16191 	tg3_disable_ints(tp);
16192 	tg3_full_unlock(tp);
16193 
16194 	netif_device_detach(dev);
16195 
16196 	tg3_full_lock(tp, 0);
16197 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16198 	tg3_flag_clear(tp, INIT_COMPLETE);
16199 	tg3_full_unlock(tp);
16200 
16201 	err = tg3_power_down_prepare(tp);
16202 	if (err) {
16203 		int err2;
16204 
16205 		tg3_full_lock(tp, 0);
16206 
16207 		tg3_flag_set(tp, INIT_COMPLETE);
16208 		err2 = tg3_restart_hw(tp, 1);
16209 		if (err2)
16210 			goto out;
16211 
16212 		tg3_timer_start(tp);
16213 
16214 		netif_device_attach(dev);
16215 		tg3_netif_start(tp);
16216 
16217 out:
16218 		tg3_full_unlock(tp);
16219 
16220 		if (!err2)
16221 			tg3_phy_start(tp);
16222 	}
16223 
16224 	return err;
16225 }
16226 
16227 static int tg3_resume(struct device *device)
16228 {
16229 	struct pci_dev *pdev = to_pci_dev(device);
16230 	struct net_device *dev = pci_get_drvdata(pdev);
16231 	struct tg3 *tp = netdev_priv(dev);
16232 	int err;
16233 
16234 	if (!netif_running(dev))
16235 		return 0;
16236 
16237 	netif_device_attach(dev);
16238 
16239 	tg3_full_lock(tp, 0);
16240 
16241 	tg3_flag_set(tp, INIT_COMPLETE);
16242 	err = tg3_restart_hw(tp, 1);
16243 	if (err)
16244 		goto out;
16245 
16246 	tg3_timer_start(tp);
16247 
16248 	tg3_netif_start(tp);
16249 
16250 out:
16251 	tg3_full_unlock(tp);
16252 
16253 	if (!err)
16254 		tg3_phy_start(tp);
16255 
16256 	return err;
16257 }
16258 
16259 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
16260 #define TG3_PM_OPS (&tg3_pm_ops)
16261 
16262 #else
16263 
16264 #define TG3_PM_OPS NULL
16265 
16266 #endif /* CONFIG_PM_SLEEP */
16267 
16268 /**
16269  * tg3_io_error_detected - called when PCI error is detected
16270  * @pdev: Pointer to PCI device
16271  * @state: The current pci connection state
16272  *
16273  * This function is called after a PCI bus error affecting
16274  * this device has been detected.
16275  */
16276 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
16277 					      pci_channel_state_t state)
16278 {
16279 	struct net_device *netdev = pci_get_drvdata(pdev);
16280 	struct tg3 *tp = netdev_priv(netdev);
16281 	pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
16282 
16283 	netdev_info(netdev, "PCI I/O error detected\n");
16284 
16285 	rtnl_lock();
16286 
16287 	if (!netif_running(netdev))
16288 		goto done;
16289 
16290 	tg3_phy_stop(tp);
16291 
16292 	tg3_netif_stop(tp);
16293 
16294 	tg3_timer_stop(tp);
16295 
16296 	/* Want to make sure that the reset task doesn't run */
16297 	tg3_reset_task_cancel(tp);
16298 
16299 	netif_device_detach(netdev);
16300 
16301 	/* Clean up software state, even if MMIO is blocked */
16302 	tg3_full_lock(tp, 0);
16303 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
16304 	tg3_full_unlock(tp);
16305 
16306 done:
16307 	if (state == pci_channel_io_perm_failure)
16308 		err = PCI_ERS_RESULT_DISCONNECT;
16309 	else
16310 		pci_disable_device(pdev);
16311 
16312 	rtnl_unlock();
16313 
16314 	return err;
16315 }
16316 
16317 /**
16318  * tg3_io_slot_reset - called after the pci bus has been reset.
16319  * @pdev: Pointer to PCI device
16320  *
16321  * Restart the card from scratch, as if from a cold-boot.
16322  * At this point, the card has exprienced a hard reset,
16323  * followed by fixups by BIOS, and has its config space
16324  * set up identically to what it was at cold boot.
16325  */
16326 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
16327 {
16328 	struct net_device *netdev = pci_get_drvdata(pdev);
16329 	struct tg3 *tp = netdev_priv(netdev);
16330 	pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
16331 	int err;
16332 
16333 	rtnl_lock();
16334 
16335 	if (pci_enable_device(pdev)) {
16336 		netdev_err(netdev, "Cannot re-enable PCI device after reset.\n");
16337 		goto done;
16338 	}
16339 
16340 	pci_set_master(pdev);
16341 	pci_restore_state(pdev);
16342 	pci_save_state(pdev);
16343 
16344 	if (!netif_running(netdev)) {
16345 		rc = PCI_ERS_RESULT_RECOVERED;
16346 		goto done;
16347 	}
16348 
16349 	err = tg3_power_up(tp);
16350 	if (err)
16351 		goto done;
16352 
16353 	rc = PCI_ERS_RESULT_RECOVERED;
16354 
16355 done:
16356 	rtnl_unlock();
16357 
16358 	return rc;
16359 }
16360 
16361 /**
16362  * tg3_io_resume - called when traffic can start flowing again.
16363  * @pdev: Pointer to PCI device
16364  *
16365  * This callback is called when the error recovery driver tells
16366  * us that its OK to resume normal operation.
16367  */
16368 static void tg3_io_resume(struct pci_dev *pdev)
16369 {
16370 	struct net_device *netdev = pci_get_drvdata(pdev);
16371 	struct tg3 *tp = netdev_priv(netdev);
16372 	int err;
16373 
16374 	rtnl_lock();
16375 
16376 	if (!netif_running(netdev))
16377 		goto done;
16378 
16379 	tg3_full_lock(tp, 0);
16380 	tg3_flag_set(tp, INIT_COMPLETE);
16381 	err = tg3_restart_hw(tp, 1);
16382 	tg3_full_unlock(tp);
16383 	if (err) {
16384 		netdev_err(netdev, "Cannot restart hardware after reset.\n");
16385 		goto done;
16386 	}
16387 
16388 	netif_device_attach(netdev);
16389 
16390 	tg3_timer_start(tp);
16391 
16392 	tg3_netif_start(tp);
16393 
16394 	tg3_phy_start(tp);
16395 
16396 done:
16397 	rtnl_unlock();
16398 }
16399 
16400 static struct pci_error_handlers tg3_err_handler = {
16401 	.error_detected	= tg3_io_error_detected,
16402 	.slot_reset	= tg3_io_slot_reset,
16403 	.resume		= tg3_io_resume
16404 };
16405 
16406 static struct pci_driver tg3_driver = {
16407 	.name		= DRV_MODULE_NAME,
16408 	.id_table	= tg3_pci_tbl,
16409 	.probe		= tg3_init_one,
16410 	.remove		= __devexit_p(tg3_remove_one),
16411 	.err_handler	= &tg3_err_handler,
16412 	.driver.pm	= TG3_PM_OPS,
16413 };
16414 
16415 static int __init tg3_init(void)
16416 {
16417 	return pci_register_driver(&tg3_driver);
16418 }
16419 
16420 static void __exit tg3_cleanup(void)
16421 {
16422 	pci_unregister_driver(&tg3_driver);
16423 }
16424 
16425 module_init(tg3_init);
16426 module_exit(tg3_cleanup);
16427