xref: /linux/drivers/net/ethernet/broadcom/tg3.c (revision d0b73b488c55df905ea8faaad079f8535629ed26)
1 /*
2  * tg3.c: Broadcom Tigon3 ethernet driver.
3  *
4  * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com)
5  * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com)
6  * Copyright (C) 2004 Sun Microsystems Inc.
7  * Copyright (C) 2005-2012 Broadcom Corporation.
8  *
9  * Firmware is:
10  *	Derived from proprietary unpublished source code,
11  *	Copyright (C) 2000-2003 Broadcom Corporation.
12  *
13  *	Permission is hereby granted for the distribution of this firmware
14  *	data in hexadecimal or equivalent format, provided this copyright
15  *	notice is accompanying it.
16  */
17 
18 
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/stringify.h>
22 #include <linux/kernel.h>
23 #include <linux/types.h>
24 #include <linux/compiler.h>
25 #include <linux/slab.h>
26 #include <linux/delay.h>
27 #include <linux/in.h>
28 #include <linux/init.h>
29 #include <linux/interrupt.h>
30 #include <linux/ioport.h>
31 #include <linux/pci.h>
32 #include <linux/netdevice.h>
33 #include <linux/etherdevice.h>
34 #include <linux/skbuff.h>
35 #include <linux/ethtool.h>
36 #include <linux/mdio.h>
37 #include <linux/mii.h>
38 #include <linux/phy.h>
39 #include <linux/brcmphy.h>
40 #include <linux/if_vlan.h>
41 #include <linux/ip.h>
42 #include <linux/tcp.h>
43 #include <linux/workqueue.h>
44 #include <linux/prefetch.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/firmware.h>
47 #include <linux/hwmon.h>
48 #include <linux/hwmon-sysfs.h>
49 
50 #include <net/checksum.h>
51 #include <net/ip.h>
52 
53 #include <linux/io.h>
54 #include <asm/byteorder.h>
55 #include <linux/uaccess.h>
56 
57 #include <uapi/linux/net_tstamp.h>
58 #include <linux/ptp_clock_kernel.h>
59 
60 #ifdef CONFIG_SPARC
61 #include <asm/idprom.h>
62 #include <asm/prom.h>
63 #endif
64 
65 #define BAR_0	0
66 #define BAR_2	2
67 
68 #include "tg3.h"
69 
70 /* Functions & macros to verify TG3_FLAGS types */
71 
72 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
73 {
74 	return test_bit(flag, bits);
75 }
76 
77 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
78 {
79 	set_bit(flag, bits);
80 }
81 
82 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
83 {
84 	clear_bit(flag, bits);
85 }
86 
87 #define tg3_flag(tp, flag)				\
88 	_tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
89 #define tg3_flag_set(tp, flag)				\
90 	_tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
91 #define tg3_flag_clear(tp, flag)			\
92 	_tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
93 
94 #define DRV_MODULE_NAME		"tg3"
95 #define TG3_MAJ_NUM			3
96 #define TG3_MIN_NUM			128
97 #define DRV_MODULE_VERSION	\
98 	__stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
99 #define DRV_MODULE_RELDATE	"December 03, 2012"
100 
101 #define RESET_KIND_SHUTDOWN	0
102 #define RESET_KIND_INIT		1
103 #define RESET_KIND_SUSPEND	2
104 
105 #define TG3_DEF_RX_MODE		0
106 #define TG3_DEF_TX_MODE		0
107 #define TG3_DEF_MSG_ENABLE	  \
108 	(NETIF_MSG_DRV		| \
109 	 NETIF_MSG_PROBE	| \
110 	 NETIF_MSG_LINK		| \
111 	 NETIF_MSG_TIMER	| \
112 	 NETIF_MSG_IFDOWN	| \
113 	 NETIF_MSG_IFUP		| \
114 	 NETIF_MSG_RX_ERR	| \
115 	 NETIF_MSG_TX_ERR)
116 
117 #define TG3_GRC_LCLCTL_PWRSW_DELAY	100
118 
119 /* length of time before we decide the hardware is borked,
120  * and dev->tx_timeout() should be called to fix the problem
121  */
122 
123 #define TG3_TX_TIMEOUT			(5 * HZ)
124 
125 /* hardware minimum and maximum for a single frame's data payload */
126 #define TG3_MIN_MTU			60
127 #define TG3_MAX_MTU(tp)	\
128 	(tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
129 
130 /* These numbers seem to be hard coded in the NIC firmware somehow.
131  * You can't change the ring sizes, but you can change where you place
132  * them in the NIC onboard memory.
133  */
134 #define TG3_RX_STD_RING_SIZE(tp) \
135 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
136 	 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
137 #define TG3_DEF_RX_RING_PENDING		200
138 #define TG3_RX_JMB_RING_SIZE(tp) \
139 	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
140 	 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
141 #define TG3_DEF_RX_JUMBO_RING_PENDING	100
142 
143 /* Do not place this n-ring entries value into the tp struct itself,
144  * we really want to expose these constants to GCC so that modulo et
145  * al.  operations are done with shifts and masks instead of with
146  * hw multiply/modulo instructions.  Another solution would be to
147  * replace things like '% foo' with '& (foo - 1)'.
148  */
149 
150 #define TG3_TX_RING_SIZE		512
151 #define TG3_DEF_TX_RING_PENDING		(TG3_TX_RING_SIZE - 1)
152 
153 #define TG3_RX_STD_RING_BYTES(tp) \
154 	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
155 #define TG3_RX_JMB_RING_BYTES(tp) \
156 	(sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
157 #define TG3_RX_RCB_RING_BYTES(tp) \
158 	(sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
159 #define TG3_TX_RING_BYTES	(sizeof(struct tg3_tx_buffer_desc) * \
160 				 TG3_TX_RING_SIZE)
161 #define NEXT_TX(N)		(((N) + 1) & (TG3_TX_RING_SIZE - 1))
162 
163 #define TG3_DMA_BYTE_ENAB		64
164 
165 #define TG3_RX_STD_DMA_SZ		1536
166 #define TG3_RX_JMB_DMA_SZ		9046
167 
168 #define TG3_RX_DMA_TO_MAP_SZ(x)		((x) + TG3_DMA_BYTE_ENAB)
169 
170 #define TG3_RX_STD_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
171 #define TG3_RX_JMB_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
172 
173 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
174 	(sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
175 
176 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
177 	(sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
178 
179 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
180  * that are at least dword aligned when used in PCIX mode.  The driver
181  * works around this bug by double copying the packet.  This workaround
182  * is built into the normal double copy length check for efficiency.
183  *
184  * However, the double copy is only necessary on those architectures
185  * where unaligned memory accesses are inefficient.  For those architectures
186  * where unaligned memory accesses incur little penalty, we can reintegrate
187  * the 5701 in the normal rx path.  Doing so saves a device structure
188  * dereference by hardcoding the double copy threshold in place.
189  */
190 #define TG3_RX_COPY_THRESHOLD		256
191 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
192 	#define TG3_RX_COPY_THRESH(tp)	TG3_RX_COPY_THRESHOLD
193 #else
194 	#define TG3_RX_COPY_THRESH(tp)	((tp)->rx_copy_thresh)
195 #endif
196 
197 #if (NET_IP_ALIGN != 0)
198 #define TG3_RX_OFFSET(tp)	((tp)->rx_offset)
199 #else
200 #define TG3_RX_OFFSET(tp)	(NET_SKB_PAD)
201 #endif
202 
203 /* minimum number of free TX descriptors required to wake up TX process */
204 #define TG3_TX_WAKEUP_THRESH(tnapi)		((tnapi)->tx_pending / 4)
205 #define TG3_TX_BD_DMA_MAX_2K		2048
206 #define TG3_TX_BD_DMA_MAX_4K		4096
207 
208 #define TG3_RAW_IP_ALIGN 2
209 
210 #define TG3_FW_UPDATE_TIMEOUT_SEC	5
211 #define TG3_FW_UPDATE_FREQ_SEC		(TG3_FW_UPDATE_TIMEOUT_SEC / 2)
212 
213 #define FIRMWARE_TG3		"tigon/tg3.bin"
214 #define FIRMWARE_TG3TSO		"tigon/tg3_tso.bin"
215 #define FIRMWARE_TG3TSO5	"tigon/tg3_tso5.bin"
216 
217 static char version[] =
218 	DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
219 
220 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
221 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
222 MODULE_LICENSE("GPL");
223 MODULE_VERSION(DRV_MODULE_VERSION);
224 MODULE_FIRMWARE(FIRMWARE_TG3);
225 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
226 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
227 
228 static int tg3_debug = -1;	/* -1 == use TG3_DEF_MSG_ENABLE as value */
229 module_param(tg3_debug, int, 0);
230 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
231 
232 #define TG3_DRV_DATA_FLAG_10_100_ONLY	0x0001
233 #define TG3_DRV_DATA_FLAG_5705_10_100	0x0002
234 
235 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
236 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
237 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
238 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
239 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
240 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
241 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
242 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
243 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
244 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
245 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
246 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
247 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
248 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
249 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
250 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
251 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
252 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
253 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
254 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
255 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
256 			TG3_DRV_DATA_FLAG_5705_10_100},
257 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
258 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
259 			TG3_DRV_DATA_FLAG_5705_10_100},
260 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
261 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
262 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
263 			TG3_DRV_DATA_FLAG_5705_10_100},
264 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
265 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
266 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
267 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
268 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
269 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
270 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
271 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
272 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
273 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
274 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
275 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
276 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
277 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
278 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
279 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
280 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
281 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
282 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
283 	{PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
284 			PCI_VENDOR_ID_LENOVO,
285 			TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
286 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
287 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
288 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
289 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
290 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
291 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
292 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
293 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
294 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
295 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
296 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
297 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
298 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
299 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
300 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
301 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
302 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
303 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
304 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
305 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
306 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
307 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
308 	{PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
309 			PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
310 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
311 	{PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
312 			PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
313 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
314 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
315 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
316 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
317 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
318 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
319 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
320 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
321 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
322 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
323 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
324 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
325 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
326 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
327 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
328 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
329 	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
330 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
331 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
332 	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
333 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
334 	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
335 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
336 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
337 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
338 	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
339 	{PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
340 	{PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
341 	{}
342 };
343 
344 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
345 
346 static const struct {
347 	const char string[ETH_GSTRING_LEN];
348 } ethtool_stats_keys[] = {
349 	{ "rx_octets" },
350 	{ "rx_fragments" },
351 	{ "rx_ucast_packets" },
352 	{ "rx_mcast_packets" },
353 	{ "rx_bcast_packets" },
354 	{ "rx_fcs_errors" },
355 	{ "rx_align_errors" },
356 	{ "rx_xon_pause_rcvd" },
357 	{ "rx_xoff_pause_rcvd" },
358 	{ "rx_mac_ctrl_rcvd" },
359 	{ "rx_xoff_entered" },
360 	{ "rx_frame_too_long_errors" },
361 	{ "rx_jabbers" },
362 	{ "rx_undersize_packets" },
363 	{ "rx_in_length_errors" },
364 	{ "rx_out_length_errors" },
365 	{ "rx_64_or_less_octet_packets" },
366 	{ "rx_65_to_127_octet_packets" },
367 	{ "rx_128_to_255_octet_packets" },
368 	{ "rx_256_to_511_octet_packets" },
369 	{ "rx_512_to_1023_octet_packets" },
370 	{ "rx_1024_to_1522_octet_packets" },
371 	{ "rx_1523_to_2047_octet_packets" },
372 	{ "rx_2048_to_4095_octet_packets" },
373 	{ "rx_4096_to_8191_octet_packets" },
374 	{ "rx_8192_to_9022_octet_packets" },
375 
376 	{ "tx_octets" },
377 	{ "tx_collisions" },
378 
379 	{ "tx_xon_sent" },
380 	{ "tx_xoff_sent" },
381 	{ "tx_flow_control" },
382 	{ "tx_mac_errors" },
383 	{ "tx_single_collisions" },
384 	{ "tx_mult_collisions" },
385 	{ "tx_deferred" },
386 	{ "tx_excessive_collisions" },
387 	{ "tx_late_collisions" },
388 	{ "tx_collide_2times" },
389 	{ "tx_collide_3times" },
390 	{ "tx_collide_4times" },
391 	{ "tx_collide_5times" },
392 	{ "tx_collide_6times" },
393 	{ "tx_collide_7times" },
394 	{ "tx_collide_8times" },
395 	{ "tx_collide_9times" },
396 	{ "tx_collide_10times" },
397 	{ "tx_collide_11times" },
398 	{ "tx_collide_12times" },
399 	{ "tx_collide_13times" },
400 	{ "tx_collide_14times" },
401 	{ "tx_collide_15times" },
402 	{ "tx_ucast_packets" },
403 	{ "tx_mcast_packets" },
404 	{ "tx_bcast_packets" },
405 	{ "tx_carrier_sense_errors" },
406 	{ "tx_discards" },
407 	{ "tx_errors" },
408 
409 	{ "dma_writeq_full" },
410 	{ "dma_write_prioq_full" },
411 	{ "rxbds_empty" },
412 	{ "rx_discards" },
413 	{ "rx_errors" },
414 	{ "rx_threshold_hit" },
415 
416 	{ "dma_readq_full" },
417 	{ "dma_read_prioq_full" },
418 	{ "tx_comp_queue_full" },
419 
420 	{ "ring_set_send_prod_index" },
421 	{ "ring_status_update" },
422 	{ "nic_irqs" },
423 	{ "nic_avoided_irqs" },
424 	{ "nic_tx_threshold_hit" },
425 
426 	{ "mbuf_lwm_thresh_hit" },
427 };
428 
429 #define TG3_NUM_STATS	ARRAY_SIZE(ethtool_stats_keys)
430 #define TG3_NVRAM_TEST		0
431 #define TG3_LINK_TEST		1
432 #define TG3_REGISTER_TEST	2
433 #define TG3_MEMORY_TEST		3
434 #define TG3_MAC_LOOPB_TEST	4
435 #define TG3_PHY_LOOPB_TEST	5
436 #define TG3_EXT_LOOPB_TEST	6
437 #define TG3_INTERRUPT_TEST	7
438 
439 
440 static const struct {
441 	const char string[ETH_GSTRING_LEN];
442 } ethtool_test_keys[] = {
443 	[TG3_NVRAM_TEST]	= { "nvram test        (online) " },
444 	[TG3_LINK_TEST]		= { "link test         (online) " },
445 	[TG3_REGISTER_TEST]	= { "register test     (offline)" },
446 	[TG3_MEMORY_TEST]	= { "memory test       (offline)" },
447 	[TG3_MAC_LOOPB_TEST]	= { "mac loopback test (offline)" },
448 	[TG3_PHY_LOOPB_TEST]	= { "phy loopback test (offline)" },
449 	[TG3_EXT_LOOPB_TEST]	= { "ext loopback test (offline)" },
450 	[TG3_INTERRUPT_TEST]	= { "interrupt test    (offline)" },
451 };
452 
453 #define TG3_NUM_TEST	ARRAY_SIZE(ethtool_test_keys)
454 
455 
456 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
457 {
458 	writel(val, tp->regs + off);
459 }
460 
461 static u32 tg3_read32(struct tg3 *tp, u32 off)
462 {
463 	return readl(tp->regs + off);
464 }
465 
466 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
467 {
468 	writel(val, tp->aperegs + off);
469 }
470 
471 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
472 {
473 	return readl(tp->aperegs + off);
474 }
475 
476 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
477 {
478 	unsigned long flags;
479 
480 	spin_lock_irqsave(&tp->indirect_lock, flags);
481 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
482 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
483 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
484 }
485 
486 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
487 {
488 	writel(val, tp->regs + off);
489 	readl(tp->regs + off);
490 }
491 
492 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
493 {
494 	unsigned long flags;
495 	u32 val;
496 
497 	spin_lock_irqsave(&tp->indirect_lock, flags);
498 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
499 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
500 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
501 	return val;
502 }
503 
504 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
505 {
506 	unsigned long flags;
507 
508 	if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
509 		pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
510 				       TG3_64BIT_REG_LOW, val);
511 		return;
512 	}
513 	if (off == TG3_RX_STD_PROD_IDX_REG) {
514 		pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
515 				       TG3_64BIT_REG_LOW, val);
516 		return;
517 	}
518 
519 	spin_lock_irqsave(&tp->indirect_lock, flags);
520 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
521 	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
522 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
523 
524 	/* In indirect mode when disabling interrupts, we also need
525 	 * to clear the interrupt bit in the GRC local ctrl register.
526 	 */
527 	if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
528 	    (val == 0x1)) {
529 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
530 				       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
531 	}
532 }
533 
534 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
535 {
536 	unsigned long flags;
537 	u32 val;
538 
539 	spin_lock_irqsave(&tp->indirect_lock, flags);
540 	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
541 	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
542 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
543 	return val;
544 }
545 
546 /* usec_wait specifies the wait time in usec when writing to certain registers
547  * where it is unsafe to read back the register without some delay.
548  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
549  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
550  */
551 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
552 {
553 	if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
554 		/* Non-posted methods */
555 		tp->write32(tp, off, val);
556 	else {
557 		/* Posted method */
558 		tg3_write32(tp, off, val);
559 		if (usec_wait)
560 			udelay(usec_wait);
561 		tp->read32(tp, off);
562 	}
563 	/* Wait again after the read for the posted method to guarantee that
564 	 * the wait time is met.
565 	 */
566 	if (usec_wait)
567 		udelay(usec_wait);
568 }
569 
570 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
571 {
572 	tp->write32_mbox(tp, off, val);
573 	if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND))
574 		tp->read32_mbox(tp, off);
575 }
576 
577 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
578 {
579 	void __iomem *mbox = tp->regs + off;
580 	writel(val, mbox);
581 	if (tg3_flag(tp, TXD_MBOX_HWBUG))
582 		writel(val, mbox);
583 	if (tg3_flag(tp, MBOX_WRITE_REORDER))
584 		readl(mbox);
585 }
586 
587 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
588 {
589 	return readl(tp->regs + off + GRCMBOX_BASE);
590 }
591 
592 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
593 {
594 	writel(val, tp->regs + off + GRCMBOX_BASE);
595 }
596 
597 #define tw32_mailbox(reg, val)		tp->write32_mbox(tp, reg, val)
598 #define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
599 #define tw32_rx_mbox(reg, val)		tp->write32_rx_mbox(tp, reg, val)
600 #define tw32_tx_mbox(reg, val)		tp->write32_tx_mbox(tp, reg, val)
601 #define tr32_mailbox(reg)		tp->read32_mbox(tp, reg)
602 
603 #define tw32(reg, val)			tp->write32(tp, reg, val)
604 #define tw32_f(reg, val)		_tw32_flush(tp, (reg), (val), 0)
605 #define tw32_wait_f(reg, val, us)	_tw32_flush(tp, (reg), (val), (us))
606 #define tr32(reg)			tp->read32(tp, reg)
607 
608 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
609 {
610 	unsigned long flags;
611 
612 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
613 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
614 		return;
615 
616 	spin_lock_irqsave(&tp->indirect_lock, flags);
617 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
618 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
619 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
620 
621 		/* Always leave this as zero. */
622 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
623 	} else {
624 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
625 		tw32_f(TG3PCI_MEM_WIN_DATA, val);
626 
627 		/* Always leave this as zero. */
628 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
629 	}
630 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
631 }
632 
633 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
634 {
635 	unsigned long flags;
636 
637 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
638 	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
639 		*val = 0;
640 		return;
641 	}
642 
643 	spin_lock_irqsave(&tp->indirect_lock, flags);
644 	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
645 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
646 		pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
647 
648 		/* Always leave this as zero. */
649 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
650 	} else {
651 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
652 		*val = tr32(TG3PCI_MEM_WIN_DATA);
653 
654 		/* Always leave this as zero. */
655 		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
656 	}
657 	spin_unlock_irqrestore(&tp->indirect_lock, flags);
658 }
659 
660 static void tg3_ape_lock_init(struct tg3 *tp)
661 {
662 	int i;
663 	u32 regbase, bit;
664 
665 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
666 		regbase = TG3_APE_LOCK_GRANT;
667 	else
668 		regbase = TG3_APE_PER_LOCK_GRANT;
669 
670 	/* Make sure the driver hasn't any stale locks. */
671 	for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
672 		switch (i) {
673 		case TG3_APE_LOCK_PHY0:
674 		case TG3_APE_LOCK_PHY1:
675 		case TG3_APE_LOCK_PHY2:
676 		case TG3_APE_LOCK_PHY3:
677 			bit = APE_LOCK_GRANT_DRIVER;
678 			break;
679 		default:
680 			if (!tp->pci_fn)
681 				bit = APE_LOCK_GRANT_DRIVER;
682 			else
683 				bit = 1 << tp->pci_fn;
684 		}
685 		tg3_ape_write32(tp, regbase + 4 * i, bit);
686 	}
687 
688 }
689 
690 static int tg3_ape_lock(struct tg3 *tp, int locknum)
691 {
692 	int i, off;
693 	int ret = 0;
694 	u32 status, req, gnt, bit;
695 
696 	if (!tg3_flag(tp, ENABLE_APE))
697 		return 0;
698 
699 	switch (locknum) {
700 	case TG3_APE_LOCK_GPIO:
701 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
702 			return 0;
703 	case TG3_APE_LOCK_GRC:
704 	case TG3_APE_LOCK_MEM:
705 		if (!tp->pci_fn)
706 			bit = APE_LOCK_REQ_DRIVER;
707 		else
708 			bit = 1 << tp->pci_fn;
709 		break;
710 	case TG3_APE_LOCK_PHY0:
711 	case TG3_APE_LOCK_PHY1:
712 	case TG3_APE_LOCK_PHY2:
713 	case TG3_APE_LOCK_PHY3:
714 		bit = APE_LOCK_REQ_DRIVER;
715 		break;
716 	default:
717 		return -EINVAL;
718 	}
719 
720 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
721 		req = TG3_APE_LOCK_REQ;
722 		gnt = TG3_APE_LOCK_GRANT;
723 	} else {
724 		req = TG3_APE_PER_LOCK_REQ;
725 		gnt = TG3_APE_PER_LOCK_GRANT;
726 	}
727 
728 	off = 4 * locknum;
729 
730 	tg3_ape_write32(tp, req + off, bit);
731 
732 	/* Wait for up to 1 millisecond to acquire lock. */
733 	for (i = 0; i < 100; i++) {
734 		status = tg3_ape_read32(tp, gnt + off);
735 		if (status == bit)
736 			break;
737 		udelay(10);
738 	}
739 
740 	if (status != bit) {
741 		/* Revoke the lock request. */
742 		tg3_ape_write32(tp, gnt + off, bit);
743 		ret = -EBUSY;
744 	}
745 
746 	return ret;
747 }
748 
749 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
750 {
751 	u32 gnt, bit;
752 
753 	if (!tg3_flag(tp, ENABLE_APE))
754 		return;
755 
756 	switch (locknum) {
757 	case TG3_APE_LOCK_GPIO:
758 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
759 			return;
760 	case TG3_APE_LOCK_GRC:
761 	case TG3_APE_LOCK_MEM:
762 		if (!tp->pci_fn)
763 			bit = APE_LOCK_GRANT_DRIVER;
764 		else
765 			bit = 1 << tp->pci_fn;
766 		break;
767 	case TG3_APE_LOCK_PHY0:
768 	case TG3_APE_LOCK_PHY1:
769 	case TG3_APE_LOCK_PHY2:
770 	case TG3_APE_LOCK_PHY3:
771 		bit = APE_LOCK_GRANT_DRIVER;
772 		break;
773 	default:
774 		return;
775 	}
776 
777 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
778 		gnt = TG3_APE_LOCK_GRANT;
779 	else
780 		gnt = TG3_APE_PER_LOCK_GRANT;
781 
782 	tg3_ape_write32(tp, gnt + 4 * locknum, bit);
783 }
784 
785 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
786 {
787 	u32 apedata;
788 
789 	while (timeout_us) {
790 		if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
791 			return -EBUSY;
792 
793 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
794 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
795 			break;
796 
797 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
798 
799 		udelay(10);
800 		timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
801 	}
802 
803 	return timeout_us ? 0 : -EBUSY;
804 }
805 
806 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
807 {
808 	u32 i, apedata;
809 
810 	for (i = 0; i < timeout_us / 10; i++) {
811 		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
812 
813 		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
814 			break;
815 
816 		udelay(10);
817 	}
818 
819 	return i == timeout_us / 10;
820 }
821 
822 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
823 				   u32 len)
824 {
825 	int err;
826 	u32 i, bufoff, msgoff, maxlen, apedata;
827 
828 	if (!tg3_flag(tp, APE_HAS_NCSI))
829 		return 0;
830 
831 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
832 	if (apedata != APE_SEG_SIG_MAGIC)
833 		return -ENODEV;
834 
835 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
836 	if (!(apedata & APE_FW_STATUS_READY))
837 		return -EAGAIN;
838 
839 	bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
840 		 TG3_APE_SHMEM_BASE;
841 	msgoff = bufoff + 2 * sizeof(u32);
842 	maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
843 
844 	while (len) {
845 		u32 length;
846 
847 		/* Cap xfer sizes to scratchpad limits. */
848 		length = (len > maxlen) ? maxlen : len;
849 		len -= length;
850 
851 		apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
852 		if (!(apedata & APE_FW_STATUS_READY))
853 			return -EAGAIN;
854 
855 		/* Wait for up to 1 msec for APE to service previous event. */
856 		err = tg3_ape_event_lock(tp, 1000);
857 		if (err)
858 			return err;
859 
860 		apedata = APE_EVENT_STATUS_DRIVER_EVNT |
861 			  APE_EVENT_STATUS_SCRTCHPD_READ |
862 			  APE_EVENT_STATUS_EVENT_PENDING;
863 		tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
864 
865 		tg3_ape_write32(tp, bufoff, base_off);
866 		tg3_ape_write32(tp, bufoff + sizeof(u32), length);
867 
868 		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
869 		tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
870 
871 		base_off += length;
872 
873 		if (tg3_ape_wait_for_event(tp, 30000))
874 			return -EAGAIN;
875 
876 		for (i = 0; length; i += 4, length -= 4) {
877 			u32 val = tg3_ape_read32(tp, msgoff + i);
878 			memcpy(data, &val, sizeof(u32));
879 			data++;
880 		}
881 	}
882 
883 	return 0;
884 }
885 
886 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
887 {
888 	int err;
889 	u32 apedata;
890 
891 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
892 	if (apedata != APE_SEG_SIG_MAGIC)
893 		return -EAGAIN;
894 
895 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
896 	if (!(apedata & APE_FW_STATUS_READY))
897 		return -EAGAIN;
898 
899 	/* Wait for up to 1 millisecond for APE to service previous event. */
900 	err = tg3_ape_event_lock(tp, 1000);
901 	if (err)
902 		return err;
903 
904 	tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
905 			event | APE_EVENT_STATUS_EVENT_PENDING);
906 
907 	tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
908 	tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
909 
910 	return 0;
911 }
912 
913 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
914 {
915 	u32 event;
916 	u32 apedata;
917 
918 	if (!tg3_flag(tp, ENABLE_APE))
919 		return;
920 
921 	switch (kind) {
922 	case RESET_KIND_INIT:
923 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
924 				APE_HOST_SEG_SIG_MAGIC);
925 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
926 				APE_HOST_SEG_LEN_MAGIC);
927 		apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
928 		tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
929 		tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
930 			APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
931 		tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
932 				APE_HOST_BEHAV_NO_PHYLOCK);
933 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
934 				    TG3_APE_HOST_DRVR_STATE_START);
935 
936 		event = APE_EVENT_STATUS_STATE_START;
937 		break;
938 	case RESET_KIND_SHUTDOWN:
939 		/* With the interface we are currently using,
940 		 * APE does not track driver state.  Wiping
941 		 * out the HOST SEGMENT SIGNATURE forces
942 		 * the APE to assume OS absent status.
943 		 */
944 		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
945 
946 		if (device_may_wakeup(&tp->pdev->dev) &&
947 		    tg3_flag(tp, WOL_ENABLE)) {
948 			tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
949 					    TG3_APE_HOST_WOL_SPEED_AUTO);
950 			apedata = TG3_APE_HOST_DRVR_STATE_WOL;
951 		} else
952 			apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
953 
954 		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
955 
956 		event = APE_EVENT_STATUS_STATE_UNLOAD;
957 		break;
958 	case RESET_KIND_SUSPEND:
959 		event = APE_EVENT_STATUS_STATE_SUSPEND;
960 		break;
961 	default:
962 		return;
963 	}
964 
965 	event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
966 
967 	tg3_ape_send_event(tp, event);
968 }
969 
970 static void tg3_disable_ints(struct tg3 *tp)
971 {
972 	int i;
973 
974 	tw32(TG3PCI_MISC_HOST_CTRL,
975 	     (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
976 	for (i = 0; i < tp->irq_max; i++)
977 		tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
978 }
979 
980 static void tg3_enable_ints(struct tg3 *tp)
981 {
982 	int i;
983 
984 	tp->irq_sync = 0;
985 	wmb();
986 
987 	tw32(TG3PCI_MISC_HOST_CTRL,
988 	     (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
989 
990 	tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
991 	for (i = 0; i < tp->irq_cnt; i++) {
992 		struct tg3_napi *tnapi = &tp->napi[i];
993 
994 		tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
995 		if (tg3_flag(tp, 1SHOT_MSI))
996 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
997 
998 		tp->coal_now |= tnapi->coal_now;
999 	}
1000 
1001 	/* Force an initial interrupt */
1002 	if (!tg3_flag(tp, TAGGED_STATUS) &&
1003 	    (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1004 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1005 	else
1006 		tw32(HOSTCC_MODE, tp->coal_now);
1007 
1008 	tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1009 }
1010 
1011 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1012 {
1013 	struct tg3 *tp = tnapi->tp;
1014 	struct tg3_hw_status *sblk = tnapi->hw_status;
1015 	unsigned int work_exists = 0;
1016 
1017 	/* check for phy events */
1018 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1019 		if (sblk->status & SD_STATUS_LINK_CHG)
1020 			work_exists = 1;
1021 	}
1022 
1023 	/* check for TX work to do */
1024 	if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1025 		work_exists = 1;
1026 
1027 	/* check for RX work to do */
1028 	if (tnapi->rx_rcb_prod_idx &&
1029 	    *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1030 		work_exists = 1;
1031 
1032 	return work_exists;
1033 }
1034 
1035 /* tg3_int_reenable
1036  *  similar to tg3_enable_ints, but it accurately determines whether there
1037  *  is new work pending and can return without flushing the PIO write
1038  *  which reenables interrupts
1039  */
1040 static void tg3_int_reenable(struct tg3_napi *tnapi)
1041 {
1042 	struct tg3 *tp = tnapi->tp;
1043 
1044 	tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1045 	mmiowb();
1046 
1047 	/* When doing tagged status, this work check is unnecessary.
1048 	 * The last_tag we write above tells the chip which piece of
1049 	 * work we've completed.
1050 	 */
1051 	if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1052 		tw32(HOSTCC_MODE, tp->coalesce_mode |
1053 		     HOSTCC_MODE_ENABLE | tnapi->coal_now);
1054 }
1055 
1056 static void tg3_switch_clocks(struct tg3 *tp)
1057 {
1058 	u32 clock_ctrl;
1059 	u32 orig_clock_ctrl;
1060 
1061 	if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1062 		return;
1063 
1064 	clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1065 
1066 	orig_clock_ctrl = clock_ctrl;
1067 	clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1068 		       CLOCK_CTRL_CLKRUN_OENABLE |
1069 		       0x1f);
1070 	tp->pci_clock_ctrl = clock_ctrl;
1071 
1072 	if (tg3_flag(tp, 5705_PLUS)) {
1073 		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1074 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
1075 				    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1076 		}
1077 	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1078 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1079 			    clock_ctrl |
1080 			    (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1081 			    40);
1082 		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1083 			    clock_ctrl | (CLOCK_CTRL_ALTCLK),
1084 			    40);
1085 	}
1086 	tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1087 }
1088 
1089 #define PHY_BUSY_LOOPS	5000
1090 
1091 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1092 {
1093 	u32 frame_val;
1094 	unsigned int loops;
1095 	int ret;
1096 
1097 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1098 		tw32_f(MAC_MI_MODE,
1099 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1100 		udelay(80);
1101 	}
1102 
1103 	tg3_ape_lock(tp, tp->phy_ape_lock);
1104 
1105 	*val = 0x0;
1106 
1107 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1108 		      MI_COM_PHY_ADDR_MASK);
1109 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1110 		      MI_COM_REG_ADDR_MASK);
1111 	frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1112 
1113 	tw32_f(MAC_MI_COM, frame_val);
1114 
1115 	loops = PHY_BUSY_LOOPS;
1116 	while (loops != 0) {
1117 		udelay(10);
1118 		frame_val = tr32(MAC_MI_COM);
1119 
1120 		if ((frame_val & MI_COM_BUSY) == 0) {
1121 			udelay(5);
1122 			frame_val = tr32(MAC_MI_COM);
1123 			break;
1124 		}
1125 		loops -= 1;
1126 	}
1127 
1128 	ret = -EBUSY;
1129 	if (loops != 0) {
1130 		*val = frame_val & MI_COM_DATA_MASK;
1131 		ret = 0;
1132 	}
1133 
1134 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1135 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1136 		udelay(80);
1137 	}
1138 
1139 	tg3_ape_unlock(tp, tp->phy_ape_lock);
1140 
1141 	return ret;
1142 }
1143 
1144 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1145 {
1146 	u32 frame_val;
1147 	unsigned int loops;
1148 	int ret;
1149 
1150 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1151 	    (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1152 		return 0;
1153 
1154 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1155 		tw32_f(MAC_MI_MODE,
1156 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1157 		udelay(80);
1158 	}
1159 
1160 	tg3_ape_lock(tp, tp->phy_ape_lock);
1161 
1162 	frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1163 		      MI_COM_PHY_ADDR_MASK);
1164 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1165 		      MI_COM_REG_ADDR_MASK);
1166 	frame_val |= (val & MI_COM_DATA_MASK);
1167 	frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1168 
1169 	tw32_f(MAC_MI_COM, frame_val);
1170 
1171 	loops = PHY_BUSY_LOOPS;
1172 	while (loops != 0) {
1173 		udelay(10);
1174 		frame_val = tr32(MAC_MI_COM);
1175 		if ((frame_val & MI_COM_BUSY) == 0) {
1176 			udelay(5);
1177 			frame_val = tr32(MAC_MI_COM);
1178 			break;
1179 		}
1180 		loops -= 1;
1181 	}
1182 
1183 	ret = -EBUSY;
1184 	if (loops != 0)
1185 		ret = 0;
1186 
1187 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1188 		tw32_f(MAC_MI_MODE, tp->mi_mode);
1189 		udelay(80);
1190 	}
1191 
1192 	tg3_ape_unlock(tp, tp->phy_ape_lock);
1193 
1194 	return ret;
1195 }
1196 
1197 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1198 {
1199 	int err;
1200 
1201 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1202 	if (err)
1203 		goto done;
1204 
1205 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1206 	if (err)
1207 		goto done;
1208 
1209 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1210 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1211 	if (err)
1212 		goto done;
1213 
1214 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1215 
1216 done:
1217 	return err;
1218 }
1219 
1220 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1221 {
1222 	int err;
1223 
1224 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1225 	if (err)
1226 		goto done;
1227 
1228 	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1229 	if (err)
1230 		goto done;
1231 
1232 	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1233 			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1234 	if (err)
1235 		goto done;
1236 
1237 	err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1238 
1239 done:
1240 	return err;
1241 }
1242 
1243 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1244 {
1245 	int err;
1246 
1247 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1248 	if (!err)
1249 		err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1250 
1251 	return err;
1252 }
1253 
1254 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1255 {
1256 	int err;
1257 
1258 	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1259 	if (!err)
1260 		err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1261 
1262 	return err;
1263 }
1264 
1265 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1266 {
1267 	int err;
1268 
1269 	err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1270 			   (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1271 			   MII_TG3_AUXCTL_SHDWSEL_MISC);
1272 	if (!err)
1273 		err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1274 
1275 	return err;
1276 }
1277 
1278 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1279 {
1280 	if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1281 		set |= MII_TG3_AUXCTL_MISC_WREN;
1282 
1283 	return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1284 }
1285 
1286 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1287 {
1288 	u32 val;
1289 	int err;
1290 
1291 	err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1292 
1293 	if (err)
1294 		return err;
1295 	if (enable)
1296 
1297 		val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1298 	else
1299 		val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1300 
1301 	err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1302 				   val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1303 
1304 	return err;
1305 }
1306 
1307 static int tg3_bmcr_reset(struct tg3 *tp)
1308 {
1309 	u32 phy_control;
1310 	int limit, err;
1311 
1312 	/* OK, reset it, and poll the BMCR_RESET bit until it
1313 	 * clears or we time out.
1314 	 */
1315 	phy_control = BMCR_RESET;
1316 	err = tg3_writephy(tp, MII_BMCR, phy_control);
1317 	if (err != 0)
1318 		return -EBUSY;
1319 
1320 	limit = 5000;
1321 	while (limit--) {
1322 		err = tg3_readphy(tp, MII_BMCR, &phy_control);
1323 		if (err != 0)
1324 			return -EBUSY;
1325 
1326 		if ((phy_control & BMCR_RESET) == 0) {
1327 			udelay(40);
1328 			break;
1329 		}
1330 		udelay(10);
1331 	}
1332 	if (limit < 0)
1333 		return -EBUSY;
1334 
1335 	return 0;
1336 }
1337 
1338 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1339 {
1340 	struct tg3 *tp = bp->priv;
1341 	u32 val;
1342 
1343 	spin_lock_bh(&tp->lock);
1344 
1345 	if (tg3_readphy(tp, reg, &val))
1346 		val = -EIO;
1347 
1348 	spin_unlock_bh(&tp->lock);
1349 
1350 	return val;
1351 }
1352 
1353 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1354 {
1355 	struct tg3 *tp = bp->priv;
1356 	u32 ret = 0;
1357 
1358 	spin_lock_bh(&tp->lock);
1359 
1360 	if (tg3_writephy(tp, reg, val))
1361 		ret = -EIO;
1362 
1363 	spin_unlock_bh(&tp->lock);
1364 
1365 	return ret;
1366 }
1367 
1368 static int tg3_mdio_reset(struct mii_bus *bp)
1369 {
1370 	return 0;
1371 }
1372 
1373 static void tg3_mdio_config_5785(struct tg3 *tp)
1374 {
1375 	u32 val;
1376 	struct phy_device *phydev;
1377 
1378 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1379 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1380 	case PHY_ID_BCM50610:
1381 	case PHY_ID_BCM50610M:
1382 		val = MAC_PHYCFG2_50610_LED_MODES;
1383 		break;
1384 	case PHY_ID_BCMAC131:
1385 		val = MAC_PHYCFG2_AC131_LED_MODES;
1386 		break;
1387 	case PHY_ID_RTL8211C:
1388 		val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1389 		break;
1390 	case PHY_ID_RTL8201E:
1391 		val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1392 		break;
1393 	default:
1394 		return;
1395 	}
1396 
1397 	if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1398 		tw32(MAC_PHYCFG2, val);
1399 
1400 		val = tr32(MAC_PHYCFG1);
1401 		val &= ~(MAC_PHYCFG1_RGMII_INT |
1402 			 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1403 		val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1404 		tw32(MAC_PHYCFG1, val);
1405 
1406 		return;
1407 	}
1408 
1409 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1410 		val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1411 		       MAC_PHYCFG2_FMODE_MASK_MASK |
1412 		       MAC_PHYCFG2_GMODE_MASK_MASK |
1413 		       MAC_PHYCFG2_ACT_MASK_MASK   |
1414 		       MAC_PHYCFG2_QUAL_MASK_MASK |
1415 		       MAC_PHYCFG2_INBAND_ENABLE;
1416 
1417 	tw32(MAC_PHYCFG2, val);
1418 
1419 	val = tr32(MAC_PHYCFG1);
1420 	val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1421 		 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1422 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1423 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1424 			val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1425 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1426 			val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1427 	}
1428 	val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1429 	       MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1430 	tw32(MAC_PHYCFG1, val);
1431 
1432 	val = tr32(MAC_EXT_RGMII_MODE);
1433 	val &= ~(MAC_RGMII_MODE_RX_INT_B |
1434 		 MAC_RGMII_MODE_RX_QUALITY |
1435 		 MAC_RGMII_MODE_RX_ACTIVITY |
1436 		 MAC_RGMII_MODE_RX_ENG_DET |
1437 		 MAC_RGMII_MODE_TX_ENABLE |
1438 		 MAC_RGMII_MODE_TX_LOWPWR |
1439 		 MAC_RGMII_MODE_TX_RESET);
1440 	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1441 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1442 			val |= MAC_RGMII_MODE_RX_INT_B |
1443 			       MAC_RGMII_MODE_RX_QUALITY |
1444 			       MAC_RGMII_MODE_RX_ACTIVITY |
1445 			       MAC_RGMII_MODE_RX_ENG_DET;
1446 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1447 			val |= MAC_RGMII_MODE_TX_ENABLE |
1448 			       MAC_RGMII_MODE_TX_LOWPWR |
1449 			       MAC_RGMII_MODE_TX_RESET;
1450 	}
1451 	tw32(MAC_EXT_RGMII_MODE, val);
1452 }
1453 
1454 static void tg3_mdio_start(struct tg3 *tp)
1455 {
1456 	tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1457 	tw32_f(MAC_MI_MODE, tp->mi_mode);
1458 	udelay(80);
1459 
1460 	if (tg3_flag(tp, MDIOBUS_INITED) &&
1461 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1462 		tg3_mdio_config_5785(tp);
1463 }
1464 
1465 static int tg3_mdio_init(struct tg3 *tp)
1466 {
1467 	int i;
1468 	u32 reg;
1469 	struct phy_device *phydev;
1470 
1471 	if (tg3_flag(tp, 5717_PLUS)) {
1472 		u32 is_serdes;
1473 
1474 		tp->phy_addr = tp->pci_fn + 1;
1475 
1476 		if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0)
1477 			is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1478 		else
1479 			is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1480 				    TG3_CPMU_PHY_STRAP_IS_SERDES;
1481 		if (is_serdes)
1482 			tp->phy_addr += 7;
1483 	} else
1484 		tp->phy_addr = TG3_PHY_MII_ADDR;
1485 
1486 	tg3_mdio_start(tp);
1487 
1488 	if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1489 		return 0;
1490 
1491 	tp->mdio_bus = mdiobus_alloc();
1492 	if (tp->mdio_bus == NULL)
1493 		return -ENOMEM;
1494 
1495 	tp->mdio_bus->name     = "tg3 mdio bus";
1496 	snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1497 		 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1498 	tp->mdio_bus->priv     = tp;
1499 	tp->mdio_bus->parent   = &tp->pdev->dev;
1500 	tp->mdio_bus->read     = &tg3_mdio_read;
1501 	tp->mdio_bus->write    = &tg3_mdio_write;
1502 	tp->mdio_bus->reset    = &tg3_mdio_reset;
1503 	tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
1504 	tp->mdio_bus->irq      = &tp->mdio_irq[0];
1505 
1506 	for (i = 0; i < PHY_MAX_ADDR; i++)
1507 		tp->mdio_bus->irq[i] = PHY_POLL;
1508 
1509 	/* The bus registration will look for all the PHYs on the mdio bus.
1510 	 * Unfortunately, it does not ensure the PHY is powered up before
1511 	 * accessing the PHY ID registers.  A chip reset is the
1512 	 * quickest way to bring the device back to an operational state..
1513 	 */
1514 	if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1515 		tg3_bmcr_reset(tp);
1516 
1517 	i = mdiobus_register(tp->mdio_bus);
1518 	if (i) {
1519 		dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1520 		mdiobus_free(tp->mdio_bus);
1521 		return i;
1522 	}
1523 
1524 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1525 
1526 	if (!phydev || !phydev->drv) {
1527 		dev_warn(&tp->pdev->dev, "No PHY devices\n");
1528 		mdiobus_unregister(tp->mdio_bus);
1529 		mdiobus_free(tp->mdio_bus);
1530 		return -ENODEV;
1531 	}
1532 
1533 	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1534 	case PHY_ID_BCM57780:
1535 		phydev->interface = PHY_INTERFACE_MODE_GMII;
1536 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1537 		break;
1538 	case PHY_ID_BCM50610:
1539 	case PHY_ID_BCM50610M:
1540 		phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1541 				     PHY_BRCM_RX_REFCLK_UNUSED |
1542 				     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1543 				     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1544 		if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1545 			phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1546 		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1547 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1548 		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1549 			phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1550 		/* fallthru */
1551 	case PHY_ID_RTL8211C:
1552 		phydev->interface = PHY_INTERFACE_MODE_RGMII;
1553 		break;
1554 	case PHY_ID_RTL8201E:
1555 	case PHY_ID_BCMAC131:
1556 		phydev->interface = PHY_INTERFACE_MODE_MII;
1557 		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1558 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
1559 		break;
1560 	}
1561 
1562 	tg3_flag_set(tp, MDIOBUS_INITED);
1563 
1564 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
1565 		tg3_mdio_config_5785(tp);
1566 
1567 	return 0;
1568 }
1569 
1570 static void tg3_mdio_fini(struct tg3 *tp)
1571 {
1572 	if (tg3_flag(tp, MDIOBUS_INITED)) {
1573 		tg3_flag_clear(tp, MDIOBUS_INITED);
1574 		mdiobus_unregister(tp->mdio_bus);
1575 		mdiobus_free(tp->mdio_bus);
1576 	}
1577 }
1578 
1579 /* tp->lock is held. */
1580 static inline void tg3_generate_fw_event(struct tg3 *tp)
1581 {
1582 	u32 val;
1583 
1584 	val = tr32(GRC_RX_CPU_EVENT);
1585 	val |= GRC_RX_CPU_DRIVER_EVENT;
1586 	tw32_f(GRC_RX_CPU_EVENT, val);
1587 
1588 	tp->last_event_jiffies = jiffies;
1589 }
1590 
1591 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1592 
1593 /* tp->lock is held. */
1594 static void tg3_wait_for_event_ack(struct tg3 *tp)
1595 {
1596 	int i;
1597 	unsigned int delay_cnt;
1598 	long time_remain;
1599 
1600 	/* If enough time has passed, no wait is necessary. */
1601 	time_remain = (long)(tp->last_event_jiffies + 1 +
1602 		      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1603 		      (long)jiffies;
1604 	if (time_remain < 0)
1605 		return;
1606 
1607 	/* Check if we can shorten the wait time. */
1608 	delay_cnt = jiffies_to_usecs(time_remain);
1609 	if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1610 		delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1611 	delay_cnt = (delay_cnt >> 3) + 1;
1612 
1613 	for (i = 0; i < delay_cnt; i++) {
1614 		if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1615 			break;
1616 		udelay(8);
1617 	}
1618 }
1619 
1620 /* tp->lock is held. */
1621 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1622 {
1623 	u32 reg, val;
1624 
1625 	val = 0;
1626 	if (!tg3_readphy(tp, MII_BMCR, &reg))
1627 		val = reg << 16;
1628 	if (!tg3_readphy(tp, MII_BMSR, &reg))
1629 		val |= (reg & 0xffff);
1630 	*data++ = val;
1631 
1632 	val = 0;
1633 	if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1634 		val = reg << 16;
1635 	if (!tg3_readphy(tp, MII_LPA, &reg))
1636 		val |= (reg & 0xffff);
1637 	*data++ = val;
1638 
1639 	val = 0;
1640 	if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1641 		if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1642 			val = reg << 16;
1643 		if (!tg3_readphy(tp, MII_STAT1000, &reg))
1644 			val |= (reg & 0xffff);
1645 	}
1646 	*data++ = val;
1647 
1648 	if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1649 		val = reg << 16;
1650 	else
1651 		val = 0;
1652 	*data++ = val;
1653 }
1654 
1655 /* tp->lock is held. */
1656 static void tg3_ump_link_report(struct tg3 *tp)
1657 {
1658 	u32 data[4];
1659 
1660 	if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1661 		return;
1662 
1663 	tg3_phy_gather_ump_data(tp, data);
1664 
1665 	tg3_wait_for_event_ack(tp);
1666 
1667 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1668 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1669 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1670 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1671 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1672 	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1673 
1674 	tg3_generate_fw_event(tp);
1675 }
1676 
1677 /* tp->lock is held. */
1678 static void tg3_stop_fw(struct tg3 *tp)
1679 {
1680 	if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1681 		/* Wait for RX cpu to ACK the previous event. */
1682 		tg3_wait_for_event_ack(tp);
1683 
1684 		tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1685 
1686 		tg3_generate_fw_event(tp);
1687 
1688 		/* Wait for RX cpu to ACK this event. */
1689 		tg3_wait_for_event_ack(tp);
1690 	}
1691 }
1692 
1693 /* tp->lock is held. */
1694 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1695 {
1696 	tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1697 		      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1698 
1699 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1700 		switch (kind) {
1701 		case RESET_KIND_INIT:
1702 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1703 				      DRV_STATE_START);
1704 			break;
1705 
1706 		case RESET_KIND_SHUTDOWN:
1707 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1708 				      DRV_STATE_UNLOAD);
1709 			break;
1710 
1711 		case RESET_KIND_SUSPEND:
1712 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1713 				      DRV_STATE_SUSPEND);
1714 			break;
1715 
1716 		default:
1717 			break;
1718 		}
1719 	}
1720 
1721 	if (kind == RESET_KIND_INIT ||
1722 	    kind == RESET_KIND_SUSPEND)
1723 		tg3_ape_driver_state_change(tp, kind);
1724 }
1725 
1726 /* tp->lock is held. */
1727 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1728 {
1729 	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1730 		switch (kind) {
1731 		case RESET_KIND_INIT:
1732 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1733 				      DRV_STATE_START_DONE);
1734 			break;
1735 
1736 		case RESET_KIND_SHUTDOWN:
1737 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1738 				      DRV_STATE_UNLOAD_DONE);
1739 			break;
1740 
1741 		default:
1742 			break;
1743 		}
1744 	}
1745 
1746 	if (kind == RESET_KIND_SHUTDOWN)
1747 		tg3_ape_driver_state_change(tp, kind);
1748 }
1749 
1750 /* tp->lock is held. */
1751 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1752 {
1753 	if (tg3_flag(tp, ENABLE_ASF)) {
1754 		switch (kind) {
1755 		case RESET_KIND_INIT:
1756 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1757 				      DRV_STATE_START);
1758 			break;
1759 
1760 		case RESET_KIND_SHUTDOWN:
1761 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1762 				      DRV_STATE_UNLOAD);
1763 			break;
1764 
1765 		case RESET_KIND_SUSPEND:
1766 			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1767 				      DRV_STATE_SUSPEND);
1768 			break;
1769 
1770 		default:
1771 			break;
1772 		}
1773 	}
1774 }
1775 
1776 static int tg3_poll_fw(struct tg3 *tp)
1777 {
1778 	int i;
1779 	u32 val;
1780 
1781 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1782 		/* Wait up to 20ms for init done. */
1783 		for (i = 0; i < 200; i++) {
1784 			if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1785 				return 0;
1786 			udelay(100);
1787 		}
1788 		return -ENODEV;
1789 	}
1790 
1791 	/* Wait for firmware initialization to complete. */
1792 	for (i = 0; i < 100000; i++) {
1793 		tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1794 		if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1795 			break;
1796 		udelay(10);
1797 	}
1798 
1799 	/* Chip might not be fitted with firmware.  Some Sun onboard
1800 	 * parts are configured like that.  So don't signal the timeout
1801 	 * of the above loop as an error, but do report the lack of
1802 	 * running firmware once.
1803 	 */
1804 	if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1805 		tg3_flag_set(tp, NO_FWARE_REPORTED);
1806 
1807 		netdev_info(tp->dev, "No firmware running\n");
1808 	}
1809 
1810 	if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
1811 		/* The 57765 A0 needs a little more
1812 		 * time to do some important work.
1813 		 */
1814 		mdelay(10);
1815 	}
1816 
1817 	return 0;
1818 }
1819 
1820 static void tg3_link_report(struct tg3 *tp)
1821 {
1822 	if (!netif_carrier_ok(tp->dev)) {
1823 		netif_info(tp, link, tp->dev, "Link is down\n");
1824 		tg3_ump_link_report(tp);
1825 	} else if (netif_msg_link(tp)) {
1826 		netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1827 			    (tp->link_config.active_speed == SPEED_1000 ?
1828 			     1000 :
1829 			     (tp->link_config.active_speed == SPEED_100 ?
1830 			      100 : 10)),
1831 			    (tp->link_config.active_duplex == DUPLEX_FULL ?
1832 			     "full" : "half"));
1833 
1834 		netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1835 			    (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1836 			    "on" : "off",
1837 			    (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1838 			    "on" : "off");
1839 
1840 		if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1841 			netdev_info(tp->dev, "EEE is %s\n",
1842 				    tp->setlpicnt ? "enabled" : "disabled");
1843 
1844 		tg3_ump_link_report(tp);
1845 	}
1846 }
1847 
1848 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1849 {
1850 	u16 miireg;
1851 
1852 	if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1853 		miireg = ADVERTISE_1000XPAUSE;
1854 	else if (flow_ctrl & FLOW_CTRL_TX)
1855 		miireg = ADVERTISE_1000XPSE_ASYM;
1856 	else if (flow_ctrl & FLOW_CTRL_RX)
1857 		miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1858 	else
1859 		miireg = 0;
1860 
1861 	return miireg;
1862 }
1863 
1864 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1865 {
1866 	u8 cap = 0;
1867 
1868 	if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1869 		cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1870 	} else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1871 		if (lcladv & ADVERTISE_1000XPAUSE)
1872 			cap = FLOW_CTRL_RX;
1873 		if (rmtadv & ADVERTISE_1000XPAUSE)
1874 			cap = FLOW_CTRL_TX;
1875 	}
1876 
1877 	return cap;
1878 }
1879 
1880 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1881 {
1882 	u8 autoneg;
1883 	u8 flowctrl = 0;
1884 	u32 old_rx_mode = tp->rx_mode;
1885 	u32 old_tx_mode = tp->tx_mode;
1886 
1887 	if (tg3_flag(tp, USE_PHYLIB))
1888 		autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
1889 	else
1890 		autoneg = tp->link_config.autoneg;
1891 
1892 	if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1893 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1894 			flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1895 		else
1896 			flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1897 	} else
1898 		flowctrl = tp->link_config.flowctrl;
1899 
1900 	tp->link_config.active_flowctrl = flowctrl;
1901 
1902 	if (flowctrl & FLOW_CTRL_RX)
1903 		tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1904 	else
1905 		tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1906 
1907 	if (old_rx_mode != tp->rx_mode)
1908 		tw32_f(MAC_RX_MODE, tp->rx_mode);
1909 
1910 	if (flowctrl & FLOW_CTRL_TX)
1911 		tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1912 	else
1913 		tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1914 
1915 	if (old_tx_mode != tp->tx_mode)
1916 		tw32_f(MAC_TX_MODE, tp->tx_mode);
1917 }
1918 
1919 static void tg3_adjust_link(struct net_device *dev)
1920 {
1921 	u8 oldflowctrl, linkmesg = 0;
1922 	u32 mac_mode, lcl_adv, rmt_adv;
1923 	struct tg3 *tp = netdev_priv(dev);
1924 	struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1925 
1926 	spin_lock_bh(&tp->lock);
1927 
1928 	mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
1929 				    MAC_MODE_HALF_DUPLEX);
1930 
1931 	oldflowctrl = tp->link_config.active_flowctrl;
1932 
1933 	if (phydev->link) {
1934 		lcl_adv = 0;
1935 		rmt_adv = 0;
1936 
1937 		if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
1938 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1939 		else if (phydev->speed == SPEED_1000 ||
1940 			 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785)
1941 			mac_mode |= MAC_MODE_PORT_MODE_GMII;
1942 		else
1943 			mac_mode |= MAC_MODE_PORT_MODE_MII;
1944 
1945 		if (phydev->duplex == DUPLEX_HALF)
1946 			mac_mode |= MAC_MODE_HALF_DUPLEX;
1947 		else {
1948 			lcl_adv = mii_advertise_flowctrl(
1949 				  tp->link_config.flowctrl);
1950 
1951 			if (phydev->pause)
1952 				rmt_adv = LPA_PAUSE_CAP;
1953 			if (phydev->asym_pause)
1954 				rmt_adv |= LPA_PAUSE_ASYM;
1955 		}
1956 
1957 		tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1958 	} else
1959 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
1960 
1961 	if (mac_mode != tp->mac_mode) {
1962 		tp->mac_mode = mac_mode;
1963 		tw32_f(MAC_MODE, tp->mac_mode);
1964 		udelay(40);
1965 	}
1966 
1967 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
1968 		if (phydev->speed == SPEED_10)
1969 			tw32(MAC_MI_STAT,
1970 			     MAC_MI_STAT_10MBPS_MODE |
1971 			     MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1972 		else
1973 			tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
1974 	}
1975 
1976 	if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
1977 		tw32(MAC_TX_LENGTHS,
1978 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1979 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1980 		      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
1981 	else
1982 		tw32(MAC_TX_LENGTHS,
1983 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1984 		      (6 << TX_LENGTHS_IPG_SHIFT) |
1985 		      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
1986 
1987 	if (phydev->link != tp->old_link ||
1988 	    phydev->speed != tp->link_config.active_speed ||
1989 	    phydev->duplex != tp->link_config.active_duplex ||
1990 	    oldflowctrl != tp->link_config.active_flowctrl)
1991 		linkmesg = 1;
1992 
1993 	tp->old_link = phydev->link;
1994 	tp->link_config.active_speed = phydev->speed;
1995 	tp->link_config.active_duplex = phydev->duplex;
1996 
1997 	spin_unlock_bh(&tp->lock);
1998 
1999 	if (linkmesg)
2000 		tg3_link_report(tp);
2001 }
2002 
2003 static int tg3_phy_init(struct tg3 *tp)
2004 {
2005 	struct phy_device *phydev;
2006 
2007 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2008 		return 0;
2009 
2010 	/* Bring the PHY back to a known state. */
2011 	tg3_bmcr_reset(tp);
2012 
2013 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
2014 
2015 	/* Attach the MAC to the PHY. */
2016 	phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link,
2017 			     phydev->dev_flags, phydev->interface);
2018 	if (IS_ERR(phydev)) {
2019 		dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2020 		return PTR_ERR(phydev);
2021 	}
2022 
2023 	/* Mask with MAC supported features. */
2024 	switch (phydev->interface) {
2025 	case PHY_INTERFACE_MODE_GMII:
2026 	case PHY_INTERFACE_MODE_RGMII:
2027 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2028 			phydev->supported &= (PHY_GBIT_FEATURES |
2029 					      SUPPORTED_Pause |
2030 					      SUPPORTED_Asym_Pause);
2031 			break;
2032 		}
2033 		/* fallthru */
2034 	case PHY_INTERFACE_MODE_MII:
2035 		phydev->supported &= (PHY_BASIC_FEATURES |
2036 				      SUPPORTED_Pause |
2037 				      SUPPORTED_Asym_Pause);
2038 		break;
2039 	default:
2040 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2041 		return -EINVAL;
2042 	}
2043 
2044 	tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2045 
2046 	phydev->advertising = phydev->supported;
2047 
2048 	return 0;
2049 }
2050 
2051 static void tg3_phy_start(struct tg3 *tp)
2052 {
2053 	struct phy_device *phydev;
2054 
2055 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2056 		return;
2057 
2058 	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
2059 
2060 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2061 		tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2062 		phydev->speed = tp->link_config.speed;
2063 		phydev->duplex = tp->link_config.duplex;
2064 		phydev->autoneg = tp->link_config.autoneg;
2065 		phydev->advertising = tp->link_config.advertising;
2066 	}
2067 
2068 	phy_start(phydev);
2069 
2070 	phy_start_aneg(phydev);
2071 }
2072 
2073 static void tg3_phy_stop(struct tg3 *tp)
2074 {
2075 	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2076 		return;
2077 
2078 	phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2079 }
2080 
2081 static void tg3_phy_fini(struct tg3 *tp)
2082 {
2083 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2084 		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2085 		tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2086 	}
2087 }
2088 
2089 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2090 {
2091 	int err;
2092 	u32 val;
2093 
2094 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2095 		return 0;
2096 
2097 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2098 		/* Cannot do read-modify-write on 5401 */
2099 		err = tg3_phy_auxctl_write(tp,
2100 					   MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2101 					   MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2102 					   0x4c20);
2103 		goto done;
2104 	}
2105 
2106 	err = tg3_phy_auxctl_read(tp,
2107 				  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2108 	if (err)
2109 		return err;
2110 
2111 	val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2112 	err = tg3_phy_auxctl_write(tp,
2113 				   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2114 
2115 done:
2116 	return err;
2117 }
2118 
2119 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2120 {
2121 	u32 phytest;
2122 
2123 	if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2124 		u32 phy;
2125 
2126 		tg3_writephy(tp, MII_TG3_FET_TEST,
2127 			     phytest | MII_TG3_FET_SHADOW_EN);
2128 		if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2129 			if (enable)
2130 				phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2131 			else
2132 				phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2133 			tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2134 		}
2135 		tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2136 	}
2137 }
2138 
2139 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2140 {
2141 	u32 reg;
2142 
2143 	if (!tg3_flag(tp, 5705_PLUS) ||
2144 	    (tg3_flag(tp, 5717_PLUS) &&
2145 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2146 		return;
2147 
2148 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2149 		tg3_phy_fet_toggle_apd(tp, enable);
2150 		return;
2151 	}
2152 
2153 	reg = MII_TG3_MISC_SHDW_WREN |
2154 	      MII_TG3_MISC_SHDW_SCR5_SEL |
2155 	      MII_TG3_MISC_SHDW_SCR5_LPED |
2156 	      MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2157 	      MII_TG3_MISC_SHDW_SCR5_SDTL |
2158 	      MII_TG3_MISC_SHDW_SCR5_C125OE;
2159 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable)
2160 		reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2161 
2162 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2163 
2164 
2165 	reg = MII_TG3_MISC_SHDW_WREN |
2166 	      MII_TG3_MISC_SHDW_APD_SEL |
2167 	      MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2168 	if (enable)
2169 		reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2170 
2171 	tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2172 }
2173 
2174 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
2175 {
2176 	u32 phy;
2177 
2178 	if (!tg3_flag(tp, 5705_PLUS) ||
2179 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2180 		return;
2181 
2182 	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2183 		u32 ephy;
2184 
2185 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2186 			u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2187 
2188 			tg3_writephy(tp, MII_TG3_FET_TEST,
2189 				     ephy | MII_TG3_FET_SHADOW_EN);
2190 			if (!tg3_readphy(tp, reg, &phy)) {
2191 				if (enable)
2192 					phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2193 				else
2194 					phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2195 				tg3_writephy(tp, reg, phy);
2196 			}
2197 			tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2198 		}
2199 	} else {
2200 		int ret;
2201 
2202 		ret = tg3_phy_auxctl_read(tp,
2203 					  MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2204 		if (!ret) {
2205 			if (enable)
2206 				phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2207 			else
2208 				phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2209 			tg3_phy_auxctl_write(tp,
2210 					     MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2211 		}
2212 	}
2213 }
2214 
2215 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2216 {
2217 	int ret;
2218 	u32 val;
2219 
2220 	if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2221 		return;
2222 
2223 	ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2224 	if (!ret)
2225 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2226 				     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2227 }
2228 
2229 static void tg3_phy_apply_otp(struct tg3 *tp)
2230 {
2231 	u32 otp, phy;
2232 
2233 	if (!tp->phy_otp)
2234 		return;
2235 
2236 	otp = tp->phy_otp;
2237 
2238 	if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2239 		return;
2240 
2241 	phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2242 	phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2243 	tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2244 
2245 	phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2246 	      ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2247 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2248 
2249 	phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2250 	phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2251 	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2252 
2253 	phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2254 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2255 
2256 	phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2257 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2258 
2259 	phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2260 	      ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2261 	tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2262 
2263 	tg3_phy_toggle_auxctl_smdsp(tp, false);
2264 }
2265 
2266 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
2267 {
2268 	u32 val;
2269 
2270 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2271 		return;
2272 
2273 	tp->setlpicnt = 0;
2274 
2275 	if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2276 	    current_link_up == 1 &&
2277 	    tp->link_config.active_duplex == DUPLEX_FULL &&
2278 	    (tp->link_config.active_speed == SPEED_100 ||
2279 	     tp->link_config.active_speed == SPEED_1000)) {
2280 		u32 eeectl;
2281 
2282 		if (tp->link_config.active_speed == SPEED_1000)
2283 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2284 		else
2285 			eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2286 
2287 		tw32(TG3_CPMU_EEE_CTRL, eeectl);
2288 
2289 		tg3_phy_cl45_read(tp, MDIO_MMD_AN,
2290 				  TG3_CL45_D7_EEERES_STAT, &val);
2291 
2292 		if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2293 		    val == TG3_CL45_D7_EEERES_STAT_LP_100TX)
2294 			tp->setlpicnt = 2;
2295 	}
2296 
2297 	if (!tp->setlpicnt) {
2298 		if (current_link_up == 1 &&
2299 		   !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2300 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2301 			tg3_phy_toggle_auxctl_smdsp(tp, false);
2302 		}
2303 
2304 		val = tr32(TG3_CPMU_EEE_MODE);
2305 		tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2306 	}
2307 }
2308 
2309 static void tg3_phy_eee_enable(struct tg3 *tp)
2310 {
2311 	u32 val;
2312 
2313 	if (tp->link_config.active_speed == SPEED_1000 &&
2314 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2315 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2316 	     tg3_flag(tp, 57765_CLASS)) &&
2317 	    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2318 		val = MII_TG3_DSP_TAP26_ALNOKO |
2319 		      MII_TG3_DSP_TAP26_RMRXSTO;
2320 		tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2321 		tg3_phy_toggle_auxctl_smdsp(tp, false);
2322 	}
2323 
2324 	val = tr32(TG3_CPMU_EEE_MODE);
2325 	tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2326 }
2327 
2328 static int tg3_wait_macro_done(struct tg3 *tp)
2329 {
2330 	int limit = 100;
2331 
2332 	while (limit--) {
2333 		u32 tmp32;
2334 
2335 		if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2336 			if ((tmp32 & 0x1000) == 0)
2337 				break;
2338 		}
2339 	}
2340 	if (limit < 0)
2341 		return -EBUSY;
2342 
2343 	return 0;
2344 }
2345 
2346 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2347 {
2348 	static const u32 test_pat[4][6] = {
2349 	{ 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2350 	{ 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2351 	{ 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2352 	{ 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2353 	};
2354 	int chan;
2355 
2356 	for (chan = 0; chan < 4; chan++) {
2357 		int i;
2358 
2359 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2360 			     (chan * 0x2000) | 0x0200);
2361 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2362 
2363 		for (i = 0; i < 6; i++)
2364 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2365 				     test_pat[chan][i]);
2366 
2367 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2368 		if (tg3_wait_macro_done(tp)) {
2369 			*resetp = 1;
2370 			return -EBUSY;
2371 		}
2372 
2373 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2374 			     (chan * 0x2000) | 0x0200);
2375 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2376 		if (tg3_wait_macro_done(tp)) {
2377 			*resetp = 1;
2378 			return -EBUSY;
2379 		}
2380 
2381 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2382 		if (tg3_wait_macro_done(tp)) {
2383 			*resetp = 1;
2384 			return -EBUSY;
2385 		}
2386 
2387 		for (i = 0; i < 6; i += 2) {
2388 			u32 low, high;
2389 
2390 			if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2391 			    tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2392 			    tg3_wait_macro_done(tp)) {
2393 				*resetp = 1;
2394 				return -EBUSY;
2395 			}
2396 			low &= 0x7fff;
2397 			high &= 0x000f;
2398 			if (low != test_pat[chan][i] ||
2399 			    high != test_pat[chan][i+1]) {
2400 				tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2401 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2402 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2403 
2404 				return -EBUSY;
2405 			}
2406 		}
2407 	}
2408 
2409 	return 0;
2410 }
2411 
2412 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2413 {
2414 	int chan;
2415 
2416 	for (chan = 0; chan < 4; chan++) {
2417 		int i;
2418 
2419 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2420 			     (chan * 0x2000) | 0x0200);
2421 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2422 		for (i = 0; i < 6; i++)
2423 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2424 		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2425 		if (tg3_wait_macro_done(tp))
2426 			return -EBUSY;
2427 	}
2428 
2429 	return 0;
2430 }
2431 
2432 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2433 {
2434 	u32 reg32, phy9_orig;
2435 	int retries, do_phy_reset, err;
2436 
2437 	retries = 10;
2438 	do_phy_reset = 1;
2439 	do {
2440 		if (do_phy_reset) {
2441 			err = tg3_bmcr_reset(tp);
2442 			if (err)
2443 				return err;
2444 			do_phy_reset = 0;
2445 		}
2446 
2447 		/* Disable transmitter and interrupt.  */
2448 		if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2449 			continue;
2450 
2451 		reg32 |= 0x3000;
2452 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2453 
2454 		/* Set full-duplex, 1000 mbps.  */
2455 		tg3_writephy(tp, MII_BMCR,
2456 			     BMCR_FULLDPLX | BMCR_SPEED1000);
2457 
2458 		/* Set to master mode.  */
2459 		if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2460 			continue;
2461 
2462 		tg3_writephy(tp, MII_CTRL1000,
2463 			     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2464 
2465 		err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2466 		if (err)
2467 			return err;
2468 
2469 		/* Block the PHY control access.  */
2470 		tg3_phydsp_write(tp, 0x8005, 0x0800);
2471 
2472 		err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2473 		if (!err)
2474 			break;
2475 	} while (--retries);
2476 
2477 	err = tg3_phy_reset_chanpat(tp);
2478 	if (err)
2479 		return err;
2480 
2481 	tg3_phydsp_write(tp, 0x8005, 0x0000);
2482 
2483 	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2484 	tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2485 
2486 	tg3_phy_toggle_auxctl_smdsp(tp, false);
2487 
2488 	tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2489 
2490 	if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2491 		reg32 &= ~0x3000;
2492 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2493 	} else if (!err)
2494 		err = -EBUSY;
2495 
2496 	return err;
2497 }
2498 
2499 static void tg3_carrier_on(struct tg3 *tp)
2500 {
2501 	netif_carrier_on(tp->dev);
2502 	tp->link_up = true;
2503 }
2504 
2505 static void tg3_carrier_off(struct tg3 *tp)
2506 {
2507 	netif_carrier_off(tp->dev);
2508 	tp->link_up = false;
2509 }
2510 
2511 /* This will reset the tigon3 PHY if there is no valid
2512  * link unless the FORCE argument is non-zero.
2513  */
2514 static int tg3_phy_reset(struct tg3 *tp)
2515 {
2516 	u32 val, cpmuctrl;
2517 	int err;
2518 
2519 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2520 		val = tr32(GRC_MISC_CFG);
2521 		tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2522 		udelay(40);
2523 	}
2524 	err  = tg3_readphy(tp, MII_BMSR, &val);
2525 	err |= tg3_readphy(tp, MII_BMSR, &val);
2526 	if (err != 0)
2527 		return -EBUSY;
2528 
2529 	if (netif_running(tp->dev) && tp->link_up) {
2530 		tg3_carrier_off(tp);
2531 		tg3_link_report(tp);
2532 	}
2533 
2534 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2535 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2536 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
2537 		err = tg3_phy_reset_5703_4_5(tp);
2538 		if (err)
2539 			return err;
2540 		goto out;
2541 	}
2542 
2543 	cpmuctrl = 0;
2544 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
2545 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
2546 		cpmuctrl = tr32(TG3_CPMU_CTRL);
2547 		if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2548 			tw32(TG3_CPMU_CTRL,
2549 			     cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2550 	}
2551 
2552 	err = tg3_bmcr_reset(tp);
2553 	if (err)
2554 		return err;
2555 
2556 	if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2557 		val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2558 		tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2559 
2560 		tw32(TG3_CPMU_CTRL, cpmuctrl);
2561 	}
2562 
2563 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2564 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2565 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2566 		if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2567 		    CPMU_LSPD_1000MB_MACCLK_12_5) {
2568 			val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2569 			udelay(40);
2570 			tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2571 		}
2572 	}
2573 
2574 	if (tg3_flag(tp, 5717_PLUS) &&
2575 	    (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2576 		return 0;
2577 
2578 	tg3_phy_apply_otp(tp);
2579 
2580 	if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2581 		tg3_phy_toggle_apd(tp, true);
2582 	else
2583 		tg3_phy_toggle_apd(tp, false);
2584 
2585 out:
2586 	if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2587 	    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2588 		tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2589 		tg3_phydsp_write(tp, 0x000a, 0x0323);
2590 		tg3_phy_toggle_auxctl_smdsp(tp, false);
2591 	}
2592 
2593 	if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2594 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2595 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2596 	}
2597 
2598 	if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2599 		if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2600 			tg3_phydsp_write(tp, 0x000a, 0x310b);
2601 			tg3_phydsp_write(tp, 0x201f, 0x9506);
2602 			tg3_phydsp_write(tp, 0x401f, 0x14e2);
2603 			tg3_phy_toggle_auxctl_smdsp(tp, false);
2604 		}
2605 	} else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2606 		if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2607 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2608 			if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2609 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2610 				tg3_writephy(tp, MII_TG3_TEST1,
2611 					     MII_TG3_TEST1_TRIM_EN | 0x4);
2612 			} else
2613 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2614 
2615 			tg3_phy_toggle_auxctl_smdsp(tp, false);
2616 		}
2617 	}
2618 
2619 	/* Set Extended packet length bit (bit 14) on all chips that */
2620 	/* support jumbo frames */
2621 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2622 		/* Cannot do read-modify-write on 5401 */
2623 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2624 	} else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2625 		/* Set bit 14 with read-modify-write to preserve other bits */
2626 		err = tg3_phy_auxctl_read(tp,
2627 					  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2628 		if (!err)
2629 			tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2630 					   val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2631 	}
2632 
2633 	/* Set phy register 0x10 bit 0 to high fifo elasticity to support
2634 	 * jumbo frames transmission.
2635 	 */
2636 	if (tg3_flag(tp, JUMBO_CAPABLE)) {
2637 		if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2638 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
2639 				     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2640 	}
2641 
2642 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2643 		/* adjust output voltage */
2644 		tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2645 	}
2646 
2647 	tg3_phy_toggle_automdix(tp, 1);
2648 	tg3_phy_set_wirespeed(tp);
2649 	return 0;
2650 }
2651 
2652 #define TG3_GPIO_MSG_DRVR_PRES		 0x00000001
2653 #define TG3_GPIO_MSG_NEED_VAUX		 0x00000002
2654 #define TG3_GPIO_MSG_MASK		 (TG3_GPIO_MSG_DRVR_PRES | \
2655 					  TG3_GPIO_MSG_NEED_VAUX)
2656 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2657 	((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2658 	 (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2659 	 (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2660 	 (TG3_GPIO_MSG_DRVR_PRES << 12))
2661 
2662 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2663 	((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2664 	 (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2665 	 (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2666 	 (TG3_GPIO_MSG_NEED_VAUX << 12))
2667 
2668 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2669 {
2670 	u32 status, shift;
2671 
2672 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2673 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2674 		status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2675 	else
2676 		status = tr32(TG3_CPMU_DRV_STATUS);
2677 
2678 	shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2679 	status &= ~(TG3_GPIO_MSG_MASK << shift);
2680 	status |= (newstat << shift);
2681 
2682 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2683 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
2684 		tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2685 	else
2686 		tw32(TG3_CPMU_DRV_STATUS, status);
2687 
2688 	return status >> TG3_APE_GPIO_MSG_SHIFT;
2689 }
2690 
2691 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2692 {
2693 	if (!tg3_flag(tp, IS_NIC))
2694 		return 0;
2695 
2696 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2697 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2698 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2699 		if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2700 			return -EIO;
2701 
2702 		tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2703 
2704 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2705 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2706 
2707 		tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2708 	} else {
2709 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2710 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2711 	}
2712 
2713 	return 0;
2714 }
2715 
2716 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2717 {
2718 	u32 grc_local_ctrl;
2719 
2720 	if (!tg3_flag(tp, IS_NIC) ||
2721 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2722 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)
2723 		return;
2724 
2725 	grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2726 
2727 	tw32_wait_f(GRC_LOCAL_CTRL,
2728 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2729 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2730 
2731 	tw32_wait_f(GRC_LOCAL_CTRL,
2732 		    grc_local_ctrl,
2733 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2734 
2735 	tw32_wait_f(GRC_LOCAL_CTRL,
2736 		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2737 		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2738 }
2739 
2740 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2741 {
2742 	if (!tg3_flag(tp, IS_NIC))
2743 		return;
2744 
2745 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2746 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2747 		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2748 			    (GRC_LCLCTRL_GPIO_OE0 |
2749 			     GRC_LCLCTRL_GPIO_OE1 |
2750 			     GRC_LCLCTRL_GPIO_OE2 |
2751 			     GRC_LCLCTRL_GPIO_OUTPUT0 |
2752 			     GRC_LCLCTRL_GPIO_OUTPUT1),
2753 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2754 	} else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2755 		   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2756 		/* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2757 		u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2758 				     GRC_LCLCTRL_GPIO_OE1 |
2759 				     GRC_LCLCTRL_GPIO_OE2 |
2760 				     GRC_LCLCTRL_GPIO_OUTPUT0 |
2761 				     GRC_LCLCTRL_GPIO_OUTPUT1 |
2762 				     tp->grc_local_ctrl;
2763 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2764 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2765 
2766 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2767 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2768 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2769 
2770 		grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2771 		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2772 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2773 	} else {
2774 		u32 no_gpio2;
2775 		u32 grc_local_ctrl = 0;
2776 
2777 		/* Workaround to prevent overdrawing Amps. */
2778 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2779 			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2780 			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2781 				    grc_local_ctrl,
2782 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2783 		}
2784 
2785 		/* On 5753 and variants, GPIO2 cannot be used. */
2786 		no_gpio2 = tp->nic_sram_data_cfg &
2787 			   NIC_SRAM_DATA_CFG_NO_GPIO2;
2788 
2789 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2790 				  GRC_LCLCTRL_GPIO_OE1 |
2791 				  GRC_LCLCTRL_GPIO_OE2 |
2792 				  GRC_LCLCTRL_GPIO_OUTPUT1 |
2793 				  GRC_LCLCTRL_GPIO_OUTPUT2;
2794 		if (no_gpio2) {
2795 			grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2796 					    GRC_LCLCTRL_GPIO_OUTPUT2);
2797 		}
2798 		tw32_wait_f(GRC_LOCAL_CTRL,
2799 			    tp->grc_local_ctrl | grc_local_ctrl,
2800 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2801 
2802 		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2803 
2804 		tw32_wait_f(GRC_LOCAL_CTRL,
2805 			    tp->grc_local_ctrl | grc_local_ctrl,
2806 			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2807 
2808 		if (!no_gpio2) {
2809 			grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2810 			tw32_wait_f(GRC_LOCAL_CTRL,
2811 				    tp->grc_local_ctrl | grc_local_ctrl,
2812 				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2813 		}
2814 	}
2815 }
2816 
2817 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2818 {
2819 	u32 msg = 0;
2820 
2821 	/* Serialize power state transitions */
2822 	if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2823 		return;
2824 
2825 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2826 		msg = TG3_GPIO_MSG_NEED_VAUX;
2827 
2828 	msg = tg3_set_function_status(tp, msg);
2829 
2830 	if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2831 		goto done;
2832 
2833 	if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2834 		tg3_pwrsrc_switch_to_vaux(tp);
2835 	else
2836 		tg3_pwrsrc_die_with_vmain(tp);
2837 
2838 done:
2839 	tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2840 }
2841 
2842 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2843 {
2844 	bool need_vaux = false;
2845 
2846 	/* The GPIOs do something completely different on 57765. */
2847 	if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2848 		return;
2849 
2850 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2851 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
2852 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
2853 		tg3_frob_aux_power_5717(tp, include_wol ?
2854 					tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2855 		return;
2856 	}
2857 
2858 	if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2859 		struct net_device *dev_peer;
2860 
2861 		dev_peer = pci_get_drvdata(tp->pdev_peer);
2862 
2863 		/* remove_one() may have been run on the peer. */
2864 		if (dev_peer) {
2865 			struct tg3 *tp_peer = netdev_priv(dev_peer);
2866 
2867 			if (tg3_flag(tp_peer, INIT_COMPLETE))
2868 				return;
2869 
2870 			if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2871 			    tg3_flag(tp_peer, ENABLE_ASF))
2872 				need_vaux = true;
2873 		}
2874 	}
2875 
2876 	if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2877 	    tg3_flag(tp, ENABLE_ASF))
2878 		need_vaux = true;
2879 
2880 	if (need_vaux)
2881 		tg3_pwrsrc_switch_to_vaux(tp);
2882 	else
2883 		tg3_pwrsrc_die_with_vmain(tp);
2884 }
2885 
2886 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
2887 {
2888 	if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
2889 		return 1;
2890 	else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
2891 		if (speed != SPEED_10)
2892 			return 1;
2893 	} else if (speed == SPEED_10)
2894 		return 1;
2895 
2896 	return 0;
2897 }
2898 
2899 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
2900 {
2901 	u32 val;
2902 
2903 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
2904 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
2905 			u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2906 			u32 serdes_cfg = tr32(MAC_SERDES_CFG);
2907 
2908 			sg_dig_ctrl |=
2909 				SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
2910 			tw32(SG_DIG_CTRL, sg_dig_ctrl);
2911 			tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
2912 		}
2913 		return;
2914 	}
2915 
2916 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
2917 		tg3_bmcr_reset(tp);
2918 		val = tr32(GRC_MISC_CFG);
2919 		tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
2920 		udelay(40);
2921 		return;
2922 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2923 		u32 phytest;
2924 		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2925 			u32 phy;
2926 
2927 			tg3_writephy(tp, MII_ADVERTISE, 0);
2928 			tg3_writephy(tp, MII_BMCR,
2929 				     BMCR_ANENABLE | BMCR_ANRESTART);
2930 
2931 			tg3_writephy(tp, MII_TG3_FET_TEST,
2932 				     phytest | MII_TG3_FET_SHADOW_EN);
2933 			if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
2934 				phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
2935 				tg3_writephy(tp,
2936 					     MII_TG3_FET_SHDW_AUXMODE4,
2937 					     phy);
2938 			}
2939 			tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2940 		}
2941 		return;
2942 	} else if (do_low_power) {
2943 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
2944 			     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
2945 
2946 		val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
2947 		      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
2948 		      MII_TG3_AUXCTL_PCTL_VREG_11V;
2949 		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
2950 	}
2951 
2952 	/* The PHY should not be powered down on some chips because
2953 	 * of bugs.
2954 	 */
2955 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2956 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2957 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
2958 	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
2959 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 &&
2960 	     !tp->pci_fn))
2961 		return;
2962 
2963 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX ||
2964 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) {
2965 		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2966 		val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2967 		val |= CPMU_LSPD_1000MB_MACCLK_12_5;
2968 		tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2969 	}
2970 
2971 	tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
2972 }
2973 
2974 /* tp->lock is held. */
2975 static int tg3_nvram_lock(struct tg3 *tp)
2976 {
2977 	if (tg3_flag(tp, NVRAM)) {
2978 		int i;
2979 
2980 		if (tp->nvram_lock_cnt == 0) {
2981 			tw32(NVRAM_SWARB, SWARB_REQ_SET1);
2982 			for (i = 0; i < 8000; i++) {
2983 				if (tr32(NVRAM_SWARB) & SWARB_GNT1)
2984 					break;
2985 				udelay(20);
2986 			}
2987 			if (i == 8000) {
2988 				tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
2989 				return -ENODEV;
2990 			}
2991 		}
2992 		tp->nvram_lock_cnt++;
2993 	}
2994 	return 0;
2995 }
2996 
2997 /* tp->lock is held. */
2998 static void tg3_nvram_unlock(struct tg3 *tp)
2999 {
3000 	if (tg3_flag(tp, NVRAM)) {
3001 		if (tp->nvram_lock_cnt > 0)
3002 			tp->nvram_lock_cnt--;
3003 		if (tp->nvram_lock_cnt == 0)
3004 			tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3005 	}
3006 }
3007 
3008 /* tp->lock is held. */
3009 static void tg3_enable_nvram_access(struct tg3 *tp)
3010 {
3011 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3012 		u32 nvaccess = tr32(NVRAM_ACCESS);
3013 
3014 		tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3015 	}
3016 }
3017 
3018 /* tp->lock is held. */
3019 static void tg3_disable_nvram_access(struct tg3 *tp)
3020 {
3021 	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3022 		u32 nvaccess = tr32(NVRAM_ACCESS);
3023 
3024 		tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3025 	}
3026 }
3027 
3028 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3029 					u32 offset, u32 *val)
3030 {
3031 	u32 tmp;
3032 	int i;
3033 
3034 	if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3035 		return -EINVAL;
3036 
3037 	tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3038 					EEPROM_ADDR_DEVID_MASK |
3039 					EEPROM_ADDR_READ);
3040 	tw32(GRC_EEPROM_ADDR,
3041 	     tmp |
3042 	     (0 << EEPROM_ADDR_DEVID_SHIFT) |
3043 	     ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3044 	      EEPROM_ADDR_ADDR_MASK) |
3045 	     EEPROM_ADDR_READ | EEPROM_ADDR_START);
3046 
3047 	for (i = 0; i < 1000; i++) {
3048 		tmp = tr32(GRC_EEPROM_ADDR);
3049 
3050 		if (tmp & EEPROM_ADDR_COMPLETE)
3051 			break;
3052 		msleep(1);
3053 	}
3054 	if (!(tmp & EEPROM_ADDR_COMPLETE))
3055 		return -EBUSY;
3056 
3057 	tmp = tr32(GRC_EEPROM_DATA);
3058 
3059 	/*
3060 	 * The data will always be opposite the native endian
3061 	 * format.  Perform a blind byteswap to compensate.
3062 	 */
3063 	*val = swab32(tmp);
3064 
3065 	return 0;
3066 }
3067 
3068 #define NVRAM_CMD_TIMEOUT 10000
3069 
3070 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3071 {
3072 	int i;
3073 
3074 	tw32(NVRAM_CMD, nvram_cmd);
3075 	for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3076 		udelay(10);
3077 		if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3078 			udelay(10);
3079 			break;
3080 		}
3081 	}
3082 
3083 	if (i == NVRAM_CMD_TIMEOUT)
3084 		return -EBUSY;
3085 
3086 	return 0;
3087 }
3088 
3089 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3090 {
3091 	if (tg3_flag(tp, NVRAM) &&
3092 	    tg3_flag(tp, NVRAM_BUFFERED) &&
3093 	    tg3_flag(tp, FLASH) &&
3094 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3095 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3096 
3097 		addr = ((addr / tp->nvram_pagesize) <<
3098 			ATMEL_AT45DB0X1B_PAGE_POS) +
3099 		       (addr % tp->nvram_pagesize);
3100 
3101 	return addr;
3102 }
3103 
3104 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3105 {
3106 	if (tg3_flag(tp, NVRAM) &&
3107 	    tg3_flag(tp, NVRAM_BUFFERED) &&
3108 	    tg3_flag(tp, FLASH) &&
3109 	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3110 	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3111 
3112 		addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3113 			tp->nvram_pagesize) +
3114 		       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3115 
3116 	return addr;
3117 }
3118 
3119 /* NOTE: Data read in from NVRAM is byteswapped according to
3120  * the byteswapping settings for all other register accesses.
3121  * tg3 devices are BE devices, so on a BE machine, the data
3122  * returned will be exactly as it is seen in NVRAM.  On a LE
3123  * machine, the 32-bit value will be byteswapped.
3124  */
3125 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3126 {
3127 	int ret;
3128 
3129 	if (!tg3_flag(tp, NVRAM))
3130 		return tg3_nvram_read_using_eeprom(tp, offset, val);
3131 
3132 	offset = tg3_nvram_phys_addr(tp, offset);
3133 
3134 	if (offset > NVRAM_ADDR_MSK)
3135 		return -EINVAL;
3136 
3137 	ret = tg3_nvram_lock(tp);
3138 	if (ret)
3139 		return ret;
3140 
3141 	tg3_enable_nvram_access(tp);
3142 
3143 	tw32(NVRAM_ADDR, offset);
3144 	ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3145 		NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3146 
3147 	if (ret == 0)
3148 		*val = tr32(NVRAM_RDDATA);
3149 
3150 	tg3_disable_nvram_access(tp);
3151 
3152 	tg3_nvram_unlock(tp);
3153 
3154 	return ret;
3155 }
3156 
3157 /* Ensures NVRAM data is in bytestream format. */
3158 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3159 {
3160 	u32 v;
3161 	int res = tg3_nvram_read(tp, offset, &v);
3162 	if (!res)
3163 		*val = cpu_to_be32(v);
3164 	return res;
3165 }
3166 
3167 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3168 				    u32 offset, u32 len, u8 *buf)
3169 {
3170 	int i, j, rc = 0;
3171 	u32 val;
3172 
3173 	for (i = 0; i < len; i += 4) {
3174 		u32 addr;
3175 		__be32 data;
3176 
3177 		addr = offset + i;
3178 
3179 		memcpy(&data, buf + i, 4);
3180 
3181 		/*
3182 		 * The SEEPROM interface expects the data to always be opposite
3183 		 * the native endian format.  We accomplish this by reversing
3184 		 * all the operations that would have been performed on the
3185 		 * data from a call to tg3_nvram_read_be32().
3186 		 */
3187 		tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3188 
3189 		val = tr32(GRC_EEPROM_ADDR);
3190 		tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3191 
3192 		val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3193 			EEPROM_ADDR_READ);
3194 		tw32(GRC_EEPROM_ADDR, val |
3195 			(0 << EEPROM_ADDR_DEVID_SHIFT) |
3196 			(addr & EEPROM_ADDR_ADDR_MASK) |
3197 			EEPROM_ADDR_START |
3198 			EEPROM_ADDR_WRITE);
3199 
3200 		for (j = 0; j < 1000; j++) {
3201 			val = tr32(GRC_EEPROM_ADDR);
3202 
3203 			if (val & EEPROM_ADDR_COMPLETE)
3204 				break;
3205 			msleep(1);
3206 		}
3207 		if (!(val & EEPROM_ADDR_COMPLETE)) {
3208 			rc = -EBUSY;
3209 			break;
3210 		}
3211 	}
3212 
3213 	return rc;
3214 }
3215 
3216 /* offset and length are dword aligned */
3217 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3218 		u8 *buf)
3219 {
3220 	int ret = 0;
3221 	u32 pagesize = tp->nvram_pagesize;
3222 	u32 pagemask = pagesize - 1;
3223 	u32 nvram_cmd;
3224 	u8 *tmp;
3225 
3226 	tmp = kmalloc(pagesize, GFP_KERNEL);
3227 	if (tmp == NULL)
3228 		return -ENOMEM;
3229 
3230 	while (len) {
3231 		int j;
3232 		u32 phy_addr, page_off, size;
3233 
3234 		phy_addr = offset & ~pagemask;
3235 
3236 		for (j = 0; j < pagesize; j += 4) {
3237 			ret = tg3_nvram_read_be32(tp, phy_addr + j,
3238 						  (__be32 *) (tmp + j));
3239 			if (ret)
3240 				break;
3241 		}
3242 		if (ret)
3243 			break;
3244 
3245 		page_off = offset & pagemask;
3246 		size = pagesize;
3247 		if (len < size)
3248 			size = len;
3249 
3250 		len -= size;
3251 
3252 		memcpy(tmp + page_off, buf, size);
3253 
3254 		offset = offset + (pagesize - page_off);
3255 
3256 		tg3_enable_nvram_access(tp);
3257 
3258 		/*
3259 		 * Before we can erase the flash page, we need
3260 		 * to issue a special "write enable" command.
3261 		 */
3262 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3263 
3264 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3265 			break;
3266 
3267 		/* Erase the target page */
3268 		tw32(NVRAM_ADDR, phy_addr);
3269 
3270 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3271 			NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3272 
3273 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3274 			break;
3275 
3276 		/* Issue another write enable to start the write. */
3277 		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3278 
3279 		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3280 			break;
3281 
3282 		for (j = 0; j < pagesize; j += 4) {
3283 			__be32 data;
3284 
3285 			data = *((__be32 *) (tmp + j));
3286 
3287 			tw32(NVRAM_WRDATA, be32_to_cpu(data));
3288 
3289 			tw32(NVRAM_ADDR, phy_addr + j);
3290 
3291 			nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3292 				NVRAM_CMD_WR;
3293 
3294 			if (j == 0)
3295 				nvram_cmd |= NVRAM_CMD_FIRST;
3296 			else if (j == (pagesize - 4))
3297 				nvram_cmd |= NVRAM_CMD_LAST;
3298 
3299 			ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3300 			if (ret)
3301 				break;
3302 		}
3303 		if (ret)
3304 			break;
3305 	}
3306 
3307 	nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3308 	tg3_nvram_exec_cmd(tp, nvram_cmd);
3309 
3310 	kfree(tmp);
3311 
3312 	return ret;
3313 }
3314 
3315 /* offset and length are dword aligned */
3316 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3317 		u8 *buf)
3318 {
3319 	int i, ret = 0;
3320 
3321 	for (i = 0; i < len; i += 4, offset += 4) {
3322 		u32 page_off, phy_addr, nvram_cmd;
3323 		__be32 data;
3324 
3325 		memcpy(&data, buf + i, 4);
3326 		tw32(NVRAM_WRDATA, be32_to_cpu(data));
3327 
3328 		page_off = offset % tp->nvram_pagesize;
3329 
3330 		phy_addr = tg3_nvram_phys_addr(tp, offset);
3331 
3332 		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3333 
3334 		if (page_off == 0 || i == 0)
3335 			nvram_cmd |= NVRAM_CMD_FIRST;
3336 		if (page_off == (tp->nvram_pagesize - 4))
3337 			nvram_cmd |= NVRAM_CMD_LAST;
3338 
3339 		if (i == (len - 4))
3340 			nvram_cmd |= NVRAM_CMD_LAST;
3341 
3342 		if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3343 		    !tg3_flag(tp, FLASH) ||
3344 		    !tg3_flag(tp, 57765_PLUS))
3345 			tw32(NVRAM_ADDR, phy_addr);
3346 
3347 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
3348 		    !tg3_flag(tp, 5755_PLUS) &&
3349 		    (tp->nvram_jedecnum == JEDEC_ST) &&
3350 		    (nvram_cmd & NVRAM_CMD_FIRST)) {
3351 			u32 cmd;
3352 
3353 			cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3354 			ret = tg3_nvram_exec_cmd(tp, cmd);
3355 			if (ret)
3356 				break;
3357 		}
3358 		if (!tg3_flag(tp, FLASH)) {
3359 			/* We always do complete word writes to eeprom. */
3360 			nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3361 		}
3362 
3363 		ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3364 		if (ret)
3365 			break;
3366 	}
3367 	return ret;
3368 }
3369 
3370 /* offset and length are dword aligned */
3371 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3372 {
3373 	int ret;
3374 
3375 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3376 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3377 		       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3378 		udelay(40);
3379 	}
3380 
3381 	if (!tg3_flag(tp, NVRAM)) {
3382 		ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3383 	} else {
3384 		u32 grc_mode;
3385 
3386 		ret = tg3_nvram_lock(tp);
3387 		if (ret)
3388 			return ret;
3389 
3390 		tg3_enable_nvram_access(tp);
3391 		if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3392 			tw32(NVRAM_WRITE1, 0x406);
3393 
3394 		grc_mode = tr32(GRC_MODE);
3395 		tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3396 
3397 		if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3398 			ret = tg3_nvram_write_block_buffered(tp, offset, len,
3399 				buf);
3400 		} else {
3401 			ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3402 				buf);
3403 		}
3404 
3405 		grc_mode = tr32(GRC_MODE);
3406 		tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3407 
3408 		tg3_disable_nvram_access(tp);
3409 		tg3_nvram_unlock(tp);
3410 	}
3411 
3412 	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3413 		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3414 		udelay(40);
3415 	}
3416 
3417 	return ret;
3418 }
3419 
3420 #define RX_CPU_SCRATCH_BASE	0x30000
3421 #define RX_CPU_SCRATCH_SIZE	0x04000
3422 #define TX_CPU_SCRATCH_BASE	0x34000
3423 #define TX_CPU_SCRATCH_SIZE	0x04000
3424 
3425 /* tp->lock is held. */
3426 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
3427 {
3428 	int i;
3429 
3430 	BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3431 
3432 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3433 		u32 val = tr32(GRC_VCPU_EXT_CTRL);
3434 
3435 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3436 		return 0;
3437 	}
3438 	if (offset == RX_CPU_BASE) {
3439 		for (i = 0; i < 10000; i++) {
3440 			tw32(offset + CPU_STATE, 0xffffffff);
3441 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3442 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3443 				break;
3444 		}
3445 
3446 		tw32(offset + CPU_STATE, 0xffffffff);
3447 		tw32_f(offset + CPU_MODE,  CPU_MODE_HALT);
3448 		udelay(10);
3449 	} else {
3450 		for (i = 0; i < 10000; i++) {
3451 			tw32(offset + CPU_STATE, 0xffffffff);
3452 			tw32(offset + CPU_MODE,  CPU_MODE_HALT);
3453 			if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3454 				break;
3455 		}
3456 	}
3457 
3458 	if (i >= 10000) {
3459 		netdev_err(tp->dev, "%s timed out, %s CPU\n",
3460 			   __func__, offset == RX_CPU_BASE ? "RX" : "TX");
3461 		return -ENODEV;
3462 	}
3463 
3464 	/* Clear firmware's nvram arbitration. */
3465 	if (tg3_flag(tp, NVRAM))
3466 		tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3467 	return 0;
3468 }
3469 
3470 struct fw_info {
3471 	unsigned int fw_base;
3472 	unsigned int fw_len;
3473 	const __be32 *fw_data;
3474 };
3475 
3476 /* tp->lock is held. */
3477 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3478 				 u32 cpu_scratch_base, int cpu_scratch_size,
3479 				 struct fw_info *info)
3480 {
3481 	int err, lock_err, i;
3482 	void (*write_op)(struct tg3 *, u32, u32);
3483 
3484 	if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3485 		netdev_err(tp->dev,
3486 			   "%s: Trying to load TX cpu firmware which is 5705\n",
3487 			   __func__);
3488 		return -EINVAL;
3489 	}
3490 
3491 	if (tg3_flag(tp, 5705_PLUS))
3492 		write_op = tg3_write_mem;
3493 	else
3494 		write_op = tg3_write_indirect_reg32;
3495 
3496 	/* It is possible that bootcode is still loading at this point.
3497 	 * Get the nvram lock first before halting the cpu.
3498 	 */
3499 	lock_err = tg3_nvram_lock(tp);
3500 	err = tg3_halt_cpu(tp, cpu_base);
3501 	if (!lock_err)
3502 		tg3_nvram_unlock(tp);
3503 	if (err)
3504 		goto out;
3505 
3506 	for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3507 		write_op(tp, cpu_scratch_base + i, 0);
3508 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3509 	tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
3510 	for (i = 0; i < (info->fw_len / sizeof(u32)); i++)
3511 		write_op(tp, (cpu_scratch_base +
3512 			      (info->fw_base & 0xffff) +
3513 			      (i * sizeof(u32))),
3514 			      be32_to_cpu(info->fw_data[i]));
3515 
3516 	err = 0;
3517 
3518 out:
3519 	return err;
3520 }
3521 
3522 /* tp->lock is held. */
3523 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3524 {
3525 	struct fw_info info;
3526 	const __be32 *fw_data;
3527 	int err, i;
3528 
3529 	fw_data = (void *)tp->fw->data;
3530 
3531 	/* Firmware blob starts with version numbers, followed by
3532 	   start address and length. We are setting complete length.
3533 	   length = end_address_of_bss - start_address_of_text.
3534 	   Remainder is the blob to be loaded contiguously
3535 	   from start address. */
3536 
3537 	info.fw_base = be32_to_cpu(fw_data[1]);
3538 	info.fw_len = tp->fw->size - 12;
3539 	info.fw_data = &fw_data[3];
3540 
3541 	err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3542 				    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3543 				    &info);
3544 	if (err)
3545 		return err;
3546 
3547 	err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3548 				    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3549 				    &info);
3550 	if (err)
3551 		return err;
3552 
3553 	/* Now startup only the RX cpu. */
3554 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3555 	tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3556 
3557 	for (i = 0; i < 5; i++) {
3558 		if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base)
3559 			break;
3560 		tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3561 		tw32(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3562 		tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3563 		udelay(1000);
3564 	}
3565 	if (i >= 5) {
3566 		netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3567 			   "should be %08x\n", __func__,
3568 			   tr32(RX_CPU_BASE + CPU_PC), info.fw_base);
3569 		return -ENODEV;
3570 	}
3571 	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3572 	tw32_f(RX_CPU_BASE + CPU_MODE,  0x00000000);
3573 
3574 	return 0;
3575 }
3576 
3577 /* tp->lock is held. */
3578 static int tg3_load_tso_firmware(struct tg3 *tp)
3579 {
3580 	struct fw_info info;
3581 	const __be32 *fw_data;
3582 	unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3583 	int err, i;
3584 
3585 	if (tg3_flag(tp, HW_TSO_1) ||
3586 	    tg3_flag(tp, HW_TSO_2) ||
3587 	    tg3_flag(tp, HW_TSO_3))
3588 		return 0;
3589 
3590 	fw_data = (void *)tp->fw->data;
3591 
3592 	/* Firmware blob starts with version numbers, followed by
3593 	   start address and length. We are setting complete length.
3594 	   length = end_address_of_bss - start_address_of_text.
3595 	   Remainder is the blob to be loaded contiguously
3596 	   from start address. */
3597 
3598 	info.fw_base = be32_to_cpu(fw_data[1]);
3599 	cpu_scratch_size = tp->fw_len;
3600 	info.fw_len = tp->fw->size - 12;
3601 	info.fw_data = &fw_data[3];
3602 
3603 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
3604 		cpu_base = RX_CPU_BASE;
3605 		cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3606 	} else {
3607 		cpu_base = TX_CPU_BASE;
3608 		cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3609 		cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3610 	}
3611 
3612 	err = tg3_load_firmware_cpu(tp, cpu_base,
3613 				    cpu_scratch_base, cpu_scratch_size,
3614 				    &info);
3615 	if (err)
3616 		return err;
3617 
3618 	/* Now startup the cpu. */
3619 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3620 	tw32_f(cpu_base + CPU_PC, info.fw_base);
3621 
3622 	for (i = 0; i < 5; i++) {
3623 		if (tr32(cpu_base + CPU_PC) == info.fw_base)
3624 			break;
3625 		tw32(cpu_base + CPU_STATE, 0xffffffff);
3626 		tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3627 		tw32_f(cpu_base + CPU_PC, info.fw_base);
3628 		udelay(1000);
3629 	}
3630 	if (i >= 5) {
3631 		netdev_err(tp->dev,
3632 			   "%s fails to set CPU PC, is %08x should be %08x\n",
3633 			   __func__, tr32(cpu_base + CPU_PC), info.fw_base);
3634 		return -ENODEV;
3635 	}
3636 	tw32(cpu_base + CPU_STATE, 0xffffffff);
3637 	tw32_f(cpu_base + CPU_MODE,  0x00000000);
3638 	return 0;
3639 }
3640 
3641 
3642 /* tp->lock is held. */
3643 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
3644 {
3645 	u32 addr_high, addr_low;
3646 	int i;
3647 
3648 	addr_high = ((tp->dev->dev_addr[0] << 8) |
3649 		     tp->dev->dev_addr[1]);
3650 	addr_low = ((tp->dev->dev_addr[2] << 24) |
3651 		    (tp->dev->dev_addr[3] << 16) |
3652 		    (tp->dev->dev_addr[4] <<  8) |
3653 		    (tp->dev->dev_addr[5] <<  0));
3654 	for (i = 0; i < 4; i++) {
3655 		if (i == 1 && skip_mac_1)
3656 			continue;
3657 		tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
3658 		tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
3659 	}
3660 
3661 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
3662 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
3663 		for (i = 0; i < 12; i++) {
3664 			tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
3665 			tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
3666 		}
3667 	}
3668 
3669 	addr_high = (tp->dev->dev_addr[0] +
3670 		     tp->dev->dev_addr[1] +
3671 		     tp->dev->dev_addr[2] +
3672 		     tp->dev->dev_addr[3] +
3673 		     tp->dev->dev_addr[4] +
3674 		     tp->dev->dev_addr[5]) &
3675 		TX_BACKOFF_SEED_MASK;
3676 	tw32(MAC_TX_BACKOFF_SEED, addr_high);
3677 }
3678 
3679 static void tg3_enable_register_access(struct tg3 *tp)
3680 {
3681 	/*
3682 	 * Make sure register accesses (indirect or otherwise) will function
3683 	 * correctly.
3684 	 */
3685 	pci_write_config_dword(tp->pdev,
3686 			       TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
3687 }
3688 
3689 static int tg3_power_up(struct tg3 *tp)
3690 {
3691 	int err;
3692 
3693 	tg3_enable_register_access(tp);
3694 
3695 	err = pci_set_power_state(tp->pdev, PCI_D0);
3696 	if (!err) {
3697 		/* Switch out of Vaux if it is a NIC */
3698 		tg3_pwrsrc_switch_to_vmain(tp);
3699 	} else {
3700 		netdev_err(tp->dev, "Transition to D0 failed\n");
3701 	}
3702 
3703 	return err;
3704 }
3705 
3706 static int tg3_setup_phy(struct tg3 *, int);
3707 
3708 static int tg3_power_down_prepare(struct tg3 *tp)
3709 {
3710 	u32 misc_host_ctrl;
3711 	bool device_should_wake, do_low_power;
3712 
3713 	tg3_enable_register_access(tp);
3714 
3715 	/* Restore the CLKREQ setting. */
3716 	if (tg3_flag(tp, CLKREQ_BUG))
3717 		pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
3718 					 PCI_EXP_LNKCTL_CLKREQ_EN);
3719 
3720 	misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
3721 	tw32(TG3PCI_MISC_HOST_CTRL,
3722 	     misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
3723 
3724 	device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
3725 			     tg3_flag(tp, WOL_ENABLE);
3726 
3727 	if (tg3_flag(tp, USE_PHYLIB)) {
3728 		do_low_power = false;
3729 		if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
3730 		    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
3731 			struct phy_device *phydev;
3732 			u32 phyid, advertising;
3733 
3734 			phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
3735 
3736 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3737 
3738 			tp->link_config.speed = phydev->speed;
3739 			tp->link_config.duplex = phydev->duplex;
3740 			tp->link_config.autoneg = phydev->autoneg;
3741 			tp->link_config.advertising = phydev->advertising;
3742 
3743 			advertising = ADVERTISED_TP |
3744 				      ADVERTISED_Pause |
3745 				      ADVERTISED_Autoneg |
3746 				      ADVERTISED_10baseT_Half;
3747 
3748 			if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
3749 				if (tg3_flag(tp, WOL_SPEED_100MB))
3750 					advertising |=
3751 						ADVERTISED_100baseT_Half |
3752 						ADVERTISED_100baseT_Full |
3753 						ADVERTISED_10baseT_Full;
3754 				else
3755 					advertising |= ADVERTISED_10baseT_Full;
3756 			}
3757 
3758 			phydev->advertising = advertising;
3759 
3760 			phy_start_aneg(phydev);
3761 
3762 			phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
3763 			if (phyid != PHY_ID_BCMAC131) {
3764 				phyid &= PHY_BCM_OUI_MASK;
3765 				if (phyid == PHY_BCM_OUI_1 ||
3766 				    phyid == PHY_BCM_OUI_2 ||
3767 				    phyid == PHY_BCM_OUI_3)
3768 					do_low_power = true;
3769 			}
3770 		}
3771 	} else {
3772 		do_low_power = true;
3773 
3774 		if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
3775 			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
3776 
3777 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
3778 			tg3_setup_phy(tp, 0);
3779 	}
3780 
3781 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3782 		u32 val;
3783 
3784 		val = tr32(GRC_VCPU_EXT_CTRL);
3785 		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
3786 	} else if (!tg3_flag(tp, ENABLE_ASF)) {
3787 		int i;
3788 		u32 val;
3789 
3790 		for (i = 0; i < 200; i++) {
3791 			tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
3792 			if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
3793 				break;
3794 			msleep(1);
3795 		}
3796 	}
3797 	if (tg3_flag(tp, WOL_CAP))
3798 		tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
3799 						     WOL_DRV_STATE_SHUTDOWN |
3800 						     WOL_DRV_WOL |
3801 						     WOL_SET_MAGIC_PKT);
3802 
3803 	if (device_should_wake) {
3804 		u32 mac_mode;
3805 
3806 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
3807 			if (do_low_power &&
3808 			    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
3809 				tg3_phy_auxctl_write(tp,
3810 					       MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
3811 					       MII_TG3_AUXCTL_PCTL_WOL_EN |
3812 					       MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3813 					       MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
3814 				udelay(40);
3815 			}
3816 
3817 			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3818 				mac_mode = MAC_MODE_PORT_MODE_GMII;
3819 			else
3820 				mac_mode = MAC_MODE_PORT_MODE_MII;
3821 
3822 			mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
3823 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3824 			    ASIC_REV_5700) {
3825 				u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
3826 					     SPEED_100 : SPEED_10;
3827 				if (tg3_5700_link_polarity(tp, speed))
3828 					mac_mode |= MAC_MODE_LINK_POLARITY;
3829 				else
3830 					mac_mode &= ~MAC_MODE_LINK_POLARITY;
3831 			}
3832 		} else {
3833 			mac_mode = MAC_MODE_PORT_MODE_TBI;
3834 		}
3835 
3836 		if (!tg3_flag(tp, 5750_PLUS))
3837 			tw32(MAC_LED_CTRL, tp->led_ctrl);
3838 
3839 		mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
3840 		if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
3841 		    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
3842 			mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
3843 
3844 		if (tg3_flag(tp, ENABLE_APE))
3845 			mac_mode |= MAC_MODE_APE_TX_EN |
3846 				    MAC_MODE_APE_RX_EN |
3847 				    MAC_MODE_TDE_ENABLE;
3848 
3849 		tw32_f(MAC_MODE, mac_mode);
3850 		udelay(100);
3851 
3852 		tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
3853 		udelay(10);
3854 	}
3855 
3856 	if (!tg3_flag(tp, WOL_SPEED_100MB) &&
3857 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3858 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
3859 		u32 base_val;
3860 
3861 		base_val = tp->pci_clock_ctrl;
3862 		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
3863 			     CLOCK_CTRL_TXCLK_DISABLE);
3864 
3865 		tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
3866 			    CLOCK_CTRL_PWRDOWN_PLL133, 40);
3867 	} else if (tg3_flag(tp, 5780_CLASS) ||
3868 		   tg3_flag(tp, CPMU_PRESENT) ||
3869 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
3870 		/* do nothing */
3871 	} else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
3872 		u32 newbits1, newbits2;
3873 
3874 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3875 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3876 			newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
3877 				    CLOCK_CTRL_TXCLK_DISABLE |
3878 				    CLOCK_CTRL_ALTCLK);
3879 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3880 		} else if (tg3_flag(tp, 5705_PLUS)) {
3881 			newbits1 = CLOCK_CTRL_625_CORE;
3882 			newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
3883 		} else {
3884 			newbits1 = CLOCK_CTRL_ALTCLK;
3885 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3886 		}
3887 
3888 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
3889 			    40);
3890 
3891 		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
3892 			    40);
3893 
3894 		if (!tg3_flag(tp, 5705_PLUS)) {
3895 			u32 newbits3;
3896 
3897 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
3898 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
3899 				newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
3900 					    CLOCK_CTRL_TXCLK_DISABLE |
3901 					    CLOCK_CTRL_44MHZ_CORE);
3902 			} else {
3903 				newbits3 = CLOCK_CTRL_44MHZ_CORE;
3904 			}
3905 
3906 			tw32_wait_f(TG3PCI_CLOCK_CTRL,
3907 				    tp->pci_clock_ctrl | newbits3, 40);
3908 		}
3909 	}
3910 
3911 	if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
3912 		tg3_power_down_phy(tp, do_low_power);
3913 
3914 	tg3_frob_aux_power(tp, true);
3915 
3916 	/* Workaround for unstable PLL clock */
3917 	if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
3918 	    (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
3919 		u32 val = tr32(0x7d00);
3920 
3921 		val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
3922 		tw32(0x7d00, val);
3923 		if (!tg3_flag(tp, ENABLE_ASF)) {
3924 			int err;
3925 
3926 			err = tg3_nvram_lock(tp);
3927 			tg3_halt_cpu(tp, RX_CPU_BASE);
3928 			if (!err)
3929 				tg3_nvram_unlock(tp);
3930 		}
3931 	}
3932 
3933 	tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
3934 
3935 	return 0;
3936 }
3937 
3938 static void tg3_power_down(struct tg3 *tp)
3939 {
3940 	tg3_power_down_prepare(tp);
3941 
3942 	pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
3943 	pci_set_power_state(tp->pdev, PCI_D3hot);
3944 }
3945 
3946 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
3947 {
3948 	switch (val & MII_TG3_AUX_STAT_SPDMASK) {
3949 	case MII_TG3_AUX_STAT_10HALF:
3950 		*speed = SPEED_10;
3951 		*duplex = DUPLEX_HALF;
3952 		break;
3953 
3954 	case MII_TG3_AUX_STAT_10FULL:
3955 		*speed = SPEED_10;
3956 		*duplex = DUPLEX_FULL;
3957 		break;
3958 
3959 	case MII_TG3_AUX_STAT_100HALF:
3960 		*speed = SPEED_100;
3961 		*duplex = DUPLEX_HALF;
3962 		break;
3963 
3964 	case MII_TG3_AUX_STAT_100FULL:
3965 		*speed = SPEED_100;
3966 		*duplex = DUPLEX_FULL;
3967 		break;
3968 
3969 	case MII_TG3_AUX_STAT_1000HALF:
3970 		*speed = SPEED_1000;
3971 		*duplex = DUPLEX_HALF;
3972 		break;
3973 
3974 	case MII_TG3_AUX_STAT_1000FULL:
3975 		*speed = SPEED_1000;
3976 		*duplex = DUPLEX_FULL;
3977 		break;
3978 
3979 	default:
3980 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3981 			*speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
3982 				 SPEED_10;
3983 			*duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
3984 				  DUPLEX_HALF;
3985 			break;
3986 		}
3987 		*speed = SPEED_UNKNOWN;
3988 		*duplex = DUPLEX_UNKNOWN;
3989 		break;
3990 	}
3991 }
3992 
3993 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
3994 {
3995 	int err = 0;
3996 	u32 val, new_adv;
3997 
3998 	new_adv = ADVERTISE_CSMA;
3999 	new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4000 	new_adv |= mii_advertise_flowctrl(flowctrl);
4001 
4002 	err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4003 	if (err)
4004 		goto done;
4005 
4006 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4007 		new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4008 
4009 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4010 		    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
4011 			new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4012 
4013 		err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4014 		if (err)
4015 			goto done;
4016 	}
4017 
4018 	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4019 		goto done;
4020 
4021 	tw32(TG3_CPMU_EEE_MODE,
4022 	     tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4023 
4024 	err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4025 	if (!err) {
4026 		u32 err2;
4027 
4028 		val = 0;
4029 		/* Advertise 100-BaseTX EEE ability */
4030 		if (advertise & ADVERTISED_100baseT_Full)
4031 			val |= MDIO_AN_EEE_ADV_100TX;
4032 		/* Advertise 1000-BaseT EEE ability */
4033 		if (advertise & ADVERTISED_1000baseT_Full)
4034 			val |= MDIO_AN_EEE_ADV_1000T;
4035 		err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4036 		if (err)
4037 			val = 0;
4038 
4039 		switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
4040 		case ASIC_REV_5717:
4041 		case ASIC_REV_57765:
4042 		case ASIC_REV_57766:
4043 		case ASIC_REV_5719:
4044 			/* If we advertised any eee advertisements above... */
4045 			if (val)
4046 				val = MII_TG3_DSP_TAP26_ALNOKO |
4047 				      MII_TG3_DSP_TAP26_RMRXSTO |
4048 				      MII_TG3_DSP_TAP26_OPCSINPT;
4049 			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4050 			/* Fall through */
4051 		case ASIC_REV_5720:
4052 			if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4053 				tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4054 						 MII_TG3_DSP_CH34TP2_HIBW01);
4055 		}
4056 
4057 		err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4058 		if (!err)
4059 			err = err2;
4060 	}
4061 
4062 done:
4063 	return err;
4064 }
4065 
4066 static void tg3_phy_copper_begin(struct tg3 *tp)
4067 {
4068 	if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4069 	    (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4070 		u32 adv, fc;
4071 
4072 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
4073 			adv = ADVERTISED_10baseT_Half |
4074 			      ADVERTISED_10baseT_Full;
4075 			if (tg3_flag(tp, WOL_SPEED_100MB))
4076 				adv |= ADVERTISED_100baseT_Half |
4077 				       ADVERTISED_100baseT_Full;
4078 
4079 			fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4080 		} else {
4081 			adv = tp->link_config.advertising;
4082 			if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4083 				adv &= ~(ADVERTISED_1000baseT_Half |
4084 					 ADVERTISED_1000baseT_Full);
4085 
4086 			fc = tp->link_config.flowctrl;
4087 		}
4088 
4089 		tg3_phy_autoneg_cfg(tp, adv, fc);
4090 
4091 		tg3_writephy(tp, MII_BMCR,
4092 			     BMCR_ANENABLE | BMCR_ANRESTART);
4093 	} else {
4094 		int i;
4095 		u32 bmcr, orig_bmcr;
4096 
4097 		tp->link_config.active_speed = tp->link_config.speed;
4098 		tp->link_config.active_duplex = tp->link_config.duplex;
4099 
4100 		bmcr = 0;
4101 		switch (tp->link_config.speed) {
4102 		default:
4103 		case SPEED_10:
4104 			break;
4105 
4106 		case SPEED_100:
4107 			bmcr |= BMCR_SPEED100;
4108 			break;
4109 
4110 		case SPEED_1000:
4111 			bmcr |= BMCR_SPEED1000;
4112 			break;
4113 		}
4114 
4115 		if (tp->link_config.duplex == DUPLEX_FULL)
4116 			bmcr |= BMCR_FULLDPLX;
4117 
4118 		if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4119 		    (bmcr != orig_bmcr)) {
4120 			tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4121 			for (i = 0; i < 1500; i++) {
4122 				u32 tmp;
4123 
4124 				udelay(10);
4125 				if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4126 				    tg3_readphy(tp, MII_BMSR, &tmp))
4127 					continue;
4128 				if (!(tmp & BMSR_LSTATUS)) {
4129 					udelay(40);
4130 					break;
4131 				}
4132 			}
4133 			tg3_writephy(tp, MII_BMCR, bmcr);
4134 			udelay(40);
4135 		}
4136 	}
4137 }
4138 
4139 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4140 {
4141 	int err;
4142 
4143 	/* Turn off tap power management. */
4144 	/* Set Extended packet length bit */
4145 	err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4146 
4147 	err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4148 	err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4149 	err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4150 	err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4151 	err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4152 
4153 	udelay(40);
4154 
4155 	return err;
4156 }
4157 
4158 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4159 {
4160 	u32 advmsk, tgtadv, advertising;
4161 
4162 	advertising = tp->link_config.advertising;
4163 	tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4164 
4165 	advmsk = ADVERTISE_ALL;
4166 	if (tp->link_config.active_duplex == DUPLEX_FULL) {
4167 		tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4168 		advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4169 	}
4170 
4171 	if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4172 		return false;
4173 
4174 	if ((*lcladv & advmsk) != tgtadv)
4175 		return false;
4176 
4177 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4178 		u32 tg3_ctrl;
4179 
4180 		tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4181 
4182 		if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4183 			return false;
4184 
4185 		if (tgtadv &&
4186 		    (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4187 		     tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) {
4188 			tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4189 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4190 				     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4191 		} else {
4192 			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4193 		}
4194 
4195 		if (tg3_ctrl != tgtadv)
4196 			return false;
4197 	}
4198 
4199 	return true;
4200 }
4201 
4202 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4203 {
4204 	u32 lpeth = 0;
4205 
4206 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4207 		u32 val;
4208 
4209 		if (tg3_readphy(tp, MII_STAT1000, &val))
4210 			return false;
4211 
4212 		lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4213 	}
4214 
4215 	if (tg3_readphy(tp, MII_LPA, rmtadv))
4216 		return false;
4217 
4218 	lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4219 	tp->link_config.rmt_adv = lpeth;
4220 
4221 	return true;
4222 }
4223 
4224 static bool tg3_test_and_report_link_chg(struct tg3 *tp, int curr_link_up)
4225 {
4226 	if (curr_link_up != tp->link_up) {
4227 		if (curr_link_up) {
4228 			tg3_carrier_on(tp);
4229 		} else {
4230 			tg3_carrier_off(tp);
4231 			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4232 				tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4233 		}
4234 
4235 		tg3_link_report(tp);
4236 		return true;
4237 	}
4238 
4239 	return false;
4240 }
4241 
4242 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
4243 {
4244 	int current_link_up;
4245 	u32 bmsr, val;
4246 	u32 lcl_adv, rmt_adv;
4247 	u16 current_speed;
4248 	u8 current_duplex;
4249 	int i, err;
4250 
4251 	tw32(MAC_EVENT, 0);
4252 
4253 	tw32_f(MAC_STATUS,
4254 	     (MAC_STATUS_SYNC_CHANGED |
4255 	      MAC_STATUS_CFG_CHANGED |
4256 	      MAC_STATUS_MI_COMPLETION |
4257 	      MAC_STATUS_LNKSTATE_CHANGED));
4258 	udelay(40);
4259 
4260 	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4261 		tw32_f(MAC_MI_MODE,
4262 		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4263 		udelay(80);
4264 	}
4265 
4266 	tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4267 
4268 	/* Some third-party PHYs need to be reset on link going
4269 	 * down.
4270 	 */
4271 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
4272 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
4273 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
4274 	    tp->link_up) {
4275 		tg3_readphy(tp, MII_BMSR, &bmsr);
4276 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4277 		    !(bmsr & BMSR_LSTATUS))
4278 			force_reset = 1;
4279 	}
4280 	if (force_reset)
4281 		tg3_phy_reset(tp);
4282 
4283 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4284 		tg3_readphy(tp, MII_BMSR, &bmsr);
4285 		if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4286 		    !tg3_flag(tp, INIT_COMPLETE))
4287 			bmsr = 0;
4288 
4289 		if (!(bmsr & BMSR_LSTATUS)) {
4290 			err = tg3_init_5401phy_dsp(tp);
4291 			if (err)
4292 				return err;
4293 
4294 			tg3_readphy(tp, MII_BMSR, &bmsr);
4295 			for (i = 0; i < 1000; i++) {
4296 				udelay(10);
4297 				if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4298 				    (bmsr & BMSR_LSTATUS)) {
4299 					udelay(40);
4300 					break;
4301 				}
4302 			}
4303 
4304 			if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4305 			    TG3_PHY_REV_BCM5401_B0 &&
4306 			    !(bmsr & BMSR_LSTATUS) &&
4307 			    tp->link_config.active_speed == SPEED_1000) {
4308 				err = tg3_phy_reset(tp);
4309 				if (!err)
4310 					err = tg3_init_5401phy_dsp(tp);
4311 				if (err)
4312 					return err;
4313 			}
4314 		}
4315 	} else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4316 		   tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
4317 		/* 5701 {A0,B0} CRC bug workaround */
4318 		tg3_writephy(tp, 0x15, 0x0a75);
4319 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4320 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4321 		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4322 	}
4323 
4324 	/* Clear pending interrupts... */
4325 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4326 	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4327 
4328 	if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4329 		tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4330 	else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4331 		tg3_writephy(tp, MII_TG3_IMASK, ~0);
4332 
4333 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
4334 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
4335 		if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4336 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
4337 				     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4338 		else
4339 			tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4340 	}
4341 
4342 	current_link_up = 0;
4343 	current_speed = SPEED_UNKNOWN;
4344 	current_duplex = DUPLEX_UNKNOWN;
4345 	tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4346 	tp->link_config.rmt_adv = 0;
4347 
4348 	if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4349 		err = tg3_phy_auxctl_read(tp,
4350 					  MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4351 					  &val);
4352 		if (!err && !(val & (1 << 10))) {
4353 			tg3_phy_auxctl_write(tp,
4354 					     MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4355 					     val | (1 << 10));
4356 			goto relink;
4357 		}
4358 	}
4359 
4360 	bmsr = 0;
4361 	for (i = 0; i < 100; i++) {
4362 		tg3_readphy(tp, MII_BMSR, &bmsr);
4363 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4364 		    (bmsr & BMSR_LSTATUS))
4365 			break;
4366 		udelay(40);
4367 	}
4368 
4369 	if (bmsr & BMSR_LSTATUS) {
4370 		u32 aux_stat, bmcr;
4371 
4372 		tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4373 		for (i = 0; i < 2000; i++) {
4374 			udelay(10);
4375 			if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4376 			    aux_stat)
4377 				break;
4378 		}
4379 
4380 		tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4381 					     &current_speed,
4382 					     &current_duplex);
4383 
4384 		bmcr = 0;
4385 		for (i = 0; i < 200; i++) {
4386 			tg3_readphy(tp, MII_BMCR, &bmcr);
4387 			if (tg3_readphy(tp, MII_BMCR, &bmcr))
4388 				continue;
4389 			if (bmcr && bmcr != 0x7fff)
4390 				break;
4391 			udelay(10);
4392 		}
4393 
4394 		lcl_adv = 0;
4395 		rmt_adv = 0;
4396 
4397 		tp->link_config.active_speed = current_speed;
4398 		tp->link_config.active_duplex = current_duplex;
4399 
4400 		if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4401 			if ((bmcr & BMCR_ANENABLE) &&
4402 			    tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4403 			    tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4404 				current_link_up = 1;
4405 		} else {
4406 			if (!(bmcr & BMCR_ANENABLE) &&
4407 			    tp->link_config.speed == current_speed &&
4408 			    tp->link_config.duplex == current_duplex &&
4409 			    tp->link_config.flowctrl ==
4410 			    tp->link_config.active_flowctrl) {
4411 				current_link_up = 1;
4412 			}
4413 		}
4414 
4415 		if (current_link_up == 1 &&
4416 		    tp->link_config.active_duplex == DUPLEX_FULL) {
4417 			u32 reg, bit;
4418 
4419 			if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4420 				reg = MII_TG3_FET_GEN_STAT;
4421 				bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4422 			} else {
4423 				reg = MII_TG3_EXT_STAT;
4424 				bit = MII_TG3_EXT_STAT_MDIX;
4425 			}
4426 
4427 			if (!tg3_readphy(tp, reg, &val) && (val & bit))
4428 				tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4429 
4430 			tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4431 		}
4432 	}
4433 
4434 relink:
4435 	if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4436 		tg3_phy_copper_begin(tp);
4437 
4438 		tg3_readphy(tp, MII_BMSR, &bmsr);
4439 		if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4440 		    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4441 			current_link_up = 1;
4442 	}
4443 
4444 	tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4445 	if (current_link_up == 1) {
4446 		if (tp->link_config.active_speed == SPEED_100 ||
4447 		    tp->link_config.active_speed == SPEED_10)
4448 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4449 		else
4450 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4451 	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4452 		tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4453 	else
4454 		tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4455 
4456 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
4457 	if (tp->link_config.active_duplex == DUPLEX_HALF)
4458 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
4459 
4460 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
4461 		if (current_link_up == 1 &&
4462 		    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
4463 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
4464 		else
4465 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
4466 	}
4467 
4468 	/* ??? Without this setting Netgear GA302T PHY does not
4469 	 * ??? send/receive packets...
4470 	 */
4471 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
4472 	    tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
4473 		tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
4474 		tw32_f(MAC_MI_MODE, tp->mi_mode);
4475 		udelay(80);
4476 	}
4477 
4478 	tw32_f(MAC_MODE, tp->mac_mode);
4479 	udelay(40);
4480 
4481 	tg3_phy_eee_adjust(tp, current_link_up);
4482 
4483 	if (tg3_flag(tp, USE_LINKCHG_REG)) {
4484 		/* Polled via timer. */
4485 		tw32_f(MAC_EVENT, 0);
4486 	} else {
4487 		tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
4488 	}
4489 	udelay(40);
4490 
4491 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
4492 	    current_link_up == 1 &&
4493 	    tp->link_config.active_speed == SPEED_1000 &&
4494 	    (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
4495 		udelay(120);
4496 		tw32_f(MAC_STATUS,
4497 		     (MAC_STATUS_SYNC_CHANGED |
4498 		      MAC_STATUS_CFG_CHANGED));
4499 		udelay(40);
4500 		tg3_write_mem(tp,
4501 			      NIC_SRAM_FIRMWARE_MBOX,
4502 			      NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
4503 	}
4504 
4505 	/* Prevent send BD corruption. */
4506 	if (tg3_flag(tp, CLKREQ_BUG)) {
4507 		if (tp->link_config.active_speed == SPEED_100 ||
4508 		    tp->link_config.active_speed == SPEED_10)
4509 			pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
4510 						   PCI_EXP_LNKCTL_CLKREQ_EN);
4511 		else
4512 			pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4513 						 PCI_EXP_LNKCTL_CLKREQ_EN);
4514 	}
4515 
4516 	tg3_test_and_report_link_chg(tp, current_link_up);
4517 
4518 	return 0;
4519 }
4520 
4521 struct tg3_fiber_aneginfo {
4522 	int state;
4523 #define ANEG_STATE_UNKNOWN		0
4524 #define ANEG_STATE_AN_ENABLE		1
4525 #define ANEG_STATE_RESTART_INIT		2
4526 #define ANEG_STATE_RESTART		3
4527 #define ANEG_STATE_DISABLE_LINK_OK	4
4528 #define ANEG_STATE_ABILITY_DETECT_INIT	5
4529 #define ANEG_STATE_ABILITY_DETECT	6
4530 #define ANEG_STATE_ACK_DETECT_INIT	7
4531 #define ANEG_STATE_ACK_DETECT		8
4532 #define ANEG_STATE_COMPLETE_ACK_INIT	9
4533 #define ANEG_STATE_COMPLETE_ACK		10
4534 #define ANEG_STATE_IDLE_DETECT_INIT	11
4535 #define ANEG_STATE_IDLE_DETECT		12
4536 #define ANEG_STATE_LINK_OK		13
4537 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT	14
4538 #define ANEG_STATE_NEXT_PAGE_WAIT	15
4539 
4540 	u32 flags;
4541 #define MR_AN_ENABLE		0x00000001
4542 #define MR_RESTART_AN		0x00000002
4543 #define MR_AN_COMPLETE		0x00000004
4544 #define MR_PAGE_RX		0x00000008
4545 #define MR_NP_LOADED		0x00000010
4546 #define MR_TOGGLE_TX		0x00000020
4547 #define MR_LP_ADV_FULL_DUPLEX	0x00000040
4548 #define MR_LP_ADV_HALF_DUPLEX	0x00000080
4549 #define MR_LP_ADV_SYM_PAUSE	0x00000100
4550 #define MR_LP_ADV_ASYM_PAUSE	0x00000200
4551 #define MR_LP_ADV_REMOTE_FAULT1	0x00000400
4552 #define MR_LP_ADV_REMOTE_FAULT2	0x00000800
4553 #define MR_LP_ADV_NEXT_PAGE	0x00001000
4554 #define MR_TOGGLE_RX		0x00002000
4555 #define MR_NP_RX		0x00004000
4556 
4557 #define MR_LINK_OK		0x80000000
4558 
4559 	unsigned long link_time, cur_time;
4560 
4561 	u32 ability_match_cfg;
4562 	int ability_match_count;
4563 
4564 	char ability_match, idle_match, ack_match;
4565 
4566 	u32 txconfig, rxconfig;
4567 #define ANEG_CFG_NP		0x00000080
4568 #define ANEG_CFG_ACK		0x00000040
4569 #define ANEG_CFG_RF2		0x00000020
4570 #define ANEG_CFG_RF1		0x00000010
4571 #define ANEG_CFG_PS2		0x00000001
4572 #define ANEG_CFG_PS1		0x00008000
4573 #define ANEG_CFG_HD		0x00004000
4574 #define ANEG_CFG_FD		0x00002000
4575 #define ANEG_CFG_INVAL		0x00001f06
4576 
4577 };
4578 #define ANEG_OK		0
4579 #define ANEG_DONE	1
4580 #define ANEG_TIMER_ENAB	2
4581 #define ANEG_FAILED	-1
4582 
4583 #define ANEG_STATE_SETTLE_TIME	10000
4584 
4585 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
4586 				   struct tg3_fiber_aneginfo *ap)
4587 {
4588 	u16 flowctrl;
4589 	unsigned long delta;
4590 	u32 rx_cfg_reg;
4591 	int ret;
4592 
4593 	if (ap->state == ANEG_STATE_UNKNOWN) {
4594 		ap->rxconfig = 0;
4595 		ap->link_time = 0;
4596 		ap->cur_time = 0;
4597 		ap->ability_match_cfg = 0;
4598 		ap->ability_match_count = 0;
4599 		ap->ability_match = 0;
4600 		ap->idle_match = 0;
4601 		ap->ack_match = 0;
4602 	}
4603 	ap->cur_time++;
4604 
4605 	if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
4606 		rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
4607 
4608 		if (rx_cfg_reg != ap->ability_match_cfg) {
4609 			ap->ability_match_cfg = rx_cfg_reg;
4610 			ap->ability_match = 0;
4611 			ap->ability_match_count = 0;
4612 		} else {
4613 			if (++ap->ability_match_count > 1) {
4614 				ap->ability_match = 1;
4615 				ap->ability_match_cfg = rx_cfg_reg;
4616 			}
4617 		}
4618 		if (rx_cfg_reg & ANEG_CFG_ACK)
4619 			ap->ack_match = 1;
4620 		else
4621 			ap->ack_match = 0;
4622 
4623 		ap->idle_match = 0;
4624 	} else {
4625 		ap->idle_match = 1;
4626 		ap->ability_match_cfg = 0;
4627 		ap->ability_match_count = 0;
4628 		ap->ability_match = 0;
4629 		ap->ack_match = 0;
4630 
4631 		rx_cfg_reg = 0;
4632 	}
4633 
4634 	ap->rxconfig = rx_cfg_reg;
4635 	ret = ANEG_OK;
4636 
4637 	switch (ap->state) {
4638 	case ANEG_STATE_UNKNOWN:
4639 		if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
4640 			ap->state = ANEG_STATE_AN_ENABLE;
4641 
4642 		/* fallthru */
4643 	case ANEG_STATE_AN_ENABLE:
4644 		ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
4645 		if (ap->flags & MR_AN_ENABLE) {
4646 			ap->link_time = 0;
4647 			ap->cur_time = 0;
4648 			ap->ability_match_cfg = 0;
4649 			ap->ability_match_count = 0;
4650 			ap->ability_match = 0;
4651 			ap->idle_match = 0;
4652 			ap->ack_match = 0;
4653 
4654 			ap->state = ANEG_STATE_RESTART_INIT;
4655 		} else {
4656 			ap->state = ANEG_STATE_DISABLE_LINK_OK;
4657 		}
4658 		break;
4659 
4660 	case ANEG_STATE_RESTART_INIT:
4661 		ap->link_time = ap->cur_time;
4662 		ap->flags &= ~(MR_NP_LOADED);
4663 		ap->txconfig = 0;
4664 		tw32(MAC_TX_AUTO_NEG, 0);
4665 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4666 		tw32_f(MAC_MODE, tp->mac_mode);
4667 		udelay(40);
4668 
4669 		ret = ANEG_TIMER_ENAB;
4670 		ap->state = ANEG_STATE_RESTART;
4671 
4672 		/* fallthru */
4673 	case ANEG_STATE_RESTART:
4674 		delta = ap->cur_time - ap->link_time;
4675 		if (delta > ANEG_STATE_SETTLE_TIME)
4676 			ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
4677 		else
4678 			ret = ANEG_TIMER_ENAB;
4679 		break;
4680 
4681 	case ANEG_STATE_DISABLE_LINK_OK:
4682 		ret = ANEG_DONE;
4683 		break;
4684 
4685 	case ANEG_STATE_ABILITY_DETECT_INIT:
4686 		ap->flags &= ~(MR_TOGGLE_TX);
4687 		ap->txconfig = ANEG_CFG_FD;
4688 		flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4689 		if (flowctrl & ADVERTISE_1000XPAUSE)
4690 			ap->txconfig |= ANEG_CFG_PS1;
4691 		if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4692 			ap->txconfig |= ANEG_CFG_PS2;
4693 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4694 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4695 		tw32_f(MAC_MODE, tp->mac_mode);
4696 		udelay(40);
4697 
4698 		ap->state = ANEG_STATE_ABILITY_DETECT;
4699 		break;
4700 
4701 	case ANEG_STATE_ABILITY_DETECT:
4702 		if (ap->ability_match != 0 && ap->rxconfig != 0)
4703 			ap->state = ANEG_STATE_ACK_DETECT_INIT;
4704 		break;
4705 
4706 	case ANEG_STATE_ACK_DETECT_INIT:
4707 		ap->txconfig |= ANEG_CFG_ACK;
4708 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
4709 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
4710 		tw32_f(MAC_MODE, tp->mac_mode);
4711 		udelay(40);
4712 
4713 		ap->state = ANEG_STATE_ACK_DETECT;
4714 
4715 		/* fallthru */
4716 	case ANEG_STATE_ACK_DETECT:
4717 		if (ap->ack_match != 0) {
4718 			if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
4719 			    (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
4720 				ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
4721 			} else {
4722 				ap->state = ANEG_STATE_AN_ENABLE;
4723 			}
4724 		} else if (ap->ability_match != 0 &&
4725 			   ap->rxconfig == 0) {
4726 			ap->state = ANEG_STATE_AN_ENABLE;
4727 		}
4728 		break;
4729 
4730 	case ANEG_STATE_COMPLETE_ACK_INIT:
4731 		if (ap->rxconfig & ANEG_CFG_INVAL) {
4732 			ret = ANEG_FAILED;
4733 			break;
4734 		}
4735 		ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
4736 			       MR_LP_ADV_HALF_DUPLEX |
4737 			       MR_LP_ADV_SYM_PAUSE |
4738 			       MR_LP_ADV_ASYM_PAUSE |
4739 			       MR_LP_ADV_REMOTE_FAULT1 |
4740 			       MR_LP_ADV_REMOTE_FAULT2 |
4741 			       MR_LP_ADV_NEXT_PAGE |
4742 			       MR_TOGGLE_RX |
4743 			       MR_NP_RX);
4744 		if (ap->rxconfig & ANEG_CFG_FD)
4745 			ap->flags |= MR_LP_ADV_FULL_DUPLEX;
4746 		if (ap->rxconfig & ANEG_CFG_HD)
4747 			ap->flags |= MR_LP_ADV_HALF_DUPLEX;
4748 		if (ap->rxconfig & ANEG_CFG_PS1)
4749 			ap->flags |= MR_LP_ADV_SYM_PAUSE;
4750 		if (ap->rxconfig & ANEG_CFG_PS2)
4751 			ap->flags |= MR_LP_ADV_ASYM_PAUSE;
4752 		if (ap->rxconfig & ANEG_CFG_RF1)
4753 			ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
4754 		if (ap->rxconfig & ANEG_CFG_RF2)
4755 			ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
4756 		if (ap->rxconfig & ANEG_CFG_NP)
4757 			ap->flags |= MR_LP_ADV_NEXT_PAGE;
4758 
4759 		ap->link_time = ap->cur_time;
4760 
4761 		ap->flags ^= (MR_TOGGLE_TX);
4762 		if (ap->rxconfig & 0x0008)
4763 			ap->flags |= MR_TOGGLE_RX;
4764 		if (ap->rxconfig & ANEG_CFG_NP)
4765 			ap->flags |= MR_NP_RX;
4766 		ap->flags |= MR_PAGE_RX;
4767 
4768 		ap->state = ANEG_STATE_COMPLETE_ACK;
4769 		ret = ANEG_TIMER_ENAB;
4770 		break;
4771 
4772 	case ANEG_STATE_COMPLETE_ACK:
4773 		if (ap->ability_match != 0 &&
4774 		    ap->rxconfig == 0) {
4775 			ap->state = ANEG_STATE_AN_ENABLE;
4776 			break;
4777 		}
4778 		delta = ap->cur_time - ap->link_time;
4779 		if (delta > ANEG_STATE_SETTLE_TIME) {
4780 			if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
4781 				ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4782 			} else {
4783 				if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
4784 				    !(ap->flags & MR_NP_RX)) {
4785 					ap->state = ANEG_STATE_IDLE_DETECT_INIT;
4786 				} else {
4787 					ret = ANEG_FAILED;
4788 				}
4789 			}
4790 		}
4791 		break;
4792 
4793 	case ANEG_STATE_IDLE_DETECT_INIT:
4794 		ap->link_time = ap->cur_time;
4795 		tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4796 		tw32_f(MAC_MODE, tp->mac_mode);
4797 		udelay(40);
4798 
4799 		ap->state = ANEG_STATE_IDLE_DETECT;
4800 		ret = ANEG_TIMER_ENAB;
4801 		break;
4802 
4803 	case ANEG_STATE_IDLE_DETECT:
4804 		if (ap->ability_match != 0 &&
4805 		    ap->rxconfig == 0) {
4806 			ap->state = ANEG_STATE_AN_ENABLE;
4807 			break;
4808 		}
4809 		delta = ap->cur_time - ap->link_time;
4810 		if (delta > ANEG_STATE_SETTLE_TIME) {
4811 			/* XXX another gem from the Broadcom driver :( */
4812 			ap->state = ANEG_STATE_LINK_OK;
4813 		}
4814 		break;
4815 
4816 	case ANEG_STATE_LINK_OK:
4817 		ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
4818 		ret = ANEG_DONE;
4819 		break;
4820 
4821 	case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
4822 		/* ??? unimplemented */
4823 		break;
4824 
4825 	case ANEG_STATE_NEXT_PAGE_WAIT:
4826 		/* ??? unimplemented */
4827 		break;
4828 
4829 	default:
4830 		ret = ANEG_FAILED;
4831 		break;
4832 	}
4833 
4834 	return ret;
4835 }
4836 
4837 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
4838 {
4839 	int res = 0;
4840 	struct tg3_fiber_aneginfo aninfo;
4841 	int status = ANEG_FAILED;
4842 	unsigned int tick;
4843 	u32 tmp;
4844 
4845 	tw32_f(MAC_TX_AUTO_NEG, 0);
4846 
4847 	tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
4848 	tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
4849 	udelay(40);
4850 
4851 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
4852 	udelay(40);
4853 
4854 	memset(&aninfo, 0, sizeof(aninfo));
4855 	aninfo.flags |= MR_AN_ENABLE;
4856 	aninfo.state = ANEG_STATE_UNKNOWN;
4857 	aninfo.cur_time = 0;
4858 	tick = 0;
4859 	while (++tick < 195000) {
4860 		status = tg3_fiber_aneg_smachine(tp, &aninfo);
4861 		if (status == ANEG_DONE || status == ANEG_FAILED)
4862 			break;
4863 
4864 		udelay(1);
4865 	}
4866 
4867 	tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
4868 	tw32_f(MAC_MODE, tp->mac_mode);
4869 	udelay(40);
4870 
4871 	*txflags = aninfo.txconfig;
4872 	*rxflags = aninfo.flags;
4873 
4874 	if (status == ANEG_DONE &&
4875 	    (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
4876 			     MR_LP_ADV_FULL_DUPLEX)))
4877 		res = 1;
4878 
4879 	return res;
4880 }
4881 
4882 static void tg3_init_bcm8002(struct tg3 *tp)
4883 {
4884 	u32 mac_status = tr32(MAC_STATUS);
4885 	int i;
4886 
4887 	/* Reset when initting first time or we have a link. */
4888 	if (tg3_flag(tp, INIT_COMPLETE) &&
4889 	    !(mac_status & MAC_STATUS_PCS_SYNCED))
4890 		return;
4891 
4892 	/* Set PLL lock range. */
4893 	tg3_writephy(tp, 0x16, 0x8007);
4894 
4895 	/* SW reset */
4896 	tg3_writephy(tp, MII_BMCR, BMCR_RESET);
4897 
4898 	/* Wait for reset to complete. */
4899 	/* XXX schedule_timeout() ... */
4900 	for (i = 0; i < 500; i++)
4901 		udelay(10);
4902 
4903 	/* Config mode; select PMA/Ch 1 regs. */
4904 	tg3_writephy(tp, 0x10, 0x8411);
4905 
4906 	/* Enable auto-lock and comdet, select txclk for tx. */
4907 	tg3_writephy(tp, 0x11, 0x0a10);
4908 
4909 	tg3_writephy(tp, 0x18, 0x00a0);
4910 	tg3_writephy(tp, 0x16, 0x41ff);
4911 
4912 	/* Assert and deassert POR. */
4913 	tg3_writephy(tp, 0x13, 0x0400);
4914 	udelay(40);
4915 	tg3_writephy(tp, 0x13, 0x0000);
4916 
4917 	tg3_writephy(tp, 0x11, 0x0a50);
4918 	udelay(40);
4919 	tg3_writephy(tp, 0x11, 0x0a10);
4920 
4921 	/* Wait for signal to stabilize */
4922 	/* XXX schedule_timeout() ... */
4923 	for (i = 0; i < 15000; i++)
4924 		udelay(10);
4925 
4926 	/* Deselect the channel register so we can read the PHYID
4927 	 * later.
4928 	 */
4929 	tg3_writephy(tp, 0x10, 0x8011);
4930 }
4931 
4932 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
4933 {
4934 	u16 flowctrl;
4935 	u32 sg_dig_ctrl, sg_dig_status;
4936 	u32 serdes_cfg, expected_sg_dig_ctrl;
4937 	int workaround, port_a;
4938 	int current_link_up;
4939 
4940 	serdes_cfg = 0;
4941 	expected_sg_dig_ctrl = 0;
4942 	workaround = 0;
4943 	port_a = 1;
4944 	current_link_up = 0;
4945 
4946 	if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
4947 	    tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
4948 		workaround = 1;
4949 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
4950 			port_a = 0;
4951 
4952 		/* preserve bits 0-11,13,14 for signal pre-emphasis */
4953 		/* preserve bits 20-23 for voltage regulator */
4954 		serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
4955 	}
4956 
4957 	sg_dig_ctrl = tr32(SG_DIG_CTRL);
4958 
4959 	if (tp->link_config.autoneg != AUTONEG_ENABLE) {
4960 		if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
4961 			if (workaround) {
4962 				u32 val = serdes_cfg;
4963 
4964 				if (port_a)
4965 					val |= 0xc010000;
4966 				else
4967 					val |= 0x4010000;
4968 				tw32_f(MAC_SERDES_CFG, val);
4969 			}
4970 
4971 			tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
4972 		}
4973 		if (mac_status & MAC_STATUS_PCS_SYNCED) {
4974 			tg3_setup_flow_control(tp, 0, 0);
4975 			current_link_up = 1;
4976 		}
4977 		goto out;
4978 	}
4979 
4980 	/* Want auto-negotiation.  */
4981 	expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
4982 
4983 	flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4984 	if (flowctrl & ADVERTISE_1000XPAUSE)
4985 		expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
4986 	if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4987 		expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
4988 
4989 	if (sg_dig_ctrl != expected_sg_dig_ctrl) {
4990 		if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
4991 		    tp->serdes_counter &&
4992 		    ((mac_status & (MAC_STATUS_PCS_SYNCED |
4993 				    MAC_STATUS_RCVD_CFG)) ==
4994 		     MAC_STATUS_PCS_SYNCED)) {
4995 			tp->serdes_counter--;
4996 			current_link_up = 1;
4997 			goto out;
4998 		}
4999 restart_autoneg:
5000 		if (workaround)
5001 			tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5002 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5003 		udelay(5);
5004 		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5005 
5006 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5007 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5008 	} else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5009 				 MAC_STATUS_SIGNAL_DET)) {
5010 		sg_dig_status = tr32(SG_DIG_STATUS);
5011 		mac_status = tr32(MAC_STATUS);
5012 
5013 		if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5014 		    (mac_status & MAC_STATUS_PCS_SYNCED)) {
5015 			u32 local_adv = 0, remote_adv = 0;
5016 
5017 			if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5018 				local_adv |= ADVERTISE_1000XPAUSE;
5019 			if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5020 				local_adv |= ADVERTISE_1000XPSE_ASYM;
5021 
5022 			if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5023 				remote_adv |= LPA_1000XPAUSE;
5024 			if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5025 				remote_adv |= LPA_1000XPAUSE_ASYM;
5026 
5027 			tp->link_config.rmt_adv =
5028 					   mii_adv_to_ethtool_adv_x(remote_adv);
5029 
5030 			tg3_setup_flow_control(tp, local_adv, remote_adv);
5031 			current_link_up = 1;
5032 			tp->serdes_counter = 0;
5033 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5034 		} else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5035 			if (tp->serdes_counter)
5036 				tp->serdes_counter--;
5037 			else {
5038 				if (workaround) {
5039 					u32 val = serdes_cfg;
5040 
5041 					if (port_a)
5042 						val |= 0xc010000;
5043 					else
5044 						val |= 0x4010000;
5045 
5046 					tw32_f(MAC_SERDES_CFG, val);
5047 				}
5048 
5049 				tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5050 				udelay(40);
5051 
5052 				/* Link parallel detection - link is up */
5053 				/* only if we have PCS_SYNC and not */
5054 				/* receiving config code words */
5055 				mac_status = tr32(MAC_STATUS);
5056 				if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5057 				    !(mac_status & MAC_STATUS_RCVD_CFG)) {
5058 					tg3_setup_flow_control(tp, 0, 0);
5059 					current_link_up = 1;
5060 					tp->phy_flags |=
5061 						TG3_PHYFLG_PARALLEL_DETECT;
5062 					tp->serdes_counter =
5063 						SERDES_PARALLEL_DET_TIMEOUT;
5064 				} else
5065 					goto restart_autoneg;
5066 			}
5067 		}
5068 	} else {
5069 		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5070 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5071 	}
5072 
5073 out:
5074 	return current_link_up;
5075 }
5076 
5077 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5078 {
5079 	int current_link_up = 0;
5080 
5081 	if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5082 		goto out;
5083 
5084 	if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5085 		u32 txflags, rxflags;
5086 		int i;
5087 
5088 		if (fiber_autoneg(tp, &txflags, &rxflags)) {
5089 			u32 local_adv = 0, remote_adv = 0;
5090 
5091 			if (txflags & ANEG_CFG_PS1)
5092 				local_adv |= ADVERTISE_1000XPAUSE;
5093 			if (txflags & ANEG_CFG_PS2)
5094 				local_adv |= ADVERTISE_1000XPSE_ASYM;
5095 
5096 			if (rxflags & MR_LP_ADV_SYM_PAUSE)
5097 				remote_adv |= LPA_1000XPAUSE;
5098 			if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5099 				remote_adv |= LPA_1000XPAUSE_ASYM;
5100 
5101 			tp->link_config.rmt_adv =
5102 					   mii_adv_to_ethtool_adv_x(remote_adv);
5103 
5104 			tg3_setup_flow_control(tp, local_adv, remote_adv);
5105 
5106 			current_link_up = 1;
5107 		}
5108 		for (i = 0; i < 30; i++) {
5109 			udelay(20);
5110 			tw32_f(MAC_STATUS,
5111 			       (MAC_STATUS_SYNC_CHANGED |
5112 				MAC_STATUS_CFG_CHANGED));
5113 			udelay(40);
5114 			if ((tr32(MAC_STATUS) &
5115 			     (MAC_STATUS_SYNC_CHANGED |
5116 			      MAC_STATUS_CFG_CHANGED)) == 0)
5117 				break;
5118 		}
5119 
5120 		mac_status = tr32(MAC_STATUS);
5121 		if (current_link_up == 0 &&
5122 		    (mac_status & MAC_STATUS_PCS_SYNCED) &&
5123 		    !(mac_status & MAC_STATUS_RCVD_CFG))
5124 			current_link_up = 1;
5125 	} else {
5126 		tg3_setup_flow_control(tp, 0, 0);
5127 
5128 		/* Forcing 1000FD link up. */
5129 		current_link_up = 1;
5130 
5131 		tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5132 		udelay(40);
5133 
5134 		tw32_f(MAC_MODE, tp->mac_mode);
5135 		udelay(40);
5136 	}
5137 
5138 out:
5139 	return current_link_up;
5140 }
5141 
5142 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
5143 {
5144 	u32 orig_pause_cfg;
5145 	u16 orig_active_speed;
5146 	u8 orig_active_duplex;
5147 	u32 mac_status;
5148 	int current_link_up;
5149 	int i;
5150 
5151 	orig_pause_cfg = tp->link_config.active_flowctrl;
5152 	orig_active_speed = tp->link_config.active_speed;
5153 	orig_active_duplex = tp->link_config.active_duplex;
5154 
5155 	if (!tg3_flag(tp, HW_AUTONEG) &&
5156 	    tp->link_up &&
5157 	    tg3_flag(tp, INIT_COMPLETE)) {
5158 		mac_status = tr32(MAC_STATUS);
5159 		mac_status &= (MAC_STATUS_PCS_SYNCED |
5160 			       MAC_STATUS_SIGNAL_DET |
5161 			       MAC_STATUS_CFG_CHANGED |
5162 			       MAC_STATUS_RCVD_CFG);
5163 		if (mac_status == (MAC_STATUS_PCS_SYNCED |
5164 				   MAC_STATUS_SIGNAL_DET)) {
5165 			tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5166 					    MAC_STATUS_CFG_CHANGED));
5167 			return 0;
5168 		}
5169 	}
5170 
5171 	tw32_f(MAC_TX_AUTO_NEG, 0);
5172 
5173 	tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5174 	tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5175 	tw32_f(MAC_MODE, tp->mac_mode);
5176 	udelay(40);
5177 
5178 	if (tp->phy_id == TG3_PHY_ID_BCM8002)
5179 		tg3_init_bcm8002(tp);
5180 
5181 	/* Enable link change event even when serdes polling.  */
5182 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5183 	udelay(40);
5184 
5185 	current_link_up = 0;
5186 	tp->link_config.rmt_adv = 0;
5187 	mac_status = tr32(MAC_STATUS);
5188 
5189 	if (tg3_flag(tp, HW_AUTONEG))
5190 		current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5191 	else
5192 		current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5193 
5194 	tp->napi[0].hw_status->status =
5195 		(SD_STATUS_UPDATED |
5196 		 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5197 
5198 	for (i = 0; i < 100; i++) {
5199 		tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5200 				    MAC_STATUS_CFG_CHANGED));
5201 		udelay(5);
5202 		if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5203 					 MAC_STATUS_CFG_CHANGED |
5204 					 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5205 			break;
5206 	}
5207 
5208 	mac_status = tr32(MAC_STATUS);
5209 	if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5210 		current_link_up = 0;
5211 		if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5212 		    tp->serdes_counter == 0) {
5213 			tw32_f(MAC_MODE, (tp->mac_mode |
5214 					  MAC_MODE_SEND_CONFIGS));
5215 			udelay(1);
5216 			tw32_f(MAC_MODE, tp->mac_mode);
5217 		}
5218 	}
5219 
5220 	if (current_link_up == 1) {
5221 		tp->link_config.active_speed = SPEED_1000;
5222 		tp->link_config.active_duplex = DUPLEX_FULL;
5223 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5224 				    LED_CTRL_LNKLED_OVERRIDE |
5225 				    LED_CTRL_1000MBPS_ON));
5226 	} else {
5227 		tp->link_config.active_speed = SPEED_UNKNOWN;
5228 		tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5229 		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5230 				    LED_CTRL_LNKLED_OVERRIDE |
5231 				    LED_CTRL_TRAFFIC_OVERRIDE));
5232 	}
5233 
5234 	if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5235 		u32 now_pause_cfg = tp->link_config.active_flowctrl;
5236 		if (orig_pause_cfg != now_pause_cfg ||
5237 		    orig_active_speed != tp->link_config.active_speed ||
5238 		    orig_active_duplex != tp->link_config.active_duplex)
5239 			tg3_link_report(tp);
5240 	}
5241 
5242 	return 0;
5243 }
5244 
5245 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
5246 {
5247 	int current_link_up, err = 0;
5248 	u32 bmsr, bmcr;
5249 	u16 current_speed;
5250 	u8 current_duplex;
5251 	u32 local_adv, remote_adv;
5252 
5253 	tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5254 	tw32_f(MAC_MODE, tp->mac_mode);
5255 	udelay(40);
5256 
5257 	tw32(MAC_EVENT, 0);
5258 
5259 	tw32_f(MAC_STATUS,
5260 	     (MAC_STATUS_SYNC_CHANGED |
5261 	      MAC_STATUS_CFG_CHANGED |
5262 	      MAC_STATUS_MI_COMPLETION |
5263 	      MAC_STATUS_LNKSTATE_CHANGED));
5264 	udelay(40);
5265 
5266 	if (force_reset)
5267 		tg3_phy_reset(tp);
5268 
5269 	current_link_up = 0;
5270 	current_speed = SPEED_UNKNOWN;
5271 	current_duplex = DUPLEX_UNKNOWN;
5272 	tp->link_config.rmt_adv = 0;
5273 
5274 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5275 	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5276 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
5277 		if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5278 			bmsr |= BMSR_LSTATUS;
5279 		else
5280 			bmsr &= ~BMSR_LSTATUS;
5281 	}
5282 
5283 	err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5284 
5285 	if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5286 	    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5287 		/* do nothing, just check for link up at the end */
5288 	} else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5289 		u32 adv, newadv;
5290 
5291 		err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5292 		newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5293 				 ADVERTISE_1000XPAUSE |
5294 				 ADVERTISE_1000XPSE_ASYM |
5295 				 ADVERTISE_SLCT);
5296 
5297 		newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5298 		newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5299 
5300 		if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5301 			tg3_writephy(tp, MII_ADVERTISE, newadv);
5302 			bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5303 			tg3_writephy(tp, MII_BMCR, bmcr);
5304 
5305 			tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5306 			tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5307 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5308 
5309 			return err;
5310 		}
5311 	} else {
5312 		u32 new_bmcr;
5313 
5314 		bmcr &= ~BMCR_SPEED1000;
5315 		new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5316 
5317 		if (tp->link_config.duplex == DUPLEX_FULL)
5318 			new_bmcr |= BMCR_FULLDPLX;
5319 
5320 		if (new_bmcr != bmcr) {
5321 			/* BMCR_SPEED1000 is a reserved bit that needs
5322 			 * to be set on write.
5323 			 */
5324 			new_bmcr |= BMCR_SPEED1000;
5325 
5326 			/* Force a linkdown */
5327 			if (tp->link_up) {
5328 				u32 adv;
5329 
5330 				err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5331 				adv &= ~(ADVERTISE_1000XFULL |
5332 					 ADVERTISE_1000XHALF |
5333 					 ADVERTISE_SLCT);
5334 				tg3_writephy(tp, MII_ADVERTISE, adv);
5335 				tg3_writephy(tp, MII_BMCR, bmcr |
5336 							   BMCR_ANRESTART |
5337 							   BMCR_ANENABLE);
5338 				udelay(10);
5339 				tg3_carrier_off(tp);
5340 			}
5341 			tg3_writephy(tp, MII_BMCR, new_bmcr);
5342 			bmcr = new_bmcr;
5343 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5344 			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5345 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
5346 			    ASIC_REV_5714) {
5347 				if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5348 					bmsr |= BMSR_LSTATUS;
5349 				else
5350 					bmsr &= ~BMSR_LSTATUS;
5351 			}
5352 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5353 		}
5354 	}
5355 
5356 	if (bmsr & BMSR_LSTATUS) {
5357 		current_speed = SPEED_1000;
5358 		current_link_up = 1;
5359 		if (bmcr & BMCR_FULLDPLX)
5360 			current_duplex = DUPLEX_FULL;
5361 		else
5362 			current_duplex = DUPLEX_HALF;
5363 
5364 		local_adv = 0;
5365 		remote_adv = 0;
5366 
5367 		if (bmcr & BMCR_ANENABLE) {
5368 			u32 common;
5369 
5370 			err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5371 			err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5372 			common = local_adv & remote_adv;
5373 			if (common & (ADVERTISE_1000XHALF |
5374 				      ADVERTISE_1000XFULL)) {
5375 				if (common & ADVERTISE_1000XFULL)
5376 					current_duplex = DUPLEX_FULL;
5377 				else
5378 					current_duplex = DUPLEX_HALF;
5379 
5380 				tp->link_config.rmt_adv =
5381 					   mii_adv_to_ethtool_adv_x(remote_adv);
5382 			} else if (!tg3_flag(tp, 5780_CLASS)) {
5383 				/* Link is up via parallel detect */
5384 			} else {
5385 				current_link_up = 0;
5386 			}
5387 		}
5388 	}
5389 
5390 	if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
5391 		tg3_setup_flow_control(tp, local_adv, remote_adv);
5392 
5393 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5394 	if (tp->link_config.active_duplex == DUPLEX_HALF)
5395 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5396 
5397 	tw32_f(MAC_MODE, tp->mac_mode);
5398 	udelay(40);
5399 
5400 	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5401 
5402 	tp->link_config.active_speed = current_speed;
5403 	tp->link_config.active_duplex = current_duplex;
5404 
5405 	tg3_test_and_report_link_chg(tp, current_link_up);
5406 	return err;
5407 }
5408 
5409 static void tg3_serdes_parallel_detect(struct tg3 *tp)
5410 {
5411 	if (tp->serdes_counter) {
5412 		/* Give autoneg time to complete. */
5413 		tp->serdes_counter--;
5414 		return;
5415 	}
5416 
5417 	if (!tp->link_up &&
5418 	    (tp->link_config.autoneg == AUTONEG_ENABLE)) {
5419 		u32 bmcr;
5420 
5421 		tg3_readphy(tp, MII_BMCR, &bmcr);
5422 		if (bmcr & BMCR_ANENABLE) {
5423 			u32 phy1, phy2;
5424 
5425 			/* Select shadow register 0x1f */
5426 			tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
5427 			tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
5428 
5429 			/* Select expansion interrupt status register */
5430 			tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5431 					 MII_TG3_DSP_EXP1_INT_STAT);
5432 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5433 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5434 
5435 			if ((phy1 & 0x10) && !(phy2 & 0x20)) {
5436 				/* We have signal detect and not receiving
5437 				 * config code words, link is up by parallel
5438 				 * detection.
5439 				 */
5440 
5441 				bmcr &= ~BMCR_ANENABLE;
5442 				bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
5443 				tg3_writephy(tp, MII_BMCR, bmcr);
5444 				tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
5445 			}
5446 		}
5447 	} else if (tp->link_up &&
5448 		   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
5449 		   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5450 		u32 phy2;
5451 
5452 		/* Select expansion interrupt status register */
5453 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5454 				 MII_TG3_DSP_EXP1_INT_STAT);
5455 		tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5456 		if (phy2 & 0x20) {
5457 			u32 bmcr;
5458 
5459 			/* Config code words received, turn on autoneg. */
5460 			tg3_readphy(tp, MII_BMCR, &bmcr);
5461 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
5462 
5463 			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5464 
5465 		}
5466 	}
5467 }
5468 
5469 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
5470 {
5471 	u32 val;
5472 	int err;
5473 
5474 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
5475 		err = tg3_setup_fiber_phy(tp, force_reset);
5476 	else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
5477 		err = tg3_setup_fiber_mii_phy(tp, force_reset);
5478 	else
5479 		err = tg3_setup_copper_phy(tp, force_reset);
5480 
5481 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
5482 		u32 scale;
5483 
5484 		val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
5485 		if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
5486 			scale = 65;
5487 		else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
5488 			scale = 6;
5489 		else
5490 			scale = 12;
5491 
5492 		val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
5493 		val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
5494 		tw32(GRC_MISC_CFG, val);
5495 	}
5496 
5497 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
5498 	      (6 << TX_LENGTHS_IPG_SHIFT);
5499 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
5500 		val |= tr32(MAC_TX_LENGTHS) &
5501 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
5502 			TX_LENGTHS_CNT_DWN_VAL_MSK);
5503 
5504 	if (tp->link_config.active_speed == SPEED_1000 &&
5505 	    tp->link_config.active_duplex == DUPLEX_HALF)
5506 		tw32(MAC_TX_LENGTHS, val |
5507 		     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
5508 	else
5509 		tw32(MAC_TX_LENGTHS, val |
5510 		     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
5511 
5512 	if (!tg3_flag(tp, 5705_PLUS)) {
5513 		if (tp->link_up) {
5514 			tw32(HOSTCC_STAT_COAL_TICKS,
5515 			     tp->coal.stats_block_coalesce_usecs);
5516 		} else {
5517 			tw32(HOSTCC_STAT_COAL_TICKS, 0);
5518 		}
5519 	}
5520 
5521 	if (tg3_flag(tp, ASPM_WORKAROUND)) {
5522 		val = tr32(PCIE_PWR_MGMT_THRESH);
5523 		if (!tp->link_up)
5524 			val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
5525 			      tp->pwrmgmt_thresh;
5526 		else
5527 			val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
5528 		tw32(PCIE_PWR_MGMT_THRESH, val);
5529 	}
5530 
5531 	return err;
5532 }
5533 
5534 /* tp->lock must be held */
5535 static u64 tg3_refclk_read(struct tg3 *tp)
5536 {
5537 	u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB);
5538 	return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
5539 }
5540 
5541 /* tp->lock must be held */
5542 static void tg3_refclk_write(struct tg3 *tp, u64 newval)
5543 {
5544 	tw32(TG3_EAV_REF_CLCK_CTL, TG3_EAV_REF_CLCK_CTL_STOP);
5545 	tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
5546 	tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
5547 	tw32_f(TG3_EAV_REF_CLCK_CTL, TG3_EAV_REF_CLCK_CTL_RESUME);
5548 }
5549 
5550 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
5551 static inline void tg3_full_unlock(struct tg3 *tp);
5552 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
5553 {
5554 	struct tg3 *tp = netdev_priv(dev);
5555 
5556 	info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
5557 				SOF_TIMESTAMPING_RX_SOFTWARE |
5558 				SOF_TIMESTAMPING_SOFTWARE    |
5559 				SOF_TIMESTAMPING_TX_HARDWARE |
5560 				SOF_TIMESTAMPING_RX_HARDWARE |
5561 				SOF_TIMESTAMPING_RAW_HARDWARE;
5562 
5563 	if (tp->ptp_clock)
5564 		info->phc_index = ptp_clock_index(tp->ptp_clock);
5565 	else
5566 		info->phc_index = -1;
5567 
5568 	info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
5569 
5570 	info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
5571 			   (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
5572 			   (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
5573 			   (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
5574 	return 0;
5575 }
5576 
5577 static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
5578 {
5579 	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
5580 	bool neg_adj = false;
5581 	u32 correction = 0;
5582 
5583 	if (ppb < 0) {
5584 		neg_adj = true;
5585 		ppb = -ppb;
5586 	}
5587 
5588 	/* Frequency adjustment is performed using hardware with a 24 bit
5589 	 * accumulator and a programmable correction value. On each clk, the
5590 	 * correction value gets added to the accumulator and when it
5591 	 * overflows, the time counter is incremented/decremented.
5592 	 *
5593 	 * So conversion from ppb to correction value is
5594 	 *		ppb * (1 << 24) / 1000000000
5595 	 */
5596 	correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
5597 		     TG3_EAV_REF_CLK_CORRECT_MASK;
5598 
5599 	tg3_full_lock(tp, 0);
5600 
5601 	if (correction)
5602 		tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
5603 		     TG3_EAV_REF_CLK_CORRECT_EN |
5604 		     (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
5605 	else
5606 		tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
5607 
5608 	tg3_full_unlock(tp);
5609 
5610 	return 0;
5611 }
5612 
5613 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
5614 {
5615 	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
5616 
5617 	tg3_full_lock(tp, 0);
5618 	tp->ptp_adjust += delta;
5619 	tg3_full_unlock(tp);
5620 
5621 	return 0;
5622 }
5623 
5624 static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
5625 {
5626 	u64 ns;
5627 	u32 remainder;
5628 	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
5629 
5630 	tg3_full_lock(tp, 0);
5631 	ns = tg3_refclk_read(tp);
5632 	ns += tp->ptp_adjust;
5633 	tg3_full_unlock(tp);
5634 
5635 	ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder);
5636 	ts->tv_nsec = remainder;
5637 
5638 	return 0;
5639 }
5640 
5641 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
5642 			   const struct timespec *ts)
5643 {
5644 	u64 ns;
5645 	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
5646 
5647 	ns = timespec_to_ns(ts);
5648 
5649 	tg3_full_lock(tp, 0);
5650 	tg3_refclk_write(tp, ns);
5651 	tp->ptp_adjust = 0;
5652 	tg3_full_unlock(tp);
5653 
5654 	return 0;
5655 }
5656 
5657 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
5658 			  struct ptp_clock_request *rq, int on)
5659 {
5660 	return -EOPNOTSUPP;
5661 }
5662 
5663 static const struct ptp_clock_info tg3_ptp_caps = {
5664 	.owner		= THIS_MODULE,
5665 	.name		= "tg3 clock",
5666 	.max_adj	= 250000000,
5667 	.n_alarm	= 0,
5668 	.n_ext_ts	= 0,
5669 	.n_per_out	= 0,
5670 	.pps		= 0,
5671 	.adjfreq	= tg3_ptp_adjfreq,
5672 	.adjtime	= tg3_ptp_adjtime,
5673 	.gettime	= tg3_ptp_gettime,
5674 	.settime	= tg3_ptp_settime,
5675 	.enable		= tg3_ptp_enable,
5676 };
5677 
5678 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
5679 				     struct skb_shared_hwtstamps *timestamp)
5680 {
5681 	memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
5682 	timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
5683 					   tp->ptp_adjust);
5684 }
5685 
5686 /* tp->lock must be held */
5687 static void tg3_ptp_init(struct tg3 *tp)
5688 {
5689 	if (!tg3_flag(tp, PTP_CAPABLE))
5690 		return;
5691 
5692 	/* Initialize the hardware clock to the system time. */
5693 	tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
5694 	tp->ptp_adjust = 0;
5695 	tp->ptp_info = tg3_ptp_caps;
5696 }
5697 
5698 /* tp->lock must be held */
5699 static void tg3_ptp_resume(struct tg3 *tp)
5700 {
5701 	if (!tg3_flag(tp, PTP_CAPABLE))
5702 		return;
5703 
5704 	tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
5705 	tp->ptp_adjust = 0;
5706 }
5707 
5708 static void tg3_ptp_fini(struct tg3 *tp)
5709 {
5710 	if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
5711 		return;
5712 
5713 	ptp_clock_unregister(tp->ptp_clock);
5714 	tp->ptp_clock = NULL;
5715 	tp->ptp_adjust = 0;
5716 }
5717 
5718 static inline int tg3_irq_sync(struct tg3 *tp)
5719 {
5720 	return tp->irq_sync;
5721 }
5722 
5723 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
5724 {
5725 	int i;
5726 
5727 	dst = (u32 *)((u8 *)dst + off);
5728 	for (i = 0; i < len; i += sizeof(u32))
5729 		*dst++ = tr32(off + i);
5730 }
5731 
5732 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
5733 {
5734 	tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
5735 	tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
5736 	tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
5737 	tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
5738 	tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
5739 	tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
5740 	tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
5741 	tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
5742 	tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
5743 	tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
5744 	tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
5745 	tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
5746 	tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
5747 	tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
5748 	tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
5749 	tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
5750 	tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
5751 	tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
5752 	tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
5753 
5754 	if (tg3_flag(tp, SUPPORT_MSIX))
5755 		tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
5756 
5757 	tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
5758 	tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
5759 	tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
5760 	tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
5761 	tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
5762 	tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
5763 	tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
5764 	tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
5765 
5766 	if (!tg3_flag(tp, 5705_PLUS)) {
5767 		tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
5768 		tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
5769 		tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
5770 	}
5771 
5772 	tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
5773 	tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
5774 	tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
5775 	tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
5776 	tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
5777 
5778 	if (tg3_flag(tp, NVRAM))
5779 		tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
5780 }
5781 
5782 static void tg3_dump_state(struct tg3 *tp)
5783 {
5784 	int i;
5785 	u32 *regs;
5786 
5787 	regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
5788 	if (!regs) {
5789 		netdev_err(tp->dev, "Failed allocating register dump buffer\n");
5790 		return;
5791 	}
5792 
5793 	if (tg3_flag(tp, PCI_EXPRESS)) {
5794 		/* Read up to but not including private PCI registers */
5795 		for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
5796 			regs[i / sizeof(u32)] = tr32(i);
5797 	} else
5798 		tg3_dump_legacy_regs(tp, regs);
5799 
5800 	for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
5801 		if (!regs[i + 0] && !regs[i + 1] &&
5802 		    !regs[i + 2] && !regs[i + 3])
5803 			continue;
5804 
5805 		netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
5806 			   i * 4,
5807 			   regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
5808 	}
5809 
5810 	kfree(regs);
5811 
5812 	for (i = 0; i < tp->irq_cnt; i++) {
5813 		struct tg3_napi *tnapi = &tp->napi[i];
5814 
5815 		/* SW status block */
5816 		netdev_err(tp->dev,
5817 			 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
5818 			   i,
5819 			   tnapi->hw_status->status,
5820 			   tnapi->hw_status->status_tag,
5821 			   tnapi->hw_status->rx_jumbo_consumer,
5822 			   tnapi->hw_status->rx_consumer,
5823 			   tnapi->hw_status->rx_mini_consumer,
5824 			   tnapi->hw_status->idx[0].rx_producer,
5825 			   tnapi->hw_status->idx[0].tx_consumer);
5826 
5827 		netdev_err(tp->dev,
5828 		"%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
5829 			   i,
5830 			   tnapi->last_tag, tnapi->last_irq_tag,
5831 			   tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
5832 			   tnapi->rx_rcb_ptr,
5833 			   tnapi->prodring.rx_std_prod_idx,
5834 			   tnapi->prodring.rx_std_cons_idx,
5835 			   tnapi->prodring.rx_jmb_prod_idx,
5836 			   tnapi->prodring.rx_jmb_cons_idx);
5837 	}
5838 }
5839 
5840 /* This is called whenever we suspect that the system chipset is re-
5841  * ordering the sequence of MMIO to the tx send mailbox. The symptom
5842  * is bogus tx completions. We try to recover by setting the
5843  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
5844  * in the workqueue.
5845  */
5846 static void tg3_tx_recover(struct tg3 *tp)
5847 {
5848 	BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
5849 	       tp->write32_tx_mbox == tg3_write_indirect_mbox);
5850 
5851 	netdev_warn(tp->dev,
5852 		    "The system may be re-ordering memory-mapped I/O "
5853 		    "cycles to the network device, attempting to recover. "
5854 		    "Please report the problem to the driver maintainer "
5855 		    "and include system chipset information.\n");
5856 
5857 	spin_lock(&tp->lock);
5858 	tg3_flag_set(tp, TX_RECOVERY_PENDING);
5859 	spin_unlock(&tp->lock);
5860 }
5861 
5862 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
5863 {
5864 	/* Tell compiler to fetch tx indices from memory. */
5865 	barrier();
5866 	return tnapi->tx_pending -
5867 	       ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
5868 }
5869 
5870 /* Tigon3 never reports partial packet sends.  So we do not
5871  * need special logic to handle SKBs that have not had all
5872  * of their frags sent yet, like SunGEM does.
5873  */
5874 static void tg3_tx(struct tg3_napi *tnapi)
5875 {
5876 	struct tg3 *tp = tnapi->tp;
5877 	u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
5878 	u32 sw_idx = tnapi->tx_cons;
5879 	struct netdev_queue *txq;
5880 	int index = tnapi - tp->napi;
5881 	unsigned int pkts_compl = 0, bytes_compl = 0;
5882 
5883 	if (tg3_flag(tp, ENABLE_TSS))
5884 		index--;
5885 
5886 	txq = netdev_get_tx_queue(tp->dev, index);
5887 
5888 	while (sw_idx != hw_idx) {
5889 		struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
5890 		struct sk_buff *skb = ri->skb;
5891 		int i, tx_bug = 0;
5892 
5893 		if (unlikely(skb == NULL)) {
5894 			tg3_tx_recover(tp);
5895 			return;
5896 		}
5897 
5898 		if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
5899 			struct skb_shared_hwtstamps timestamp;
5900 			u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
5901 			hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
5902 
5903 			tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
5904 
5905 			skb_tstamp_tx(skb, &timestamp);
5906 		}
5907 
5908 		pci_unmap_single(tp->pdev,
5909 				 dma_unmap_addr(ri, mapping),
5910 				 skb_headlen(skb),
5911 				 PCI_DMA_TODEVICE);
5912 
5913 		ri->skb = NULL;
5914 
5915 		while (ri->fragmented) {
5916 			ri->fragmented = false;
5917 			sw_idx = NEXT_TX(sw_idx);
5918 			ri = &tnapi->tx_buffers[sw_idx];
5919 		}
5920 
5921 		sw_idx = NEXT_TX(sw_idx);
5922 
5923 		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
5924 			ri = &tnapi->tx_buffers[sw_idx];
5925 			if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
5926 				tx_bug = 1;
5927 
5928 			pci_unmap_page(tp->pdev,
5929 				       dma_unmap_addr(ri, mapping),
5930 				       skb_frag_size(&skb_shinfo(skb)->frags[i]),
5931 				       PCI_DMA_TODEVICE);
5932 
5933 			while (ri->fragmented) {
5934 				ri->fragmented = false;
5935 				sw_idx = NEXT_TX(sw_idx);
5936 				ri = &tnapi->tx_buffers[sw_idx];
5937 			}
5938 
5939 			sw_idx = NEXT_TX(sw_idx);
5940 		}
5941 
5942 		pkts_compl++;
5943 		bytes_compl += skb->len;
5944 
5945 		dev_kfree_skb(skb);
5946 
5947 		if (unlikely(tx_bug)) {
5948 			tg3_tx_recover(tp);
5949 			return;
5950 		}
5951 	}
5952 
5953 	netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
5954 
5955 	tnapi->tx_cons = sw_idx;
5956 
5957 	/* Need to make the tx_cons update visible to tg3_start_xmit()
5958 	 * before checking for netif_queue_stopped().  Without the
5959 	 * memory barrier, there is a small possibility that tg3_start_xmit()
5960 	 * will miss it and cause the queue to be stopped forever.
5961 	 */
5962 	smp_mb();
5963 
5964 	if (unlikely(netif_tx_queue_stopped(txq) &&
5965 		     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
5966 		__netif_tx_lock(txq, smp_processor_id());
5967 		if (netif_tx_queue_stopped(txq) &&
5968 		    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
5969 			netif_tx_wake_queue(txq);
5970 		__netif_tx_unlock(txq);
5971 	}
5972 }
5973 
5974 static void tg3_frag_free(bool is_frag, void *data)
5975 {
5976 	if (is_frag)
5977 		put_page(virt_to_head_page(data));
5978 	else
5979 		kfree(data);
5980 }
5981 
5982 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
5983 {
5984 	unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
5985 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5986 
5987 	if (!ri->data)
5988 		return;
5989 
5990 	pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
5991 			 map_sz, PCI_DMA_FROMDEVICE);
5992 	tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
5993 	ri->data = NULL;
5994 }
5995 
5996 
5997 /* Returns size of skb allocated or < 0 on error.
5998  *
5999  * We only need to fill in the address because the other members
6000  * of the RX descriptor are invariant, see tg3_init_rings.
6001  *
6002  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6003  * posting buffers we only dirty the first cache line of the RX
6004  * descriptor (containing the address).  Whereas for the RX status
6005  * buffers the cpu only reads the last cacheline of the RX descriptor
6006  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6007  */
6008 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6009 			     u32 opaque_key, u32 dest_idx_unmasked,
6010 			     unsigned int *frag_size)
6011 {
6012 	struct tg3_rx_buffer_desc *desc;
6013 	struct ring_info *map;
6014 	u8 *data;
6015 	dma_addr_t mapping;
6016 	int skb_size, data_size, dest_idx;
6017 
6018 	switch (opaque_key) {
6019 	case RXD_OPAQUE_RING_STD:
6020 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6021 		desc = &tpr->rx_std[dest_idx];
6022 		map = &tpr->rx_std_buffers[dest_idx];
6023 		data_size = tp->rx_pkt_map_sz;
6024 		break;
6025 
6026 	case RXD_OPAQUE_RING_JUMBO:
6027 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6028 		desc = &tpr->rx_jmb[dest_idx].std;
6029 		map = &tpr->rx_jmb_buffers[dest_idx];
6030 		data_size = TG3_RX_JMB_MAP_SZ;
6031 		break;
6032 
6033 	default:
6034 		return -EINVAL;
6035 	}
6036 
6037 	/* Do not overwrite any of the map or rp information
6038 	 * until we are sure we can commit to a new buffer.
6039 	 *
6040 	 * Callers depend upon this behavior and assume that
6041 	 * we leave everything unchanged if we fail.
6042 	 */
6043 	skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6044 		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6045 	if (skb_size <= PAGE_SIZE) {
6046 		data = netdev_alloc_frag(skb_size);
6047 		*frag_size = skb_size;
6048 	} else {
6049 		data = kmalloc(skb_size, GFP_ATOMIC);
6050 		*frag_size = 0;
6051 	}
6052 	if (!data)
6053 		return -ENOMEM;
6054 
6055 	mapping = pci_map_single(tp->pdev,
6056 				 data + TG3_RX_OFFSET(tp),
6057 				 data_size,
6058 				 PCI_DMA_FROMDEVICE);
6059 	if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
6060 		tg3_frag_free(skb_size <= PAGE_SIZE, data);
6061 		return -EIO;
6062 	}
6063 
6064 	map->data = data;
6065 	dma_unmap_addr_set(map, mapping, mapping);
6066 
6067 	desc->addr_hi = ((u64)mapping >> 32);
6068 	desc->addr_lo = ((u64)mapping & 0xffffffff);
6069 
6070 	return data_size;
6071 }
6072 
6073 /* We only need to move over in the address because the other
6074  * members of the RX descriptor are invariant.  See notes above
6075  * tg3_alloc_rx_data for full details.
6076  */
6077 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6078 			   struct tg3_rx_prodring_set *dpr,
6079 			   u32 opaque_key, int src_idx,
6080 			   u32 dest_idx_unmasked)
6081 {
6082 	struct tg3 *tp = tnapi->tp;
6083 	struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6084 	struct ring_info *src_map, *dest_map;
6085 	struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6086 	int dest_idx;
6087 
6088 	switch (opaque_key) {
6089 	case RXD_OPAQUE_RING_STD:
6090 		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6091 		dest_desc = &dpr->rx_std[dest_idx];
6092 		dest_map = &dpr->rx_std_buffers[dest_idx];
6093 		src_desc = &spr->rx_std[src_idx];
6094 		src_map = &spr->rx_std_buffers[src_idx];
6095 		break;
6096 
6097 	case RXD_OPAQUE_RING_JUMBO:
6098 		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6099 		dest_desc = &dpr->rx_jmb[dest_idx].std;
6100 		dest_map = &dpr->rx_jmb_buffers[dest_idx];
6101 		src_desc = &spr->rx_jmb[src_idx].std;
6102 		src_map = &spr->rx_jmb_buffers[src_idx];
6103 		break;
6104 
6105 	default:
6106 		return;
6107 	}
6108 
6109 	dest_map->data = src_map->data;
6110 	dma_unmap_addr_set(dest_map, mapping,
6111 			   dma_unmap_addr(src_map, mapping));
6112 	dest_desc->addr_hi = src_desc->addr_hi;
6113 	dest_desc->addr_lo = src_desc->addr_lo;
6114 
6115 	/* Ensure that the update to the skb happens after the physical
6116 	 * addresses have been transferred to the new BD location.
6117 	 */
6118 	smp_wmb();
6119 
6120 	src_map->data = NULL;
6121 }
6122 
6123 /* The RX ring scheme is composed of multiple rings which post fresh
6124  * buffers to the chip, and one special ring the chip uses to report
6125  * status back to the host.
6126  *
6127  * The special ring reports the status of received packets to the
6128  * host.  The chip does not write into the original descriptor the
6129  * RX buffer was obtained from.  The chip simply takes the original
6130  * descriptor as provided by the host, updates the status and length
6131  * field, then writes this into the next status ring entry.
6132  *
6133  * Each ring the host uses to post buffers to the chip is described
6134  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6135  * it is first placed into the on-chip ram.  When the packet's length
6136  * is known, it walks down the TG3_BDINFO entries to select the ring.
6137  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6138  * which is within the range of the new packet's length is chosen.
6139  *
6140  * The "separate ring for rx status" scheme may sound queer, but it makes
6141  * sense from a cache coherency perspective.  If only the host writes
6142  * to the buffer post rings, and only the chip writes to the rx status
6143  * rings, then cache lines never move beyond shared-modified state.
6144  * If both the host and chip were to write into the same ring, cache line
6145  * eviction could occur since both entities want it in an exclusive state.
6146  */
6147 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6148 {
6149 	struct tg3 *tp = tnapi->tp;
6150 	u32 work_mask, rx_std_posted = 0;
6151 	u32 std_prod_idx, jmb_prod_idx;
6152 	u32 sw_idx = tnapi->rx_rcb_ptr;
6153 	u16 hw_idx;
6154 	int received;
6155 	struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6156 
6157 	hw_idx = *(tnapi->rx_rcb_prod_idx);
6158 	/*
6159 	 * We need to order the read of hw_idx and the read of
6160 	 * the opaque cookie.
6161 	 */
6162 	rmb();
6163 	work_mask = 0;
6164 	received = 0;
6165 	std_prod_idx = tpr->rx_std_prod_idx;
6166 	jmb_prod_idx = tpr->rx_jmb_prod_idx;
6167 	while (sw_idx != hw_idx && budget > 0) {
6168 		struct ring_info *ri;
6169 		struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6170 		unsigned int len;
6171 		struct sk_buff *skb;
6172 		dma_addr_t dma_addr;
6173 		u32 opaque_key, desc_idx, *post_ptr;
6174 		u8 *data;
6175 		u64 tstamp = 0;
6176 
6177 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6178 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6179 		if (opaque_key == RXD_OPAQUE_RING_STD) {
6180 			ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6181 			dma_addr = dma_unmap_addr(ri, mapping);
6182 			data = ri->data;
6183 			post_ptr = &std_prod_idx;
6184 			rx_std_posted++;
6185 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6186 			ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6187 			dma_addr = dma_unmap_addr(ri, mapping);
6188 			data = ri->data;
6189 			post_ptr = &jmb_prod_idx;
6190 		} else
6191 			goto next_pkt_nopost;
6192 
6193 		work_mask |= opaque_key;
6194 
6195 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
6196 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
6197 		drop_it:
6198 			tg3_recycle_rx(tnapi, tpr, opaque_key,
6199 				       desc_idx, *post_ptr);
6200 		drop_it_no_recycle:
6201 			/* Other statistics kept track of by card. */
6202 			tp->rx_dropped++;
6203 			goto next_pkt;
6204 		}
6205 
6206 		prefetch(data + TG3_RX_OFFSET(tp));
6207 		len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6208 		      ETH_FCS_LEN;
6209 
6210 		if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6211 		     RXD_FLAG_PTPSTAT_PTPV1 ||
6212 		    (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6213 		     RXD_FLAG_PTPSTAT_PTPV2) {
6214 			tstamp = tr32(TG3_RX_TSTAMP_LSB);
6215 			tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6216 		}
6217 
6218 		if (len > TG3_RX_COPY_THRESH(tp)) {
6219 			int skb_size;
6220 			unsigned int frag_size;
6221 
6222 			skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6223 						    *post_ptr, &frag_size);
6224 			if (skb_size < 0)
6225 				goto drop_it;
6226 
6227 			pci_unmap_single(tp->pdev, dma_addr, skb_size,
6228 					 PCI_DMA_FROMDEVICE);
6229 
6230 			skb = build_skb(data, frag_size);
6231 			if (!skb) {
6232 				tg3_frag_free(frag_size != 0, data);
6233 				goto drop_it_no_recycle;
6234 			}
6235 			skb_reserve(skb, TG3_RX_OFFSET(tp));
6236 			/* Ensure that the update to the data happens
6237 			 * after the usage of the old DMA mapping.
6238 			 */
6239 			smp_wmb();
6240 
6241 			ri->data = NULL;
6242 
6243 		} else {
6244 			tg3_recycle_rx(tnapi, tpr, opaque_key,
6245 				       desc_idx, *post_ptr);
6246 
6247 			skb = netdev_alloc_skb(tp->dev,
6248 					       len + TG3_RAW_IP_ALIGN);
6249 			if (skb == NULL)
6250 				goto drop_it_no_recycle;
6251 
6252 			skb_reserve(skb, TG3_RAW_IP_ALIGN);
6253 			pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6254 			memcpy(skb->data,
6255 			       data + TG3_RX_OFFSET(tp),
6256 			       len);
6257 			pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6258 		}
6259 
6260 		skb_put(skb, len);
6261 		if (tstamp)
6262 			tg3_hwclock_to_timestamp(tp, tstamp,
6263 						 skb_hwtstamps(skb));
6264 
6265 		if ((tp->dev->features & NETIF_F_RXCSUM) &&
6266 		    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6267 		    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6268 		      >> RXD_TCPCSUM_SHIFT) == 0xffff))
6269 			skb->ip_summed = CHECKSUM_UNNECESSARY;
6270 		else
6271 			skb_checksum_none_assert(skb);
6272 
6273 		skb->protocol = eth_type_trans(skb, tp->dev);
6274 
6275 		if (len > (tp->dev->mtu + ETH_HLEN) &&
6276 		    skb->protocol != htons(ETH_P_8021Q)) {
6277 			dev_kfree_skb(skb);
6278 			goto drop_it_no_recycle;
6279 		}
6280 
6281 		if (desc->type_flags & RXD_FLAG_VLAN &&
6282 		    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6283 			__vlan_hwaccel_put_tag(skb,
6284 					       desc->err_vlan & RXD_VLAN_MASK);
6285 
6286 		napi_gro_receive(&tnapi->napi, skb);
6287 
6288 		received++;
6289 		budget--;
6290 
6291 next_pkt:
6292 		(*post_ptr)++;
6293 
6294 		if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6295 			tpr->rx_std_prod_idx = std_prod_idx &
6296 					       tp->rx_std_ring_mask;
6297 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6298 				     tpr->rx_std_prod_idx);
6299 			work_mask &= ~RXD_OPAQUE_RING_STD;
6300 			rx_std_posted = 0;
6301 		}
6302 next_pkt_nopost:
6303 		sw_idx++;
6304 		sw_idx &= tp->rx_ret_ring_mask;
6305 
6306 		/* Refresh hw_idx to see if there is new work */
6307 		if (sw_idx == hw_idx) {
6308 			hw_idx = *(tnapi->rx_rcb_prod_idx);
6309 			rmb();
6310 		}
6311 	}
6312 
6313 	/* ACK the status ring. */
6314 	tnapi->rx_rcb_ptr = sw_idx;
6315 	tw32_rx_mbox(tnapi->consmbox, sw_idx);
6316 
6317 	/* Refill RX ring(s). */
6318 	if (!tg3_flag(tp, ENABLE_RSS)) {
6319 		/* Sync BD data before updating mailbox */
6320 		wmb();
6321 
6322 		if (work_mask & RXD_OPAQUE_RING_STD) {
6323 			tpr->rx_std_prod_idx = std_prod_idx &
6324 					       tp->rx_std_ring_mask;
6325 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6326 				     tpr->rx_std_prod_idx);
6327 		}
6328 		if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6329 			tpr->rx_jmb_prod_idx = jmb_prod_idx &
6330 					       tp->rx_jmb_ring_mask;
6331 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6332 				     tpr->rx_jmb_prod_idx);
6333 		}
6334 		mmiowb();
6335 	} else if (work_mask) {
6336 		/* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6337 		 * updated before the producer indices can be updated.
6338 		 */
6339 		smp_wmb();
6340 
6341 		tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6342 		tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6343 
6344 		if (tnapi != &tp->napi[1]) {
6345 			tp->rx_refill = true;
6346 			napi_schedule(&tp->napi[1].napi);
6347 		}
6348 	}
6349 
6350 	return received;
6351 }
6352 
6353 static void tg3_poll_link(struct tg3 *tp)
6354 {
6355 	/* handle link change and other phy events */
6356 	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
6357 		struct tg3_hw_status *sblk = tp->napi[0].hw_status;
6358 
6359 		if (sblk->status & SD_STATUS_LINK_CHG) {
6360 			sblk->status = SD_STATUS_UPDATED |
6361 				       (sblk->status & ~SD_STATUS_LINK_CHG);
6362 			spin_lock(&tp->lock);
6363 			if (tg3_flag(tp, USE_PHYLIB)) {
6364 				tw32_f(MAC_STATUS,
6365 				     (MAC_STATUS_SYNC_CHANGED |
6366 				      MAC_STATUS_CFG_CHANGED |
6367 				      MAC_STATUS_MI_COMPLETION |
6368 				      MAC_STATUS_LNKSTATE_CHANGED));
6369 				udelay(40);
6370 			} else
6371 				tg3_setup_phy(tp, 0);
6372 			spin_unlock(&tp->lock);
6373 		}
6374 	}
6375 }
6376 
6377 static int tg3_rx_prodring_xfer(struct tg3 *tp,
6378 				struct tg3_rx_prodring_set *dpr,
6379 				struct tg3_rx_prodring_set *spr)
6380 {
6381 	u32 si, di, cpycnt, src_prod_idx;
6382 	int i, err = 0;
6383 
6384 	while (1) {
6385 		src_prod_idx = spr->rx_std_prod_idx;
6386 
6387 		/* Make sure updates to the rx_std_buffers[] entries and the
6388 		 * standard producer index are seen in the correct order.
6389 		 */
6390 		smp_rmb();
6391 
6392 		if (spr->rx_std_cons_idx == src_prod_idx)
6393 			break;
6394 
6395 		if (spr->rx_std_cons_idx < src_prod_idx)
6396 			cpycnt = src_prod_idx - spr->rx_std_cons_idx;
6397 		else
6398 			cpycnt = tp->rx_std_ring_mask + 1 -
6399 				 spr->rx_std_cons_idx;
6400 
6401 		cpycnt = min(cpycnt,
6402 			     tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
6403 
6404 		si = spr->rx_std_cons_idx;
6405 		di = dpr->rx_std_prod_idx;
6406 
6407 		for (i = di; i < di + cpycnt; i++) {
6408 			if (dpr->rx_std_buffers[i].data) {
6409 				cpycnt = i - di;
6410 				err = -ENOSPC;
6411 				break;
6412 			}
6413 		}
6414 
6415 		if (!cpycnt)
6416 			break;
6417 
6418 		/* Ensure that updates to the rx_std_buffers ring and the
6419 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6420 		 * ordered correctly WRT the skb check above.
6421 		 */
6422 		smp_rmb();
6423 
6424 		memcpy(&dpr->rx_std_buffers[di],
6425 		       &spr->rx_std_buffers[si],
6426 		       cpycnt * sizeof(struct ring_info));
6427 
6428 		for (i = 0; i < cpycnt; i++, di++, si++) {
6429 			struct tg3_rx_buffer_desc *sbd, *dbd;
6430 			sbd = &spr->rx_std[si];
6431 			dbd = &dpr->rx_std[di];
6432 			dbd->addr_hi = sbd->addr_hi;
6433 			dbd->addr_lo = sbd->addr_lo;
6434 		}
6435 
6436 		spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
6437 				       tp->rx_std_ring_mask;
6438 		dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
6439 				       tp->rx_std_ring_mask;
6440 	}
6441 
6442 	while (1) {
6443 		src_prod_idx = spr->rx_jmb_prod_idx;
6444 
6445 		/* Make sure updates to the rx_jmb_buffers[] entries and
6446 		 * the jumbo producer index are seen in the correct order.
6447 		 */
6448 		smp_rmb();
6449 
6450 		if (spr->rx_jmb_cons_idx == src_prod_idx)
6451 			break;
6452 
6453 		if (spr->rx_jmb_cons_idx < src_prod_idx)
6454 			cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
6455 		else
6456 			cpycnt = tp->rx_jmb_ring_mask + 1 -
6457 				 spr->rx_jmb_cons_idx;
6458 
6459 		cpycnt = min(cpycnt,
6460 			     tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
6461 
6462 		si = spr->rx_jmb_cons_idx;
6463 		di = dpr->rx_jmb_prod_idx;
6464 
6465 		for (i = di; i < di + cpycnt; i++) {
6466 			if (dpr->rx_jmb_buffers[i].data) {
6467 				cpycnt = i - di;
6468 				err = -ENOSPC;
6469 				break;
6470 			}
6471 		}
6472 
6473 		if (!cpycnt)
6474 			break;
6475 
6476 		/* Ensure that updates to the rx_jmb_buffers ring and the
6477 		 * shadowed hardware producer ring from tg3_recycle_skb() are
6478 		 * ordered correctly WRT the skb check above.
6479 		 */
6480 		smp_rmb();
6481 
6482 		memcpy(&dpr->rx_jmb_buffers[di],
6483 		       &spr->rx_jmb_buffers[si],
6484 		       cpycnt * sizeof(struct ring_info));
6485 
6486 		for (i = 0; i < cpycnt; i++, di++, si++) {
6487 			struct tg3_rx_buffer_desc *sbd, *dbd;
6488 			sbd = &spr->rx_jmb[si].std;
6489 			dbd = &dpr->rx_jmb[di].std;
6490 			dbd->addr_hi = sbd->addr_hi;
6491 			dbd->addr_lo = sbd->addr_lo;
6492 		}
6493 
6494 		spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
6495 				       tp->rx_jmb_ring_mask;
6496 		dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
6497 				       tp->rx_jmb_ring_mask;
6498 	}
6499 
6500 	return err;
6501 }
6502 
6503 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
6504 {
6505 	struct tg3 *tp = tnapi->tp;
6506 
6507 	/* run TX completion thread */
6508 	if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
6509 		tg3_tx(tnapi);
6510 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6511 			return work_done;
6512 	}
6513 
6514 	if (!tnapi->rx_rcb_prod_idx)
6515 		return work_done;
6516 
6517 	/* run RX thread, within the bounds set by NAPI.
6518 	 * All RX "locking" is done by ensuring outside
6519 	 * code synchronizes with tg3->napi.poll()
6520 	 */
6521 	if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
6522 		work_done += tg3_rx(tnapi, budget - work_done);
6523 
6524 	if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
6525 		struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
6526 		int i, err = 0;
6527 		u32 std_prod_idx = dpr->rx_std_prod_idx;
6528 		u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
6529 
6530 		tp->rx_refill = false;
6531 		for (i = 1; i <= tp->rxq_cnt; i++)
6532 			err |= tg3_rx_prodring_xfer(tp, dpr,
6533 						    &tp->napi[i].prodring);
6534 
6535 		wmb();
6536 
6537 		if (std_prod_idx != dpr->rx_std_prod_idx)
6538 			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6539 				     dpr->rx_std_prod_idx);
6540 
6541 		if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
6542 			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6543 				     dpr->rx_jmb_prod_idx);
6544 
6545 		mmiowb();
6546 
6547 		if (err)
6548 			tw32_f(HOSTCC_MODE, tp->coal_now);
6549 	}
6550 
6551 	return work_done;
6552 }
6553 
6554 static inline void tg3_reset_task_schedule(struct tg3 *tp)
6555 {
6556 	if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
6557 		schedule_work(&tp->reset_task);
6558 }
6559 
6560 static inline void tg3_reset_task_cancel(struct tg3 *tp)
6561 {
6562 	cancel_work_sync(&tp->reset_task);
6563 	tg3_flag_clear(tp, RESET_TASK_PENDING);
6564 	tg3_flag_clear(tp, TX_RECOVERY_PENDING);
6565 }
6566 
6567 static int tg3_poll_msix(struct napi_struct *napi, int budget)
6568 {
6569 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6570 	struct tg3 *tp = tnapi->tp;
6571 	int work_done = 0;
6572 	struct tg3_hw_status *sblk = tnapi->hw_status;
6573 
6574 	while (1) {
6575 		work_done = tg3_poll_work(tnapi, work_done, budget);
6576 
6577 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6578 			goto tx_recovery;
6579 
6580 		if (unlikely(work_done >= budget))
6581 			break;
6582 
6583 		/* tp->last_tag is used in tg3_int_reenable() below
6584 		 * to tell the hw how much work has been processed,
6585 		 * so we must read it before checking for more work.
6586 		 */
6587 		tnapi->last_tag = sblk->status_tag;
6588 		tnapi->last_irq_tag = tnapi->last_tag;
6589 		rmb();
6590 
6591 		/* check for RX/TX work to do */
6592 		if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
6593 			   *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
6594 
6595 			/* This test here is not race free, but will reduce
6596 			 * the number of interrupts by looping again.
6597 			 */
6598 			if (tnapi == &tp->napi[1] && tp->rx_refill)
6599 				continue;
6600 
6601 			napi_complete(napi);
6602 			/* Reenable interrupts. */
6603 			tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
6604 
6605 			/* This test here is synchronized by napi_schedule()
6606 			 * and napi_complete() to close the race condition.
6607 			 */
6608 			if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
6609 				tw32(HOSTCC_MODE, tp->coalesce_mode |
6610 						  HOSTCC_MODE_ENABLE |
6611 						  tnapi->coal_now);
6612 			}
6613 			mmiowb();
6614 			break;
6615 		}
6616 	}
6617 
6618 	return work_done;
6619 
6620 tx_recovery:
6621 	/* work_done is guaranteed to be less than budget. */
6622 	napi_complete(napi);
6623 	tg3_reset_task_schedule(tp);
6624 	return work_done;
6625 }
6626 
6627 static void tg3_process_error(struct tg3 *tp)
6628 {
6629 	u32 val;
6630 	bool real_error = false;
6631 
6632 	if (tg3_flag(tp, ERROR_PROCESSED))
6633 		return;
6634 
6635 	/* Check Flow Attention register */
6636 	val = tr32(HOSTCC_FLOW_ATTN);
6637 	if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
6638 		netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
6639 		real_error = true;
6640 	}
6641 
6642 	if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
6643 		netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
6644 		real_error = true;
6645 	}
6646 
6647 	if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
6648 		netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
6649 		real_error = true;
6650 	}
6651 
6652 	if (!real_error)
6653 		return;
6654 
6655 	tg3_dump_state(tp);
6656 
6657 	tg3_flag_set(tp, ERROR_PROCESSED);
6658 	tg3_reset_task_schedule(tp);
6659 }
6660 
6661 static int tg3_poll(struct napi_struct *napi, int budget)
6662 {
6663 	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6664 	struct tg3 *tp = tnapi->tp;
6665 	int work_done = 0;
6666 	struct tg3_hw_status *sblk = tnapi->hw_status;
6667 
6668 	while (1) {
6669 		if (sblk->status & SD_STATUS_ERROR)
6670 			tg3_process_error(tp);
6671 
6672 		tg3_poll_link(tp);
6673 
6674 		work_done = tg3_poll_work(tnapi, work_done, budget);
6675 
6676 		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6677 			goto tx_recovery;
6678 
6679 		if (unlikely(work_done >= budget))
6680 			break;
6681 
6682 		if (tg3_flag(tp, TAGGED_STATUS)) {
6683 			/* tp->last_tag is used in tg3_int_reenable() below
6684 			 * to tell the hw how much work has been processed,
6685 			 * so we must read it before checking for more work.
6686 			 */
6687 			tnapi->last_tag = sblk->status_tag;
6688 			tnapi->last_irq_tag = tnapi->last_tag;
6689 			rmb();
6690 		} else
6691 			sblk->status &= ~SD_STATUS_UPDATED;
6692 
6693 		if (likely(!tg3_has_work(tnapi))) {
6694 			napi_complete(napi);
6695 			tg3_int_reenable(tnapi);
6696 			break;
6697 		}
6698 	}
6699 
6700 	return work_done;
6701 
6702 tx_recovery:
6703 	/* work_done is guaranteed to be less than budget. */
6704 	napi_complete(napi);
6705 	tg3_reset_task_schedule(tp);
6706 	return work_done;
6707 }
6708 
6709 static void tg3_napi_disable(struct tg3 *tp)
6710 {
6711 	int i;
6712 
6713 	for (i = tp->irq_cnt - 1; i >= 0; i--)
6714 		napi_disable(&tp->napi[i].napi);
6715 }
6716 
6717 static void tg3_napi_enable(struct tg3 *tp)
6718 {
6719 	int i;
6720 
6721 	for (i = 0; i < tp->irq_cnt; i++)
6722 		napi_enable(&tp->napi[i].napi);
6723 }
6724 
6725 static void tg3_napi_init(struct tg3 *tp)
6726 {
6727 	int i;
6728 
6729 	netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
6730 	for (i = 1; i < tp->irq_cnt; i++)
6731 		netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
6732 }
6733 
6734 static void tg3_napi_fini(struct tg3 *tp)
6735 {
6736 	int i;
6737 
6738 	for (i = 0; i < tp->irq_cnt; i++)
6739 		netif_napi_del(&tp->napi[i].napi);
6740 }
6741 
6742 static inline void tg3_netif_stop(struct tg3 *tp)
6743 {
6744 	tp->dev->trans_start = jiffies;	/* prevent tx timeout */
6745 	tg3_napi_disable(tp);
6746 	netif_carrier_off(tp->dev);
6747 	netif_tx_disable(tp->dev);
6748 }
6749 
6750 /* tp->lock must be held */
6751 static inline void tg3_netif_start(struct tg3 *tp)
6752 {
6753 	tg3_ptp_resume(tp);
6754 
6755 	/* NOTE: unconditional netif_tx_wake_all_queues is only
6756 	 * appropriate so long as all callers are assured to
6757 	 * have free tx slots (such as after tg3_init_hw)
6758 	 */
6759 	netif_tx_wake_all_queues(tp->dev);
6760 
6761 	if (tp->link_up)
6762 		netif_carrier_on(tp->dev);
6763 
6764 	tg3_napi_enable(tp);
6765 	tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
6766 	tg3_enable_ints(tp);
6767 }
6768 
6769 static void tg3_irq_quiesce(struct tg3 *tp)
6770 {
6771 	int i;
6772 
6773 	BUG_ON(tp->irq_sync);
6774 
6775 	tp->irq_sync = 1;
6776 	smp_mb();
6777 
6778 	for (i = 0; i < tp->irq_cnt; i++)
6779 		synchronize_irq(tp->napi[i].irq_vec);
6780 }
6781 
6782 /* Fully shutdown all tg3 driver activity elsewhere in the system.
6783  * If irq_sync is non-zero, then the IRQ handler must be synchronized
6784  * with as well.  Most of the time, this is not necessary except when
6785  * shutting down the device.
6786  */
6787 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
6788 {
6789 	spin_lock_bh(&tp->lock);
6790 	if (irq_sync)
6791 		tg3_irq_quiesce(tp);
6792 }
6793 
6794 static inline void tg3_full_unlock(struct tg3 *tp)
6795 {
6796 	spin_unlock_bh(&tp->lock);
6797 }
6798 
6799 /* One-shot MSI handler - Chip automatically disables interrupt
6800  * after sending MSI so driver doesn't have to do it.
6801  */
6802 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
6803 {
6804 	struct tg3_napi *tnapi = dev_id;
6805 	struct tg3 *tp = tnapi->tp;
6806 
6807 	prefetch(tnapi->hw_status);
6808 	if (tnapi->rx_rcb)
6809 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6810 
6811 	if (likely(!tg3_irq_sync(tp)))
6812 		napi_schedule(&tnapi->napi);
6813 
6814 	return IRQ_HANDLED;
6815 }
6816 
6817 /* MSI ISR - No need to check for interrupt sharing and no need to
6818  * flush status block and interrupt mailbox. PCI ordering rules
6819  * guarantee that MSI will arrive after the status block.
6820  */
6821 static irqreturn_t tg3_msi(int irq, void *dev_id)
6822 {
6823 	struct tg3_napi *tnapi = dev_id;
6824 	struct tg3 *tp = tnapi->tp;
6825 
6826 	prefetch(tnapi->hw_status);
6827 	if (tnapi->rx_rcb)
6828 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6829 	/*
6830 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6831 	 * chip-internal interrupt pending events.
6832 	 * Writing non-zero to intr-mbox-0 additional tells the
6833 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6834 	 * event coalescing.
6835 	 */
6836 	tw32_mailbox(tnapi->int_mbox, 0x00000001);
6837 	if (likely(!tg3_irq_sync(tp)))
6838 		napi_schedule(&tnapi->napi);
6839 
6840 	return IRQ_RETVAL(1);
6841 }
6842 
6843 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
6844 {
6845 	struct tg3_napi *tnapi = dev_id;
6846 	struct tg3 *tp = tnapi->tp;
6847 	struct tg3_hw_status *sblk = tnapi->hw_status;
6848 	unsigned int handled = 1;
6849 
6850 	/* In INTx mode, it is possible for the interrupt to arrive at
6851 	 * the CPU before the status block posted prior to the interrupt.
6852 	 * Reading the PCI State register will confirm whether the
6853 	 * interrupt is ours and will flush the status block.
6854 	 */
6855 	if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
6856 		if (tg3_flag(tp, CHIP_RESETTING) ||
6857 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6858 			handled = 0;
6859 			goto out;
6860 		}
6861 	}
6862 
6863 	/*
6864 	 * Writing any value to intr-mbox-0 clears PCI INTA# and
6865 	 * chip-internal interrupt pending events.
6866 	 * Writing non-zero to intr-mbox-0 additional tells the
6867 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6868 	 * event coalescing.
6869 	 *
6870 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6871 	 * spurious interrupts.  The flush impacts performance but
6872 	 * excessive spurious interrupts can be worse in some cases.
6873 	 */
6874 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6875 	if (tg3_irq_sync(tp))
6876 		goto out;
6877 	sblk->status &= ~SD_STATUS_UPDATED;
6878 	if (likely(tg3_has_work(tnapi))) {
6879 		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6880 		napi_schedule(&tnapi->napi);
6881 	} else {
6882 		/* No work, shared interrupt perhaps?  re-enable
6883 		 * interrupts, and flush that PCI write
6884 		 */
6885 		tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
6886 			       0x00000000);
6887 	}
6888 out:
6889 	return IRQ_RETVAL(handled);
6890 }
6891 
6892 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
6893 {
6894 	struct tg3_napi *tnapi = dev_id;
6895 	struct tg3 *tp = tnapi->tp;
6896 	struct tg3_hw_status *sblk = tnapi->hw_status;
6897 	unsigned int handled = 1;
6898 
6899 	/* In INTx mode, it is possible for the interrupt to arrive at
6900 	 * the CPU before the status block posted prior to the interrupt.
6901 	 * Reading the PCI State register will confirm whether the
6902 	 * interrupt is ours and will flush the status block.
6903 	 */
6904 	if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
6905 		if (tg3_flag(tp, CHIP_RESETTING) ||
6906 		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6907 			handled = 0;
6908 			goto out;
6909 		}
6910 	}
6911 
6912 	/*
6913 	 * writing any value to intr-mbox-0 clears PCI INTA# and
6914 	 * chip-internal interrupt pending events.
6915 	 * writing non-zero to intr-mbox-0 additional tells the
6916 	 * NIC to stop sending us irqs, engaging "in-intr-handler"
6917 	 * event coalescing.
6918 	 *
6919 	 * Flush the mailbox to de-assert the IRQ immediately to prevent
6920 	 * spurious interrupts.  The flush impacts performance but
6921 	 * excessive spurious interrupts can be worse in some cases.
6922 	 */
6923 	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
6924 
6925 	/*
6926 	 * In a shared interrupt configuration, sometimes other devices'
6927 	 * interrupts will scream.  We record the current status tag here
6928 	 * so that the above check can report that the screaming interrupts
6929 	 * are unhandled.  Eventually they will be silenced.
6930 	 */
6931 	tnapi->last_irq_tag = sblk->status_tag;
6932 
6933 	if (tg3_irq_sync(tp))
6934 		goto out;
6935 
6936 	prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6937 
6938 	napi_schedule(&tnapi->napi);
6939 
6940 out:
6941 	return IRQ_RETVAL(handled);
6942 }
6943 
6944 /* ISR for interrupt test */
6945 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
6946 {
6947 	struct tg3_napi *tnapi = dev_id;
6948 	struct tg3 *tp = tnapi->tp;
6949 	struct tg3_hw_status *sblk = tnapi->hw_status;
6950 
6951 	if ((sblk->status & SD_STATUS_UPDATED) ||
6952 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
6953 		tg3_disable_ints(tp);
6954 		return IRQ_RETVAL(1);
6955 	}
6956 	return IRQ_RETVAL(0);
6957 }
6958 
6959 #ifdef CONFIG_NET_POLL_CONTROLLER
6960 static void tg3_poll_controller(struct net_device *dev)
6961 {
6962 	int i;
6963 	struct tg3 *tp = netdev_priv(dev);
6964 
6965 	if (tg3_irq_sync(tp))
6966 		return;
6967 
6968 	for (i = 0; i < tp->irq_cnt; i++)
6969 		tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
6970 }
6971 #endif
6972 
6973 static void tg3_tx_timeout(struct net_device *dev)
6974 {
6975 	struct tg3 *tp = netdev_priv(dev);
6976 
6977 	if (netif_msg_tx_err(tp)) {
6978 		netdev_err(dev, "transmit timed out, resetting\n");
6979 		tg3_dump_state(tp);
6980 	}
6981 
6982 	tg3_reset_task_schedule(tp);
6983 }
6984 
6985 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
6986 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
6987 {
6988 	u32 base = (u32) mapping & 0xffffffff;
6989 
6990 	return (base > 0xffffdcc0) && (base + len + 8 < base);
6991 }
6992 
6993 /* Test for DMA addresses > 40-bit */
6994 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
6995 					  int len)
6996 {
6997 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
6998 	if (tg3_flag(tp, 40BIT_DMA_BUG))
6999 		return ((u64) mapping + len) > DMA_BIT_MASK(40);
7000 	return 0;
7001 #else
7002 	return 0;
7003 #endif
7004 }
7005 
7006 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7007 				 dma_addr_t mapping, u32 len, u32 flags,
7008 				 u32 mss, u32 vlan)
7009 {
7010 	txbd->addr_hi = ((u64) mapping >> 32);
7011 	txbd->addr_lo = ((u64) mapping & 0xffffffff);
7012 	txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7013 	txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7014 }
7015 
7016 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7017 			    dma_addr_t map, u32 len, u32 flags,
7018 			    u32 mss, u32 vlan)
7019 {
7020 	struct tg3 *tp = tnapi->tp;
7021 	bool hwbug = false;
7022 
7023 	if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7024 		hwbug = true;
7025 
7026 	if (tg3_4g_overflow_test(map, len))
7027 		hwbug = true;
7028 
7029 	if (tg3_40bit_overflow_test(tp, map, len))
7030 		hwbug = true;
7031 
7032 	if (tp->dma_limit) {
7033 		u32 prvidx = *entry;
7034 		u32 tmp_flag = flags & ~TXD_FLAG_END;
7035 		while (len > tp->dma_limit && *budget) {
7036 			u32 frag_len = tp->dma_limit;
7037 			len -= tp->dma_limit;
7038 
7039 			/* Avoid the 8byte DMA problem */
7040 			if (len <= 8) {
7041 				len += tp->dma_limit / 2;
7042 				frag_len = tp->dma_limit / 2;
7043 			}
7044 
7045 			tnapi->tx_buffers[*entry].fragmented = true;
7046 
7047 			tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7048 				      frag_len, tmp_flag, mss, vlan);
7049 			*budget -= 1;
7050 			prvidx = *entry;
7051 			*entry = NEXT_TX(*entry);
7052 
7053 			map += frag_len;
7054 		}
7055 
7056 		if (len) {
7057 			if (*budget) {
7058 				tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7059 					      len, flags, mss, vlan);
7060 				*budget -= 1;
7061 				*entry = NEXT_TX(*entry);
7062 			} else {
7063 				hwbug = true;
7064 				tnapi->tx_buffers[prvidx].fragmented = false;
7065 			}
7066 		}
7067 	} else {
7068 		tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7069 			      len, flags, mss, vlan);
7070 		*entry = NEXT_TX(*entry);
7071 	}
7072 
7073 	return hwbug;
7074 }
7075 
7076 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7077 {
7078 	int i;
7079 	struct sk_buff *skb;
7080 	struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7081 
7082 	skb = txb->skb;
7083 	txb->skb = NULL;
7084 
7085 	pci_unmap_single(tnapi->tp->pdev,
7086 			 dma_unmap_addr(txb, mapping),
7087 			 skb_headlen(skb),
7088 			 PCI_DMA_TODEVICE);
7089 
7090 	while (txb->fragmented) {
7091 		txb->fragmented = false;
7092 		entry = NEXT_TX(entry);
7093 		txb = &tnapi->tx_buffers[entry];
7094 	}
7095 
7096 	for (i = 0; i <= last; i++) {
7097 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7098 
7099 		entry = NEXT_TX(entry);
7100 		txb = &tnapi->tx_buffers[entry];
7101 
7102 		pci_unmap_page(tnapi->tp->pdev,
7103 			       dma_unmap_addr(txb, mapping),
7104 			       skb_frag_size(frag), PCI_DMA_TODEVICE);
7105 
7106 		while (txb->fragmented) {
7107 			txb->fragmented = false;
7108 			entry = NEXT_TX(entry);
7109 			txb = &tnapi->tx_buffers[entry];
7110 		}
7111 	}
7112 }
7113 
7114 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7115 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7116 				       struct sk_buff **pskb,
7117 				       u32 *entry, u32 *budget,
7118 				       u32 base_flags, u32 mss, u32 vlan)
7119 {
7120 	struct tg3 *tp = tnapi->tp;
7121 	struct sk_buff *new_skb, *skb = *pskb;
7122 	dma_addr_t new_addr = 0;
7123 	int ret = 0;
7124 
7125 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
7126 		new_skb = skb_copy(skb, GFP_ATOMIC);
7127 	else {
7128 		int more_headroom = 4 - ((unsigned long)skb->data & 3);
7129 
7130 		new_skb = skb_copy_expand(skb,
7131 					  skb_headroom(skb) + more_headroom,
7132 					  skb_tailroom(skb), GFP_ATOMIC);
7133 	}
7134 
7135 	if (!new_skb) {
7136 		ret = -1;
7137 	} else {
7138 		/* New SKB is guaranteed to be linear. */
7139 		new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
7140 					  PCI_DMA_TODEVICE);
7141 		/* Make sure the mapping succeeded */
7142 		if (pci_dma_mapping_error(tp->pdev, new_addr)) {
7143 			dev_kfree_skb(new_skb);
7144 			ret = -1;
7145 		} else {
7146 			u32 save_entry = *entry;
7147 
7148 			base_flags |= TXD_FLAG_END;
7149 
7150 			tnapi->tx_buffers[*entry].skb = new_skb;
7151 			dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7152 					   mapping, new_addr);
7153 
7154 			if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7155 					    new_skb->len, base_flags,
7156 					    mss, vlan)) {
7157 				tg3_tx_skb_unmap(tnapi, save_entry, -1);
7158 				dev_kfree_skb(new_skb);
7159 				ret = -1;
7160 			}
7161 		}
7162 	}
7163 
7164 	dev_kfree_skb(skb);
7165 	*pskb = new_skb;
7166 	return ret;
7167 }
7168 
7169 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7170 
7171 /* Use GSO to workaround a rare TSO bug that may be triggered when the
7172  * TSO header is greater than 80 bytes.
7173  */
7174 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
7175 {
7176 	struct sk_buff *segs, *nskb;
7177 	u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7178 
7179 	/* Estimate the number of fragments in the worst case */
7180 	if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
7181 		netif_stop_queue(tp->dev);
7182 
7183 		/* netif_tx_stop_queue() must be done before checking
7184 		 * checking tx index in tg3_tx_avail() below, because in
7185 		 * tg3_tx(), we update tx index before checking for
7186 		 * netif_tx_queue_stopped().
7187 		 */
7188 		smp_mb();
7189 		if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
7190 			return NETDEV_TX_BUSY;
7191 
7192 		netif_wake_queue(tp->dev);
7193 	}
7194 
7195 	segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
7196 	if (IS_ERR(segs))
7197 		goto tg3_tso_bug_end;
7198 
7199 	do {
7200 		nskb = segs;
7201 		segs = segs->next;
7202 		nskb->next = NULL;
7203 		tg3_start_xmit(nskb, tp->dev);
7204 	} while (segs);
7205 
7206 tg3_tso_bug_end:
7207 	dev_kfree_skb(skb);
7208 
7209 	return NETDEV_TX_OK;
7210 }
7211 
7212 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
7213  * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
7214  */
7215 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7216 {
7217 	struct tg3 *tp = netdev_priv(dev);
7218 	u32 len, entry, base_flags, mss, vlan = 0;
7219 	u32 budget;
7220 	int i = -1, would_hit_hwbug;
7221 	dma_addr_t mapping;
7222 	struct tg3_napi *tnapi;
7223 	struct netdev_queue *txq;
7224 	unsigned int last;
7225 
7226 	txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7227 	tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7228 	if (tg3_flag(tp, ENABLE_TSS))
7229 		tnapi++;
7230 
7231 	budget = tg3_tx_avail(tnapi);
7232 
7233 	/* We are running in BH disabled context with netif_tx_lock
7234 	 * and TX reclaim runs via tp->napi.poll inside of a software
7235 	 * interrupt.  Furthermore, IRQ processing runs lockless so we have
7236 	 * no IRQ context deadlocks to worry about either.  Rejoice!
7237 	 */
7238 	if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7239 		if (!netif_tx_queue_stopped(txq)) {
7240 			netif_tx_stop_queue(txq);
7241 
7242 			/* This is a hard error, log it. */
7243 			netdev_err(dev,
7244 				   "BUG! Tx Ring full when queue awake!\n");
7245 		}
7246 		return NETDEV_TX_BUSY;
7247 	}
7248 
7249 	entry = tnapi->tx_prod;
7250 	base_flags = 0;
7251 	if (skb->ip_summed == CHECKSUM_PARTIAL)
7252 		base_flags |= TXD_FLAG_TCPUDP_CSUM;
7253 
7254 	mss = skb_shinfo(skb)->gso_size;
7255 	if (mss) {
7256 		struct iphdr *iph;
7257 		u32 tcp_opt_len, hdr_len;
7258 
7259 		if (skb_header_cloned(skb) &&
7260 		    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
7261 			goto drop;
7262 
7263 		iph = ip_hdr(skb);
7264 		tcp_opt_len = tcp_optlen(skb);
7265 
7266 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7267 
7268 		if (!skb_is_gso_v6(skb)) {
7269 			iph->check = 0;
7270 			iph->tot_len = htons(mss + hdr_len);
7271 		}
7272 
7273 		if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7274 		    tg3_flag(tp, TSO_BUG))
7275 			return tg3_tso_bug(tp, skb);
7276 
7277 		base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7278 			       TXD_FLAG_CPU_POST_DMA);
7279 
7280 		if (tg3_flag(tp, HW_TSO_1) ||
7281 		    tg3_flag(tp, HW_TSO_2) ||
7282 		    tg3_flag(tp, HW_TSO_3)) {
7283 			tcp_hdr(skb)->check = 0;
7284 			base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7285 		} else
7286 			tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
7287 								 iph->daddr, 0,
7288 								 IPPROTO_TCP,
7289 								 0);
7290 
7291 		if (tg3_flag(tp, HW_TSO_3)) {
7292 			mss |= (hdr_len & 0xc) << 12;
7293 			if (hdr_len & 0x10)
7294 				base_flags |= 0x00000010;
7295 			base_flags |= (hdr_len & 0x3e0) << 5;
7296 		} else if (tg3_flag(tp, HW_TSO_2))
7297 			mss |= hdr_len << 9;
7298 		else if (tg3_flag(tp, HW_TSO_1) ||
7299 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
7300 			if (tcp_opt_len || iph->ihl > 5) {
7301 				int tsflags;
7302 
7303 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7304 				mss |= (tsflags << 11);
7305 			}
7306 		} else {
7307 			if (tcp_opt_len || iph->ihl > 5) {
7308 				int tsflags;
7309 
7310 				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7311 				base_flags |= tsflags << 12;
7312 			}
7313 		}
7314 	}
7315 
7316 	if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
7317 	    !mss && skb->len > VLAN_ETH_FRAME_LEN)
7318 		base_flags |= TXD_FLAG_JMB_PKT;
7319 
7320 	if (vlan_tx_tag_present(skb)) {
7321 		base_flags |= TXD_FLAG_VLAN;
7322 		vlan = vlan_tx_tag_get(skb);
7323 	}
7324 
7325 	if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
7326 	    tg3_flag(tp, TX_TSTAMP_EN)) {
7327 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
7328 		base_flags |= TXD_FLAG_HWTSTAMP;
7329 	}
7330 
7331 	len = skb_headlen(skb);
7332 
7333 	mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
7334 	if (pci_dma_mapping_error(tp->pdev, mapping))
7335 		goto drop;
7336 
7337 
7338 	tnapi->tx_buffers[entry].skb = skb;
7339 	dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
7340 
7341 	would_hit_hwbug = 0;
7342 
7343 	if (tg3_flag(tp, 5701_DMA_BUG))
7344 		would_hit_hwbug = 1;
7345 
7346 	if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
7347 			  ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
7348 			    mss, vlan)) {
7349 		would_hit_hwbug = 1;
7350 	} else if (skb_shinfo(skb)->nr_frags > 0) {
7351 		u32 tmp_mss = mss;
7352 
7353 		if (!tg3_flag(tp, HW_TSO_1) &&
7354 		    !tg3_flag(tp, HW_TSO_2) &&
7355 		    !tg3_flag(tp, HW_TSO_3))
7356 			tmp_mss = 0;
7357 
7358 		/* Now loop through additional data
7359 		 * fragments, and queue them.
7360 		 */
7361 		last = skb_shinfo(skb)->nr_frags - 1;
7362 		for (i = 0; i <= last; i++) {
7363 			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7364 
7365 			len = skb_frag_size(frag);
7366 			mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
7367 						   len, DMA_TO_DEVICE);
7368 
7369 			tnapi->tx_buffers[entry].skb = NULL;
7370 			dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
7371 					   mapping);
7372 			if (dma_mapping_error(&tp->pdev->dev, mapping))
7373 				goto dma_error;
7374 
7375 			if (!budget ||
7376 			    tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
7377 					    len, base_flags |
7378 					    ((i == last) ? TXD_FLAG_END : 0),
7379 					    tmp_mss, vlan)) {
7380 				would_hit_hwbug = 1;
7381 				break;
7382 			}
7383 		}
7384 	}
7385 
7386 	if (would_hit_hwbug) {
7387 		tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
7388 
7389 		/* If the workaround fails due to memory/mapping
7390 		 * failure, silently drop this packet.
7391 		 */
7392 		entry = tnapi->tx_prod;
7393 		budget = tg3_tx_avail(tnapi);
7394 		if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
7395 						base_flags, mss, vlan))
7396 			goto drop_nofree;
7397 	}
7398 
7399 	skb_tx_timestamp(skb);
7400 	netdev_tx_sent_queue(txq, skb->len);
7401 
7402 	/* Sync BD data before updating mailbox */
7403 	wmb();
7404 
7405 	/* Packets are ready, update Tx producer idx local and on card. */
7406 	tw32_tx_mbox(tnapi->prodmbox, entry);
7407 
7408 	tnapi->tx_prod = entry;
7409 	if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
7410 		netif_tx_stop_queue(txq);
7411 
7412 		/* netif_tx_stop_queue() must be done before checking
7413 		 * checking tx index in tg3_tx_avail() below, because in
7414 		 * tg3_tx(), we update tx index before checking for
7415 		 * netif_tx_queue_stopped().
7416 		 */
7417 		smp_mb();
7418 		if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
7419 			netif_tx_wake_queue(txq);
7420 	}
7421 
7422 	mmiowb();
7423 	return NETDEV_TX_OK;
7424 
7425 dma_error:
7426 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
7427 	tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
7428 drop:
7429 	dev_kfree_skb(skb);
7430 drop_nofree:
7431 	tp->tx_dropped++;
7432 	return NETDEV_TX_OK;
7433 }
7434 
7435 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
7436 {
7437 	if (enable) {
7438 		tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
7439 				  MAC_MODE_PORT_MODE_MASK);
7440 
7441 		tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
7442 
7443 		if (!tg3_flag(tp, 5705_PLUS))
7444 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
7445 
7446 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
7447 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
7448 		else
7449 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
7450 	} else {
7451 		tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
7452 
7453 		if (tg3_flag(tp, 5705_PLUS) ||
7454 		    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
7455 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
7456 			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
7457 	}
7458 
7459 	tw32(MAC_MODE, tp->mac_mode);
7460 	udelay(40);
7461 }
7462 
7463 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
7464 {
7465 	u32 val, bmcr, mac_mode, ptest = 0;
7466 
7467 	tg3_phy_toggle_apd(tp, false);
7468 	tg3_phy_toggle_automdix(tp, 0);
7469 
7470 	if (extlpbk && tg3_phy_set_extloopbk(tp))
7471 		return -EIO;
7472 
7473 	bmcr = BMCR_FULLDPLX;
7474 	switch (speed) {
7475 	case SPEED_10:
7476 		break;
7477 	case SPEED_100:
7478 		bmcr |= BMCR_SPEED100;
7479 		break;
7480 	case SPEED_1000:
7481 	default:
7482 		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
7483 			speed = SPEED_100;
7484 			bmcr |= BMCR_SPEED100;
7485 		} else {
7486 			speed = SPEED_1000;
7487 			bmcr |= BMCR_SPEED1000;
7488 		}
7489 	}
7490 
7491 	if (extlpbk) {
7492 		if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
7493 			tg3_readphy(tp, MII_CTRL1000, &val);
7494 			val |= CTL1000_AS_MASTER |
7495 			       CTL1000_ENABLE_MASTER;
7496 			tg3_writephy(tp, MII_CTRL1000, val);
7497 		} else {
7498 			ptest = MII_TG3_FET_PTEST_TRIM_SEL |
7499 				MII_TG3_FET_PTEST_TRIM_2;
7500 			tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
7501 		}
7502 	} else
7503 		bmcr |= BMCR_LOOPBACK;
7504 
7505 	tg3_writephy(tp, MII_BMCR, bmcr);
7506 
7507 	/* The write needs to be flushed for the FETs */
7508 	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
7509 		tg3_readphy(tp, MII_BMCR, &bmcr);
7510 
7511 	udelay(40);
7512 
7513 	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
7514 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
7515 		tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
7516 			     MII_TG3_FET_PTEST_FRC_TX_LINK |
7517 			     MII_TG3_FET_PTEST_FRC_TX_LOCK);
7518 
7519 		/* The write needs to be flushed for the AC131 */
7520 		tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
7521 	}
7522 
7523 	/* Reset to prevent losing 1st rx packet intermittently */
7524 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
7525 	    tg3_flag(tp, 5780_CLASS)) {
7526 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7527 		udelay(10);
7528 		tw32_f(MAC_RX_MODE, tp->rx_mode);
7529 	}
7530 
7531 	mac_mode = tp->mac_mode &
7532 		   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
7533 	if (speed == SPEED_1000)
7534 		mac_mode |= MAC_MODE_PORT_MODE_GMII;
7535 	else
7536 		mac_mode |= MAC_MODE_PORT_MODE_MII;
7537 
7538 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
7539 		u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
7540 
7541 		if (masked_phy_id == TG3_PHY_ID_BCM5401)
7542 			mac_mode &= ~MAC_MODE_LINK_POLARITY;
7543 		else if (masked_phy_id == TG3_PHY_ID_BCM5411)
7544 			mac_mode |= MAC_MODE_LINK_POLARITY;
7545 
7546 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
7547 			     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
7548 	}
7549 
7550 	tw32(MAC_MODE, mac_mode);
7551 	udelay(40);
7552 
7553 	return 0;
7554 }
7555 
7556 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
7557 {
7558 	struct tg3 *tp = netdev_priv(dev);
7559 
7560 	if (features & NETIF_F_LOOPBACK) {
7561 		if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
7562 			return;
7563 
7564 		spin_lock_bh(&tp->lock);
7565 		tg3_mac_loopback(tp, true);
7566 		netif_carrier_on(tp->dev);
7567 		spin_unlock_bh(&tp->lock);
7568 		netdev_info(dev, "Internal MAC loopback mode enabled.\n");
7569 	} else {
7570 		if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
7571 			return;
7572 
7573 		spin_lock_bh(&tp->lock);
7574 		tg3_mac_loopback(tp, false);
7575 		/* Force link status check */
7576 		tg3_setup_phy(tp, 1);
7577 		spin_unlock_bh(&tp->lock);
7578 		netdev_info(dev, "Internal MAC loopback mode disabled.\n");
7579 	}
7580 }
7581 
7582 static netdev_features_t tg3_fix_features(struct net_device *dev,
7583 	netdev_features_t features)
7584 {
7585 	struct tg3 *tp = netdev_priv(dev);
7586 
7587 	if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
7588 		features &= ~NETIF_F_ALL_TSO;
7589 
7590 	return features;
7591 }
7592 
7593 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
7594 {
7595 	netdev_features_t changed = dev->features ^ features;
7596 
7597 	if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
7598 		tg3_set_loopback(dev, features);
7599 
7600 	return 0;
7601 }
7602 
7603 static void tg3_rx_prodring_free(struct tg3 *tp,
7604 				 struct tg3_rx_prodring_set *tpr)
7605 {
7606 	int i;
7607 
7608 	if (tpr != &tp->napi[0].prodring) {
7609 		for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
7610 		     i = (i + 1) & tp->rx_std_ring_mask)
7611 			tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7612 					tp->rx_pkt_map_sz);
7613 
7614 		if (tg3_flag(tp, JUMBO_CAPABLE)) {
7615 			for (i = tpr->rx_jmb_cons_idx;
7616 			     i != tpr->rx_jmb_prod_idx;
7617 			     i = (i + 1) & tp->rx_jmb_ring_mask) {
7618 				tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7619 						TG3_RX_JMB_MAP_SZ);
7620 			}
7621 		}
7622 
7623 		return;
7624 	}
7625 
7626 	for (i = 0; i <= tp->rx_std_ring_mask; i++)
7627 		tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7628 				tp->rx_pkt_map_sz);
7629 
7630 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7631 		for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
7632 			tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7633 					TG3_RX_JMB_MAP_SZ);
7634 	}
7635 }
7636 
7637 /* Initialize rx rings for packet processing.
7638  *
7639  * The chip has been shut down and the driver detached from
7640  * the networking, so no interrupts or new tx packets will
7641  * end up in the driver.  tp->{tx,}lock are held and thus
7642  * we may not sleep.
7643  */
7644 static int tg3_rx_prodring_alloc(struct tg3 *tp,
7645 				 struct tg3_rx_prodring_set *tpr)
7646 {
7647 	u32 i, rx_pkt_dma_sz;
7648 
7649 	tpr->rx_std_cons_idx = 0;
7650 	tpr->rx_std_prod_idx = 0;
7651 	tpr->rx_jmb_cons_idx = 0;
7652 	tpr->rx_jmb_prod_idx = 0;
7653 
7654 	if (tpr != &tp->napi[0].prodring) {
7655 		memset(&tpr->rx_std_buffers[0], 0,
7656 		       TG3_RX_STD_BUFF_RING_SIZE(tp));
7657 		if (tpr->rx_jmb_buffers)
7658 			memset(&tpr->rx_jmb_buffers[0], 0,
7659 			       TG3_RX_JMB_BUFF_RING_SIZE(tp));
7660 		goto done;
7661 	}
7662 
7663 	/* Zero out all descriptors. */
7664 	memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
7665 
7666 	rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
7667 	if (tg3_flag(tp, 5780_CLASS) &&
7668 	    tp->dev->mtu > ETH_DATA_LEN)
7669 		rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
7670 	tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
7671 
7672 	/* Initialize invariants of the rings, we only set this
7673 	 * stuff once.  This works because the card does not
7674 	 * write into the rx buffer posting rings.
7675 	 */
7676 	for (i = 0; i <= tp->rx_std_ring_mask; i++) {
7677 		struct tg3_rx_buffer_desc *rxd;
7678 
7679 		rxd = &tpr->rx_std[i];
7680 		rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
7681 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
7682 		rxd->opaque = (RXD_OPAQUE_RING_STD |
7683 			       (i << RXD_OPAQUE_INDEX_SHIFT));
7684 	}
7685 
7686 	/* Now allocate fresh SKBs for each rx ring. */
7687 	for (i = 0; i < tp->rx_pending; i++) {
7688 		unsigned int frag_size;
7689 
7690 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
7691 				      &frag_size) < 0) {
7692 			netdev_warn(tp->dev,
7693 				    "Using a smaller RX standard ring. Only "
7694 				    "%d out of %d buffers were allocated "
7695 				    "successfully\n", i, tp->rx_pending);
7696 			if (i == 0)
7697 				goto initfail;
7698 			tp->rx_pending = i;
7699 			break;
7700 		}
7701 	}
7702 
7703 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
7704 		goto done;
7705 
7706 	memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
7707 
7708 	if (!tg3_flag(tp, JUMBO_RING_ENABLE))
7709 		goto done;
7710 
7711 	for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
7712 		struct tg3_rx_buffer_desc *rxd;
7713 
7714 		rxd = &tpr->rx_jmb[i].std;
7715 		rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
7716 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
7717 				  RXD_FLAG_JUMBO;
7718 		rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
7719 		       (i << RXD_OPAQUE_INDEX_SHIFT));
7720 	}
7721 
7722 	for (i = 0; i < tp->rx_jumbo_pending; i++) {
7723 		unsigned int frag_size;
7724 
7725 		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
7726 				      &frag_size) < 0) {
7727 			netdev_warn(tp->dev,
7728 				    "Using a smaller RX jumbo ring. Only %d "
7729 				    "out of %d buffers were allocated "
7730 				    "successfully\n", i, tp->rx_jumbo_pending);
7731 			if (i == 0)
7732 				goto initfail;
7733 			tp->rx_jumbo_pending = i;
7734 			break;
7735 		}
7736 	}
7737 
7738 done:
7739 	return 0;
7740 
7741 initfail:
7742 	tg3_rx_prodring_free(tp, tpr);
7743 	return -ENOMEM;
7744 }
7745 
7746 static void tg3_rx_prodring_fini(struct tg3 *tp,
7747 				 struct tg3_rx_prodring_set *tpr)
7748 {
7749 	kfree(tpr->rx_std_buffers);
7750 	tpr->rx_std_buffers = NULL;
7751 	kfree(tpr->rx_jmb_buffers);
7752 	tpr->rx_jmb_buffers = NULL;
7753 	if (tpr->rx_std) {
7754 		dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
7755 				  tpr->rx_std, tpr->rx_std_mapping);
7756 		tpr->rx_std = NULL;
7757 	}
7758 	if (tpr->rx_jmb) {
7759 		dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
7760 				  tpr->rx_jmb, tpr->rx_jmb_mapping);
7761 		tpr->rx_jmb = NULL;
7762 	}
7763 }
7764 
7765 static int tg3_rx_prodring_init(struct tg3 *tp,
7766 				struct tg3_rx_prodring_set *tpr)
7767 {
7768 	tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
7769 				      GFP_KERNEL);
7770 	if (!tpr->rx_std_buffers)
7771 		return -ENOMEM;
7772 
7773 	tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
7774 					 TG3_RX_STD_RING_BYTES(tp),
7775 					 &tpr->rx_std_mapping,
7776 					 GFP_KERNEL);
7777 	if (!tpr->rx_std)
7778 		goto err_out;
7779 
7780 	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7781 		tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
7782 					      GFP_KERNEL);
7783 		if (!tpr->rx_jmb_buffers)
7784 			goto err_out;
7785 
7786 		tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
7787 						 TG3_RX_JMB_RING_BYTES(tp),
7788 						 &tpr->rx_jmb_mapping,
7789 						 GFP_KERNEL);
7790 		if (!tpr->rx_jmb)
7791 			goto err_out;
7792 	}
7793 
7794 	return 0;
7795 
7796 err_out:
7797 	tg3_rx_prodring_fini(tp, tpr);
7798 	return -ENOMEM;
7799 }
7800 
7801 /* Free up pending packets in all rx/tx rings.
7802  *
7803  * The chip has been shut down and the driver detached from
7804  * the networking, so no interrupts or new tx packets will
7805  * end up in the driver.  tp->{tx,}lock is not held and we are not
7806  * in an interrupt context and thus may sleep.
7807  */
7808 static void tg3_free_rings(struct tg3 *tp)
7809 {
7810 	int i, j;
7811 
7812 	for (j = 0; j < tp->irq_cnt; j++) {
7813 		struct tg3_napi *tnapi = &tp->napi[j];
7814 
7815 		tg3_rx_prodring_free(tp, &tnapi->prodring);
7816 
7817 		if (!tnapi->tx_buffers)
7818 			continue;
7819 
7820 		for (i = 0; i < TG3_TX_RING_SIZE; i++) {
7821 			struct sk_buff *skb = tnapi->tx_buffers[i].skb;
7822 
7823 			if (!skb)
7824 				continue;
7825 
7826 			tg3_tx_skb_unmap(tnapi, i,
7827 					 skb_shinfo(skb)->nr_frags - 1);
7828 
7829 			dev_kfree_skb_any(skb);
7830 		}
7831 		netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
7832 	}
7833 }
7834 
7835 /* Initialize tx/rx rings for packet processing.
7836  *
7837  * The chip has been shut down and the driver detached from
7838  * the networking, so no interrupts or new tx packets will
7839  * end up in the driver.  tp->{tx,}lock are held and thus
7840  * we may not sleep.
7841  */
7842 static int tg3_init_rings(struct tg3 *tp)
7843 {
7844 	int i;
7845 
7846 	/* Free up all the SKBs. */
7847 	tg3_free_rings(tp);
7848 
7849 	for (i = 0; i < tp->irq_cnt; i++) {
7850 		struct tg3_napi *tnapi = &tp->napi[i];
7851 
7852 		tnapi->last_tag = 0;
7853 		tnapi->last_irq_tag = 0;
7854 		tnapi->hw_status->status = 0;
7855 		tnapi->hw_status->status_tag = 0;
7856 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7857 
7858 		tnapi->tx_prod = 0;
7859 		tnapi->tx_cons = 0;
7860 		if (tnapi->tx_ring)
7861 			memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
7862 
7863 		tnapi->rx_rcb_ptr = 0;
7864 		if (tnapi->rx_rcb)
7865 			memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7866 
7867 		if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
7868 			tg3_free_rings(tp);
7869 			return -ENOMEM;
7870 		}
7871 	}
7872 
7873 	return 0;
7874 }
7875 
7876 static void tg3_mem_tx_release(struct tg3 *tp)
7877 {
7878 	int i;
7879 
7880 	for (i = 0; i < tp->irq_max; i++) {
7881 		struct tg3_napi *tnapi = &tp->napi[i];
7882 
7883 		if (tnapi->tx_ring) {
7884 			dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
7885 				tnapi->tx_ring, tnapi->tx_desc_mapping);
7886 			tnapi->tx_ring = NULL;
7887 		}
7888 
7889 		kfree(tnapi->tx_buffers);
7890 		tnapi->tx_buffers = NULL;
7891 	}
7892 }
7893 
7894 static int tg3_mem_tx_acquire(struct tg3 *tp)
7895 {
7896 	int i;
7897 	struct tg3_napi *tnapi = &tp->napi[0];
7898 
7899 	/* If multivector TSS is enabled, vector 0 does not handle
7900 	 * tx interrupts.  Don't allocate any resources for it.
7901 	 */
7902 	if (tg3_flag(tp, ENABLE_TSS))
7903 		tnapi++;
7904 
7905 	for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
7906 		tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) *
7907 					    TG3_TX_RING_SIZE, GFP_KERNEL);
7908 		if (!tnapi->tx_buffers)
7909 			goto err_out;
7910 
7911 		tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
7912 						    TG3_TX_RING_BYTES,
7913 						    &tnapi->tx_desc_mapping,
7914 						    GFP_KERNEL);
7915 		if (!tnapi->tx_ring)
7916 			goto err_out;
7917 	}
7918 
7919 	return 0;
7920 
7921 err_out:
7922 	tg3_mem_tx_release(tp);
7923 	return -ENOMEM;
7924 }
7925 
7926 static void tg3_mem_rx_release(struct tg3 *tp)
7927 {
7928 	int i;
7929 
7930 	for (i = 0; i < tp->irq_max; i++) {
7931 		struct tg3_napi *tnapi = &tp->napi[i];
7932 
7933 		tg3_rx_prodring_fini(tp, &tnapi->prodring);
7934 
7935 		if (!tnapi->rx_rcb)
7936 			continue;
7937 
7938 		dma_free_coherent(&tp->pdev->dev,
7939 				  TG3_RX_RCB_RING_BYTES(tp),
7940 				  tnapi->rx_rcb,
7941 				  tnapi->rx_rcb_mapping);
7942 		tnapi->rx_rcb = NULL;
7943 	}
7944 }
7945 
7946 static int tg3_mem_rx_acquire(struct tg3 *tp)
7947 {
7948 	unsigned int i, limit;
7949 
7950 	limit = tp->rxq_cnt;
7951 
7952 	/* If RSS is enabled, we need a (dummy) producer ring
7953 	 * set on vector zero.  This is the true hw prodring.
7954 	 */
7955 	if (tg3_flag(tp, ENABLE_RSS))
7956 		limit++;
7957 
7958 	for (i = 0; i < limit; i++) {
7959 		struct tg3_napi *tnapi = &tp->napi[i];
7960 
7961 		if (tg3_rx_prodring_init(tp, &tnapi->prodring))
7962 			goto err_out;
7963 
7964 		/* If multivector RSS is enabled, vector 0
7965 		 * does not handle rx or tx interrupts.
7966 		 * Don't allocate any resources for it.
7967 		 */
7968 		if (!i && tg3_flag(tp, ENABLE_RSS))
7969 			continue;
7970 
7971 		tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
7972 						   TG3_RX_RCB_RING_BYTES(tp),
7973 						   &tnapi->rx_rcb_mapping,
7974 						   GFP_KERNEL);
7975 		if (!tnapi->rx_rcb)
7976 			goto err_out;
7977 
7978 		memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7979 	}
7980 
7981 	return 0;
7982 
7983 err_out:
7984 	tg3_mem_rx_release(tp);
7985 	return -ENOMEM;
7986 }
7987 
7988 /*
7989  * Must not be invoked with interrupt sources disabled and
7990  * the hardware shutdown down.
7991  */
7992 static void tg3_free_consistent(struct tg3 *tp)
7993 {
7994 	int i;
7995 
7996 	for (i = 0; i < tp->irq_cnt; i++) {
7997 		struct tg3_napi *tnapi = &tp->napi[i];
7998 
7999 		if (tnapi->hw_status) {
8000 			dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8001 					  tnapi->hw_status,
8002 					  tnapi->status_mapping);
8003 			tnapi->hw_status = NULL;
8004 		}
8005 	}
8006 
8007 	tg3_mem_rx_release(tp);
8008 	tg3_mem_tx_release(tp);
8009 
8010 	if (tp->hw_stats) {
8011 		dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8012 				  tp->hw_stats, tp->stats_mapping);
8013 		tp->hw_stats = NULL;
8014 	}
8015 }
8016 
8017 /*
8018  * Must not be invoked with interrupt sources disabled and
8019  * the hardware shutdown down.  Can sleep.
8020  */
8021 static int tg3_alloc_consistent(struct tg3 *tp)
8022 {
8023 	int i;
8024 
8025 	tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8026 					  sizeof(struct tg3_hw_stats),
8027 					  &tp->stats_mapping,
8028 					  GFP_KERNEL);
8029 	if (!tp->hw_stats)
8030 		goto err_out;
8031 
8032 	memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
8033 
8034 	for (i = 0; i < tp->irq_cnt; i++) {
8035 		struct tg3_napi *tnapi = &tp->napi[i];
8036 		struct tg3_hw_status *sblk;
8037 
8038 		tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8039 						      TG3_HW_STATUS_SIZE,
8040 						      &tnapi->status_mapping,
8041 						      GFP_KERNEL);
8042 		if (!tnapi->hw_status)
8043 			goto err_out;
8044 
8045 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8046 		sblk = tnapi->hw_status;
8047 
8048 		if (tg3_flag(tp, ENABLE_RSS)) {
8049 			u16 *prodptr = NULL;
8050 
8051 			/*
8052 			 * When RSS is enabled, the status block format changes
8053 			 * slightly.  The "rx_jumbo_consumer", "reserved",
8054 			 * and "rx_mini_consumer" members get mapped to the
8055 			 * other three rx return ring producer indexes.
8056 			 */
8057 			switch (i) {
8058 			case 1:
8059 				prodptr = &sblk->idx[0].rx_producer;
8060 				break;
8061 			case 2:
8062 				prodptr = &sblk->rx_jumbo_consumer;
8063 				break;
8064 			case 3:
8065 				prodptr = &sblk->reserved;
8066 				break;
8067 			case 4:
8068 				prodptr = &sblk->rx_mini_consumer;
8069 				break;
8070 			}
8071 			tnapi->rx_rcb_prod_idx = prodptr;
8072 		} else {
8073 			tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8074 		}
8075 	}
8076 
8077 	if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8078 		goto err_out;
8079 
8080 	return 0;
8081 
8082 err_out:
8083 	tg3_free_consistent(tp);
8084 	return -ENOMEM;
8085 }
8086 
8087 #define MAX_WAIT_CNT 1000
8088 
8089 /* To stop a block, clear the enable bit and poll till it
8090  * clears.  tp->lock is held.
8091  */
8092 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
8093 {
8094 	unsigned int i;
8095 	u32 val;
8096 
8097 	if (tg3_flag(tp, 5705_PLUS)) {
8098 		switch (ofs) {
8099 		case RCVLSC_MODE:
8100 		case DMAC_MODE:
8101 		case MBFREE_MODE:
8102 		case BUFMGR_MODE:
8103 		case MEMARB_MODE:
8104 			/* We can't enable/disable these bits of the
8105 			 * 5705/5750, just say success.
8106 			 */
8107 			return 0;
8108 
8109 		default:
8110 			break;
8111 		}
8112 	}
8113 
8114 	val = tr32(ofs);
8115 	val &= ~enable_bit;
8116 	tw32_f(ofs, val);
8117 
8118 	for (i = 0; i < MAX_WAIT_CNT; i++) {
8119 		udelay(100);
8120 		val = tr32(ofs);
8121 		if ((val & enable_bit) == 0)
8122 			break;
8123 	}
8124 
8125 	if (i == MAX_WAIT_CNT && !silent) {
8126 		dev_err(&tp->pdev->dev,
8127 			"tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8128 			ofs, enable_bit);
8129 		return -ENODEV;
8130 	}
8131 
8132 	return 0;
8133 }
8134 
8135 /* tp->lock is held. */
8136 static int tg3_abort_hw(struct tg3 *tp, int silent)
8137 {
8138 	int i, err;
8139 
8140 	tg3_disable_ints(tp);
8141 
8142 	tp->rx_mode &= ~RX_MODE_ENABLE;
8143 	tw32_f(MAC_RX_MODE, tp->rx_mode);
8144 	udelay(10);
8145 
8146 	err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8147 	err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8148 	err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8149 	err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8150 	err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8151 	err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8152 
8153 	err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8154 	err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8155 	err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8156 	err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8157 	err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8158 	err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8159 	err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8160 
8161 	tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8162 	tw32_f(MAC_MODE, tp->mac_mode);
8163 	udelay(40);
8164 
8165 	tp->tx_mode &= ~TX_MODE_ENABLE;
8166 	tw32_f(MAC_TX_MODE, tp->tx_mode);
8167 
8168 	for (i = 0; i < MAX_WAIT_CNT; i++) {
8169 		udelay(100);
8170 		if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8171 			break;
8172 	}
8173 	if (i >= MAX_WAIT_CNT) {
8174 		dev_err(&tp->pdev->dev,
8175 			"%s timed out, TX_MODE_ENABLE will not clear "
8176 			"MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8177 		err |= -ENODEV;
8178 	}
8179 
8180 	err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8181 	err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8182 	err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8183 
8184 	tw32(FTQ_RESET, 0xffffffff);
8185 	tw32(FTQ_RESET, 0x00000000);
8186 
8187 	err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8188 	err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8189 
8190 	for (i = 0; i < tp->irq_cnt; i++) {
8191 		struct tg3_napi *tnapi = &tp->napi[i];
8192 		if (tnapi->hw_status)
8193 			memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8194 	}
8195 
8196 	return err;
8197 }
8198 
8199 /* Save PCI command register before chip reset */
8200 static void tg3_save_pci_state(struct tg3 *tp)
8201 {
8202 	pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8203 }
8204 
8205 /* Restore PCI state after chip reset */
8206 static void tg3_restore_pci_state(struct tg3 *tp)
8207 {
8208 	u32 val;
8209 
8210 	/* Re-enable indirect register accesses. */
8211 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8212 			       tp->misc_host_ctrl);
8213 
8214 	/* Set MAX PCI retry to zero. */
8215 	val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8216 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
8217 	    tg3_flag(tp, PCIX_MODE))
8218 		val |= PCISTATE_RETRY_SAME_DMA;
8219 	/* Allow reads and writes to the APE register and memory space. */
8220 	if (tg3_flag(tp, ENABLE_APE))
8221 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8222 		       PCISTATE_ALLOW_APE_SHMEM_WR |
8223 		       PCISTATE_ALLOW_APE_PSPACE_WR;
8224 	pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8225 
8226 	pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8227 
8228 	if (!tg3_flag(tp, PCI_EXPRESS)) {
8229 		pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8230 				      tp->pci_cacheline_sz);
8231 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8232 				      tp->pci_lat_timer);
8233 	}
8234 
8235 	/* Make sure PCI-X relaxed ordering bit is clear. */
8236 	if (tg3_flag(tp, PCIX_MODE)) {
8237 		u16 pcix_cmd;
8238 
8239 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8240 				     &pcix_cmd);
8241 		pcix_cmd &= ~PCI_X_CMD_ERO;
8242 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8243 				      pcix_cmd);
8244 	}
8245 
8246 	if (tg3_flag(tp, 5780_CLASS)) {
8247 
8248 		/* Chip reset on 5780 will reset MSI enable bit,
8249 		 * so need to restore it.
8250 		 */
8251 		if (tg3_flag(tp, USING_MSI)) {
8252 			u16 ctrl;
8253 
8254 			pci_read_config_word(tp->pdev,
8255 					     tp->msi_cap + PCI_MSI_FLAGS,
8256 					     &ctrl);
8257 			pci_write_config_word(tp->pdev,
8258 					      tp->msi_cap + PCI_MSI_FLAGS,
8259 					      ctrl | PCI_MSI_FLAGS_ENABLE);
8260 			val = tr32(MSGINT_MODE);
8261 			tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
8262 		}
8263 	}
8264 }
8265 
8266 /* tp->lock is held. */
8267 static int tg3_chip_reset(struct tg3 *tp)
8268 {
8269 	u32 val;
8270 	void (*write_op)(struct tg3 *, u32, u32);
8271 	int i, err;
8272 
8273 	tg3_nvram_lock(tp);
8274 
8275 	tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
8276 
8277 	/* No matching tg3_nvram_unlock() after this because
8278 	 * chip reset below will undo the nvram lock.
8279 	 */
8280 	tp->nvram_lock_cnt = 0;
8281 
8282 	/* GRC_MISC_CFG core clock reset will clear the memory
8283 	 * enable bit in PCI register 4 and the MSI enable bit
8284 	 * on some chips, so we save relevant registers here.
8285 	 */
8286 	tg3_save_pci_state(tp);
8287 
8288 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
8289 	    tg3_flag(tp, 5755_PLUS))
8290 		tw32(GRC_FASTBOOT_PC, 0);
8291 
8292 	/*
8293 	 * We must avoid the readl() that normally takes place.
8294 	 * It locks machines, causes machine checks, and other
8295 	 * fun things.  So, temporarily disable the 5701
8296 	 * hardware workaround, while we do the reset.
8297 	 */
8298 	write_op = tp->write32;
8299 	if (write_op == tg3_write_flush_reg32)
8300 		tp->write32 = tg3_write32;
8301 
8302 	/* Prevent the irq handler from reading or writing PCI registers
8303 	 * during chip reset when the memory enable bit in the PCI command
8304 	 * register may be cleared.  The chip does not generate interrupt
8305 	 * at this time, but the irq handler may still be called due to irq
8306 	 * sharing or irqpoll.
8307 	 */
8308 	tg3_flag_set(tp, CHIP_RESETTING);
8309 	for (i = 0; i < tp->irq_cnt; i++) {
8310 		struct tg3_napi *tnapi = &tp->napi[i];
8311 		if (tnapi->hw_status) {
8312 			tnapi->hw_status->status = 0;
8313 			tnapi->hw_status->status_tag = 0;
8314 		}
8315 		tnapi->last_tag = 0;
8316 		tnapi->last_irq_tag = 0;
8317 	}
8318 	smp_mb();
8319 
8320 	for (i = 0; i < tp->irq_cnt; i++)
8321 		synchronize_irq(tp->napi[i].irq_vec);
8322 
8323 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
8324 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8325 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
8326 	}
8327 
8328 	/* do the reset */
8329 	val = GRC_MISC_CFG_CORECLK_RESET;
8330 
8331 	if (tg3_flag(tp, PCI_EXPRESS)) {
8332 		/* Force PCIe 1.0a mode */
8333 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8334 		    !tg3_flag(tp, 57765_PLUS) &&
8335 		    tr32(TG3_PCIE_PHY_TSTCTL) ==
8336 		    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
8337 			tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
8338 
8339 		if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
8340 			tw32(GRC_MISC_CFG, (1 << 29));
8341 			val |= (1 << 29);
8342 		}
8343 	}
8344 
8345 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
8346 		tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
8347 		tw32(GRC_VCPU_EXT_CTRL,
8348 		     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
8349 	}
8350 
8351 	/* Manage gphy power for all CPMU absent PCIe devices. */
8352 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
8353 		val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
8354 
8355 	tw32(GRC_MISC_CFG, val);
8356 
8357 	/* restore 5701 hardware bug workaround write method */
8358 	tp->write32 = write_op;
8359 
8360 	/* Unfortunately, we have to delay before the PCI read back.
8361 	 * Some 575X chips even will not respond to a PCI cfg access
8362 	 * when the reset command is given to the chip.
8363 	 *
8364 	 * How do these hardware designers expect things to work
8365 	 * properly if the PCI write is posted for a long period
8366 	 * of time?  It is always necessary to have some method by
8367 	 * which a register read back can occur to push the write
8368 	 * out which does the reset.
8369 	 *
8370 	 * For most tg3 variants the trick below was working.
8371 	 * Ho hum...
8372 	 */
8373 	udelay(120);
8374 
8375 	/* Flush PCI posted writes.  The normal MMIO registers
8376 	 * are inaccessible at this time so this is the only
8377 	 * way to make this reliably (actually, this is no longer
8378 	 * the case, see above).  I tried to use indirect
8379 	 * register read/write but this upset some 5701 variants.
8380 	 */
8381 	pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
8382 
8383 	udelay(120);
8384 
8385 	if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
8386 		u16 val16;
8387 
8388 		if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
8389 			int j;
8390 			u32 cfg_val;
8391 
8392 			/* Wait for link training to complete.  */
8393 			for (j = 0; j < 5000; j++)
8394 				udelay(100);
8395 
8396 			pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
8397 			pci_write_config_dword(tp->pdev, 0xc4,
8398 					       cfg_val | (1 << 15));
8399 		}
8400 
8401 		/* Clear the "no snoop" and "relaxed ordering" bits. */
8402 		val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
8403 		/*
8404 		 * Older PCIe devices only support the 128 byte
8405 		 * MPS setting.  Enforce the restriction.
8406 		 */
8407 		if (!tg3_flag(tp, CPMU_PRESENT))
8408 			val16 |= PCI_EXP_DEVCTL_PAYLOAD;
8409 		pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
8410 
8411 		/* Clear error status */
8412 		pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
8413 				      PCI_EXP_DEVSTA_CED |
8414 				      PCI_EXP_DEVSTA_NFED |
8415 				      PCI_EXP_DEVSTA_FED |
8416 				      PCI_EXP_DEVSTA_URD);
8417 	}
8418 
8419 	tg3_restore_pci_state(tp);
8420 
8421 	tg3_flag_clear(tp, CHIP_RESETTING);
8422 	tg3_flag_clear(tp, ERROR_PROCESSED);
8423 
8424 	val = 0;
8425 	if (tg3_flag(tp, 5780_CLASS))
8426 		val = tr32(MEMARB_MODE);
8427 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
8428 
8429 	if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
8430 		tg3_stop_fw(tp);
8431 		tw32(0x5000, 0x400);
8432 	}
8433 
8434 	tw32(GRC_MODE, tp->grc_mode);
8435 
8436 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
8437 		val = tr32(0xc4);
8438 
8439 		tw32(0xc4, val | (1 << 15));
8440 	}
8441 
8442 	if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
8443 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
8444 		tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
8445 		if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
8446 			tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
8447 		tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
8448 	}
8449 
8450 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
8451 		tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
8452 		val = tp->mac_mode;
8453 	} else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
8454 		tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
8455 		val = tp->mac_mode;
8456 	} else
8457 		val = 0;
8458 
8459 	tw32_f(MAC_MODE, val);
8460 	udelay(40);
8461 
8462 	tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
8463 
8464 	err = tg3_poll_fw(tp);
8465 	if (err)
8466 		return err;
8467 
8468 	tg3_mdio_start(tp);
8469 
8470 	if (tg3_flag(tp, PCI_EXPRESS) &&
8471 	    tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
8472 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
8473 	    !tg3_flag(tp, 57765_PLUS)) {
8474 		val = tr32(0x7c00);
8475 
8476 		tw32(0x7c00, val | (1 << 25));
8477 	}
8478 
8479 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
8480 		val = tr32(TG3_CPMU_CLCK_ORIDE);
8481 		tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
8482 	}
8483 
8484 	/* Reprobe ASF enable state.  */
8485 	tg3_flag_clear(tp, ENABLE_ASF);
8486 	tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
8487 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
8488 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
8489 		u32 nic_cfg;
8490 
8491 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
8492 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
8493 			tg3_flag_set(tp, ENABLE_ASF);
8494 			tp->last_event_jiffies = jiffies;
8495 			if (tg3_flag(tp, 5750_PLUS))
8496 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
8497 		}
8498 	}
8499 
8500 	return 0;
8501 }
8502 
8503 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
8504 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
8505 
8506 /* tp->lock is held. */
8507 static int tg3_halt(struct tg3 *tp, int kind, int silent)
8508 {
8509 	int err;
8510 
8511 	tg3_stop_fw(tp);
8512 
8513 	tg3_write_sig_pre_reset(tp, kind);
8514 
8515 	tg3_abort_hw(tp, silent);
8516 	err = tg3_chip_reset(tp);
8517 
8518 	__tg3_set_mac_addr(tp, 0);
8519 
8520 	tg3_write_sig_legacy(tp, kind);
8521 	tg3_write_sig_post_reset(tp, kind);
8522 
8523 	if (tp->hw_stats) {
8524 		/* Save the stats across chip resets... */
8525 		tg3_get_nstats(tp, &tp->net_stats_prev);
8526 		tg3_get_estats(tp, &tp->estats_prev);
8527 
8528 		/* And make sure the next sample is new data */
8529 		memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
8530 	}
8531 
8532 	if (err)
8533 		return err;
8534 
8535 	return 0;
8536 }
8537 
8538 static int tg3_set_mac_addr(struct net_device *dev, void *p)
8539 {
8540 	struct tg3 *tp = netdev_priv(dev);
8541 	struct sockaddr *addr = p;
8542 	int err = 0, skip_mac_1 = 0;
8543 
8544 	if (!is_valid_ether_addr(addr->sa_data))
8545 		return -EADDRNOTAVAIL;
8546 
8547 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
8548 
8549 	if (!netif_running(dev))
8550 		return 0;
8551 
8552 	if (tg3_flag(tp, ENABLE_ASF)) {
8553 		u32 addr0_high, addr0_low, addr1_high, addr1_low;
8554 
8555 		addr0_high = tr32(MAC_ADDR_0_HIGH);
8556 		addr0_low = tr32(MAC_ADDR_0_LOW);
8557 		addr1_high = tr32(MAC_ADDR_1_HIGH);
8558 		addr1_low = tr32(MAC_ADDR_1_LOW);
8559 
8560 		/* Skip MAC addr 1 if ASF is using it. */
8561 		if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
8562 		    !(addr1_high == 0 && addr1_low == 0))
8563 			skip_mac_1 = 1;
8564 	}
8565 	spin_lock_bh(&tp->lock);
8566 	__tg3_set_mac_addr(tp, skip_mac_1);
8567 	spin_unlock_bh(&tp->lock);
8568 
8569 	return err;
8570 }
8571 
8572 /* tp->lock is held. */
8573 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
8574 			   dma_addr_t mapping, u32 maxlen_flags,
8575 			   u32 nic_addr)
8576 {
8577 	tg3_write_mem(tp,
8578 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
8579 		      ((u64) mapping >> 32));
8580 	tg3_write_mem(tp,
8581 		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
8582 		      ((u64) mapping & 0xffffffff));
8583 	tg3_write_mem(tp,
8584 		      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
8585 		       maxlen_flags);
8586 
8587 	if (!tg3_flag(tp, 5705_PLUS))
8588 		tg3_write_mem(tp,
8589 			      (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
8590 			      nic_addr);
8591 }
8592 
8593 
8594 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
8595 {
8596 	int i = 0;
8597 
8598 	if (!tg3_flag(tp, ENABLE_TSS)) {
8599 		tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
8600 		tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
8601 		tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
8602 	} else {
8603 		tw32(HOSTCC_TXCOL_TICKS, 0);
8604 		tw32(HOSTCC_TXMAX_FRAMES, 0);
8605 		tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
8606 
8607 		for (; i < tp->txq_cnt; i++) {
8608 			u32 reg;
8609 
8610 			reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
8611 			tw32(reg, ec->tx_coalesce_usecs);
8612 			reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
8613 			tw32(reg, ec->tx_max_coalesced_frames);
8614 			reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
8615 			tw32(reg, ec->tx_max_coalesced_frames_irq);
8616 		}
8617 	}
8618 
8619 	for (; i < tp->irq_max - 1; i++) {
8620 		tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
8621 		tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
8622 		tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8623 	}
8624 }
8625 
8626 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
8627 {
8628 	int i = 0;
8629 	u32 limit = tp->rxq_cnt;
8630 
8631 	if (!tg3_flag(tp, ENABLE_RSS)) {
8632 		tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
8633 		tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
8634 		tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
8635 		limit--;
8636 	} else {
8637 		tw32(HOSTCC_RXCOL_TICKS, 0);
8638 		tw32(HOSTCC_RXMAX_FRAMES, 0);
8639 		tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
8640 	}
8641 
8642 	for (; i < limit; i++) {
8643 		u32 reg;
8644 
8645 		reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
8646 		tw32(reg, ec->rx_coalesce_usecs);
8647 		reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
8648 		tw32(reg, ec->rx_max_coalesced_frames);
8649 		reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
8650 		tw32(reg, ec->rx_max_coalesced_frames_irq);
8651 	}
8652 
8653 	for (; i < tp->irq_max - 1; i++) {
8654 		tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
8655 		tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
8656 		tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8657 	}
8658 }
8659 
8660 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
8661 {
8662 	tg3_coal_tx_init(tp, ec);
8663 	tg3_coal_rx_init(tp, ec);
8664 
8665 	if (!tg3_flag(tp, 5705_PLUS)) {
8666 		u32 val = ec->stats_block_coalesce_usecs;
8667 
8668 		tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
8669 		tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
8670 
8671 		if (!tp->link_up)
8672 			val = 0;
8673 
8674 		tw32(HOSTCC_STAT_COAL_TICKS, val);
8675 	}
8676 }
8677 
8678 /* tp->lock is held. */
8679 static void tg3_rings_reset(struct tg3 *tp)
8680 {
8681 	int i;
8682 	u32 stblk, txrcb, rxrcb, limit;
8683 	struct tg3_napi *tnapi = &tp->napi[0];
8684 
8685 	/* Disable all transmit rings but the first. */
8686 	if (!tg3_flag(tp, 5705_PLUS))
8687 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
8688 	else if (tg3_flag(tp, 5717_PLUS))
8689 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
8690 	else if (tg3_flag(tp, 57765_CLASS))
8691 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
8692 	else
8693 		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8694 
8695 	for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8696 	     txrcb < limit; txrcb += TG3_BDINFO_SIZE)
8697 		tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
8698 			      BDINFO_FLAGS_DISABLED);
8699 
8700 
8701 	/* Disable all receive return rings but the first. */
8702 	if (tg3_flag(tp, 5717_PLUS))
8703 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
8704 	else if (!tg3_flag(tp, 5705_PLUS))
8705 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
8706 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8707 		 tg3_flag(tp, 57765_CLASS))
8708 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
8709 	else
8710 		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8711 
8712 	for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8713 	     rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
8714 		tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
8715 			      BDINFO_FLAGS_DISABLED);
8716 
8717 	/* Disable interrupts */
8718 	tw32_mailbox_f(tp->napi[0].int_mbox, 1);
8719 	tp->napi[0].chk_msi_cnt = 0;
8720 	tp->napi[0].last_rx_cons = 0;
8721 	tp->napi[0].last_tx_cons = 0;
8722 
8723 	/* Zero mailbox registers. */
8724 	if (tg3_flag(tp, SUPPORT_MSIX)) {
8725 		for (i = 1; i < tp->irq_max; i++) {
8726 			tp->napi[i].tx_prod = 0;
8727 			tp->napi[i].tx_cons = 0;
8728 			if (tg3_flag(tp, ENABLE_TSS))
8729 				tw32_mailbox(tp->napi[i].prodmbox, 0);
8730 			tw32_rx_mbox(tp->napi[i].consmbox, 0);
8731 			tw32_mailbox_f(tp->napi[i].int_mbox, 1);
8732 			tp->napi[i].chk_msi_cnt = 0;
8733 			tp->napi[i].last_rx_cons = 0;
8734 			tp->napi[i].last_tx_cons = 0;
8735 		}
8736 		if (!tg3_flag(tp, ENABLE_TSS))
8737 			tw32_mailbox(tp->napi[0].prodmbox, 0);
8738 	} else {
8739 		tp->napi[0].tx_prod = 0;
8740 		tp->napi[0].tx_cons = 0;
8741 		tw32_mailbox(tp->napi[0].prodmbox, 0);
8742 		tw32_rx_mbox(tp->napi[0].consmbox, 0);
8743 	}
8744 
8745 	/* Make sure the NIC-based send BD rings are disabled. */
8746 	if (!tg3_flag(tp, 5705_PLUS)) {
8747 		u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
8748 		for (i = 0; i < 16; i++)
8749 			tw32_tx_mbox(mbox + i * 8, 0);
8750 	}
8751 
8752 	txrcb = NIC_SRAM_SEND_RCB;
8753 	rxrcb = NIC_SRAM_RCV_RET_RCB;
8754 
8755 	/* Clear status block in ram. */
8756 	memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8757 
8758 	/* Set status block DMA address */
8759 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
8760 	     ((u64) tnapi->status_mapping >> 32));
8761 	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8762 	     ((u64) tnapi->status_mapping & 0xffffffff));
8763 
8764 	if (tnapi->tx_ring) {
8765 		tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8766 			       (TG3_TX_RING_SIZE <<
8767 				BDINFO_FLAGS_MAXLEN_SHIFT),
8768 			       NIC_SRAM_TX_BUFFER_DESC);
8769 		txrcb += TG3_BDINFO_SIZE;
8770 	}
8771 
8772 	if (tnapi->rx_rcb) {
8773 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8774 			       (tp->rx_ret_ring_mask + 1) <<
8775 				BDINFO_FLAGS_MAXLEN_SHIFT, 0);
8776 		rxrcb += TG3_BDINFO_SIZE;
8777 	}
8778 
8779 	stblk = HOSTCC_STATBLCK_RING1;
8780 
8781 	for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
8782 		u64 mapping = (u64)tnapi->status_mapping;
8783 		tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
8784 		tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
8785 
8786 		/* Clear status block in ram. */
8787 		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8788 
8789 		if (tnapi->tx_ring) {
8790 			tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8791 				       (TG3_TX_RING_SIZE <<
8792 					BDINFO_FLAGS_MAXLEN_SHIFT),
8793 				       NIC_SRAM_TX_BUFFER_DESC);
8794 			txrcb += TG3_BDINFO_SIZE;
8795 		}
8796 
8797 		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8798 			       ((tp->rx_ret_ring_mask + 1) <<
8799 				BDINFO_FLAGS_MAXLEN_SHIFT), 0);
8800 
8801 		stblk += 8;
8802 		rxrcb += TG3_BDINFO_SIZE;
8803 	}
8804 }
8805 
8806 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
8807 {
8808 	u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
8809 
8810 	if (!tg3_flag(tp, 5750_PLUS) ||
8811 	    tg3_flag(tp, 5780_CLASS) ||
8812 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
8813 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
8814 	    tg3_flag(tp, 57765_PLUS))
8815 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
8816 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8817 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8818 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
8819 	else
8820 		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
8821 
8822 	nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
8823 	host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
8824 
8825 	val = min(nic_rep_thresh, host_rep_thresh);
8826 	tw32(RCVBDI_STD_THRESH, val);
8827 
8828 	if (tg3_flag(tp, 57765_PLUS))
8829 		tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
8830 
8831 	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8832 		return;
8833 
8834 	bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
8835 
8836 	host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
8837 
8838 	val = min(bdcache_maxcnt / 2, host_rep_thresh);
8839 	tw32(RCVBDI_JUMBO_THRESH, val);
8840 
8841 	if (tg3_flag(tp, 57765_PLUS))
8842 		tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
8843 }
8844 
8845 static inline u32 calc_crc(unsigned char *buf, int len)
8846 {
8847 	u32 reg;
8848 	u32 tmp;
8849 	int j, k;
8850 
8851 	reg = 0xffffffff;
8852 
8853 	for (j = 0; j < len; j++) {
8854 		reg ^= buf[j];
8855 
8856 		for (k = 0; k < 8; k++) {
8857 			tmp = reg & 0x01;
8858 
8859 			reg >>= 1;
8860 
8861 			if (tmp)
8862 				reg ^= 0xedb88320;
8863 		}
8864 	}
8865 
8866 	return ~reg;
8867 }
8868 
8869 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8870 {
8871 	/* accept or reject all multicast frames */
8872 	tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8873 	tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8874 	tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8875 	tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8876 }
8877 
8878 static void __tg3_set_rx_mode(struct net_device *dev)
8879 {
8880 	struct tg3 *tp = netdev_priv(dev);
8881 	u32 rx_mode;
8882 
8883 	rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8884 				  RX_MODE_KEEP_VLAN_TAG);
8885 
8886 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
8887 	/* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8888 	 * flag clear.
8889 	 */
8890 	if (!tg3_flag(tp, ENABLE_ASF))
8891 		rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8892 #endif
8893 
8894 	if (dev->flags & IFF_PROMISC) {
8895 		/* Promiscuous mode. */
8896 		rx_mode |= RX_MODE_PROMISC;
8897 	} else if (dev->flags & IFF_ALLMULTI) {
8898 		/* Accept all multicast. */
8899 		tg3_set_multi(tp, 1);
8900 	} else if (netdev_mc_empty(dev)) {
8901 		/* Reject all multicast. */
8902 		tg3_set_multi(tp, 0);
8903 	} else {
8904 		/* Accept one or more multicast(s). */
8905 		struct netdev_hw_addr *ha;
8906 		u32 mc_filter[4] = { 0, };
8907 		u32 regidx;
8908 		u32 bit;
8909 		u32 crc;
8910 
8911 		netdev_for_each_mc_addr(ha, dev) {
8912 			crc = calc_crc(ha->addr, ETH_ALEN);
8913 			bit = ~crc & 0x7f;
8914 			regidx = (bit & 0x60) >> 5;
8915 			bit &= 0x1f;
8916 			mc_filter[regidx] |= (1 << bit);
8917 		}
8918 
8919 		tw32(MAC_HASH_REG_0, mc_filter[0]);
8920 		tw32(MAC_HASH_REG_1, mc_filter[1]);
8921 		tw32(MAC_HASH_REG_2, mc_filter[2]);
8922 		tw32(MAC_HASH_REG_3, mc_filter[3]);
8923 	}
8924 
8925 	if (rx_mode != tp->rx_mode) {
8926 		tp->rx_mode = rx_mode;
8927 		tw32_f(MAC_RX_MODE, rx_mode);
8928 		udelay(10);
8929 	}
8930 }
8931 
8932 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
8933 {
8934 	int i;
8935 
8936 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
8937 		tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
8938 }
8939 
8940 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
8941 {
8942 	int i;
8943 
8944 	if (!tg3_flag(tp, SUPPORT_MSIX))
8945 		return;
8946 
8947 	if (tp->rxq_cnt == 1) {
8948 		memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
8949 		return;
8950 	}
8951 
8952 	/* Validate table against current IRQ count */
8953 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
8954 		if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
8955 			break;
8956 	}
8957 
8958 	if (i != TG3_RSS_INDIR_TBL_SIZE)
8959 		tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
8960 }
8961 
8962 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
8963 {
8964 	int i = 0;
8965 	u32 reg = MAC_RSS_INDIR_TBL_0;
8966 
8967 	while (i < TG3_RSS_INDIR_TBL_SIZE) {
8968 		u32 val = tp->rss_ind_tbl[i];
8969 		i++;
8970 		for (; i % 8; i++) {
8971 			val <<= 4;
8972 			val |= tp->rss_ind_tbl[i];
8973 		}
8974 		tw32(reg, val);
8975 		reg += 4;
8976 	}
8977 }
8978 
8979 /* tp->lock is held. */
8980 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
8981 {
8982 	u32 val, rdmac_mode;
8983 	int i, err, limit;
8984 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
8985 
8986 	tg3_disable_ints(tp);
8987 
8988 	tg3_stop_fw(tp);
8989 
8990 	tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
8991 
8992 	if (tg3_flag(tp, INIT_COMPLETE))
8993 		tg3_abort_hw(tp, 1);
8994 
8995 	/* Enable MAC control of LPI */
8996 	if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) {
8997 		tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL,
8998 		       TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
8999 		       TG3_CPMU_EEE_LNKIDL_UART_IDL);
9000 
9001 		tw32_f(TG3_CPMU_EEE_CTRL,
9002 		       TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
9003 
9004 		val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
9005 		      TG3_CPMU_EEEMD_LPI_IN_TX |
9006 		      TG3_CPMU_EEEMD_LPI_IN_RX |
9007 		      TG3_CPMU_EEEMD_EEE_ENABLE;
9008 
9009 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
9010 			val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
9011 
9012 		if (tg3_flag(tp, ENABLE_APE))
9013 			val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
9014 
9015 		tw32_f(TG3_CPMU_EEE_MODE, val);
9016 
9017 		tw32_f(TG3_CPMU_EEE_DBTMR1,
9018 		       TG3_CPMU_DBTMR1_PCIEXIT_2047US |
9019 		       TG3_CPMU_DBTMR1_LNKIDLE_2047US);
9020 
9021 		tw32_f(TG3_CPMU_EEE_DBTMR2,
9022 		       TG3_CPMU_DBTMR2_APE_TX_2047US |
9023 		       TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
9024 	}
9025 
9026 	if (reset_phy)
9027 		tg3_phy_reset(tp);
9028 
9029 	err = tg3_chip_reset(tp);
9030 	if (err)
9031 		return err;
9032 
9033 	tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9034 
9035 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) {
9036 		val = tr32(TG3_CPMU_CTRL);
9037 		val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9038 		tw32(TG3_CPMU_CTRL, val);
9039 
9040 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9041 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9042 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
9043 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9044 
9045 		val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9046 		val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9047 		val |= CPMU_LNK_AWARE_MACCLK_6_25;
9048 		tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9049 
9050 		val = tr32(TG3_CPMU_HST_ACC);
9051 		val &= ~CPMU_HST_ACC_MACCLK_MASK;
9052 		val |= CPMU_HST_ACC_MACCLK_6_25;
9053 		tw32(TG3_CPMU_HST_ACC, val);
9054 	}
9055 
9056 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
9057 		val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9058 		val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9059 		       PCIE_PWR_MGMT_L1_THRESH_4MS;
9060 		tw32(PCIE_PWR_MGMT_THRESH, val);
9061 
9062 		val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9063 		tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9064 
9065 		tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9066 
9067 		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9068 		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9069 	}
9070 
9071 	if (tg3_flag(tp, L1PLLPD_EN)) {
9072 		u32 grc_mode = tr32(GRC_MODE);
9073 
9074 		/* Access the lower 1K of PL PCIE block registers. */
9075 		val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9076 		tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9077 
9078 		val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9079 		tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9080 		     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9081 
9082 		tw32(GRC_MODE, grc_mode);
9083 	}
9084 
9085 	if (tg3_flag(tp, 57765_CLASS)) {
9086 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
9087 			u32 grc_mode = tr32(GRC_MODE);
9088 
9089 			/* Access the lower 1K of PL PCIE block registers. */
9090 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9091 			tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9092 
9093 			val = tr32(TG3_PCIE_TLDLPL_PORT +
9094 				   TG3_PCIE_PL_LO_PHYCTL5);
9095 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9096 			     val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9097 
9098 			tw32(GRC_MODE, grc_mode);
9099 		}
9100 
9101 		if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) {
9102 			u32 grc_mode = tr32(GRC_MODE);
9103 
9104 			/* Access the lower 1K of DL PCIE block registers. */
9105 			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9106 			tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9107 
9108 			val = tr32(TG3_PCIE_TLDLPL_PORT +
9109 				   TG3_PCIE_DL_LO_FTSMAX);
9110 			val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9111 			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9112 			     val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9113 
9114 			tw32(GRC_MODE, grc_mode);
9115 		}
9116 
9117 		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9118 		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9119 		val |= CPMU_LSPD_10MB_MACCLK_6_25;
9120 		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9121 	}
9122 
9123 	/* This works around an issue with Athlon chipsets on
9124 	 * B3 tigon3 silicon.  This bit has no effect on any
9125 	 * other revision.  But do not set this on PCI Express
9126 	 * chips and don't even touch the clocks if the CPMU is present.
9127 	 */
9128 	if (!tg3_flag(tp, CPMU_PRESENT)) {
9129 		if (!tg3_flag(tp, PCI_EXPRESS))
9130 			tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9131 		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9132 	}
9133 
9134 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
9135 	    tg3_flag(tp, PCIX_MODE)) {
9136 		val = tr32(TG3PCI_PCISTATE);
9137 		val |= PCISTATE_RETRY_SAME_DMA;
9138 		tw32(TG3PCI_PCISTATE, val);
9139 	}
9140 
9141 	if (tg3_flag(tp, ENABLE_APE)) {
9142 		/* Allow reads and writes to the
9143 		 * APE register and memory space.
9144 		 */
9145 		val = tr32(TG3PCI_PCISTATE);
9146 		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
9147 		       PCISTATE_ALLOW_APE_SHMEM_WR |
9148 		       PCISTATE_ALLOW_APE_PSPACE_WR;
9149 		tw32(TG3PCI_PCISTATE, val);
9150 	}
9151 
9152 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
9153 		/* Enable some hw fixes.  */
9154 		val = tr32(TG3PCI_MSI_DATA);
9155 		val |= (1 << 26) | (1 << 28) | (1 << 29);
9156 		tw32(TG3PCI_MSI_DATA, val);
9157 	}
9158 
9159 	/* Descriptor ring init may make accesses to the
9160 	 * NIC SRAM area to setup the TX descriptors, so we
9161 	 * can only do this after the hardware has been
9162 	 * successfully reset.
9163 	 */
9164 	err = tg3_init_rings(tp);
9165 	if (err)
9166 		return err;
9167 
9168 	if (tg3_flag(tp, 57765_PLUS)) {
9169 		val = tr32(TG3PCI_DMA_RW_CTRL) &
9170 		      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
9171 		if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0)
9172 			val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
9173 		if (!tg3_flag(tp, 57765_CLASS) &&
9174 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
9175 			val |= DMA_RWCTRL_TAGGED_STAT_WA;
9176 		tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
9177 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
9178 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
9179 		/* This value is determined during the probe time DMA
9180 		 * engine test, tg3_test_dma.
9181 		 */
9182 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
9183 	}
9184 
9185 	tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
9186 			  GRC_MODE_4X_NIC_SEND_RINGS |
9187 			  GRC_MODE_NO_TX_PHDR_CSUM |
9188 			  GRC_MODE_NO_RX_PHDR_CSUM);
9189 	tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
9190 
9191 	/* Pseudo-header checksum is done by hardware logic and not
9192 	 * the offload processers, so make the chip do the pseudo-
9193 	 * header checksums on receive.  For transmit it is more
9194 	 * convenient to do the pseudo-header checksum in software
9195 	 * as Linux does that on transmit for us in all cases.
9196 	 */
9197 	tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
9198 
9199 	val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
9200 	if (tp->rxptpctl)
9201 		tw32(TG3_RX_PTP_CTL,
9202 		     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
9203 
9204 	if (tg3_flag(tp, PTP_CAPABLE))
9205 		val |= GRC_MODE_TIME_SYNC_ENABLE;
9206 
9207 	tw32(GRC_MODE, tp->grc_mode | val);
9208 
9209 	/* Setup the timer prescalar register.  Clock is always 66Mhz. */
9210 	val = tr32(GRC_MISC_CFG);
9211 	val &= ~0xff;
9212 	val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
9213 	tw32(GRC_MISC_CFG, val);
9214 
9215 	/* Initialize MBUF/DESC pool. */
9216 	if (tg3_flag(tp, 5750_PLUS)) {
9217 		/* Do nothing.  */
9218 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
9219 		tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
9220 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
9221 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
9222 		else
9223 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
9224 		tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
9225 		tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
9226 	} else if (tg3_flag(tp, TSO_CAPABLE)) {
9227 		int fw_len;
9228 
9229 		fw_len = tp->fw_len;
9230 		fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
9231 		tw32(BUFMGR_MB_POOL_ADDR,
9232 		     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
9233 		tw32(BUFMGR_MB_POOL_SIZE,
9234 		     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
9235 	}
9236 
9237 	if (tp->dev->mtu <= ETH_DATA_LEN) {
9238 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
9239 		     tp->bufmgr_config.mbuf_read_dma_low_water);
9240 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
9241 		     tp->bufmgr_config.mbuf_mac_rx_low_water);
9242 		tw32(BUFMGR_MB_HIGH_WATER,
9243 		     tp->bufmgr_config.mbuf_high_water);
9244 	} else {
9245 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
9246 		     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
9247 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
9248 		     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
9249 		tw32(BUFMGR_MB_HIGH_WATER,
9250 		     tp->bufmgr_config.mbuf_high_water_jumbo);
9251 	}
9252 	tw32(BUFMGR_DMA_LOW_WATER,
9253 	     tp->bufmgr_config.dma_low_water);
9254 	tw32(BUFMGR_DMA_HIGH_WATER,
9255 	     tp->bufmgr_config.dma_high_water);
9256 
9257 	val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
9258 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
9259 		val |= BUFMGR_MODE_NO_TX_UNDERRUN;
9260 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
9261 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
9262 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0)
9263 		val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
9264 	tw32(BUFMGR_MODE, val);
9265 	for (i = 0; i < 2000; i++) {
9266 		if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
9267 			break;
9268 		udelay(10);
9269 	}
9270 	if (i >= 2000) {
9271 		netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
9272 		return -ENODEV;
9273 	}
9274 
9275 	if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
9276 		tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
9277 
9278 	tg3_setup_rxbd_thresholds(tp);
9279 
9280 	/* Initialize TG3_BDINFO's at:
9281 	 *  RCVDBDI_STD_BD:	standard eth size rx ring
9282 	 *  RCVDBDI_JUMBO_BD:	jumbo frame rx ring
9283 	 *  RCVDBDI_MINI_BD:	small frame rx ring (??? does not work)
9284 	 *
9285 	 * like so:
9286 	 *  TG3_BDINFO_HOST_ADDR:	high/low parts of DMA address of ring
9287 	 *  TG3_BDINFO_MAXLEN_FLAGS:	(rx max buffer size << 16) |
9288 	 *                              ring attribute flags
9289 	 *  TG3_BDINFO_NIC_ADDR:	location of descriptors in nic SRAM
9290 	 *
9291 	 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
9292 	 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
9293 	 *
9294 	 * The size of each ring is fixed in the firmware, but the location is
9295 	 * configurable.
9296 	 */
9297 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
9298 	     ((u64) tpr->rx_std_mapping >> 32));
9299 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
9300 	     ((u64) tpr->rx_std_mapping & 0xffffffff));
9301 	if (!tg3_flag(tp, 5717_PLUS))
9302 		tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
9303 		     NIC_SRAM_RX_BUFFER_DESC);
9304 
9305 	/* Disable the mini ring */
9306 	if (!tg3_flag(tp, 5705_PLUS))
9307 		tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
9308 		     BDINFO_FLAGS_DISABLED);
9309 
9310 	/* Program the jumbo buffer descriptor ring control
9311 	 * blocks on those devices that have them.
9312 	 */
9313 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
9314 	    (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
9315 
9316 		if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
9317 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
9318 			     ((u64) tpr->rx_jmb_mapping >> 32));
9319 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
9320 			     ((u64) tpr->rx_jmb_mapping & 0xffffffff));
9321 			val = TG3_RX_JMB_RING_SIZE(tp) <<
9322 			      BDINFO_FLAGS_MAXLEN_SHIFT;
9323 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
9324 			     val | BDINFO_FLAGS_USE_EXT_RECV);
9325 			if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
9326 			    tg3_flag(tp, 57765_CLASS))
9327 				tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
9328 				     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
9329 		} else {
9330 			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
9331 			     BDINFO_FLAGS_DISABLED);
9332 		}
9333 
9334 		if (tg3_flag(tp, 57765_PLUS)) {
9335 			val = TG3_RX_STD_RING_SIZE(tp);
9336 			val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
9337 			val |= (TG3_RX_STD_DMA_SZ << 2);
9338 		} else
9339 			val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
9340 	} else
9341 		val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
9342 
9343 	tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
9344 
9345 	tpr->rx_std_prod_idx = tp->rx_pending;
9346 	tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
9347 
9348 	tpr->rx_jmb_prod_idx =
9349 		tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
9350 	tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
9351 
9352 	tg3_rings_reset(tp);
9353 
9354 	/* Initialize MAC address and backoff seed. */
9355 	__tg3_set_mac_addr(tp, 0);
9356 
9357 	/* MTU + ethernet header + FCS + optional VLAN tag */
9358 	tw32(MAC_RX_MTU_SIZE,
9359 	     tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
9360 
9361 	/* The slot time is changed by tg3_setup_phy if we
9362 	 * run at gigabit with half duplex.
9363 	 */
9364 	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
9365 	      (6 << TX_LENGTHS_IPG_SHIFT) |
9366 	      (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
9367 
9368 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
9369 		val |= tr32(MAC_TX_LENGTHS) &
9370 		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
9371 			TX_LENGTHS_CNT_DWN_VAL_MSK);
9372 
9373 	tw32(MAC_TX_LENGTHS, val);
9374 
9375 	/* Receive rules. */
9376 	tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
9377 	tw32(RCVLPC_CONFIG, 0x0181);
9378 
9379 	/* Calculate RDMAC_MODE setting early, we need it to determine
9380 	 * the RCVLPC_STATE_ENABLE mask.
9381 	 */
9382 	rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
9383 		      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
9384 		      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
9385 		      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
9386 		      RDMAC_MODE_LNGREAD_ENAB);
9387 
9388 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717)
9389 		rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
9390 
9391 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9392 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9393 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
9394 		rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
9395 			      RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
9396 			      RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
9397 
9398 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9399 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9400 		if (tg3_flag(tp, TSO_CAPABLE) &&
9401 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
9402 			rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
9403 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9404 			   !tg3_flag(tp, IS_5788)) {
9405 			rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9406 		}
9407 	}
9408 
9409 	if (tg3_flag(tp, PCI_EXPRESS))
9410 		rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9411 
9412 	if (tg3_flag(tp, HW_TSO_1) ||
9413 	    tg3_flag(tp, HW_TSO_2) ||
9414 	    tg3_flag(tp, HW_TSO_3))
9415 		rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
9416 
9417 	if (tg3_flag(tp, 57765_PLUS) ||
9418 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9419 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
9420 		rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
9421 
9422 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
9423 		rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
9424 
9425 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
9426 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9427 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
9428 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
9429 	    tg3_flag(tp, 57765_PLUS)) {
9430 		val = tr32(TG3_RDMA_RSRVCTRL_REG);
9431 		if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) {
9432 			val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
9433 				 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
9434 				 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
9435 			val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
9436 			       TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
9437 			       TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
9438 		}
9439 		tw32(TG3_RDMA_RSRVCTRL_REG,
9440 		     val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
9441 	}
9442 
9443 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
9444 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9445 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9446 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val |
9447 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
9448 		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
9449 	}
9450 
9451 	/* Receive/send statistics. */
9452 	if (tg3_flag(tp, 5750_PLUS)) {
9453 		val = tr32(RCVLPC_STATS_ENABLE);
9454 		val &= ~RCVLPC_STATSENAB_DACK_FIX;
9455 		tw32(RCVLPC_STATS_ENABLE, val);
9456 	} else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
9457 		   tg3_flag(tp, TSO_CAPABLE)) {
9458 		val = tr32(RCVLPC_STATS_ENABLE);
9459 		val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
9460 		tw32(RCVLPC_STATS_ENABLE, val);
9461 	} else {
9462 		tw32(RCVLPC_STATS_ENABLE, 0xffffff);
9463 	}
9464 	tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
9465 	tw32(SNDDATAI_STATSENAB, 0xffffff);
9466 	tw32(SNDDATAI_STATSCTRL,
9467 	     (SNDDATAI_SCTRL_ENABLE |
9468 	      SNDDATAI_SCTRL_FASTUPD));
9469 
9470 	/* Setup host coalescing engine. */
9471 	tw32(HOSTCC_MODE, 0);
9472 	for (i = 0; i < 2000; i++) {
9473 		if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
9474 			break;
9475 		udelay(10);
9476 	}
9477 
9478 	__tg3_set_coalesce(tp, &tp->coal);
9479 
9480 	if (!tg3_flag(tp, 5705_PLUS)) {
9481 		/* Status/statistics block address.  See tg3_timer,
9482 		 * the tg3_periodic_fetch_stats call there, and
9483 		 * tg3_get_stats to see how this works for 5705/5750 chips.
9484 		 */
9485 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9486 		     ((u64) tp->stats_mapping >> 32));
9487 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9488 		     ((u64) tp->stats_mapping & 0xffffffff));
9489 		tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
9490 
9491 		tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
9492 
9493 		/* Clear statistics and status block memory areas */
9494 		for (i = NIC_SRAM_STATS_BLK;
9495 		     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
9496 		     i += sizeof(u32)) {
9497 			tg3_write_mem(tp, i, 0);
9498 			udelay(40);
9499 		}
9500 	}
9501 
9502 	tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
9503 
9504 	tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
9505 	tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
9506 	if (!tg3_flag(tp, 5705_PLUS))
9507 		tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
9508 
9509 	if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9510 		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
9511 		/* reset to prevent losing 1st rx packet intermittently */
9512 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9513 		udelay(10);
9514 	}
9515 
9516 	tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
9517 			MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
9518 			MAC_MODE_FHDE_ENABLE;
9519 	if (tg3_flag(tp, ENABLE_APE))
9520 		tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
9521 	if (!tg3_flag(tp, 5705_PLUS) &&
9522 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9523 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
9524 		tp->mac_mode |= MAC_MODE_LINK_POLARITY;
9525 	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
9526 	udelay(40);
9527 
9528 	/* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
9529 	 * If TG3_FLAG_IS_NIC is zero, we should read the
9530 	 * register to preserve the GPIO settings for LOMs. The GPIOs,
9531 	 * whether used as inputs or outputs, are set by boot code after
9532 	 * reset.
9533 	 */
9534 	if (!tg3_flag(tp, IS_NIC)) {
9535 		u32 gpio_mask;
9536 
9537 		gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
9538 			    GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
9539 			    GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
9540 
9541 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
9542 			gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
9543 				     GRC_LCLCTRL_GPIO_OUTPUT3;
9544 
9545 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
9546 			gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
9547 
9548 		tp->grc_local_ctrl &= ~gpio_mask;
9549 		tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
9550 
9551 		/* GPIO1 must be driven high for eeprom write protect */
9552 		if (tg3_flag(tp, EEPROM_WRITE_PROT))
9553 			tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
9554 					       GRC_LCLCTRL_GPIO_OUTPUT1);
9555 	}
9556 	tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9557 	udelay(100);
9558 
9559 	if (tg3_flag(tp, USING_MSIX)) {
9560 		val = tr32(MSGINT_MODE);
9561 		val |= MSGINT_MODE_ENABLE;
9562 		if (tp->irq_cnt > 1)
9563 			val |= MSGINT_MODE_MULTIVEC_EN;
9564 		if (!tg3_flag(tp, 1SHOT_MSI))
9565 			val |= MSGINT_MODE_ONE_SHOT_DISABLE;
9566 		tw32(MSGINT_MODE, val);
9567 	}
9568 
9569 	if (!tg3_flag(tp, 5705_PLUS)) {
9570 		tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
9571 		udelay(40);
9572 	}
9573 
9574 	val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
9575 	       WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
9576 	       WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
9577 	       WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
9578 	       WDMAC_MODE_LNGREAD_ENAB);
9579 
9580 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
9581 	    tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
9582 		if (tg3_flag(tp, TSO_CAPABLE) &&
9583 		    (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
9584 		     tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
9585 			/* nothing */
9586 		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9587 			   !tg3_flag(tp, IS_5788)) {
9588 			val |= WDMAC_MODE_RX_ACCEL;
9589 		}
9590 	}
9591 
9592 	/* Enable host coalescing bug fix */
9593 	if (tg3_flag(tp, 5755_PLUS))
9594 		val |= WDMAC_MODE_STATUS_TAG_FIX;
9595 
9596 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
9597 		val |= WDMAC_MODE_BURST_ALL_DATA;
9598 
9599 	tw32_f(WDMAC_MODE, val);
9600 	udelay(40);
9601 
9602 	if (tg3_flag(tp, PCIX_MODE)) {
9603 		u16 pcix_cmd;
9604 
9605 		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9606 				     &pcix_cmd);
9607 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
9608 			pcix_cmd &= ~PCI_X_CMD_MAX_READ;
9609 			pcix_cmd |= PCI_X_CMD_READ_2K;
9610 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
9611 			pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
9612 			pcix_cmd |= PCI_X_CMD_READ_2K;
9613 		}
9614 		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9615 				      pcix_cmd);
9616 	}
9617 
9618 	tw32_f(RDMAC_MODE, rdmac_mode);
9619 	udelay(40);
9620 
9621 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) {
9622 		for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
9623 			if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
9624 				break;
9625 		}
9626 		if (i < TG3_NUM_RDMA_CHANNELS) {
9627 			val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9628 			val |= TG3_LSO_RD_DMA_TX_LENGTH_WA;
9629 			tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
9630 			tg3_flag_set(tp, 5719_RDMA_BUG);
9631 		}
9632 	}
9633 
9634 	tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
9635 	if (!tg3_flag(tp, 5705_PLUS))
9636 		tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
9637 
9638 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
9639 		tw32(SNDDATAC_MODE,
9640 		     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
9641 	else
9642 		tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
9643 
9644 	tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
9645 	tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
9646 	val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
9647 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
9648 		val |= RCVDBDI_MODE_LRG_RING_SZ;
9649 	tw32(RCVDBDI_MODE, val);
9650 	tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
9651 	if (tg3_flag(tp, HW_TSO_1) ||
9652 	    tg3_flag(tp, HW_TSO_2) ||
9653 	    tg3_flag(tp, HW_TSO_3))
9654 		tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
9655 	val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
9656 	if (tg3_flag(tp, ENABLE_TSS))
9657 		val |= SNDBDI_MODE_MULTI_TXQ_EN;
9658 	tw32(SNDBDI_MODE, val);
9659 	tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
9660 
9661 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9662 		err = tg3_load_5701_a0_firmware_fix(tp);
9663 		if (err)
9664 			return err;
9665 	}
9666 
9667 	if (tg3_flag(tp, TSO_CAPABLE)) {
9668 		err = tg3_load_tso_firmware(tp);
9669 		if (err)
9670 			return err;
9671 	}
9672 
9673 	tp->tx_mode = TX_MODE_ENABLE;
9674 
9675 	if (tg3_flag(tp, 5755_PLUS) ||
9676 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9677 		tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
9678 
9679 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
9680 		val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
9681 		tp->tx_mode &= ~val;
9682 		tp->tx_mode |= tr32(MAC_TX_MODE) & val;
9683 	}
9684 
9685 	tw32_f(MAC_TX_MODE, tp->tx_mode);
9686 	udelay(100);
9687 
9688 	if (tg3_flag(tp, ENABLE_RSS)) {
9689 		tg3_rss_write_indir_tbl(tp);
9690 
9691 		/* Setup the "secret" hash key. */
9692 		tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
9693 		tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
9694 		tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
9695 		tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
9696 		tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
9697 		tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
9698 		tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
9699 		tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
9700 		tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
9701 		tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
9702 	}
9703 
9704 	tp->rx_mode = RX_MODE_ENABLE;
9705 	if (tg3_flag(tp, 5755_PLUS))
9706 		tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
9707 
9708 	if (tg3_flag(tp, ENABLE_RSS))
9709 		tp->rx_mode |= RX_MODE_RSS_ENABLE |
9710 			       RX_MODE_RSS_ITBL_HASH_BITS_7 |
9711 			       RX_MODE_RSS_IPV6_HASH_EN |
9712 			       RX_MODE_RSS_TCP_IPV6_HASH_EN |
9713 			       RX_MODE_RSS_IPV4_HASH_EN |
9714 			       RX_MODE_RSS_TCP_IPV4_HASH_EN;
9715 
9716 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9717 	udelay(10);
9718 
9719 	tw32(MAC_LED_CTRL, tp->led_ctrl);
9720 
9721 	tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
9722 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9723 		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9724 		udelay(10);
9725 	}
9726 	tw32_f(MAC_RX_MODE, tp->rx_mode);
9727 	udelay(10);
9728 
9729 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9730 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
9731 			!(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
9732 			/* Set drive transmission level to 1.2V  */
9733 			/* only if the signal pre-emphasis bit is not set  */
9734 			val = tr32(MAC_SERDES_CFG);
9735 			val &= 0xfffff000;
9736 			val |= 0x880;
9737 			tw32(MAC_SERDES_CFG, val);
9738 		}
9739 		if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
9740 			tw32(MAC_SERDES_CFG, 0x616000);
9741 	}
9742 
9743 	/* Prevent chip from dropping frames when flow control
9744 	 * is enabled.
9745 	 */
9746 	if (tg3_flag(tp, 57765_CLASS))
9747 		val = 1;
9748 	else
9749 		val = 2;
9750 	tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
9751 
9752 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
9753 	    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
9754 		/* Use hardware link auto-negotiation */
9755 		tg3_flag_set(tp, HW_AUTONEG);
9756 	}
9757 
9758 	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9759 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
9760 		u32 tmp;
9761 
9762 		tmp = tr32(SERDES_RX_CTRL);
9763 		tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
9764 		tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
9765 		tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
9766 		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9767 	}
9768 
9769 	if (!tg3_flag(tp, USE_PHYLIB)) {
9770 		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
9771 			tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
9772 
9773 		err = tg3_setup_phy(tp, 0);
9774 		if (err)
9775 			return err;
9776 
9777 		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9778 		    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
9779 			u32 tmp;
9780 
9781 			/* Clear CRC stats. */
9782 			if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
9783 				tg3_writephy(tp, MII_TG3_TEST1,
9784 					     tmp | MII_TG3_TEST1_CRC_EN);
9785 				tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
9786 			}
9787 		}
9788 	}
9789 
9790 	__tg3_set_rx_mode(tp->dev);
9791 
9792 	/* Initialize receive rules. */
9793 	tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
9794 	tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
9795 	tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
9796 	tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
9797 
9798 	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
9799 		limit = 8;
9800 	else
9801 		limit = 16;
9802 	if (tg3_flag(tp, ENABLE_ASF))
9803 		limit -= 4;
9804 	switch (limit) {
9805 	case 16:
9806 		tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
9807 	case 15:
9808 		tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
9809 	case 14:
9810 		tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
9811 	case 13:
9812 		tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
9813 	case 12:
9814 		tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
9815 	case 11:
9816 		tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
9817 	case 10:
9818 		tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
9819 	case 9:
9820 		tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
9821 	case 8:
9822 		tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
9823 	case 7:
9824 		tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
9825 	case 6:
9826 		tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
9827 	case 5:
9828 		tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
9829 	case 4:
9830 		/* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
9831 	case 3:
9832 		/* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
9833 	case 2:
9834 	case 1:
9835 
9836 	default:
9837 		break;
9838 	}
9839 
9840 	if (tg3_flag(tp, ENABLE_APE))
9841 		/* Write our heartbeat update interval to APE. */
9842 		tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
9843 				APE_HOST_HEARTBEAT_INT_DISABLE);
9844 
9845 	tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
9846 
9847 	return 0;
9848 }
9849 
9850 /* Called at device open time to get the chip ready for
9851  * packet processing.  Invoked with tp->lock held.
9852  */
9853 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
9854 {
9855 	tg3_switch_clocks(tp);
9856 
9857 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
9858 
9859 	return tg3_reset_hw(tp, reset_phy);
9860 }
9861 
9862 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
9863 {
9864 	int i;
9865 
9866 	for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
9867 		u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
9868 
9869 		tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
9870 		off += len;
9871 
9872 		if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
9873 		    !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
9874 			memset(ocir, 0, TG3_OCIR_LEN);
9875 	}
9876 }
9877 
9878 /* sysfs attributes for hwmon */
9879 static ssize_t tg3_show_temp(struct device *dev,
9880 			     struct device_attribute *devattr, char *buf)
9881 {
9882 	struct pci_dev *pdev = to_pci_dev(dev);
9883 	struct net_device *netdev = pci_get_drvdata(pdev);
9884 	struct tg3 *tp = netdev_priv(netdev);
9885 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
9886 	u32 temperature;
9887 
9888 	spin_lock_bh(&tp->lock);
9889 	tg3_ape_scratchpad_read(tp, &temperature, attr->index,
9890 				sizeof(temperature));
9891 	spin_unlock_bh(&tp->lock);
9892 	return sprintf(buf, "%u\n", temperature);
9893 }
9894 
9895 
9896 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
9897 			  TG3_TEMP_SENSOR_OFFSET);
9898 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
9899 			  TG3_TEMP_CAUTION_OFFSET);
9900 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
9901 			  TG3_TEMP_MAX_OFFSET);
9902 
9903 static struct attribute *tg3_attributes[] = {
9904 	&sensor_dev_attr_temp1_input.dev_attr.attr,
9905 	&sensor_dev_attr_temp1_crit.dev_attr.attr,
9906 	&sensor_dev_attr_temp1_max.dev_attr.attr,
9907 	NULL
9908 };
9909 
9910 static const struct attribute_group tg3_group = {
9911 	.attrs = tg3_attributes,
9912 };
9913 
9914 static void tg3_hwmon_close(struct tg3 *tp)
9915 {
9916 	if (tp->hwmon_dev) {
9917 		hwmon_device_unregister(tp->hwmon_dev);
9918 		tp->hwmon_dev = NULL;
9919 		sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group);
9920 	}
9921 }
9922 
9923 static void tg3_hwmon_open(struct tg3 *tp)
9924 {
9925 	int i, err;
9926 	u32 size = 0;
9927 	struct pci_dev *pdev = tp->pdev;
9928 	struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
9929 
9930 	tg3_sd_scan_scratchpad(tp, ocirs);
9931 
9932 	for (i = 0; i < TG3_SD_NUM_RECS; i++) {
9933 		if (!ocirs[i].src_data_length)
9934 			continue;
9935 
9936 		size += ocirs[i].src_hdr_length;
9937 		size += ocirs[i].src_data_length;
9938 	}
9939 
9940 	if (!size)
9941 		return;
9942 
9943 	/* Register hwmon sysfs hooks */
9944 	err = sysfs_create_group(&pdev->dev.kobj, &tg3_group);
9945 	if (err) {
9946 		dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n");
9947 		return;
9948 	}
9949 
9950 	tp->hwmon_dev = hwmon_device_register(&pdev->dev);
9951 	if (IS_ERR(tp->hwmon_dev)) {
9952 		tp->hwmon_dev = NULL;
9953 		dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
9954 		sysfs_remove_group(&pdev->dev.kobj, &tg3_group);
9955 	}
9956 }
9957 
9958 
9959 #define TG3_STAT_ADD32(PSTAT, REG) \
9960 do {	u32 __val = tr32(REG); \
9961 	(PSTAT)->low += __val; \
9962 	if ((PSTAT)->low < __val) \
9963 		(PSTAT)->high += 1; \
9964 } while (0)
9965 
9966 static void tg3_periodic_fetch_stats(struct tg3 *tp)
9967 {
9968 	struct tg3_hw_stats *sp = tp->hw_stats;
9969 
9970 	if (!tp->link_up)
9971 		return;
9972 
9973 	TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
9974 	TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
9975 	TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
9976 	TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
9977 	TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
9978 	TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
9979 	TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
9980 	TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
9981 	TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
9982 	TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
9983 	TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
9984 	TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
9985 	TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
9986 	if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) &&
9987 		     (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
9988 		      sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
9989 		u32 val;
9990 
9991 		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
9992 		val &= ~TG3_LSO_RD_DMA_TX_LENGTH_WA;
9993 		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
9994 		tg3_flag_clear(tp, 5719_RDMA_BUG);
9995 	}
9996 
9997 	TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
9998 	TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
9999 	TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10000 	TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10001 	TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10002 	TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10003 	TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10004 	TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10005 	TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10006 	TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10007 	TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10008 	TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10009 	TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10010 	TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10011 
10012 	TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10013 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
10014 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 &&
10015 	    tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) {
10016 		TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10017 	} else {
10018 		u32 val = tr32(HOSTCC_FLOW_ATTN);
10019 		val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10020 		if (val) {
10021 			tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10022 			sp->rx_discards.low += val;
10023 			if (sp->rx_discards.low < val)
10024 				sp->rx_discards.high += 1;
10025 		}
10026 		sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10027 	}
10028 	TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10029 }
10030 
10031 static void tg3_chk_missed_msi(struct tg3 *tp)
10032 {
10033 	u32 i;
10034 
10035 	for (i = 0; i < tp->irq_cnt; i++) {
10036 		struct tg3_napi *tnapi = &tp->napi[i];
10037 
10038 		if (tg3_has_work(tnapi)) {
10039 			if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10040 			    tnapi->last_tx_cons == tnapi->tx_cons) {
10041 				if (tnapi->chk_msi_cnt < 1) {
10042 					tnapi->chk_msi_cnt++;
10043 					return;
10044 				}
10045 				tg3_msi(0, tnapi);
10046 			}
10047 		}
10048 		tnapi->chk_msi_cnt = 0;
10049 		tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10050 		tnapi->last_tx_cons = tnapi->tx_cons;
10051 	}
10052 }
10053 
10054 static void tg3_timer(unsigned long __opaque)
10055 {
10056 	struct tg3 *tp = (struct tg3 *) __opaque;
10057 
10058 	if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING))
10059 		goto restart_timer;
10060 
10061 	spin_lock(&tp->lock);
10062 
10063 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
10064 	    tg3_flag(tp, 57765_CLASS))
10065 		tg3_chk_missed_msi(tp);
10066 
10067 	if (!tg3_flag(tp, TAGGED_STATUS)) {
10068 		/* All of this garbage is because when using non-tagged
10069 		 * IRQ status the mailbox/status_block protocol the chip
10070 		 * uses with the cpu is race prone.
10071 		 */
10072 		if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10073 			tw32(GRC_LOCAL_CTRL,
10074 			     tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10075 		} else {
10076 			tw32(HOSTCC_MODE, tp->coalesce_mode |
10077 			     HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
10078 		}
10079 
10080 		if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
10081 			spin_unlock(&tp->lock);
10082 			tg3_reset_task_schedule(tp);
10083 			goto restart_timer;
10084 		}
10085 	}
10086 
10087 	/* This part only runs once per second. */
10088 	if (!--tp->timer_counter) {
10089 		if (tg3_flag(tp, 5705_PLUS))
10090 			tg3_periodic_fetch_stats(tp);
10091 
10092 		if (tp->setlpicnt && !--tp->setlpicnt)
10093 			tg3_phy_eee_enable(tp);
10094 
10095 		if (tg3_flag(tp, USE_LINKCHG_REG)) {
10096 			u32 mac_stat;
10097 			int phy_event;
10098 
10099 			mac_stat = tr32(MAC_STATUS);
10100 
10101 			phy_event = 0;
10102 			if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
10103 				if (mac_stat & MAC_STATUS_MI_INTERRUPT)
10104 					phy_event = 1;
10105 			} else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
10106 				phy_event = 1;
10107 
10108 			if (phy_event)
10109 				tg3_setup_phy(tp, 0);
10110 		} else if (tg3_flag(tp, POLL_SERDES)) {
10111 			u32 mac_stat = tr32(MAC_STATUS);
10112 			int need_setup = 0;
10113 
10114 			if (tp->link_up &&
10115 			    (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
10116 				need_setup = 1;
10117 			}
10118 			if (!tp->link_up &&
10119 			    (mac_stat & (MAC_STATUS_PCS_SYNCED |
10120 					 MAC_STATUS_SIGNAL_DET))) {
10121 				need_setup = 1;
10122 			}
10123 			if (need_setup) {
10124 				if (!tp->serdes_counter) {
10125 					tw32_f(MAC_MODE,
10126 					     (tp->mac_mode &
10127 					      ~MAC_MODE_PORT_MODE_MASK));
10128 					udelay(40);
10129 					tw32_f(MAC_MODE, tp->mac_mode);
10130 					udelay(40);
10131 				}
10132 				tg3_setup_phy(tp, 0);
10133 			}
10134 		} else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10135 			   tg3_flag(tp, 5780_CLASS)) {
10136 			tg3_serdes_parallel_detect(tp);
10137 		}
10138 
10139 		tp->timer_counter = tp->timer_multiplier;
10140 	}
10141 
10142 	/* Heartbeat is only sent once every 2 seconds.
10143 	 *
10144 	 * The heartbeat is to tell the ASF firmware that the host
10145 	 * driver is still alive.  In the event that the OS crashes,
10146 	 * ASF needs to reset the hardware to free up the FIFO space
10147 	 * that may be filled with rx packets destined for the host.
10148 	 * If the FIFO is full, ASF will no longer function properly.
10149 	 *
10150 	 * Unintended resets have been reported on real time kernels
10151 	 * where the timer doesn't run on time.  Netpoll will also have
10152 	 * same problem.
10153 	 *
10154 	 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
10155 	 * to check the ring condition when the heartbeat is expiring
10156 	 * before doing the reset.  This will prevent most unintended
10157 	 * resets.
10158 	 */
10159 	if (!--tp->asf_counter) {
10160 		if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
10161 			tg3_wait_for_event_ack(tp);
10162 
10163 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
10164 				      FWCMD_NICDRV_ALIVE3);
10165 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
10166 			tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
10167 				      TG3_FW_UPDATE_TIMEOUT_SEC);
10168 
10169 			tg3_generate_fw_event(tp);
10170 		}
10171 		tp->asf_counter = tp->asf_multiplier;
10172 	}
10173 
10174 	spin_unlock(&tp->lock);
10175 
10176 restart_timer:
10177 	tp->timer.expires = jiffies + tp->timer_offset;
10178 	add_timer(&tp->timer);
10179 }
10180 
10181 static void tg3_timer_init(struct tg3 *tp)
10182 {
10183 	if (tg3_flag(tp, TAGGED_STATUS) &&
10184 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 &&
10185 	    !tg3_flag(tp, 57765_CLASS))
10186 		tp->timer_offset = HZ;
10187 	else
10188 		tp->timer_offset = HZ / 10;
10189 
10190 	BUG_ON(tp->timer_offset > HZ);
10191 
10192 	tp->timer_multiplier = (HZ / tp->timer_offset);
10193 	tp->asf_multiplier = (HZ / tp->timer_offset) *
10194 			     TG3_FW_UPDATE_FREQ_SEC;
10195 
10196 	init_timer(&tp->timer);
10197 	tp->timer.data = (unsigned long) tp;
10198 	tp->timer.function = tg3_timer;
10199 }
10200 
10201 static void tg3_timer_start(struct tg3 *tp)
10202 {
10203 	tp->asf_counter   = tp->asf_multiplier;
10204 	tp->timer_counter = tp->timer_multiplier;
10205 
10206 	tp->timer.expires = jiffies + tp->timer_offset;
10207 	add_timer(&tp->timer);
10208 }
10209 
10210 static void tg3_timer_stop(struct tg3 *tp)
10211 {
10212 	del_timer_sync(&tp->timer);
10213 }
10214 
10215 /* Restart hardware after configuration changes, self-test, etc.
10216  * Invoked with tp->lock held.
10217  */
10218 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
10219 	__releases(tp->lock)
10220 	__acquires(tp->lock)
10221 {
10222 	int err;
10223 
10224 	err = tg3_init_hw(tp, reset_phy);
10225 	if (err) {
10226 		netdev_err(tp->dev,
10227 			   "Failed to re-initialize device, aborting\n");
10228 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10229 		tg3_full_unlock(tp);
10230 		tg3_timer_stop(tp);
10231 		tp->irq_sync = 0;
10232 		tg3_napi_enable(tp);
10233 		dev_close(tp->dev);
10234 		tg3_full_lock(tp, 0);
10235 	}
10236 	return err;
10237 }
10238 
10239 static void tg3_reset_task(struct work_struct *work)
10240 {
10241 	struct tg3 *tp = container_of(work, struct tg3, reset_task);
10242 	int err;
10243 
10244 	tg3_full_lock(tp, 0);
10245 
10246 	if (!netif_running(tp->dev)) {
10247 		tg3_flag_clear(tp, RESET_TASK_PENDING);
10248 		tg3_full_unlock(tp);
10249 		return;
10250 	}
10251 
10252 	tg3_full_unlock(tp);
10253 
10254 	tg3_phy_stop(tp);
10255 
10256 	tg3_netif_stop(tp);
10257 
10258 	tg3_full_lock(tp, 1);
10259 
10260 	if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
10261 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
10262 		tp->write32_rx_mbox = tg3_write_flush_reg32;
10263 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
10264 		tg3_flag_clear(tp, TX_RECOVERY_PENDING);
10265 	}
10266 
10267 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
10268 	err = tg3_init_hw(tp, 1);
10269 	if (err)
10270 		goto out;
10271 
10272 	tg3_netif_start(tp);
10273 
10274 out:
10275 	tg3_full_unlock(tp);
10276 
10277 	if (!err)
10278 		tg3_phy_start(tp);
10279 
10280 	tg3_flag_clear(tp, RESET_TASK_PENDING);
10281 }
10282 
10283 static int tg3_request_irq(struct tg3 *tp, int irq_num)
10284 {
10285 	irq_handler_t fn;
10286 	unsigned long flags;
10287 	char *name;
10288 	struct tg3_napi *tnapi = &tp->napi[irq_num];
10289 
10290 	if (tp->irq_cnt == 1)
10291 		name = tp->dev->name;
10292 	else {
10293 		name = &tnapi->irq_lbl[0];
10294 		snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num);
10295 		name[IFNAMSIZ-1] = 0;
10296 	}
10297 
10298 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10299 		fn = tg3_msi;
10300 		if (tg3_flag(tp, 1SHOT_MSI))
10301 			fn = tg3_msi_1shot;
10302 		flags = 0;
10303 	} else {
10304 		fn = tg3_interrupt;
10305 		if (tg3_flag(tp, TAGGED_STATUS))
10306 			fn = tg3_interrupt_tagged;
10307 		flags = IRQF_SHARED;
10308 	}
10309 
10310 	return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
10311 }
10312 
10313 static int tg3_test_interrupt(struct tg3 *tp)
10314 {
10315 	struct tg3_napi *tnapi = &tp->napi[0];
10316 	struct net_device *dev = tp->dev;
10317 	int err, i, intr_ok = 0;
10318 	u32 val;
10319 
10320 	if (!netif_running(dev))
10321 		return -ENODEV;
10322 
10323 	tg3_disable_ints(tp);
10324 
10325 	free_irq(tnapi->irq_vec, tnapi);
10326 
10327 	/*
10328 	 * Turn off MSI one shot mode.  Otherwise this test has no
10329 	 * observable way to know whether the interrupt was delivered.
10330 	 */
10331 	if (tg3_flag(tp, 57765_PLUS)) {
10332 		val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
10333 		tw32(MSGINT_MODE, val);
10334 	}
10335 
10336 	err = request_irq(tnapi->irq_vec, tg3_test_isr,
10337 			  IRQF_SHARED, dev->name, tnapi);
10338 	if (err)
10339 		return err;
10340 
10341 	tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
10342 	tg3_enable_ints(tp);
10343 
10344 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
10345 	       tnapi->coal_now);
10346 
10347 	for (i = 0; i < 5; i++) {
10348 		u32 int_mbox, misc_host_ctrl;
10349 
10350 		int_mbox = tr32_mailbox(tnapi->int_mbox);
10351 		misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
10352 
10353 		if ((int_mbox != 0) ||
10354 		    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
10355 			intr_ok = 1;
10356 			break;
10357 		}
10358 
10359 		if (tg3_flag(tp, 57765_PLUS) &&
10360 		    tnapi->hw_status->status_tag != tnapi->last_tag)
10361 			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
10362 
10363 		msleep(10);
10364 	}
10365 
10366 	tg3_disable_ints(tp);
10367 
10368 	free_irq(tnapi->irq_vec, tnapi);
10369 
10370 	err = tg3_request_irq(tp, 0);
10371 
10372 	if (err)
10373 		return err;
10374 
10375 	if (intr_ok) {
10376 		/* Reenable MSI one shot mode. */
10377 		if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
10378 			val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
10379 			tw32(MSGINT_MODE, val);
10380 		}
10381 		return 0;
10382 	}
10383 
10384 	return -EIO;
10385 }
10386 
10387 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
10388  * successfully restored
10389  */
10390 static int tg3_test_msi(struct tg3 *tp)
10391 {
10392 	int err;
10393 	u16 pci_cmd;
10394 
10395 	if (!tg3_flag(tp, USING_MSI))
10396 		return 0;
10397 
10398 	/* Turn off SERR reporting in case MSI terminates with Master
10399 	 * Abort.
10400 	 */
10401 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10402 	pci_write_config_word(tp->pdev, PCI_COMMAND,
10403 			      pci_cmd & ~PCI_COMMAND_SERR);
10404 
10405 	err = tg3_test_interrupt(tp);
10406 
10407 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10408 
10409 	if (!err)
10410 		return 0;
10411 
10412 	/* other failures */
10413 	if (err != -EIO)
10414 		return err;
10415 
10416 	/* MSI test failed, go back to INTx mode */
10417 	netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
10418 		    "to INTx mode. Please report this failure to the PCI "
10419 		    "maintainer and include system chipset information\n");
10420 
10421 	free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10422 
10423 	pci_disable_msi(tp->pdev);
10424 
10425 	tg3_flag_clear(tp, USING_MSI);
10426 	tp->napi[0].irq_vec = tp->pdev->irq;
10427 
10428 	err = tg3_request_irq(tp, 0);
10429 	if (err)
10430 		return err;
10431 
10432 	/* Need to reset the chip because the MSI cycle may have terminated
10433 	 * with Master Abort.
10434 	 */
10435 	tg3_full_lock(tp, 1);
10436 
10437 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10438 	err = tg3_init_hw(tp, 1);
10439 
10440 	tg3_full_unlock(tp);
10441 
10442 	if (err)
10443 		free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10444 
10445 	return err;
10446 }
10447 
10448 static int tg3_request_firmware(struct tg3 *tp)
10449 {
10450 	const __be32 *fw_data;
10451 
10452 	if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
10453 		netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
10454 			   tp->fw_needed);
10455 		return -ENOENT;
10456 	}
10457 
10458 	fw_data = (void *)tp->fw->data;
10459 
10460 	/* Firmware blob starts with version numbers, followed by
10461 	 * start address and _full_ length including BSS sections
10462 	 * (which must be longer than the actual data, of course
10463 	 */
10464 
10465 	tp->fw_len = be32_to_cpu(fw_data[2]);	/* includes bss */
10466 	if (tp->fw_len < (tp->fw->size - 12)) {
10467 		netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
10468 			   tp->fw_len, tp->fw_needed);
10469 		release_firmware(tp->fw);
10470 		tp->fw = NULL;
10471 		return -EINVAL;
10472 	}
10473 
10474 	/* We no longer need firmware; we have it. */
10475 	tp->fw_needed = NULL;
10476 	return 0;
10477 }
10478 
10479 static u32 tg3_irq_count(struct tg3 *tp)
10480 {
10481 	u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
10482 
10483 	if (irq_cnt > 1) {
10484 		/* We want as many rx rings enabled as there are cpus.
10485 		 * In multiqueue MSI-X mode, the first MSI-X vector
10486 		 * only deals with link interrupts, etc, so we add
10487 		 * one to the number of vectors we are requesting.
10488 		 */
10489 		irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
10490 	}
10491 
10492 	return irq_cnt;
10493 }
10494 
10495 static bool tg3_enable_msix(struct tg3 *tp)
10496 {
10497 	int i, rc;
10498 	struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
10499 
10500 	tp->txq_cnt = tp->txq_req;
10501 	tp->rxq_cnt = tp->rxq_req;
10502 	if (!tp->rxq_cnt)
10503 		tp->rxq_cnt = netif_get_num_default_rss_queues();
10504 	if (tp->rxq_cnt > tp->rxq_max)
10505 		tp->rxq_cnt = tp->rxq_max;
10506 
10507 	/* Disable multiple TX rings by default.  Simple round-robin hardware
10508 	 * scheduling of the TX rings can cause starvation of rings with
10509 	 * small packets when other rings have TSO or jumbo packets.
10510 	 */
10511 	if (!tp->txq_req)
10512 		tp->txq_cnt = 1;
10513 
10514 	tp->irq_cnt = tg3_irq_count(tp);
10515 
10516 	for (i = 0; i < tp->irq_max; i++) {
10517 		msix_ent[i].entry  = i;
10518 		msix_ent[i].vector = 0;
10519 	}
10520 
10521 	rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
10522 	if (rc < 0) {
10523 		return false;
10524 	} else if (rc != 0) {
10525 		if (pci_enable_msix(tp->pdev, msix_ent, rc))
10526 			return false;
10527 		netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
10528 			      tp->irq_cnt, rc);
10529 		tp->irq_cnt = rc;
10530 		tp->rxq_cnt = max(rc - 1, 1);
10531 		if (tp->txq_cnt)
10532 			tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
10533 	}
10534 
10535 	for (i = 0; i < tp->irq_max; i++)
10536 		tp->napi[i].irq_vec = msix_ent[i].vector;
10537 
10538 	if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
10539 		pci_disable_msix(tp->pdev);
10540 		return false;
10541 	}
10542 
10543 	if (tp->irq_cnt == 1)
10544 		return true;
10545 
10546 	tg3_flag_set(tp, ENABLE_RSS);
10547 
10548 	if (tp->txq_cnt > 1)
10549 		tg3_flag_set(tp, ENABLE_TSS);
10550 
10551 	netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
10552 
10553 	return true;
10554 }
10555 
10556 static void tg3_ints_init(struct tg3 *tp)
10557 {
10558 	if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
10559 	    !tg3_flag(tp, TAGGED_STATUS)) {
10560 		/* All MSI supporting chips should support tagged
10561 		 * status.  Assert that this is the case.
10562 		 */
10563 		netdev_warn(tp->dev,
10564 			    "MSI without TAGGED_STATUS? Not using MSI\n");
10565 		goto defcfg;
10566 	}
10567 
10568 	if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
10569 		tg3_flag_set(tp, USING_MSIX);
10570 	else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
10571 		tg3_flag_set(tp, USING_MSI);
10572 
10573 	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10574 		u32 msi_mode = tr32(MSGINT_MODE);
10575 		if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
10576 			msi_mode |= MSGINT_MODE_MULTIVEC_EN;
10577 		if (!tg3_flag(tp, 1SHOT_MSI))
10578 			msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
10579 		tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
10580 	}
10581 defcfg:
10582 	if (!tg3_flag(tp, USING_MSIX)) {
10583 		tp->irq_cnt = 1;
10584 		tp->napi[0].irq_vec = tp->pdev->irq;
10585 	}
10586 
10587 	if (tp->irq_cnt == 1) {
10588 		tp->txq_cnt = 1;
10589 		tp->rxq_cnt = 1;
10590 		netif_set_real_num_tx_queues(tp->dev, 1);
10591 		netif_set_real_num_rx_queues(tp->dev, 1);
10592 	}
10593 }
10594 
10595 static void tg3_ints_fini(struct tg3 *tp)
10596 {
10597 	if (tg3_flag(tp, USING_MSIX))
10598 		pci_disable_msix(tp->pdev);
10599 	else if (tg3_flag(tp, USING_MSI))
10600 		pci_disable_msi(tp->pdev);
10601 	tg3_flag_clear(tp, USING_MSI);
10602 	tg3_flag_clear(tp, USING_MSIX);
10603 	tg3_flag_clear(tp, ENABLE_RSS);
10604 	tg3_flag_clear(tp, ENABLE_TSS);
10605 }
10606 
10607 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
10608 		     bool init)
10609 {
10610 	struct net_device *dev = tp->dev;
10611 	int i, err;
10612 
10613 	/*
10614 	 * Setup interrupts first so we know how
10615 	 * many NAPI resources to allocate
10616 	 */
10617 	tg3_ints_init(tp);
10618 
10619 	tg3_rss_check_indir_tbl(tp);
10620 
10621 	/* The placement of this call is tied
10622 	 * to the setup and use of Host TX descriptors.
10623 	 */
10624 	err = tg3_alloc_consistent(tp);
10625 	if (err)
10626 		goto err_out1;
10627 
10628 	tg3_napi_init(tp);
10629 
10630 	tg3_napi_enable(tp);
10631 
10632 	for (i = 0; i < tp->irq_cnt; i++) {
10633 		struct tg3_napi *tnapi = &tp->napi[i];
10634 		err = tg3_request_irq(tp, i);
10635 		if (err) {
10636 			for (i--; i >= 0; i--) {
10637 				tnapi = &tp->napi[i];
10638 				free_irq(tnapi->irq_vec, tnapi);
10639 			}
10640 			goto err_out2;
10641 		}
10642 	}
10643 
10644 	tg3_full_lock(tp, 0);
10645 
10646 	err = tg3_init_hw(tp, reset_phy);
10647 	if (err) {
10648 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10649 		tg3_free_rings(tp);
10650 	}
10651 
10652 	tg3_full_unlock(tp);
10653 
10654 	if (err)
10655 		goto err_out3;
10656 
10657 	if (test_irq && tg3_flag(tp, USING_MSI)) {
10658 		err = tg3_test_msi(tp);
10659 
10660 		if (err) {
10661 			tg3_full_lock(tp, 0);
10662 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10663 			tg3_free_rings(tp);
10664 			tg3_full_unlock(tp);
10665 
10666 			goto err_out2;
10667 		}
10668 
10669 		if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
10670 			u32 val = tr32(PCIE_TRANSACTION_CFG);
10671 
10672 			tw32(PCIE_TRANSACTION_CFG,
10673 			     val | PCIE_TRANS_CFG_1SHOT_MSI);
10674 		}
10675 	}
10676 
10677 	tg3_phy_start(tp);
10678 
10679 	tg3_hwmon_open(tp);
10680 
10681 	tg3_full_lock(tp, 0);
10682 
10683 	tg3_timer_start(tp);
10684 	tg3_flag_set(tp, INIT_COMPLETE);
10685 	tg3_enable_ints(tp);
10686 
10687 	if (init)
10688 		tg3_ptp_init(tp);
10689 	else
10690 		tg3_ptp_resume(tp);
10691 
10692 
10693 	tg3_full_unlock(tp);
10694 
10695 	netif_tx_start_all_queues(dev);
10696 
10697 	/*
10698 	 * Reset loopback feature if it was turned on while the device was down
10699 	 * make sure that it's installed properly now.
10700 	 */
10701 	if (dev->features & NETIF_F_LOOPBACK)
10702 		tg3_set_loopback(dev, dev->features);
10703 
10704 	return 0;
10705 
10706 err_out3:
10707 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10708 		struct tg3_napi *tnapi = &tp->napi[i];
10709 		free_irq(tnapi->irq_vec, tnapi);
10710 	}
10711 
10712 err_out2:
10713 	tg3_napi_disable(tp);
10714 	tg3_napi_fini(tp);
10715 	tg3_free_consistent(tp);
10716 
10717 err_out1:
10718 	tg3_ints_fini(tp);
10719 
10720 	return err;
10721 }
10722 
10723 static void tg3_stop(struct tg3 *tp)
10724 {
10725 	int i;
10726 
10727 	tg3_reset_task_cancel(tp);
10728 	tg3_netif_stop(tp);
10729 
10730 	tg3_timer_stop(tp);
10731 
10732 	tg3_hwmon_close(tp);
10733 
10734 	tg3_phy_stop(tp);
10735 
10736 	tg3_full_lock(tp, 1);
10737 
10738 	tg3_disable_ints(tp);
10739 
10740 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10741 	tg3_free_rings(tp);
10742 	tg3_flag_clear(tp, INIT_COMPLETE);
10743 
10744 	tg3_full_unlock(tp);
10745 
10746 	for (i = tp->irq_cnt - 1; i >= 0; i--) {
10747 		struct tg3_napi *tnapi = &tp->napi[i];
10748 		free_irq(tnapi->irq_vec, tnapi);
10749 	}
10750 
10751 	tg3_ints_fini(tp);
10752 
10753 	tg3_napi_fini(tp);
10754 
10755 	tg3_free_consistent(tp);
10756 }
10757 
10758 static int tg3_open(struct net_device *dev)
10759 {
10760 	struct tg3 *tp = netdev_priv(dev);
10761 	int err;
10762 
10763 	if (tp->fw_needed) {
10764 		err = tg3_request_firmware(tp);
10765 		if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
10766 			if (err)
10767 				return err;
10768 		} else if (err) {
10769 			netdev_warn(tp->dev, "TSO capability disabled\n");
10770 			tg3_flag_clear(tp, TSO_CAPABLE);
10771 		} else if (!tg3_flag(tp, TSO_CAPABLE)) {
10772 			netdev_notice(tp->dev, "TSO capability restored\n");
10773 			tg3_flag_set(tp, TSO_CAPABLE);
10774 		}
10775 	}
10776 
10777 	tg3_carrier_off(tp);
10778 
10779 	err = tg3_power_up(tp);
10780 	if (err)
10781 		return err;
10782 
10783 	tg3_full_lock(tp, 0);
10784 
10785 	tg3_disable_ints(tp);
10786 	tg3_flag_clear(tp, INIT_COMPLETE);
10787 
10788 	tg3_full_unlock(tp);
10789 
10790 	err = tg3_start(tp, true, true, true);
10791 	if (err) {
10792 		tg3_frob_aux_power(tp, false);
10793 		pci_set_power_state(tp->pdev, PCI_D3hot);
10794 	}
10795 
10796 	if (tg3_flag(tp, PTP_CAPABLE)) {
10797 		tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
10798 						   &tp->pdev->dev);
10799 		if (IS_ERR(tp->ptp_clock))
10800 			tp->ptp_clock = NULL;
10801 	}
10802 
10803 	return err;
10804 }
10805 
10806 static int tg3_close(struct net_device *dev)
10807 {
10808 	struct tg3 *tp = netdev_priv(dev);
10809 
10810 	tg3_ptp_fini(tp);
10811 
10812 	tg3_stop(tp);
10813 
10814 	/* Clear stats across close / open calls */
10815 	memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
10816 	memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));
10817 
10818 	tg3_power_down(tp);
10819 
10820 	tg3_carrier_off(tp);
10821 
10822 	return 0;
10823 }
10824 
10825 static inline u64 get_stat64(tg3_stat64_t *val)
10826 {
10827        return ((u64)val->high << 32) | ((u64)val->low);
10828 }
10829 
10830 static u64 tg3_calc_crc_errors(struct tg3 *tp)
10831 {
10832 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10833 
10834 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10835 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10836 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
10837 		u32 val;
10838 
10839 		if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
10840 			tg3_writephy(tp, MII_TG3_TEST1,
10841 				     val | MII_TG3_TEST1_CRC_EN);
10842 			tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
10843 		} else
10844 			val = 0;
10845 
10846 		tp->phy_crc_errors += val;
10847 
10848 		return tp->phy_crc_errors;
10849 	}
10850 
10851 	return get_stat64(&hw_stats->rx_fcs_errors);
10852 }
10853 
10854 #define ESTAT_ADD(member) \
10855 	estats->member =	old_estats->member + \
10856 				get_stat64(&hw_stats->member)
10857 
10858 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
10859 {
10860 	struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
10861 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10862 
10863 	ESTAT_ADD(rx_octets);
10864 	ESTAT_ADD(rx_fragments);
10865 	ESTAT_ADD(rx_ucast_packets);
10866 	ESTAT_ADD(rx_mcast_packets);
10867 	ESTAT_ADD(rx_bcast_packets);
10868 	ESTAT_ADD(rx_fcs_errors);
10869 	ESTAT_ADD(rx_align_errors);
10870 	ESTAT_ADD(rx_xon_pause_rcvd);
10871 	ESTAT_ADD(rx_xoff_pause_rcvd);
10872 	ESTAT_ADD(rx_mac_ctrl_rcvd);
10873 	ESTAT_ADD(rx_xoff_entered);
10874 	ESTAT_ADD(rx_frame_too_long_errors);
10875 	ESTAT_ADD(rx_jabbers);
10876 	ESTAT_ADD(rx_undersize_packets);
10877 	ESTAT_ADD(rx_in_length_errors);
10878 	ESTAT_ADD(rx_out_length_errors);
10879 	ESTAT_ADD(rx_64_or_less_octet_packets);
10880 	ESTAT_ADD(rx_65_to_127_octet_packets);
10881 	ESTAT_ADD(rx_128_to_255_octet_packets);
10882 	ESTAT_ADD(rx_256_to_511_octet_packets);
10883 	ESTAT_ADD(rx_512_to_1023_octet_packets);
10884 	ESTAT_ADD(rx_1024_to_1522_octet_packets);
10885 	ESTAT_ADD(rx_1523_to_2047_octet_packets);
10886 	ESTAT_ADD(rx_2048_to_4095_octet_packets);
10887 	ESTAT_ADD(rx_4096_to_8191_octet_packets);
10888 	ESTAT_ADD(rx_8192_to_9022_octet_packets);
10889 
10890 	ESTAT_ADD(tx_octets);
10891 	ESTAT_ADD(tx_collisions);
10892 	ESTAT_ADD(tx_xon_sent);
10893 	ESTAT_ADD(tx_xoff_sent);
10894 	ESTAT_ADD(tx_flow_control);
10895 	ESTAT_ADD(tx_mac_errors);
10896 	ESTAT_ADD(tx_single_collisions);
10897 	ESTAT_ADD(tx_mult_collisions);
10898 	ESTAT_ADD(tx_deferred);
10899 	ESTAT_ADD(tx_excessive_collisions);
10900 	ESTAT_ADD(tx_late_collisions);
10901 	ESTAT_ADD(tx_collide_2times);
10902 	ESTAT_ADD(tx_collide_3times);
10903 	ESTAT_ADD(tx_collide_4times);
10904 	ESTAT_ADD(tx_collide_5times);
10905 	ESTAT_ADD(tx_collide_6times);
10906 	ESTAT_ADD(tx_collide_7times);
10907 	ESTAT_ADD(tx_collide_8times);
10908 	ESTAT_ADD(tx_collide_9times);
10909 	ESTAT_ADD(tx_collide_10times);
10910 	ESTAT_ADD(tx_collide_11times);
10911 	ESTAT_ADD(tx_collide_12times);
10912 	ESTAT_ADD(tx_collide_13times);
10913 	ESTAT_ADD(tx_collide_14times);
10914 	ESTAT_ADD(tx_collide_15times);
10915 	ESTAT_ADD(tx_ucast_packets);
10916 	ESTAT_ADD(tx_mcast_packets);
10917 	ESTAT_ADD(tx_bcast_packets);
10918 	ESTAT_ADD(tx_carrier_sense_errors);
10919 	ESTAT_ADD(tx_discards);
10920 	ESTAT_ADD(tx_errors);
10921 
10922 	ESTAT_ADD(dma_writeq_full);
10923 	ESTAT_ADD(dma_write_prioq_full);
10924 	ESTAT_ADD(rxbds_empty);
10925 	ESTAT_ADD(rx_discards);
10926 	ESTAT_ADD(rx_errors);
10927 	ESTAT_ADD(rx_threshold_hit);
10928 
10929 	ESTAT_ADD(dma_readq_full);
10930 	ESTAT_ADD(dma_read_prioq_full);
10931 	ESTAT_ADD(tx_comp_queue_full);
10932 
10933 	ESTAT_ADD(ring_set_send_prod_index);
10934 	ESTAT_ADD(ring_status_update);
10935 	ESTAT_ADD(nic_irqs);
10936 	ESTAT_ADD(nic_avoided_irqs);
10937 	ESTAT_ADD(nic_tx_threshold_hit);
10938 
10939 	ESTAT_ADD(mbuf_lwm_thresh_hit);
10940 }
10941 
10942 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
10943 {
10944 	struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
10945 	struct tg3_hw_stats *hw_stats = tp->hw_stats;
10946 
10947 	stats->rx_packets = old_stats->rx_packets +
10948 		get_stat64(&hw_stats->rx_ucast_packets) +
10949 		get_stat64(&hw_stats->rx_mcast_packets) +
10950 		get_stat64(&hw_stats->rx_bcast_packets);
10951 
10952 	stats->tx_packets = old_stats->tx_packets +
10953 		get_stat64(&hw_stats->tx_ucast_packets) +
10954 		get_stat64(&hw_stats->tx_mcast_packets) +
10955 		get_stat64(&hw_stats->tx_bcast_packets);
10956 
10957 	stats->rx_bytes = old_stats->rx_bytes +
10958 		get_stat64(&hw_stats->rx_octets);
10959 	stats->tx_bytes = old_stats->tx_bytes +
10960 		get_stat64(&hw_stats->tx_octets);
10961 
10962 	stats->rx_errors = old_stats->rx_errors +
10963 		get_stat64(&hw_stats->rx_errors);
10964 	stats->tx_errors = old_stats->tx_errors +
10965 		get_stat64(&hw_stats->tx_errors) +
10966 		get_stat64(&hw_stats->tx_mac_errors) +
10967 		get_stat64(&hw_stats->tx_carrier_sense_errors) +
10968 		get_stat64(&hw_stats->tx_discards);
10969 
10970 	stats->multicast = old_stats->multicast +
10971 		get_stat64(&hw_stats->rx_mcast_packets);
10972 	stats->collisions = old_stats->collisions +
10973 		get_stat64(&hw_stats->tx_collisions);
10974 
10975 	stats->rx_length_errors = old_stats->rx_length_errors +
10976 		get_stat64(&hw_stats->rx_frame_too_long_errors) +
10977 		get_stat64(&hw_stats->rx_undersize_packets);
10978 
10979 	stats->rx_over_errors = old_stats->rx_over_errors +
10980 		get_stat64(&hw_stats->rxbds_empty);
10981 	stats->rx_frame_errors = old_stats->rx_frame_errors +
10982 		get_stat64(&hw_stats->rx_align_errors);
10983 	stats->tx_aborted_errors = old_stats->tx_aborted_errors +
10984 		get_stat64(&hw_stats->tx_discards);
10985 	stats->tx_carrier_errors = old_stats->tx_carrier_errors +
10986 		get_stat64(&hw_stats->tx_carrier_sense_errors);
10987 
10988 	stats->rx_crc_errors = old_stats->rx_crc_errors +
10989 		tg3_calc_crc_errors(tp);
10990 
10991 	stats->rx_missed_errors = old_stats->rx_missed_errors +
10992 		get_stat64(&hw_stats->rx_discards);
10993 
10994 	stats->rx_dropped = tp->rx_dropped;
10995 	stats->tx_dropped = tp->tx_dropped;
10996 }
10997 
10998 static int tg3_get_regs_len(struct net_device *dev)
10999 {
11000 	return TG3_REG_BLK_SIZE;
11001 }
11002 
11003 static void tg3_get_regs(struct net_device *dev,
11004 		struct ethtool_regs *regs, void *_p)
11005 {
11006 	struct tg3 *tp = netdev_priv(dev);
11007 
11008 	regs->version = 0;
11009 
11010 	memset(_p, 0, TG3_REG_BLK_SIZE);
11011 
11012 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11013 		return;
11014 
11015 	tg3_full_lock(tp, 0);
11016 
11017 	tg3_dump_legacy_regs(tp, (u32 *)_p);
11018 
11019 	tg3_full_unlock(tp);
11020 }
11021 
11022 static int tg3_get_eeprom_len(struct net_device *dev)
11023 {
11024 	struct tg3 *tp = netdev_priv(dev);
11025 
11026 	return tp->nvram_size;
11027 }
11028 
11029 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11030 {
11031 	struct tg3 *tp = netdev_priv(dev);
11032 	int ret;
11033 	u8  *pd;
11034 	u32 i, offset, len, b_offset, b_count;
11035 	__be32 val;
11036 
11037 	if (tg3_flag(tp, NO_NVRAM))
11038 		return -EINVAL;
11039 
11040 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11041 		return -EAGAIN;
11042 
11043 	offset = eeprom->offset;
11044 	len = eeprom->len;
11045 	eeprom->len = 0;
11046 
11047 	eeprom->magic = TG3_EEPROM_MAGIC;
11048 
11049 	if (offset & 3) {
11050 		/* adjustments to start on required 4 byte boundary */
11051 		b_offset = offset & 3;
11052 		b_count = 4 - b_offset;
11053 		if (b_count > len) {
11054 			/* i.e. offset=1 len=2 */
11055 			b_count = len;
11056 		}
11057 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
11058 		if (ret)
11059 			return ret;
11060 		memcpy(data, ((char *)&val) + b_offset, b_count);
11061 		len -= b_count;
11062 		offset += b_count;
11063 		eeprom->len += b_count;
11064 	}
11065 
11066 	/* read bytes up to the last 4 byte boundary */
11067 	pd = &data[eeprom->len];
11068 	for (i = 0; i < (len - (len & 3)); i += 4) {
11069 		ret = tg3_nvram_read_be32(tp, offset + i, &val);
11070 		if (ret) {
11071 			eeprom->len += i;
11072 			return ret;
11073 		}
11074 		memcpy(pd + i, &val, 4);
11075 	}
11076 	eeprom->len += i;
11077 
11078 	if (len & 3) {
11079 		/* read last bytes not ending on 4 byte boundary */
11080 		pd = &data[eeprom->len];
11081 		b_count = len & 3;
11082 		b_offset = offset + len - b_count;
11083 		ret = tg3_nvram_read_be32(tp, b_offset, &val);
11084 		if (ret)
11085 			return ret;
11086 		memcpy(pd, &val, b_count);
11087 		eeprom->len += b_count;
11088 	}
11089 	return 0;
11090 }
11091 
11092 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11093 {
11094 	struct tg3 *tp = netdev_priv(dev);
11095 	int ret;
11096 	u32 offset, len, b_offset, odd_len;
11097 	u8 *buf;
11098 	__be32 start, end;
11099 
11100 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11101 		return -EAGAIN;
11102 
11103 	if (tg3_flag(tp, NO_NVRAM) ||
11104 	    eeprom->magic != TG3_EEPROM_MAGIC)
11105 		return -EINVAL;
11106 
11107 	offset = eeprom->offset;
11108 	len = eeprom->len;
11109 
11110 	if ((b_offset = (offset & 3))) {
11111 		/* adjustments to start on required 4 byte boundary */
11112 		ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
11113 		if (ret)
11114 			return ret;
11115 		len += b_offset;
11116 		offset &= ~3;
11117 		if (len < 4)
11118 			len = 4;
11119 	}
11120 
11121 	odd_len = 0;
11122 	if (len & 3) {
11123 		/* adjustments to end on required 4 byte boundary */
11124 		odd_len = 1;
11125 		len = (len + 3) & ~3;
11126 		ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
11127 		if (ret)
11128 			return ret;
11129 	}
11130 
11131 	buf = data;
11132 	if (b_offset || odd_len) {
11133 		buf = kmalloc(len, GFP_KERNEL);
11134 		if (!buf)
11135 			return -ENOMEM;
11136 		if (b_offset)
11137 			memcpy(buf, &start, 4);
11138 		if (odd_len)
11139 			memcpy(buf+len-4, &end, 4);
11140 		memcpy(buf + b_offset, data, eeprom->len);
11141 	}
11142 
11143 	ret = tg3_nvram_write_block(tp, offset, len, buf);
11144 
11145 	if (buf != data)
11146 		kfree(buf);
11147 
11148 	return ret;
11149 }
11150 
11151 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
11152 {
11153 	struct tg3 *tp = netdev_priv(dev);
11154 
11155 	if (tg3_flag(tp, USE_PHYLIB)) {
11156 		struct phy_device *phydev;
11157 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11158 			return -EAGAIN;
11159 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
11160 		return phy_ethtool_gset(phydev, cmd);
11161 	}
11162 
11163 	cmd->supported = (SUPPORTED_Autoneg);
11164 
11165 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
11166 		cmd->supported |= (SUPPORTED_1000baseT_Half |
11167 				   SUPPORTED_1000baseT_Full);
11168 
11169 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
11170 		cmd->supported |= (SUPPORTED_100baseT_Half |
11171 				  SUPPORTED_100baseT_Full |
11172 				  SUPPORTED_10baseT_Half |
11173 				  SUPPORTED_10baseT_Full |
11174 				  SUPPORTED_TP);
11175 		cmd->port = PORT_TP;
11176 	} else {
11177 		cmd->supported |= SUPPORTED_FIBRE;
11178 		cmd->port = PORT_FIBRE;
11179 	}
11180 
11181 	cmd->advertising = tp->link_config.advertising;
11182 	if (tg3_flag(tp, PAUSE_AUTONEG)) {
11183 		if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
11184 			if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
11185 				cmd->advertising |= ADVERTISED_Pause;
11186 			} else {
11187 				cmd->advertising |= ADVERTISED_Pause |
11188 						    ADVERTISED_Asym_Pause;
11189 			}
11190 		} else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
11191 			cmd->advertising |= ADVERTISED_Asym_Pause;
11192 		}
11193 	}
11194 	if (netif_running(dev) && tp->link_up) {
11195 		ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
11196 		cmd->duplex = tp->link_config.active_duplex;
11197 		cmd->lp_advertising = tp->link_config.rmt_adv;
11198 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
11199 			if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
11200 				cmd->eth_tp_mdix = ETH_TP_MDI_X;
11201 			else
11202 				cmd->eth_tp_mdix = ETH_TP_MDI;
11203 		}
11204 	} else {
11205 		ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
11206 		cmd->duplex = DUPLEX_UNKNOWN;
11207 		cmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
11208 	}
11209 	cmd->phy_address = tp->phy_addr;
11210 	cmd->transceiver = XCVR_INTERNAL;
11211 	cmd->autoneg = tp->link_config.autoneg;
11212 	cmd->maxtxpkt = 0;
11213 	cmd->maxrxpkt = 0;
11214 	return 0;
11215 }
11216 
11217 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
11218 {
11219 	struct tg3 *tp = netdev_priv(dev);
11220 	u32 speed = ethtool_cmd_speed(cmd);
11221 
11222 	if (tg3_flag(tp, USE_PHYLIB)) {
11223 		struct phy_device *phydev;
11224 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11225 			return -EAGAIN;
11226 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
11227 		return phy_ethtool_sset(phydev, cmd);
11228 	}
11229 
11230 	if (cmd->autoneg != AUTONEG_ENABLE &&
11231 	    cmd->autoneg != AUTONEG_DISABLE)
11232 		return -EINVAL;
11233 
11234 	if (cmd->autoneg == AUTONEG_DISABLE &&
11235 	    cmd->duplex != DUPLEX_FULL &&
11236 	    cmd->duplex != DUPLEX_HALF)
11237 		return -EINVAL;
11238 
11239 	if (cmd->autoneg == AUTONEG_ENABLE) {
11240 		u32 mask = ADVERTISED_Autoneg |
11241 			   ADVERTISED_Pause |
11242 			   ADVERTISED_Asym_Pause;
11243 
11244 		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
11245 			mask |= ADVERTISED_1000baseT_Half |
11246 				ADVERTISED_1000baseT_Full;
11247 
11248 		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
11249 			mask |= ADVERTISED_100baseT_Half |
11250 				ADVERTISED_100baseT_Full |
11251 				ADVERTISED_10baseT_Half |
11252 				ADVERTISED_10baseT_Full |
11253 				ADVERTISED_TP;
11254 		else
11255 			mask |= ADVERTISED_FIBRE;
11256 
11257 		if (cmd->advertising & ~mask)
11258 			return -EINVAL;
11259 
11260 		mask &= (ADVERTISED_1000baseT_Half |
11261 			 ADVERTISED_1000baseT_Full |
11262 			 ADVERTISED_100baseT_Half |
11263 			 ADVERTISED_100baseT_Full |
11264 			 ADVERTISED_10baseT_Half |
11265 			 ADVERTISED_10baseT_Full);
11266 
11267 		cmd->advertising &= mask;
11268 	} else {
11269 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
11270 			if (speed != SPEED_1000)
11271 				return -EINVAL;
11272 
11273 			if (cmd->duplex != DUPLEX_FULL)
11274 				return -EINVAL;
11275 		} else {
11276 			if (speed != SPEED_100 &&
11277 			    speed != SPEED_10)
11278 				return -EINVAL;
11279 		}
11280 	}
11281 
11282 	tg3_full_lock(tp, 0);
11283 
11284 	tp->link_config.autoneg = cmd->autoneg;
11285 	if (cmd->autoneg == AUTONEG_ENABLE) {
11286 		tp->link_config.advertising = (cmd->advertising |
11287 					      ADVERTISED_Autoneg);
11288 		tp->link_config.speed = SPEED_UNKNOWN;
11289 		tp->link_config.duplex = DUPLEX_UNKNOWN;
11290 	} else {
11291 		tp->link_config.advertising = 0;
11292 		tp->link_config.speed = speed;
11293 		tp->link_config.duplex = cmd->duplex;
11294 	}
11295 
11296 	if (netif_running(dev))
11297 		tg3_setup_phy(tp, 1);
11298 
11299 	tg3_full_unlock(tp);
11300 
11301 	return 0;
11302 }
11303 
11304 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
11305 {
11306 	struct tg3 *tp = netdev_priv(dev);
11307 
11308 	strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
11309 	strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
11310 	strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
11311 	strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
11312 }
11313 
11314 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
11315 {
11316 	struct tg3 *tp = netdev_priv(dev);
11317 
11318 	if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
11319 		wol->supported = WAKE_MAGIC;
11320 	else
11321 		wol->supported = 0;
11322 	wol->wolopts = 0;
11323 	if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
11324 		wol->wolopts = WAKE_MAGIC;
11325 	memset(&wol->sopass, 0, sizeof(wol->sopass));
11326 }
11327 
11328 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
11329 {
11330 	struct tg3 *tp = netdev_priv(dev);
11331 	struct device *dp = &tp->pdev->dev;
11332 
11333 	if (wol->wolopts & ~WAKE_MAGIC)
11334 		return -EINVAL;
11335 	if ((wol->wolopts & WAKE_MAGIC) &&
11336 	    !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
11337 		return -EINVAL;
11338 
11339 	device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
11340 
11341 	spin_lock_bh(&tp->lock);
11342 	if (device_may_wakeup(dp))
11343 		tg3_flag_set(tp, WOL_ENABLE);
11344 	else
11345 		tg3_flag_clear(tp, WOL_ENABLE);
11346 	spin_unlock_bh(&tp->lock);
11347 
11348 	return 0;
11349 }
11350 
11351 static u32 tg3_get_msglevel(struct net_device *dev)
11352 {
11353 	struct tg3 *tp = netdev_priv(dev);
11354 	return tp->msg_enable;
11355 }
11356 
11357 static void tg3_set_msglevel(struct net_device *dev, u32 value)
11358 {
11359 	struct tg3 *tp = netdev_priv(dev);
11360 	tp->msg_enable = value;
11361 }
11362 
11363 static int tg3_nway_reset(struct net_device *dev)
11364 {
11365 	struct tg3 *tp = netdev_priv(dev);
11366 	int r;
11367 
11368 	if (!netif_running(dev))
11369 		return -EAGAIN;
11370 
11371 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
11372 		return -EINVAL;
11373 
11374 	if (tg3_flag(tp, USE_PHYLIB)) {
11375 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11376 			return -EAGAIN;
11377 		r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
11378 	} else {
11379 		u32 bmcr;
11380 
11381 		spin_lock_bh(&tp->lock);
11382 		r = -EINVAL;
11383 		tg3_readphy(tp, MII_BMCR, &bmcr);
11384 		if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
11385 		    ((bmcr & BMCR_ANENABLE) ||
11386 		     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
11387 			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
11388 						   BMCR_ANENABLE);
11389 			r = 0;
11390 		}
11391 		spin_unlock_bh(&tp->lock);
11392 	}
11393 
11394 	return r;
11395 }
11396 
11397 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11398 {
11399 	struct tg3 *tp = netdev_priv(dev);
11400 
11401 	ering->rx_max_pending = tp->rx_std_ring_mask;
11402 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
11403 		ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
11404 	else
11405 		ering->rx_jumbo_max_pending = 0;
11406 
11407 	ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
11408 
11409 	ering->rx_pending = tp->rx_pending;
11410 	if (tg3_flag(tp, JUMBO_RING_ENABLE))
11411 		ering->rx_jumbo_pending = tp->rx_jumbo_pending;
11412 	else
11413 		ering->rx_jumbo_pending = 0;
11414 
11415 	ering->tx_pending = tp->napi[0].tx_pending;
11416 }
11417 
11418 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11419 {
11420 	struct tg3 *tp = netdev_priv(dev);
11421 	int i, irq_sync = 0, err = 0;
11422 
11423 	if ((ering->rx_pending > tp->rx_std_ring_mask) ||
11424 	    (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
11425 	    (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
11426 	    (ering->tx_pending <= MAX_SKB_FRAGS) ||
11427 	    (tg3_flag(tp, TSO_BUG) &&
11428 	     (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
11429 		return -EINVAL;
11430 
11431 	if (netif_running(dev)) {
11432 		tg3_phy_stop(tp);
11433 		tg3_netif_stop(tp);
11434 		irq_sync = 1;
11435 	}
11436 
11437 	tg3_full_lock(tp, irq_sync);
11438 
11439 	tp->rx_pending = ering->rx_pending;
11440 
11441 	if (tg3_flag(tp, MAX_RXPEND_64) &&
11442 	    tp->rx_pending > 63)
11443 		tp->rx_pending = 63;
11444 	tp->rx_jumbo_pending = ering->rx_jumbo_pending;
11445 
11446 	for (i = 0; i < tp->irq_max; i++)
11447 		tp->napi[i].tx_pending = ering->tx_pending;
11448 
11449 	if (netif_running(dev)) {
11450 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11451 		err = tg3_restart_hw(tp, 1);
11452 		if (!err)
11453 			tg3_netif_start(tp);
11454 	}
11455 
11456 	tg3_full_unlock(tp);
11457 
11458 	if (irq_sync && !err)
11459 		tg3_phy_start(tp);
11460 
11461 	return err;
11462 }
11463 
11464 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11465 {
11466 	struct tg3 *tp = netdev_priv(dev);
11467 
11468 	epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
11469 
11470 	if (tp->link_config.flowctrl & FLOW_CTRL_RX)
11471 		epause->rx_pause = 1;
11472 	else
11473 		epause->rx_pause = 0;
11474 
11475 	if (tp->link_config.flowctrl & FLOW_CTRL_TX)
11476 		epause->tx_pause = 1;
11477 	else
11478 		epause->tx_pause = 0;
11479 }
11480 
11481 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11482 {
11483 	struct tg3 *tp = netdev_priv(dev);
11484 	int err = 0;
11485 
11486 	if (tg3_flag(tp, USE_PHYLIB)) {
11487 		u32 newadv;
11488 		struct phy_device *phydev;
11489 
11490 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
11491 
11492 		if (!(phydev->supported & SUPPORTED_Pause) ||
11493 		    (!(phydev->supported & SUPPORTED_Asym_Pause) &&
11494 		     (epause->rx_pause != epause->tx_pause)))
11495 			return -EINVAL;
11496 
11497 		tp->link_config.flowctrl = 0;
11498 		if (epause->rx_pause) {
11499 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
11500 
11501 			if (epause->tx_pause) {
11502 				tp->link_config.flowctrl |= FLOW_CTRL_TX;
11503 				newadv = ADVERTISED_Pause;
11504 			} else
11505 				newadv = ADVERTISED_Pause |
11506 					 ADVERTISED_Asym_Pause;
11507 		} else if (epause->tx_pause) {
11508 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
11509 			newadv = ADVERTISED_Asym_Pause;
11510 		} else
11511 			newadv = 0;
11512 
11513 		if (epause->autoneg)
11514 			tg3_flag_set(tp, PAUSE_AUTONEG);
11515 		else
11516 			tg3_flag_clear(tp, PAUSE_AUTONEG);
11517 
11518 		if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
11519 			u32 oldadv = phydev->advertising &
11520 				     (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
11521 			if (oldadv != newadv) {
11522 				phydev->advertising &=
11523 					~(ADVERTISED_Pause |
11524 					  ADVERTISED_Asym_Pause);
11525 				phydev->advertising |= newadv;
11526 				if (phydev->autoneg) {
11527 					/*
11528 					 * Always renegotiate the link to
11529 					 * inform our link partner of our
11530 					 * flow control settings, even if the
11531 					 * flow control is forced.  Let
11532 					 * tg3_adjust_link() do the final
11533 					 * flow control setup.
11534 					 */
11535 					return phy_start_aneg(phydev);
11536 				}
11537 			}
11538 
11539 			if (!epause->autoneg)
11540 				tg3_setup_flow_control(tp, 0, 0);
11541 		} else {
11542 			tp->link_config.advertising &=
11543 					~(ADVERTISED_Pause |
11544 					  ADVERTISED_Asym_Pause);
11545 			tp->link_config.advertising |= newadv;
11546 		}
11547 	} else {
11548 		int irq_sync = 0;
11549 
11550 		if (netif_running(dev)) {
11551 			tg3_netif_stop(tp);
11552 			irq_sync = 1;
11553 		}
11554 
11555 		tg3_full_lock(tp, irq_sync);
11556 
11557 		if (epause->autoneg)
11558 			tg3_flag_set(tp, PAUSE_AUTONEG);
11559 		else
11560 			tg3_flag_clear(tp, PAUSE_AUTONEG);
11561 		if (epause->rx_pause)
11562 			tp->link_config.flowctrl |= FLOW_CTRL_RX;
11563 		else
11564 			tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
11565 		if (epause->tx_pause)
11566 			tp->link_config.flowctrl |= FLOW_CTRL_TX;
11567 		else
11568 			tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
11569 
11570 		if (netif_running(dev)) {
11571 			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11572 			err = tg3_restart_hw(tp, 1);
11573 			if (!err)
11574 				tg3_netif_start(tp);
11575 		}
11576 
11577 		tg3_full_unlock(tp);
11578 	}
11579 
11580 	return err;
11581 }
11582 
11583 static int tg3_get_sset_count(struct net_device *dev, int sset)
11584 {
11585 	switch (sset) {
11586 	case ETH_SS_TEST:
11587 		return TG3_NUM_TEST;
11588 	case ETH_SS_STATS:
11589 		return TG3_NUM_STATS;
11590 	default:
11591 		return -EOPNOTSUPP;
11592 	}
11593 }
11594 
11595 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
11596 			 u32 *rules __always_unused)
11597 {
11598 	struct tg3 *tp = netdev_priv(dev);
11599 
11600 	if (!tg3_flag(tp, SUPPORT_MSIX))
11601 		return -EOPNOTSUPP;
11602 
11603 	switch (info->cmd) {
11604 	case ETHTOOL_GRXRINGS:
11605 		if (netif_running(tp->dev))
11606 			info->data = tp->rxq_cnt;
11607 		else {
11608 			info->data = num_online_cpus();
11609 			if (info->data > TG3_RSS_MAX_NUM_QS)
11610 				info->data = TG3_RSS_MAX_NUM_QS;
11611 		}
11612 
11613 		/* The first interrupt vector only
11614 		 * handles link interrupts.
11615 		 */
11616 		info->data -= 1;
11617 		return 0;
11618 
11619 	default:
11620 		return -EOPNOTSUPP;
11621 	}
11622 }
11623 
11624 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
11625 {
11626 	u32 size = 0;
11627 	struct tg3 *tp = netdev_priv(dev);
11628 
11629 	if (tg3_flag(tp, SUPPORT_MSIX))
11630 		size = TG3_RSS_INDIR_TBL_SIZE;
11631 
11632 	return size;
11633 }
11634 
11635 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir)
11636 {
11637 	struct tg3 *tp = netdev_priv(dev);
11638 	int i;
11639 
11640 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11641 		indir[i] = tp->rss_ind_tbl[i];
11642 
11643 	return 0;
11644 }
11645 
11646 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir)
11647 {
11648 	struct tg3 *tp = netdev_priv(dev);
11649 	size_t i;
11650 
11651 	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11652 		tp->rss_ind_tbl[i] = indir[i];
11653 
11654 	if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
11655 		return 0;
11656 
11657 	/* It is legal to write the indirection
11658 	 * table while the device is running.
11659 	 */
11660 	tg3_full_lock(tp, 0);
11661 	tg3_rss_write_indir_tbl(tp);
11662 	tg3_full_unlock(tp);
11663 
11664 	return 0;
11665 }
11666 
11667 static void tg3_get_channels(struct net_device *dev,
11668 			     struct ethtool_channels *channel)
11669 {
11670 	struct tg3 *tp = netdev_priv(dev);
11671 	u32 deflt_qs = netif_get_num_default_rss_queues();
11672 
11673 	channel->max_rx = tp->rxq_max;
11674 	channel->max_tx = tp->txq_max;
11675 
11676 	if (netif_running(dev)) {
11677 		channel->rx_count = tp->rxq_cnt;
11678 		channel->tx_count = tp->txq_cnt;
11679 	} else {
11680 		if (tp->rxq_req)
11681 			channel->rx_count = tp->rxq_req;
11682 		else
11683 			channel->rx_count = min(deflt_qs, tp->rxq_max);
11684 
11685 		if (tp->txq_req)
11686 			channel->tx_count = tp->txq_req;
11687 		else
11688 			channel->tx_count = min(deflt_qs, tp->txq_max);
11689 	}
11690 }
11691 
11692 static int tg3_set_channels(struct net_device *dev,
11693 			    struct ethtool_channels *channel)
11694 {
11695 	struct tg3 *tp = netdev_priv(dev);
11696 
11697 	if (!tg3_flag(tp, SUPPORT_MSIX))
11698 		return -EOPNOTSUPP;
11699 
11700 	if (channel->rx_count > tp->rxq_max ||
11701 	    channel->tx_count > tp->txq_max)
11702 		return -EINVAL;
11703 
11704 	tp->rxq_req = channel->rx_count;
11705 	tp->txq_req = channel->tx_count;
11706 
11707 	if (!netif_running(dev))
11708 		return 0;
11709 
11710 	tg3_stop(tp);
11711 
11712 	tg3_carrier_off(tp);
11713 
11714 	tg3_start(tp, true, false, false);
11715 
11716 	return 0;
11717 }
11718 
11719 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
11720 {
11721 	switch (stringset) {
11722 	case ETH_SS_STATS:
11723 		memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
11724 		break;
11725 	case ETH_SS_TEST:
11726 		memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
11727 		break;
11728 	default:
11729 		WARN_ON(1);	/* we need a WARN() */
11730 		break;
11731 	}
11732 }
11733 
11734 static int tg3_set_phys_id(struct net_device *dev,
11735 			    enum ethtool_phys_id_state state)
11736 {
11737 	struct tg3 *tp = netdev_priv(dev);
11738 
11739 	if (!netif_running(tp->dev))
11740 		return -EAGAIN;
11741 
11742 	switch (state) {
11743 	case ETHTOOL_ID_ACTIVE:
11744 		return 1;	/* cycle on/off once per second */
11745 
11746 	case ETHTOOL_ID_ON:
11747 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11748 		     LED_CTRL_1000MBPS_ON |
11749 		     LED_CTRL_100MBPS_ON |
11750 		     LED_CTRL_10MBPS_ON |
11751 		     LED_CTRL_TRAFFIC_OVERRIDE |
11752 		     LED_CTRL_TRAFFIC_BLINK |
11753 		     LED_CTRL_TRAFFIC_LED);
11754 		break;
11755 
11756 	case ETHTOOL_ID_OFF:
11757 		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
11758 		     LED_CTRL_TRAFFIC_OVERRIDE);
11759 		break;
11760 
11761 	case ETHTOOL_ID_INACTIVE:
11762 		tw32(MAC_LED_CTRL, tp->led_ctrl);
11763 		break;
11764 	}
11765 
11766 	return 0;
11767 }
11768 
11769 static void tg3_get_ethtool_stats(struct net_device *dev,
11770 				   struct ethtool_stats *estats, u64 *tmp_stats)
11771 {
11772 	struct tg3 *tp = netdev_priv(dev);
11773 
11774 	if (tp->hw_stats)
11775 		tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
11776 	else
11777 		memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
11778 }
11779 
11780 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
11781 {
11782 	int i;
11783 	__be32 *buf;
11784 	u32 offset = 0, len = 0;
11785 	u32 magic, val;
11786 
11787 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
11788 		return NULL;
11789 
11790 	if (magic == TG3_EEPROM_MAGIC) {
11791 		for (offset = TG3_NVM_DIR_START;
11792 		     offset < TG3_NVM_DIR_END;
11793 		     offset += TG3_NVM_DIRENT_SIZE) {
11794 			if (tg3_nvram_read(tp, offset, &val))
11795 				return NULL;
11796 
11797 			if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
11798 			    TG3_NVM_DIRTYPE_EXTVPD)
11799 				break;
11800 		}
11801 
11802 		if (offset != TG3_NVM_DIR_END) {
11803 			len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
11804 			if (tg3_nvram_read(tp, offset + 4, &offset))
11805 				return NULL;
11806 
11807 			offset = tg3_nvram_logical_addr(tp, offset);
11808 		}
11809 	}
11810 
11811 	if (!offset || !len) {
11812 		offset = TG3_NVM_VPD_OFF;
11813 		len = TG3_NVM_VPD_LEN;
11814 	}
11815 
11816 	buf = kmalloc(len, GFP_KERNEL);
11817 	if (buf == NULL)
11818 		return NULL;
11819 
11820 	if (magic == TG3_EEPROM_MAGIC) {
11821 		for (i = 0; i < len; i += 4) {
11822 			/* The data is in little-endian format in NVRAM.
11823 			 * Use the big-endian read routines to preserve
11824 			 * the byte order as it exists in NVRAM.
11825 			 */
11826 			if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
11827 				goto error;
11828 		}
11829 	} else {
11830 		u8 *ptr;
11831 		ssize_t cnt;
11832 		unsigned int pos = 0;
11833 
11834 		ptr = (u8 *)&buf[0];
11835 		for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
11836 			cnt = pci_read_vpd(tp->pdev, pos,
11837 					   len - pos, ptr);
11838 			if (cnt == -ETIMEDOUT || cnt == -EINTR)
11839 				cnt = 0;
11840 			else if (cnt < 0)
11841 				goto error;
11842 		}
11843 		if (pos != len)
11844 			goto error;
11845 	}
11846 
11847 	*vpdlen = len;
11848 
11849 	return buf;
11850 
11851 error:
11852 	kfree(buf);
11853 	return NULL;
11854 }
11855 
11856 #define NVRAM_TEST_SIZE 0x100
11857 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE	0x14
11858 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE	0x18
11859 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE	0x1c
11860 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE	0x20
11861 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE	0x24
11862 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE	0x50
11863 #define NVRAM_SELFBOOT_HW_SIZE 0x20
11864 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
11865 
11866 static int tg3_test_nvram(struct tg3 *tp)
11867 {
11868 	u32 csum, magic, len;
11869 	__be32 *buf;
11870 	int i, j, k, err = 0, size;
11871 
11872 	if (tg3_flag(tp, NO_NVRAM))
11873 		return 0;
11874 
11875 	if (tg3_nvram_read(tp, 0, &magic) != 0)
11876 		return -EIO;
11877 
11878 	if (magic == TG3_EEPROM_MAGIC)
11879 		size = NVRAM_TEST_SIZE;
11880 	else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
11881 		if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
11882 		    TG3_EEPROM_SB_FORMAT_1) {
11883 			switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
11884 			case TG3_EEPROM_SB_REVISION_0:
11885 				size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
11886 				break;
11887 			case TG3_EEPROM_SB_REVISION_2:
11888 				size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
11889 				break;
11890 			case TG3_EEPROM_SB_REVISION_3:
11891 				size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
11892 				break;
11893 			case TG3_EEPROM_SB_REVISION_4:
11894 				size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
11895 				break;
11896 			case TG3_EEPROM_SB_REVISION_5:
11897 				size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
11898 				break;
11899 			case TG3_EEPROM_SB_REVISION_6:
11900 				size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
11901 				break;
11902 			default:
11903 				return -EIO;
11904 			}
11905 		} else
11906 			return 0;
11907 	} else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
11908 		size = NVRAM_SELFBOOT_HW_SIZE;
11909 	else
11910 		return -EIO;
11911 
11912 	buf = kmalloc(size, GFP_KERNEL);
11913 	if (buf == NULL)
11914 		return -ENOMEM;
11915 
11916 	err = -EIO;
11917 	for (i = 0, j = 0; i < size; i += 4, j++) {
11918 		err = tg3_nvram_read_be32(tp, i, &buf[j]);
11919 		if (err)
11920 			break;
11921 	}
11922 	if (i < size)
11923 		goto out;
11924 
11925 	/* Selfboot format */
11926 	magic = be32_to_cpu(buf[0]);
11927 	if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
11928 	    TG3_EEPROM_MAGIC_FW) {
11929 		u8 *buf8 = (u8 *) buf, csum8 = 0;
11930 
11931 		if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
11932 		    TG3_EEPROM_SB_REVISION_2) {
11933 			/* For rev 2, the csum doesn't include the MBA. */
11934 			for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
11935 				csum8 += buf8[i];
11936 			for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
11937 				csum8 += buf8[i];
11938 		} else {
11939 			for (i = 0; i < size; i++)
11940 				csum8 += buf8[i];
11941 		}
11942 
11943 		if (csum8 == 0) {
11944 			err = 0;
11945 			goto out;
11946 		}
11947 
11948 		err = -EIO;
11949 		goto out;
11950 	}
11951 
11952 	if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
11953 	    TG3_EEPROM_MAGIC_HW) {
11954 		u8 data[NVRAM_SELFBOOT_DATA_SIZE];
11955 		u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
11956 		u8 *buf8 = (u8 *) buf;
11957 
11958 		/* Separate the parity bits and the data bytes.  */
11959 		for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
11960 			if ((i == 0) || (i == 8)) {
11961 				int l;
11962 				u8 msk;
11963 
11964 				for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
11965 					parity[k++] = buf8[i] & msk;
11966 				i++;
11967 			} else if (i == 16) {
11968 				int l;
11969 				u8 msk;
11970 
11971 				for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
11972 					parity[k++] = buf8[i] & msk;
11973 				i++;
11974 
11975 				for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
11976 					parity[k++] = buf8[i] & msk;
11977 				i++;
11978 			}
11979 			data[j++] = buf8[i];
11980 		}
11981 
11982 		err = -EIO;
11983 		for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
11984 			u8 hw8 = hweight8(data[i]);
11985 
11986 			if ((hw8 & 0x1) && parity[i])
11987 				goto out;
11988 			else if (!(hw8 & 0x1) && !parity[i])
11989 				goto out;
11990 		}
11991 		err = 0;
11992 		goto out;
11993 	}
11994 
11995 	err = -EIO;
11996 
11997 	/* Bootstrap checksum at offset 0x10 */
11998 	csum = calc_crc((unsigned char *) buf, 0x10);
11999 	if (csum != le32_to_cpu(buf[0x10/4]))
12000 		goto out;
12001 
12002 	/* Manufacturing block starts at offset 0x74, checksum at 0xfc */
12003 	csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
12004 	if (csum != le32_to_cpu(buf[0xfc/4]))
12005 		goto out;
12006 
12007 	kfree(buf);
12008 
12009 	buf = tg3_vpd_readblock(tp, &len);
12010 	if (!buf)
12011 		return -ENOMEM;
12012 
12013 	i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
12014 	if (i > 0) {
12015 		j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
12016 		if (j < 0)
12017 			goto out;
12018 
12019 		if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
12020 			goto out;
12021 
12022 		i += PCI_VPD_LRDT_TAG_SIZE;
12023 		j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
12024 					      PCI_VPD_RO_KEYWORD_CHKSUM);
12025 		if (j > 0) {
12026 			u8 csum8 = 0;
12027 
12028 			j += PCI_VPD_INFO_FLD_HDR_SIZE;
12029 
12030 			for (i = 0; i <= j; i++)
12031 				csum8 += ((u8 *)buf)[i];
12032 
12033 			if (csum8)
12034 				goto out;
12035 		}
12036 	}
12037 
12038 	err = 0;
12039 
12040 out:
12041 	kfree(buf);
12042 	return err;
12043 }
12044 
12045 #define TG3_SERDES_TIMEOUT_SEC	2
12046 #define TG3_COPPER_TIMEOUT_SEC	6
12047 
12048 static int tg3_test_link(struct tg3 *tp)
12049 {
12050 	int i, max;
12051 
12052 	if (!netif_running(tp->dev))
12053 		return -ENODEV;
12054 
12055 	if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
12056 		max = TG3_SERDES_TIMEOUT_SEC;
12057 	else
12058 		max = TG3_COPPER_TIMEOUT_SEC;
12059 
12060 	for (i = 0; i < max; i++) {
12061 		if (tp->link_up)
12062 			return 0;
12063 
12064 		if (msleep_interruptible(1000))
12065 			break;
12066 	}
12067 
12068 	return -EIO;
12069 }
12070 
12071 /* Only test the commonly used registers */
12072 static int tg3_test_registers(struct tg3 *tp)
12073 {
12074 	int i, is_5705, is_5750;
12075 	u32 offset, read_mask, write_mask, val, save_val, read_val;
12076 	static struct {
12077 		u16 offset;
12078 		u16 flags;
12079 #define TG3_FL_5705	0x1
12080 #define TG3_FL_NOT_5705	0x2
12081 #define TG3_FL_NOT_5788	0x4
12082 #define TG3_FL_NOT_5750	0x8
12083 		u32 read_mask;
12084 		u32 write_mask;
12085 	} reg_tbl[] = {
12086 		/* MAC Control Registers */
12087 		{ MAC_MODE, TG3_FL_NOT_5705,
12088 			0x00000000, 0x00ef6f8c },
12089 		{ MAC_MODE, TG3_FL_5705,
12090 			0x00000000, 0x01ef6b8c },
12091 		{ MAC_STATUS, TG3_FL_NOT_5705,
12092 			0x03800107, 0x00000000 },
12093 		{ MAC_STATUS, TG3_FL_5705,
12094 			0x03800100, 0x00000000 },
12095 		{ MAC_ADDR_0_HIGH, 0x0000,
12096 			0x00000000, 0x0000ffff },
12097 		{ MAC_ADDR_0_LOW, 0x0000,
12098 			0x00000000, 0xffffffff },
12099 		{ MAC_RX_MTU_SIZE, 0x0000,
12100 			0x00000000, 0x0000ffff },
12101 		{ MAC_TX_MODE, 0x0000,
12102 			0x00000000, 0x00000070 },
12103 		{ MAC_TX_LENGTHS, 0x0000,
12104 			0x00000000, 0x00003fff },
12105 		{ MAC_RX_MODE, TG3_FL_NOT_5705,
12106 			0x00000000, 0x000007fc },
12107 		{ MAC_RX_MODE, TG3_FL_5705,
12108 			0x00000000, 0x000007dc },
12109 		{ MAC_HASH_REG_0, 0x0000,
12110 			0x00000000, 0xffffffff },
12111 		{ MAC_HASH_REG_1, 0x0000,
12112 			0x00000000, 0xffffffff },
12113 		{ MAC_HASH_REG_2, 0x0000,
12114 			0x00000000, 0xffffffff },
12115 		{ MAC_HASH_REG_3, 0x0000,
12116 			0x00000000, 0xffffffff },
12117 
12118 		/* Receive Data and Receive BD Initiator Control Registers. */
12119 		{ RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
12120 			0x00000000, 0xffffffff },
12121 		{ RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
12122 			0x00000000, 0xffffffff },
12123 		{ RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
12124 			0x00000000, 0x00000003 },
12125 		{ RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
12126 			0x00000000, 0xffffffff },
12127 		{ RCVDBDI_STD_BD+0, 0x0000,
12128 			0x00000000, 0xffffffff },
12129 		{ RCVDBDI_STD_BD+4, 0x0000,
12130 			0x00000000, 0xffffffff },
12131 		{ RCVDBDI_STD_BD+8, 0x0000,
12132 			0x00000000, 0xffff0002 },
12133 		{ RCVDBDI_STD_BD+0xc, 0x0000,
12134 			0x00000000, 0xffffffff },
12135 
12136 		/* Receive BD Initiator Control Registers. */
12137 		{ RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
12138 			0x00000000, 0xffffffff },
12139 		{ RCVBDI_STD_THRESH, TG3_FL_5705,
12140 			0x00000000, 0x000003ff },
12141 		{ RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
12142 			0x00000000, 0xffffffff },
12143 
12144 		/* Host Coalescing Control Registers. */
12145 		{ HOSTCC_MODE, TG3_FL_NOT_5705,
12146 			0x00000000, 0x00000004 },
12147 		{ HOSTCC_MODE, TG3_FL_5705,
12148 			0x00000000, 0x000000f6 },
12149 		{ HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
12150 			0x00000000, 0xffffffff },
12151 		{ HOSTCC_RXCOL_TICKS, TG3_FL_5705,
12152 			0x00000000, 0x000003ff },
12153 		{ HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
12154 			0x00000000, 0xffffffff },
12155 		{ HOSTCC_TXCOL_TICKS, TG3_FL_5705,
12156 			0x00000000, 0x000003ff },
12157 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
12158 			0x00000000, 0xffffffff },
12159 		{ HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
12160 			0x00000000, 0x000000ff },
12161 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
12162 			0x00000000, 0xffffffff },
12163 		{ HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
12164 			0x00000000, 0x000000ff },
12165 		{ HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
12166 			0x00000000, 0xffffffff },
12167 		{ HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
12168 			0x00000000, 0xffffffff },
12169 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
12170 			0x00000000, 0xffffffff },
12171 		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
12172 			0x00000000, 0x000000ff },
12173 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
12174 			0x00000000, 0xffffffff },
12175 		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
12176 			0x00000000, 0x000000ff },
12177 		{ HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
12178 			0x00000000, 0xffffffff },
12179 		{ HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
12180 			0x00000000, 0xffffffff },
12181 		{ HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
12182 			0x00000000, 0xffffffff },
12183 		{ HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
12184 			0x00000000, 0xffffffff },
12185 		{ HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
12186 			0x00000000, 0xffffffff },
12187 		{ HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
12188 			0xffffffff, 0x00000000 },
12189 		{ HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
12190 			0xffffffff, 0x00000000 },
12191 
12192 		/* Buffer Manager Control Registers. */
12193 		{ BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
12194 			0x00000000, 0x007fff80 },
12195 		{ BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
12196 			0x00000000, 0x007fffff },
12197 		{ BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
12198 			0x00000000, 0x0000003f },
12199 		{ BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
12200 			0x00000000, 0x000001ff },
12201 		{ BUFMGR_MB_HIGH_WATER, 0x0000,
12202 			0x00000000, 0x000001ff },
12203 		{ BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
12204 			0xffffffff, 0x00000000 },
12205 		{ BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
12206 			0xffffffff, 0x00000000 },
12207 
12208 		/* Mailbox Registers */
12209 		{ GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
12210 			0x00000000, 0x000001ff },
12211 		{ GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
12212 			0x00000000, 0x000001ff },
12213 		{ GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
12214 			0x00000000, 0x000007ff },
12215 		{ GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
12216 			0x00000000, 0x000001ff },
12217 
12218 		{ 0xffff, 0x0000, 0x00000000, 0x00000000 },
12219 	};
12220 
12221 	is_5705 = is_5750 = 0;
12222 	if (tg3_flag(tp, 5705_PLUS)) {
12223 		is_5705 = 1;
12224 		if (tg3_flag(tp, 5750_PLUS))
12225 			is_5750 = 1;
12226 	}
12227 
12228 	for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
12229 		if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
12230 			continue;
12231 
12232 		if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
12233 			continue;
12234 
12235 		if (tg3_flag(tp, IS_5788) &&
12236 		    (reg_tbl[i].flags & TG3_FL_NOT_5788))
12237 			continue;
12238 
12239 		if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
12240 			continue;
12241 
12242 		offset = (u32) reg_tbl[i].offset;
12243 		read_mask = reg_tbl[i].read_mask;
12244 		write_mask = reg_tbl[i].write_mask;
12245 
12246 		/* Save the original register content */
12247 		save_val = tr32(offset);
12248 
12249 		/* Determine the read-only value. */
12250 		read_val = save_val & read_mask;
12251 
12252 		/* Write zero to the register, then make sure the read-only bits
12253 		 * are not changed and the read/write bits are all zeros.
12254 		 */
12255 		tw32(offset, 0);
12256 
12257 		val = tr32(offset);
12258 
12259 		/* Test the read-only and read/write bits. */
12260 		if (((val & read_mask) != read_val) || (val & write_mask))
12261 			goto out;
12262 
12263 		/* Write ones to all the bits defined by RdMask and WrMask, then
12264 		 * make sure the read-only bits are not changed and the
12265 		 * read/write bits are all ones.
12266 		 */
12267 		tw32(offset, read_mask | write_mask);
12268 
12269 		val = tr32(offset);
12270 
12271 		/* Test the read-only bits. */
12272 		if ((val & read_mask) != read_val)
12273 			goto out;
12274 
12275 		/* Test the read/write bits. */
12276 		if ((val & write_mask) != write_mask)
12277 			goto out;
12278 
12279 		tw32(offset, save_val);
12280 	}
12281 
12282 	return 0;
12283 
12284 out:
12285 	if (netif_msg_hw(tp))
12286 		netdev_err(tp->dev,
12287 			   "Register test failed at offset %x\n", offset);
12288 	tw32(offset, save_val);
12289 	return -EIO;
12290 }
12291 
12292 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
12293 {
12294 	static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
12295 	int i;
12296 	u32 j;
12297 
12298 	for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
12299 		for (j = 0; j < len; j += 4) {
12300 			u32 val;
12301 
12302 			tg3_write_mem(tp, offset + j, test_pattern[i]);
12303 			tg3_read_mem(tp, offset + j, &val);
12304 			if (val != test_pattern[i])
12305 				return -EIO;
12306 		}
12307 	}
12308 	return 0;
12309 }
12310 
12311 static int tg3_test_memory(struct tg3 *tp)
12312 {
12313 	static struct mem_entry {
12314 		u32 offset;
12315 		u32 len;
12316 	} mem_tbl_570x[] = {
12317 		{ 0x00000000, 0x00b50},
12318 		{ 0x00002000, 0x1c000},
12319 		{ 0xffffffff, 0x00000}
12320 	}, mem_tbl_5705[] = {
12321 		{ 0x00000100, 0x0000c},
12322 		{ 0x00000200, 0x00008},
12323 		{ 0x00004000, 0x00800},
12324 		{ 0x00006000, 0x01000},
12325 		{ 0x00008000, 0x02000},
12326 		{ 0x00010000, 0x0e000},
12327 		{ 0xffffffff, 0x00000}
12328 	}, mem_tbl_5755[] = {
12329 		{ 0x00000200, 0x00008},
12330 		{ 0x00004000, 0x00800},
12331 		{ 0x00006000, 0x00800},
12332 		{ 0x00008000, 0x02000},
12333 		{ 0x00010000, 0x0c000},
12334 		{ 0xffffffff, 0x00000}
12335 	}, mem_tbl_5906[] = {
12336 		{ 0x00000200, 0x00008},
12337 		{ 0x00004000, 0x00400},
12338 		{ 0x00006000, 0x00400},
12339 		{ 0x00008000, 0x01000},
12340 		{ 0x00010000, 0x01000},
12341 		{ 0xffffffff, 0x00000}
12342 	}, mem_tbl_5717[] = {
12343 		{ 0x00000200, 0x00008},
12344 		{ 0x00010000, 0x0a000},
12345 		{ 0x00020000, 0x13c00},
12346 		{ 0xffffffff, 0x00000}
12347 	}, mem_tbl_57765[] = {
12348 		{ 0x00000200, 0x00008},
12349 		{ 0x00004000, 0x00800},
12350 		{ 0x00006000, 0x09800},
12351 		{ 0x00010000, 0x0a000},
12352 		{ 0xffffffff, 0x00000}
12353 	};
12354 	struct mem_entry *mem_tbl;
12355 	int err = 0;
12356 	int i;
12357 
12358 	if (tg3_flag(tp, 5717_PLUS))
12359 		mem_tbl = mem_tbl_5717;
12360 	else if (tg3_flag(tp, 57765_CLASS))
12361 		mem_tbl = mem_tbl_57765;
12362 	else if (tg3_flag(tp, 5755_PLUS))
12363 		mem_tbl = mem_tbl_5755;
12364 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
12365 		mem_tbl = mem_tbl_5906;
12366 	else if (tg3_flag(tp, 5705_PLUS))
12367 		mem_tbl = mem_tbl_5705;
12368 	else
12369 		mem_tbl = mem_tbl_570x;
12370 
12371 	for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
12372 		err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
12373 		if (err)
12374 			break;
12375 	}
12376 
12377 	return err;
12378 }
12379 
12380 #define TG3_TSO_MSS		500
12381 
12382 #define TG3_TSO_IP_HDR_LEN	20
12383 #define TG3_TSO_TCP_HDR_LEN	20
12384 #define TG3_TSO_TCP_OPT_LEN	12
12385 
12386 static const u8 tg3_tso_header[] = {
12387 0x08, 0x00,
12388 0x45, 0x00, 0x00, 0x00,
12389 0x00, 0x00, 0x40, 0x00,
12390 0x40, 0x06, 0x00, 0x00,
12391 0x0a, 0x00, 0x00, 0x01,
12392 0x0a, 0x00, 0x00, 0x02,
12393 0x0d, 0x00, 0xe0, 0x00,
12394 0x00, 0x00, 0x01, 0x00,
12395 0x00, 0x00, 0x02, 0x00,
12396 0x80, 0x10, 0x10, 0x00,
12397 0x14, 0x09, 0x00, 0x00,
12398 0x01, 0x01, 0x08, 0x0a,
12399 0x11, 0x11, 0x11, 0x11,
12400 0x11, 0x11, 0x11, 0x11,
12401 };
12402 
12403 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
12404 {
12405 	u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
12406 	u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
12407 	u32 budget;
12408 	struct sk_buff *skb;
12409 	u8 *tx_data, *rx_data;
12410 	dma_addr_t map;
12411 	int num_pkts, tx_len, rx_len, i, err;
12412 	struct tg3_rx_buffer_desc *desc;
12413 	struct tg3_napi *tnapi, *rnapi;
12414 	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
12415 
12416 	tnapi = &tp->napi[0];
12417 	rnapi = &tp->napi[0];
12418 	if (tp->irq_cnt > 1) {
12419 		if (tg3_flag(tp, ENABLE_RSS))
12420 			rnapi = &tp->napi[1];
12421 		if (tg3_flag(tp, ENABLE_TSS))
12422 			tnapi = &tp->napi[1];
12423 	}
12424 	coal_now = tnapi->coal_now | rnapi->coal_now;
12425 
12426 	err = -EIO;
12427 
12428 	tx_len = pktsz;
12429 	skb = netdev_alloc_skb(tp->dev, tx_len);
12430 	if (!skb)
12431 		return -ENOMEM;
12432 
12433 	tx_data = skb_put(skb, tx_len);
12434 	memcpy(tx_data, tp->dev->dev_addr, 6);
12435 	memset(tx_data + 6, 0x0, 8);
12436 
12437 	tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
12438 
12439 	if (tso_loopback) {
12440 		struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
12441 
12442 		u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
12443 			      TG3_TSO_TCP_OPT_LEN;
12444 
12445 		memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
12446 		       sizeof(tg3_tso_header));
12447 		mss = TG3_TSO_MSS;
12448 
12449 		val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
12450 		num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
12451 
12452 		/* Set the total length field in the IP header */
12453 		iph->tot_len = htons((u16)(mss + hdr_len));
12454 
12455 		base_flags = (TXD_FLAG_CPU_PRE_DMA |
12456 			      TXD_FLAG_CPU_POST_DMA);
12457 
12458 		if (tg3_flag(tp, HW_TSO_1) ||
12459 		    tg3_flag(tp, HW_TSO_2) ||
12460 		    tg3_flag(tp, HW_TSO_3)) {
12461 			struct tcphdr *th;
12462 			val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
12463 			th = (struct tcphdr *)&tx_data[val];
12464 			th->check = 0;
12465 		} else
12466 			base_flags |= TXD_FLAG_TCPUDP_CSUM;
12467 
12468 		if (tg3_flag(tp, HW_TSO_3)) {
12469 			mss |= (hdr_len & 0xc) << 12;
12470 			if (hdr_len & 0x10)
12471 				base_flags |= 0x00000010;
12472 			base_flags |= (hdr_len & 0x3e0) << 5;
12473 		} else if (tg3_flag(tp, HW_TSO_2))
12474 			mss |= hdr_len << 9;
12475 		else if (tg3_flag(tp, HW_TSO_1) ||
12476 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
12477 			mss |= (TG3_TSO_TCP_OPT_LEN << 9);
12478 		} else {
12479 			base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
12480 		}
12481 
12482 		data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
12483 	} else {
12484 		num_pkts = 1;
12485 		data_off = ETH_HLEN;
12486 
12487 		if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
12488 		    tx_len > VLAN_ETH_FRAME_LEN)
12489 			base_flags |= TXD_FLAG_JMB_PKT;
12490 	}
12491 
12492 	for (i = data_off; i < tx_len; i++)
12493 		tx_data[i] = (u8) (i & 0xff);
12494 
12495 	map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
12496 	if (pci_dma_mapping_error(tp->pdev, map)) {
12497 		dev_kfree_skb(skb);
12498 		return -EIO;
12499 	}
12500 
12501 	val = tnapi->tx_prod;
12502 	tnapi->tx_buffers[val].skb = skb;
12503 	dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
12504 
12505 	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
12506 	       rnapi->coal_now);
12507 
12508 	udelay(10);
12509 
12510 	rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
12511 
12512 	budget = tg3_tx_avail(tnapi);
12513 	if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
12514 			    base_flags | TXD_FLAG_END, mss, 0)) {
12515 		tnapi->tx_buffers[val].skb = NULL;
12516 		dev_kfree_skb(skb);
12517 		return -EIO;
12518 	}
12519 
12520 	tnapi->tx_prod++;
12521 
12522 	/* Sync BD data before updating mailbox */
12523 	wmb();
12524 
12525 	tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
12526 	tr32_mailbox(tnapi->prodmbox);
12527 
12528 	udelay(10);
12529 
12530 	/* 350 usec to allow enough time on some 10/100 Mbps devices.  */
12531 	for (i = 0; i < 35; i++) {
12532 		tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
12533 		       coal_now);
12534 
12535 		udelay(10);
12536 
12537 		tx_idx = tnapi->hw_status->idx[0].tx_consumer;
12538 		rx_idx = rnapi->hw_status->idx[0].rx_producer;
12539 		if ((tx_idx == tnapi->tx_prod) &&
12540 		    (rx_idx == (rx_start_idx + num_pkts)))
12541 			break;
12542 	}
12543 
12544 	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
12545 	dev_kfree_skb(skb);
12546 
12547 	if (tx_idx != tnapi->tx_prod)
12548 		goto out;
12549 
12550 	if (rx_idx != rx_start_idx + num_pkts)
12551 		goto out;
12552 
12553 	val = data_off;
12554 	while (rx_idx != rx_start_idx) {
12555 		desc = &rnapi->rx_rcb[rx_start_idx++];
12556 		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
12557 		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
12558 
12559 		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
12560 		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
12561 			goto out;
12562 
12563 		rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
12564 			 - ETH_FCS_LEN;
12565 
12566 		if (!tso_loopback) {
12567 			if (rx_len != tx_len)
12568 				goto out;
12569 
12570 			if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
12571 				if (opaque_key != RXD_OPAQUE_RING_STD)
12572 					goto out;
12573 			} else {
12574 				if (opaque_key != RXD_OPAQUE_RING_JUMBO)
12575 					goto out;
12576 			}
12577 		} else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
12578 			   (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
12579 			    >> RXD_TCPCSUM_SHIFT != 0xffff) {
12580 			goto out;
12581 		}
12582 
12583 		if (opaque_key == RXD_OPAQUE_RING_STD) {
12584 			rx_data = tpr->rx_std_buffers[desc_idx].data;
12585 			map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
12586 					     mapping);
12587 		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
12588 			rx_data = tpr->rx_jmb_buffers[desc_idx].data;
12589 			map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
12590 					     mapping);
12591 		} else
12592 			goto out;
12593 
12594 		pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
12595 					    PCI_DMA_FROMDEVICE);
12596 
12597 		rx_data += TG3_RX_OFFSET(tp);
12598 		for (i = data_off; i < rx_len; i++, val++) {
12599 			if (*(rx_data + i) != (u8) (val & 0xff))
12600 				goto out;
12601 		}
12602 	}
12603 
12604 	err = 0;
12605 
12606 	/* tg3_free_rings will unmap and free the rx_data */
12607 out:
12608 	return err;
12609 }
12610 
12611 #define TG3_STD_LOOPBACK_FAILED		1
12612 #define TG3_JMB_LOOPBACK_FAILED		2
12613 #define TG3_TSO_LOOPBACK_FAILED		4
12614 #define TG3_LOOPBACK_FAILED \
12615 	(TG3_STD_LOOPBACK_FAILED | \
12616 	 TG3_JMB_LOOPBACK_FAILED | \
12617 	 TG3_TSO_LOOPBACK_FAILED)
12618 
12619 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
12620 {
12621 	int err = -EIO;
12622 	u32 eee_cap;
12623 	u32 jmb_pkt_sz = 9000;
12624 
12625 	if (tp->dma_limit)
12626 		jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
12627 
12628 	eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
12629 	tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
12630 
12631 	if (!netif_running(tp->dev)) {
12632 		data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
12633 		data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
12634 		if (do_extlpbk)
12635 			data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
12636 		goto done;
12637 	}
12638 
12639 	err = tg3_reset_hw(tp, 1);
12640 	if (err) {
12641 		data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
12642 		data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
12643 		if (do_extlpbk)
12644 			data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
12645 		goto done;
12646 	}
12647 
12648 	if (tg3_flag(tp, ENABLE_RSS)) {
12649 		int i;
12650 
12651 		/* Reroute all rx packets to the 1st queue */
12652 		for (i = MAC_RSS_INDIR_TBL_0;
12653 		     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
12654 			tw32(i, 0x0);
12655 	}
12656 
12657 	/* HW errata - mac loopback fails in some cases on 5780.
12658 	 * Normal traffic and PHY loopback are not affected by
12659 	 * errata.  Also, the MAC loopback test is deprecated for
12660 	 * all newer ASIC revisions.
12661 	 */
12662 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
12663 	    !tg3_flag(tp, CPMU_PRESENT)) {
12664 		tg3_mac_loopback(tp, true);
12665 
12666 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12667 			data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
12668 
12669 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12670 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12671 			data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
12672 
12673 		tg3_mac_loopback(tp, false);
12674 	}
12675 
12676 	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
12677 	    !tg3_flag(tp, USE_PHYLIB)) {
12678 		int i;
12679 
12680 		tg3_phy_lpbk_set(tp, 0, false);
12681 
12682 		/* Wait for link */
12683 		for (i = 0; i < 100; i++) {
12684 			if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
12685 				break;
12686 			mdelay(1);
12687 		}
12688 
12689 		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12690 			data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
12691 		if (tg3_flag(tp, TSO_CAPABLE) &&
12692 		    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12693 			data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
12694 		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12695 		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12696 			data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
12697 
12698 		if (do_extlpbk) {
12699 			tg3_phy_lpbk_set(tp, 0, true);
12700 
12701 			/* All link indications report up, but the hardware
12702 			 * isn't really ready for about 20 msec.  Double it
12703 			 * to be sure.
12704 			 */
12705 			mdelay(40);
12706 
12707 			if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12708 				data[TG3_EXT_LOOPB_TEST] |=
12709 							TG3_STD_LOOPBACK_FAILED;
12710 			if (tg3_flag(tp, TSO_CAPABLE) &&
12711 			    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12712 				data[TG3_EXT_LOOPB_TEST] |=
12713 							TG3_TSO_LOOPBACK_FAILED;
12714 			if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12715 			    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12716 				data[TG3_EXT_LOOPB_TEST] |=
12717 							TG3_JMB_LOOPBACK_FAILED;
12718 		}
12719 
12720 		/* Re-enable gphy autopowerdown. */
12721 		if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
12722 			tg3_phy_toggle_apd(tp, true);
12723 	}
12724 
12725 	err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
12726 	       data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
12727 
12728 done:
12729 	tp->phy_flags |= eee_cap;
12730 
12731 	return err;
12732 }
12733 
12734 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
12735 			  u64 *data)
12736 {
12737 	struct tg3 *tp = netdev_priv(dev);
12738 	bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
12739 
12740 	if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
12741 	    tg3_power_up(tp)) {
12742 		etest->flags |= ETH_TEST_FL_FAILED;
12743 		memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
12744 		return;
12745 	}
12746 
12747 	memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
12748 
12749 	if (tg3_test_nvram(tp) != 0) {
12750 		etest->flags |= ETH_TEST_FL_FAILED;
12751 		data[TG3_NVRAM_TEST] = 1;
12752 	}
12753 	if (!doextlpbk && tg3_test_link(tp)) {
12754 		etest->flags |= ETH_TEST_FL_FAILED;
12755 		data[TG3_LINK_TEST] = 1;
12756 	}
12757 	if (etest->flags & ETH_TEST_FL_OFFLINE) {
12758 		int err, err2 = 0, irq_sync = 0;
12759 
12760 		if (netif_running(dev)) {
12761 			tg3_phy_stop(tp);
12762 			tg3_netif_stop(tp);
12763 			irq_sync = 1;
12764 		}
12765 
12766 		tg3_full_lock(tp, irq_sync);
12767 		tg3_halt(tp, RESET_KIND_SUSPEND, 1);
12768 		err = tg3_nvram_lock(tp);
12769 		tg3_halt_cpu(tp, RX_CPU_BASE);
12770 		if (!tg3_flag(tp, 5705_PLUS))
12771 			tg3_halt_cpu(tp, TX_CPU_BASE);
12772 		if (!err)
12773 			tg3_nvram_unlock(tp);
12774 
12775 		if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
12776 			tg3_phy_reset(tp);
12777 
12778 		if (tg3_test_registers(tp) != 0) {
12779 			etest->flags |= ETH_TEST_FL_FAILED;
12780 			data[TG3_REGISTER_TEST] = 1;
12781 		}
12782 
12783 		if (tg3_test_memory(tp) != 0) {
12784 			etest->flags |= ETH_TEST_FL_FAILED;
12785 			data[TG3_MEMORY_TEST] = 1;
12786 		}
12787 
12788 		if (doextlpbk)
12789 			etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
12790 
12791 		if (tg3_test_loopback(tp, data, doextlpbk))
12792 			etest->flags |= ETH_TEST_FL_FAILED;
12793 
12794 		tg3_full_unlock(tp);
12795 
12796 		if (tg3_test_interrupt(tp) != 0) {
12797 			etest->flags |= ETH_TEST_FL_FAILED;
12798 			data[TG3_INTERRUPT_TEST] = 1;
12799 		}
12800 
12801 		tg3_full_lock(tp, 0);
12802 
12803 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12804 		if (netif_running(dev)) {
12805 			tg3_flag_set(tp, INIT_COMPLETE);
12806 			err2 = tg3_restart_hw(tp, 1);
12807 			if (!err2)
12808 				tg3_netif_start(tp);
12809 		}
12810 
12811 		tg3_full_unlock(tp);
12812 
12813 		if (irq_sync && !err2)
12814 			tg3_phy_start(tp);
12815 	}
12816 	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
12817 		tg3_power_down(tp);
12818 
12819 }
12820 
12821 static int tg3_hwtstamp_ioctl(struct net_device *dev,
12822 			      struct ifreq *ifr, int cmd)
12823 {
12824 	struct tg3 *tp = netdev_priv(dev);
12825 	struct hwtstamp_config stmpconf;
12826 
12827 	if (!tg3_flag(tp, PTP_CAPABLE))
12828 		return -EINVAL;
12829 
12830 	if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
12831 		return -EFAULT;
12832 
12833 	if (stmpconf.flags)
12834 		return -EINVAL;
12835 
12836 	switch (stmpconf.tx_type) {
12837 	case HWTSTAMP_TX_ON:
12838 		tg3_flag_set(tp, TX_TSTAMP_EN);
12839 		break;
12840 	case HWTSTAMP_TX_OFF:
12841 		tg3_flag_clear(tp, TX_TSTAMP_EN);
12842 		break;
12843 	default:
12844 		return -ERANGE;
12845 	}
12846 
12847 	switch (stmpconf.rx_filter) {
12848 	case HWTSTAMP_FILTER_NONE:
12849 		tp->rxptpctl = 0;
12850 		break;
12851 	case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
12852 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
12853 			       TG3_RX_PTP_CTL_ALL_V1_EVENTS;
12854 		break;
12855 	case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
12856 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
12857 			       TG3_RX_PTP_CTL_SYNC_EVNT;
12858 		break;
12859 	case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
12860 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
12861 			       TG3_RX_PTP_CTL_DELAY_REQ;
12862 		break;
12863 	case HWTSTAMP_FILTER_PTP_V2_EVENT:
12864 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
12865 			       TG3_RX_PTP_CTL_ALL_V2_EVENTS;
12866 		break;
12867 	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
12868 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
12869 			       TG3_RX_PTP_CTL_ALL_V2_EVENTS;
12870 		break;
12871 	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
12872 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
12873 			       TG3_RX_PTP_CTL_ALL_V2_EVENTS;
12874 		break;
12875 	case HWTSTAMP_FILTER_PTP_V2_SYNC:
12876 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
12877 			       TG3_RX_PTP_CTL_SYNC_EVNT;
12878 		break;
12879 	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
12880 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
12881 			       TG3_RX_PTP_CTL_SYNC_EVNT;
12882 		break;
12883 	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
12884 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
12885 			       TG3_RX_PTP_CTL_SYNC_EVNT;
12886 		break;
12887 	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
12888 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
12889 			       TG3_RX_PTP_CTL_DELAY_REQ;
12890 		break;
12891 	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
12892 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
12893 			       TG3_RX_PTP_CTL_DELAY_REQ;
12894 		break;
12895 	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
12896 		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
12897 			       TG3_RX_PTP_CTL_DELAY_REQ;
12898 		break;
12899 	default:
12900 		return -ERANGE;
12901 	}
12902 
12903 	if (netif_running(dev) && tp->rxptpctl)
12904 		tw32(TG3_RX_PTP_CTL,
12905 		     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
12906 
12907 	return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
12908 		-EFAULT : 0;
12909 }
12910 
12911 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
12912 {
12913 	struct mii_ioctl_data *data = if_mii(ifr);
12914 	struct tg3 *tp = netdev_priv(dev);
12915 	int err;
12916 
12917 	if (tg3_flag(tp, USE_PHYLIB)) {
12918 		struct phy_device *phydev;
12919 		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12920 			return -EAGAIN;
12921 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
12922 		return phy_mii_ioctl(phydev, ifr, cmd);
12923 	}
12924 
12925 	switch (cmd) {
12926 	case SIOCGMIIPHY:
12927 		data->phy_id = tp->phy_addr;
12928 
12929 		/* fallthru */
12930 	case SIOCGMIIREG: {
12931 		u32 mii_regval;
12932 
12933 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12934 			break;			/* We have no PHY */
12935 
12936 		if (!netif_running(dev))
12937 			return -EAGAIN;
12938 
12939 		spin_lock_bh(&tp->lock);
12940 		err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
12941 		spin_unlock_bh(&tp->lock);
12942 
12943 		data->val_out = mii_regval;
12944 
12945 		return err;
12946 	}
12947 
12948 	case SIOCSMIIREG:
12949 		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12950 			break;			/* We have no PHY */
12951 
12952 		if (!netif_running(dev))
12953 			return -EAGAIN;
12954 
12955 		spin_lock_bh(&tp->lock);
12956 		err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
12957 		spin_unlock_bh(&tp->lock);
12958 
12959 		return err;
12960 
12961 	case SIOCSHWTSTAMP:
12962 		return tg3_hwtstamp_ioctl(dev, ifr, cmd);
12963 
12964 	default:
12965 		/* do nothing */
12966 		break;
12967 	}
12968 	return -EOPNOTSUPP;
12969 }
12970 
12971 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12972 {
12973 	struct tg3 *tp = netdev_priv(dev);
12974 
12975 	memcpy(ec, &tp->coal, sizeof(*ec));
12976 	return 0;
12977 }
12978 
12979 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12980 {
12981 	struct tg3 *tp = netdev_priv(dev);
12982 	u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
12983 	u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
12984 
12985 	if (!tg3_flag(tp, 5705_PLUS)) {
12986 		max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
12987 		max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
12988 		max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
12989 		min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
12990 	}
12991 
12992 	if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
12993 	    (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
12994 	    (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
12995 	    (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
12996 	    (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
12997 	    (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
12998 	    (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
12999 	    (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
13000 	    (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
13001 	    (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
13002 		return -EINVAL;
13003 
13004 	/* No rx interrupts will be generated if both are zero */
13005 	if ((ec->rx_coalesce_usecs == 0) &&
13006 	    (ec->rx_max_coalesced_frames == 0))
13007 		return -EINVAL;
13008 
13009 	/* No tx interrupts will be generated if both are zero */
13010 	if ((ec->tx_coalesce_usecs == 0) &&
13011 	    (ec->tx_max_coalesced_frames == 0))
13012 		return -EINVAL;
13013 
13014 	/* Only copy relevant parameters, ignore all others. */
13015 	tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
13016 	tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
13017 	tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
13018 	tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
13019 	tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
13020 	tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
13021 	tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
13022 	tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
13023 	tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
13024 
13025 	if (netif_running(dev)) {
13026 		tg3_full_lock(tp, 0);
13027 		__tg3_set_coalesce(tp, &tp->coal);
13028 		tg3_full_unlock(tp);
13029 	}
13030 	return 0;
13031 }
13032 
13033 static const struct ethtool_ops tg3_ethtool_ops = {
13034 	.get_settings		= tg3_get_settings,
13035 	.set_settings		= tg3_set_settings,
13036 	.get_drvinfo		= tg3_get_drvinfo,
13037 	.get_regs_len		= tg3_get_regs_len,
13038 	.get_regs		= tg3_get_regs,
13039 	.get_wol		= tg3_get_wol,
13040 	.set_wol		= tg3_set_wol,
13041 	.get_msglevel		= tg3_get_msglevel,
13042 	.set_msglevel		= tg3_set_msglevel,
13043 	.nway_reset		= tg3_nway_reset,
13044 	.get_link		= ethtool_op_get_link,
13045 	.get_eeprom_len		= tg3_get_eeprom_len,
13046 	.get_eeprom		= tg3_get_eeprom,
13047 	.set_eeprom		= tg3_set_eeprom,
13048 	.get_ringparam		= tg3_get_ringparam,
13049 	.set_ringparam		= tg3_set_ringparam,
13050 	.get_pauseparam		= tg3_get_pauseparam,
13051 	.set_pauseparam		= tg3_set_pauseparam,
13052 	.self_test		= tg3_self_test,
13053 	.get_strings		= tg3_get_strings,
13054 	.set_phys_id		= tg3_set_phys_id,
13055 	.get_ethtool_stats	= tg3_get_ethtool_stats,
13056 	.get_coalesce		= tg3_get_coalesce,
13057 	.set_coalesce		= tg3_set_coalesce,
13058 	.get_sset_count		= tg3_get_sset_count,
13059 	.get_rxnfc		= tg3_get_rxnfc,
13060 	.get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
13061 	.get_rxfh_indir		= tg3_get_rxfh_indir,
13062 	.set_rxfh_indir		= tg3_set_rxfh_indir,
13063 	.get_channels		= tg3_get_channels,
13064 	.set_channels		= tg3_set_channels,
13065 	.get_ts_info		= tg3_get_ts_info,
13066 };
13067 
13068 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
13069 						struct rtnl_link_stats64 *stats)
13070 {
13071 	struct tg3 *tp = netdev_priv(dev);
13072 
13073 	spin_lock_bh(&tp->lock);
13074 	if (!tp->hw_stats) {
13075 		spin_unlock_bh(&tp->lock);
13076 		return &tp->net_stats_prev;
13077 	}
13078 
13079 	tg3_get_nstats(tp, stats);
13080 	spin_unlock_bh(&tp->lock);
13081 
13082 	return stats;
13083 }
13084 
13085 static void tg3_set_rx_mode(struct net_device *dev)
13086 {
13087 	struct tg3 *tp = netdev_priv(dev);
13088 
13089 	if (!netif_running(dev))
13090 		return;
13091 
13092 	tg3_full_lock(tp, 0);
13093 	__tg3_set_rx_mode(dev);
13094 	tg3_full_unlock(tp);
13095 }
13096 
13097 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
13098 			       int new_mtu)
13099 {
13100 	dev->mtu = new_mtu;
13101 
13102 	if (new_mtu > ETH_DATA_LEN) {
13103 		if (tg3_flag(tp, 5780_CLASS)) {
13104 			netdev_update_features(dev);
13105 			tg3_flag_clear(tp, TSO_CAPABLE);
13106 		} else {
13107 			tg3_flag_set(tp, JUMBO_RING_ENABLE);
13108 		}
13109 	} else {
13110 		if (tg3_flag(tp, 5780_CLASS)) {
13111 			tg3_flag_set(tp, TSO_CAPABLE);
13112 			netdev_update_features(dev);
13113 		}
13114 		tg3_flag_clear(tp, JUMBO_RING_ENABLE);
13115 	}
13116 }
13117 
13118 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
13119 {
13120 	struct tg3 *tp = netdev_priv(dev);
13121 	int err, reset_phy = 0;
13122 
13123 	if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
13124 		return -EINVAL;
13125 
13126 	if (!netif_running(dev)) {
13127 		/* We'll just catch it later when the
13128 		 * device is up'd.
13129 		 */
13130 		tg3_set_mtu(dev, tp, new_mtu);
13131 		return 0;
13132 	}
13133 
13134 	tg3_phy_stop(tp);
13135 
13136 	tg3_netif_stop(tp);
13137 
13138 	tg3_full_lock(tp, 1);
13139 
13140 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13141 
13142 	tg3_set_mtu(dev, tp, new_mtu);
13143 
13144 	/* Reset PHY, otherwise the read DMA engine will be in a mode that
13145 	 * breaks all requests to 256 bytes.
13146 	 */
13147 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
13148 		reset_phy = 1;
13149 
13150 	err = tg3_restart_hw(tp, reset_phy);
13151 
13152 	if (!err)
13153 		tg3_netif_start(tp);
13154 
13155 	tg3_full_unlock(tp);
13156 
13157 	if (!err)
13158 		tg3_phy_start(tp);
13159 
13160 	return err;
13161 }
13162 
13163 static const struct net_device_ops tg3_netdev_ops = {
13164 	.ndo_open		= tg3_open,
13165 	.ndo_stop		= tg3_close,
13166 	.ndo_start_xmit		= tg3_start_xmit,
13167 	.ndo_get_stats64	= tg3_get_stats64,
13168 	.ndo_validate_addr	= eth_validate_addr,
13169 	.ndo_set_rx_mode	= tg3_set_rx_mode,
13170 	.ndo_set_mac_address	= tg3_set_mac_addr,
13171 	.ndo_do_ioctl		= tg3_ioctl,
13172 	.ndo_tx_timeout		= tg3_tx_timeout,
13173 	.ndo_change_mtu		= tg3_change_mtu,
13174 	.ndo_fix_features	= tg3_fix_features,
13175 	.ndo_set_features	= tg3_set_features,
13176 #ifdef CONFIG_NET_POLL_CONTROLLER
13177 	.ndo_poll_controller	= tg3_poll_controller,
13178 #endif
13179 };
13180 
13181 static void tg3_get_eeprom_size(struct tg3 *tp)
13182 {
13183 	u32 cursize, val, magic;
13184 
13185 	tp->nvram_size = EEPROM_CHIP_SIZE;
13186 
13187 	if (tg3_nvram_read(tp, 0, &magic) != 0)
13188 		return;
13189 
13190 	if ((magic != TG3_EEPROM_MAGIC) &&
13191 	    ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
13192 	    ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
13193 		return;
13194 
13195 	/*
13196 	 * Size the chip by reading offsets at increasing powers of two.
13197 	 * When we encounter our validation signature, we know the addressing
13198 	 * has wrapped around, and thus have our chip size.
13199 	 */
13200 	cursize = 0x10;
13201 
13202 	while (cursize < tp->nvram_size) {
13203 		if (tg3_nvram_read(tp, cursize, &val) != 0)
13204 			return;
13205 
13206 		if (val == magic)
13207 			break;
13208 
13209 		cursize <<= 1;
13210 	}
13211 
13212 	tp->nvram_size = cursize;
13213 }
13214 
13215 static void tg3_get_nvram_size(struct tg3 *tp)
13216 {
13217 	u32 val;
13218 
13219 	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
13220 		return;
13221 
13222 	/* Selfboot format */
13223 	if (val != TG3_EEPROM_MAGIC) {
13224 		tg3_get_eeprom_size(tp);
13225 		return;
13226 	}
13227 
13228 	if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
13229 		if (val != 0) {
13230 			/* This is confusing.  We want to operate on the
13231 			 * 16-bit value at offset 0xf2.  The tg3_nvram_read()
13232 			 * call will read from NVRAM and byteswap the data
13233 			 * according to the byteswapping settings for all
13234 			 * other register accesses.  This ensures the data we
13235 			 * want will always reside in the lower 16-bits.
13236 			 * However, the data in NVRAM is in LE format, which
13237 			 * means the data from the NVRAM read will always be
13238 			 * opposite the endianness of the CPU.  The 16-bit
13239 			 * byteswap then brings the data to CPU endianness.
13240 			 */
13241 			tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
13242 			return;
13243 		}
13244 	}
13245 	tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13246 }
13247 
13248 static void tg3_get_nvram_info(struct tg3 *tp)
13249 {
13250 	u32 nvcfg1;
13251 
13252 	nvcfg1 = tr32(NVRAM_CFG1);
13253 	if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
13254 		tg3_flag_set(tp, FLASH);
13255 	} else {
13256 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13257 		tw32(NVRAM_CFG1, nvcfg1);
13258 	}
13259 
13260 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
13261 	    tg3_flag(tp, 5780_CLASS)) {
13262 		switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
13263 		case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
13264 			tp->nvram_jedecnum = JEDEC_ATMEL;
13265 			tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
13266 			tg3_flag_set(tp, NVRAM_BUFFERED);
13267 			break;
13268 		case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
13269 			tp->nvram_jedecnum = JEDEC_ATMEL;
13270 			tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
13271 			break;
13272 		case FLASH_VENDOR_ATMEL_EEPROM:
13273 			tp->nvram_jedecnum = JEDEC_ATMEL;
13274 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13275 			tg3_flag_set(tp, NVRAM_BUFFERED);
13276 			break;
13277 		case FLASH_VENDOR_ST:
13278 			tp->nvram_jedecnum = JEDEC_ST;
13279 			tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
13280 			tg3_flag_set(tp, NVRAM_BUFFERED);
13281 			break;
13282 		case FLASH_VENDOR_SAIFUN:
13283 			tp->nvram_jedecnum = JEDEC_SAIFUN;
13284 			tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
13285 			break;
13286 		case FLASH_VENDOR_SST_SMALL:
13287 		case FLASH_VENDOR_SST_LARGE:
13288 			tp->nvram_jedecnum = JEDEC_SST;
13289 			tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
13290 			break;
13291 		}
13292 	} else {
13293 		tp->nvram_jedecnum = JEDEC_ATMEL;
13294 		tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
13295 		tg3_flag_set(tp, NVRAM_BUFFERED);
13296 	}
13297 }
13298 
13299 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
13300 {
13301 	switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
13302 	case FLASH_5752PAGE_SIZE_256:
13303 		tp->nvram_pagesize = 256;
13304 		break;
13305 	case FLASH_5752PAGE_SIZE_512:
13306 		tp->nvram_pagesize = 512;
13307 		break;
13308 	case FLASH_5752PAGE_SIZE_1K:
13309 		tp->nvram_pagesize = 1024;
13310 		break;
13311 	case FLASH_5752PAGE_SIZE_2K:
13312 		tp->nvram_pagesize = 2048;
13313 		break;
13314 	case FLASH_5752PAGE_SIZE_4K:
13315 		tp->nvram_pagesize = 4096;
13316 		break;
13317 	case FLASH_5752PAGE_SIZE_264:
13318 		tp->nvram_pagesize = 264;
13319 		break;
13320 	case FLASH_5752PAGE_SIZE_528:
13321 		tp->nvram_pagesize = 528;
13322 		break;
13323 	}
13324 }
13325 
13326 static void tg3_get_5752_nvram_info(struct tg3 *tp)
13327 {
13328 	u32 nvcfg1;
13329 
13330 	nvcfg1 = tr32(NVRAM_CFG1);
13331 
13332 	/* NVRAM protection for TPM */
13333 	if (nvcfg1 & (1 << 27))
13334 		tg3_flag_set(tp, PROTECTED_NVRAM);
13335 
13336 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13337 	case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
13338 	case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
13339 		tp->nvram_jedecnum = JEDEC_ATMEL;
13340 		tg3_flag_set(tp, NVRAM_BUFFERED);
13341 		break;
13342 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13343 		tp->nvram_jedecnum = JEDEC_ATMEL;
13344 		tg3_flag_set(tp, NVRAM_BUFFERED);
13345 		tg3_flag_set(tp, FLASH);
13346 		break;
13347 	case FLASH_5752VENDOR_ST_M45PE10:
13348 	case FLASH_5752VENDOR_ST_M45PE20:
13349 	case FLASH_5752VENDOR_ST_M45PE40:
13350 		tp->nvram_jedecnum = JEDEC_ST;
13351 		tg3_flag_set(tp, NVRAM_BUFFERED);
13352 		tg3_flag_set(tp, FLASH);
13353 		break;
13354 	}
13355 
13356 	if (tg3_flag(tp, FLASH)) {
13357 		tg3_nvram_get_pagesize(tp, nvcfg1);
13358 	} else {
13359 		/* For eeprom, set pagesize to maximum eeprom size */
13360 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13361 
13362 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13363 		tw32(NVRAM_CFG1, nvcfg1);
13364 	}
13365 }
13366 
13367 static void tg3_get_5755_nvram_info(struct tg3 *tp)
13368 {
13369 	u32 nvcfg1, protect = 0;
13370 
13371 	nvcfg1 = tr32(NVRAM_CFG1);
13372 
13373 	/* NVRAM protection for TPM */
13374 	if (nvcfg1 & (1 << 27)) {
13375 		tg3_flag_set(tp, PROTECTED_NVRAM);
13376 		protect = 1;
13377 	}
13378 
13379 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
13380 	switch (nvcfg1) {
13381 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
13382 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
13383 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
13384 	case FLASH_5755VENDOR_ATMEL_FLASH_5:
13385 		tp->nvram_jedecnum = JEDEC_ATMEL;
13386 		tg3_flag_set(tp, NVRAM_BUFFERED);
13387 		tg3_flag_set(tp, FLASH);
13388 		tp->nvram_pagesize = 264;
13389 		if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
13390 		    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
13391 			tp->nvram_size = (protect ? 0x3e200 :
13392 					  TG3_NVRAM_SIZE_512KB);
13393 		else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
13394 			tp->nvram_size = (protect ? 0x1f200 :
13395 					  TG3_NVRAM_SIZE_256KB);
13396 		else
13397 			tp->nvram_size = (protect ? 0x1f200 :
13398 					  TG3_NVRAM_SIZE_128KB);
13399 		break;
13400 	case FLASH_5752VENDOR_ST_M45PE10:
13401 	case FLASH_5752VENDOR_ST_M45PE20:
13402 	case FLASH_5752VENDOR_ST_M45PE40:
13403 		tp->nvram_jedecnum = JEDEC_ST;
13404 		tg3_flag_set(tp, NVRAM_BUFFERED);
13405 		tg3_flag_set(tp, FLASH);
13406 		tp->nvram_pagesize = 256;
13407 		if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
13408 			tp->nvram_size = (protect ?
13409 					  TG3_NVRAM_SIZE_64KB :
13410 					  TG3_NVRAM_SIZE_128KB);
13411 		else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
13412 			tp->nvram_size = (protect ?
13413 					  TG3_NVRAM_SIZE_64KB :
13414 					  TG3_NVRAM_SIZE_256KB);
13415 		else
13416 			tp->nvram_size = (protect ?
13417 					  TG3_NVRAM_SIZE_128KB :
13418 					  TG3_NVRAM_SIZE_512KB);
13419 		break;
13420 	}
13421 }
13422 
13423 static void tg3_get_5787_nvram_info(struct tg3 *tp)
13424 {
13425 	u32 nvcfg1;
13426 
13427 	nvcfg1 = tr32(NVRAM_CFG1);
13428 
13429 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13430 	case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
13431 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
13432 	case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
13433 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
13434 		tp->nvram_jedecnum = JEDEC_ATMEL;
13435 		tg3_flag_set(tp, NVRAM_BUFFERED);
13436 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13437 
13438 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13439 		tw32(NVRAM_CFG1, nvcfg1);
13440 		break;
13441 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13442 	case FLASH_5755VENDOR_ATMEL_FLASH_1:
13443 	case FLASH_5755VENDOR_ATMEL_FLASH_2:
13444 	case FLASH_5755VENDOR_ATMEL_FLASH_3:
13445 		tp->nvram_jedecnum = JEDEC_ATMEL;
13446 		tg3_flag_set(tp, NVRAM_BUFFERED);
13447 		tg3_flag_set(tp, FLASH);
13448 		tp->nvram_pagesize = 264;
13449 		break;
13450 	case FLASH_5752VENDOR_ST_M45PE10:
13451 	case FLASH_5752VENDOR_ST_M45PE20:
13452 	case FLASH_5752VENDOR_ST_M45PE40:
13453 		tp->nvram_jedecnum = JEDEC_ST;
13454 		tg3_flag_set(tp, NVRAM_BUFFERED);
13455 		tg3_flag_set(tp, FLASH);
13456 		tp->nvram_pagesize = 256;
13457 		break;
13458 	}
13459 }
13460 
13461 static void tg3_get_5761_nvram_info(struct tg3 *tp)
13462 {
13463 	u32 nvcfg1, protect = 0;
13464 
13465 	nvcfg1 = tr32(NVRAM_CFG1);
13466 
13467 	/* NVRAM protection for TPM */
13468 	if (nvcfg1 & (1 << 27)) {
13469 		tg3_flag_set(tp, PROTECTED_NVRAM);
13470 		protect = 1;
13471 	}
13472 
13473 	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
13474 	switch (nvcfg1) {
13475 	case FLASH_5761VENDOR_ATMEL_ADB021D:
13476 	case FLASH_5761VENDOR_ATMEL_ADB041D:
13477 	case FLASH_5761VENDOR_ATMEL_ADB081D:
13478 	case FLASH_5761VENDOR_ATMEL_ADB161D:
13479 	case FLASH_5761VENDOR_ATMEL_MDB021D:
13480 	case FLASH_5761VENDOR_ATMEL_MDB041D:
13481 	case FLASH_5761VENDOR_ATMEL_MDB081D:
13482 	case FLASH_5761VENDOR_ATMEL_MDB161D:
13483 		tp->nvram_jedecnum = JEDEC_ATMEL;
13484 		tg3_flag_set(tp, NVRAM_BUFFERED);
13485 		tg3_flag_set(tp, FLASH);
13486 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13487 		tp->nvram_pagesize = 256;
13488 		break;
13489 	case FLASH_5761VENDOR_ST_A_M45PE20:
13490 	case FLASH_5761VENDOR_ST_A_M45PE40:
13491 	case FLASH_5761VENDOR_ST_A_M45PE80:
13492 	case FLASH_5761VENDOR_ST_A_M45PE16:
13493 	case FLASH_5761VENDOR_ST_M_M45PE20:
13494 	case FLASH_5761VENDOR_ST_M_M45PE40:
13495 	case FLASH_5761VENDOR_ST_M_M45PE80:
13496 	case FLASH_5761VENDOR_ST_M_M45PE16:
13497 		tp->nvram_jedecnum = JEDEC_ST;
13498 		tg3_flag_set(tp, NVRAM_BUFFERED);
13499 		tg3_flag_set(tp, FLASH);
13500 		tp->nvram_pagesize = 256;
13501 		break;
13502 	}
13503 
13504 	if (protect) {
13505 		tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
13506 	} else {
13507 		switch (nvcfg1) {
13508 		case FLASH_5761VENDOR_ATMEL_ADB161D:
13509 		case FLASH_5761VENDOR_ATMEL_MDB161D:
13510 		case FLASH_5761VENDOR_ST_A_M45PE16:
13511 		case FLASH_5761VENDOR_ST_M_M45PE16:
13512 			tp->nvram_size = TG3_NVRAM_SIZE_2MB;
13513 			break;
13514 		case FLASH_5761VENDOR_ATMEL_ADB081D:
13515 		case FLASH_5761VENDOR_ATMEL_MDB081D:
13516 		case FLASH_5761VENDOR_ST_A_M45PE80:
13517 		case FLASH_5761VENDOR_ST_M_M45PE80:
13518 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13519 			break;
13520 		case FLASH_5761VENDOR_ATMEL_ADB041D:
13521 		case FLASH_5761VENDOR_ATMEL_MDB041D:
13522 		case FLASH_5761VENDOR_ST_A_M45PE40:
13523 		case FLASH_5761VENDOR_ST_M_M45PE40:
13524 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13525 			break;
13526 		case FLASH_5761VENDOR_ATMEL_ADB021D:
13527 		case FLASH_5761VENDOR_ATMEL_MDB021D:
13528 		case FLASH_5761VENDOR_ST_A_M45PE20:
13529 		case FLASH_5761VENDOR_ST_M_M45PE20:
13530 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13531 			break;
13532 		}
13533 	}
13534 }
13535 
13536 static void tg3_get_5906_nvram_info(struct tg3 *tp)
13537 {
13538 	tp->nvram_jedecnum = JEDEC_ATMEL;
13539 	tg3_flag_set(tp, NVRAM_BUFFERED);
13540 	tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13541 }
13542 
13543 static void tg3_get_57780_nvram_info(struct tg3 *tp)
13544 {
13545 	u32 nvcfg1;
13546 
13547 	nvcfg1 = tr32(NVRAM_CFG1);
13548 
13549 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13550 	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
13551 	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
13552 		tp->nvram_jedecnum = JEDEC_ATMEL;
13553 		tg3_flag_set(tp, NVRAM_BUFFERED);
13554 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13555 
13556 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13557 		tw32(NVRAM_CFG1, nvcfg1);
13558 		return;
13559 	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13560 	case FLASH_57780VENDOR_ATMEL_AT45DB011D:
13561 	case FLASH_57780VENDOR_ATMEL_AT45DB011B:
13562 	case FLASH_57780VENDOR_ATMEL_AT45DB021D:
13563 	case FLASH_57780VENDOR_ATMEL_AT45DB021B:
13564 	case FLASH_57780VENDOR_ATMEL_AT45DB041D:
13565 	case FLASH_57780VENDOR_ATMEL_AT45DB041B:
13566 		tp->nvram_jedecnum = JEDEC_ATMEL;
13567 		tg3_flag_set(tp, NVRAM_BUFFERED);
13568 		tg3_flag_set(tp, FLASH);
13569 
13570 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13571 		case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
13572 		case FLASH_57780VENDOR_ATMEL_AT45DB011D:
13573 		case FLASH_57780VENDOR_ATMEL_AT45DB011B:
13574 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13575 			break;
13576 		case FLASH_57780VENDOR_ATMEL_AT45DB021D:
13577 		case FLASH_57780VENDOR_ATMEL_AT45DB021B:
13578 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13579 			break;
13580 		case FLASH_57780VENDOR_ATMEL_AT45DB041D:
13581 		case FLASH_57780VENDOR_ATMEL_AT45DB041B:
13582 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13583 			break;
13584 		}
13585 		break;
13586 	case FLASH_5752VENDOR_ST_M45PE10:
13587 	case FLASH_5752VENDOR_ST_M45PE20:
13588 	case FLASH_5752VENDOR_ST_M45PE40:
13589 		tp->nvram_jedecnum = JEDEC_ST;
13590 		tg3_flag_set(tp, NVRAM_BUFFERED);
13591 		tg3_flag_set(tp, FLASH);
13592 
13593 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13594 		case FLASH_5752VENDOR_ST_M45PE10:
13595 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13596 			break;
13597 		case FLASH_5752VENDOR_ST_M45PE20:
13598 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13599 			break;
13600 		case FLASH_5752VENDOR_ST_M45PE40:
13601 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13602 			break;
13603 		}
13604 		break;
13605 	default:
13606 		tg3_flag_set(tp, NO_NVRAM);
13607 		return;
13608 	}
13609 
13610 	tg3_nvram_get_pagesize(tp, nvcfg1);
13611 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13612 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13613 }
13614 
13615 
13616 static void tg3_get_5717_nvram_info(struct tg3 *tp)
13617 {
13618 	u32 nvcfg1;
13619 
13620 	nvcfg1 = tr32(NVRAM_CFG1);
13621 
13622 	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13623 	case FLASH_5717VENDOR_ATMEL_EEPROM:
13624 	case FLASH_5717VENDOR_MICRO_EEPROM:
13625 		tp->nvram_jedecnum = JEDEC_ATMEL;
13626 		tg3_flag_set(tp, NVRAM_BUFFERED);
13627 		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13628 
13629 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13630 		tw32(NVRAM_CFG1, nvcfg1);
13631 		return;
13632 	case FLASH_5717VENDOR_ATMEL_MDB011D:
13633 	case FLASH_5717VENDOR_ATMEL_ADB011B:
13634 	case FLASH_5717VENDOR_ATMEL_ADB011D:
13635 	case FLASH_5717VENDOR_ATMEL_MDB021D:
13636 	case FLASH_5717VENDOR_ATMEL_ADB021B:
13637 	case FLASH_5717VENDOR_ATMEL_ADB021D:
13638 	case FLASH_5717VENDOR_ATMEL_45USPT:
13639 		tp->nvram_jedecnum = JEDEC_ATMEL;
13640 		tg3_flag_set(tp, NVRAM_BUFFERED);
13641 		tg3_flag_set(tp, FLASH);
13642 
13643 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13644 		case FLASH_5717VENDOR_ATMEL_MDB021D:
13645 			/* Detect size with tg3_nvram_get_size() */
13646 			break;
13647 		case FLASH_5717VENDOR_ATMEL_ADB021B:
13648 		case FLASH_5717VENDOR_ATMEL_ADB021D:
13649 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13650 			break;
13651 		default:
13652 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13653 			break;
13654 		}
13655 		break;
13656 	case FLASH_5717VENDOR_ST_M_M25PE10:
13657 	case FLASH_5717VENDOR_ST_A_M25PE10:
13658 	case FLASH_5717VENDOR_ST_M_M45PE10:
13659 	case FLASH_5717VENDOR_ST_A_M45PE10:
13660 	case FLASH_5717VENDOR_ST_M_M25PE20:
13661 	case FLASH_5717VENDOR_ST_A_M25PE20:
13662 	case FLASH_5717VENDOR_ST_M_M45PE20:
13663 	case FLASH_5717VENDOR_ST_A_M45PE20:
13664 	case FLASH_5717VENDOR_ST_25USPT:
13665 	case FLASH_5717VENDOR_ST_45USPT:
13666 		tp->nvram_jedecnum = JEDEC_ST;
13667 		tg3_flag_set(tp, NVRAM_BUFFERED);
13668 		tg3_flag_set(tp, FLASH);
13669 
13670 		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13671 		case FLASH_5717VENDOR_ST_M_M25PE20:
13672 		case FLASH_5717VENDOR_ST_M_M45PE20:
13673 			/* Detect size with tg3_nvram_get_size() */
13674 			break;
13675 		case FLASH_5717VENDOR_ST_A_M25PE20:
13676 		case FLASH_5717VENDOR_ST_A_M45PE20:
13677 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13678 			break;
13679 		default:
13680 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13681 			break;
13682 		}
13683 		break;
13684 	default:
13685 		tg3_flag_set(tp, NO_NVRAM);
13686 		return;
13687 	}
13688 
13689 	tg3_nvram_get_pagesize(tp, nvcfg1);
13690 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13691 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13692 }
13693 
13694 static void tg3_get_5720_nvram_info(struct tg3 *tp)
13695 {
13696 	u32 nvcfg1, nvmpinstrp;
13697 
13698 	nvcfg1 = tr32(NVRAM_CFG1);
13699 	nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
13700 
13701 	switch (nvmpinstrp) {
13702 	case FLASH_5720_EEPROM_HD:
13703 	case FLASH_5720_EEPROM_LD:
13704 		tp->nvram_jedecnum = JEDEC_ATMEL;
13705 		tg3_flag_set(tp, NVRAM_BUFFERED);
13706 
13707 		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13708 		tw32(NVRAM_CFG1, nvcfg1);
13709 		if (nvmpinstrp == FLASH_5720_EEPROM_HD)
13710 			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
13711 		else
13712 			tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
13713 		return;
13714 	case FLASH_5720VENDOR_M_ATMEL_DB011D:
13715 	case FLASH_5720VENDOR_A_ATMEL_DB011B:
13716 	case FLASH_5720VENDOR_A_ATMEL_DB011D:
13717 	case FLASH_5720VENDOR_M_ATMEL_DB021D:
13718 	case FLASH_5720VENDOR_A_ATMEL_DB021B:
13719 	case FLASH_5720VENDOR_A_ATMEL_DB021D:
13720 	case FLASH_5720VENDOR_M_ATMEL_DB041D:
13721 	case FLASH_5720VENDOR_A_ATMEL_DB041B:
13722 	case FLASH_5720VENDOR_A_ATMEL_DB041D:
13723 	case FLASH_5720VENDOR_M_ATMEL_DB081D:
13724 	case FLASH_5720VENDOR_A_ATMEL_DB081D:
13725 	case FLASH_5720VENDOR_ATMEL_45USPT:
13726 		tp->nvram_jedecnum = JEDEC_ATMEL;
13727 		tg3_flag_set(tp, NVRAM_BUFFERED);
13728 		tg3_flag_set(tp, FLASH);
13729 
13730 		switch (nvmpinstrp) {
13731 		case FLASH_5720VENDOR_M_ATMEL_DB021D:
13732 		case FLASH_5720VENDOR_A_ATMEL_DB021B:
13733 		case FLASH_5720VENDOR_A_ATMEL_DB021D:
13734 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13735 			break;
13736 		case FLASH_5720VENDOR_M_ATMEL_DB041D:
13737 		case FLASH_5720VENDOR_A_ATMEL_DB041B:
13738 		case FLASH_5720VENDOR_A_ATMEL_DB041D:
13739 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13740 			break;
13741 		case FLASH_5720VENDOR_M_ATMEL_DB081D:
13742 		case FLASH_5720VENDOR_A_ATMEL_DB081D:
13743 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13744 			break;
13745 		default:
13746 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13747 			break;
13748 		}
13749 		break;
13750 	case FLASH_5720VENDOR_M_ST_M25PE10:
13751 	case FLASH_5720VENDOR_M_ST_M45PE10:
13752 	case FLASH_5720VENDOR_A_ST_M25PE10:
13753 	case FLASH_5720VENDOR_A_ST_M45PE10:
13754 	case FLASH_5720VENDOR_M_ST_M25PE20:
13755 	case FLASH_5720VENDOR_M_ST_M45PE20:
13756 	case FLASH_5720VENDOR_A_ST_M25PE20:
13757 	case FLASH_5720VENDOR_A_ST_M45PE20:
13758 	case FLASH_5720VENDOR_M_ST_M25PE40:
13759 	case FLASH_5720VENDOR_M_ST_M45PE40:
13760 	case FLASH_5720VENDOR_A_ST_M25PE40:
13761 	case FLASH_5720VENDOR_A_ST_M45PE40:
13762 	case FLASH_5720VENDOR_M_ST_M25PE80:
13763 	case FLASH_5720VENDOR_M_ST_M45PE80:
13764 	case FLASH_5720VENDOR_A_ST_M25PE80:
13765 	case FLASH_5720VENDOR_A_ST_M45PE80:
13766 	case FLASH_5720VENDOR_ST_25USPT:
13767 	case FLASH_5720VENDOR_ST_45USPT:
13768 		tp->nvram_jedecnum = JEDEC_ST;
13769 		tg3_flag_set(tp, NVRAM_BUFFERED);
13770 		tg3_flag_set(tp, FLASH);
13771 
13772 		switch (nvmpinstrp) {
13773 		case FLASH_5720VENDOR_M_ST_M25PE20:
13774 		case FLASH_5720VENDOR_M_ST_M45PE20:
13775 		case FLASH_5720VENDOR_A_ST_M25PE20:
13776 		case FLASH_5720VENDOR_A_ST_M45PE20:
13777 			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
13778 			break;
13779 		case FLASH_5720VENDOR_M_ST_M25PE40:
13780 		case FLASH_5720VENDOR_M_ST_M45PE40:
13781 		case FLASH_5720VENDOR_A_ST_M25PE40:
13782 		case FLASH_5720VENDOR_A_ST_M45PE40:
13783 			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
13784 			break;
13785 		case FLASH_5720VENDOR_M_ST_M25PE80:
13786 		case FLASH_5720VENDOR_M_ST_M45PE80:
13787 		case FLASH_5720VENDOR_A_ST_M25PE80:
13788 		case FLASH_5720VENDOR_A_ST_M45PE80:
13789 			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
13790 			break;
13791 		default:
13792 			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
13793 			break;
13794 		}
13795 		break;
13796 	default:
13797 		tg3_flag_set(tp, NO_NVRAM);
13798 		return;
13799 	}
13800 
13801 	tg3_nvram_get_pagesize(tp, nvcfg1);
13802 	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13803 		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13804 }
13805 
13806 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
13807 static void tg3_nvram_init(struct tg3 *tp)
13808 {
13809 	tw32_f(GRC_EEPROM_ADDR,
13810 	     (EEPROM_ADDR_FSM_RESET |
13811 	      (EEPROM_DEFAULT_CLOCK_PERIOD <<
13812 	       EEPROM_ADDR_CLKPERD_SHIFT)));
13813 
13814 	msleep(1);
13815 
13816 	/* Enable seeprom accesses. */
13817 	tw32_f(GRC_LOCAL_CTRL,
13818 	     tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
13819 	udelay(100);
13820 
13821 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13822 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
13823 		tg3_flag_set(tp, NVRAM);
13824 
13825 		if (tg3_nvram_lock(tp)) {
13826 			netdev_warn(tp->dev,
13827 				    "Cannot get nvram lock, %s failed\n",
13828 				    __func__);
13829 			return;
13830 		}
13831 		tg3_enable_nvram_access(tp);
13832 
13833 		tp->nvram_size = 0;
13834 
13835 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
13836 			tg3_get_5752_nvram_info(tp);
13837 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
13838 			tg3_get_5755_nvram_info(tp);
13839 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
13840 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
13841 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
13842 			tg3_get_5787_nvram_info(tp);
13843 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
13844 			tg3_get_5761_nvram_info(tp);
13845 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
13846 			tg3_get_5906_nvram_info(tp);
13847 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
13848 			 tg3_flag(tp, 57765_CLASS))
13849 			tg3_get_57780_nvram_info(tp);
13850 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
13851 			 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
13852 			tg3_get_5717_nvram_info(tp);
13853 		else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
13854 			tg3_get_5720_nvram_info(tp);
13855 		else
13856 			tg3_get_nvram_info(tp);
13857 
13858 		if (tp->nvram_size == 0)
13859 			tg3_get_nvram_size(tp);
13860 
13861 		tg3_disable_nvram_access(tp);
13862 		tg3_nvram_unlock(tp);
13863 
13864 	} else {
13865 		tg3_flag_clear(tp, NVRAM);
13866 		tg3_flag_clear(tp, NVRAM_BUFFERED);
13867 
13868 		tg3_get_eeprom_size(tp);
13869 	}
13870 }
13871 
13872 struct subsys_tbl_ent {
13873 	u16 subsys_vendor, subsys_devid;
13874 	u32 phy_id;
13875 };
13876 
13877 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
13878 	/* Broadcom boards. */
13879 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13880 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
13881 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13882 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
13883 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13884 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
13885 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13886 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
13887 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13888 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
13889 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13890 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
13891 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13892 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
13893 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13894 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
13895 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13896 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
13897 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13898 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
13899 	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
13900 	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
13901 
13902 	/* 3com boards. */
13903 	{ TG3PCI_SUBVENDOR_ID_3COM,
13904 	  TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
13905 	{ TG3PCI_SUBVENDOR_ID_3COM,
13906 	  TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
13907 	{ TG3PCI_SUBVENDOR_ID_3COM,
13908 	  TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
13909 	{ TG3PCI_SUBVENDOR_ID_3COM,
13910 	  TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
13911 	{ TG3PCI_SUBVENDOR_ID_3COM,
13912 	  TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
13913 
13914 	/* DELL boards. */
13915 	{ TG3PCI_SUBVENDOR_ID_DELL,
13916 	  TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
13917 	{ TG3PCI_SUBVENDOR_ID_DELL,
13918 	  TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
13919 	{ TG3PCI_SUBVENDOR_ID_DELL,
13920 	  TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
13921 	{ TG3PCI_SUBVENDOR_ID_DELL,
13922 	  TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
13923 
13924 	/* Compaq boards. */
13925 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13926 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
13927 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13928 	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
13929 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13930 	  TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
13931 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13932 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
13933 	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
13934 	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
13935 
13936 	/* IBM boards. */
13937 	{ TG3PCI_SUBVENDOR_ID_IBM,
13938 	  TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
13939 };
13940 
13941 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
13942 {
13943 	int i;
13944 
13945 	for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
13946 		if ((subsys_id_to_phy_id[i].subsys_vendor ==
13947 		     tp->pdev->subsystem_vendor) &&
13948 		    (subsys_id_to_phy_id[i].subsys_devid ==
13949 		     tp->pdev->subsystem_device))
13950 			return &subsys_id_to_phy_id[i];
13951 	}
13952 	return NULL;
13953 }
13954 
13955 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
13956 {
13957 	u32 val;
13958 
13959 	tp->phy_id = TG3_PHY_ID_INVALID;
13960 	tp->led_ctrl = LED_CTRL_MODE_PHY_1;
13961 
13962 	/* Assume an onboard device and WOL capable by default.  */
13963 	tg3_flag_set(tp, EEPROM_WRITE_PROT);
13964 	tg3_flag_set(tp, WOL_CAP);
13965 
13966 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
13967 		if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
13968 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13969 			tg3_flag_set(tp, IS_NIC);
13970 		}
13971 		val = tr32(VCPU_CFGSHDW);
13972 		if (val & VCPU_CFGSHDW_ASPM_DBNC)
13973 			tg3_flag_set(tp, ASPM_WORKAROUND);
13974 		if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
13975 		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
13976 			tg3_flag_set(tp, WOL_ENABLE);
13977 			device_set_wakeup_enable(&tp->pdev->dev, true);
13978 		}
13979 		goto done;
13980 	}
13981 
13982 	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
13983 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
13984 		u32 nic_cfg, led_cfg;
13985 		u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
13986 		int eeprom_phy_serdes = 0;
13987 
13988 		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
13989 		tp->nic_sram_data_cfg = nic_cfg;
13990 
13991 		tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
13992 		ver >>= NIC_SRAM_DATA_VER_SHIFT;
13993 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
13994 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
13995 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 &&
13996 		    (ver > 0) && (ver < 0x100))
13997 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
13998 
13999 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785)
14000 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
14001 
14002 		if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
14003 		    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
14004 			eeprom_phy_serdes = 1;
14005 
14006 		tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
14007 		if (nic_phy_id != 0) {
14008 			u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
14009 			u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
14010 
14011 			eeprom_phy_id  = (id1 >> 16) << 10;
14012 			eeprom_phy_id |= (id2 & 0xfc00) << 16;
14013 			eeprom_phy_id |= (id2 & 0x03ff) <<  0;
14014 		} else
14015 			eeprom_phy_id = 0;
14016 
14017 		tp->phy_id = eeprom_phy_id;
14018 		if (eeprom_phy_serdes) {
14019 			if (!tg3_flag(tp, 5705_PLUS))
14020 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
14021 			else
14022 				tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
14023 		}
14024 
14025 		if (tg3_flag(tp, 5750_PLUS))
14026 			led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
14027 				    SHASTA_EXT_LED_MODE_MASK);
14028 		else
14029 			led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
14030 
14031 		switch (led_cfg) {
14032 		default:
14033 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
14034 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14035 			break;
14036 
14037 		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
14038 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
14039 			break;
14040 
14041 		case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
14042 			tp->led_ctrl = LED_CTRL_MODE_MAC;
14043 
14044 			/* Default to PHY_1_MODE if 0 (MAC_MODE) is
14045 			 * read on some older 5700/5701 bootcode.
14046 			 */
14047 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
14048 			    ASIC_REV_5700 ||
14049 			    GET_ASIC_REV(tp->pci_chip_rev_id) ==
14050 			    ASIC_REV_5701)
14051 				tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14052 
14053 			break;
14054 
14055 		case SHASTA_EXT_LED_SHARED:
14056 			tp->led_ctrl = LED_CTRL_MODE_SHARED;
14057 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
14058 			    tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
14059 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
14060 						 LED_CTRL_MODE_PHY_2);
14061 			break;
14062 
14063 		case SHASTA_EXT_LED_MAC:
14064 			tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
14065 			break;
14066 
14067 		case SHASTA_EXT_LED_COMBO:
14068 			tp->led_ctrl = LED_CTRL_MODE_COMBO;
14069 			if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
14070 				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
14071 						 LED_CTRL_MODE_PHY_2);
14072 			break;
14073 
14074 		}
14075 
14076 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
14077 		     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
14078 		    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
14079 			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
14080 
14081 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
14082 			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14083 
14084 		if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
14085 			tg3_flag_set(tp, EEPROM_WRITE_PROT);
14086 			if ((tp->pdev->subsystem_vendor ==
14087 			     PCI_VENDOR_ID_ARIMA) &&
14088 			    (tp->pdev->subsystem_device == 0x205a ||
14089 			     tp->pdev->subsystem_device == 0x2063))
14090 				tg3_flag_clear(tp, EEPROM_WRITE_PROT);
14091 		} else {
14092 			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
14093 			tg3_flag_set(tp, IS_NIC);
14094 		}
14095 
14096 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
14097 			tg3_flag_set(tp, ENABLE_ASF);
14098 			if (tg3_flag(tp, 5750_PLUS))
14099 				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
14100 		}
14101 
14102 		if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
14103 		    tg3_flag(tp, 5750_PLUS))
14104 			tg3_flag_set(tp, ENABLE_APE);
14105 
14106 		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
14107 		    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
14108 			tg3_flag_clear(tp, WOL_CAP);
14109 
14110 		if (tg3_flag(tp, WOL_CAP) &&
14111 		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
14112 			tg3_flag_set(tp, WOL_ENABLE);
14113 			device_set_wakeup_enable(&tp->pdev->dev, true);
14114 		}
14115 
14116 		if (cfg2 & (1 << 17))
14117 			tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
14118 
14119 		/* serdes signal pre-emphasis in register 0x590 set by */
14120 		/* bootcode if bit 18 is set */
14121 		if (cfg2 & (1 << 18))
14122 			tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
14123 
14124 		if ((tg3_flag(tp, 57765_PLUS) ||
14125 		     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
14126 		      GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) &&
14127 		    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
14128 			tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
14129 
14130 		if (tg3_flag(tp, PCI_EXPRESS) &&
14131 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
14132 		    !tg3_flag(tp, 57765_PLUS)) {
14133 			u32 cfg3;
14134 
14135 			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
14136 			if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
14137 				tg3_flag_set(tp, ASPM_WORKAROUND);
14138 		}
14139 
14140 		if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
14141 			tg3_flag_set(tp, RGMII_INBAND_DISABLE);
14142 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
14143 			tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
14144 		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
14145 			tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
14146 	}
14147 done:
14148 	if (tg3_flag(tp, WOL_CAP))
14149 		device_set_wakeup_enable(&tp->pdev->dev,
14150 					 tg3_flag(tp, WOL_ENABLE));
14151 	else
14152 		device_set_wakeup_capable(&tp->pdev->dev, false);
14153 }
14154 
14155 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
14156 {
14157 	int i;
14158 	u32 val;
14159 
14160 	tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
14161 	tw32(OTP_CTRL, cmd);
14162 
14163 	/* Wait for up to 1 ms for command to execute. */
14164 	for (i = 0; i < 100; i++) {
14165 		val = tr32(OTP_STATUS);
14166 		if (val & OTP_STATUS_CMD_DONE)
14167 			break;
14168 		udelay(10);
14169 	}
14170 
14171 	return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
14172 }
14173 
14174 /* Read the gphy configuration from the OTP region of the chip.  The gphy
14175  * configuration is a 32-bit value that straddles the alignment boundary.
14176  * We do two 32-bit reads and then shift and merge the results.
14177  */
14178 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
14179 {
14180 	u32 bhalf_otp, thalf_otp;
14181 
14182 	tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
14183 
14184 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
14185 		return 0;
14186 
14187 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
14188 
14189 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
14190 		return 0;
14191 
14192 	thalf_otp = tr32(OTP_READ_DATA);
14193 
14194 	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
14195 
14196 	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
14197 		return 0;
14198 
14199 	bhalf_otp = tr32(OTP_READ_DATA);
14200 
14201 	return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
14202 }
14203 
14204 static void tg3_phy_init_link_config(struct tg3 *tp)
14205 {
14206 	u32 adv = ADVERTISED_Autoneg;
14207 
14208 	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
14209 		adv |= ADVERTISED_1000baseT_Half |
14210 		       ADVERTISED_1000baseT_Full;
14211 
14212 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
14213 		adv |= ADVERTISED_100baseT_Half |
14214 		       ADVERTISED_100baseT_Full |
14215 		       ADVERTISED_10baseT_Half |
14216 		       ADVERTISED_10baseT_Full |
14217 		       ADVERTISED_TP;
14218 	else
14219 		adv |= ADVERTISED_FIBRE;
14220 
14221 	tp->link_config.advertising = adv;
14222 	tp->link_config.speed = SPEED_UNKNOWN;
14223 	tp->link_config.duplex = DUPLEX_UNKNOWN;
14224 	tp->link_config.autoneg = AUTONEG_ENABLE;
14225 	tp->link_config.active_speed = SPEED_UNKNOWN;
14226 	tp->link_config.active_duplex = DUPLEX_UNKNOWN;
14227 
14228 	tp->old_link = -1;
14229 }
14230 
14231 static int tg3_phy_probe(struct tg3 *tp)
14232 {
14233 	u32 hw_phy_id_1, hw_phy_id_2;
14234 	u32 hw_phy_id, hw_phy_id_masked;
14235 	int err;
14236 
14237 	/* flow control autonegotiation is default behavior */
14238 	tg3_flag_set(tp, PAUSE_AUTONEG);
14239 	tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
14240 
14241 	if (tg3_flag(tp, ENABLE_APE)) {
14242 		switch (tp->pci_fn) {
14243 		case 0:
14244 			tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
14245 			break;
14246 		case 1:
14247 			tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
14248 			break;
14249 		case 2:
14250 			tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
14251 			break;
14252 		case 3:
14253 			tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
14254 			break;
14255 		}
14256 	}
14257 
14258 	if (tg3_flag(tp, USE_PHYLIB))
14259 		return tg3_phy_init(tp);
14260 
14261 	/* Reading the PHY ID register can conflict with ASF
14262 	 * firmware access to the PHY hardware.
14263 	 */
14264 	err = 0;
14265 	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
14266 		hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
14267 	} else {
14268 		/* Now read the physical PHY_ID from the chip and verify
14269 		 * that it is sane.  If it doesn't look good, we fall back
14270 		 * to either the hard-coded table based PHY_ID and failing
14271 		 * that the value found in the eeprom area.
14272 		 */
14273 		err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
14274 		err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
14275 
14276 		hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
14277 		hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
14278 		hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
14279 
14280 		hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
14281 	}
14282 
14283 	if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
14284 		tp->phy_id = hw_phy_id;
14285 		if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
14286 			tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
14287 		else
14288 			tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
14289 	} else {
14290 		if (tp->phy_id != TG3_PHY_ID_INVALID) {
14291 			/* Do nothing, phy ID already set up in
14292 			 * tg3_get_eeprom_hw_cfg().
14293 			 */
14294 		} else {
14295 			struct subsys_tbl_ent *p;
14296 
14297 			/* No eeprom signature?  Try the hardcoded
14298 			 * subsys device table.
14299 			 */
14300 			p = tg3_lookup_by_subsys(tp);
14301 			if (!p)
14302 				return -ENODEV;
14303 
14304 			tp->phy_id = p->phy_id;
14305 			if (!tp->phy_id ||
14306 			    tp->phy_id == TG3_PHY_ID_BCM8002)
14307 				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
14308 		}
14309 	}
14310 
14311 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
14312 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14313 	     GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 ||
14314 	     (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 &&
14315 	      tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) ||
14316 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 &&
14317 	      tp->pci_chip_rev_id != CHIPREV_ID_57765_A0)))
14318 		tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
14319 
14320 	tg3_phy_init_link_config(tp);
14321 
14322 	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
14323 	    !tg3_flag(tp, ENABLE_APE) &&
14324 	    !tg3_flag(tp, ENABLE_ASF)) {
14325 		u32 bmsr, dummy;
14326 
14327 		tg3_readphy(tp, MII_BMSR, &bmsr);
14328 		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
14329 		    (bmsr & BMSR_LSTATUS))
14330 			goto skip_phy_reset;
14331 
14332 		err = tg3_phy_reset(tp);
14333 		if (err)
14334 			return err;
14335 
14336 		tg3_phy_set_wirespeed(tp);
14337 
14338 		if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
14339 			tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
14340 					    tp->link_config.flowctrl);
14341 
14342 			tg3_writephy(tp, MII_BMCR,
14343 				     BMCR_ANENABLE | BMCR_ANRESTART);
14344 		}
14345 	}
14346 
14347 skip_phy_reset:
14348 	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
14349 		err = tg3_init_5401phy_dsp(tp);
14350 		if (err)
14351 			return err;
14352 
14353 		err = tg3_init_5401phy_dsp(tp);
14354 	}
14355 
14356 	return err;
14357 }
14358 
14359 static void tg3_read_vpd(struct tg3 *tp)
14360 {
14361 	u8 *vpd_data;
14362 	unsigned int block_end, rosize, len;
14363 	u32 vpdlen;
14364 	int j, i = 0;
14365 
14366 	vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
14367 	if (!vpd_data)
14368 		goto out_no_vpd;
14369 
14370 	i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
14371 	if (i < 0)
14372 		goto out_not_found;
14373 
14374 	rosize = pci_vpd_lrdt_size(&vpd_data[i]);
14375 	block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
14376 	i += PCI_VPD_LRDT_TAG_SIZE;
14377 
14378 	if (block_end > vpdlen)
14379 		goto out_not_found;
14380 
14381 	j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
14382 				      PCI_VPD_RO_KEYWORD_MFR_ID);
14383 	if (j > 0) {
14384 		len = pci_vpd_info_field_size(&vpd_data[j]);
14385 
14386 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
14387 		if (j + len > block_end || len != 4 ||
14388 		    memcmp(&vpd_data[j], "1028", 4))
14389 			goto partno;
14390 
14391 		j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
14392 					      PCI_VPD_RO_KEYWORD_VENDOR0);
14393 		if (j < 0)
14394 			goto partno;
14395 
14396 		len = pci_vpd_info_field_size(&vpd_data[j]);
14397 
14398 		j += PCI_VPD_INFO_FLD_HDR_SIZE;
14399 		if (j + len > block_end)
14400 			goto partno;
14401 
14402 		memcpy(tp->fw_ver, &vpd_data[j], len);
14403 		strncat(tp->fw_ver, " bc ", vpdlen - len - 1);
14404 	}
14405 
14406 partno:
14407 	i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
14408 				      PCI_VPD_RO_KEYWORD_PARTNO);
14409 	if (i < 0)
14410 		goto out_not_found;
14411 
14412 	len = pci_vpd_info_field_size(&vpd_data[i]);
14413 
14414 	i += PCI_VPD_INFO_FLD_HDR_SIZE;
14415 	if (len > TG3_BPN_SIZE ||
14416 	    (len + i) > vpdlen)
14417 		goto out_not_found;
14418 
14419 	memcpy(tp->board_part_number, &vpd_data[i], len);
14420 
14421 out_not_found:
14422 	kfree(vpd_data);
14423 	if (tp->board_part_number[0])
14424 		return;
14425 
14426 out_no_vpd:
14427 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
14428 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
14429 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
14430 			strcpy(tp->board_part_number, "BCM5717");
14431 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
14432 			strcpy(tp->board_part_number, "BCM5718");
14433 		else
14434 			goto nomatch;
14435 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
14436 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
14437 			strcpy(tp->board_part_number, "BCM57780");
14438 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
14439 			strcpy(tp->board_part_number, "BCM57760");
14440 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
14441 			strcpy(tp->board_part_number, "BCM57790");
14442 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
14443 			strcpy(tp->board_part_number, "BCM57788");
14444 		else
14445 			goto nomatch;
14446 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
14447 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
14448 			strcpy(tp->board_part_number, "BCM57761");
14449 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
14450 			strcpy(tp->board_part_number, "BCM57765");
14451 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
14452 			strcpy(tp->board_part_number, "BCM57781");
14453 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
14454 			strcpy(tp->board_part_number, "BCM57785");
14455 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
14456 			strcpy(tp->board_part_number, "BCM57791");
14457 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
14458 			strcpy(tp->board_part_number, "BCM57795");
14459 		else
14460 			goto nomatch;
14461 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) {
14462 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
14463 			strcpy(tp->board_part_number, "BCM57762");
14464 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
14465 			strcpy(tp->board_part_number, "BCM57766");
14466 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
14467 			strcpy(tp->board_part_number, "BCM57782");
14468 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14469 			strcpy(tp->board_part_number, "BCM57786");
14470 		else
14471 			goto nomatch;
14472 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14473 		strcpy(tp->board_part_number, "BCM95906");
14474 	} else {
14475 nomatch:
14476 		strcpy(tp->board_part_number, "none");
14477 	}
14478 }
14479 
14480 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
14481 {
14482 	u32 val;
14483 
14484 	if (tg3_nvram_read(tp, offset, &val) ||
14485 	    (val & 0xfc000000) != 0x0c000000 ||
14486 	    tg3_nvram_read(tp, offset + 4, &val) ||
14487 	    val != 0)
14488 		return 0;
14489 
14490 	return 1;
14491 }
14492 
14493 static void tg3_read_bc_ver(struct tg3 *tp)
14494 {
14495 	u32 val, offset, start, ver_offset;
14496 	int i, dst_off;
14497 	bool newver = false;
14498 
14499 	if (tg3_nvram_read(tp, 0xc, &offset) ||
14500 	    tg3_nvram_read(tp, 0x4, &start))
14501 		return;
14502 
14503 	offset = tg3_nvram_logical_addr(tp, offset);
14504 
14505 	if (tg3_nvram_read(tp, offset, &val))
14506 		return;
14507 
14508 	if ((val & 0xfc000000) == 0x0c000000) {
14509 		if (tg3_nvram_read(tp, offset + 4, &val))
14510 			return;
14511 
14512 		if (val == 0)
14513 			newver = true;
14514 	}
14515 
14516 	dst_off = strlen(tp->fw_ver);
14517 
14518 	if (newver) {
14519 		if (TG3_VER_SIZE - dst_off < 16 ||
14520 		    tg3_nvram_read(tp, offset + 8, &ver_offset))
14521 			return;
14522 
14523 		offset = offset + ver_offset - start;
14524 		for (i = 0; i < 16; i += 4) {
14525 			__be32 v;
14526 			if (tg3_nvram_read_be32(tp, offset + i, &v))
14527 				return;
14528 
14529 			memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
14530 		}
14531 	} else {
14532 		u32 major, minor;
14533 
14534 		if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
14535 			return;
14536 
14537 		major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
14538 			TG3_NVM_BCVER_MAJSFT;
14539 		minor = ver_offset & TG3_NVM_BCVER_MINMSK;
14540 		snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
14541 			 "v%d.%02d", major, minor);
14542 	}
14543 }
14544 
14545 static void tg3_read_hwsb_ver(struct tg3 *tp)
14546 {
14547 	u32 val, major, minor;
14548 
14549 	/* Use native endian representation */
14550 	if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
14551 		return;
14552 
14553 	major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
14554 		TG3_NVM_HWSB_CFG1_MAJSFT;
14555 	minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
14556 		TG3_NVM_HWSB_CFG1_MINSFT;
14557 
14558 	snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
14559 }
14560 
14561 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
14562 {
14563 	u32 offset, major, minor, build;
14564 
14565 	strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
14566 
14567 	if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
14568 		return;
14569 
14570 	switch (val & TG3_EEPROM_SB_REVISION_MASK) {
14571 	case TG3_EEPROM_SB_REVISION_0:
14572 		offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
14573 		break;
14574 	case TG3_EEPROM_SB_REVISION_2:
14575 		offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
14576 		break;
14577 	case TG3_EEPROM_SB_REVISION_3:
14578 		offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
14579 		break;
14580 	case TG3_EEPROM_SB_REVISION_4:
14581 		offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
14582 		break;
14583 	case TG3_EEPROM_SB_REVISION_5:
14584 		offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
14585 		break;
14586 	case TG3_EEPROM_SB_REVISION_6:
14587 		offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
14588 		break;
14589 	default:
14590 		return;
14591 	}
14592 
14593 	if (tg3_nvram_read(tp, offset, &val))
14594 		return;
14595 
14596 	build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
14597 		TG3_EEPROM_SB_EDH_BLD_SHFT;
14598 	major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
14599 		TG3_EEPROM_SB_EDH_MAJ_SHFT;
14600 	minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
14601 
14602 	if (minor > 99 || build > 26)
14603 		return;
14604 
14605 	offset = strlen(tp->fw_ver);
14606 	snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
14607 		 " v%d.%02d", major, minor);
14608 
14609 	if (build > 0) {
14610 		offset = strlen(tp->fw_ver);
14611 		if (offset < TG3_VER_SIZE - 1)
14612 			tp->fw_ver[offset] = 'a' + build - 1;
14613 	}
14614 }
14615 
14616 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
14617 {
14618 	u32 val, offset, start;
14619 	int i, vlen;
14620 
14621 	for (offset = TG3_NVM_DIR_START;
14622 	     offset < TG3_NVM_DIR_END;
14623 	     offset += TG3_NVM_DIRENT_SIZE) {
14624 		if (tg3_nvram_read(tp, offset, &val))
14625 			return;
14626 
14627 		if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
14628 			break;
14629 	}
14630 
14631 	if (offset == TG3_NVM_DIR_END)
14632 		return;
14633 
14634 	if (!tg3_flag(tp, 5705_PLUS))
14635 		start = 0x08000000;
14636 	else if (tg3_nvram_read(tp, offset - 4, &start))
14637 		return;
14638 
14639 	if (tg3_nvram_read(tp, offset + 4, &offset) ||
14640 	    !tg3_fw_img_is_valid(tp, offset) ||
14641 	    tg3_nvram_read(tp, offset + 8, &val))
14642 		return;
14643 
14644 	offset += val - start;
14645 
14646 	vlen = strlen(tp->fw_ver);
14647 
14648 	tp->fw_ver[vlen++] = ',';
14649 	tp->fw_ver[vlen++] = ' ';
14650 
14651 	for (i = 0; i < 4; i++) {
14652 		__be32 v;
14653 		if (tg3_nvram_read_be32(tp, offset, &v))
14654 			return;
14655 
14656 		offset += sizeof(v);
14657 
14658 		if (vlen > TG3_VER_SIZE - sizeof(v)) {
14659 			memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
14660 			break;
14661 		}
14662 
14663 		memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
14664 		vlen += sizeof(v);
14665 	}
14666 }
14667 
14668 static void tg3_probe_ncsi(struct tg3 *tp)
14669 {
14670 	u32 apedata;
14671 
14672 	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
14673 	if (apedata != APE_SEG_SIG_MAGIC)
14674 		return;
14675 
14676 	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
14677 	if (!(apedata & APE_FW_STATUS_READY))
14678 		return;
14679 
14680 	if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
14681 		tg3_flag_set(tp, APE_HAS_NCSI);
14682 }
14683 
14684 static void tg3_read_dash_ver(struct tg3 *tp)
14685 {
14686 	int vlen;
14687 	u32 apedata;
14688 	char *fwtype;
14689 
14690 	apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
14691 
14692 	if (tg3_flag(tp, APE_HAS_NCSI))
14693 		fwtype = "NCSI";
14694 	else
14695 		fwtype = "DASH";
14696 
14697 	vlen = strlen(tp->fw_ver);
14698 
14699 	snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
14700 		 fwtype,
14701 		 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
14702 		 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
14703 		 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
14704 		 (apedata & APE_FW_VERSION_BLDMSK));
14705 }
14706 
14707 static void tg3_read_fw_ver(struct tg3 *tp)
14708 {
14709 	u32 val;
14710 	bool vpd_vers = false;
14711 
14712 	if (tp->fw_ver[0] != 0)
14713 		vpd_vers = true;
14714 
14715 	if (tg3_flag(tp, NO_NVRAM)) {
14716 		strcat(tp->fw_ver, "sb");
14717 		return;
14718 	}
14719 
14720 	if (tg3_nvram_read(tp, 0, &val))
14721 		return;
14722 
14723 	if (val == TG3_EEPROM_MAGIC)
14724 		tg3_read_bc_ver(tp);
14725 	else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
14726 		tg3_read_sb_ver(tp, val);
14727 	else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
14728 		tg3_read_hwsb_ver(tp);
14729 
14730 	if (tg3_flag(tp, ENABLE_ASF)) {
14731 		if (tg3_flag(tp, ENABLE_APE)) {
14732 			tg3_probe_ncsi(tp);
14733 			if (!vpd_vers)
14734 				tg3_read_dash_ver(tp);
14735 		} else if (!vpd_vers) {
14736 			tg3_read_mgmtfw_ver(tp);
14737 		}
14738 	}
14739 
14740 	tp->fw_ver[TG3_VER_SIZE - 1] = 0;
14741 }
14742 
14743 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
14744 {
14745 	if (tg3_flag(tp, LRG_PROD_RING_CAP))
14746 		return TG3_RX_RET_MAX_SIZE_5717;
14747 	else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
14748 		return TG3_RX_RET_MAX_SIZE_5700;
14749 	else
14750 		return TG3_RX_RET_MAX_SIZE_5705;
14751 }
14752 
14753 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
14754 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
14755 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
14756 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
14757 	{ },
14758 };
14759 
14760 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
14761 {
14762 	struct pci_dev *peer;
14763 	unsigned int func, devnr = tp->pdev->devfn & ~7;
14764 
14765 	for (func = 0; func < 8; func++) {
14766 		peer = pci_get_slot(tp->pdev->bus, devnr | func);
14767 		if (peer && peer != tp->pdev)
14768 			break;
14769 		pci_dev_put(peer);
14770 	}
14771 	/* 5704 can be configured in single-port mode, set peer to
14772 	 * tp->pdev in that case.
14773 	 */
14774 	if (!peer) {
14775 		peer = tp->pdev;
14776 		return peer;
14777 	}
14778 
14779 	/*
14780 	 * We don't need to keep the refcount elevated; there's no way
14781 	 * to remove one half of this device without removing the other
14782 	 */
14783 	pci_dev_put(peer);
14784 
14785 	return peer;
14786 }
14787 
14788 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
14789 {
14790 	tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
14791 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
14792 		u32 reg;
14793 
14794 		/* All devices that use the alternate
14795 		 * ASIC REV location have a CPMU.
14796 		 */
14797 		tg3_flag_set(tp, CPMU_PRESENT);
14798 
14799 		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
14800 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
14801 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
14802 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
14803 		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720)
14804 			reg = TG3PCI_GEN2_PRODID_ASICREV;
14805 		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
14806 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
14807 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
14808 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
14809 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
14810 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
14811 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
14812 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
14813 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
14814 			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14815 			reg = TG3PCI_GEN15_PRODID_ASICREV;
14816 		else
14817 			reg = TG3PCI_PRODID_ASICREV;
14818 
14819 		pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
14820 	}
14821 
14822 	/* Wrong chip ID in 5752 A0. This code can be removed later
14823 	 * as A0 is not in production.
14824 	 */
14825 	if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
14826 		tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
14827 
14828 	if (tp->pci_chip_rev_id == CHIPREV_ID_5717_C0)
14829 		tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
14830 
14831 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
14832 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14833 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
14834 		tg3_flag_set(tp, 5717_PLUS);
14835 
14836 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 ||
14837 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766)
14838 		tg3_flag_set(tp, 57765_CLASS);
14839 
14840 	if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS))
14841 		tg3_flag_set(tp, 57765_PLUS);
14842 
14843 	/* Intentionally exclude ASIC_REV_5906 */
14844 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
14845 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
14846 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
14847 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
14848 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
14849 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
14850 	    tg3_flag(tp, 57765_PLUS))
14851 		tg3_flag_set(tp, 5755_PLUS);
14852 
14853 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
14854 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
14855 		tg3_flag_set(tp, 5780_CLASS);
14856 
14857 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
14858 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
14859 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
14860 	    tg3_flag(tp, 5755_PLUS) ||
14861 	    tg3_flag(tp, 5780_CLASS))
14862 		tg3_flag_set(tp, 5750_PLUS);
14863 
14864 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
14865 	    tg3_flag(tp, 5750_PLUS))
14866 		tg3_flag_set(tp, 5705_PLUS);
14867 }
14868 
14869 static bool tg3_10_100_only_device(struct tg3 *tp,
14870 				   const struct pci_device_id *ent)
14871 {
14872 	u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
14873 
14874 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
14875 	    (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
14876 	    (tp->phy_flags & TG3_PHYFLG_IS_FET))
14877 		return true;
14878 
14879 	if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
14880 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
14881 			if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
14882 				return true;
14883 		} else {
14884 			return true;
14885 		}
14886 	}
14887 
14888 	return false;
14889 }
14890 
14891 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
14892 {
14893 	u32 misc_ctrl_reg;
14894 	u32 pci_state_reg, grc_misc_cfg;
14895 	u32 val;
14896 	u16 pci_cmd;
14897 	int err;
14898 
14899 	/* Force memory write invalidate off.  If we leave it on,
14900 	 * then on 5700_BX chips we have to enable a workaround.
14901 	 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
14902 	 * to match the cacheline size.  The Broadcom driver have this
14903 	 * workaround but turns MWI off all the times so never uses
14904 	 * it.  This seems to suggest that the workaround is insufficient.
14905 	 */
14906 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14907 	pci_cmd &= ~PCI_COMMAND_INVALIDATE;
14908 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14909 
14910 	/* Important! -- Make sure register accesses are byteswapped
14911 	 * correctly.  Also, for those chips that require it, make
14912 	 * sure that indirect register accesses are enabled before
14913 	 * the first operation.
14914 	 */
14915 	pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14916 			      &misc_ctrl_reg);
14917 	tp->misc_host_ctrl |= (misc_ctrl_reg &
14918 			       MISC_HOST_CTRL_CHIPREV);
14919 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14920 			       tp->misc_host_ctrl);
14921 
14922 	tg3_detect_asic_rev(tp, misc_ctrl_reg);
14923 
14924 	/* If we have 5702/03 A1 or A2 on certain ICH chipsets,
14925 	 * we need to disable memory and use config. cycles
14926 	 * only to access all registers. The 5702/03 chips
14927 	 * can mistakenly decode the special cycles from the
14928 	 * ICH chipsets as memory write cycles, causing corruption
14929 	 * of register and memory space. Only certain ICH bridges
14930 	 * will drive special cycles with non-zero data during the
14931 	 * address phase which can fall within the 5703's address
14932 	 * range. This is not an ICH bug as the PCI spec allows
14933 	 * non-zero address during special cycles. However, only
14934 	 * these ICH bridges are known to drive non-zero addresses
14935 	 * during special cycles.
14936 	 *
14937 	 * Since special cycles do not cross PCI bridges, we only
14938 	 * enable this workaround if the 5703 is on the secondary
14939 	 * bus of these ICH bridges.
14940 	 */
14941 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
14942 	    (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
14943 		static struct tg3_dev_id {
14944 			u32	vendor;
14945 			u32	device;
14946 			u32	rev;
14947 		} ich_chipsets[] = {
14948 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
14949 			  PCI_ANY_ID },
14950 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
14951 			  PCI_ANY_ID },
14952 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
14953 			  0xa },
14954 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
14955 			  PCI_ANY_ID },
14956 			{ },
14957 		};
14958 		struct tg3_dev_id *pci_id = &ich_chipsets[0];
14959 		struct pci_dev *bridge = NULL;
14960 
14961 		while (pci_id->vendor != 0) {
14962 			bridge = pci_get_device(pci_id->vendor, pci_id->device,
14963 						bridge);
14964 			if (!bridge) {
14965 				pci_id++;
14966 				continue;
14967 			}
14968 			if (pci_id->rev != PCI_ANY_ID) {
14969 				if (bridge->revision > pci_id->rev)
14970 					continue;
14971 			}
14972 			if (bridge->subordinate &&
14973 			    (bridge->subordinate->number ==
14974 			     tp->pdev->bus->number)) {
14975 				tg3_flag_set(tp, ICH_WORKAROUND);
14976 				pci_dev_put(bridge);
14977 				break;
14978 			}
14979 		}
14980 	}
14981 
14982 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
14983 		static struct tg3_dev_id {
14984 			u32	vendor;
14985 			u32	device;
14986 		} bridge_chipsets[] = {
14987 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
14988 			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
14989 			{ },
14990 		};
14991 		struct tg3_dev_id *pci_id = &bridge_chipsets[0];
14992 		struct pci_dev *bridge = NULL;
14993 
14994 		while (pci_id->vendor != 0) {
14995 			bridge = pci_get_device(pci_id->vendor,
14996 						pci_id->device,
14997 						bridge);
14998 			if (!bridge) {
14999 				pci_id++;
15000 				continue;
15001 			}
15002 			if (bridge->subordinate &&
15003 			    (bridge->subordinate->number <=
15004 			     tp->pdev->bus->number) &&
15005 			    (bridge->subordinate->busn_res.end >=
15006 			     tp->pdev->bus->number)) {
15007 				tg3_flag_set(tp, 5701_DMA_BUG);
15008 				pci_dev_put(bridge);
15009 				break;
15010 			}
15011 		}
15012 	}
15013 
15014 	/* The EPB bridge inside 5714, 5715, and 5780 cannot support
15015 	 * DMA addresses > 40-bit. This bridge may have other additional
15016 	 * 57xx devices behind it in some 4-port NIC designs for example.
15017 	 * Any tg3 device found behind the bridge will also need the 40-bit
15018 	 * DMA workaround.
15019 	 */
15020 	if (tg3_flag(tp, 5780_CLASS)) {
15021 		tg3_flag_set(tp, 40BIT_DMA_BUG);
15022 		tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
15023 	} else {
15024 		struct pci_dev *bridge = NULL;
15025 
15026 		do {
15027 			bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
15028 						PCI_DEVICE_ID_SERVERWORKS_EPB,
15029 						bridge);
15030 			if (bridge && bridge->subordinate &&
15031 			    (bridge->subordinate->number <=
15032 			     tp->pdev->bus->number) &&
15033 			    (bridge->subordinate->busn_res.end >=
15034 			     tp->pdev->bus->number)) {
15035 				tg3_flag_set(tp, 40BIT_DMA_BUG);
15036 				pci_dev_put(bridge);
15037 				break;
15038 			}
15039 		} while (bridge);
15040 	}
15041 
15042 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
15043 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)
15044 		tp->pdev_peer = tg3_find_peer(tp);
15045 
15046 	/* Determine TSO capabilities */
15047 	if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0)
15048 		; /* Do nothing. HW bug. */
15049 	else if (tg3_flag(tp, 57765_PLUS))
15050 		tg3_flag_set(tp, HW_TSO_3);
15051 	else if (tg3_flag(tp, 5755_PLUS) ||
15052 		 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15053 		tg3_flag_set(tp, HW_TSO_2);
15054 	else if (tg3_flag(tp, 5750_PLUS)) {
15055 		tg3_flag_set(tp, HW_TSO_1);
15056 		tg3_flag_set(tp, TSO_BUG);
15057 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 &&
15058 		    tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
15059 			tg3_flag_clear(tp, TSO_BUG);
15060 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15061 		   GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
15062 		   tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
15063 			tg3_flag_set(tp, TSO_BUG);
15064 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
15065 			tp->fw_needed = FIRMWARE_TG3TSO5;
15066 		else
15067 			tp->fw_needed = FIRMWARE_TG3TSO;
15068 	}
15069 
15070 	/* Selectively allow TSO based on operating conditions */
15071 	if (tg3_flag(tp, HW_TSO_1) ||
15072 	    tg3_flag(tp, HW_TSO_2) ||
15073 	    tg3_flag(tp, HW_TSO_3) ||
15074 	    tp->fw_needed) {
15075 		/* For firmware TSO, assume ASF is disabled.
15076 		 * We'll disable TSO later if we discover ASF
15077 		 * is enabled in tg3_get_eeprom_hw_cfg().
15078 		 */
15079 		tg3_flag_set(tp, TSO_CAPABLE);
15080 	} else {
15081 		tg3_flag_clear(tp, TSO_CAPABLE);
15082 		tg3_flag_clear(tp, TSO_BUG);
15083 		tp->fw_needed = NULL;
15084 	}
15085 
15086 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
15087 		tp->fw_needed = FIRMWARE_TG3;
15088 
15089 	tp->irq_max = 1;
15090 
15091 	if (tg3_flag(tp, 5750_PLUS)) {
15092 		tg3_flag_set(tp, SUPPORT_MSI);
15093 		if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
15094 		    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
15095 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
15096 		     tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
15097 		     tp->pdev_peer == tp->pdev))
15098 			tg3_flag_clear(tp, SUPPORT_MSI);
15099 
15100 		if (tg3_flag(tp, 5755_PLUS) ||
15101 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
15102 			tg3_flag_set(tp, 1SHOT_MSI);
15103 		}
15104 
15105 		if (tg3_flag(tp, 57765_PLUS)) {
15106 			tg3_flag_set(tp, SUPPORT_MSIX);
15107 			tp->irq_max = TG3_IRQ_MAX_VECS;
15108 		}
15109 	}
15110 
15111 	tp->txq_max = 1;
15112 	tp->rxq_max = 1;
15113 	if (tp->irq_max > 1) {
15114 		tp->rxq_max = TG3_RSS_MAX_NUM_QS;
15115 		tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
15116 
15117 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
15118 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
15119 			tp->txq_max = tp->irq_max - 1;
15120 	}
15121 
15122 	if (tg3_flag(tp, 5755_PLUS) ||
15123 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15124 		tg3_flag_set(tp, SHORT_DMA_BUG);
15125 
15126 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)
15127 		tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
15128 
15129 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
15130 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
15131 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
15132 		tg3_flag_set(tp, LRG_PROD_RING_CAP);
15133 
15134 	if (tg3_flag(tp, 57765_PLUS) &&
15135 	    tp->pci_chip_rev_id != CHIPREV_ID_5719_A0)
15136 		tg3_flag_set(tp, USE_JUMBO_BDFLAG);
15137 
15138 	if (!tg3_flag(tp, 5705_PLUS) ||
15139 	    tg3_flag(tp, 5780_CLASS) ||
15140 	    tg3_flag(tp, USE_JUMBO_BDFLAG))
15141 		tg3_flag_set(tp, JUMBO_CAPABLE);
15142 
15143 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
15144 			      &pci_state_reg);
15145 
15146 	if (pci_is_pcie(tp->pdev)) {
15147 		u16 lnkctl;
15148 
15149 		tg3_flag_set(tp, PCI_EXPRESS);
15150 
15151 		pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
15152 		if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
15153 			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
15154 			    ASIC_REV_5906) {
15155 				tg3_flag_clear(tp, HW_TSO_2);
15156 				tg3_flag_clear(tp, TSO_CAPABLE);
15157 			}
15158 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
15159 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
15160 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 ||
15161 			    tp->pci_chip_rev_id == CHIPREV_ID_57780_A1)
15162 				tg3_flag_set(tp, CLKREQ_BUG);
15163 		} else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) {
15164 			tg3_flag_set(tp, L1PLLPD_EN);
15165 		}
15166 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
15167 		/* BCM5785 devices are effectively PCIe devices, and should
15168 		 * follow PCIe codepaths, but do not have a PCIe capabilities
15169 		 * section.
15170 		 */
15171 		tg3_flag_set(tp, PCI_EXPRESS);
15172 	} else if (!tg3_flag(tp, 5705_PLUS) ||
15173 		   tg3_flag(tp, 5780_CLASS)) {
15174 		tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
15175 		if (!tp->pcix_cap) {
15176 			dev_err(&tp->pdev->dev,
15177 				"Cannot find PCI-X capability, aborting\n");
15178 			return -EIO;
15179 		}
15180 
15181 		if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
15182 			tg3_flag_set(tp, PCIX_MODE);
15183 	}
15184 
15185 	/* If we have an AMD 762 or VIA K8T800 chipset, write
15186 	 * reordering to the mailbox registers done by the host
15187 	 * controller can cause major troubles.  We read back from
15188 	 * every mailbox register write to force the writes to be
15189 	 * posted to the chip in order.
15190 	 */
15191 	if (pci_dev_present(tg3_write_reorder_chipsets) &&
15192 	    !tg3_flag(tp, PCI_EXPRESS))
15193 		tg3_flag_set(tp, MBOX_WRITE_REORDER);
15194 
15195 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
15196 			     &tp->pci_cacheline_sz);
15197 	pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
15198 			     &tp->pci_lat_timer);
15199 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
15200 	    tp->pci_lat_timer < 64) {
15201 		tp->pci_lat_timer = 64;
15202 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
15203 				      tp->pci_lat_timer);
15204 	}
15205 
15206 	/* Important! -- It is critical that the PCI-X hw workaround
15207 	 * situation is decided before the first MMIO register access.
15208 	 */
15209 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
15210 		/* 5700 BX chips need to have their TX producer index
15211 		 * mailboxes written twice to workaround a bug.
15212 		 */
15213 		tg3_flag_set(tp, TXD_MBOX_HWBUG);
15214 
15215 		/* If we are in PCI-X mode, enable register write workaround.
15216 		 *
15217 		 * The workaround is to use indirect register accesses
15218 		 * for all chip writes not to mailbox registers.
15219 		 */
15220 		if (tg3_flag(tp, PCIX_MODE)) {
15221 			u32 pm_reg;
15222 
15223 			tg3_flag_set(tp, PCIX_TARGET_HWBUG);
15224 
15225 			/* The chip can have it's power management PCI config
15226 			 * space registers clobbered due to this bug.
15227 			 * So explicitly force the chip into D0 here.
15228 			 */
15229 			pci_read_config_dword(tp->pdev,
15230 					      tp->pm_cap + PCI_PM_CTRL,
15231 					      &pm_reg);
15232 			pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
15233 			pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
15234 			pci_write_config_dword(tp->pdev,
15235 					       tp->pm_cap + PCI_PM_CTRL,
15236 					       pm_reg);
15237 
15238 			/* Also, force SERR#/PERR# in PCI command. */
15239 			pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
15240 			pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
15241 			pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
15242 		}
15243 	}
15244 
15245 	if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
15246 		tg3_flag_set(tp, PCI_HIGH_SPEED);
15247 	if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
15248 		tg3_flag_set(tp, PCI_32BIT);
15249 
15250 	/* Chip-specific fixup from Broadcom driver */
15251 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
15252 	    (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
15253 		pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
15254 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
15255 	}
15256 
15257 	/* Default fast path register access methods */
15258 	tp->read32 = tg3_read32;
15259 	tp->write32 = tg3_write32;
15260 	tp->read32_mbox = tg3_read32;
15261 	tp->write32_mbox = tg3_write32;
15262 	tp->write32_tx_mbox = tg3_write32;
15263 	tp->write32_rx_mbox = tg3_write32;
15264 
15265 	/* Various workaround register access methods */
15266 	if (tg3_flag(tp, PCIX_TARGET_HWBUG))
15267 		tp->write32 = tg3_write_indirect_reg32;
15268 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
15269 		 (tg3_flag(tp, PCI_EXPRESS) &&
15270 		  tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
15271 		/*
15272 		 * Back to back register writes can cause problems on these
15273 		 * chips, the workaround is to read back all reg writes
15274 		 * except those to mailbox regs.
15275 		 *
15276 		 * See tg3_write_indirect_reg32().
15277 		 */
15278 		tp->write32 = tg3_write_flush_reg32;
15279 	}
15280 
15281 	if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
15282 		tp->write32_tx_mbox = tg3_write32_tx_mbox;
15283 		if (tg3_flag(tp, MBOX_WRITE_REORDER))
15284 			tp->write32_rx_mbox = tg3_write_flush_reg32;
15285 	}
15286 
15287 	if (tg3_flag(tp, ICH_WORKAROUND)) {
15288 		tp->read32 = tg3_read_indirect_reg32;
15289 		tp->write32 = tg3_write_indirect_reg32;
15290 		tp->read32_mbox = tg3_read_indirect_mbox;
15291 		tp->write32_mbox = tg3_write_indirect_mbox;
15292 		tp->write32_tx_mbox = tg3_write_indirect_mbox;
15293 		tp->write32_rx_mbox = tg3_write_indirect_mbox;
15294 
15295 		iounmap(tp->regs);
15296 		tp->regs = NULL;
15297 
15298 		pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
15299 		pci_cmd &= ~PCI_COMMAND_MEMORY;
15300 		pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
15301 	}
15302 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
15303 		tp->read32_mbox = tg3_read32_mbox_5906;
15304 		tp->write32_mbox = tg3_write32_mbox_5906;
15305 		tp->write32_tx_mbox = tg3_write32_mbox_5906;
15306 		tp->write32_rx_mbox = tg3_write32_mbox_5906;
15307 	}
15308 
15309 	if (tp->write32 == tg3_write_indirect_reg32 ||
15310 	    (tg3_flag(tp, PCIX_MODE) &&
15311 	     (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15312 	      GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
15313 		tg3_flag_set(tp, SRAM_USE_CONFIG);
15314 
15315 	/* The memory arbiter has to be enabled in order for SRAM accesses
15316 	 * to succeed.  Normally on powerup the tg3 chip firmware will make
15317 	 * sure it is enabled, but other entities such as system netboot
15318 	 * code might disable it.
15319 	 */
15320 	val = tr32(MEMARB_MODE);
15321 	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
15322 
15323 	tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
15324 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
15325 	    tg3_flag(tp, 5780_CLASS)) {
15326 		if (tg3_flag(tp, PCIX_MODE)) {
15327 			pci_read_config_dword(tp->pdev,
15328 					      tp->pcix_cap + PCI_X_STATUS,
15329 					      &val);
15330 			tp->pci_fn = val & 0x7;
15331 		}
15332 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
15333 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
15334 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
15335 		    NIC_SRAM_CPMUSTAT_SIG) {
15336 			tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717;
15337 			tp->pci_fn = tp->pci_fn ? 1 : 0;
15338 		}
15339 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
15340 		   GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) {
15341 		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
15342 		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
15343 		    NIC_SRAM_CPMUSTAT_SIG) {
15344 			tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
15345 				     TG3_CPMU_STATUS_FSHFT_5719;
15346 		}
15347 	}
15348 
15349 	/* Get eeprom hw config before calling tg3_set_power_state().
15350 	 * In particular, the TG3_FLAG_IS_NIC flag must be
15351 	 * determined before calling tg3_set_power_state() so that
15352 	 * we know whether or not to switch out of Vaux power.
15353 	 * When the flag is set, it means that GPIO1 is used for eeprom
15354 	 * write protect and also implies that it is a LOM where GPIOs
15355 	 * are not used to switch power.
15356 	 */
15357 	tg3_get_eeprom_hw_cfg(tp);
15358 
15359 	if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) {
15360 		tg3_flag_clear(tp, TSO_CAPABLE);
15361 		tg3_flag_clear(tp, TSO_BUG);
15362 		tp->fw_needed = NULL;
15363 	}
15364 
15365 	if (tg3_flag(tp, ENABLE_APE)) {
15366 		/* Allow reads and writes to the
15367 		 * APE register and memory space.
15368 		 */
15369 		pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
15370 				 PCISTATE_ALLOW_APE_SHMEM_WR |
15371 				 PCISTATE_ALLOW_APE_PSPACE_WR;
15372 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
15373 				       pci_state_reg);
15374 
15375 		tg3_ape_lock_init(tp);
15376 	}
15377 
15378 	/* Set up tp->grc_local_ctrl before calling
15379 	 * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
15380 	 * will bring 5700's external PHY out of reset.
15381 	 * It is also used as eeprom write protect on LOMs.
15382 	 */
15383 	tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
15384 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15385 	    tg3_flag(tp, EEPROM_WRITE_PROT))
15386 		tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
15387 				       GRC_LCLCTRL_GPIO_OUTPUT1);
15388 	/* Unused GPIO3 must be driven as output on 5752 because there
15389 	 * are no pull-up resistors on unused GPIO pins.
15390 	 */
15391 	else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
15392 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
15393 
15394 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
15395 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
15396 	    tg3_flag(tp, 57765_CLASS))
15397 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
15398 
15399 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
15400 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
15401 		/* Turn off the debug UART. */
15402 		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
15403 		if (tg3_flag(tp, IS_NIC))
15404 			/* Keep VMain power. */
15405 			tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
15406 					      GRC_LCLCTRL_GPIO_OUTPUT0;
15407 	}
15408 
15409 	/* Switch out of Vaux if it is a NIC */
15410 	tg3_pwrsrc_switch_to_vmain(tp);
15411 
15412 	/* Derive initial jumbo mode from MTU assigned in
15413 	 * ether_setup() via the alloc_etherdev() call
15414 	 */
15415 	if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
15416 		tg3_flag_set(tp, JUMBO_RING_ENABLE);
15417 
15418 	/* Determine WakeOnLan speed to use. */
15419 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15420 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
15421 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
15422 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
15423 		tg3_flag_clear(tp, WOL_SPEED_100MB);
15424 	} else {
15425 		tg3_flag_set(tp, WOL_SPEED_100MB);
15426 	}
15427 
15428 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15429 		tp->phy_flags |= TG3_PHYFLG_IS_FET;
15430 
15431 	/* A few boards don't want Ethernet@WireSpeed phy feature */
15432 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
15433 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
15434 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
15435 	     (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
15436 	    (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
15437 	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15438 		tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
15439 
15440 	if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
15441 	    GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
15442 		tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
15443 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
15444 		tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
15445 
15446 	if (tg3_flag(tp, 5705_PLUS) &&
15447 	    !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
15448 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 &&
15449 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 &&
15450 	    !tg3_flag(tp, 57765_PLUS)) {
15451 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
15452 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
15453 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
15454 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
15455 			if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
15456 			    tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
15457 				tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
15458 			if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
15459 				tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
15460 		} else
15461 			tp->phy_flags |= TG3_PHYFLG_BER_BUG;
15462 	}
15463 
15464 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
15465 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
15466 		tp->phy_otp = tg3_read_otp_phycfg(tp);
15467 		if (tp->phy_otp == 0)
15468 			tp->phy_otp = TG3_OTP_DEFAULT;
15469 	}
15470 
15471 	if (tg3_flag(tp, CPMU_PRESENT))
15472 		tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
15473 	else
15474 		tp->mi_mode = MAC_MI_MODE_BASE;
15475 
15476 	tp->coalesce_mode = 0;
15477 	if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
15478 	    GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
15479 		tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
15480 
15481 	/* Set these bits to enable statistics workaround. */
15482 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
15483 	    tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
15484 	    tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) {
15485 		tp->coalesce_mode |= HOSTCC_MODE_ATTN;
15486 		tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
15487 	}
15488 
15489 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
15490 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
15491 		tg3_flag_set(tp, USE_PHYLIB);
15492 
15493 	err = tg3_mdio_init(tp);
15494 	if (err)
15495 		return err;
15496 
15497 	/* Initialize data/descriptor byte/word swapping. */
15498 	val = tr32(GRC_MODE);
15499 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
15500 		val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
15501 			GRC_MODE_WORD_SWAP_B2HRX_DATA |
15502 			GRC_MODE_B2HRX_ENABLE |
15503 			GRC_MODE_HTX2B_ENABLE |
15504 			GRC_MODE_HOST_STACKUP);
15505 	else
15506 		val &= GRC_MODE_HOST_STACKUP;
15507 
15508 	tw32(GRC_MODE, val | tp->grc_mode);
15509 
15510 	tg3_switch_clocks(tp);
15511 
15512 	/* Clear this out for sanity. */
15513 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
15514 
15515 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
15516 			      &pci_state_reg);
15517 	if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
15518 	    !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
15519 		u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
15520 
15521 		if (chiprevid == CHIPREV_ID_5701_A0 ||
15522 		    chiprevid == CHIPREV_ID_5701_B0 ||
15523 		    chiprevid == CHIPREV_ID_5701_B2 ||
15524 		    chiprevid == CHIPREV_ID_5701_B5) {
15525 			void __iomem *sram_base;
15526 
15527 			/* Write some dummy words into the SRAM status block
15528 			 * area, see if it reads back correctly.  If the return
15529 			 * value is bad, force enable the PCIX workaround.
15530 			 */
15531 			sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
15532 
15533 			writel(0x00000000, sram_base);
15534 			writel(0x00000000, sram_base + 4);
15535 			writel(0xffffffff, sram_base + 4);
15536 			if (readl(sram_base) != 0x00000000)
15537 				tg3_flag_set(tp, PCIX_TARGET_HWBUG);
15538 		}
15539 	}
15540 
15541 	udelay(50);
15542 	tg3_nvram_init(tp);
15543 
15544 	grc_misc_cfg = tr32(GRC_MISC_CFG);
15545 	grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
15546 
15547 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
15548 	    (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
15549 	     grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
15550 		tg3_flag_set(tp, IS_5788);
15551 
15552 	if (!tg3_flag(tp, IS_5788) &&
15553 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
15554 		tg3_flag_set(tp, TAGGED_STATUS);
15555 	if (tg3_flag(tp, TAGGED_STATUS)) {
15556 		tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
15557 				      HOSTCC_MODE_CLRTICK_TXBD);
15558 
15559 		tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
15560 		pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
15561 				       tp->misc_host_ctrl);
15562 	}
15563 
15564 	/* Preserve the APE MAC_MODE bits */
15565 	if (tg3_flag(tp, ENABLE_APE))
15566 		tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
15567 	else
15568 		tp->mac_mode = 0;
15569 
15570 	if (tg3_10_100_only_device(tp, ent))
15571 		tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
15572 
15573 	err = tg3_phy_probe(tp);
15574 	if (err) {
15575 		dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
15576 		/* ... but do not return immediately ... */
15577 		tg3_mdio_fini(tp);
15578 	}
15579 
15580 	tg3_read_vpd(tp);
15581 	tg3_read_fw_ver(tp);
15582 
15583 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
15584 		tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
15585 	} else {
15586 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
15587 			tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
15588 		else
15589 			tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
15590 	}
15591 
15592 	/* 5700 {AX,BX} chips have a broken status block link
15593 	 * change bit implementation, so we must use the
15594 	 * status register in those cases.
15595 	 */
15596 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
15597 		tg3_flag_set(tp, USE_LINKCHG_REG);
15598 	else
15599 		tg3_flag_clear(tp, USE_LINKCHG_REG);
15600 
15601 	/* The led_ctrl is set during tg3_phy_probe, here we might
15602 	 * have to force the link status polling mechanism based
15603 	 * upon subsystem IDs.
15604 	 */
15605 	if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
15606 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
15607 	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
15608 		tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
15609 		tg3_flag_set(tp, USE_LINKCHG_REG);
15610 	}
15611 
15612 	/* For all SERDES we poll the MAC status register. */
15613 	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
15614 		tg3_flag_set(tp, POLL_SERDES);
15615 	else
15616 		tg3_flag_clear(tp, POLL_SERDES);
15617 
15618 	tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
15619 	tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
15620 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
15621 	    tg3_flag(tp, PCIX_MODE)) {
15622 		tp->rx_offset = NET_SKB_PAD;
15623 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
15624 		tp->rx_copy_thresh = ~(u16)0;
15625 #endif
15626 	}
15627 
15628 	tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
15629 	tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
15630 	tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
15631 
15632 	tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
15633 
15634 	/* Increment the rx prod index on the rx std ring by at most
15635 	 * 8 for these chips to workaround hw errata.
15636 	 */
15637 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
15638 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
15639 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
15640 		tp->rx_std_max_post = 8;
15641 
15642 	if (tg3_flag(tp, ASPM_WORKAROUND))
15643 		tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
15644 				     PCIE_PWR_MGMT_L1_THRESH_MSK;
15645 
15646 	return err;
15647 }
15648 
15649 #ifdef CONFIG_SPARC
15650 static int tg3_get_macaddr_sparc(struct tg3 *tp)
15651 {
15652 	struct net_device *dev = tp->dev;
15653 	struct pci_dev *pdev = tp->pdev;
15654 	struct device_node *dp = pci_device_to_OF_node(pdev);
15655 	const unsigned char *addr;
15656 	int len;
15657 
15658 	addr = of_get_property(dp, "local-mac-address", &len);
15659 	if (addr && len == 6) {
15660 		memcpy(dev->dev_addr, addr, 6);
15661 		memcpy(dev->perm_addr, dev->dev_addr, 6);
15662 		return 0;
15663 	}
15664 	return -ENODEV;
15665 }
15666 
15667 static int tg3_get_default_macaddr_sparc(struct tg3 *tp)
15668 {
15669 	struct net_device *dev = tp->dev;
15670 
15671 	memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
15672 	memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
15673 	return 0;
15674 }
15675 #endif
15676 
15677 static int tg3_get_device_address(struct tg3 *tp)
15678 {
15679 	struct net_device *dev = tp->dev;
15680 	u32 hi, lo, mac_offset;
15681 	int addr_ok = 0;
15682 
15683 #ifdef CONFIG_SPARC
15684 	if (!tg3_get_macaddr_sparc(tp))
15685 		return 0;
15686 #endif
15687 
15688 	mac_offset = 0x7c;
15689 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
15690 	    tg3_flag(tp, 5780_CLASS)) {
15691 		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
15692 			mac_offset = 0xcc;
15693 		if (tg3_nvram_lock(tp))
15694 			tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
15695 		else
15696 			tg3_nvram_unlock(tp);
15697 	} else if (tg3_flag(tp, 5717_PLUS)) {
15698 		if (tp->pci_fn & 1)
15699 			mac_offset = 0xcc;
15700 		if (tp->pci_fn > 1)
15701 			mac_offset += 0x18c;
15702 	} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15703 		mac_offset = 0x10;
15704 
15705 	/* First try to get it from MAC address mailbox. */
15706 	tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
15707 	if ((hi >> 16) == 0x484b) {
15708 		dev->dev_addr[0] = (hi >>  8) & 0xff;
15709 		dev->dev_addr[1] = (hi >>  0) & 0xff;
15710 
15711 		tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
15712 		dev->dev_addr[2] = (lo >> 24) & 0xff;
15713 		dev->dev_addr[3] = (lo >> 16) & 0xff;
15714 		dev->dev_addr[4] = (lo >>  8) & 0xff;
15715 		dev->dev_addr[5] = (lo >>  0) & 0xff;
15716 
15717 		/* Some old bootcode may report a 0 MAC address in SRAM */
15718 		addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
15719 	}
15720 	if (!addr_ok) {
15721 		/* Next, try NVRAM. */
15722 		if (!tg3_flag(tp, NO_NVRAM) &&
15723 		    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
15724 		    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
15725 			memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
15726 			memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
15727 		}
15728 		/* Finally just fetch it out of the MAC control regs. */
15729 		else {
15730 			hi = tr32(MAC_ADDR_0_HIGH);
15731 			lo = tr32(MAC_ADDR_0_LOW);
15732 
15733 			dev->dev_addr[5] = lo & 0xff;
15734 			dev->dev_addr[4] = (lo >> 8) & 0xff;
15735 			dev->dev_addr[3] = (lo >> 16) & 0xff;
15736 			dev->dev_addr[2] = (lo >> 24) & 0xff;
15737 			dev->dev_addr[1] = hi & 0xff;
15738 			dev->dev_addr[0] = (hi >> 8) & 0xff;
15739 		}
15740 	}
15741 
15742 	if (!is_valid_ether_addr(&dev->dev_addr[0])) {
15743 #ifdef CONFIG_SPARC
15744 		if (!tg3_get_default_macaddr_sparc(tp))
15745 			return 0;
15746 #endif
15747 		return -EINVAL;
15748 	}
15749 	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
15750 	return 0;
15751 }
15752 
15753 #define BOUNDARY_SINGLE_CACHELINE	1
15754 #define BOUNDARY_MULTI_CACHELINE	2
15755 
15756 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
15757 {
15758 	int cacheline_size;
15759 	u8 byte;
15760 	int goal;
15761 
15762 	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
15763 	if (byte == 0)
15764 		cacheline_size = 1024;
15765 	else
15766 		cacheline_size = (int) byte * 4;
15767 
15768 	/* On 5703 and later chips, the boundary bits have no
15769 	 * effect.
15770 	 */
15771 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
15772 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
15773 	    !tg3_flag(tp, PCI_EXPRESS))
15774 		goto out;
15775 
15776 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
15777 	goal = BOUNDARY_MULTI_CACHELINE;
15778 #else
15779 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
15780 	goal = BOUNDARY_SINGLE_CACHELINE;
15781 #else
15782 	goal = 0;
15783 #endif
15784 #endif
15785 
15786 	if (tg3_flag(tp, 57765_PLUS)) {
15787 		val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
15788 		goto out;
15789 	}
15790 
15791 	if (!goal)
15792 		goto out;
15793 
15794 	/* PCI controllers on most RISC systems tend to disconnect
15795 	 * when a device tries to burst across a cache-line boundary.
15796 	 * Therefore, letting tg3 do so just wastes PCI bandwidth.
15797 	 *
15798 	 * Unfortunately, for PCI-E there are only limited
15799 	 * write-side controls for this, and thus for reads
15800 	 * we will still get the disconnects.  We'll also waste
15801 	 * these PCI cycles for both read and write for chips
15802 	 * other than 5700 and 5701 which do not implement the
15803 	 * boundary bits.
15804 	 */
15805 	if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
15806 		switch (cacheline_size) {
15807 		case 16:
15808 		case 32:
15809 		case 64:
15810 		case 128:
15811 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15812 				val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
15813 					DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
15814 			} else {
15815 				val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
15816 					DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
15817 			}
15818 			break;
15819 
15820 		case 256:
15821 			val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
15822 				DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
15823 			break;
15824 
15825 		default:
15826 			val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
15827 				DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
15828 			break;
15829 		}
15830 	} else if (tg3_flag(tp, PCI_EXPRESS)) {
15831 		switch (cacheline_size) {
15832 		case 16:
15833 		case 32:
15834 		case 64:
15835 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15836 				val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
15837 				val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
15838 				break;
15839 			}
15840 			/* fallthrough */
15841 		case 128:
15842 		default:
15843 			val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
15844 			val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
15845 			break;
15846 		}
15847 	} else {
15848 		switch (cacheline_size) {
15849 		case 16:
15850 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15851 				val |= (DMA_RWCTRL_READ_BNDRY_16 |
15852 					DMA_RWCTRL_WRITE_BNDRY_16);
15853 				break;
15854 			}
15855 			/* fallthrough */
15856 		case 32:
15857 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15858 				val |= (DMA_RWCTRL_READ_BNDRY_32 |
15859 					DMA_RWCTRL_WRITE_BNDRY_32);
15860 				break;
15861 			}
15862 			/* fallthrough */
15863 		case 64:
15864 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15865 				val |= (DMA_RWCTRL_READ_BNDRY_64 |
15866 					DMA_RWCTRL_WRITE_BNDRY_64);
15867 				break;
15868 			}
15869 			/* fallthrough */
15870 		case 128:
15871 			if (goal == BOUNDARY_SINGLE_CACHELINE) {
15872 				val |= (DMA_RWCTRL_READ_BNDRY_128 |
15873 					DMA_RWCTRL_WRITE_BNDRY_128);
15874 				break;
15875 			}
15876 			/* fallthrough */
15877 		case 256:
15878 			val |= (DMA_RWCTRL_READ_BNDRY_256 |
15879 				DMA_RWCTRL_WRITE_BNDRY_256);
15880 			break;
15881 		case 512:
15882 			val |= (DMA_RWCTRL_READ_BNDRY_512 |
15883 				DMA_RWCTRL_WRITE_BNDRY_512);
15884 			break;
15885 		case 1024:
15886 		default:
15887 			val |= (DMA_RWCTRL_READ_BNDRY_1024 |
15888 				DMA_RWCTRL_WRITE_BNDRY_1024);
15889 			break;
15890 		}
15891 	}
15892 
15893 out:
15894 	return val;
15895 }
15896 
15897 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
15898 			   int size, int to_device)
15899 {
15900 	struct tg3_internal_buffer_desc test_desc;
15901 	u32 sram_dma_descs;
15902 	int i, ret;
15903 
15904 	sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
15905 
15906 	tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
15907 	tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
15908 	tw32(RDMAC_STATUS, 0);
15909 	tw32(WDMAC_STATUS, 0);
15910 
15911 	tw32(BUFMGR_MODE, 0);
15912 	tw32(FTQ_RESET, 0);
15913 
15914 	test_desc.addr_hi = ((u64) buf_dma) >> 32;
15915 	test_desc.addr_lo = buf_dma & 0xffffffff;
15916 	test_desc.nic_mbuf = 0x00002100;
15917 	test_desc.len = size;
15918 
15919 	/*
15920 	 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
15921 	 * the *second* time the tg3 driver was getting loaded after an
15922 	 * initial scan.
15923 	 *
15924 	 * Broadcom tells me:
15925 	 *   ...the DMA engine is connected to the GRC block and a DMA
15926 	 *   reset may affect the GRC block in some unpredictable way...
15927 	 *   The behavior of resets to individual blocks has not been tested.
15928 	 *
15929 	 * Broadcom noted the GRC reset will also reset all sub-components.
15930 	 */
15931 	if (to_device) {
15932 		test_desc.cqid_sqid = (13 << 8) | 2;
15933 
15934 		tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
15935 		udelay(40);
15936 	} else {
15937 		test_desc.cqid_sqid = (16 << 8) | 7;
15938 
15939 		tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
15940 		udelay(40);
15941 	}
15942 	test_desc.flags = 0x00000005;
15943 
15944 	for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
15945 		u32 val;
15946 
15947 		val = *(((u32 *)&test_desc) + i);
15948 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
15949 				       sram_dma_descs + (i * sizeof(u32)));
15950 		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
15951 	}
15952 	pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
15953 
15954 	if (to_device)
15955 		tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
15956 	else
15957 		tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
15958 
15959 	ret = -ENODEV;
15960 	for (i = 0; i < 40; i++) {
15961 		u32 val;
15962 
15963 		if (to_device)
15964 			val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
15965 		else
15966 			val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
15967 		if ((val & 0xffff) == sram_dma_descs) {
15968 			ret = 0;
15969 			break;
15970 		}
15971 
15972 		udelay(100);
15973 	}
15974 
15975 	return ret;
15976 }
15977 
15978 #define TEST_BUFFER_SIZE	0x2000
15979 
15980 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
15981 	{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
15982 	{ },
15983 };
15984 
15985 static int tg3_test_dma(struct tg3 *tp)
15986 {
15987 	dma_addr_t buf_dma;
15988 	u32 *buf, saved_dma_rwctrl;
15989 	int ret = 0;
15990 
15991 	buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
15992 				 &buf_dma, GFP_KERNEL);
15993 	if (!buf) {
15994 		ret = -ENOMEM;
15995 		goto out_nofree;
15996 	}
15997 
15998 	tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
15999 			  (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
16000 
16001 	tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
16002 
16003 	if (tg3_flag(tp, 57765_PLUS))
16004 		goto out;
16005 
16006 	if (tg3_flag(tp, PCI_EXPRESS)) {
16007 		/* DMA read watermark not used on PCIE */
16008 		tp->dma_rwctrl |= 0x00180000;
16009 	} else if (!tg3_flag(tp, PCIX_MODE)) {
16010 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
16011 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
16012 			tp->dma_rwctrl |= 0x003f0000;
16013 		else
16014 			tp->dma_rwctrl |= 0x003f000f;
16015 	} else {
16016 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
16017 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
16018 			u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
16019 			u32 read_water = 0x7;
16020 
16021 			/* If the 5704 is behind the EPB bridge, we can
16022 			 * do the less restrictive ONE_DMA workaround for
16023 			 * better performance.
16024 			 */
16025 			if (tg3_flag(tp, 40BIT_DMA_BUG) &&
16026 			    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
16027 				tp->dma_rwctrl |= 0x8000;
16028 			else if (ccval == 0x6 || ccval == 0x7)
16029 				tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
16030 
16031 			if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
16032 				read_water = 4;
16033 			/* Set bit 23 to enable PCIX hw bug fix */
16034 			tp->dma_rwctrl |=
16035 				(read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
16036 				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
16037 				(1 << 23);
16038 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
16039 			/* 5780 always in PCIX mode */
16040 			tp->dma_rwctrl |= 0x00144000;
16041 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
16042 			/* 5714 always in PCIX mode */
16043 			tp->dma_rwctrl |= 0x00148000;
16044 		} else {
16045 			tp->dma_rwctrl |= 0x001b000f;
16046 		}
16047 	}
16048 
16049 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
16050 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
16051 		tp->dma_rwctrl &= 0xfffffff0;
16052 
16053 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
16054 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
16055 		/* Remove this if it causes problems for some boards. */
16056 		tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
16057 
16058 		/* On 5700/5701 chips, we need to set this bit.
16059 		 * Otherwise the chip will issue cacheline transactions
16060 		 * to streamable DMA memory with not all the byte
16061 		 * enables turned on.  This is an error on several
16062 		 * RISC PCI controllers, in particular sparc64.
16063 		 *
16064 		 * On 5703/5704 chips, this bit has been reassigned
16065 		 * a different meaning.  In particular, it is used
16066 		 * on those chips to enable a PCI-X workaround.
16067 		 */
16068 		tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
16069 	}
16070 
16071 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
16072 
16073 #if 0
16074 	/* Unneeded, already done by tg3_get_invariants.  */
16075 	tg3_switch_clocks(tp);
16076 #endif
16077 
16078 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
16079 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
16080 		goto out;
16081 
16082 	/* It is best to perform DMA test with maximum write burst size
16083 	 * to expose the 5700/5701 write DMA bug.
16084 	 */
16085 	saved_dma_rwctrl = tp->dma_rwctrl;
16086 	tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
16087 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
16088 
16089 	while (1) {
16090 		u32 *p = buf, i;
16091 
16092 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
16093 			p[i] = i;
16094 
16095 		/* Send the buffer to the chip. */
16096 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
16097 		if (ret) {
16098 			dev_err(&tp->pdev->dev,
16099 				"%s: Buffer write failed. err = %d\n",
16100 				__func__, ret);
16101 			break;
16102 		}
16103 
16104 #if 0
16105 		/* validate data reached card RAM correctly. */
16106 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
16107 			u32 val;
16108 			tg3_read_mem(tp, 0x2100 + (i*4), &val);
16109 			if (le32_to_cpu(val) != p[i]) {
16110 				dev_err(&tp->pdev->dev,
16111 					"%s: Buffer corrupted on device! "
16112 					"(%d != %d)\n", __func__, val, i);
16113 				/* ret = -ENODEV here? */
16114 			}
16115 			p[i] = 0;
16116 		}
16117 #endif
16118 		/* Now read it back. */
16119 		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
16120 		if (ret) {
16121 			dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
16122 				"err = %d\n", __func__, ret);
16123 			break;
16124 		}
16125 
16126 		/* Verify it. */
16127 		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
16128 			if (p[i] == i)
16129 				continue;
16130 
16131 			if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
16132 			    DMA_RWCTRL_WRITE_BNDRY_16) {
16133 				tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
16134 				tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
16135 				tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
16136 				break;
16137 			} else {
16138 				dev_err(&tp->pdev->dev,
16139 					"%s: Buffer corrupted on read back! "
16140 					"(%d != %d)\n", __func__, p[i], i);
16141 				ret = -ENODEV;
16142 				goto out;
16143 			}
16144 		}
16145 
16146 		if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
16147 			/* Success. */
16148 			ret = 0;
16149 			break;
16150 		}
16151 	}
16152 	if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
16153 	    DMA_RWCTRL_WRITE_BNDRY_16) {
16154 		/* DMA test passed without adjusting DMA boundary,
16155 		 * now look for chipsets that are known to expose the
16156 		 * DMA bug without failing the test.
16157 		 */
16158 		if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
16159 			tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
16160 			tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
16161 		} else {
16162 			/* Safe to use the calculated DMA boundary. */
16163 			tp->dma_rwctrl = saved_dma_rwctrl;
16164 		}
16165 
16166 		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
16167 	}
16168 
16169 out:
16170 	dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
16171 out_nofree:
16172 	return ret;
16173 }
16174 
16175 static void tg3_init_bufmgr_config(struct tg3 *tp)
16176 {
16177 	if (tg3_flag(tp, 57765_PLUS)) {
16178 		tp->bufmgr_config.mbuf_read_dma_low_water =
16179 			DEFAULT_MB_RDMA_LOW_WATER_5705;
16180 		tp->bufmgr_config.mbuf_mac_rx_low_water =
16181 			DEFAULT_MB_MACRX_LOW_WATER_57765;
16182 		tp->bufmgr_config.mbuf_high_water =
16183 			DEFAULT_MB_HIGH_WATER_57765;
16184 
16185 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
16186 			DEFAULT_MB_RDMA_LOW_WATER_5705;
16187 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
16188 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
16189 		tp->bufmgr_config.mbuf_high_water_jumbo =
16190 			DEFAULT_MB_HIGH_WATER_JUMBO_57765;
16191 	} else if (tg3_flag(tp, 5705_PLUS)) {
16192 		tp->bufmgr_config.mbuf_read_dma_low_water =
16193 			DEFAULT_MB_RDMA_LOW_WATER_5705;
16194 		tp->bufmgr_config.mbuf_mac_rx_low_water =
16195 			DEFAULT_MB_MACRX_LOW_WATER_5705;
16196 		tp->bufmgr_config.mbuf_high_water =
16197 			DEFAULT_MB_HIGH_WATER_5705;
16198 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
16199 			tp->bufmgr_config.mbuf_mac_rx_low_water =
16200 				DEFAULT_MB_MACRX_LOW_WATER_5906;
16201 			tp->bufmgr_config.mbuf_high_water =
16202 				DEFAULT_MB_HIGH_WATER_5906;
16203 		}
16204 
16205 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
16206 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
16207 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
16208 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
16209 		tp->bufmgr_config.mbuf_high_water_jumbo =
16210 			DEFAULT_MB_HIGH_WATER_JUMBO_5780;
16211 	} else {
16212 		tp->bufmgr_config.mbuf_read_dma_low_water =
16213 			DEFAULT_MB_RDMA_LOW_WATER;
16214 		tp->bufmgr_config.mbuf_mac_rx_low_water =
16215 			DEFAULT_MB_MACRX_LOW_WATER;
16216 		tp->bufmgr_config.mbuf_high_water =
16217 			DEFAULT_MB_HIGH_WATER;
16218 
16219 		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
16220 			DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
16221 		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
16222 			DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
16223 		tp->bufmgr_config.mbuf_high_water_jumbo =
16224 			DEFAULT_MB_HIGH_WATER_JUMBO;
16225 	}
16226 
16227 	tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
16228 	tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
16229 }
16230 
16231 static char *tg3_phy_string(struct tg3 *tp)
16232 {
16233 	switch (tp->phy_id & TG3_PHY_ID_MASK) {
16234 	case TG3_PHY_ID_BCM5400:	return "5400";
16235 	case TG3_PHY_ID_BCM5401:	return "5401";
16236 	case TG3_PHY_ID_BCM5411:	return "5411";
16237 	case TG3_PHY_ID_BCM5701:	return "5701";
16238 	case TG3_PHY_ID_BCM5703:	return "5703";
16239 	case TG3_PHY_ID_BCM5704:	return "5704";
16240 	case TG3_PHY_ID_BCM5705:	return "5705";
16241 	case TG3_PHY_ID_BCM5750:	return "5750";
16242 	case TG3_PHY_ID_BCM5752:	return "5752";
16243 	case TG3_PHY_ID_BCM5714:	return "5714";
16244 	case TG3_PHY_ID_BCM5780:	return "5780";
16245 	case TG3_PHY_ID_BCM5755:	return "5755";
16246 	case TG3_PHY_ID_BCM5787:	return "5787";
16247 	case TG3_PHY_ID_BCM5784:	return "5784";
16248 	case TG3_PHY_ID_BCM5756:	return "5722/5756";
16249 	case TG3_PHY_ID_BCM5906:	return "5906";
16250 	case TG3_PHY_ID_BCM5761:	return "5761";
16251 	case TG3_PHY_ID_BCM5718C:	return "5718C";
16252 	case TG3_PHY_ID_BCM5718S:	return "5718S";
16253 	case TG3_PHY_ID_BCM57765:	return "57765";
16254 	case TG3_PHY_ID_BCM5719C:	return "5719C";
16255 	case TG3_PHY_ID_BCM5720C:	return "5720C";
16256 	case TG3_PHY_ID_BCM8002:	return "8002/serdes";
16257 	case 0:			return "serdes";
16258 	default:		return "unknown";
16259 	}
16260 }
16261 
16262 static char *tg3_bus_string(struct tg3 *tp, char *str)
16263 {
16264 	if (tg3_flag(tp, PCI_EXPRESS)) {
16265 		strcpy(str, "PCI Express");
16266 		return str;
16267 	} else if (tg3_flag(tp, PCIX_MODE)) {
16268 		u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
16269 
16270 		strcpy(str, "PCIX:");
16271 
16272 		if ((clock_ctrl == 7) ||
16273 		    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
16274 		     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
16275 			strcat(str, "133MHz");
16276 		else if (clock_ctrl == 0)
16277 			strcat(str, "33MHz");
16278 		else if (clock_ctrl == 2)
16279 			strcat(str, "50MHz");
16280 		else if (clock_ctrl == 4)
16281 			strcat(str, "66MHz");
16282 		else if (clock_ctrl == 6)
16283 			strcat(str, "100MHz");
16284 	} else {
16285 		strcpy(str, "PCI:");
16286 		if (tg3_flag(tp, PCI_HIGH_SPEED))
16287 			strcat(str, "66MHz");
16288 		else
16289 			strcat(str, "33MHz");
16290 	}
16291 	if (tg3_flag(tp, PCI_32BIT))
16292 		strcat(str, ":32-bit");
16293 	else
16294 		strcat(str, ":64-bit");
16295 	return str;
16296 }
16297 
16298 static void tg3_init_coal(struct tg3 *tp)
16299 {
16300 	struct ethtool_coalesce *ec = &tp->coal;
16301 
16302 	memset(ec, 0, sizeof(*ec));
16303 	ec->cmd = ETHTOOL_GCOALESCE;
16304 	ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
16305 	ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
16306 	ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
16307 	ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
16308 	ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
16309 	ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
16310 	ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
16311 	ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
16312 	ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
16313 
16314 	if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
16315 				 HOSTCC_MODE_CLRTICK_TXBD)) {
16316 		ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
16317 		ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
16318 		ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
16319 		ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
16320 	}
16321 
16322 	if (tg3_flag(tp, 5705_PLUS)) {
16323 		ec->rx_coalesce_usecs_irq = 0;
16324 		ec->tx_coalesce_usecs_irq = 0;
16325 		ec->stats_block_coalesce_usecs = 0;
16326 	}
16327 }
16328 
16329 static int tg3_init_one(struct pci_dev *pdev,
16330 				  const struct pci_device_id *ent)
16331 {
16332 	struct net_device *dev;
16333 	struct tg3 *tp;
16334 	int i, err, pm_cap;
16335 	u32 sndmbx, rcvmbx, intmbx;
16336 	char str[40];
16337 	u64 dma_mask, persist_dma_mask;
16338 	netdev_features_t features = 0;
16339 
16340 	printk_once(KERN_INFO "%s\n", version);
16341 
16342 	err = pci_enable_device(pdev);
16343 	if (err) {
16344 		dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
16345 		return err;
16346 	}
16347 
16348 	err = pci_request_regions(pdev, DRV_MODULE_NAME);
16349 	if (err) {
16350 		dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
16351 		goto err_out_disable_pdev;
16352 	}
16353 
16354 	pci_set_master(pdev);
16355 
16356 	/* Find power-management capability. */
16357 	pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
16358 	if (pm_cap == 0) {
16359 		dev_err(&pdev->dev,
16360 			"Cannot find Power Management capability, aborting\n");
16361 		err = -EIO;
16362 		goto err_out_free_res;
16363 	}
16364 
16365 	err = pci_set_power_state(pdev, PCI_D0);
16366 	if (err) {
16367 		dev_err(&pdev->dev, "Transition to D0 failed, aborting\n");
16368 		goto err_out_free_res;
16369 	}
16370 
16371 	dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
16372 	if (!dev) {
16373 		err = -ENOMEM;
16374 		goto err_out_power_down;
16375 	}
16376 
16377 	SET_NETDEV_DEV(dev, &pdev->dev);
16378 
16379 	tp = netdev_priv(dev);
16380 	tp->pdev = pdev;
16381 	tp->dev = dev;
16382 	tp->pm_cap = pm_cap;
16383 	tp->rx_mode = TG3_DEF_RX_MODE;
16384 	tp->tx_mode = TG3_DEF_TX_MODE;
16385 	tp->irq_sync = 1;
16386 
16387 	if (tg3_debug > 0)
16388 		tp->msg_enable = tg3_debug;
16389 	else
16390 		tp->msg_enable = TG3_DEF_MSG_ENABLE;
16391 
16392 	/* The word/byte swap controls here control register access byte
16393 	 * swapping.  DMA data byte swapping is controlled in the GRC_MODE
16394 	 * setting below.
16395 	 */
16396 	tp->misc_host_ctrl =
16397 		MISC_HOST_CTRL_MASK_PCI_INT |
16398 		MISC_HOST_CTRL_WORD_SWAP |
16399 		MISC_HOST_CTRL_INDIR_ACCESS |
16400 		MISC_HOST_CTRL_PCISTATE_RW;
16401 
16402 	/* The NONFRM (non-frame) byte/word swap controls take effect
16403 	 * on descriptor entries, anything which isn't packet data.
16404 	 *
16405 	 * The StrongARM chips on the board (one for tx, one for rx)
16406 	 * are running in big-endian mode.
16407 	 */
16408 	tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
16409 			GRC_MODE_WSWAP_NONFRM_DATA);
16410 #ifdef __BIG_ENDIAN
16411 	tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
16412 #endif
16413 	spin_lock_init(&tp->lock);
16414 	spin_lock_init(&tp->indirect_lock);
16415 	INIT_WORK(&tp->reset_task, tg3_reset_task);
16416 
16417 	tp->regs = pci_ioremap_bar(pdev, BAR_0);
16418 	if (!tp->regs) {
16419 		dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
16420 		err = -ENOMEM;
16421 		goto err_out_free_dev;
16422 	}
16423 
16424 	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16425 	    tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
16426 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
16427 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
16428 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16429 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16430 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16431 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16432 	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) {
16433 		tg3_flag_set(tp, ENABLE_APE);
16434 		tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
16435 		if (!tp->aperegs) {
16436 			dev_err(&pdev->dev,
16437 				"Cannot map APE registers, aborting\n");
16438 			err = -ENOMEM;
16439 			goto err_out_iounmap;
16440 		}
16441 	}
16442 
16443 	tp->rx_pending = TG3_DEF_RX_RING_PENDING;
16444 	tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
16445 
16446 	dev->ethtool_ops = &tg3_ethtool_ops;
16447 	dev->watchdog_timeo = TG3_TX_TIMEOUT;
16448 	dev->netdev_ops = &tg3_netdev_ops;
16449 	dev->irq = pdev->irq;
16450 
16451 	err = tg3_get_invariants(tp, ent);
16452 	if (err) {
16453 		dev_err(&pdev->dev,
16454 			"Problem fetching invariants of chip, aborting\n");
16455 		goto err_out_apeunmap;
16456 	}
16457 
16458 	/* The EPB bridge inside 5714, 5715, and 5780 and any
16459 	 * device behind the EPB cannot support DMA addresses > 40-bit.
16460 	 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
16461 	 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
16462 	 * do DMA address check in tg3_start_xmit().
16463 	 */
16464 	if (tg3_flag(tp, IS_5788))
16465 		persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
16466 	else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
16467 		persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
16468 #ifdef CONFIG_HIGHMEM
16469 		dma_mask = DMA_BIT_MASK(64);
16470 #endif
16471 	} else
16472 		persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
16473 
16474 	/* Configure DMA attributes. */
16475 	if (dma_mask > DMA_BIT_MASK(32)) {
16476 		err = pci_set_dma_mask(pdev, dma_mask);
16477 		if (!err) {
16478 			features |= NETIF_F_HIGHDMA;
16479 			err = pci_set_consistent_dma_mask(pdev,
16480 							  persist_dma_mask);
16481 			if (err < 0) {
16482 				dev_err(&pdev->dev, "Unable to obtain 64 bit "
16483 					"DMA for consistent allocations\n");
16484 				goto err_out_apeunmap;
16485 			}
16486 		}
16487 	}
16488 	if (err || dma_mask == DMA_BIT_MASK(32)) {
16489 		err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
16490 		if (err) {
16491 			dev_err(&pdev->dev,
16492 				"No usable DMA configuration, aborting\n");
16493 			goto err_out_apeunmap;
16494 		}
16495 	}
16496 
16497 	tg3_init_bufmgr_config(tp);
16498 
16499 	features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
16500 
16501 	/* 5700 B0 chips do not support checksumming correctly due
16502 	 * to hardware bugs.
16503 	 */
16504 	if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) {
16505 		features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
16506 
16507 		if (tg3_flag(tp, 5755_PLUS))
16508 			features |= NETIF_F_IPV6_CSUM;
16509 	}
16510 
16511 	/* TSO is on by default on chips that support hardware TSO.
16512 	 * Firmware TSO on older chips gives lower performance, so it
16513 	 * is off by default, but can be enabled using ethtool.
16514 	 */
16515 	if ((tg3_flag(tp, HW_TSO_1) ||
16516 	     tg3_flag(tp, HW_TSO_2) ||
16517 	     tg3_flag(tp, HW_TSO_3)) &&
16518 	    (features & NETIF_F_IP_CSUM))
16519 		features |= NETIF_F_TSO;
16520 	if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
16521 		if (features & NETIF_F_IPV6_CSUM)
16522 			features |= NETIF_F_TSO6;
16523 		if (tg3_flag(tp, HW_TSO_3) ||
16524 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
16525 		    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
16526 		     GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) ||
16527 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
16528 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780)
16529 			features |= NETIF_F_TSO_ECN;
16530 	}
16531 
16532 	dev->features |= features;
16533 	dev->vlan_features |= features;
16534 
16535 	/*
16536 	 * Add loopback capability only for a subset of devices that support
16537 	 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
16538 	 * loopback for the remaining devices.
16539 	 */
16540 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 &&
16541 	    !tg3_flag(tp, CPMU_PRESENT))
16542 		/* Add the loopback capability */
16543 		features |= NETIF_F_LOOPBACK;
16544 
16545 	dev->hw_features |= features;
16546 
16547 	if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
16548 	    !tg3_flag(tp, TSO_CAPABLE) &&
16549 	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
16550 		tg3_flag_set(tp, MAX_RXPEND_64);
16551 		tp->rx_pending = 63;
16552 	}
16553 
16554 	err = tg3_get_device_address(tp);
16555 	if (err) {
16556 		dev_err(&pdev->dev,
16557 			"Could not obtain valid ethernet address, aborting\n");
16558 		goto err_out_apeunmap;
16559 	}
16560 
16561 	/*
16562 	 * Reset chip in case UNDI or EFI driver did not shutdown
16563 	 * DMA self test will enable WDMAC and we'll see (spurious)
16564 	 * pending DMA on the PCI bus at that point.
16565 	 */
16566 	if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
16567 	    (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
16568 		tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
16569 		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16570 	}
16571 
16572 	err = tg3_test_dma(tp);
16573 	if (err) {
16574 		dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
16575 		goto err_out_apeunmap;
16576 	}
16577 
16578 	intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
16579 	rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
16580 	sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
16581 	for (i = 0; i < tp->irq_max; i++) {
16582 		struct tg3_napi *tnapi = &tp->napi[i];
16583 
16584 		tnapi->tp = tp;
16585 		tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
16586 
16587 		tnapi->int_mbox = intmbx;
16588 		if (i <= 4)
16589 			intmbx += 0x8;
16590 		else
16591 			intmbx += 0x4;
16592 
16593 		tnapi->consmbox = rcvmbx;
16594 		tnapi->prodmbox = sndmbx;
16595 
16596 		if (i)
16597 			tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
16598 		else
16599 			tnapi->coal_now = HOSTCC_MODE_NOW;
16600 
16601 		if (!tg3_flag(tp, SUPPORT_MSIX))
16602 			break;
16603 
16604 		/*
16605 		 * If we support MSIX, we'll be using RSS.  If we're using
16606 		 * RSS, the first vector only handles link interrupts and the
16607 		 * remaining vectors handle rx and tx interrupts.  Reuse the
16608 		 * mailbox values for the next iteration.  The values we setup
16609 		 * above are still useful for the single vectored mode.
16610 		 */
16611 		if (!i)
16612 			continue;
16613 
16614 		rcvmbx += 0x8;
16615 
16616 		if (sndmbx & 0x4)
16617 			sndmbx -= 0x4;
16618 		else
16619 			sndmbx += 0xc;
16620 	}
16621 
16622 	tg3_init_coal(tp);
16623 
16624 	pci_set_drvdata(pdev, dev);
16625 
16626 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
16627 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
16628 		tg3_flag_set(tp, PTP_CAPABLE);
16629 
16630 	if (tg3_flag(tp, 5717_PLUS)) {
16631 		/* Resume a low-power mode */
16632 		tg3_frob_aux_power(tp, false);
16633 	}
16634 
16635 	tg3_timer_init(tp);
16636 
16637 	err = register_netdev(dev);
16638 	if (err) {
16639 		dev_err(&pdev->dev, "Cannot register net device, aborting\n");
16640 		goto err_out_apeunmap;
16641 	}
16642 
16643 	netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
16644 		    tp->board_part_number,
16645 		    tp->pci_chip_rev_id,
16646 		    tg3_bus_string(tp, str),
16647 		    dev->dev_addr);
16648 
16649 	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
16650 		struct phy_device *phydev;
16651 		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
16652 		netdev_info(dev,
16653 			    "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
16654 			    phydev->drv->name, dev_name(&phydev->dev));
16655 	} else {
16656 		char *ethtype;
16657 
16658 		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
16659 			ethtype = "10/100Base-TX";
16660 		else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
16661 			ethtype = "1000Base-SX";
16662 		else
16663 			ethtype = "10/100/1000Base-T";
16664 
16665 		netdev_info(dev, "attached PHY is %s (%s Ethernet) "
16666 			    "(WireSpeed[%d], EEE[%d])\n",
16667 			    tg3_phy_string(tp), ethtype,
16668 			    (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
16669 			    (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
16670 	}
16671 
16672 	netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
16673 		    (dev->features & NETIF_F_RXCSUM) != 0,
16674 		    tg3_flag(tp, USE_LINKCHG_REG) != 0,
16675 		    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
16676 		    tg3_flag(tp, ENABLE_ASF) != 0,
16677 		    tg3_flag(tp, TSO_CAPABLE) != 0);
16678 	netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
16679 		    tp->dma_rwctrl,
16680 		    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
16681 		    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
16682 
16683 	pci_save_state(pdev);
16684 
16685 	return 0;
16686 
16687 err_out_apeunmap:
16688 	if (tp->aperegs) {
16689 		iounmap(tp->aperegs);
16690 		tp->aperegs = NULL;
16691 	}
16692 
16693 err_out_iounmap:
16694 	if (tp->regs) {
16695 		iounmap(tp->regs);
16696 		tp->regs = NULL;
16697 	}
16698 
16699 err_out_free_dev:
16700 	free_netdev(dev);
16701 
16702 err_out_power_down:
16703 	pci_set_power_state(pdev, PCI_D3hot);
16704 
16705 err_out_free_res:
16706 	pci_release_regions(pdev);
16707 
16708 err_out_disable_pdev:
16709 	pci_disable_device(pdev);
16710 	pci_set_drvdata(pdev, NULL);
16711 	return err;
16712 }
16713 
16714 static void tg3_remove_one(struct pci_dev *pdev)
16715 {
16716 	struct net_device *dev = pci_get_drvdata(pdev);
16717 
16718 	if (dev) {
16719 		struct tg3 *tp = netdev_priv(dev);
16720 
16721 		release_firmware(tp->fw);
16722 
16723 		tg3_reset_task_cancel(tp);
16724 
16725 		if (tg3_flag(tp, USE_PHYLIB)) {
16726 			tg3_phy_fini(tp);
16727 			tg3_mdio_fini(tp);
16728 		}
16729 
16730 		unregister_netdev(dev);
16731 		if (tp->aperegs) {
16732 			iounmap(tp->aperegs);
16733 			tp->aperegs = NULL;
16734 		}
16735 		if (tp->regs) {
16736 			iounmap(tp->regs);
16737 			tp->regs = NULL;
16738 		}
16739 		free_netdev(dev);
16740 		pci_release_regions(pdev);
16741 		pci_disable_device(pdev);
16742 		pci_set_drvdata(pdev, NULL);
16743 	}
16744 }
16745 
16746 #ifdef CONFIG_PM_SLEEP
16747 static int tg3_suspend(struct device *device)
16748 {
16749 	struct pci_dev *pdev = to_pci_dev(device);
16750 	struct net_device *dev = pci_get_drvdata(pdev);
16751 	struct tg3 *tp = netdev_priv(dev);
16752 	int err;
16753 
16754 	if (!netif_running(dev))
16755 		return 0;
16756 
16757 	tg3_reset_task_cancel(tp);
16758 	tg3_phy_stop(tp);
16759 	tg3_netif_stop(tp);
16760 
16761 	tg3_timer_stop(tp);
16762 
16763 	tg3_full_lock(tp, 1);
16764 	tg3_disable_ints(tp);
16765 	tg3_full_unlock(tp);
16766 
16767 	netif_device_detach(dev);
16768 
16769 	tg3_full_lock(tp, 0);
16770 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16771 	tg3_flag_clear(tp, INIT_COMPLETE);
16772 	tg3_full_unlock(tp);
16773 
16774 	err = tg3_power_down_prepare(tp);
16775 	if (err) {
16776 		int err2;
16777 
16778 		tg3_full_lock(tp, 0);
16779 
16780 		tg3_flag_set(tp, INIT_COMPLETE);
16781 		err2 = tg3_restart_hw(tp, 1);
16782 		if (err2)
16783 			goto out;
16784 
16785 		tg3_timer_start(tp);
16786 
16787 		netif_device_attach(dev);
16788 		tg3_netif_start(tp);
16789 
16790 out:
16791 		tg3_full_unlock(tp);
16792 
16793 		if (!err2)
16794 			tg3_phy_start(tp);
16795 	}
16796 
16797 	return err;
16798 }
16799 
16800 static int tg3_resume(struct device *device)
16801 {
16802 	struct pci_dev *pdev = to_pci_dev(device);
16803 	struct net_device *dev = pci_get_drvdata(pdev);
16804 	struct tg3 *tp = netdev_priv(dev);
16805 	int err;
16806 
16807 	if (!netif_running(dev))
16808 		return 0;
16809 
16810 	netif_device_attach(dev);
16811 
16812 	tg3_full_lock(tp, 0);
16813 
16814 	tg3_flag_set(tp, INIT_COMPLETE);
16815 	err = tg3_restart_hw(tp, 1);
16816 	if (err)
16817 		goto out;
16818 
16819 	tg3_timer_start(tp);
16820 
16821 	tg3_netif_start(tp);
16822 
16823 out:
16824 	tg3_full_unlock(tp);
16825 
16826 	if (!err)
16827 		tg3_phy_start(tp);
16828 
16829 	return err;
16830 }
16831 
16832 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
16833 #define TG3_PM_OPS (&tg3_pm_ops)
16834 
16835 #else
16836 
16837 #define TG3_PM_OPS NULL
16838 
16839 #endif /* CONFIG_PM_SLEEP */
16840 
16841 /**
16842  * tg3_io_error_detected - called when PCI error is detected
16843  * @pdev: Pointer to PCI device
16844  * @state: The current pci connection state
16845  *
16846  * This function is called after a PCI bus error affecting
16847  * this device has been detected.
16848  */
16849 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
16850 					      pci_channel_state_t state)
16851 {
16852 	struct net_device *netdev = pci_get_drvdata(pdev);
16853 	struct tg3 *tp = netdev_priv(netdev);
16854 	pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
16855 
16856 	netdev_info(netdev, "PCI I/O error detected\n");
16857 
16858 	rtnl_lock();
16859 
16860 	if (!netif_running(netdev))
16861 		goto done;
16862 
16863 	tg3_phy_stop(tp);
16864 
16865 	tg3_netif_stop(tp);
16866 
16867 	tg3_timer_stop(tp);
16868 
16869 	/* Want to make sure that the reset task doesn't run */
16870 	tg3_reset_task_cancel(tp);
16871 
16872 	netif_device_detach(netdev);
16873 
16874 	/* Clean up software state, even if MMIO is blocked */
16875 	tg3_full_lock(tp, 0);
16876 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
16877 	tg3_full_unlock(tp);
16878 
16879 done:
16880 	if (state == pci_channel_io_perm_failure)
16881 		err = PCI_ERS_RESULT_DISCONNECT;
16882 	else
16883 		pci_disable_device(pdev);
16884 
16885 	rtnl_unlock();
16886 
16887 	return err;
16888 }
16889 
16890 /**
16891  * tg3_io_slot_reset - called after the pci bus has been reset.
16892  * @pdev: Pointer to PCI device
16893  *
16894  * Restart the card from scratch, as if from a cold-boot.
16895  * At this point, the card has exprienced a hard reset,
16896  * followed by fixups by BIOS, and has its config space
16897  * set up identically to what it was at cold boot.
16898  */
16899 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
16900 {
16901 	struct net_device *netdev = pci_get_drvdata(pdev);
16902 	struct tg3 *tp = netdev_priv(netdev);
16903 	pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
16904 	int err;
16905 
16906 	rtnl_lock();
16907 
16908 	if (pci_enable_device(pdev)) {
16909 		netdev_err(netdev, "Cannot re-enable PCI device after reset.\n");
16910 		goto done;
16911 	}
16912 
16913 	pci_set_master(pdev);
16914 	pci_restore_state(pdev);
16915 	pci_save_state(pdev);
16916 
16917 	if (!netif_running(netdev)) {
16918 		rc = PCI_ERS_RESULT_RECOVERED;
16919 		goto done;
16920 	}
16921 
16922 	err = tg3_power_up(tp);
16923 	if (err)
16924 		goto done;
16925 
16926 	rc = PCI_ERS_RESULT_RECOVERED;
16927 
16928 done:
16929 	rtnl_unlock();
16930 
16931 	return rc;
16932 }
16933 
16934 /**
16935  * tg3_io_resume - called when traffic can start flowing again.
16936  * @pdev: Pointer to PCI device
16937  *
16938  * This callback is called when the error recovery driver tells
16939  * us that its OK to resume normal operation.
16940  */
16941 static void tg3_io_resume(struct pci_dev *pdev)
16942 {
16943 	struct net_device *netdev = pci_get_drvdata(pdev);
16944 	struct tg3 *tp = netdev_priv(netdev);
16945 	int err;
16946 
16947 	rtnl_lock();
16948 
16949 	if (!netif_running(netdev))
16950 		goto done;
16951 
16952 	tg3_full_lock(tp, 0);
16953 	tg3_flag_set(tp, INIT_COMPLETE);
16954 	err = tg3_restart_hw(tp, 1);
16955 	if (err) {
16956 		tg3_full_unlock(tp);
16957 		netdev_err(netdev, "Cannot restart hardware after reset.\n");
16958 		goto done;
16959 	}
16960 
16961 	netif_device_attach(netdev);
16962 
16963 	tg3_timer_start(tp);
16964 
16965 	tg3_netif_start(tp);
16966 
16967 	tg3_full_unlock(tp);
16968 
16969 	tg3_phy_start(tp);
16970 
16971 done:
16972 	rtnl_unlock();
16973 }
16974 
16975 static const struct pci_error_handlers tg3_err_handler = {
16976 	.error_detected	= tg3_io_error_detected,
16977 	.slot_reset	= tg3_io_slot_reset,
16978 	.resume		= tg3_io_resume
16979 };
16980 
16981 static struct pci_driver tg3_driver = {
16982 	.name		= DRV_MODULE_NAME,
16983 	.id_table	= tg3_pci_tbl,
16984 	.probe		= tg3_init_one,
16985 	.remove		= tg3_remove_one,
16986 	.err_handler	= &tg3_err_handler,
16987 	.driver.pm	= TG3_PM_OPS,
16988 };
16989 
16990 static int __init tg3_init(void)
16991 {
16992 	return pci_register_driver(&tg3_driver);
16993 }
16994 
16995 static void __exit tg3_cleanup(void)
16996 {
16997 	pci_unregister_driver(&tg3_driver);
16998 }
16999 
17000 module_init(tg3_init);
17001 module_exit(tg3_cleanup);
17002