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-2016 Broadcom Corporation.
8 * Copyright (C) 2016-2017 Broadcom Limited.
9 * Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom"
10 * refers to Broadcom Inc. and/or its subsidiaries.
11 *
12 * Firmware is:
13 *	Derived from proprietary unpublished source code,
14 *	Copyright (C) 2000-2016 Broadcom Corporation.
15 *	Copyright (C) 2016-2017 Broadcom Ltd.
16 *	Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom"
17 *	refers to Broadcom Inc. and/or its subsidiaries.
18 *
19 *	Permission is hereby granted for the distribution of this firmware
20 *	data in hexadecimal or equivalent format, provided this copyright
21 *	notice is accompanying it.
22 */
23
24
25#include <linux/module.h>
26#include <linux/moduleparam.h>
27#include <linux/stringify.h>
28#include <linux/kernel.h>
29#include <linux/sched/signal.h>
30#include <linux/types.h>
31#include <linux/compiler.h>
32#include <linux/slab.h>
33#include <linux/delay.h>
34#include <linux/in.h>
35#include <linux/interrupt.h>
36#include <linux/ioport.h>
37#include <linux/pci.h>
38#include <linux/netdevice.h>
39#include <linux/etherdevice.h>
40#include <linux/skbuff.h>
41#include <linux/ethtool.h>
42#include <linux/mdio.h>
43#include <linux/mii.h>
44#include <linux/phy.h>
45#include <linux/brcmphy.h>
46#include <linux/if.h>
47#include <linux/if_vlan.h>
48#include <linux/ip.h>
49#include <linux/tcp.h>
50#include <linux/workqueue.h>
51#include <linux/prefetch.h>
52#include <linux/dma-mapping.h>
53#include <linux/firmware.h>
54#include <linux/ssb/ssb_driver_gige.h>
55#include <linux/hwmon.h>
56#include <linux/hwmon-sysfs.h>
57#include <linux/crc32poly.h>
58
59#include <net/checksum.h>
60#include <net/ip.h>
61
62#include <linux/io.h>
63#include <asm/byteorder.h>
64#include <linux/uaccess.h>
65
66#include <uapi/linux/net_tstamp.h>
67#include <linux/ptp_clock_kernel.h>
68
69#define BAR_0	0
70#define BAR_2	2
71
72#include "tg3.h"
73
74/* Functions & macros to verify TG3_FLAGS types */
75
76static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
77{
78	return test_bit(flag, bits);
79}
80
81static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
82{
83	set_bit(flag, bits);
84}
85
86static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
87{
88	clear_bit(flag, bits);
89}
90
91#define tg3_flag(tp, flag)				\
92	_tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
93#define tg3_flag_set(tp, flag)				\
94	_tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
95#define tg3_flag_clear(tp, flag)			\
96	_tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
97
98#define DRV_MODULE_NAME		"tg3"
99/* DO NOT UPDATE TG3_*_NUM defines */
100#define TG3_MAJ_NUM			3
101#define TG3_MIN_NUM			137
102
103#define RESET_KIND_SHUTDOWN	0
104#define RESET_KIND_INIT		1
105#define RESET_KIND_SUSPEND	2
106
107#define TG3_DEF_RX_MODE		0
108#define TG3_DEF_TX_MODE		0
109#define TG3_DEF_MSG_ENABLE	  \
110	(NETIF_MSG_DRV		| \
111	 NETIF_MSG_PROBE	| \
112	 NETIF_MSG_LINK		| \
113	 NETIF_MSG_TIMER	| \
114	 NETIF_MSG_IFDOWN	| \
115	 NETIF_MSG_IFUP		| \
116	 NETIF_MSG_RX_ERR	| \
117	 NETIF_MSG_TX_ERR)
118
119#define TG3_GRC_LCLCTL_PWRSW_DELAY	100
120
121/* length of time before we decide the hardware is borked,
122 * and dev->tx_timeout() should be called to fix the problem
123 */
124
125#define TG3_TX_TIMEOUT			(5 * HZ)
126
127/* hardware minimum and maximum for a single frame's data payload */
128#define TG3_MIN_MTU			ETH_ZLEN
129#define TG3_MAX_MTU(tp)	\
130	(tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
131
132/* These numbers seem to be hard coded in the NIC firmware somehow.
133 * You can't change the ring sizes, but you can change where you place
134 * them in the NIC onboard memory.
135 */
136#define TG3_RX_STD_RING_SIZE(tp) \
137	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
138	 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
139#define TG3_DEF_RX_RING_PENDING		200
140#define TG3_RX_JMB_RING_SIZE(tp) \
141	(tg3_flag(tp, LRG_PROD_RING_CAP) ? \
142	 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
143#define TG3_DEF_RX_JUMBO_RING_PENDING	100
144
145/* Do not place this n-ring entries value into the tp struct itself,
146 * we really want to expose these constants to GCC so that modulo et
147 * al.  operations are done with shifts and masks instead of with
148 * hw multiply/modulo instructions.  Another solution would be to
149 * replace things like '% foo' with '& (foo - 1)'.
150 */
151
152#define TG3_TX_RING_SIZE		512
153#define TG3_DEF_TX_RING_PENDING		(TG3_TX_RING_SIZE - 1)
154
155#define TG3_RX_STD_RING_BYTES(tp) \
156	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
157#define TG3_RX_JMB_RING_BYTES(tp) \
158	(sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
159#define TG3_RX_RCB_RING_BYTES(tp) \
160	(sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
161#define TG3_TX_RING_BYTES	(sizeof(struct tg3_tx_buffer_desc) * \
162				 TG3_TX_RING_SIZE)
163#define NEXT_TX(N)		(((N) + 1) & (TG3_TX_RING_SIZE - 1))
164
165#define TG3_DMA_BYTE_ENAB		64
166
167#define TG3_RX_STD_DMA_SZ		1536
168#define TG3_RX_JMB_DMA_SZ		9046
169
170#define TG3_RX_DMA_TO_MAP_SZ(x)		((x) + TG3_DMA_BYTE_ENAB)
171
172#define TG3_RX_STD_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
173#define TG3_RX_JMB_MAP_SZ		TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
174
175#define TG3_RX_STD_BUFF_RING_SIZE(tp) \
176	(sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
177
178#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
179	(sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
180
181/* Due to a hardware bug, the 5701 can only DMA to memory addresses
182 * that are at least dword aligned when used in PCIX mode.  The driver
183 * works around this bug by double copying the packet.  This workaround
184 * is built into the normal double copy length check for efficiency.
185 *
186 * However, the double copy is only necessary on those architectures
187 * where unaligned memory accesses are inefficient.  For those architectures
188 * where unaligned memory accesses incur little penalty, we can reintegrate
189 * the 5701 in the normal rx path.  Doing so saves a device structure
190 * dereference by hardcoding the double copy threshold in place.
191 */
192#define TG3_RX_COPY_THRESHOLD		256
193#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
194	#define TG3_RX_COPY_THRESH(tp)	TG3_RX_COPY_THRESHOLD
195#else
196	#define TG3_RX_COPY_THRESH(tp)	((tp)->rx_copy_thresh)
197#endif
198
199#if (NET_IP_ALIGN != 0)
200#define TG3_RX_OFFSET(tp)	((tp)->rx_offset)
201#else
202#define TG3_RX_OFFSET(tp)	(NET_SKB_PAD)
203#endif
204
205/* minimum number of free TX descriptors required to wake up TX process */
206#define TG3_TX_WAKEUP_THRESH(tnapi)		((tnapi)->tx_pending / 4)
207#define TG3_TX_BD_DMA_MAX_2K		2048
208#define TG3_TX_BD_DMA_MAX_4K		4096
209
210#define TG3_RAW_IP_ALIGN 2
211
212#define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
213#define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
214
215#define TG3_FW_UPDATE_TIMEOUT_SEC	5
216#define TG3_FW_UPDATE_FREQ_SEC		(TG3_FW_UPDATE_TIMEOUT_SEC / 2)
217
218#define FIRMWARE_TG3		"tigon/tg3.bin"
219#define FIRMWARE_TG357766	"tigon/tg357766.bin"
220#define FIRMWARE_TG3TSO		"tigon/tg3_tso.bin"
221#define FIRMWARE_TG3TSO5	"tigon/tg3_tso5.bin"
222
223MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
224MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
225MODULE_LICENSE("GPL");
226MODULE_FIRMWARE(FIRMWARE_TG3);
227MODULE_FIRMWARE(FIRMWARE_TG357766);
228MODULE_FIRMWARE(FIRMWARE_TG3TSO);
229MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
230
231static int tg3_debug = -1;	/* -1 == use TG3_DEF_MSG_ENABLE as value */
232module_param(tg3_debug, int, 0);
233MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
234
235#define TG3_DRV_DATA_FLAG_10_100_ONLY	0x0001
236#define TG3_DRV_DATA_FLAG_5705_10_100	0x0002
237
238static const struct pci_device_id tg3_pci_tbl[] = {
239	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
240	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
241	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
242	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
243	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
244	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
245	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
246	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
247	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
248	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
249	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
250	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
251	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
252	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
253	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
254	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
255	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
256	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
257	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
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_5901_2),
261	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
262			TG3_DRV_DATA_FLAG_5705_10_100},
263	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
264	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
265	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
266			TG3_DRV_DATA_FLAG_5705_10_100},
267	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
268	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
269	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
270	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
271	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
272	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
273	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
274	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
275	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
276	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
277	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
278	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
279	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
280	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
281	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
282	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
283	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
284	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
285	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
286	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
287	{PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
288			PCI_VENDOR_ID_LENOVO,
289			TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
290	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
291	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
292	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
293	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
294	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
295	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
296	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
297	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
298	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
299	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
300	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
301	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
302	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
303	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
304	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
305	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
306	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
307	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
308	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
309	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
310	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
311	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
312	{PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
313			PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
314	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
315	{PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
316			PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
317	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
318	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
319	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
320	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
321	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
322	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
323	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
324	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
325	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
326	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
327	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
328	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
329	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
330	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
331	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
332	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
333	 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
334	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
335	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
336	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
337	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
338	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
339	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
340	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
341	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
342	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
343	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
344	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
345	{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
346	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
347	{PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
348	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
349	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
350	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
351	{PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
352	{PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
353	{PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
354	{}
355};
356
357MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
358
359static const struct {
360	const char string[ETH_GSTRING_LEN];
361} ethtool_stats_keys[] = {
362	{ "rx_octets" },
363	{ "rx_fragments" },
364	{ "rx_ucast_packets" },
365	{ "rx_mcast_packets" },
366	{ "rx_bcast_packets" },
367	{ "rx_fcs_errors" },
368	{ "rx_align_errors" },
369	{ "rx_xon_pause_rcvd" },
370	{ "rx_xoff_pause_rcvd" },
371	{ "rx_mac_ctrl_rcvd" },
372	{ "rx_xoff_entered" },
373	{ "rx_frame_too_long_errors" },
374	{ "rx_jabbers" },
375	{ "rx_undersize_packets" },
376	{ "rx_in_length_errors" },
377	{ "rx_out_length_errors" },
378	{ "rx_64_or_less_octet_packets" },
379	{ "rx_65_to_127_octet_packets" },
380	{ "rx_128_to_255_octet_packets" },
381	{ "rx_256_to_511_octet_packets" },
382	{ "rx_512_to_1023_octet_packets" },
383	{ "rx_1024_to_1522_octet_packets" },
384	{ "rx_1523_to_2047_octet_packets" },
385	{ "rx_2048_to_4095_octet_packets" },
386	{ "rx_4096_to_8191_octet_packets" },
387	{ "rx_8192_to_9022_octet_packets" },
388
389	{ "tx_octets" },
390	{ "tx_collisions" },
391
392	{ "tx_xon_sent" },
393	{ "tx_xoff_sent" },
394	{ "tx_flow_control" },
395	{ "tx_mac_errors" },
396	{ "tx_single_collisions" },
397	{ "tx_mult_collisions" },
398	{ "tx_deferred" },
399	{ "tx_excessive_collisions" },
400	{ "tx_late_collisions" },
401	{ "tx_collide_2times" },
402	{ "tx_collide_3times" },
403	{ "tx_collide_4times" },
404	{ "tx_collide_5times" },
405	{ "tx_collide_6times" },
406	{ "tx_collide_7times" },
407	{ "tx_collide_8times" },
408	{ "tx_collide_9times" },
409	{ "tx_collide_10times" },
410	{ "tx_collide_11times" },
411	{ "tx_collide_12times" },
412	{ "tx_collide_13times" },
413	{ "tx_collide_14times" },
414	{ "tx_collide_15times" },
415	{ "tx_ucast_packets" },
416	{ "tx_mcast_packets" },
417	{ "tx_bcast_packets" },
418	{ "tx_carrier_sense_errors" },
419	{ "tx_discards" },
420	{ "tx_errors" },
421
422	{ "dma_writeq_full" },
423	{ "dma_write_prioq_full" },
424	{ "rxbds_empty" },
425	{ "rx_discards" },
426	{ "rx_errors" },
427	{ "rx_threshold_hit" },
428
429	{ "dma_readq_full" },
430	{ "dma_read_prioq_full" },
431	{ "tx_comp_queue_full" },
432
433	{ "ring_set_send_prod_index" },
434	{ "ring_status_update" },
435	{ "nic_irqs" },
436	{ "nic_avoided_irqs" },
437	{ "nic_tx_threshold_hit" },
438
439	{ "mbuf_lwm_thresh_hit" },
440};
441
442#define TG3_NUM_STATS	ARRAY_SIZE(ethtool_stats_keys)
443#define TG3_NVRAM_TEST		0
444#define TG3_LINK_TEST		1
445#define TG3_REGISTER_TEST	2
446#define TG3_MEMORY_TEST		3
447#define TG3_MAC_LOOPB_TEST	4
448#define TG3_PHY_LOOPB_TEST	5
449#define TG3_EXT_LOOPB_TEST	6
450#define TG3_INTERRUPT_TEST	7
451
452
453static const struct {
454	const char string[ETH_GSTRING_LEN];
455} ethtool_test_keys[] = {
456	[TG3_NVRAM_TEST]	= { "nvram test        (online) " },
457	[TG3_LINK_TEST]		= { "link test         (online) " },
458	[TG3_REGISTER_TEST]	= { "register test     (offline)" },
459	[TG3_MEMORY_TEST]	= { "memory test       (offline)" },
460	[TG3_MAC_LOOPB_TEST]	= { "mac loopback test (offline)" },
461	[TG3_PHY_LOOPB_TEST]	= { "phy loopback test (offline)" },
462	[TG3_EXT_LOOPB_TEST]	= { "ext loopback test (offline)" },
463	[TG3_INTERRUPT_TEST]	= { "interrupt test    (offline)" },
464};
465
466#define TG3_NUM_TEST	ARRAY_SIZE(ethtool_test_keys)
467
468
469static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
470{
471	writel(val, tp->regs + off);
472}
473
474static u32 tg3_read32(struct tg3 *tp, u32 off)
475{
476	return readl(tp->regs + off);
477}
478
479static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
480{
481	writel(val, tp->aperegs + off);
482}
483
484static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
485{
486	return readl(tp->aperegs + off);
487}
488
489static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
490{
491	unsigned long flags;
492
493	spin_lock_irqsave(&tp->indirect_lock, flags);
494	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
495	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
496	spin_unlock_irqrestore(&tp->indirect_lock, flags);
497}
498
499static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
500{
501	writel(val, tp->regs + off);
502	readl(tp->regs + off);
503}
504
505static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
506{
507	unsigned long flags;
508	u32 val;
509
510	spin_lock_irqsave(&tp->indirect_lock, flags);
511	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
512	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
513	spin_unlock_irqrestore(&tp->indirect_lock, flags);
514	return val;
515}
516
517static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
518{
519	unsigned long flags;
520
521	if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
522		pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
523				       TG3_64BIT_REG_LOW, val);
524		return;
525	}
526	if (off == TG3_RX_STD_PROD_IDX_REG) {
527		pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
528				       TG3_64BIT_REG_LOW, val);
529		return;
530	}
531
532	spin_lock_irqsave(&tp->indirect_lock, flags);
533	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
534	pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
535	spin_unlock_irqrestore(&tp->indirect_lock, flags);
536
537	/* In indirect mode when disabling interrupts, we also need
538	 * to clear the interrupt bit in the GRC local ctrl register.
539	 */
540	if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
541	    (val == 0x1)) {
542		pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
543				       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
544	}
545}
546
547static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
548{
549	unsigned long flags;
550	u32 val;
551
552	spin_lock_irqsave(&tp->indirect_lock, flags);
553	pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
554	pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
555	spin_unlock_irqrestore(&tp->indirect_lock, flags);
556	return val;
557}
558
559/* usec_wait specifies the wait time in usec when writing to certain registers
560 * where it is unsafe to read back the register without some delay.
561 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
562 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
563 */
564static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
565{
566	if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
567		/* Non-posted methods */
568		tp->write32(tp, off, val);
569	else {
570		/* Posted method */
571		tg3_write32(tp, off, val);
572		if (usec_wait)
573			udelay(usec_wait);
574		tp->read32(tp, off);
575	}
576	/* Wait again after the read for the posted method to guarantee that
577	 * the wait time is met.
578	 */
579	if (usec_wait)
580		udelay(usec_wait);
581}
582
583static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
584{
585	tp->write32_mbox(tp, off, val);
586	if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
587	    (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
588	     !tg3_flag(tp, ICH_WORKAROUND)))
589		tp->read32_mbox(tp, off);
590}
591
592static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
593{
594	void __iomem *mbox = tp->regs + off;
595	writel(val, mbox);
596	if (tg3_flag(tp, TXD_MBOX_HWBUG))
597		writel(val, mbox);
598	if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
599	    tg3_flag(tp, FLUSH_POSTED_WRITES))
600		readl(mbox);
601}
602
603static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
604{
605	return readl(tp->regs + off + GRCMBOX_BASE);
606}
607
608static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
609{
610	writel(val, tp->regs + off + GRCMBOX_BASE);
611}
612
613#define tw32_mailbox(reg, val)		tp->write32_mbox(tp, reg, val)
614#define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
615#define tw32_rx_mbox(reg, val)		tp->write32_rx_mbox(tp, reg, val)
616#define tw32_tx_mbox(reg, val)		tp->write32_tx_mbox(tp, reg, val)
617#define tr32_mailbox(reg)		tp->read32_mbox(tp, reg)
618
619#define tw32(reg, val)			tp->write32(tp, reg, val)
620#define tw32_f(reg, val)		_tw32_flush(tp, (reg), (val), 0)
621#define tw32_wait_f(reg, val, us)	_tw32_flush(tp, (reg), (val), (us))
622#define tr32(reg)			tp->read32(tp, reg)
623
624static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
625{
626	unsigned long flags;
627
628	if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
629	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
630		return;
631
632	spin_lock_irqsave(&tp->indirect_lock, flags);
633	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
634		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
635		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
636
637		/* Always leave this as zero. */
638		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
639	} else {
640		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
641		tw32_f(TG3PCI_MEM_WIN_DATA, val);
642
643		/* Always leave this as zero. */
644		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
645	}
646	spin_unlock_irqrestore(&tp->indirect_lock, flags);
647}
648
649static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
650{
651	unsigned long flags;
652
653	if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
654	    (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
655		*val = 0;
656		return;
657	}
658
659	spin_lock_irqsave(&tp->indirect_lock, flags);
660	if (tg3_flag(tp, SRAM_USE_CONFIG)) {
661		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
662		pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
663
664		/* Always leave this as zero. */
665		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
666	} else {
667		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
668		*val = tr32(TG3PCI_MEM_WIN_DATA);
669
670		/* Always leave this as zero. */
671		tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
672	}
673	spin_unlock_irqrestore(&tp->indirect_lock, flags);
674}
675
676static void tg3_ape_lock_init(struct tg3 *tp)
677{
678	int i;
679	u32 regbase, bit;
680
681	if (tg3_asic_rev(tp) == ASIC_REV_5761)
682		regbase = TG3_APE_LOCK_GRANT;
683	else
684		regbase = TG3_APE_PER_LOCK_GRANT;
685
686	/* Make sure the driver hasn't any stale locks. */
687	for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
688		switch (i) {
689		case TG3_APE_LOCK_PHY0:
690		case TG3_APE_LOCK_PHY1:
691		case TG3_APE_LOCK_PHY2:
692		case TG3_APE_LOCK_PHY3:
693			bit = APE_LOCK_GRANT_DRIVER;
694			break;
695		default:
696			if (!tp->pci_fn)
697				bit = APE_LOCK_GRANT_DRIVER;
698			else
699				bit = 1 << tp->pci_fn;
700		}
701		tg3_ape_write32(tp, regbase + 4 * i, bit);
702	}
703
704}
705
706static int tg3_ape_lock(struct tg3 *tp, int locknum)
707{
708	int i, off;
709	int ret = 0;
710	u32 status, req, gnt, bit;
711
712	if (!tg3_flag(tp, ENABLE_APE))
713		return 0;
714
715	switch (locknum) {
716	case TG3_APE_LOCK_GPIO:
717		if (tg3_asic_rev(tp) == ASIC_REV_5761)
718			return 0;
719		fallthrough;
720	case TG3_APE_LOCK_GRC:
721	case TG3_APE_LOCK_MEM:
722		if (!tp->pci_fn)
723			bit = APE_LOCK_REQ_DRIVER;
724		else
725			bit = 1 << tp->pci_fn;
726		break;
727	case TG3_APE_LOCK_PHY0:
728	case TG3_APE_LOCK_PHY1:
729	case TG3_APE_LOCK_PHY2:
730	case TG3_APE_LOCK_PHY3:
731		bit = APE_LOCK_REQ_DRIVER;
732		break;
733	default:
734		return -EINVAL;
735	}
736
737	if (tg3_asic_rev(tp) == ASIC_REV_5761) {
738		req = TG3_APE_LOCK_REQ;
739		gnt = TG3_APE_LOCK_GRANT;
740	} else {
741		req = TG3_APE_PER_LOCK_REQ;
742		gnt = TG3_APE_PER_LOCK_GRANT;
743	}
744
745	off = 4 * locknum;
746
747	tg3_ape_write32(tp, req + off, bit);
748
749	/* Wait for up to 1 millisecond to acquire lock. */
750	for (i = 0; i < 100; i++) {
751		status = tg3_ape_read32(tp, gnt + off);
752		if (status == bit)
753			break;
754		if (pci_channel_offline(tp->pdev))
755			break;
756
757		udelay(10);
758	}
759
760	if (status != bit) {
761		/* Revoke the lock request. */
762		tg3_ape_write32(tp, gnt + off, bit);
763		ret = -EBUSY;
764	}
765
766	return ret;
767}
768
769static void tg3_ape_unlock(struct tg3 *tp, int locknum)
770{
771	u32 gnt, bit;
772
773	if (!tg3_flag(tp, ENABLE_APE))
774		return;
775
776	switch (locknum) {
777	case TG3_APE_LOCK_GPIO:
778		if (tg3_asic_rev(tp) == ASIC_REV_5761)
779			return;
780		fallthrough;
781	case TG3_APE_LOCK_GRC:
782	case TG3_APE_LOCK_MEM:
783		if (!tp->pci_fn)
784			bit = APE_LOCK_GRANT_DRIVER;
785		else
786			bit = 1 << tp->pci_fn;
787		break;
788	case TG3_APE_LOCK_PHY0:
789	case TG3_APE_LOCK_PHY1:
790	case TG3_APE_LOCK_PHY2:
791	case TG3_APE_LOCK_PHY3:
792		bit = APE_LOCK_GRANT_DRIVER;
793		break;
794	default:
795		return;
796	}
797
798	if (tg3_asic_rev(tp) == ASIC_REV_5761)
799		gnt = TG3_APE_LOCK_GRANT;
800	else
801		gnt = TG3_APE_PER_LOCK_GRANT;
802
803	tg3_ape_write32(tp, gnt + 4 * locknum, bit);
804}
805
806static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
807{
808	u32 apedata;
809
810	while (timeout_us) {
811		if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
812			return -EBUSY;
813
814		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
815		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
816			break;
817
818		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
819
820		udelay(10);
821		timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
822	}
823
824	return timeout_us ? 0 : -EBUSY;
825}
826
827#ifdef CONFIG_TIGON3_HWMON
828static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
829{
830	u32 i, apedata;
831
832	for (i = 0; i < timeout_us / 10; i++) {
833		apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
834
835		if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
836			break;
837
838		udelay(10);
839	}
840
841	return i == timeout_us / 10;
842}
843
844static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
845				   u32 len)
846{
847	int err;
848	u32 i, bufoff, msgoff, maxlen, apedata;
849
850	if (!tg3_flag(tp, APE_HAS_NCSI))
851		return 0;
852
853	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
854	if (apedata != APE_SEG_SIG_MAGIC)
855		return -ENODEV;
856
857	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
858	if (!(apedata & APE_FW_STATUS_READY))
859		return -EAGAIN;
860
861	bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
862		 TG3_APE_SHMEM_BASE;
863	msgoff = bufoff + 2 * sizeof(u32);
864	maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
865
866	while (len) {
867		u32 length;
868
869		/* Cap xfer sizes to scratchpad limits. */
870		length = (len > maxlen) ? maxlen : len;
871		len -= length;
872
873		apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
874		if (!(apedata & APE_FW_STATUS_READY))
875			return -EAGAIN;
876
877		/* Wait for up to 1 msec for APE to service previous event. */
878		err = tg3_ape_event_lock(tp, 1000);
879		if (err)
880			return err;
881
882		apedata = APE_EVENT_STATUS_DRIVER_EVNT |
883			  APE_EVENT_STATUS_SCRTCHPD_READ |
884			  APE_EVENT_STATUS_EVENT_PENDING;
885		tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
886
887		tg3_ape_write32(tp, bufoff, base_off);
888		tg3_ape_write32(tp, bufoff + sizeof(u32), length);
889
890		tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
891		tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
892
893		base_off += length;
894
895		if (tg3_ape_wait_for_event(tp, 30000))
896			return -EAGAIN;
897
898		for (i = 0; length; i += 4, length -= 4) {
899			u32 val = tg3_ape_read32(tp, msgoff + i);
900			memcpy(data, &val, sizeof(u32));
901			data++;
902		}
903	}
904
905	return 0;
906}
907#endif
908
909static int tg3_ape_send_event(struct tg3 *tp, u32 event)
910{
911	int err;
912	u32 apedata;
913
914	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
915	if (apedata != APE_SEG_SIG_MAGIC)
916		return -EAGAIN;
917
918	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
919	if (!(apedata & APE_FW_STATUS_READY))
920		return -EAGAIN;
921
922	/* Wait for up to 20 millisecond for APE to service previous event. */
923	err = tg3_ape_event_lock(tp, 20000);
924	if (err)
925		return err;
926
927	tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
928			event | APE_EVENT_STATUS_EVENT_PENDING);
929
930	tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
931	tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
932
933	return 0;
934}
935
936static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
937{
938	u32 event;
939	u32 apedata;
940
941	if (!tg3_flag(tp, ENABLE_APE))
942		return;
943
944	switch (kind) {
945	case RESET_KIND_INIT:
946		tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
947		tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
948				APE_HOST_SEG_SIG_MAGIC);
949		tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
950				APE_HOST_SEG_LEN_MAGIC);
951		apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
952		tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
953		tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
954			APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
955		tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
956				APE_HOST_BEHAV_NO_PHYLOCK);
957		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
958				    TG3_APE_HOST_DRVR_STATE_START);
959
960		event = APE_EVENT_STATUS_STATE_START;
961		break;
962	case RESET_KIND_SHUTDOWN:
963		if (device_may_wakeup(&tp->pdev->dev) &&
964		    tg3_flag(tp, WOL_ENABLE)) {
965			tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
966					    TG3_APE_HOST_WOL_SPEED_AUTO);
967			apedata = TG3_APE_HOST_DRVR_STATE_WOL;
968		} else
969			apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
970
971		tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
972
973		event = APE_EVENT_STATUS_STATE_UNLOAD;
974		break;
975	default:
976		return;
977	}
978
979	event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
980
981	tg3_ape_send_event(tp, event);
982}
983
984static void tg3_send_ape_heartbeat(struct tg3 *tp,
985				   unsigned long interval)
986{
987	/* Check if hb interval has exceeded */
988	if (!tg3_flag(tp, ENABLE_APE) ||
989	    time_before(jiffies, tp->ape_hb_jiffies + interval))
990		return;
991
992	tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
993	tp->ape_hb_jiffies = jiffies;
994}
995
996static void tg3_disable_ints(struct tg3 *tp)
997{
998	int i;
999
1000	tw32(TG3PCI_MISC_HOST_CTRL,
1001	     (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
1002	for (i = 0; i < tp->irq_max; i++)
1003		tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
1004}
1005
1006static void tg3_enable_ints(struct tg3 *tp)
1007{
1008	int i;
1009
1010	tp->irq_sync = 0;
1011	wmb();
1012
1013	tw32(TG3PCI_MISC_HOST_CTRL,
1014	     (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1015
1016	tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1017	for (i = 0; i < tp->irq_cnt; i++) {
1018		struct tg3_napi *tnapi = &tp->napi[i];
1019
1020		tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1021		if (tg3_flag(tp, 1SHOT_MSI))
1022			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1023
1024		tp->coal_now |= tnapi->coal_now;
1025	}
1026
1027	/* Force an initial interrupt */
1028	if (!tg3_flag(tp, TAGGED_STATUS) &&
1029	    (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1030		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1031	else
1032		tw32(HOSTCC_MODE, tp->coal_now);
1033
1034	tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1035}
1036
1037static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1038{
1039	struct tg3 *tp = tnapi->tp;
1040	struct tg3_hw_status *sblk = tnapi->hw_status;
1041	unsigned int work_exists = 0;
1042
1043	/* check for phy events */
1044	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1045		if (sblk->status & SD_STATUS_LINK_CHG)
1046			work_exists = 1;
1047	}
1048
1049	/* check for TX work to do */
1050	if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1051		work_exists = 1;
1052
1053	/* check for RX work to do */
1054	if (tnapi->rx_rcb_prod_idx &&
1055	    *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1056		work_exists = 1;
1057
1058	return work_exists;
1059}
1060
1061/* tg3_int_reenable
1062 *  similar to tg3_enable_ints, but it accurately determines whether there
1063 *  is new work pending and can return without flushing the PIO write
1064 *  which reenables interrupts
1065 */
1066static void tg3_int_reenable(struct tg3_napi *tnapi)
1067{
1068	struct tg3 *tp = tnapi->tp;
1069
1070	tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1071
1072	/* When doing tagged status, this work check is unnecessary.
1073	 * The last_tag we write above tells the chip which piece of
1074	 * work we've completed.
1075	 */
1076	if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1077		tw32(HOSTCC_MODE, tp->coalesce_mode |
1078		     HOSTCC_MODE_ENABLE | tnapi->coal_now);
1079}
1080
1081static void tg3_switch_clocks(struct tg3 *tp)
1082{
1083	u32 clock_ctrl;
1084	u32 orig_clock_ctrl;
1085
1086	if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1087		return;
1088
1089	clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1090
1091	orig_clock_ctrl = clock_ctrl;
1092	clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1093		       CLOCK_CTRL_CLKRUN_OENABLE |
1094		       0x1f);
1095	tp->pci_clock_ctrl = clock_ctrl;
1096
1097	if (tg3_flag(tp, 5705_PLUS)) {
1098		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1099			tw32_wait_f(TG3PCI_CLOCK_CTRL,
1100				    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1101		}
1102	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1103		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1104			    clock_ctrl |
1105			    (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1106			    40);
1107		tw32_wait_f(TG3PCI_CLOCK_CTRL,
1108			    clock_ctrl | (CLOCK_CTRL_ALTCLK),
1109			    40);
1110	}
1111	tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1112}
1113
1114#define PHY_BUSY_LOOPS	5000
1115
1116static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1117			 u32 *val)
1118{
1119	u32 frame_val;
1120	unsigned int loops;
1121	int ret;
1122
1123	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1124		tw32_f(MAC_MI_MODE,
1125		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1126		udelay(80);
1127	}
1128
1129	tg3_ape_lock(tp, tp->phy_ape_lock);
1130
1131	*val = 0x0;
1132
1133	frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1134		      MI_COM_PHY_ADDR_MASK);
1135	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1136		      MI_COM_REG_ADDR_MASK);
1137	frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1138
1139	tw32_f(MAC_MI_COM, frame_val);
1140
1141	loops = PHY_BUSY_LOOPS;
1142	while (loops != 0) {
1143		udelay(10);
1144		frame_val = tr32(MAC_MI_COM);
1145
1146		if ((frame_val & MI_COM_BUSY) == 0) {
1147			udelay(5);
1148			frame_val = tr32(MAC_MI_COM);
1149			break;
1150		}
1151		loops -= 1;
1152	}
1153
1154	ret = -EBUSY;
1155	if (loops != 0) {
1156		*val = frame_val & MI_COM_DATA_MASK;
1157		ret = 0;
1158	}
1159
1160	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1161		tw32_f(MAC_MI_MODE, tp->mi_mode);
1162		udelay(80);
1163	}
1164
1165	tg3_ape_unlock(tp, tp->phy_ape_lock);
1166
1167	return ret;
1168}
1169
1170static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1171{
1172	return __tg3_readphy(tp, tp->phy_addr, reg, val);
1173}
1174
1175static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1176			  u32 val)
1177{
1178	u32 frame_val;
1179	unsigned int loops;
1180	int ret;
1181
1182	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1183	    (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1184		return 0;
1185
1186	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1187		tw32_f(MAC_MI_MODE,
1188		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1189		udelay(80);
1190	}
1191
1192	tg3_ape_lock(tp, tp->phy_ape_lock);
1193
1194	frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1195		      MI_COM_PHY_ADDR_MASK);
1196	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1197		      MI_COM_REG_ADDR_MASK);
1198	frame_val |= (val & MI_COM_DATA_MASK);
1199	frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1200
1201	tw32_f(MAC_MI_COM, frame_val);
1202
1203	loops = PHY_BUSY_LOOPS;
1204	while (loops != 0) {
1205		udelay(10);
1206		frame_val = tr32(MAC_MI_COM);
1207		if ((frame_val & MI_COM_BUSY) == 0) {
1208			udelay(5);
1209			frame_val = tr32(MAC_MI_COM);
1210			break;
1211		}
1212		loops -= 1;
1213	}
1214
1215	ret = -EBUSY;
1216	if (loops != 0)
1217		ret = 0;
1218
1219	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1220		tw32_f(MAC_MI_MODE, tp->mi_mode);
1221		udelay(80);
1222	}
1223
1224	tg3_ape_unlock(tp, tp->phy_ape_lock);
1225
1226	return ret;
1227}
1228
1229static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1230{
1231	return __tg3_writephy(tp, tp->phy_addr, reg, val);
1232}
1233
1234static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1235{
1236	int err;
1237
1238	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1239	if (err)
1240		goto done;
1241
1242	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1243	if (err)
1244		goto done;
1245
1246	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1247			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1248	if (err)
1249		goto done;
1250
1251	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1252
1253done:
1254	return err;
1255}
1256
1257static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1258{
1259	int err;
1260
1261	err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1262	if (err)
1263		goto done;
1264
1265	err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1266	if (err)
1267		goto done;
1268
1269	err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1270			   MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1271	if (err)
1272		goto done;
1273
1274	err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1275
1276done:
1277	return err;
1278}
1279
1280static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1281{
1282	int err;
1283
1284	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1285	if (!err)
1286		err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1287
1288	return err;
1289}
1290
1291static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1292{
1293	int err;
1294
1295	err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1296	if (!err)
1297		err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1298
1299	return err;
1300}
1301
1302static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1303{
1304	int err;
1305
1306	err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1307			   (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1308			   MII_TG3_AUXCTL_SHDWSEL_MISC);
1309	if (!err)
1310		err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1311
1312	return err;
1313}
1314
1315static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1316{
1317	if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1318		set |= MII_TG3_AUXCTL_MISC_WREN;
1319
1320	return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1321}
1322
1323static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1324{
1325	u32 val;
1326	int err;
1327
1328	err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1329
1330	if (err)
1331		return err;
1332
1333	if (enable)
1334		val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1335	else
1336		val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1337
1338	err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1339				   val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1340
1341	return err;
1342}
1343
1344static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1345{
1346	return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1347			    reg | val | MII_TG3_MISC_SHDW_WREN);
1348}
1349
1350static int tg3_bmcr_reset(struct tg3 *tp)
1351{
1352	u32 phy_control;
1353	int limit, err;
1354
1355	/* OK, reset it, and poll the BMCR_RESET bit until it
1356	 * clears or we time out.
1357	 */
1358	phy_control = BMCR_RESET;
1359	err = tg3_writephy(tp, MII_BMCR, phy_control);
1360	if (err != 0)
1361		return -EBUSY;
1362
1363	limit = 5000;
1364	while (limit--) {
1365		err = tg3_readphy(tp, MII_BMCR, &phy_control);
1366		if (err != 0)
1367			return -EBUSY;
1368
1369		if ((phy_control & BMCR_RESET) == 0) {
1370			udelay(40);
1371			break;
1372		}
1373		udelay(10);
1374	}
1375	if (limit < 0)
1376		return -EBUSY;
1377
1378	return 0;
1379}
1380
1381static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1382{
1383	struct tg3 *tp = bp->priv;
1384	u32 val;
1385
1386	spin_lock_bh(&tp->lock);
1387
1388	if (__tg3_readphy(tp, mii_id, reg, &val))
1389		val = -EIO;
1390
1391	spin_unlock_bh(&tp->lock);
1392
1393	return val;
1394}
1395
1396static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1397{
1398	struct tg3 *tp = bp->priv;
1399	u32 ret = 0;
1400
1401	spin_lock_bh(&tp->lock);
1402
1403	if (__tg3_writephy(tp, mii_id, reg, val))
1404		ret = -EIO;
1405
1406	spin_unlock_bh(&tp->lock);
1407
1408	return ret;
1409}
1410
1411static void tg3_mdio_config_5785(struct tg3 *tp)
1412{
1413	u32 val;
1414	struct phy_device *phydev;
1415
1416	phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1417	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1418	case PHY_ID_BCM50610:
1419	case PHY_ID_BCM50610M:
1420		val = MAC_PHYCFG2_50610_LED_MODES;
1421		break;
1422	case PHY_ID_BCMAC131:
1423		val = MAC_PHYCFG2_AC131_LED_MODES;
1424		break;
1425	case PHY_ID_RTL8211C:
1426		val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1427		break;
1428	case PHY_ID_RTL8201E:
1429		val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1430		break;
1431	default:
1432		return;
1433	}
1434
1435	if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1436		tw32(MAC_PHYCFG2, val);
1437
1438		val = tr32(MAC_PHYCFG1);
1439		val &= ~(MAC_PHYCFG1_RGMII_INT |
1440			 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1441		val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1442		tw32(MAC_PHYCFG1, val);
1443
1444		return;
1445	}
1446
1447	if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1448		val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1449		       MAC_PHYCFG2_FMODE_MASK_MASK |
1450		       MAC_PHYCFG2_GMODE_MASK_MASK |
1451		       MAC_PHYCFG2_ACT_MASK_MASK   |
1452		       MAC_PHYCFG2_QUAL_MASK_MASK |
1453		       MAC_PHYCFG2_INBAND_ENABLE;
1454
1455	tw32(MAC_PHYCFG2, val);
1456
1457	val = tr32(MAC_PHYCFG1);
1458	val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1459		 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1460	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1461		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1462			val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1463		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1464			val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1465	}
1466	val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1467	       MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1468	tw32(MAC_PHYCFG1, val);
1469
1470	val = tr32(MAC_EXT_RGMII_MODE);
1471	val &= ~(MAC_RGMII_MODE_RX_INT_B |
1472		 MAC_RGMII_MODE_RX_QUALITY |
1473		 MAC_RGMII_MODE_RX_ACTIVITY |
1474		 MAC_RGMII_MODE_RX_ENG_DET |
1475		 MAC_RGMII_MODE_TX_ENABLE |
1476		 MAC_RGMII_MODE_TX_LOWPWR |
1477		 MAC_RGMII_MODE_TX_RESET);
1478	if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1479		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1480			val |= MAC_RGMII_MODE_RX_INT_B |
1481			       MAC_RGMII_MODE_RX_QUALITY |
1482			       MAC_RGMII_MODE_RX_ACTIVITY |
1483			       MAC_RGMII_MODE_RX_ENG_DET;
1484		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1485			val |= MAC_RGMII_MODE_TX_ENABLE |
1486			       MAC_RGMII_MODE_TX_LOWPWR |
1487			       MAC_RGMII_MODE_TX_RESET;
1488	}
1489	tw32(MAC_EXT_RGMII_MODE, val);
1490}
1491
1492static void tg3_mdio_start(struct tg3 *tp)
1493{
1494	tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1495	tw32_f(MAC_MI_MODE, tp->mi_mode);
1496	udelay(80);
1497
1498	if (tg3_flag(tp, MDIOBUS_INITED) &&
1499	    tg3_asic_rev(tp) == ASIC_REV_5785)
1500		tg3_mdio_config_5785(tp);
1501}
1502
1503static int tg3_mdio_init(struct tg3 *tp)
1504{
1505	int i;
1506	u32 reg;
1507	struct phy_device *phydev;
1508
1509	if (tg3_flag(tp, 5717_PLUS)) {
1510		u32 is_serdes;
1511
1512		tp->phy_addr = tp->pci_fn + 1;
1513
1514		if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1515			is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1516		else
1517			is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1518				    TG3_CPMU_PHY_STRAP_IS_SERDES;
1519		if (is_serdes)
1520			tp->phy_addr += 7;
1521	} else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1522		int addr;
1523
1524		addr = ssb_gige_get_phyaddr(tp->pdev);
1525		if (addr < 0)
1526			return addr;
1527		tp->phy_addr = addr;
1528	} else
1529		tp->phy_addr = TG3_PHY_MII_ADDR;
1530
1531	tg3_mdio_start(tp);
1532
1533	if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1534		return 0;
1535
1536	tp->mdio_bus = mdiobus_alloc();
1537	if (tp->mdio_bus == NULL)
1538		return -ENOMEM;
1539
1540	tp->mdio_bus->name     = "tg3 mdio bus";
1541	snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1542		 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1543	tp->mdio_bus->priv     = tp;
1544	tp->mdio_bus->parent   = &tp->pdev->dev;
1545	tp->mdio_bus->read     = &tg3_mdio_read;
1546	tp->mdio_bus->write    = &tg3_mdio_write;
1547	tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1548
1549	/* The bus registration will look for all the PHYs on the mdio bus.
1550	 * Unfortunately, it does not ensure the PHY is powered up before
1551	 * accessing the PHY ID registers.  A chip reset is the
1552	 * quickest way to bring the device back to an operational state..
1553	 */
1554	if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1555		tg3_bmcr_reset(tp);
1556
1557	i = mdiobus_register(tp->mdio_bus);
1558	if (i) {
1559		dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1560		mdiobus_free(tp->mdio_bus);
1561		return i;
1562	}
1563
1564	phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1565
1566	if (!phydev || !phydev->drv) {
1567		dev_warn(&tp->pdev->dev, "No PHY devices\n");
1568		mdiobus_unregister(tp->mdio_bus);
1569		mdiobus_free(tp->mdio_bus);
1570		return -ENODEV;
1571	}
1572
1573	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1574	case PHY_ID_BCM57780:
1575		phydev->interface = PHY_INTERFACE_MODE_GMII;
1576		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1577		break;
1578	case PHY_ID_BCM50610:
1579	case PHY_ID_BCM50610M:
1580		phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1581				     PHY_BRCM_RX_REFCLK_UNUSED |
1582				     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1583				     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1584		if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1585			phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1586		if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1587			phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1588		if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1589			phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1590		fallthrough;
1591	case PHY_ID_RTL8211C:
1592		phydev->interface = PHY_INTERFACE_MODE_RGMII;
1593		break;
1594	case PHY_ID_RTL8201E:
1595	case PHY_ID_BCMAC131:
1596		phydev->interface = PHY_INTERFACE_MODE_MII;
1597		phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1598		tp->phy_flags |= TG3_PHYFLG_IS_FET;
1599		break;
1600	}
1601
1602	tg3_flag_set(tp, MDIOBUS_INITED);
1603
1604	if (tg3_asic_rev(tp) == ASIC_REV_5785)
1605		tg3_mdio_config_5785(tp);
1606
1607	return 0;
1608}
1609
1610static void tg3_mdio_fini(struct tg3 *tp)
1611{
1612	if (tg3_flag(tp, MDIOBUS_INITED)) {
1613		tg3_flag_clear(tp, MDIOBUS_INITED);
1614		mdiobus_unregister(tp->mdio_bus);
1615		mdiobus_free(tp->mdio_bus);
1616	}
1617}
1618
1619/* tp->lock is held. */
1620static inline void tg3_generate_fw_event(struct tg3 *tp)
1621{
1622	u32 val;
1623
1624	val = tr32(GRC_RX_CPU_EVENT);
1625	val |= GRC_RX_CPU_DRIVER_EVENT;
1626	tw32_f(GRC_RX_CPU_EVENT, val);
1627
1628	tp->last_event_jiffies = jiffies;
1629}
1630
1631#define TG3_FW_EVENT_TIMEOUT_USEC 2500
1632
1633/* tp->lock is held. */
1634static void tg3_wait_for_event_ack(struct tg3 *tp)
1635{
1636	int i;
1637	unsigned int delay_cnt;
1638	long time_remain;
1639
1640	/* If enough time has passed, no wait is necessary. */
1641	time_remain = (long)(tp->last_event_jiffies + 1 +
1642		      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1643		      (long)jiffies;
1644	if (time_remain < 0)
1645		return;
1646
1647	/* Check if we can shorten the wait time. */
1648	delay_cnt = jiffies_to_usecs(time_remain);
1649	if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1650		delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1651	delay_cnt = (delay_cnt >> 3) + 1;
1652
1653	for (i = 0; i < delay_cnt; i++) {
1654		if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1655			break;
1656		if (pci_channel_offline(tp->pdev))
1657			break;
1658
1659		udelay(8);
1660	}
1661}
1662
1663/* tp->lock is held. */
1664static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1665{
1666	u32 reg, val;
1667
1668	val = 0;
1669	if (!tg3_readphy(tp, MII_BMCR, &reg))
1670		val = reg << 16;
1671	if (!tg3_readphy(tp, MII_BMSR, &reg))
1672		val |= (reg & 0xffff);
1673	*data++ = val;
1674
1675	val = 0;
1676	if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1677		val = reg << 16;
1678	if (!tg3_readphy(tp, MII_LPA, &reg))
1679		val |= (reg & 0xffff);
1680	*data++ = val;
1681
1682	val = 0;
1683	if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1684		if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1685			val = reg << 16;
1686		if (!tg3_readphy(tp, MII_STAT1000, &reg))
1687			val |= (reg & 0xffff);
1688	}
1689	*data++ = val;
1690
1691	if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1692		val = reg << 16;
1693	else
1694		val = 0;
1695	*data++ = val;
1696}
1697
1698/* tp->lock is held. */
1699static void tg3_ump_link_report(struct tg3 *tp)
1700{
1701	u32 data[4];
1702
1703	if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1704		return;
1705
1706	tg3_phy_gather_ump_data(tp, data);
1707
1708	tg3_wait_for_event_ack(tp);
1709
1710	tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1711	tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1712	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1713	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1714	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1715	tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1716
1717	tg3_generate_fw_event(tp);
1718}
1719
1720/* tp->lock is held. */
1721static void tg3_stop_fw(struct tg3 *tp)
1722{
1723	if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1724		/* Wait for RX cpu to ACK the previous event. */
1725		tg3_wait_for_event_ack(tp);
1726
1727		tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1728
1729		tg3_generate_fw_event(tp);
1730
1731		/* Wait for RX cpu to ACK this event. */
1732		tg3_wait_for_event_ack(tp);
1733	}
1734}
1735
1736/* tp->lock is held. */
1737static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1738{
1739	tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1740		      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1741
1742	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1743		switch (kind) {
1744		case RESET_KIND_INIT:
1745			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1746				      DRV_STATE_START);
1747			break;
1748
1749		case RESET_KIND_SHUTDOWN:
1750			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1751				      DRV_STATE_UNLOAD);
1752			break;
1753
1754		case RESET_KIND_SUSPEND:
1755			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1756				      DRV_STATE_SUSPEND);
1757			break;
1758
1759		default:
1760			break;
1761		}
1762	}
1763}
1764
1765/* tp->lock is held. */
1766static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1767{
1768	if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1769		switch (kind) {
1770		case RESET_KIND_INIT:
1771			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1772				      DRV_STATE_START_DONE);
1773			break;
1774
1775		case RESET_KIND_SHUTDOWN:
1776			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1777				      DRV_STATE_UNLOAD_DONE);
1778			break;
1779
1780		default:
1781			break;
1782		}
1783	}
1784}
1785
1786/* tp->lock is held. */
1787static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1788{
1789	if (tg3_flag(tp, ENABLE_ASF)) {
1790		switch (kind) {
1791		case RESET_KIND_INIT:
1792			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1793				      DRV_STATE_START);
1794			break;
1795
1796		case RESET_KIND_SHUTDOWN:
1797			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1798				      DRV_STATE_UNLOAD);
1799			break;
1800
1801		case RESET_KIND_SUSPEND:
1802			tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1803				      DRV_STATE_SUSPEND);
1804			break;
1805
1806		default:
1807			break;
1808		}
1809	}
1810}
1811
1812static int tg3_poll_fw(struct tg3 *tp)
1813{
1814	int i;
1815	u32 val;
1816
1817	if (tg3_flag(tp, NO_FWARE_REPORTED))
1818		return 0;
1819
1820	if (tg3_flag(tp, IS_SSB_CORE)) {
1821		/* We don't use firmware. */
1822		return 0;
1823	}
1824
1825	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1826		/* Wait up to 20ms for init done. */
1827		for (i = 0; i < 200; i++) {
1828			if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1829				return 0;
1830			if (pci_channel_offline(tp->pdev))
1831				return -ENODEV;
1832
1833			udelay(100);
1834		}
1835		return -ENODEV;
1836	}
1837
1838	/* Wait for firmware initialization to complete. */
1839	for (i = 0; i < 100000; i++) {
1840		tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1841		if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1842			break;
1843		if (pci_channel_offline(tp->pdev)) {
1844			if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1845				tg3_flag_set(tp, NO_FWARE_REPORTED);
1846				netdev_info(tp->dev, "No firmware running\n");
1847			}
1848
1849			break;
1850		}
1851
1852		udelay(10);
1853	}
1854
1855	/* Chip might not be fitted with firmware.  Some Sun onboard
1856	 * parts are configured like that.  So don't signal the timeout
1857	 * of the above loop as an error, but do report the lack of
1858	 * running firmware once.
1859	 */
1860	if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1861		tg3_flag_set(tp, NO_FWARE_REPORTED);
1862
1863		netdev_info(tp->dev, "No firmware running\n");
1864	}
1865
1866	if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1867		/* The 57765 A0 needs a little more
1868		 * time to do some important work.
1869		 */
1870		mdelay(10);
1871	}
1872
1873	return 0;
1874}
1875
1876static void tg3_link_report(struct tg3 *tp)
1877{
1878	if (!netif_carrier_ok(tp->dev)) {
1879		netif_info(tp, link, tp->dev, "Link is down\n");
1880		tg3_ump_link_report(tp);
1881	} else if (netif_msg_link(tp)) {
1882		netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1883			    (tp->link_config.active_speed == SPEED_1000 ?
1884			     1000 :
1885			     (tp->link_config.active_speed == SPEED_100 ?
1886			      100 : 10)),
1887			    (tp->link_config.active_duplex == DUPLEX_FULL ?
1888			     "full" : "half"));
1889
1890		netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1891			    (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1892			    "on" : "off",
1893			    (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1894			    "on" : "off");
1895
1896		if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1897			netdev_info(tp->dev, "EEE is %s\n",
1898				    tp->setlpicnt ? "enabled" : "disabled");
1899
1900		tg3_ump_link_report(tp);
1901	}
1902
1903	tp->link_up = netif_carrier_ok(tp->dev);
1904}
1905
1906static u32 tg3_decode_flowctrl_1000T(u32 adv)
1907{
1908	u32 flowctrl = 0;
1909
1910	if (adv & ADVERTISE_PAUSE_CAP) {
1911		flowctrl |= FLOW_CTRL_RX;
1912		if (!(adv & ADVERTISE_PAUSE_ASYM))
1913			flowctrl |= FLOW_CTRL_TX;
1914	} else if (adv & ADVERTISE_PAUSE_ASYM)
1915		flowctrl |= FLOW_CTRL_TX;
1916
1917	return flowctrl;
1918}
1919
1920static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1921{
1922	u16 miireg;
1923
1924	if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1925		miireg = ADVERTISE_1000XPAUSE;
1926	else if (flow_ctrl & FLOW_CTRL_TX)
1927		miireg = ADVERTISE_1000XPSE_ASYM;
1928	else if (flow_ctrl & FLOW_CTRL_RX)
1929		miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1930	else
1931		miireg = 0;
1932
1933	return miireg;
1934}
1935
1936static u32 tg3_decode_flowctrl_1000X(u32 adv)
1937{
1938	u32 flowctrl = 0;
1939
1940	if (adv & ADVERTISE_1000XPAUSE) {
1941		flowctrl |= FLOW_CTRL_RX;
1942		if (!(adv & ADVERTISE_1000XPSE_ASYM))
1943			flowctrl |= FLOW_CTRL_TX;
1944	} else if (adv & ADVERTISE_1000XPSE_ASYM)
1945		flowctrl |= FLOW_CTRL_TX;
1946
1947	return flowctrl;
1948}
1949
1950static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1951{
1952	u8 cap = 0;
1953
1954	if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1955		cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1956	} else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1957		if (lcladv & ADVERTISE_1000XPAUSE)
1958			cap = FLOW_CTRL_RX;
1959		if (rmtadv & ADVERTISE_1000XPAUSE)
1960			cap = FLOW_CTRL_TX;
1961	}
1962
1963	return cap;
1964}
1965
1966static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1967{
1968	u8 autoneg;
1969	u8 flowctrl = 0;
1970	u32 old_rx_mode = tp->rx_mode;
1971	u32 old_tx_mode = tp->tx_mode;
1972
1973	if (tg3_flag(tp, USE_PHYLIB))
1974		autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1975	else
1976		autoneg = tp->link_config.autoneg;
1977
1978	if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1979		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1980			flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1981		else
1982			flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1983	} else
1984		flowctrl = tp->link_config.flowctrl;
1985
1986	tp->link_config.active_flowctrl = flowctrl;
1987
1988	if (flowctrl & FLOW_CTRL_RX)
1989		tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1990	else
1991		tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1992
1993	if (old_rx_mode != tp->rx_mode)
1994		tw32_f(MAC_RX_MODE, tp->rx_mode);
1995
1996	if (flowctrl & FLOW_CTRL_TX)
1997		tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1998	else
1999		tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
2000
2001	if (old_tx_mode != tp->tx_mode)
2002		tw32_f(MAC_TX_MODE, tp->tx_mode);
2003}
2004
2005static void tg3_adjust_link(struct net_device *dev)
2006{
2007	u8 oldflowctrl, linkmesg = 0;
2008	u32 mac_mode, lcl_adv, rmt_adv;
2009	struct tg3 *tp = netdev_priv(dev);
2010	struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2011
2012	spin_lock_bh(&tp->lock);
2013
2014	mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2015				    MAC_MODE_HALF_DUPLEX);
2016
2017	oldflowctrl = tp->link_config.active_flowctrl;
2018
2019	if (phydev->link) {
2020		lcl_adv = 0;
2021		rmt_adv = 0;
2022
2023		if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2024			mac_mode |= MAC_MODE_PORT_MODE_MII;
2025		else if (phydev->speed == SPEED_1000 ||
2026			 tg3_asic_rev(tp) != ASIC_REV_5785)
2027			mac_mode |= MAC_MODE_PORT_MODE_GMII;
2028		else
2029			mac_mode |= MAC_MODE_PORT_MODE_MII;
2030
2031		if (phydev->duplex == DUPLEX_HALF)
2032			mac_mode |= MAC_MODE_HALF_DUPLEX;
2033		else {
2034			lcl_adv = mii_advertise_flowctrl(
2035				  tp->link_config.flowctrl);
2036
2037			if (phydev->pause)
2038				rmt_adv = LPA_PAUSE_CAP;
2039			if (phydev->asym_pause)
2040				rmt_adv |= LPA_PAUSE_ASYM;
2041		}
2042
2043		tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2044	} else
2045		mac_mode |= MAC_MODE_PORT_MODE_GMII;
2046
2047	if (mac_mode != tp->mac_mode) {
2048		tp->mac_mode = mac_mode;
2049		tw32_f(MAC_MODE, tp->mac_mode);
2050		udelay(40);
2051	}
2052
2053	if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2054		if (phydev->speed == SPEED_10)
2055			tw32(MAC_MI_STAT,
2056			     MAC_MI_STAT_10MBPS_MODE |
2057			     MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2058		else
2059			tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2060	}
2061
2062	if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2063		tw32(MAC_TX_LENGTHS,
2064		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2065		      (6 << TX_LENGTHS_IPG_SHIFT) |
2066		      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2067	else
2068		tw32(MAC_TX_LENGTHS,
2069		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2070		      (6 << TX_LENGTHS_IPG_SHIFT) |
2071		      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2072
2073	if (phydev->link != tp->old_link ||
2074	    phydev->speed != tp->link_config.active_speed ||
2075	    phydev->duplex != tp->link_config.active_duplex ||
2076	    oldflowctrl != tp->link_config.active_flowctrl)
2077		linkmesg = 1;
2078
2079	tp->old_link = phydev->link;
2080	tp->link_config.active_speed = phydev->speed;
2081	tp->link_config.active_duplex = phydev->duplex;
2082
2083	spin_unlock_bh(&tp->lock);
2084
2085	if (linkmesg)
2086		tg3_link_report(tp);
2087}
2088
2089static int tg3_phy_init(struct tg3 *tp)
2090{
2091	struct phy_device *phydev;
2092
2093	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2094		return 0;
2095
2096	/* Bring the PHY back to a known state. */
2097	tg3_bmcr_reset(tp);
2098
2099	phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2100
2101	/* Attach the MAC to the PHY. */
2102	phydev = phy_connect(tp->dev, phydev_name(phydev),
2103			     tg3_adjust_link, phydev->interface);
2104	if (IS_ERR(phydev)) {
2105		dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2106		return PTR_ERR(phydev);
2107	}
2108
2109	/* Mask with MAC supported features. */
2110	switch (phydev->interface) {
2111	case PHY_INTERFACE_MODE_GMII:
2112	case PHY_INTERFACE_MODE_RGMII:
2113		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2114			phy_set_max_speed(phydev, SPEED_1000);
2115			phy_support_asym_pause(phydev);
2116			break;
2117		}
2118		fallthrough;
2119	case PHY_INTERFACE_MODE_MII:
2120		phy_set_max_speed(phydev, SPEED_100);
2121		phy_support_asym_pause(phydev);
2122		break;
2123	default:
2124		phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2125		return -EINVAL;
2126	}
2127
2128	tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2129
2130	phy_attached_info(phydev);
2131
2132	return 0;
2133}
2134
2135static void tg3_phy_start(struct tg3 *tp)
2136{
2137	struct phy_device *phydev;
2138
2139	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2140		return;
2141
2142	phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2143
2144	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2145		tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2146		phydev->speed = tp->link_config.speed;
2147		phydev->duplex = tp->link_config.duplex;
2148		phydev->autoneg = tp->link_config.autoneg;
2149		ethtool_convert_legacy_u32_to_link_mode(
2150			phydev->advertising, tp->link_config.advertising);
2151	}
2152
2153	phy_start(phydev);
2154
2155	phy_start_aneg(phydev);
2156}
2157
2158static void tg3_phy_stop(struct tg3 *tp)
2159{
2160	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2161		return;
2162
2163	phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2164}
2165
2166static void tg3_phy_fini(struct tg3 *tp)
2167{
2168	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2169		phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2170		tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2171	}
2172}
2173
2174static int tg3_phy_set_extloopbk(struct tg3 *tp)
2175{
2176	int err;
2177	u32 val;
2178
2179	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2180		return 0;
2181
2182	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2183		/* Cannot do read-modify-write on 5401 */
2184		err = tg3_phy_auxctl_write(tp,
2185					   MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2186					   MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2187					   0x4c20);
2188		goto done;
2189	}
2190
2191	err = tg3_phy_auxctl_read(tp,
2192				  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2193	if (err)
2194		return err;
2195
2196	val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2197	err = tg3_phy_auxctl_write(tp,
2198				   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2199
2200done:
2201	return err;
2202}
2203
2204static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2205{
2206	u32 phytest;
2207
2208	if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2209		u32 phy;
2210
2211		tg3_writephy(tp, MII_TG3_FET_TEST,
2212			     phytest | MII_TG3_FET_SHADOW_EN);
2213		if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2214			if (enable)
2215				phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2216			else
2217				phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2218			tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2219		}
2220		tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2221	}
2222}
2223
2224static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2225{
2226	u32 reg;
2227
2228	if (!tg3_flag(tp, 5705_PLUS) ||
2229	    (tg3_flag(tp, 5717_PLUS) &&
2230	     (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2231		return;
2232
2233	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2234		tg3_phy_fet_toggle_apd(tp, enable);
2235		return;
2236	}
2237
2238	reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2239	      MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2240	      MII_TG3_MISC_SHDW_SCR5_SDTL |
2241	      MII_TG3_MISC_SHDW_SCR5_C125OE;
2242	if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2243		reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2244
2245	tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2246
2247
2248	reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2249	if (enable)
2250		reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2251
2252	tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2253}
2254
2255static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2256{
2257	u32 phy;
2258
2259	if (!tg3_flag(tp, 5705_PLUS) ||
2260	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2261		return;
2262
2263	if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2264		u32 ephy;
2265
2266		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2267			u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2268
2269			tg3_writephy(tp, MII_TG3_FET_TEST,
2270				     ephy | MII_TG3_FET_SHADOW_EN);
2271			if (!tg3_readphy(tp, reg, &phy)) {
2272				if (enable)
2273					phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2274				else
2275					phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2276				tg3_writephy(tp, reg, phy);
2277			}
2278			tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2279		}
2280	} else {
2281		int ret;
2282
2283		ret = tg3_phy_auxctl_read(tp,
2284					  MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2285		if (!ret) {
2286			if (enable)
2287				phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2288			else
2289				phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2290			tg3_phy_auxctl_write(tp,
2291					     MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2292		}
2293	}
2294}
2295
2296static void tg3_phy_set_wirespeed(struct tg3 *tp)
2297{
2298	int ret;
2299	u32 val;
2300
2301	if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2302		return;
2303
2304	ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2305	if (!ret)
2306		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2307				     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2308}
2309
2310static void tg3_phy_apply_otp(struct tg3 *tp)
2311{
2312	u32 otp, phy;
2313
2314	if (!tp->phy_otp)
2315		return;
2316
2317	otp = tp->phy_otp;
2318
2319	if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2320		return;
2321
2322	phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2323	phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2324	tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2325
2326	phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2327	      ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2328	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2329
2330	phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2331	phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2332	tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2333
2334	phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2335	tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2336
2337	phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2338	tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2339
2340	phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2341	      ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2342	tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2343
2344	tg3_phy_toggle_auxctl_smdsp(tp, false);
2345}
2346
2347static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2348{
2349	u32 val;
2350	struct ethtool_eee *dest = &tp->eee;
2351
2352	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2353		return;
2354
2355	if (eee)
2356		dest = eee;
2357
2358	if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2359		return;
2360
2361	/* Pull eee_active */
2362	if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2363	    val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2364		dest->eee_active = 1;
2365	} else
2366		dest->eee_active = 0;
2367
2368	/* Pull lp advertised settings */
2369	if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2370		return;
2371	dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2372
2373	/* Pull advertised and eee_enabled settings */
2374	if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2375		return;
2376	dest->eee_enabled = !!val;
2377	dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2378
2379	/* Pull tx_lpi_enabled */
2380	val = tr32(TG3_CPMU_EEE_MODE);
2381	dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2382
2383	/* Pull lpi timer value */
2384	dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2385}
2386
2387static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2388{
2389	u32 val;
2390
2391	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2392		return;
2393
2394	tp->setlpicnt = 0;
2395
2396	if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2397	    current_link_up &&
2398	    tp->link_config.active_duplex == DUPLEX_FULL &&
2399	    (tp->link_config.active_speed == SPEED_100 ||
2400	     tp->link_config.active_speed == SPEED_1000)) {
2401		u32 eeectl;
2402
2403		if (tp->link_config.active_speed == SPEED_1000)
2404			eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2405		else
2406			eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2407
2408		tw32(TG3_CPMU_EEE_CTRL, eeectl);
2409
2410		tg3_eee_pull_config(tp, NULL);
2411		if (tp->eee.eee_active)
2412			tp->setlpicnt = 2;
2413	}
2414
2415	if (!tp->setlpicnt) {
2416		if (current_link_up &&
2417		   !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2418			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2419			tg3_phy_toggle_auxctl_smdsp(tp, false);
2420		}
2421
2422		val = tr32(TG3_CPMU_EEE_MODE);
2423		tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2424	}
2425}
2426
2427static void tg3_phy_eee_enable(struct tg3 *tp)
2428{
2429	u32 val;
2430
2431	if (tp->link_config.active_speed == SPEED_1000 &&
2432	    (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2433	     tg3_asic_rev(tp) == ASIC_REV_5719 ||
2434	     tg3_flag(tp, 57765_CLASS)) &&
2435	    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2436		val = MII_TG3_DSP_TAP26_ALNOKO |
2437		      MII_TG3_DSP_TAP26_RMRXSTO;
2438		tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2439		tg3_phy_toggle_auxctl_smdsp(tp, false);
2440	}
2441
2442	val = tr32(TG3_CPMU_EEE_MODE);
2443	tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2444}
2445
2446static int tg3_wait_macro_done(struct tg3 *tp)
2447{
2448	int limit = 100;
2449
2450	while (limit--) {
2451		u32 tmp32;
2452
2453		if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2454			if ((tmp32 & 0x1000) == 0)
2455				break;
2456		}
2457	}
2458	if (limit < 0)
2459		return -EBUSY;
2460
2461	return 0;
2462}
2463
2464static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2465{
2466	static const u32 test_pat[4][6] = {
2467	{ 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2468	{ 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2469	{ 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2470	{ 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2471	};
2472	int chan;
2473
2474	for (chan = 0; chan < 4; chan++) {
2475		int i;
2476
2477		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2478			     (chan * 0x2000) | 0x0200);
2479		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2480
2481		for (i = 0; i < 6; i++)
2482			tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2483				     test_pat[chan][i]);
2484
2485		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2486		if (tg3_wait_macro_done(tp)) {
2487			*resetp = 1;
2488			return -EBUSY;
2489		}
2490
2491		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2492			     (chan * 0x2000) | 0x0200);
2493		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2494		if (tg3_wait_macro_done(tp)) {
2495			*resetp = 1;
2496			return -EBUSY;
2497		}
2498
2499		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2500		if (tg3_wait_macro_done(tp)) {
2501			*resetp = 1;
2502			return -EBUSY;
2503		}
2504
2505		for (i = 0; i < 6; i += 2) {
2506			u32 low, high;
2507
2508			if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2509			    tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2510			    tg3_wait_macro_done(tp)) {
2511				*resetp = 1;
2512				return -EBUSY;
2513			}
2514			low &= 0x7fff;
2515			high &= 0x000f;
2516			if (low != test_pat[chan][i] ||
2517			    high != test_pat[chan][i+1]) {
2518				tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2519				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2520				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2521
2522				return -EBUSY;
2523			}
2524		}
2525	}
2526
2527	return 0;
2528}
2529
2530static int tg3_phy_reset_chanpat(struct tg3 *tp)
2531{
2532	int chan;
2533
2534	for (chan = 0; chan < 4; chan++) {
2535		int i;
2536
2537		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2538			     (chan * 0x2000) | 0x0200);
2539		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2540		for (i = 0; i < 6; i++)
2541			tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2542		tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2543		if (tg3_wait_macro_done(tp))
2544			return -EBUSY;
2545	}
2546
2547	return 0;
2548}
2549
2550static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2551{
2552	u32 reg32, phy9_orig;
2553	int retries, do_phy_reset, err;
2554
2555	retries = 10;
2556	do_phy_reset = 1;
2557	do {
2558		if (do_phy_reset) {
2559			err = tg3_bmcr_reset(tp);
2560			if (err)
2561				return err;
2562			do_phy_reset = 0;
2563		}
2564
2565		/* Disable transmitter and interrupt.  */
2566		if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2567			continue;
2568
2569		reg32 |= 0x3000;
2570		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2571
2572		/* Set full-duplex, 1000 mbps.  */
2573		tg3_writephy(tp, MII_BMCR,
2574			     BMCR_FULLDPLX | BMCR_SPEED1000);
2575
2576		/* Set to master mode.  */
2577		if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2578			continue;
2579
2580		tg3_writephy(tp, MII_CTRL1000,
2581			     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2582
2583		err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2584		if (err)
2585			return err;
2586
2587		/* Block the PHY control access.  */
2588		tg3_phydsp_write(tp, 0x8005, 0x0800);
2589
2590		err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2591		if (!err)
2592			break;
2593	} while (--retries);
2594
2595	err = tg3_phy_reset_chanpat(tp);
2596	if (err)
2597		return err;
2598
2599	tg3_phydsp_write(tp, 0x8005, 0x0000);
2600
2601	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2602	tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2603
2604	tg3_phy_toggle_auxctl_smdsp(tp, false);
2605
2606	tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2607
2608	err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2609	if (err)
2610		return err;
2611
2612	reg32 &= ~0x3000;
2613	tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2614
2615	return 0;
2616}
2617
2618static void tg3_carrier_off(struct tg3 *tp)
2619{
2620	netif_carrier_off(tp->dev);
2621	tp->link_up = false;
2622}
2623
2624static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2625{
2626	if (tg3_flag(tp, ENABLE_ASF))
2627		netdev_warn(tp->dev,
2628			    "Management side-band traffic will be interrupted during phy settings change\n");
2629}
2630
2631/* This will reset the tigon3 PHY if there is no valid
2632 * link unless the FORCE argument is non-zero.
2633 */
2634static int tg3_phy_reset(struct tg3 *tp)
2635{
2636	u32 val, cpmuctrl;
2637	int err;
2638
2639	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2640		val = tr32(GRC_MISC_CFG);
2641		tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2642		udelay(40);
2643	}
2644	err  = tg3_readphy(tp, MII_BMSR, &val);
2645	err |= tg3_readphy(tp, MII_BMSR, &val);
2646	if (err != 0)
2647		return -EBUSY;
2648
2649	if (netif_running(tp->dev) && tp->link_up) {
2650		netif_carrier_off(tp->dev);
2651		tg3_link_report(tp);
2652	}
2653
2654	if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2655	    tg3_asic_rev(tp) == ASIC_REV_5704 ||
2656	    tg3_asic_rev(tp) == ASIC_REV_5705) {
2657		err = tg3_phy_reset_5703_4_5(tp);
2658		if (err)
2659			return err;
2660		goto out;
2661	}
2662
2663	cpmuctrl = 0;
2664	if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2665	    tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2666		cpmuctrl = tr32(TG3_CPMU_CTRL);
2667		if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2668			tw32(TG3_CPMU_CTRL,
2669			     cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2670	}
2671
2672	err = tg3_bmcr_reset(tp);
2673	if (err)
2674		return err;
2675
2676	if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2677		val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2678		tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2679
2680		tw32(TG3_CPMU_CTRL, cpmuctrl);
2681	}
2682
2683	if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2684	    tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2685		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2686		if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2687		    CPMU_LSPD_1000MB_MACCLK_12_5) {
2688			val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2689			udelay(40);
2690			tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2691		}
2692	}
2693
2694	if (tg3_flag(tp, 5717_PLUS) &&
2695	    (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2696		return 0;
2697
2698	tg3_phy_apply_otp(tp);
2699
2700	if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2701		tg3_phy_toggle_apd(tp, true);
2702	else
2703		tg3_phy_toggle_apd(tp, false);
2704
2705out:
2706	if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2707	    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2708		tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2709		tg3_phydsp_write(tp, 0x000a, 0x0323);
2710		tg3_phy_toggle_auxctl_smdsp(tp, false);
2711	}
2712
2713	if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2714		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2715		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2716	}
2717
2718	if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2719		if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2720			tg3_phydsp_write(tp, 0x000a, 0x310b);
2721			tg3_phydsp_write(tp, 0x201f, 0x9506);
2722			tg3_phydsp_write(tp, 0x401f, 0x14e2);
2723			tg3_phy_toggle_auxctl_smdsp(tp, false);
2724		}
2725	} else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2726		if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2727			tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2728			if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2729				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2730				tg3_writephy(tp, MII_TG3_TEST1,
2731					     MII_TG3_TEST1_TRIM_EN | 0x4);
2732			} else
2733				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2734
2735			tg3_phy_toggle_auxctl_smdsp(tp, false);
2736		}
2737	}
2738
2739	/* Set Extended packet length bit (bit 14) on all chips that */
2740	/* support jumbo frames */
2741	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2742		/* Cannot do read-modify-write on 5401 */
2743		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2744	} else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2745		/* Set bit 14 with read-modify-write to preserve other bits */
2746		err = tg3_phy_auxctl_read(tp,
2747					  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2748		if (!err)
2749			tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2750					   val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2751	}
2752
2753	/* Set phy register 0x10 bit 0 to high fifo elasticity to support
2754	 * jumbo frames transmission.
2755	 */
2756	if (tg3_flag(tp, JUMBO_CAPABLE)) {
2757		if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2758			tg3_writephy(tp, MII_TG3_EXT_CTRL,
2759				     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2760	}
2761
2762	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2763		/* adjust output voltage */
2764		tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2765	}
2766
2767	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2768		tg3_phydsp_write(tp, 0xffb, 0x4000);
2769
2770	tg3_phy_toggle_automdix(tp, true);
2771	tg3_phy_set_wirespeed(tp);
2772	return 0;
2773}
2774
2775#define TG3_GPIO_MSG_DRVR_PRES		 0x00000001
2776#define TG3_GPIO_MSG_NEED_VAUX		 0x00000002
2777#define TG3_GPIO_MSG_MASK		 (TG3_GPIO_MSG_DRVR_PRES | \
2778					  TG3_GPIO_MSG_NEED_VAUX)
2779#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2780	((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2781	 (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2782	 (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2783	 (TG3_GPIO_MSG_DRVR_PRES << 12))
2784
2785#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2786	((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2787	 (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2788	 (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2789	 (TG3_GPIO_MSG_NEED_VAUX << 12))
2790
2791static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2792{
2793	u32 status, shift;
2794
2795	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2796	    tg3_asic_rev(tp) == ASIC_REV_5719)
2797		status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2798	else
2799		status = tr32(TG3_CPMU_DRV_STATUS);
2800
2801	shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2802	status &= ~(TG3_GPIO_MSG_MASK << shift);
2803	status |= (newstat << shift);
2804
2805	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2806	    tg3_asic_rev(tp) == ASIC_REV_5719)
2807		tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2808	else
2809		tw32(TG3_CPMU_DRV_STATUS, status);
2810
2811	return status >> TG3_APE_GPIO_MSG_SHIFT;
2812}
2813
2814static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2815{
2816	if (!tg3_flag(tp, IS_NIC))
2817		return 0;
2818
2819	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2820	    tg3_asic_rev(tp) == ASIC_REV_5719 ||
2821	    tg3_asic_rev(tp) == ASIC_REV_5720) {
2822		if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2823			return -EIO;
2824
2825		tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2826
2827		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2828			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2829
2830		tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2831	} else {
2832		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2833			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2834	}
2835
2836	return 0;
2837}
2838
2839static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2840{
2841	u32 grc_local_ctrl;
2842
2843	if (!tg3_flag(tp, IS_NIC) ||
2844	    tg3_asic_rev(tp) == ASIC_REV_5700 ||
2845	    tg3_asic_rev(tp) == ASIC_REV_5701)
2846		return;
2847
2848	grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2849
2850	tw32_wait_f(GRC_LOCAL_CTRL,
2851		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2852		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2853
2854	tw32_wait_f(GRC_LOCAL_CTRL,
2855		    grc_local_ctrl,
2856		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2857
2858	tw32_wait_f(GRC_LOCAL_CTRL,
2859		    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2860		    TG3_GRC_LCLCTL_PWRSW_DELAY);
2861}
2862
2863static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2864{
2865	if (!tg3_flag(tp, IS_NIC))
2866		return;
2867
2868	if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2869	    tg3_asic_rev(tp) == ASIC_REV_5701) {
2870		tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2871			    (GRC_LCLCTRL_GPIO_OE0 |
2872			     GRC_LCLCTRL_GPIO_OE1 |
2873			     GRC_LCLCTRL_GPIO_OE2 |
2874			     GRC_LCLCTRL_GPIO_OUTPUT0 |
2875			     GRC_LCLCTRL_GPIO_OUTPUT1),
2876			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2877	} else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2878		   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2879		/* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2880		u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2881				     GRC_LCLCTRL_GPIO_OE1 |
2882				     GRC_LCLCTRL_GPIO_OE2 |
2883				     GRC_LCLCTRL_GPIO_OUTPUT0 |
2884				     GRC_LCLCTRL_GPIO_OUTPUT1 |
2885				     tp->grc_local_ctrl;
2886		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2887			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2888
2889		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2890		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2891			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2892
2893		grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2894		tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2895			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2896	} else {
2897		u32 no_gpio2;
2898		u32 grc_local_ctrl = 0;
2899
2900		/* Workaround to prevent overdrawing Amps. */
2901		if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2902			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2903			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2904				    grc_local_ctrl,
2905				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2906		}
2907
2908		/* On 5753 and variants, GPIO2 cannot be used. */
2909		no_gpio2 = tp->nic_sram_data_cfg &
2910			   NIC_SRAM_DATA_CFG_NO_GPIO2;
2911
2912		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2913				  GRC_LCLCTRL_GPIO_OE1 |
2914				  GRC_LCLCTRL_GPIO_OE2 |
2915				  GRC_LCLCTRL_GPIO_OUTPUT1 |
2916				  GRC_LCLCTRL_GPIO_OUTPUT2;
2917		if (no_gpio2) {
2918			grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2919					    GRC_LCLCTRL_GPIO_OUTPUT2);
2920		}
2921		tw32_wait_f(GRC_LOCAL_CTRL,
2922			    tp->grc_local_ctrl | grc_local_ctrl,
2923			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2924
2925		grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2926
2927		tw32_wait_f(GRC_LOCAL_CTRL,
2928			    tp->grc_local_ctrl | grc_local_ctrl,
2929			    TG3_GRC_LCLCTL_PWRSW_DELAY);
2930
2931		if (!no_gpio2) {
2932			grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2933			tw32_wait_f(GRC_LOCAL_CTRL,
2934				    tp->grc_local_ctrl | grc_local_ctrl,
2935				    TG3_GRC_LCLCTL_PWRSW_DELAY);
2936		}
2937	}
2938}
2939
2940static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2941{
2942	u32 msg = 0;
2943
2944	/* Serialize power state transitions */
2945	if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2946		return;
2947
2948	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2949		msg = TG3_GPIO_MSG_NEED_VAUX;
2950
2951	msg = tg3_set_function_status(tp, msg);
2952
2953	if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2954		goto done;
2955
2956	if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2957		tg3_pwrsrc_switch_to_vaux(tp);
2958	else
2959		tg3_pwrsrc_die_with_vmain(tp);
2960
2961done:
2962	tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2963}
2964
2965static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2966{
2967	bool need_vaux = false;
2968
2969	/* The GPIOs do something completely different on 57765. */
2970	if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2971		return;
2972
2973	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2974	    tg3_asic_rev(tp) == ASIC_REV_5719 ||
2975	    tg3_asic_rev(tp) == ASIC_REV_5720) {
2976		tg3_frob_aux_power_5717(tp, include_wol ?
2977					tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2978		return;
2979	}
2980
2981	if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2982		struct net_device *dev_peer;
2983
2984		dev_peer = pci_get_drvdata(tp->pdev_peer);
2985
2986		/* remove_one() may have been run on the peer. */
2987		if (dev_peer) {
2988			struct tg3 *tp_peer = netdev_priv(dev_peer);
2989
2990			if (tg3_flag(tp_peer, INIT_COMPLETE))
2991				return;
2992
2993			if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2994			    tg3_flag(tp_peer, ENABLE_ASF))
2995				need_vaux = true;
2996		}
2997	}
2998
2999	if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
3000	    tg3_flag(tp, ENABLE_ASF))
3001		need_vaux = true;
3002
3003	if (need_vaux)
3004		tg3_pwrsrc_switch_to_vaux(tp);
3005	else
3006		tg3_pwrsrc_die_with_vmain(tp);
3007}
3008
3009static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3010{
3011	if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3012		return 1;
3013	else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3014		if (speed != SPEED_10)
3015			return 1;
3016	} else if (speed == SPEED_10)
3017		return 1;
3018
3019	return 0;
3020}
3021
3022static bool tg3_phy_power_bug(struct tg3 *tp)
3023{
3024	switch (tg3_asic_rev(tp)) {
3025	case ASIC_REV_5700:
3026	case ASIC_REV_5704:
3027		return true;
3028	case ASIC_REV_5780:
3029		if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3030			return true;
3031		return false;
3032	case ASIC_REV_5717:
3033		if (!tp->pci_fn)
3034			return true;
3035		return false;
3036	case ASIC_REV_5719:
3037	case ASIC_REV_5720:
3038		if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3039		    !tp->pci_fn)
3040			return true;
3041		return false;
3042	}
3043
3044	return false;
3045}
3046
3047static bool tg3_phy_led_bug(struct tg3 *tp)
3048{
3049	switch (tg3_asic_rev(tp)) {
3050	case ASIC_REV_5719:
3051	case ASIC_REV_5720:
3052		if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3053		    !tp->pci_fn)
3054			return true;
3055		return false;
3056	}
3057
3058	return false;
3059}
3060
3061static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3062{
3063	u32 val;
3064
3065	if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3066		return;
3067
3068	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3069		if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3070			u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3071			u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3072
3073			sg_dig_ctrl |=
3074				SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3075			tw32(SG_DIG_CTRL, sg_dig_ctrl);
3076			tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3077		}
3078		return;
3079	}
3080
3081	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3082		tg3_bmcr_reset(tp);
3083		val = tr32(GRC_MISC_CFG);
3084		tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3085		udelay(40);
3086		return;
3087	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3088		u32 phytest;
3089		if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3090			u32 phy;
3091
3092			tg3_writephy(tp, MII_ADVERTISE, 0);
3093			tg3_writephy(tp, MII_BMCR,
3094				     BMCR_ANENABLE | BMCR_ANRESTART);
3095
3096			tg3_writephy(tp, MII_TG3_FET_TEST,
3097				     phytest | MII_TG3_FET_SHADOW_EN);
3098			if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3099				phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3100				tg3_writephy(tp,
3101					     MII_TG3_FET_SHDW_AUXMODE4,
3102					     phy);
3103			}
3104			tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3105		}
3106		return;
3107	} else if (do_low_power) {
3108		if (!tg3_phy_led_bug(tp))
3109			tg3_writephy(tp, MII_TG3_EXT_CTRL,
3110				     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3111
3112		val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3113		      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3114		      MII_TG3_AUXCTL_PCTL_VREG_11V;
3115		tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3116	}
3117
3118	/* The PHY should not be powered down on some chips because
3119	 * of bugs.
3120	 */
3121	if (tg3_phy_power_bug(tp))
3122		return;
3123
3124	if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3125	    tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3126		val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3127		val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3128		val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3129		tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3130	}
3131
3132	tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3133}
3134
3135/* tp->lock is held. */
3136static int tg3_nvram_lock(struct tg3 *tp)
3137{
3138	if (tg3_flag(tp, NVRAM)) {
3139		int i;
3140
3141		if (tp->nvram_lock_cnt == 0) {
3142			tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3143			for (i = 0; i < 8000; i++) {
3144				if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3145					break;
3146				udelay(20);
3147			}
3148			if (i == 8000) {
3149				tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3150				return -ENODEV;
3151			}
3152		}
3153		tp->nvram_lock_cnt++;
3154	}
3155	return 0;
3156}
3157
3158/* tp->lock is held. */
3159static void tg3_nvram_unlock(struct tg3 *tp)
3160{
3161	if (tg3_flag(tp, NVRAM)) {
3162		if (tp->nvram_lock_cnt > 0)
3163			tp->nvram_lock_cnt--;
3164		if (tp->nvram_lock_cnt == 0)
3165			tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3166	}
3167}
3168
3169/* tp->lock is held. */
3170static void tg3_enable_nvram_access(struct tg3 *tp)
3171{
3172	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3173		u32 nvaccess = tr32(NVRAM_ACCESS);
3174
3175		tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3176	}
3177}
3178
3179/* tp->lock is held. */
3180static void tg3_disable_nvram_access(struct tg3 *tp)
3181{
3182	if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3183		u32 nvaccess = tr32(NVRAM_ACCESS);
3184
3185		tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3186	}
3187}
3188
3189static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3190					u32 offset, u32 *val)
3191{
3192	u32 tmp;
3193	int i;
3194
3195	if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3196		return -EINVAL;
3197
3198	tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3199					EEPROM_ADDR_DEVID_MASK |
3200					EEPROM_ADDR_READ);
3201	tw32(GRC_EEPROM_ADDR,
3202	     tmp |
3203	     (0 << EEPROM_ADDR_DEVID_SHIFT) |
3204	     ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3205	      EEPROM_ADDR_ADDR_MASK) |
3206	     EEPROM_ADDR_READ | EEPROM_ADDR_START);
3207
3208	for (i = 0; i < 1000; i++) {
3209		tmp = tr32(GRC_EEPROM_ADDR);
3210
3211		if (tmp & EEPROM_ADDR_COMPLETE)
3212			break;
3213		msleep(1);
3214	}
3215	if (!(tmp & EEPROM_ADDR_COMPLETE))
3216		return -EBUSY;
3217
3218	tmp = tr32(GRC_EEPROM_DATA);
3219
3220	/*
3221	 * The data will always be opposite the native endian
3222	 * format.  Perform a blind byteswap to compensate.
3223	 */
3224	*val = swab32(tmp);
3225
3226	return 0;
3227}
3228
3229#define NVRAM_CMD_TIMEOUT 10000
3230
3231static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3232{
3233	int i;
3234
3235	tw32(NVRAM_CMD, nvram_cmd);
3236	for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3237		usleep_range(10, 40);
3238		if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3239			udelay(10);
3240			break;
3241		}
3242	}
3243
3244	if (i == NVRAM_CMD_TIMEOUT)
3245		return -EBUSY;
3246
3247	return 0;
3248}
3249
3250static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3251{
3252	if (tg3_flag(tp, NVRAM) &&
3253	    tg3_flag(tp, NVRAM_BUFFERED) &&
3254	    tg3_flag(tp, FLASH) &&
3255	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3256	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3257
3258		addr = ((addr / tp->nvram_pagesize) <<
3259			ATMEL_AT45DB0X1B_PAGE_POS) +
3260		       (addr % tp->nvram_pagesize);
3261
3262	return addr;
3263}
3264
3265static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3266{
3267	if (tg3_flag(tp, NVRAM) &&
3268	    tg3_flag(tp, NVRAM_BUFFERED) &&
3269	    tg3_flag(tp, FLASH) &&
3270	    !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3271	    (tp->nvram_jedecnum == JEDEC_ATMEL))
3272
3273		addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3274			tp->nvram_pagesize) +
3275		       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3276
3277	return addr;
3278}
3279
3280/* NOTE: Data read in from NVRAM is byteswapped according to
3281 * the byteswapping settings for all other register accesses.
3282 * tg3 devices are BE devices, so on a BE machine, the data
3283 * returned will be exactly as it is seen in NVRAM.  On a LE
3284 * machine, the 32-bit value will be byteswapped.
3285 */
3286static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3287{
3288	int ret;
3289
3290	if (!tg3_flag(tp, NVRAM))
3291		return tg3_nvram_read_using_eeprom(tp, offset, val);
3292
3293	offset = tg3_nvram_phys_addr(tp, offset);
3294
3295	if (offset > NVRAM_ADDR_MSK)
3296		return -EINVAL;
3297
3298	ret = tg3_nvram_lock(tp);
3299	if (ret)
3300		return ret;
3301
3302	tg3_enable_nvram_access(tp);
3303
3304	tw32(NVRAM_ADDR, offset);
3305	ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3306		NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3307
3308	if (ret == 0)
3309		*val = tr32(NVRAM_RDDATA);
3310
3311	tg3_disable_nvram_access(tp);
3312
3313	tg3_nvram_unlock(tp);
3314
3315	return ret;
3316}
3317
3318/* Ensures NVRAM data is in bytestream format. */
3319static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3320{
3321	u32 v;
3322	int res = tg3_nvram_read(tp, offset, &v);
3323	if (!res)
3324		*val = cpu_to_be32(v);
3325	return res;
3326}
3327
3328static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3329				    u32 offset, u32 len, u8 *buf)
3330{
3331	int i, j, rc = 0;
3332	u32 val;
3333
3334	for (i = 0; i < len; i += 4) {
3335		u32 addr;
3336		__be32 data;
3337
3338		addr = offset + i;
3339
3340		memcpy(&data, buf + i, 4);
3341
3342		/*
3343		 * The SEEPROM interface expects the data to always be opposite
3344		 * the native endian format.  We accomplish this by reversing
3345		 * all the operations that would have been performed on the
3346		 * data from a call to tg3_nvram_read_be32().
3347		 */
3348		tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3349
3350		val = tr32(GRC_EEPROM_ADDR);
3351		tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3352
3353		val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3354			EEPROM_ADDR_READ);
3355		tw32(GRC_EEPROM_ADDR, val |
3356			(0 << EEPROM_ADDR_DEVID_SHIFT) |
3357			(addr & EEPROM_ADDR_ADDR_MASK) |
3358			EEPROM_ADDR_START |
3359			EEPROM_ADDR_WRITE);
3360
3361		for (j = 0; j < 1000; j++) {
3362			val = tr32(GRC_EEPROM_ADDR);
3363
3364			if (val & EEPROM_ADDR_COMPLETE)
3365				break;
3366			msleep(1);
3367		}
3368		if (!(val & EEPROM_ADDR_COMPLETE)) {
3369			rc = -EBUSY;
3370			break;
3371		}
3372	}
3373
3374	return rc;
3375}
3376
3377/* offset and length are dword aligned */
3378static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3379		u8 *buf)
3380{
3381	int ret = 0;
3382	u32 pagesize = tp->nvram_pagesize;
3383	u32 pagemask = pagesize - 1;
3384	u32 nvram_cmd;
3385	u8 *tmp;
3386
3387	tmp = kmalloc(pagesize, GFP_KERNEL);
3388	if (tmp == NULL)
3389		return -ENOMEM;
3390
3391	while (len) {
3392		int j;
3393		u32 phy_addr, page_off, size;
3394
3395		phy_addr = offset & ~pagemask;
3396
3397		for (j = 0; j < pagesize; j += 4) {
3398			ret = tg3_nvram_read_be32(tp, phy_addr + j,
3399						  (__be32 *) (tmp + j));
3400			if (ret)
3401				break;
3402		}
3403		if (ret)
3404			break;
3405
3406		page_off = offset & pagemask;
3407		size = pagesize;
3408		if (len < size)
3409			size = len;
3410
3411		len -= size;
3412
3413		memcpy(tmp + page_off, buf, size);
3414
3415		offset = offset + (pagesize - page_off);
3416
3417		tg3_enable_nvram_access(tp);
3418
3419		/*
3420		 * Before we can erase the flash page, we need
3421		 * to issue a special "write enable" command.
3422		 */
3423		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3424
3425		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3426			break;
3427
3428		/* Erase the target page */
3429		tw32(NVRAM_ADDR, phy_addr);
3430
3431		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3432			NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3433
3434		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3435			break;
3436
3437		/* Issue another write enable to start the write. */
3438		nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3439
3440		if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3441			break;
3442
3443		for (j = 0; j < pagesize; j += 4) {
3444			__be32 data;
3445
3446			data = *((__be32 *) (tmp + j));
3447
3448			tw32(NVRAM_WRDATA, be32_to_cpu(data));
3449
3450			tw32(NVRAM_ADDR, phy_addr + j);
3451
3452			nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3453				NVRAM_CMD_WR;
3454
3455			if (j == 0)
3456				nvram_cmd |= NVRAM_CMD_FIRST;
3457			else if (j == (pagesize - 4))
3458				nvram_cmd |= NVRAM_CMD_LAST;
3459
3460			ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3461			if (ret)
3462				break;
3463		}
3464		if (ret)
3465			break;
3466	}
3467
3468	nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3469	tg3_nvram_exec_cmd(tp, nvram_cmd);
3470
3471	kfree(tmp);
3472
3473	return ret;
3474}
3475
3476/* offset and length are dword aligned */
3477static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3478		u8 *buf)
3479{
3480	int i, ret = 0;
3481
3482	for (i = 0; i < len; i += 4, offset += 4) {
3483		u32 page_off, phy_addr, nvram_cmd;
3484		__be32 data;
3485
3486		memcpy(&data, buf + i, 4);
3487		tw32(NVRAM_WRDATA, be32_to_cpu(data));
3488
3489		page_off = offset % tp->nvram_pagesize;
3490
3491		phy_addr = tg3_nvram_phys_addr(tp, offset);
3492
3493		nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3494
3495		if (page_off == 0 || i == 0)
3496			nvram_cmd |= NVRAM_CMD_FIRST;
3497		if (page_off == (tp->nvram_pagesize - 4))
3498			nvram_cmd |= NVRAM_CMD_LAST;
3499
3500		if (i == (len - 4))
3501			nvram_cmd |= NVRAM_CMD_LAST;
3502
3503		if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3504		    !tg3_flag(tp, FLASH) ||
3505		    !tg3_flag(tp, 57765_PLUS))
3506			tw32(NVRAM_ADDR, phy_addr);
3507
3508		if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3509		    !tg3_flag(tp, 5755_PLUS) &&
3510		    (tp->nvram_jedecnum == JEDEC_ST) &&
3511		    (nvram_cmd & NVRAM_CMD_FIRST)) {
3512			u32 cmd;
3513
3514			cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3515			ret = tg3_nvram_exec_cmd(tp, cmd);
3516			if (ret)
3517				break;
3518		}
3519		if (!tg3_flag(tp, FLASH)) {
3520			/* We always do complete word writes to eeprom. */
3521			nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3522		}
3523
3524		ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3525		if (ret)
3526			break;
3527	}
3528	return ret;
3529}
3530
3531/* offset and length are dword aligned */
3532static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3533{
3534	int ret;
3535
3536	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3537		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3538		       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3539		udelay(40);
3540	}
3541
3542	if (!tg3_flag(tp, NVRAM)) {
3543		ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3544	} else {
3545		u32 grc_mode;
3546
3547		ret = tg3_nvram_lock(tp);
3548		if (ret)
3549			return ret;
3550
3551		tg3_enable_nvram_access(tp);
3552		if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3553			tw32(NVRAM_WRITE1, 0x406);
3554
3555		grc_mode = tr32(GRC_MODE);
3556		tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3557
3558		if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3559			ret = tg3_nvram_write_block_buffered(tp, offset, len,
3560				buf);
3561		} else {
3562			ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3563				buf);
3564		}
3565
3566		grc_mode = tr32(GRC_MODE);
3567		tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3568
3569		tg3_disable_nvram_access(tp);
3570		tg3_nvram_unlock(tp);
3571	}
3572
3573	if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3574		tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3575		udelay(40);
3576	}
3577
3578	return ret;
3579}
3580
3581#define RX_CPU_SCRATCH_BASE	0x30000
3582#define RX_CPU_SCRATCH_SIZE	0x04000
3583#define TX_CPU_SCRATCH_BASE	0x34000
3584#define TX_CPU_SCRATCH_SIZE	0x04000
3585
3586/* tp->lock is held. */
3587static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3588{
3589	int i;
3590	const int iters = 10000;
3591
3592	for (i = 0; i < iters; i++) {
3593		tw32(cpu_base + CPU_STATE, 0xffffffff);
3594		tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3595		if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3596			break;
3597		if (pci_channel_offline(tp->pdev))
3598			return -EBUSY;
3599	}
3600
3601	return (i == iters) ? -EBUSY : 0;
3602}
3603
3604/* tp->lock is held. */
3605static int tg3_rxcpu_pause(struct tg3 *tp)
3606{
3607	int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3608
3609	tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3610	tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3611	udelay(10);
3612
3613	return rc;
3614}
3615
3616/* tp->lock is held. */
3617static int tg3_txcpu_pause(struct tg3 *tp)
3618{
3619	return tg3_pause_cpu(tp, TX_CPU_BASE);
3620}
3621
3622/* tp->lock is held. */
3623static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3624{
3625	tw32(cpu_base + CPU_STATE, 0xffffffff);
3626	tw32_f(cpu_base + CPU_MODE,  0x00000000);
3627}
3628
3629/* tp->lock is held. */
3630static void tg3_rxcpu_resume(struct tg3 *tp)
3631{
3632	tg3_resume_cpu(tp, RX_CPU_BASE);
3633}
3634
3635/* tp->lock is held. */
3636static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3637{
3638	int rc;
3639
3640	BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3641
3642	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3643		u32 val = tr32(GRC_VCPU_EXT_CTRL);
3644
3645		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3646		return 0;
3647	}
3648	if (cpu_base == RX_CPU_BASE) {
3649		rc = tg3_rxcpu_pause(tp);
3650	} else {
3651		/*
3652		 * There is only an Rx CPU for the 5750 derivative in the
3653		 * BCM4785.
3654		 */
3655		if (tg3_flag(tp, IS_SSB_CORE))
3656			return 0;
3657
3658		rc = tg3_txcpu_pause(tp);
3659	}
3660
3661	if (rc) {
3662		netdev_err(tp->dev, "%s timed out, %s CPU\n",
3663			   __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3664		return -ENODEV;
3665	}
3666
3667	/* Clear firmware's nvram arbitration. */
3668	if (tg3_flag(tp, NVRAM))
3669		tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3670	return 0;
3671}
3672
3673static int tg3_fw_data_len(struct tg3 *tp,
3674			   const struct tg3_firmware_hdr *fw_hdr)
3675{
3676	int fw_len;
3677
3678	/* Non fragmented firmware have one firmware header followed by a
3679	 * contiguous chunk of data to be written. The length field in that
3680	 * header is not the length of data to be written but the complete
3681	 * length of the bss. The data length is determined based on
3682	 * tp->fw->size minus headers.
3683	 *
3684	 * Fragmented firmware have a main header followed by multiple
3685	 * fragments. Each fragment is identical to non fragmented firmware
3686	 * with a firmware header followed by a contiguous chunk of data. In
3687	 * the main header, the length field is unused and set to 0xffffffff.
3688	 * In each fragment header the length is the entire size of that
3689	 * fragment i.e. fragment data + header length. Data length is
3690	 * therefore length field in the header minus TG3_FW_HDR_LEN.
3691	 */
3692	if (tp->fw_len == 0xffffffff)
3693		fw_len = be32_to_cpu(fw_hdr->len);
3694	else
3695		fw_len = tp->fw->size;
3696
3697	return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3698}
3699
3700/* tp->lock is held. */
3701static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3702				 u32 cpu_scratch_base, int cpu_scratch_size,
3703				 const struct tg3_firmware_hdr *fw_hdr)
3704{
3705	int err, i;
3706	void (*write_op)(struct tg3 *, u32, u32);
3707	int total_len = tp->fw->size;
3708
3709	if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3710		netdev_err(tp->dev,
3711			   "%s: Trying to load TX cpu firmware which is 5705\n",
3712			   __func__);
3713		return -EINVAL;
3714	}
3715
3716	if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3717		write_op = tg3_write_mem;
3718	else
3719		write_op = tg3_write_indirect_reg32;
3720
3721	if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3722		/* It is possible that bootcode is still loading at this point.
3723		 * Get the nvram lock first before halting the cpu.
3724		 */
3725		int lock_err = tg3_nvram_lock(tp);
3726		err = tg3_halt_cpu(tp, cpu_base);
3727		if (!lock_err)
3728			tg3_nvram_unlock(tp);
3729		if (err)
3730			goto out;
3731
3732		for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3733			write_op(tp, cpu_scratch_base + i, 0);
3734		tw32(cpu_base + CPU_STATE, 0xffffffff);
3735		tw32(cpu_base + CPU_MODE,
3736		     tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3737	} else {
3738		/* Subtract additional main header for fragmented firmware and
3739		 * advance to the first fragment
3740		 */
3741		total_len -= TG3_FW_HDR_LEN;
3742		fw_hdr++;
3743	}
3744
3745	do {
3746		u32 *fw_data = (u32 *)(fw_hdr + 1);
3747		for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3748			write_op(tp, cpu_scratch_base +
3749				     (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3750				     (i * sizeof(u32)),
3751				 be32_to_cpu(fw_data[i]));
3752
3753		total_len -= be32_to_cpu(fw_hdr->len);
3754
3755		/* Advance to next fragment */
3756		fw_hdr = (struct tg3_firmware_hdr *)
3757			 ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3758	} while (total_len > 0);
3759
3760	err = 0;
3761
3762out:
3763	return err;
3764}
3765
3766/* tp->lock is held. */
3767static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3768{
3769	int i;
3770	const int iters = 5;
3771
3772	tw32(cpu_base + CPU_STATE, 0xffffffff);
3773	tw32_f(cpu_base + CPU_PC, pc);
3774
3775	for (i = 0; i < iters; i++) {
3776		if (tr32(cpu_base + CPU_PC) == pc)
3777			break;
3778		tw32(cpu_base + CPU_STATE, 0xffffffff);
3779		tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3780		tw32_f(cpu_base + CPU_PC, pc);
3781		udelay(1000);
3782	}
3783
3784	return (i == iters) ? -EBUSY : 0;
3785}
3786
3787/* tp->lock is held. */
3788static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3789{
3790	const struct tg3_firmware_hdr *fw_hdr;
3791	int err;
3792
3793	fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3794
3795	/* Firmware blob starts with version numbers, followed by
3796	   start address and length. We are setting complete length.
3797	   length = end_address_of_bss - start_address_of_text.
3798	   Remainder is the blob to be loaded contiguously
3799	   from start address. */
3800
3801	err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3802				    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3803				    fw_hdr);
3804	if (err)
3805		return err;
3806
3807	err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3808				    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3809				    fw_hdr);
3810	if (err)
3811		return err;
3812
3813	/* Now startup only the RX cpu. */
3814	err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3815				       be32_to_cpu(fw_hdr->base_addr));
3816	if (err) {
3817		netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3818			   "should be %08x\n", __func__,
3819			   tr32(RX_CPU_BASE + CPU_PC),
3820				be32_to_cpu(fw_hdr->base_addr));
3821		return -ENODEV;
3822	}
3823
3824	tg3_rxcpu_resume(tp);
3825
3826	return 0;
3827}
3828
3829static int tg3_validate_rxcpu_state(struct tg3 *tp)
3830{
3831	const int iters = 1000;
3832	int i;
3833	u32 val;
3834
3835	/* Wait for boot code to complete initialization and enter service
3836	 * loop. It is then safe to download service patches
3837	 */
3838	for (i = 0; i < iters; i++) {
3839		if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3840			break;
3841
3842		udelay(10);
3843	}
3844
3845	if (i == iters) {
3846		netdev_err(tp->dev, "Boot code not ready for service patches\n");
3847		return -EBUSY;
3848	}
3849
3850	val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3851	if (val & 0xff) {
3852		netdev_warn(tp->dev,
3853			    "Other patches exist. Not downloading EEE patch\n");
3854		return -EEXIST;
3855	}
3856
3857	return 0;
3858}
3859
3860/* tp->lock is held. */
3861static void tg3_load_57766_firmware(struct tg3 *tp)
3862{
3863	struct tg3_firmware_hdr *fw_hdr;
3864
3865	if (!tg3_flag(tp, NO_NVRAM))
3866		return;
3867
3868	if (tg3_validate_rxcpu_state(tp))
3869		return;
3870
3871	if (!tp->fw)
3872		return;
3873
3874	/* This firmware blob has a different format than older firmware
3875	 * releases as given below. The main difference is we have fragmented
3876	 * data to be written to non-contiguous locations.
3877	 *
3878	 * In the beginning we have a firmware header identical to other
3879	 * firmware which consists of version, base addr and length. The length
3880	 * here is unused and set to 0xffffffff.
3881	 *
3882	 * This is followed by a series of firmware fragments which are
3883	 * individually identical to previous firmware. i.e. they have the
3884	 * firmware header and followed by data for that fragment. The version
3885	 * field of the individual fragment header is unused.
3886	 */
3887
3888	fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3889	if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3890		return;
3891
3892	if (tg3_rxcpu_pause(tp))
3893		return;
3894
3895	/* tg3_load_firmware_cpu() will always succeed for the 57766 */
3896	tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3897
3898	tg3_rxcpu_resume(tp);
3899}
3900
3901/* tp->lock is held. */
3902static int tg3_load_tso_firmware(struct tg3 *tp)
3903{
3904	const struct tg3_firmware_hdr *fw_hdr;
3905	unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3906	int err;
3907
3908	if (!tg3_flag(tp, FW_TSO))
3909		return 0;
3910
3911	fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3912
3913	/* Firmware blob starts with version numbers, followed by
3914	   start address and length. We are setting complete length.
3915	   length = end_address_of_bss - start_address_of_text.
3916	   Remainder is the blob to be loaded contiguously
3917	   from start address. */
3918
3919	cpu_scratch_size = tp->fw_len;
3920
3921	if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3922		cpu_base = RX_CPU_BASE;
3923		cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3924	} else {
3925		cpu_base = TX_CPU_BASE;
3926		cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3927		cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3928	}
3929
3930	err = tg3_load_firmware_cpu(tp, cpu_base,
3931				    cpu_scratch_base, cpu_scratch_size,
3932				    fw_hdr);
3933	if (err)
3934		return err;
3935
3936	/* Now startup the cpu. */
3937	err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3938				       be32_to_cpu(fw_hdr->base_addr));
3939	if (err) {
3940		netdev_err(tp->dev,
3941			   "%s fails to set CPU PC, is %08x should be %08x\n",
3942			   __func__, tr32(cpu_base + CPU_PC),
3943			   be32_to_cpu(fw_hdr->base_addr));
3944		return -ENODEV;
3945	}
3946
3947	tg3_resume_cpu(tp, cpu_base);
3948	return 0;
3949}
3950
3951/* tp->lock is held. */
3952static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index)
3953{
3954	u32 addr_high, addr_low;
3955
3956	addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3957	addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3958		    (mac_addr[4] <<  8) | mac_addr[5]);
3959
3960	if (index < 4) {
3961		tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3962		tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3963	} else {
3964		index -= 4;
3965		tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3966		tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3967	}
3968}
3969
3970/* tp->lock is held. */
3971static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3972{
3973	u32 addr_high;
3974	int i;
3975
3976	for (i = 0; i < 4; i++) {
3977		if (i == 1 && skip_mac_1)
3978			continue;
3979		__tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3980	}
3981
3982	if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3983	    tg3_asic_rev(tp) == ASIC_REV_5704) {
3984		for (i = 4; i < 16; i++)
3985			__tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3986	}
3987
3988	addr_high = (tp->dev->dev_addr[0] +
3989		     tp->dev->dev_addr[1] +
3990		     tp->dev->dev_addr[2] +
3991		     tp->dev->dev_addr[3] +
3992		     tp->dev->dev_addr[4] +
3993		     tp->dev->dev_addr[5]) &
3994		TX_BACKOFF_SEED_MASK;
3995	tw32(MAC_TX_BACKOFF_SEED, addr_high);
3996}
3997
3998static void tg3_enable_register_access(struct tg3 *tp)
3999{
4000	/*
4001	 * Make sure register accesses (indirect or otherwise) will function
4002	 * correctly.
4003	 */
4004	pci_write_config_dword(tp->pdev,
4005			       TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
4006}
4007
4008static int tg3_power_up(struct tg3 *tp)
4009{
4010	int err;
4011
4012	tg3_enable_register_access(tp);
4013
4014	err = pci_set_power_state(tp->pdev, PCI_D0);
4015	if (!err) {
4016		/* Switch out of Vaux if it is a NIC */
4017		tg3_pwrsrc_switch_to_vmain(tp);
4018	} else {
4019		netdev_err(tp->dev, "Transition to D0 failed\n");
4020	}
4021
4022	return err;
4023}
4024
4025static int tg3_setup_phy(struct tg3 *, bool);
4026
4027static int tg3_power_down_prepare(struct tg3 *tp)
4028{
4029	u32 misc_host_ctrl;
4030	bool device_should_wake, do_low_power;
4031
4032	tg3_enable_register_access(tp);
4033
4034	/* Restore the CLKREQ setting. */
4035	if (tg3_flag(tp, CLKREQ_BUG))
4036		pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4037					 PCI_EXP_LNKCTL_CLKREQ_EN);
4038
4039	misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4040	tw32(TG3PCI_MISC_HOST_CTRL,
4041	     misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4042
4043	device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4044			     tg3_flag(tp, WOL_ENABLE);
4045
4046	if (tg3_flag(tp, USE_PHYLIB)) {
4047		do_low_power = false;
4048		if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4049		    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4050			__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, };
4051			struct phy_device *phydev;
4052			u32 phyid;
4053
4054			phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4055
4056			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4057
4058			tp->link_config.speed = phydev->speed;
4059			tp->link_config.duplex = phydev->duplex;
4060			tp->link_config.autoneg = phydev->autoneg;
4061			ethtool_convert_link_mode_to_legacy_u32(
4062				&tp->link_config.advertising,
4063				phydev->advertising);
4064
4065			linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising);
4066			linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
4067					 advertising);
4068			linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
4069					 advertising);
4070			linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
4071					 advertising);
4072
4073			if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4074				if (tg3_flag(tp, WOL_SPEED_100MB)) {
4075					linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
4076							 advertising);
4077					linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
4078							 advertising);
4079					linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4080							 advertising);
4081				} else {
4082					linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4083							 advertising);
4084				}
4085			}
4086
4087			linkmode_copy(phydev->advertising, advertising);
4088			phy_start_aneg(phydev);
4089
4090			phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4091			if (phyid != PHY_ID_BCMAC131) {
4092				phyid &= PHY_BCM_OUI_MASK;
4093				if (phyid == PHY_BCM_OUI_1 ||
4094				    phyid == PHY_BCM_OUI_2 ||
4095				    phyid == PHY_BCM_OUI_3)
4096					do_low_power = true;
4097			}
4098		}
4099	} else {
4100		do_low_power = true;
4101
4102		if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4103			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4104
4105		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4106			tg3_setup_phy(tp, false);
4107	}
4108
4109	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4110		u32 val;
4111
4112		val = tr32(GRC_VCPU_EXT_CTRL);
4113		tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4114	} else if (!tg3_flag(tp, ENABLE_ASF)) {
4115		int i;
4116		u32 val;
4117
4118		for (i = 0; i < 200; i++) {
4119			tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4120			if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4121				break;
4122			msleep(1);
4123		}
4124	}
4125	if (tg3_flag(tp, WOL_CAP))
4126		tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4127						     WOL_DRV_STATE_SHUTDOWN |
4128						     WOL_DRV_WOL |
4129						     WOL_SET_MAGIC_PKT);
4130
4131	if (device_should_wake) {
4132		u32 mac_mode;
4133
4134		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4135			if (do_low_power &&
4136			    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4137				tg3_phy_auxctl_write(tp,
4138					       MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4139					       MII_TG3_AUXCTL_PCTL_WOL_EN |
4140					       MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4141					       MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4142				udelay(40);
4143			}
4144
4145			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4146				mac_mode = MAC_MODE_PORT_MODE_GMII;
4147			else if (tp->phy_flags &
4148				 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4149				if (tp->link_config.active_speed == SPEED_1000)
4150					mac_mode = MAC_MODE_PORT_MODE_GMII;
4151				else
4152					mac_mode = MAC_MODE_PORT_MODE_MII;
4153			} else
4154				mac_mode = MAC_MODE_PORT_MODE_MII;
4155
4156			mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4157			if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4158				u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4159					     SPEED_100 : SPEED_10;
4160				if (tg3_5700_link_polarity(tp, speed))
4161					mac_mode |= MAC_MODE_LINK_POLARITY;
4162				else
4163					mac_mode &= ~MAC_MODE_LINK_POLARITY;
4164			}
4165		} else {
4166			mac_mode = MAC_MODE_PORT_MODE_TBI;
4167		}
4168
4169		if (!tg3_flag(tp, 5750_PLUS))
4170			tw32(MAC_LED_CTRL, tp->led_ctrl);
4171
4172		mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4173		if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4174		    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4175			mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4176
4177		if (tg3_flag(tp, ENABLE_APE))
4178			mac_mode |= MAC_MODE_APE_TX_EN |
4179				    MAC_MODE_APE_RX_EN |
4180				    MAC_MODE_TDE_ENABLE;
4181
4182		tw32_f(MAC_MODE, mac_mode);
4183		udelay(100);
4184
4185		tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4186		udelay(10);
4187	}
4188
4189	if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4190	    (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4191	     tg3_asic_rev(tp) == ASIC_REV_5701)) {
4192		u32 base_val;
4193
4194		base_val = tp->pci_clock_ctrl;
4195		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4196			     CLOCK_CTRL_TXCLK_DISABLE);
4197
4198		tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4199			    CLOCK_CTRL_PWRDOWN_PLL133, 40);
4200	} else if (tg3_flag(tp, 5780_CLASS) ||
4201		   tg3_flag(tp, CPMU_PRESENT) ||
4202		   tg3_asic_rev(tp) == ASIC_REV_5906) {
4203		/* do nothing */
4204	} else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4205		u32 newbits1, newbits2;
4206
4207		if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4208		    tg3_asic_rev(tp) == ASIC_REV_5701) {
4209			newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4210				    CLOCK_CTRL_TXCLK_DISABLE |
4211				    CLOCK_CTRL_ALTCLK);
4212			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4213		} else if (tg3_flag(tp, 5705_PLUS)) {
4214			newbits1 = CLOCK_CTRL_625_CORE;
4215			newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4216		} else {
4217			newbits1 = CLOCK_CTRL_ALTCLK;
4218			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4219		}
4220
4221		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4222			    40);
4223
4224		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4225			    40);
4226
4227		if (!tg3_flag(tp, 5705_PLUS)) {
4228			u32 newbits3;
4229
4230			if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4231			    tg3_asic_rev(tp) == ASIC_REV_5701) {
4232				newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4233					    CLOCK_CTRL_TXCLK_DISABLE |
4234					    CLOCK_CTRL_44MHZ_CORE);
4235			} else {
4236				newbits3 = CLOCK_CTRL_44MHZ_CORE;
4237			}
4238
4239			tw32_wait_f(TG3PCI_CLOCK_CTRL,
4240				    tp->pci_clock_ctrl | newbits3, 40);
4241		}
4242	}
4243
4244	if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4245		tg3_power_down_phy(tp, do_low_power);
4246
4247	tg3_frob_aux_power(tp, true);
4248
4249	/* Workaround for unstable PLL clock */
4250	if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4251	    ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4252	     (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4253		u32 val = tr32(0x7d00);
4254
4255		val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4256		tw32(0x7d00, val);
4257		if (!tg3_flag(tp, ENABLE_ASF)) {
4258			int err;
4259
4260			err = tg3_nvram_lock(tp);
4261			tg3_halt_cpu(tp, RX_CPU_BASE);
4262			if (!err)
4263				tg3_nvram_unlock(tp);
4264		}
4265	}
4266
4267	tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4268
4269	tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4270
4271	return 0;
4272}
4273
4274static void tg3_power_down(struct tg3 *tp)
4275{
4276	pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4277	pci_set_power_state(tp->pdev, PCI_D3hot);
4278}
4279
4280static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
4281{
4282	switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4283	case MII_TG3_AUX_STAT_10HALF:
4284		*speed = SPEED_10;
4285		*duplex = DUPLEX_HALF;
4286		break;
4287
4288	case MII_TG3_AUX_STAT_10FULL:
4289		*speed = SPEED_10;
4290		*duplex = DUPLEX_FULL;
4291		break;
4292
4293	case MII_TG3_AUX_STAT_100HALF:
4294		*speed = SPEED_100;
4295		*duplex = DUPLEX_HALF;
4296		break;
4297
4298	case MII_TG3_AUX_STAT_100FULL:
4299		*speed = SPEED_100;
4300		*duplex = DUPLEX_FULL;
4301		break;
4302
4303	case MII_TG3_AUX_STAT_1000HALF:
4304		*speed = SPEED_1000;
4305		*duplex = DUPLEX_HALF;
4306		break;
4307
4308	case MII_TG3_AUX_STAT_1000FULL:
4309		*speed = SPEED_1000;
4310		*duplex = DUPLEX_FULL;
4311		break;
4312
4313	default:
4314		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4315			*speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4316				 SPEED_10;
4317			*duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4318				  DUPLEX_HALF;
4319			break;
4320		}
4321		*speed = SPEED_UNKNOWN;
4322		*duplex = DUPLEX_UNKNOWN;
4323		break;
4324	}
4325}
4326
4327static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4328{
4329	int err = 0;
4330	u32 val, new_adv;
4331
4332	new_adv = ADVERTISE_CSMA;
4333	new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4334	new_adv |= mii_advertise_flowctrl(flowctrl);
4335
4336	err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4337	if (err)
4338		goto done;
4339
4340	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4341		new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4342
4343		if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4344		    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4345			new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4346
4347		err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4348		if (err)
4349			goto done;
4350	}
4351
4352	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4353		goto done;
4354
4355	tw32(TG3_CPMU_EEE_MODE,
4356	     tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4357
4358	err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4359	if (!err) {
4360		u32 err2;
4361
4362		val = 0;
4363		/* Advertise 100-BaseTX EEE ability */
4364		if (advertise & ADVERTISED_100baseT_Full)
4365			val |= MDIO_AN_EEE_ADV_100TX;
4366		/* Advertise 1000-BaseT EEE ability */
4367		if (advertise & ADVERTISED_1000baseT_Full)
4368			val |= MDIO_AN_EEE_ADV_1000T;
4369
4370		if (!tp->eee.eee_enabled) {
4371			val = 0;
4372			tp->eee.advertised = 0;
4373		} else {
4374			tp->eee.advertised = advertise &
4375					     (ADVERTISED_100baseT_Full |
4376					      ADVERTISED_1000baseT_Full);
4377		}
4378
4379		err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4380		if (err)
4381			val = 0;
4382
4383		switch (tg3_asic_rev(tp)) {
4384		case ASIC_REV_5717:
4385		case ASIC_REV_57765:
4386		case ASIC_REV_57766:
4387		case ASIC_REV_5719:
4388			/* If we advertised any eee advertisements above... */
4389			if (val)
4390				val = MII_TG3_DSP_TAP26_ALNOKO |
4391				      MII_TG3_DSP_TAP26_RMRXSTO |
4392				      MII_TG3_DSP_TAP26_OPCSINPT;
4393			tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4394			fallthrough;
4395		case ASIC_REV_5720:
4396		case ASIC_REV_5762:
4397			if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4398				tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4399						 MII_TG3_DSP_CH34TP2_HIBW01);
4400		}
4401
4402		err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4403		if (!err)
4404			err = err2;
4405	}
4406
4407done:
4408	return err;
4409}
4410
4411static void tg3_phy_copper_begin(struct tg3 *tp)
4412{
4413	if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4414	    (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4415		u32 adv, fc;
4416
4417		if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4418		    !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4419			adv = ADVERTISED_10baseT_Half |
4420			      ADVERTISED_10baseT_Full;
4421			if (tg3_flag(tp, WOL_SPEED_100MB))
4422				adv |= ADVERTISED_100baseT_Half |
4423				       ADVERTISED_100baseT_Full;
4424			if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4425				if (!(tp->phy_flags &
4426				      TG3_PHYFLG_DISABLE_1G_HD_ADV))
4427					adv |= ADVERTISED_1000baseT_Half;
4428				adv |= ADVERTISED_1000baseT_Full;
4429			}
4430
4431			fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4432		} else {
4433			adv = tp->link_config.advertising;
4434			if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4435				adv &= ~(ADVERTISED_1000baseT_Half |
4436					 ADVERTISED_1000baseT_Full);
4437
4438			fc = tp->link_config.flowctrl;
4439		}
4440
4441		tg3_phy_autoneg_cfg(tp, adv, fc);
4442
4443		if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4444		    (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4445			/* Normally during power down we want to autonegotiate
4446			 * the lowest possible speed for WOL. However, to avoid
4447			 * link flap, we leave it untouched.
4448			 */
4449			return;
4450		}
4451
4452		tg3_writephy(tp, MII_BMCR,
4453			     BMCR_ANENABLE | BMCR_ANRESTART);
4454	} else {
4455		int i;
4456		u32 bmcr, orig_bmcr;
4457
4458		tp->link_config.active_speed = tp->link_config.speed;
4459		tp->link_config.active_duplex = tp->link_config.duplex;
4460
4461		if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4462			/* With autoneg disabled, 5715 only links up when the
4463			 * advertisement register has the configured speed
4464			 * enabled.
4465			 */
4466			tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4467		}
4468
4469		bmcr = 0;
4470		switch (tp->link_config.speed) {
4471		default:
4472		case SPEED_10:
4473			break;
4474
4475		case SPEED_100:
4476			bmcr |= BMCR_SPEED100;
4477			break;
4478
4479		case SPEED_1000:
4480			bmcr |= BMCR_SPEED1000;
4481			break;
4482		}
4483
4484		if (tp->link_config.duplex == DUPLEX_FULL)
4485			bmcr |= BMCR_FULLDPLX;
4486
4487		if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4488		    (bmcr != orig_bmcr)) {
4489			tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4490			for (i = 0; i < 1500; i++) {
4491				u32 tmp;
4492
4493				udelay(10);
4494				if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4495				    tg3_readphy(tp, MII_BMSR, &tmp))
4496					continue;
4497				if (!(tmp & BMSR_LSTATUS)) {
4498					udelay(40);
4499					break;
4500				}
4501			}
4502			tg3_writephy(tp, MII_BMCR, bmcr);
4503			udelay(40);
4504		}
4505	}
4506}
4507
4508static int tg3_phy_pull_config(struct tg3 *tp)
4509{
4510	int err;
4511	u32 val;
4512
4513	err = tg3_readphy(tp, MII_BMCR, &val);
4514	if (err)
4515		goto done;
4516
4517	if (!(val & BMCR_ANENABLE)) {
4518		tp->link_config.autoneg = AUTONEG_DISABLE;
4519		tp->link_config.advertising = 0;
4520		tg3_flag_clear(tp, PAUSE_AUTONEG);
4521
4522		err = -EIO;
4523
4524		switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4525		case 0:
4526			if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4527				goto done;
4528
4529			tp->link_config.speed = SPEED_10;
4530			break;
4531		case BMCR_SPEED100:
4532			if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4533				goto done;
4534
4535			tp->link_config.speed = SPEED_100;
4536			break;
4537		case BMCR_SPEED1000:
4538			if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4539				tp->link_config.speed = SPEED_1000;
4540				break;
4541			}
4542			fallthrough;
4543		default:
4544			goto done;
4545		}
4546
4547		if (val & BMCR_FULLDPLX)
4548			tp->link_config.duplex = DUPLEX_FULL;
4549		else
4550			tp->link_config.duplex = DUPLEX_HALF;
4551
4552		tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4553
4554		err = 0;
4555		goto done;
4556	}
4557
4558	tp->link_config.autoneg = AUTONEG_ENABLE;
4559	tp->link_config.advertising = ADVERTISED_Autoneg;
4560	tg3_flag_set(tp, PAUSE_AUTONEG);
4561
4562	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4563		u32 adv;
4564
4565		err = tg3_readphy(tp, MII_ADVERTISE, &val);
4566		if (err)
4567			goto done;
4568
4569		adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4570		tp->link_config.advertising |= adv | ADVERTISED_TP;
4571
4572		tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4573	} else {
4574		tp->link_config.advertising |= ADVERTISED_FIBRE;
4575	}
4576
4577	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4578		u32 adv;
4579
4580		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4581			err = tg3_readphy(tp, MII_CTRL1000, &val);
4582			if (err)
4583				goto done;
4584
4585			adv = mii_ctrl1000_to_ethtool_adv_t(val);
4586		} else {
4587			err = tg3_readphy(tp, MII_ADVERTISE, &val);
4588			if (err)
4589				goto done;
4590
4591			adv = tg3_decode_flowctrl_1000X(val);
4592			tp->link_config.flowctrl = adv;
4593
4594			val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4595			adv = mii_adv_to_ethtool_adv_x(val);
4596		}
4597
4598		tp->link_config.advertising |= adv;
4599	}
4600
4601done:
4602	return err;
4603}
4604
4605static int tg3_init_5401phy_dsp(struct tg3 *tp)
4606{
4607	int err;
4608
4609	/* Turn off tap power management. */
4610	/* Set Extended packet length bit */
4611	err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4612
4613	err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4614	err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4615	err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4616	err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4617	err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4618
4619	udelay(40);
4620
4621	return err;
4622}
4623
4624static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4625{
4626	struct ethtool_eee eee;
4627
4628	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4629		return true;
4630
4631	tg3_eee_pull_config(tp, &eee);
4632
4633	if (tp->eee.eee_enabled) {
4634		if (tp->eee.advertised != eee.advertised ||
4635		    tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4636		    tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4637			return false;
4638	} else {
4639		/* EEE is disabled but we're advertising */
4640		if (eee.advertised)
4641			return false;
4642	}
4643
4644	return true;
4645}
4646
4647static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4648{
4649	u32 advmsk, tgtadv, advertising;
4650
4651	advertising = tp->link_config.advertising;
4652	tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4653
4654	advmsk = ADVERTISE_ALL;
4655	if (tp->link_config.active_duplex == DUPLEX_FULL) {
4656		tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4657		advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4658	}
4659
4660	if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4661		return false;
4662
4663	if ((*lcladv & advmsk) != tgtadv)
4664		return false;
4665
4666	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4667		u32 tg3_ctrl;
4668
4669		tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4670
4671		if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4672			return false;
4673
4674		if (tgtadv &&
4675		    (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4676		     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4677			tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4678			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4679				     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4680		} else {
4681			tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4682		}
4683
4684		if (tg3_ctrl != tgtadv)
4685			return false;
4686	}
4687
4688	return true;
4689}
4690
4691static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4692{
4693	u32 lpeth = 0;
4694
4695	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4696		u32 val;
4697
4698		if (tg3_readphy(tp, MII_STAT1000, &val))
4699			return false;
4700
4701		lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4702	}
4703
4704	if (tg3_readphy(tp, MII_LPA, rmtadv))
4705		return false;
4706
4707	lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4708	tp->link_config.rmt_adv = lpeth;
4709
4710	return true;
4711}
4712
4713static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4714{
4715	if (curr_link_up != tp->link_up) {
4716		if (curr_link_up) {
4717			netif_carrier_on(tp->dev);
4718		} else {
4719			netif_carrier_off(tp->dev);
4720			if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4721				tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4722		}
4723
4724		tg3_link_report(tp);
4725		return true;
4726	}
4727
4728	return false;
4729}
4730
4731static void tg3_clear_mac_status(struct tg3 *tp)
4732{
4733	tw32(MAC_EVENT, 0);
4734
4735	tw32_f(MAC_STATUS,
4736	       MAC_STATUS_SYNC_CHANGED |
4737	       MAC_STATUS_CFG_CHANGED |
4738	       MAC_STATUS_MI_COMPLETION |
4739	       MAC_STATUS_LNKSTATE_CHANGED);
4740	udelay(40);
4741}
4742
4743static void tg3_setup_eee(struct tg3 *tp)
4744{
4745	u32 val;
4746
4747	val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4748	      TG3_CPMU_EEE_LNKIDL_UART_IDL;
4749	if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4750		val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4751
4752	tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4753
4754	tw32_f(TG3_CPMU_EEE_CTRL,
4755	       TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4756
4757	val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4758	      (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4759	      TG3_CPMU_EEEMD_LPI_IN_RX |
4760	      TG3_CPMU_EEEMD_EEE_ENABLE;
4761
4762	if (tg3_asic_rev(tp) != ASIC_REV_5717)
4763		val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4764
4765	if (tg3_flag(tp, ENABLE_APE))
4766		val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4767
4768	tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4769
4770	tw32_f(TG3_CPMU_EEE_DBTMR1,
4771	       TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4772	       (tp->eee.tx_lpi_timer & 0xffff));
4773
4774	tw32_f(TG3_CPMU_EEE_DBTMR2,
4775	       TG3_CPMU_DBTMR2_APE_TX_2047US |
4776	       TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4777}
4778
4779static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4780{
4781	bool current_link_up;
4782	u32 bmsr, val;
4783	u32 lcl_adv, rmt_adv;
4784	u32 current_speed;
4785	u8 current_duplex;
4786	int i, err;
4787
4788	tg3_clear_mac_status(tp);
4789
4790	if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4791		tw32_f(MAC_MI_MODE,
4792		     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4793		udelay(80);
4794	}
4795
4796	tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4797
4798	/* Some third-party PHYs need to be reset on link going
4799	 * down.
4800	 */
4801	if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4802	     tg3_asic_rev(tp) == ASIC_REV_5704 ||
4803	     tg3_asic_rev(tp) == ASIC_REV_5705) &&
4804	    tp->link_up) {
4805		tg3_readphy(tp, MII_BMSR, &bmsr);
4806		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4807		    !(bmsr & BMSR_LSTATUS))
4808			force_reset = true;
4809	}
4810	if (force_reset)
4811		tg3_phy_reset(tp);
4812
4813	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4814		tg3_readphy(tp, MII_BMSR, &bmsr);
4815		if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4816		    !tg3_flag(tp, INIT_COMPLETE))
4817			bmsr = 0;
4818
4819		if (!(bmsr & BMSR_LSTATUS)) {
4820			err = tg3_init_5401phy_dsp(tp);
4821			if (err)
4822				return err;
4823
4824			tg3_readphy(tp, MII_BMSR, &bmsr);
4825			for (i = 0; i < 1000; i++) {
4826				udelay(10);
4827				if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4828				    (bmsr & BMSR_LSTATUS)) {
4829					udelay(40);
4830					break;
4831				}
4832			}
4833
4834			if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4835			    TG3_PHY_REV_BCM5401_B0 &&
4836			    !(bmsr & BMSR_LSTATUS) &&
4837			    tp->link_config.active_speed == SPEED_1000) {
4838				err = tg3_phy_reset(tp);
4839				if (!err)
4840					err = tg3_init_5401phy_dsp(tp);
4841				if (err)
4842					return err;
4843			}
4844		}
4845	} else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4846		   tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4847		/* 5701 {A0,B0} CRC bug workaround */
4848		tg3_writephy(tp, 0x15, 0x0a75);
4849		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4850		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4851		tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4852	}
4853
4854	/* Clear pending interrupts... */
4855	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4856	tg3_readphy(tp, MII_TG3_ISTAT, &val);
4857
4858	if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4859		tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4860	else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4861		tg3_writephy(tp, MII_TG3_IMASK, ~0);
4862
4863	if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4864	    tg3_asic_rev(tp) == ASIC_REV_5701) {
4865		if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4866			tg3_writephy(tp, MII_TG3_EXT_CTRL,
4867				     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4868		else
4869			tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4870	}
4871
4872	current_link_up = false;
4873	current_speed = SPEED_UNKNOWN;
4874	current_duplex = DUPLEX_UNKNOWN;
4875	tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4876	tp->link_config.rmt_adv = 0;
4877
4878	if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4879		err = tg3_phy_auxctl_read(tp,
4880					  MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4881					  &val);
4882		if (!err && !(val & (1 << 10))) {
4883			tg3_phy_auxctl_write(tp,
4884					     MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4885					     val | (1 << 10));
4886			goto relink;
4887		}
4888	}
4889
4890	bmsr = 0;
4891	for (i = 0; i < 100; i++) {
4892		tg3_readphy(tp, MII_BMSR, &bmsr);
4893		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4894		    (bmsr & BMSR_LSTATUS))
4895			break;
4896		udelay(40);
4897	}
4898
4899	if (bmsr & BMSR_LSTATUS) {
4900		u32 aux_stat, bmcr;
4901
4902		tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4903		for (i = 0; i < 2000; i++) {
4904			udelay(10);
4905			if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4906			    aux_stat)
4907				break;
4908		}
4909
4910		tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4911					     &current_speed,
4912					     &current_duplex);
4913
4914		bmcr = 0;
4915		for (i = 0; i < 200; i++) {
4916			tg3_readphy(tp, MII_BMCR, &bmcr);
4917			if (tg3_readphy(tp, MII_BMCR, &bmcr))
4918				continue;
4919			if (bmcr && bmcr != 0x7fff)
4920				break;
4921			udelay(10);
4922		}
4923
4924		lcl_adv = 0;
4925		rmt_adv = 0;
4926
4927		tp->link_config.active_speed = current_speed;
4928		tp->link_config.active_duplex = current_duplex;
4929
4930		if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4931			bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4932
4933			if ((bmcr & BMCR_ANENABLE) &&
4934			    eee_config_ok &&
4935			    tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4936			    tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4937				current_link_up = true;
4938
4939			/* EEE settings changes take effect only after a phy
4940			 * reset.  If we have skipped a reset due to Link Flap
4941			 * Avoidance being enabled, do it now.
4942			 */
4943			if (!eee_config_ok &&
4944			    (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4945			    !force_reset) {
4946				tg3_setup_eee(tp);
4947				tg3_phy_reset(tp);
4948			}
4949		} else {
4950			if (!(bmcr & BMCR_ANENABLE) &&
4951			    tp->link_config.speed == current_speed &&
4952			    tp->link_config.duplex == current_duplex) {
4953				current_link_up = true;
4954			}
4955		}
4956
4957		if (current_link_up &&
4958		    tp->link_config.active_duplex == DUPLEX_FULL) {
4959			u32 reg, bit;
4960
4961			if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4962				reg = MII_TG3_FET_GEN_STAT;
4963				bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4964			} else {
4965				reg = MII_TG3_EXT_STAT;
4966				bit = MII_TG3_EXT_STAT_MDIX;
4967			}
4968
4969			if (!tg3_readphy(tp, reg, &val) && (val & bit))
4970				tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4971
4972			tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4973		}
4974	}
4975
4976relink:
4977	if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4978		tg3_phy_copper_begin(tp);
4979
4980		if (tg3_flag(tp, ROBOSWITCH)) {
4981			current_link_up = true;
4982			/* FIXME: when BCM5325 switch is used use 100 MBit/s */
4983			current_speed = SPEED_1000;
4984			current_duplex = DUPLEX_FULL;
4985			tp->link_config.active_speed = current_speed;
4986			tp->link_config.active_duplex = current_duplex;
4987		}
4988
4989		tg3_readphy(tp, MII_BMSR, &bmsr);
4990		if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4991		    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4992			current_link_up = true;
4993	}
4994
4995	tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4996	if (current_link_up) {
4997		if (tp->link_config.active_speed == SPEED_100 ||
4998		    tp->link_config.active_speed == SPEED_10)
4999			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5000		else
5001			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5002	} else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
5003		tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5004	else
5005		tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5006
5007	/* In order for the 5750 core in BCM4785 chip to work properly
5008	 * in RGMII mode, the Led Control Register must be set up.
5009	 */
5010	if (tg3_flag(tp, RGMII_MODE)) {
5011		u32 led_ctrl = tr32(MAC_LED_CTRL);
5012		led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5013
5014		if (tp->link_config.active_speed == SPEED_10)
5015			led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5016		else if (tp->link_config.active_speed == SPEED_100)
5017			led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5018				     LED_CTRL_100MBPS_ON);
5019		else if (tp->link_config.active_speed == SPEED_1000)
5020			led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5021				     LED_CTRL_1000MBPS_ON);
5022
5023		tw32(MAC_LED_CTRL, led_ctrl);
5024		udelay(40);
5025	}
5026
5027	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5028	if (tp->link_config.active_duplex == DUPLEX_HALF)
5029		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5030
5031	if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5032		if (current_link_up &&
5033		    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5034			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5035		else
5036			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5037	}
5038
5039	/* ??? Without this setting Netgear GA302T PHY does not
5040	 * ??? send/receive packets...
5041	 */
5042	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5043	    tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5044		tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5045		tw32_f(MAC_MI_MODE, tp->mi_mode);
5046		udelay(80);
5047	}
5048
5049	tw32_f(MAC_MODE, tp->mac_mode);
5050	udelay(40);
5051
5052	tg3_phy_eee_adjust(tp, current_link_up);
5053
5054	if (tg3_flag(tp, USE_LINKCHG_REG)) {
5055		/* Polled via timer. */
5056		tw32_f(MAC_EVENT, 0);
5057	} else {
5058		tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5059	}
5060	udelay(40);
5061
5062	if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5063	    current_link_up &&
5064	    tp->link_config.active_speed == SPEED_1000 &&
5065	    (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5066		udelay(120);
5067		tw32_f(MAC_STATUS,
5068		     (MAC_STATUS_SYNC_CHANGED |
5069		      MAC_STATUS_CFG_CHANGED));
5070		udelay(40);
5071		tg3_write_mem(tp,
5072			      NIC_SRAM_FIRMWARE_MBOX,
5073			      NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5074	}
5075
5076	/* Prevent send BD corruption. */
5077	if (tg3_flag(tp, CLKREQ_BUG)) {
5078		if (tp->link_config.active_speed == SPEED_100 ||
5079		    tp->link_config.active_speed == SPEED_10)
5080			pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5081						   PCI_EXP_LNKCTL_CLKREQ_EN);
5082		else
5083			pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5084						 PCI_EXP_LNKCTL_CLKREQ_EN);
5085	}
5086
5087	tg3_test_and_report_link_chg(tp, current_link_up);
5088
5089	return 0;
5090}
5091
5092struct tg3_fiber_aneginfo {
5093	int state;
5094#define ANEG_STATE_UNKNOWN		0
5095#define ANEG_STATE_AN_ENABLE		1
5096#define ANEG_STATE_RESTART_INIT		2
5097#define ANEG_STATE_RESTART		3
5098#define ANEG_STATE_DISABLE_LINK_OK	4
5099#define ANEG_STATE_ABILITY_DETECT_INIT	5
5100#define ANEG_STATE_ABILITY_DETECT	6
5101#define ANEG_STATE_ACK_DETECT_INIT	7
5102#define ANEG_STATE_ACK_DETECT		8
5103#define ANEG_STATE_COMPLETE_ACK_INIT	9
5104#define ANEG_STATE_COMPLETE_ACK		10
5105#define ANEG_STATE_IDLE_DETECT_INIT	11
5106#define ANEG_STATE_IDLE_DETECT		12
5107#define ANEG_STATE_LINK_OK		13
5108#define ANEG_STATE_NEXT_PAGE_WAIT_INIT	14
5109#define ANEG_STATE_NEXT_PAGE_WAIT	15
5110
5111	u32 flags;
5112#define MR_AN_ENABLE		0x00000001
5113#define MR_RESTART_AN		0x00000002
5114#define MR_AN_COMPLETE		0x00000004
5115#define MR_PAGE_RX		0x00000008
5116#define MR_NP_LOADED		0x00000010
5117#define MR_TOGGLE_TX		0x00000020
5118#define MR_LP_ADV_FULL_DUPLEX	0x00000040
5119#define MR_LP_ADV_HALF_DUPLEX	0x00000080
5120#define MR_LP_ADV_SYM_PAUSE	0x00000100
5121#define MR_LP_ADV_ASYM_PAUSE	0x00000200
5122#define MR_LP_ADV_REMOTE_FAULT1	0x00000400
5123#define MR_LP_ADV_REMOTE_FAULT2	0x00000800
5124#define MR_LP_ADV_NEXT_PAGE	0x00001000
5125#define MR_TOGGLE_RX		0x00002000
5126#define MR_NP_RX		0x00004000
5127
5128#define MR_LINK_OK		0x80000000
5129
5130	unsigned long link_time, cur_time;
5131
5132	u32 ability_match_cfg;
5133	int ability_match_count;
5134
5135	char ability_match, idle_match, ack_match;
5136
5137	u32 txconfig, rxconfig;
5138#define ANEG_CFG_NP		0x00000080
5139#define ANEG_CFG_ACK		0x00000040
5140#define ANEG_CFG_RF2		0x00000020
5141#define ANEG_CFG_RF1		0x00000010
5142#define ANEG_CFG_PS2		0x00000001
5143#define ANEG_CFG_PS1		0x00008000
5144#define ANEG_CFG_HD		0x00004000
5145#define ANEG_CFG_FD		0x00002000
5146#define ANEG_CFG_INVAL		0x00001f06
5147
5148};
5149#define ANEG_OK		0
5150#define ANEG_DONE	1
5151#define ANEG_TIMER_ENAB	2
5152#define ANEG_FAILED	-1
5153
5154#define ANEG_STATE_SETTLE_TIME	10000
5155
5156static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5157				   struct tg3_fiber_aneginfo *ap)
5158{
5159	u16 flowctrl;
5160	unsigned long delta;
5161	u32 rx_cfg_reg;
5162	int ret;
5163
5164	if (ap->state == ANEG_STATE_UNKNOWN) {
5165		ap->rxconfig = 0;
5166		ap->link_time = 0;
5167		ap->cur_time = 0;
5168		ap->ability_match_cfg = 0;
5169		ap->ability_match_count = 0;
5170		ap->ability_match = 0;
5171		ap->idle_match = 0;
5172		ap->ack_match = 0;
5173	}
5174	ap->cur_time++;
5175
5176	if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5177		rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5178
5179		if (rx_cfg_reg != ap->ability_match_cfg) {
5180			ap->ability_match_cfg = rx_cfg_reg;
5181			ap->ability_match = 0;
5182			ap->ability_match_count = 0;
5183		} else {
5184			if (++ap->ability_match_count > 1) {
5185				ap->ability_match = 1;
5186				ap->ability_match_cfg = rx_cfg_reg;
5187			}
5188		}
5189		if (rx_cfg_reg & ANEG_CFG_ACK)
5190			ap->ack_match = 1;
5191		else
5192			ap->ack_match = 0;
5193
5194		ap->idle_match = 0;
5195	} else {
5196		ap->idle_match = 1;
5197		ap->ability_match_cfg = 0;
5198		ap->ability_match_count = 0;
5199		ap->ability_match = 0;
5200		ap->ack_match = 0;
5201
5202		rx_cfg_reg = 0;
5203	}
5204
5205	ap->rxconfig = rx_cfg_reg;
5206	ret = ANEG_OK;
5207
5208	switch (ap->state) {
5209	case ANEG_STATE_UNKNOWN:
5210		if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5211			ap->state = ANEG_STATE_AN_ENABLE;
5212
5213		fallthrough;
5214	case ANEG_STATE_AN_ENABLE:
5215		ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5216		if (ap->flags & MR_AN_ENABLE) {
5217			ap->link_time = 0;
5218			ap->cur_time = 0;
5219			ap->ability_match_cfg = 0;
5220			ap->ability_match_count = 0;
5221			ap->ability_match = 0;
5222			ap->idle_match = 0;
5223			ap->ack_match = 0;
5224
5225			ap->state = ANEG_STATE_RESTART_INIT;
5226		} else {
5227			ap->state = ANEG_STATE_DISABLE_LINK_OK;
5228		}
5229		break;
5230
5231	case ANEG_STATE_RESTART_INIT:
5232		ap->link_time = ap->cur_time;
5233		ap->flags &= ~(MR_NP_LOADED);
5234		ap->txconfig = 0;
5235		tw32(MAC_TX_AUTO_NEG, 0);
5236		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5237		tw32_f(MAC_MODE, tp->mac_mode);
5238		udelay(40);
5239
5240		ret = ANEG_TIMER_ENAB;
5241		ap->state = ANEG_STATE_RESTART;
5242
5243		fallthrough;
5244	case ANEG_STATE_RESTART:
5245		delta = ap->cur_time - ap->link_time;
5246		if (delta > ANEG_STATE_SETTLE_TIME)
5247			ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5248		else
5249			ret = ANEG_TIMER_ENAB;
5250		break;
5251
5252	case ANEG_STATE_DISABLE_LINK_OK:
5253		ret = ANEG_DONE;
5254		break;
5255
5256	case ANEG_STATE_ABILITY_DETECT_INIT:
5257		ap->flags &= ~(MR_TOGGLE_TX);
5258		ap->txconfig = ANEG_CFG_FD;
5259		flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5260		if (flowctrl & ADVERTISE_1000XPAUSE)
5261			ap->txconfig |= ANEG_CFG_PS1;
5262		if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5263			ap->txconfig |= ANEG_CFG_PS2;
5264		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5265		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5266		tw32_f(MAC_MODE, tp->mac_mode);
5267		udelay(40);
5268
5269		ap->state = ANEG_STATE_ABILITY_DETECT;
5270		break;
5271
5272	case ANEG_STATE_ABILITY_DETECT:
5273		if (ap->ability_match != 0 && ap->rxconfig != 0)
5274			ap->state = ANEG_STATE_ACK_DETECT_INIT;
5275		break;
5276
5277	case ANEG_STATE_ACK_DETECT_INIT:
5278		ap->txconfig |= ANEG_CFG_ACK;
5279		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5280		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5281		tw32_f(MAC_MODE, tp->mac_mode);
5282		udelay(40);
5283
5284		ap->state = ANEG_STATE_ACK_DETECT;
5285
5286		fallthrough;
5287	case ANEG_STATE_ACK_DETECT:
5288		if (ap->ack_match != 0) {
5289			if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5290			    (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5291				ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5292			} else {
5293				ap->state = ANEG_STATE_AN_ENABLE;
5294			}
5295		} else if (ap->ability_match != 0 &&
5296			   ap->rxconfig == 0) {
5297			ap->state = ANEG_STATE_AN_ENABLE;
5298		}
5299		break;
5300
5301	case ANEG_STATE_COMPLETE_ACK_INIT:
5302		if (ap->rxconfig & ANEG_CFG_INVAL) {
5303			ret = ANEG_FAILED;
5304			break;
5305		}
5306		ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5307			       MR_LP_ADV_HALF_DUPLEX |
5308			       MR_LP_ADV_SYM_PAUSE |
5309			       MR_LP_ADV_ASYM_PAUSE |
5310			       MR_LP_ADV_REMOTE_FAULT1 |
5311			       MR_LP_ADV_REMOTE_FAULT2 |
5312			       MR_LP_ADV_NEXT_PAGE |
5313			       MR_TOGGLE_RX |
5314			       MR_NP_RX);
5315		if (ap->rxconfig & ANEG_CFG_FD)
5316			ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5317		if (ap->rxconfig & ANEG_CFG_HD)
5318			ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5319		if (ap->rxconfig & ANEG_CFG_PS1)
5320			ap->flags |= MR_LP_ADV_SYM_PAUSE;
5321		if (ap->rxconfig & ANEG_CFG_PS2)
5322			ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5323		if (ap->rxconfig & ANEG_CFG_RF1)
5324			ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5325		if (ap->rxconfig & ANEG_CFG_RF2)
5326			ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5327		if (ap->rxconfig & ANEG_CFG_NP)
5328			ap->flags |= MR_LP_ADV_NEXT_PAGE;
5329
5330		ap->link_time = ap->cur_time;
5331
5332		ap->flags ^= (MR_TOGGLE_TX);
5333		if (ap->rxconfig & 0x0008)
5334			ap->flags |= MR_TOGGLE_RX;
5335		if (ap->rxconfig & ANEG_CFG_NP)
5336			ap->flags |= MR_NP_RX;
5337		ap->flags |= MR_PAGE_RX;
5338
5339		ap->state = ANEG_STATE_COMPLETE_ACK;
5340		ret = ANEG_TIMER_ENAB;
5341		break;
5342
5343	case ANEG_STATE_COMPLETE_ACK:
5344		if (ap->ability_match != 0 &&
5345		    ap->rxconfig == 0) {
5346			ap->state = ANEG_STATE_AN_ENABLE;
5347			break;
5348		}
5349		delta = ap->cur_time - ap->link_time;
5350		if (delta > ANEG_STATE_SETTLE_TIME) {
5351			if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5352				ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5353			} else {
5354				if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5355				    !(ap->flags & MR_NP_RX)) {
5356					ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5357				} else {
5358					ret = ANEG_FAILED;
5359				}
5360			}
5361		}
5362		break;
5363
5364	case ANEG_STATE_IDLE_DETECT_INIT:
5365		ap->link_time = ap->cur_time;
5366		tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5367		tw32_f(MAC_MODE, tp->mac_mode);
5368		udelay(40);
5369
5370		ap->state = ANEG_STATE_IDLE_DETECT;
5371		ret = ANEG_TIMER_ENAB;
5372		break;
5373
5374	case ANEG_STATE_IDLE_DETECT:
5375		if (ap->ability_match != 0 &&
5376		    ap->rxconfig == 0) {
5377			ap->state = ANEG_STATE_AN_ENABLE;
5378			break;
5379		}
5380		delta = ap->cur_time - ap->link_time;
5381		if (delta > ANEG_STATE_SETTLE_TIME) {
5382			/* XXX another gem from the Broadcom driver :( */
5383			ap->state = ANEG_STATE_LINK_OK;
5384		}
5385		break;
5386
5387	case ANEG_STATE_LINK_OK:
5388		ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5389		ret = ANEG_DONE;
5390		break;
5391
5392	case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5393		/* ??? unimplemented */
5394		break;
5395
5396	case ANEG_STATE_NEXT_PAGE_WAIT:
5397		/* ??? unimplemented */
5398		break;
5399
5400	default:
5401		ret = ANEG_FAILED;
5402		break;
5403	}
5404
5405	return ret;
5406}
5407
5408static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5409{
5410	int res = 0;
5411	struct tg3_fiber_aneginfo aninfo;
5412	int status = ANEG_FAILED;
5413	unsigned int tick;
5414	u32 tmp;
5415
5416	tw32_f(MAC_TX_AUTO_NEG, 0);
5417
5418	tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5419	tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5420	udelay(40);
5421
5422	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5423	udelay(40);
5424
5425	memset(&aninfo, 0, sizeof(aninfo));
5426	aninfo.flags |= MR_AN_ENABLE;
5427	aninfo.state = ANEG_STATE_UNKNOWN;
5428	aninfo.cur_time = 0;
5429	tick = 0;
5430	while (++tick < 195000) {
5431		status = tg3_fiber_aneg_smachine(tp, &aninfo);
5432		if (status == ANEG_DONE || status == ANEG_FAILED)
5433			break;
5434
5435		udelay(1);
5436	}
5437
5438	tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5439	tw32_f(MAC_MODE, tp->mac_mode);
5440	udelay(40);
5441
5442	*txflags = aninfo.txconfig;
5443	*rxflags = aninfo.flags;
5444
5445	if (status == ANEG_DONE &&
5446	    (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5447			     MR_LP_ADV_FULL_DUPLEX)))
5448		res = 1;
5449
5450	return res;
5451}
5452
5453static void tg3_init_bcm8002(struct tg3 *tp)
5454{
5455	u32 mac_status = tr32(MAC_STATUS);
5456	int i;
5457
5458	/* Reset when initting first time or we have a link. */
5459	if (tg3_flag(tp, INIT_COMPLETE) &&
5460	    !(mac_status & MAC_STATUS_PCS_SYNCED))
5461		return;
5462
5463	/* Set PLL lock range. */
5464	tg3_writephy(tp, 0x16, 0x8007);
5465
5466	/* SW reset */
5467	tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5468
5469	/* Wait for reset to complete. */
5470	/* XXX schedule_timeout() ... */
5471	for (i = 0; i < 500; i++)
5472		udelay(10);
5473
5474	/* Config mode; select PMA/Ch 1 regs. */
5475	tg3_writephy(tp, 0x10, 0x8411);
5476
5477	/* Enable auto-lock and comdet, select txclk for tx. */
5478	tg3_writephy(tp, 0x11, 0x0a10);
5479
5480	tg3_writephy(tp, 0x18, 0x00a0);
5481	tg3_writephy(tp, 0x16, 0x41ff);
5482
5483	/* Assert and deassert POR. */
5484	tg3_writephy(tp, 0x13, 0x0400);
5485	udelay(40);
5486	tg3_writephy(tp, 0x13, 0x0000);
5487
5488	tg3_writephy(tp, 0x11, 0x0a50);
5489	udelay(40);
5490	tg3_writephy(tp, 0x11, 0x0a10);
5491
5492	/* Wait for signal to stabilize */
5493	/* XXX schedule_timeout() ... */
5494	for (i = 0; i < 15000; i++)
5495		udelay(10);
5496
5497	/* Deselect the channel register so we can read the PHYID
5498	 * later.
5499	 */
5500	tg3_writephy(tp, 0x10, 0x8011);
5501}
5502
5503static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5504{
5505	u16 flowctrl;
5506	bool current_link_up;
5507	u32 sg_dig_ctrl, sg_dig_status;
5508	u32 serdes_cfg, expected_sg_dig_ctrl;
5509	int workaround, port_a;
5510
5511	serdes_cfg = 0;
5512	expected_sg_dig_ctrl = 0;
5513	workaround = 0;
5514	port_a = 1;
5515	current_link_up = false;
5516
5517	if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5518	    tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5519		workaround = 1;
5520		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5521			port_a = 0;
5522
5523		/* preserve bits 0-11,13,14 for signal pre-emphasis */
5524		/* preserve bits 20-23 for voltage regulator */
5525		serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5526	}
5527
5528	sg_dig_ctrl = tr32(SG_DIG_CTRL);
5529
5530	if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5531		if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5532			if (workaround) {
5533				u32 val = serdes_cfg;
5534
5535				if (port_a)
5536					val |= 0xc010000;
5537				else
5538					val |= 0x4010000;
5539				tw32_f(MAC_SERDES_CFG, val);
5540			}
5541
5542			tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5543		}
5544		if (mac_status & MAC_STATUS_PCS_SYNCED) {
5545			tg3_setup_flow_control(tp, 0, 0);
5546			current_link_up = true;
5547		}
5548		goto out;
5549	}
5550
5551	/* Want auto-negotiation.  */
5552	expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5553
5554	flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5555	if (flowctrl & ADVERTISE_1000XPAUSE)
5556		expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5557	if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5558		expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5559
5560	if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5561		if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5562		    tp->serdes_counter &&
5563		    ((mac_status & (MAC_STATUS_PCS_SYNCED |
5564				    MAC_STATUS_RCVD_CFG)) ==
5565		     MAC_STATUS_PCS_SYNCED)) {
5566			tp->serdes_counter--;
5567			current_link_up = true;
5568			goto out;
5569		}
5570restart_autoneg:
5571		if (workaround)
5572			tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5573		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5574		udelay(5);
5575		tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5576
5577		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5578		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5579	} else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5580				 MAC_STATUS_SIGNAL_DET)) {
5581		sg_dig_status = tr32(SG_DIG_STATUS);
5582		mac_status = tr32(MAC_STATUS);
5583
5584		if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5585		    (mac_status & MAC_STATUS_PCS_SYNCED)) {
5586			u32 local_adv = 0, remote_adv = 0;
5587
5588			if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5589				local_adv |= ADVERTISE_1000XPAUSE;
5590			if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5591				local_adv |= ADVERTISE_1000XPSE_ASYM;
5592
5593			if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5594				remote_adv |= LPA_1000XPAUSE;
5595			if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5596				remote_adv |= LPA_1000XPAUSE_ASYM;
5597
5598			tp->link_config.rmt_adv =
5599					   mii_adv_to_ethtool_adv_x(remote_adv);
5600
5601			tg3_setup_flow_control(tp, local_adv, remote_adv);
5602			current_link_up = true;
5603			tp->serdes_counter = 0;
5604			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5605		} else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5606			if (tp->serdes_counter)
5607				tp->serdes_counter--;
5608			else {
5609				if (workaround) {
5610					u32 val = serdes_cfg;
5611
5612					if (port_a)
5613						val |= 0xc010000;
5614					else
5615						val |= 0x4010000;
5616
5617					tw32_f(MAC_SERDES_CFG, val);
5618				}
5619
5620				tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5621				udelay(40);
5622
5623				/* Link parallel detection - link is up */
5624				/* only if we have PCS_SYNC and not */
5625				/* receiving config code words */
5626				mac_status = tr32(MAC_STATUS);
5627				if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5628				    !(mac_status & MAC_STATUS_RCVD_CFG)) {
5629					tg3_setup_flow_control(tp, 0, 0);
5630					current_link_up = true;
5631					tp->phy_flags |=
5632						TG3_PHYFLG_PARALLEL_DETECT;
5633					tp->serdes_counter =
5634						SERDES_PARALLEL_DET_TIMEOUT;
5635				} else
5636					goto restart_autoneg;
5637			}
5638		}
5639	} else {
5640		tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5641		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5642	}
5643
5644out:
5645	return current_link_up;
5646}
5647
5648static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5649{
5650	bool current_link_up = false;
5651
5652	if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5653		goto out;
5654
5655	if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5656		u32 txflags, rxflags;
5657		int i;
5658
5659		if (fiber_autoneg(tp, &txflags, &rxflags)) {
5660			u32 local_adv = 0, remote_adv = 0;
5661
5662			if (txflags & ANEG_CFG_PS1)
5663				local_adv |= ADVERTISE_1000XPAUSE;
5664			if (txflags & ANEG_CFG_PS2)
5665				local_adv |= ADVERTISE_1000XPSE_ASYM;
5666
5667			if (rxflags & MR_LP_ADV_SYM_PAUSE)
5668				remote_adv |= LPA_1000XPAUSE;
5669			if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5670				remote_adv |= LPA_1000XPAUSE_ASYM;
5671
5672			tp->link_config.rmt_adv =
5673					   mii_adv_to_ethtool_adv_x(remote_adv);
5674
5675			tg3_setup_flow_control(tp, local_adv, remote_adv);
5676
5677			current_link_up = true;
5678		}
5679		for (i = 0; i < 30; i++) {
5680			udelay(20);
5681			tw32_f(MAC_STATUS,
5682			       (MAC_STATUS_SYNC_CHANGED |
5683				MAC_STATUS_CFG_CHANGED));
5684			udelay(40);
5685			if ((tr32(MAC_STATUS) &
5686			     (MAC_STATUS_SYNC_CHANGED |
5687			      MAC_STATUS_CFG_CHANGED)) == 0)
5688				break;
5689		}
5690
5691		mac_status = tr32(MAC_STATUS);
5692		if (!current_link_up &&
5693		    (mac_status & MAC_STATUS_PCS_SYNCED) &&
5694		    !(mac_status & MAC_STATUS_RCVD_CFG))
5695			current_link_up = true;
5696	} else {
5697		tg3_setup_flow_control(tp, 0, 0);
5698
5699		/* Forcing 1000FD link up. */
5700		current_link_up = true;
5701
5702		tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5703		udelay(40);
5704
5705		tw32_f(MAC_MODE, tp->mac_mode);
5706		udelay(40);
5707	}
5708
5709out:
5710	return current_link_up;
5711}
5712
5713static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5714{
5715	u32 orig_pause_cfg;
5716	u32 orig_active_speed;
5717	u8 orig_active_duplex;
5718	u32 mac_status;
5719	bool current_link_up;
5720	int i;
5721
5722	orig_pause_cfg = tp->link_config.active_flowctrl;
5723	orig_active_speed = tp->link_config.active_speed;
5724	orig_active_duplex = tp->link_config.active_duplex;
5725
5726	if (!tg3_flag(tp, HW_AUTONEG) &&
5727	    tp->link_up &&
5728	    tg3_flag(tp, INIT_COMPLETE)) {
5729		mac_status = tr32(MAC_STATUS);
5730		mac_status &= (MAC_STATUS_PCS_SYNCED |
5731			       MAC_STATUS_SIGNAL_DET |
5732			       MAC_STATUS_CFG_CHANGED |
5733			       MAC_STATUS_RCVD_CFG);
5734		if (mac_status == (MAC_STATUS_PCS_SYNCED |
5735				   MAC_STATUS_SIGNAL_DET)) {
5736			tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5737					    MAC_STATUS_CFG_CHANGED));
5738			return 0;
5739		}
5740	}
5741
5742	tw32_f(MAC_TX_AUTO_NEG, 0);
5743
5744	tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5745	tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5746	tw32_f(MAC_MODE, tp->mac_mode);
5747	udelay(40);
5748
5749	if (tp->phy_id == TG3_PHY_ID_BCM8002)
5750		tg3_init_bcm8002(tp);
5751
5752	/* Enable link change event even when serdes polling.  */
5753	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5754	udelay(40);
5755
5756	current_link_up = false;
5757	tp->link_config.rmt_adv = 0;
5758	mac_status = tr32(MAC_STATUS);
5759
5760	if (tg3_flag(tp, HW_AUTONEG))
5761		current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5762	else
5763		current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5764
5765	tp->napi[0].hw_status->status =
5766		(SD_STATUS_UPDATED |
5767		 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5768
5769	for (i = 0; i < 100; i++) {
5770		tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5771				    MAC_STATUS_CFG_CHANGED));
5772		udelay(5);
5773		if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5774					 MAC_STATUS_CFG_CHANGED |
5775					 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5776			break;
5777	}
5778
5779	mac_status = tr32(MAC_STATUS);
5780	if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5781		current_link_up = false;
5782		if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5783		    tp->serdes_counter == 0) {
5784			tw32_f(MAC_MODE, (tp->mac_mode |
5785					  MAC_MODE_SEND_CONFIGS));
5786			udelay(1);
5787			tw32_f(MAC_MODE, tp->mac_mode);
5788		}
5789	}
5790
5791	if (current_link_up) {
5792		tp->link_config.active_speed = SPEED_1000;
5793		tp->link_config.active_duplex = DUPLEX_FULL;
5794		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5795				    LED_CTRL_LNKLED_OVERRIDE |
5796				    LED_CTRL_1000MBPS_ON));
5797	} else {
5798		tp->link_config.active_speed = SPEED_UNKNOWN;
5799		tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5800		tw32(MAC_LED_CTRL, (tp->led_ctrl |
5801				    LED_CTRL_LNKLED_OVERRIDE |
5802				    LED_CTRL_TRAFFIC_OVERRIDE));
5803	}
5804
5805	if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5806		u32 now_pause_cfg = tp->link_config.active_flowctrl;
5807		if (orig_pause_cfg != now_pause_cfg ||
5808		    orig_active_speed != tp->link_config.active_speed ||
5809		    orig_active_duplex != tp->link_config.active_duplex)
5810			tg3_link_report(tp);
5811	}
5812
5813	return 0;
5814}
5815
5816static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5817{
5818	int err = 0;
5819	u32 bmsr, bmcr;
5820	u32 current_speed = SPEED_UNKNOWN;
5821	u8 current_duplex = DUPLEX_UNKNOWN;
5822	bool current_link_up = false;
5823	u32 local_adv, remote_adv, sgsr;
5824
5825	if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5826	     tg3_asic_rev(tp) == ASIC_REV_5720) &&
5827	     !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5828	     (sgsr & SERDES_TG3_SGMII_MODE)) {
5829
5830		if (force_reset)
5831			tg3_phy_reset(tp);
5832
5833		tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5834
5835		if (!(sgsr & SERDES_TG3_LINK_UP)) {
5836			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5837		} else {
5838			current_link_up = true;
5839			if (sgsr & SERDES_TG3_SPEED_1000) {
5840				current_speed = SPEED_1000;
5841				tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5842			} else if (sgsr & SERDES_TG3_SPEED_100) {
5843				current_speed = SPEED_100;
5844				tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5845			} else {
5846				current_speed = SPEED_10;
5847				tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5848			}
5849
5850			if (sgsr & SERDES_TG3_FULL_DUPLEX)
5851				current_duplex = DUPLEX_FULL;
5852			else
5853				current_duplex = DUPLEX_HALF;
5854		}
5855
5856		tw32_f(MAC_MODE, tp->mac_mode);
5857		udelay(40);
5858
5859		tg3_clear_mac_status(tp);
5860
5861		goto fiber_setup_done;
5862	}
5863
5864	tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5865	tw32_f(MAC_MODE, tp->mac_mode);
5866	udelay(40);
5867
5868	tg3_clear_mac_status(tp);
5869
5870	if (force_reset)
5871		tg3_phy_reset(tp);
5872
5873	tp->link_config.rmt_adv = 0;
5874
5875	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5876	err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5877	if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5878		if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5879			bmsr |= BMSR_LSTATUS;
5880		else
5881			bmsr &= ~BMSR_LSTATUS;
5882	}
5883
5884	err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5885
5886	if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5887	    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5888		/* do nothing, just check for link up at the end */
5889	} else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5890		u32 adv, newadv;
5891
5892		err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5893		newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5894				 ADVERTISE_1000XPAUSE |
5895				 ADVERTISE_1000XPSE_ASYM |
5896				 ADVERTISE_SLCT);
5897
5898		newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5899		newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5900
5901		if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5902			tg3_writephy(tp, MII_ADVERTISE, newadv);
5903			bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5904			tg3_writephy(tp, MII_BMCR, bmcr);
5905
5906			tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5907			tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5908			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5909
5910			return err;
5911		}
5912	} else {
5913		u32 new_bmcr;
5914
5915		bmcr &= ~BMCR_SPEED1000;
5916		new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5917
5918		if (tp->link_config.duplex == DUPLEX_FULL)
5919			new_bmcr |= BMCR_FULLDPLX;
5920
5921		if (new_bmcr != bmcr) {
5922			/* BMCR_SPEED1000 is a reserved bit that needs
5923			 * to be set on write.
5924			 */
5925			new_bmcr |= BMCR_SPEED1000;
5926
5927			/* Force a linkdown */
5928			if (tp->link_up) {
5929				u32 adv;
5930
5931				err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5932				adv &= ~(ADVERTISE_1000XFULL |
5933					 ADVERTISE_1000XHALF |
5934					 ADVERTISE_SLCT);
5935				tg3_writephy(tp, MII_ADVERTISE, adv);
5936				tg3_writephy(tp, MII_BMCR, bmcr |
5937							   BMCR_ANRESTART |
5938							   BMCR_ANENABLE);
5939				udelay(10);
5940				tg3_carrier_off(tp);
5941			}
5942			tg3_writephy(tp, MII_BMCR, new_bmcr);
5943			bmcr = new_bmcr;
5944			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5945			err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5946			if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5947				if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5948					bmsr |= BMSR_LSTATUS;
5949				else
5950					bmsr &= ~BMSR_LSTATUS;
5951			}
5952			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5953		}
5954	}
5955
5956	if (bmsr & BMSR_LSTATUS) {
5957		current_speed = SPEED_1000;
5958		current_link_up = true;
5959		if (bmcr & BMCR_FULLDPLX)
5960			current_duplex = DUPLEX_FULL;
5961		else
5962			current_duplex = DUPLEX_HALF;
5963
5964		local_adv = 0;
5965		remote_adv = 0;
5966
5967		if (bmcr & BMCR_ANENABLE) {
5968			u32 common;
5969
5970			err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5971			err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5972			common = local_adv & remote_adv;
5973			if (common & (ADVERTISE_1000XHALF |
5974				      ADVERTISE_1000XFULL)) {
5975				if (common & ADVERTISE_1000XFULL)
5976					current_duplex = DUPLEX_FULL;
5977				else
5978					current_duplex = DUPLEX_HALF;
5979
5980				tp->link_config.rmt_adv =
5981					   mii_adv_to_ethtool_adv_x(remote_adv);
5982			} else if (!tg3_flag(tp, 5780_CLASS)) {
5983				/* Link is up via parallel detect */
5984			} else {
5985				current_link_up = false;
5986			}
5987		}
5988	}
5989
5990fiber_setup_done:
5991	if (current_link_up && current_duplex == DUPLEX_FULL)
5992		tg3_setup_flow_control(tp, local_adv, remote_adv);
5993
5994	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5995	if (tp->link_config.active_duplex == DUPLEX_HALF)
5996		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5997
5998	tw32_f(MAC_MODE, tp->mac_mode);
5999	udelay(40);
6000
6001	tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
6002
6003	tp->link_config.active_speed = current_speed;
6004	tp->link_config.active_duplex = current_duplex;
6005
6006	tg3_test_and_report_link_chg(tp, current_link_up);
6007	return err;
6008}
6009
6010static void tg3_serdes_parallel_detect(struct tg3 *tp)
6011{
6012	if (tp->serdes_counter) {
6013		/* Give autoneg time to complete. */
6014		tp->serdes_counter--;
6015		return;
6016	}
6017
6018	if (!tp->link_up &&
6019	    (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6020		u32 bmcr;
6021
6022		tg3_readphy(tp, MII_BMCR, &bmcr);
6023		if (bmcr & BMCR_ANENABLE) {
6024			u32 phy1, phy2;
6025
6026			/* Select shadow register 0x1f */
6027			tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6028			tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6029
6030			/* Select expansion interrupt status register */
6031			tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6032					 MII_TG3_DSP_EXP1_INT_STAT);
6033			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6034			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6035
6036			if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6037				/* We have signal detect and not receiving
6038				 * config code words, link is up by parallel
6039				 * detection.
6040				 */
6041
6042				bmcr &= ~BMCR_ANENABLE;
6043				bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6044				tg3_writephy(tp, MII_BMCR, bmcr);
6045				tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6046			}
6047		}
6048	} else if (tp->link_up &&
6049		   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6050		   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6051		u32 phy2;
6052
6053		/* Select expansion interrupt status register */
6054		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6055				 MII_TG3_DSP_EXP1_INT_STAT);
6056		tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6057		if (phy2 & 0x20) {
6058			u32 bmcr;
6059
6060			/* Config code words received, turn on autoneg. */
6061			tg3_readphy(tp, MII_BMCR, &bmcr);
6062			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6063
6064			tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6065
6066		}
6067	}
6068}
6069
6070static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6071{
6072	u32 val;
6073	int err;
6074
6075	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6076		err = tg3_setup_fiber_phy(tp, force_reset);
6077	else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6078		err = tg3_setup_fiber_mii_phy(tp, force_reset);
6079	else
6080		err = tg3_setup_copper_phy(tp, force_reset);
6081
6082	if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6083		u32 scale;
6084
6085		val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6086		if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6087			scale = 65;
6088		else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6089			scale = 6;
6090		else
6091			scale = 12;
6092
6093		val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6094		val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6095		tw32(GRC_MISC_CFG, val);
6096	}
6097
6098	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6099	      (6 << TX_LENGTHS_IPG_SHIFT);
6100	if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6101	    tg3_asic_rev(tp) == ASIC_REV_5762)
6102		val |= tr32(MAC_TX_LENGTHS) &
6103		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
6104			TX_LENGTHS_CNT_DWN_VAL_MSK);
6105
6106	if (tp->link_config.active_speed == SPEED_1000 &&
6107	    tp->link_config.active_duplex == DUPLEX_HALF)
6108		tw32(MAC_TX_LENGTHS, val |
6109		     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6110	else
6111		tw32(MAC_TX_LENGTHS, val |
6112		     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6113
6114	if (!tg3_flag(tp, 5705_PLUS)) {
6115		if (tp->link_up) {
6116			tw32(HOSTCC_STAT_COAL_TICKS,
6117			     tp->coal.stats_block_coalesce_usecs);
6118		} else {
6119			tw32(HOSTCC_STAT_COAL_TICKS, 0);
6120		}
6121	}
6122
6123	if (tg3_flag(tp, ASPM_WORKAROUND)) {
6124		val = tr32(PCIE_PWR_MGMT_THRESH);
6125		if (!tp->link_up)
6126			val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6127			      tp->pwrmgmt_thresh;
6128		else
6129			val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6130		tw32(PCIE_PWR_MGMT_THRESH, val);
6131	}
6132
6133	return err;
6134}
6135
6136/* tp->lock must be held */
6137static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts)
6138{
6139	u64 stamp;
6140
6141	ptp_read_system_prets(sts);
6142	stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6143	ptp_read_system_postts(sts);
6144	stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6145
6146	return stamp;
6147}
6148
6149/* tp->lock must be held */
6150static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6151{
6152	u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6153
6154	tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6155	tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6156	tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6157	tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6158}
6159
6160static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6161static inline void tg3_full_unlock(struct tg3 *tp);
6162static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6163{
6164	struct tg3 *tp = netdev_priv(dev);
6165
6166	info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6167				SOF_TIMESTAMPING_RX_SOFTWARE |
6168				SOF_TIMESTAMPING_SOFTWARE;
6169
6170	if (tg3_flag(tp, PTP_CAPABLE)) {
6171		info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6172					SOF_TIMESTAMPING_RX_HARDWARE |
6173					SOF_TIMESTAMPING_RAW_HARDWARE;
6174	}
6175
6176	if (tp->ptp_clock)
6177		info->phc_index = ptp_clock_index(tp->ptp_clock);
6178	else
6179		info->phc_index = -1;
6180
6181	info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6182
6183	info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6184			   (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6185			   (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6186			   (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6187	return 0;
6188}
6189
6190static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6191{
6192	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6193	bool neg_adj = false;
6194	u32 correction = 0;
6195
6196	if (ppb < 0) {
6197		neg_adj = true;
6198		ppb = -ppb;
6199	}
6200
6201	/* Frequency adjustment is performed using hardware with a 24 bit
6202	 * accumulator and a programmable correction value. On each clk, the
6203	 * correction value gets added to the accumulator and when it
6204	 * overflows, the time counter is incremented/decremented.
6205	 *
6206	 * So conversion from ppb to correction value is
6207	 *		ppb * (1 << 24) / 1000000000
6208	 */
6209	correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6210		     TG3_EAV_REF_CLK_CORRECT_MASK;
6211
6212	tg3_full_lock(tp, 0);
6213
6214	if (correction)
6215		tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6216		     TG3_EAV_REF_CLK_CORRECT_EN |
6217		     (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6218	else
6219		tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6220
6221	tg3_full_unlock(tp);
6222
6223	return 0;
6224}
6225
6226static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6227{
6228	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6229
6230	tg3_full_lock(tp, 0);
6231	tp->ptp_adjust += delta;
6232	tg3_full_unlock(tp);
6233
6234	return 0;
6235}
6236
6237static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
6238			    struct ptp_system_timestamp *sts)
6239{
6240	u64 ns;
6241	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6242
6243	tg3_full_lock(tp, 0);
6244	ns = tg3_refclk_read(tp, sts);
6245	ns += tp->ptp_adjust;
6246	tg3_full_unlock(tp);
6247
6248	*ts = ns_to_timespec64(ns);
6249
6250	return 0;
6251}
6252
6253static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6254			   const struct timespec64 *ts)
6255{
6256	u64 ns;
6257	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6258
6259	ns = timespec64_to_ns(ts);
6260
6261	tg3_full_lock(tp, 0);
6262	tg3_refclk_write(tp, ns);
6263	tp->ptp_adjust = 0;
6264	tg3_full_unlock(tp);
6265
6266	return 0;
6267}
6268
6269static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6270			  struct ptp_clock_request *rq, int on)
6271{
6272	struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6273	u32 clock_ctl;
6274	int rval = 0;
6275
6276	switch (rq->type) {
6277	case PTP_CLK_REQ_PEROUT:
6278		/* Reject requests with unsupported flags */
6279		if (rq->perout.flags)
6280			return -EOPNOTSUPP;
6281
6282		if (rq->perout.index != 0)
6283			return -EINVAL;
6284
6285		tg3_full_lock(tp, 0);
6286		clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6287		clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6288
6289		if (on) {
6290			u64 nsec;
6291
6292			nsec = rq->perout.start.sec * 1000000000ULL +
6293			       rq->perout.start.nsec;
6294
6295			if (rq->perout.period.sec || rq->perout.period.nsec) {
6296				netdev_warn(tp->dev,
6297					    "Device supports only a one-shot timesync output, period must be 0\n");
6298				rval = -EINVAL;
6299				goto err_out;
6300			}
6301
6302			if (nsec & (1ULL << 63)) {
6303				netdev_warn(tp->dev,
6304					    "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6305				rval = -EINVAL;
6306				goto err_out;
6307			}
6308
6309			tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6310			tw32(TG3_EAV_WATCHDOG0_MSB,
6311			     TG3_EAV_WATCHDOG0_EN |
6312			     ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6313
6314			tw32(TG3_EAV_REF_CLCK_CTL,
6315			     clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6316		} else {
6317			tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6318			tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6319		}
6320
6321err_out:
6322		tg3_full_unlock(tp);
6323		return rval;
6324
6325	default:
6326		break;
6327	}
6328
6329	return -EOPNOTSUPP;
6330}
6331
6332static const struct ptp_clock_info tg3_ptp_caps = {
6333	.owner		= THIS_MODULE,
6334	.name		= "tg3 clock",
6335	.max_adj	= 250000000,
6336	.n_alarm	= 0,
6337	.n_ext_ts	= 0,
6338	.n_per_out	= 1,
6339	.n_pins		= 0,
6340	.pps		= 0,
6341	.adjfreq	= tg3_ptp_adjfreq,
6342	.adjtime	= tg3_ptp_adjtime,
6343	.gettimex64	= tg3_ptp_gettimex,
6344	.settime64	= tg3_ptp_settime,
6345	.enable		= tg3_ptp_enable,
6346};
6347
6348static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6349				     struct skb_shared_hwtstamps *timestamp)
6350{
6351	memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6352	timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6353					   tp->ptp_adjust);
6354}
6355
6356/* tp->lock must be held */
6357static void tg3_ptp_init(struct tg3 *tp)
6358{
6359	if (!tg3_flag(tp, PTP_CAPABLE))
6360		return;
6361
6362	/* Initialize the hardware clock to the system time. */
6363	tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6364	tp->ptp_adjust = 0;
6365	tp->ptp_info = tg3_ptp_caps;
6366}
6367
6368/* tp->lock must be held */
6369static void tg3_ptp_resume(struct tg3 *tp)
6370{
6371	if (!tg3_flag(tp, PTP_CAPABLE))
6372		return;
6373
6374	tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6375	tp->ptp_adjust = 0;
6376}
6377
6378static void tg3_ptp_fini(struct tg3 *tp)
6379{
6380	if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6381		return;
6382
6383	ptp_clock_unregister(tp->ptp_clock);
6384	tp->ptp_clock = NULL;
6385	tp->ptp_adjust = 0;
6386}
6387
6388static inline int tg3_irq_sync(struct tg3 *tp)
6389{
6390	return tp->irq_sync;
6391}
6392
6393static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6394{
6395	int i;
6396
6397	dst = (u32 *)((u8 *)dst + off);
6398	for (i = 0; i < len; i += sizeof(u32))
6399		*dst++ = tr32(off + i);
6400}
6401
6402static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6403{
6404	tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6405	tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6406	tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6407	tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6408	tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6409	tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6410	tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6411	tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6412	tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6413	tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6414	tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6415	tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6416	tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6417	tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6418	tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6419	tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6420	tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6421	tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6422	tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6423
6424	if (tg3_flag(tp, SUPPORT_MSIX))
6425		tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6426
6427	tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6428	tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6429	tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6430	tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6431	tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6432	tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6433	tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6434	tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6435
6436	if (!tg3_flag(tp, 5705_PLUS)) {
6437		tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6438		tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6439		tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6440	}
6441
6442	tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6443	tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6444	tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6445	tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6446	tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6447
6448	if (tg3_flag(tp, NVRAM))
6449		tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6450}
6451
6452static void tg3_dump_state(struct tg3 *tp)
6453{
6454	int i;
6455	u32 *regs;
6456
6457	/* If it is a PCI error, all registers will be 0xffff,
6458	 * we don't dump them out, just report the error and return
6459	 */
6460	if (tp->pdev->error_state != pci_channel_io_normal) {
6461		netdev_err(tp->dev, "PCI channel ERROR!\n");
6462		return;
6463	}
6464
6465	regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6466	if (!regs)
6467		return;
6468
6469	if (tg3_flag(tp, PCI_EXPRESS)) {
6470		/* Read up to but not including private PCI registers */
6471		for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6472			regs[i / sizeof(u32)] = tr32(i);
6473	} else
6474		tg3_dump_legacy_regs(tp, regs);
6475
6476	for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6477		if (!regs[i + 0] && !regs[i + 1] &&
6478		    !regs[i + 2] && !regs[i + 3])
6479			continue;
6480
6481		netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6482			   i * 4,
6483			   regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6484	}
6485
6486	kfree(regs);
6487
6488	for (i = 0; i < tp->irq_cnt; i++) {
6489		struct tg3_napi *tnapi = &tp->napi[i];
6490
6491		/* SW status block */
6492		netdev_err(tp->dev,
6493			 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6494			   i,
6495			   tnapi->hw_status->status,
6496			   tnapi->hw_status->status_tag,
6497			   tnapi->hw_status->rx_jumbo_consumer,
6498			   tnapi->hw_status->rx_consumer,
6499			   tnapi->hw_status->rx_mini_consumer,
6500			   tnapi->hw_status->idx[0].rx_producer,
6501			   tnapi->hw_status->idx[0].tx_consumer);
6502
6503		netdev_err(tp->dev,
6504		"%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6505			   i,
6506			   tnapi->last_tag, tnapi->last_irq_tag,
6507			   tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6508			   tnapi->rx_rcb_ptr,
6509			   tnapi->prodring.rx_std_prod_idx,
6510			   tnapi->prodring.rx_std_cons_idx,
6511			   tnapi->prodring.rx_jmb_prod_idx,
6512			   tnapi->prodring.rx_jmb_cons_idx);
6513	}
6514}
6515
6516/* This is called whenever we suspect that the system chipset is re-
6517 * ordering the sequence of MMIO to the tx send mailbox. The symptom
6518 * is bogus tx completions. We try to recover by setting the
6519 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6520 * in the workqueue.
6521 */
6522static void tg3_tx_recover(struct tg3 *tp)
6523{
6524	BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6525	       tp->write32_tx_mbox == tg3_write_indirect_mbox);
6526
6527	netdev_warn(tp->dev,
6528		    "The system may be re-ordering memory-mapped I/O "
6529		    "cycles to the network device, attempting to recover. "
6530		    "Please report the problem to the driver maintainer "
6531		    "and include system chipset information.\n");
6532
6533	tg3_flag_set(tp, TX_RECOVERY_PENDING);
6534}
6535
6536static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6537{
6538	/* Tell compiler to fetch tx indices from memory. */
6539	barrier();
6540	return tnapi->tx_pending -
6541	       ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6542}
6543
6544/* Tigon3 never reports partial packet sends.  So we do not
6545 * need special logic to handle SKBs that have not had all
6546 * of their frags sent yet, like SunGEM does.
6547 */
6548static void tg3_tx(struct tg3_napi *tnapi)
6549{
6550	struct tg3 *tp = tnapi->tp;
6551	u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6552	u32 sw_idx = tnapi->tx_cons;
6553	struct netdev_queue *txq;
6554	int index = tnapi - tp->napi;
6555	unsigned int pkts_compl = 0, bytes_compl = 0;
6556
6557	if (tg3_flag(tp, ENABLE_TSS))
6558		index--;
6559
6560	txq = netdev_get_tx_queue(tp->dev, index);
6561
6562	while (sw_idx != hw_idx) {
6563		struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6564		struct sk_buff *skb = ri->skb;
6565		int i, tx_bug = 0;
6566
6567		if (unlikely(skb == NULL)) {
6568			tg3_tx_recover(tp);
6569			return;
6570		}
6571
6572		if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6573			struct skb_shared_hwtstamps timestamp;
6574			u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6575			hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6576
6577			tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6578
6579			skb_tstamp_tx(skb, &timestamp);
6580		}
6581
6582		pci_unmap_single(tp->pdev,
6583				 dma_unmap_addr(ri, mapping),
6584				 skb_headlen(skb),
6585				 PCI_DMA_TODEVICE);
6586
6587		ri->skb = NULL;
6588
6589		while (ri->fragmented) {
6590			ri->fragmented = false;
6591			sw_idx = NEXT_TX(sw_idx);
6592			ri = &tnapi->tx_buffers[sw_idx];
6593		}
6594
6595		sw_idx = NEXT_TX(sw_idx);
6596
6597		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6598			ri = &tnapi->tx_buffers[sw_idx];
6599			if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6600				tx_bug = 1;
6601
6602			pci_unmap_page(tp->pdev,
6603				       dma_unmap_addr(ri, mapping),
6604				       skb_frag_size(&skb_shinfo(skb)->frags[i]),
6605				       PCI_DMA_TODEVICE);
6606
6607			while (ri->fragmented) {
6608				ri->fragmented = false;
6609				sw_idx = NEXT_TX(sw_idx);
6610				ri = &tnapi->tx_buffers[sw_idx];
6611			}
6612
6613			sw_idx = NEXT_TX(sw_idx);
6614		}
6615
6616		pkts_compl++;
6617		bytes_compl += skb->len;
6618
6619		dev_consume_skb_any(skb);
6620
6621		if (unlikely(tx_bug)) {
6622			tg3_tx_recover(tp);
6623			return;
6624		}
6625	}
6626
6627	netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6628
6629	tnapi->tx_cons = sw_idx;
6630
6631	/* Need to make the tx_cons update visible to tg3_start_xmit()
6632	 * before checking for netif_queue_stopped().  Without the
6633	 * memory barrier, there is a small possibility that tg3_start_xmit()
6634	 * will miss it and cause the queue to be stopped forever.
6635	 */
6636	smp_mb();
6637
6638	if (unlikely(netif_tx_queue_stopped(txq) &&
6639		     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6640		__netif_tx_lock(txq, smp_processor_id());
6641		if (netif_tx_queue_stopped(txq) &&
6642		    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6643			netif_tx_wake_queue(txq);
6644		__netif_tx_unlock(txq);
6645	}
6646}
6647
6648static void tg3_frag_free(bool is_frag, void *data)
6649{
6650	if (is_frag)
6651		skb_free_frag(data);
6652	else
6653		kfree(data);
6654}
6655
6656static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6657{
6658	unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6659		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6660
6661	if (!ri->data)
6662		return;
6663
6664	pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
6665			 map_sz, PCI_DMA_FROMDEVICE);
6666	tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6667	ri->data = NULL;
6668}
6669
6670
6671/* Returns size of skb allocated or < 0 on error.
6672 *
6673 * We only need to fill in the address because the other members
6674 * of the RX descriptor are invariant, see tg3_init_rings.
6675 *
6676 * Note the purposeful assymetry of cpu vs. chip accesses.  For
6677 * posting buffers we only dirty the first cache line of the RX
6678 * descriptor (containing the address).  Whereas for the RX status
6679 * buffers the cpu only reads the last cacheline of the RX descriptor
6680 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6681 */
6682static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6683			     u32 opaque_key, u32 dest_idx_unmasked,
6684			     unsigned int *frag_size)
6685{
6686	struct tg3_rx_buffer_desc *desc;
6687	struct ring_info *map;
6688	u8 *data;
6689	dma_addr_t mapping;
6690	int skb_size, data_size, dest_idx;
6691
6692	switch (opaque_key) {
6693	case RXD_OPAQUE_RING_STD:
6694		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6695		desc = &tpr->rx_std[dest_idx];
6696		map = &tpr->rx_std_buffers[dest_idx];
6697		data_size = tp->rx_pkt_map_sz;
6698		break;
6699
6700	case RXD_OPAQUE_RING_JUMBO:
6701		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6702		desc = &tpr->rx_jmb[dest_idx].std;
6703		map = &tpr->rx_jmb_buffers[dest_idx];
6704		data_size = TG3_RX_JMB_MAP_SZ;
6705		break;
6706
6707	default:
6708		return -EINVAL;
6709	}
6710
6711	/* Do not overwrite any of the map or rp information
6712	 * until we are sure we can commit to a new buffer.
6713	 *
6714	 * Callers depend upon this behavior and assume that
6715	 * we leave everything unchanged if we fail.
6716	 */
6717	skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6718		   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6719	if (skb_size <= PAGE_SIZE) {
6720		data = napi_alloc_frag(skb_size);
6721		*frag_size = skb_size;
6722	} else {
6723		data = kmalloc(skb_size, GFP_ATOMIC);
6724		*frag_size = 0;
6725	}
6726	if (!data)
6727		return -ENOMEM;
6728
6729	mapping = pci_map_single(tp->pdev,
6730				 data + TG3_RX_OFFSET(tp),
6731				 data_size,
6732				 PCI_DMA_FROMDEVICE);
6733	if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
6734		tg3_frag_free(skb_size <= PAGE_SIZE, data);
6735		return -EIO;
6736	}
6737
6738	map->data = data;
6739	dma_unmap_addr_set(map, mapping, mapping);
6740
6741	desc->addr_hi = ((u64)mapping >> 32);
6742	desc->addr_lo = ((u64)mapping & 0xffffffff);
6743
6744	return data_size;
6745}
6746
6747/* We only need to move over in the address because the other
6748 * members of the RX descriptor are invariant.  See notes above
6749 * tg3_alloc_rx_data for full details.
6750 */
6751static void tg3_recycle_rx(struct tg3_napi *tnapi,
6752			   struct tg3_rx_prodring_set *dpr,
6753			   u32 opaque_key, int src_idx,
6754			   u32 dest_idx_unmasked)
6755{
6756	struct tg3 *tp = tnapi->tp;
6757	struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6758	struct ring_info *src_map, *dest_map;
6759	struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6760	int dest_idx;
6761
6762	switch (opaque_key) {
6763	case RXD_OPAQUE_RING_STD:
6764		dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6765		dest_desc = &dpr->rx_std[dest_idx];
6766		dest_map = &dpr->rx_std_buffers[dest_idx];
6767		src_desc = &spr->rx_std[src_idx];
6768		src_map = &spr->rx_std_buffers[src_idx];
6769		break;
6770
6771	case RXD_OPAQUE_RING_JUMBO:
6772		dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6773		dest_desc = &dpr->rx_jmb[dest_idx].std;
6774		dest_map = &dpr->rx_jmb_buffers[dest_idx];
6775		src_desc = &spr->rx_jmb[src_idx].std;
6776		src_map = &spr->rx_jmb_buffers[src_idx];
6777		break;
6778
6779	default:
6780		return;
6781	}
6782
6783	dest_map->data = src_map->data;
6784	dma_unmap_addr_set(dest_map, mapping,
6785			   dma_unmap_addr(src_map, mapping));
6786	dest_desc->addr_hi = src_desc->addr_hi;
6787	dest_desc->addr_lo = src_desc->addr_lo;
6788
6789	/* Ensure that the update to the skb happens after the physical
6790	 * addresses have been transferred to the new BD location.
6791	 */
6792	smp_wmb();
6793
6794	src_map->data = NULL;
6795}
6796
6797/* The RX ring scheme is composed of multiple rings which post fresh
6798 * buffers to the chip, and one special ring the chip uses to report
6799 * status back to the host.
6800 *
6801 * The special ring reports the status of received packets to the
6802 * host.  The chip does not write into the original descriptor the
6803 * RX buffer was obtained from.  The chip simply takes the original
6804 * descriptor as provided by the host, updates the status and length
6805 * field, then writes this into the next status ring entry.
6806 *
6807 * Each ring the host uses to post buffers to the chip is described
6808 * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6809 * it is first placed into the on-chip ram.  When the packet's length
6810 * is known, it walks down the TG3_BDINFO entries to select the ring.
6811 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6812 * which is within the range of the new packet's length is chosen.
6813 *
6814 * The "separate ring for rx status" scheme may sound queer, but it makes
6815 * sense from a cache coherency perspective.  If only the host writes
6816 * to the buffer post rings, and only the chip writes to the rx status
6817 * rings, then cache lines never move beyond shared-modified state.
6818 * If both the host and chip were to write into the same ring, cache line
6819 * eviction could occur since both entities want it in an exclusive state.
6820 */
6821static int tg3_rx(struct tg3_napi *tnapi, int budget)
6822{
6823	struct tg3 *tp = tnapi->tp;
6824	u32 work_mask, rx_std_posted = 0;
6825	u32 std_prod_idx, jmb_prod_idx;
6826	u32 sw_idx = tnapi->rx_rcb_ptr;
6827	u16 hw_idx;
6828	int received;
6829	struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6830
6831	hw_idx = *(tnapi->rx_rcb_prod_idx);
6832	/*
6833	 * We need to order the read of hw_idx and the read of
6834	 * the opaque cookie.
6835	 */
6836	rmb();
6837	work_mask = 0;
6838	received = 0;
6839	std_prod_idx = tpr->rx_std_prod_idx;
6840	jmb_prod_idx = tpr->rx_jmb_prod_idx;
6841	while (sw_idx != hw_idx && budget > 0) {
6842		struct ring_info *ri;
6843		struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6844		unsigned int len;
6845		struct sk_buff *skb;
6846		dma_addr_t dma_addr;
6847		u32 opaque_key, desc_idx, *post_ptr;
6848		u8 *data;
6849		u64 tstamp = 0;
6850
6851		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6852		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6853		if (opaque_key == RXD_OPAQUE_RING_STD) {
6854			ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6855			dma_addr = dma_unmap_addr(ri, mapping);
6856			data = ri->data;
6857			post_ptr = &std_prod_idx;
6858			rx_std_posted++;
6859		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6860			ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6861			dma_addr = dma_unmap_addr(ri, mapping);
6862			data = ri->data;
6863			post_ptr = &jmb_prod_idx;
6864		} else
6865			goto next_pkt_nopost;
6866
6867		work_mask |= opaque_key;
6868
6869		if (desc->err_vlan & RXD_ERR_MASK) {
6870		drop_it:
6871			tg3_recycle_rx(tnapi, tpr, opaque_key,
6872				       desc_idx, *post_ptr);
6873		drop_it_no_recycle:
6874			/* Other statistics kept track of by card. */
6875			tnapi->rx_dropped++;
6876			goto next_pkt;
6877		}
6878
6879		prefetch(data + TG3_RX_OFFSET(tp));
6880		len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6881		      ETH_FCS_LEN;
6882
6883		if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6884		     RXD_FLAG_PTPSTAT_PTPV1 ||
6885		    (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6886		     RXD_FLAG_PTPSTAT_PTPV2) {
6887			tstamp = tr32(TG3_RX_TSTAMP_LSB);
6888			tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6889		}
6890
6891		if (len > TG3_RX_COPY_THRESH(tp)) {
6892			int skb_size;
6893			unsigned int frag_size;
6894
6895			skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6896						    *post_ptr, &frag_size);
6897			if (skb_size < 0)
6898				goto drop_it;
6899
6900			pci_unmap_single(tp->pdev, dma_addr, skb_size,
6901					 PCI_DMA_FROMDEVICE);
6902
6903			/* Ensure that the update to the data happens
6904			 * after the usage of the old DMA mapping.
6905			 */
6906			smp_wmb();
6907
6908			ri->data = NULL;
6909
6910			skb = build_skb(data, frag_size);
6911			if (!skb) {
6912				tg3_frag_free(frag_size != 0, data);
6913				goto drop_it_no_recycle;
6914			}
6915			skb_reserve(skb, TG3_RX_OFFSET(tp));
6916		} else {
6917			tg3_recycle_rx(tnapi, tpr, opaque_key,
6918				       desc_idx, *post_ptr);
6919
6920			skb = netdev_alloc_skb(tp->dev,
6921					       len + TG3_RAW_IP_ALIGN);
6922			if (skb == NULL)
6923				goto drop_it_no_recycle;
6924
6925			skb_reserve(skb, TG3_RAW_IP_ALIGN);
6926			pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6927			memcpy(skb->data,
6928			       data + TG3_RX_OFFSET(tp),
6929			       len);
6930			pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6931		}
6932
6933		skb_put(skb, len);
6934		if (tstamp)
6935			tg3_hwclock_to_timestamp(tp, tstamp,
6936						 skb_hwtstamps(skb));
6937
6938		if ((tp->dev->features & NETIF_F_RXCSUM) &&
6939		    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6940		    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6941		      >> RXD_TCPCSUM_SHIFT) == 0xffff))
6942			skb->ip_summed = CHECKSUM_UNNECESSARY;
6943		else
6944			skb_checksum_none_assert(skb);
6945
6946		skb->protocol = eth_type_trans(skb, tp->dev);
6947
6948		if (len > (tp->dev->mtu + ETH_HLEN) &&
6949		    skb->protocol != htons(ETH_P_8021Q) &&
6950		    skb->protocol != htons(ETH_P_8021AD)) {
6951			dev_kfree_skb_any(skb);
6952			goto drop_it_no_recycle;
6953		}
6954
6955		if (desc->type_flags & RXD_FLAG_VLAN &&
6956		    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6957			__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6958					       desc->err_vlan & RXD_VLAN_MASK);
6959
6960		napi_gro_receive(&tnapi->napi, skb);
6961
6962		received++;
6963		budget--;
6964
6965next_pkt:
6966		(*post_ptr)++;
6967
6968		if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6969			tpr->rx_std_prod_idx = std_prod_idx &
6970					       tp->rx_std_ring_mask;
6971			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6972				     tpr->rx_std_prod_idx);
6973			work_mask &= ~RXD_OPAQUE_RING_STD;
6974			rx_std_posted = 0;
6975		}
6976next_pkt_nopost:
6977		sw_idx++;
6978		sw_idx &= tp->rx_ret_ring_mask;
6979
6980		/* Refresh hw_idx to see if there is new work */
6981		if (sw_idx == hw_idx) {
6982			hw_idx = *(tnapi->rx_rcb_prod_idx);
6983			rmb();
6984		}
6985	}
6986
6987	/* ACK the status ring. */
6988	tnapi->rx_rcb_ptr = sw_idx;
6989	tw32_rx_mbox(tnapi->consmbox, sw_idx);
6990
6991	/* Refill RX ring(s). */
6992	if (!tg3_flag(tp, ENABLE_RSS)) {
6993		/* Sync BD data before updating mailbox */
6994		wmb();
6995
6996		if (work_mask & RXD_OPAQUE_RING_STD) {
6997			tpr->rx_std_prod_idx = std_prod_idx &
6998					       tp->rx_std_ring_mask;
6999			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7000				     tpr->rx_std_prod_idx);
7001		}
7002		if (work_mask & RXD_OPAQUE_RING_JUMBO) {
7003			tpr->rx_jmb_prod_idx = jmb_prod_idx &
7004					       tp->rx_jmb_ring_mask;
7005			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7006				     tpr->rx_jmb_prod_idx);
7007		}
7008	} else if (work_mask) {
7009		/* rx_std_buffers[] and rx_jmb_buffers[] entries must be
7010		 * updated before the producer indices can be updated.
7011		 */
7012		smp_wmb();
7013
7014		tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
7015		tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
7016
7017		if (tnapi != &tp->napi[1]) {
7018			tp->rx_refill = true;
7019			napi_schedule(&tp->napi[1].napi);
7020		}
7021	}
7022
7023	return received;
7024}
7025
7026static void tg3_poll_link(struct tg3 *tp)
7027{
7028	/* handle link change and other phy events */
7029	if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7030		struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7031
7032		if (sblk->status & SD_STATUS_LINK_CHG) {
7033			sblk->status = SD_STATUS_UPDATED |
7034				       (sblk->status & ~SD_STATUS_LINK_CHG);
7035			spin_lock(&tp->lock);
7036			if (tg3_flag(tp, USE_PHYLIB)) {
7037				tw32_f(MAC_STATUS,
7038				     (MAC_STATUS_SYNC_CHANGED |
7039				      MAC_STATUS_CFG_CHANGED |
7040				      MAC_STATUS_MI_COMPLETION |
7041				      MAC_STATUS_LNKSTATE_CHANGED));
7042				udelay(40);
7043			} else
7044				tg3_setup_phy(tp, false);
7045			spin_unlock(&tp->lock);
7046		}
7047	}
7048}
7049
7050static int tg3_rx_prodring_xfer(struct tg3 *tp,
7051				struct tg3_rx_prodring_set *dpr,
7052				struct tg3_rx_prodring_set *spr)
7053{
7054	u32 si, di, cpycnt, src_prod_idx;
7055	int i, err = 0;
7056
7057	while (1) {
7058		src_prod_idx = spr->rx_std_prod_idx;
7059
7060		/* Make sure updates to the rx_std_buffers[] entries and the
7061		 * standard producer index are seen in the correct order.
7062		 */
7063		smp_rmb();
7064
7065		if (spr->rx_std_cons_idx == src_prod_idx)
7066			break;
7067
7068		if (spr->rx_std_cons_idx < src_prod_idx)
7069			cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7070		else
7071			cpycnt = tp->rx_std_ring_mask + 1 -
7072				 spr->rx_std_cons_idx;
7073
7074		cpycnt = min(cpycnt,
7075			     tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7076
7077		si = spr->rx_std_cons_idx;
7078		di = dpr->rx_std_prod_idx;
7079
7080		for (i = di; i < di + cpycnt; i++) {
7081			if (dpr->rx_std_buffers[i].data) {
7082				cpycnt = i - di;
7083				err = -ENOSPC;
7084				break;
7085			}
7086		}
7087
7088		if (!cpycnt)
7089			break;
7090
7091		/* Ensure that updates to the rx_std_buffers ring and the
7092		 * shadowed hardware producer ring from tg3_recycle_skb() are
7093		 * ordered correctly WRT the skb check above.
7094		 */
7095		smp_rmb();
7096
7097		memcpy(&dpr->rx_std_buffers[di],
7098		       &spr->rx_std_buffers[si],
7099		       cpycnt * sizeof(struct ring_info));
7100
7101		for (i = 0; i < cpycnt; i++, di++, si++) {
7102			struct tg3_rx_buffer_desc *sbd, *dbd;
7103			sbd = &spr->rx_std[si];
7104			dbd = &dpr->rx_std[di];
7105			dbd->addr_hi = sbd->addr_hi;
7106			dbd->addr_lo = sbd->addr_lo;
7107		}
7108
7109		spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7110				       tp->rx_std_ring_mask;
7111		dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7112				       tp->rx_std_ring_mask;
7113	}
7114
7115	while (1) {
7116		src_prod_idx = spr->rx_jmb_prod_idx;
7117
7118		/* Make sure updates to the rx_jmb_buffers[] entries and
7119		 * the jumbo producer index are seen in the correct order.
7120		 */
7121		smp_rmb();
7122
7123		if (spr->rx_jmb_cons_idx == src_prod_idx)
7124			break;
7125
7126		if (spr->rx_jmb_cons_idx < src_prod_idx)
7127			cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7128		else
7129			cpycnt = tp->rx_jmb_ring_mask + 1 -
7130				 spr->rx_jmb_cons_idx;
7131
7132		cpycnt = min(cpycnt,
7133			     tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7134
7135		si = spr->rx_jmb_cons_idx;
7136		di = dpr->rx_jmb_prod_idx;
7137
7138		for (i = di; i < di + cpycnt; i++) {
7139			if (dpr->rx_jmb_buffers[i].data) {
7140				cpycnt = i - di;
7141				err = -ENOSPC;
7142				break;
7143			}
7144		}
7145
7146		if (!cpycnt)
7147			break;
7148
7149		/* Ensure that updates to the rx_jmb_buffers ring and the
7150		 * shadowed hardware producer ring from tg3_recycle_skb() are
7151		 * ordered correctly WRT the skb check above.
7152		 */
7153		smp_rmb();
7154
7155		memcpy(&dpr->rx_jmb_buffers[di],
7156		       &spr->rx_jmb_buffers[si],
7157		       cpycnt * sizeof(struct ring_info));
7158
7159		for (i = 0; i < cpycnt; i++, di++, si++) {
7160			struct tg3_rx_buffer_desc *sbd, *dbd;
7161			sbd = &spr->rx_jmb[si].std;
7162			dbd = &dpr->rx_jmb[di].std;
7163			dbd->addr_hi = sbd->addr_hi;
7164			dbd->addr_lo = sbd->addr_lo;
7165		}
7166
7167		spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7168				       tp->rx_jmb_ring_mask;
7169		dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7170				       tp->rx_jmb_ring_mask;
7171	}
7172
7173	return err;
7174}
7175
7176static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7177{
7178	struct tg3 *tp = tnapi->tp;
7179
7180	/* run TX completion thread */
7181	if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7182		tg3_tx(tnapi);
7183		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7184			return work_done;
7185	}
7186
7187	if (!tnapi->rx_rcb_prod_idx)
7188		return work_done;
7189
7190	/* run RX thread, within the bounds set by NAPI.
7191	 * All RX "locking" is done by ensuring outside
7192	 * code synchronizes with tg3->napi.poll()
7193	 */
7194	if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7195		work_done += tg3_rx(tnapi, budget - work_done);
7196
7197	if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7198		struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7199		int i, err = 0;
7200		u32 std_prod_idx = dpr->rx_std_prod_idx;
7201		u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7202
7203		tp->rx_refill = false;
7204		for (i = 1; i <= tp->rxq_cnt; i++)
7205			err |= tg3_rx_prodring_xfer(tp, dpr,
7206						    &tp->napi[i].prodring);
7207
7208		wmb();
7209
7210		if (std_prod_idx != dpr->rx_std_prod_idx)
7211			tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7212				     dpr->rx_std_prod_idx);
7213
7214		if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7215			tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7216				     dpr->rx_jmb_prod_idx);
7217
7218		if (err)
7219			tw32_f(HOSTCC_MODE, tp->coal_now);
7220	}
7221
7222	return work_done;
7223}
7224
7225static inline void tg3_reset_task_schedule(struct tg3 *tp)
7226{
7227	if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7228		schedule_work(&tp->reset_task);
7229}
7230
7231static inline void tg3_reset_task_cancel(struct tg3 *tp)
7232{
7233	if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7234		cancel_work_sync(&tp->reset_task);
7235	tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7236}
7237
7238static int tg3_poll_msix(struct napi_struct *napi, int budget)
7239{
7240	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7241	struct tg3 *tp = tnapi->tp;
7242	int work_done = 0;
7243	struct tg3_hw_status *sblk = tnapi->hw_status;
7244
7245	while (1) {
7246		work_done = tg3_poll_work(tnapi, work_done, budget);
7247
7248		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7249			goto tx_recovery;
7250
7251		if (unlikely(work_done >= budget))
7252			break;
7253
7254		/* tp->last_tag is used in tg3_int_reenable() below
7255		 * to tell the hw how much work has been processed,
7256		 * so we must read it before checking for more work.
7257		 */
7258		tnapi->last_tag = sblk->status_tag;
7259		tnapi->last_irq_tag = tnapi->last_tag;
7260		rmb();
7261
7262		/* check for RX/TX work to do */
7263		if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7264			   *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7265
7266			/* This test here is not race free, but will reduce
7267			 * the number of interrupts by looping again.
7268			 */
7269			if (tnapi == &tp->napi[1] && tp->rx_refill)
7270				continue;
7271
7272			napi_complete_done(napi, work_done);
7273			/* Reenable interrupts. */
7274			tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7275
7276			/* This test here is synchronized by napi_schedule()
7277			 * and napi_complete() to close the race condition.
7278			 */
7279			if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7280				tw32(HOSTCC_MODE, tp->coalesce_mode |
7281						  HOSTCC_MODE_ENABLE |
7282						  tnapi->coal_now);
7283			}
7284			break;
7285		}
7286	}
7287
7288	tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7289	return work_done;
7290
7291tx_recovery:
7292	/* work_done is guaranteed to be less than budget. */
7293	napi_complete(napi);
7294	tg3_reset_task_schedule(tp);
7295	return work_done;
7296}
7297
7298static void tg3_process_error(struct tg3 *tp)
7299{
7300	u32 val;
7301	bool real_error = false;
7302
7303	if (tg3_flag(tp, ERROR_PROCESSED))
7304		return;
7305
7306	/* Check Flow Attention register */
7307	val = tr32(HOSTCC_FLOW_ATTN);
7308	if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7309		netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7310		real_error = true;
7311	}
7312
7313	if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7314		netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7315		real_error = true;
7316	}
7317
7318	if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7319		netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7320		real_error = true;
7321	}
7322
7323	if (!real_error)
7324		return;
7325
7326	tg3_dump_state(tp);
7327
7328	tg3_flag_set(tp, ERROR_PROCESSED);
7329	tg3_reset_task_schedule(tp);
7330}
7331
7332static int tg3_poll(struct napi_struct *napi, int budget)
7333{
7334	struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7335	struct tg3 *tp = tnapi->tp;
7336	int work_done = 0;
7337	struct tg3_hw_status *sblk = tnapi->hw_status;
7338
7339	while (1) {
7340		if (sblk->status & SD_STATUS_ERROR)
7341			tg3_process_error(tp);
7342
7343		tg3_poll_link(tp);
7344
7345		work_done = tg3_poll_work(tnapi, work_done, budget);
7346
7347		if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7348			goto tx_recovery;
7349
7350		if (unlikely(work_done >= budget))
7351			break;
7352
7353		if (tg3_flag(tp, TAGGED_STATUS)) {
7354			/* tp->last_tag is used in tg3_int_reenable() below
7355			 * to tell the hw how much work has been processed,
7356			 * so we must read it before checking for more work.
7357			 */
7358			tnapi->last_tag = sblk->status_tag;
7359			tnapi->last_irq_tag = tnapi->last_tag;
7360			rmb();
7361		} else
7362			sblk->status &= ~SD_STATUS_UPDATED;
7363
7364		if (likely(!tg3_has_work(tnapi))) {
7365			napi_complete_done(napi, work_done);
7366			tg3_int_reenable(tnapi);
7367			break;
7368		}
7369	}
7370
7371	tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7372	return work_done;
7373
7374tx_recovery:
7375	/* work_done is guaranteed to be less than budget. */
7376	napi_complete(napi);
7377	tg3_reset_task_schedule(tp);
7378	return work_done;
7379}
7380
7381static void tg3_napi_disable(struct tg3 *tp)
7382{
7383	int i;
7384
7385	for (i = tp->irq_cnt - 1; i >= 0; i--)
7386		napi_disable(&tp->napi[i].napi);
7387}
7388
7389static void tg3_napi_enable(struct tg3 *tp)
7390{
7391	int i;
7392
7393	for (i = 0; i < tp->irq_cnt; i++)
7394		napi_enable(&tp->napi[i].napi);
7395}
7396
7397static void tg3_napi_init(struct tg3 *tp)
7398{
7399	int i;
7400
7401	netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7402	for (i = 1; i < tp->irq_cnt; i++)
7403		netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7404}
7405
7406static void tg3_napi_fini(struct tg3 *tp)
7407{
7408	int i;
7409
7410	for (i = 0; i < tp->irq_cnt; i++)
7411		netif_napi_del(&tp->napi[i].napi);
7412}
7413
7414static inline void tg3_netif_stop(struct tg3 *tp)
7415{
7416	netif_trans_update(tp->dev);	/* prevent tx timeout */
7417	tg3_napi_disable(tp);
7418	netif_carrier_off(tp->dev);
7419	netif_tx_disable(tp->dev);
7420}
7421
7422/* tp->lock must be held */
7423static inline void tg3_netif_start(struct tg3 *tp)
7424{
7425	tg3_ptp_resume(tp);
7426
7427	/* NOTE: unconditional netif_tx_wake_all_queues is only
7428	 * appropriate so long as all callers are assured to
7429	 * have free tx slots (such as after tg3_init_hw)
7430	 */
7431	netif_tx_wake_all_queues(tp->dev);
7432
7433	if (tp->link_up)
7434		netif_carrier_on(tp->dev);
7435
7436	tg3_napi_enable(tp);
7437	tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7438	tg3_enable_ints(tp);
7439}
7440
7441static void tg3_irq_quiesce(struct tg3 *tp)
7442	__releases(tp->lock)
7443	__acquires(tp->lock)
7444{
7445	int i;
7446
7447	BUG_ON(tp->irq_sync);
7448
7449	tp->irq_sync = 1;
7450	smp_mb();
7451
7452	spin_unlock_bh(&tp->lock);
7453
7454	for (i = 0; i < tp->irq_cnt; i++)
7455		synchronize_irq(tp->napi[i].irq_vec);
7456
7457	spin_lock_bh(&tp->lock);
7458}
7459
7460/* Fully shutdown all tg3 driver activity elsewhere in the system.
7461 * If irq_sync is non-zero, then the IRQ handler must be synchronized
7462 * with as well.  Most of the time, this is not necessary except when
7463 * shutting down the device.
7464 */
7465static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7466{
7467	spin_lock_bh(&tp->lock);
7468	if (irq_sync)
7469		tg3_irq_quiesce(tp);
7470}
7471
7472static inline void tg3_full_unlock(struct tg3 *tp)
7473{
7474	spin_unlock_bh(&tp->lock);
7475}
7476
7477/* One-shot MSI handler - Chip automatically disables interrupt
7478 * after sending MSI so driver doesn't have to do it.
7479 */
7480static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7481{
7482	struct tg3_napi *tnapi = dev_id;
7483	struct tg3 *tp = tnapi->tp;
7484
7485	prefetch(tnapi->hw_status);
7486	if (tnapi->rx_rcb)
7487		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7488
7489	if (likely(!tg3_irq_sync(tp)))
7490		napi_schedule(&tnapi->napi);
7491
7492	return IRQ_HANDLED;
7493}
7494
7495/* MSI ISR - No need to check for interrupt sharing and no need to
7496 * flush status block and interrupt mailbox. PCI ordering rules
7497 * guarantee that MSI will arrive after the status block.
7498 */
7499static irqreturn_t tg3_msi(int irq, void *dev_id)
7500{
7501	struct tg3_napi *tnapi = dev_id;
7502	struct tg3 *tp = tnapi->tp;
7503
7504	prefetch(tnapi->hw_status);
7505	if (tnapi->rx_rcb)
7506		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7507	/*
7508	 * Writing any value to intr-mbox-0 clears PCI INTA# and
7509	 * chip-internal interrupt pending events.
7510	 * Writing non-zero to intr-mbox-0 additional tells the
7511	 * NIC to stop sending us irqs, engaging "in-intr-handler"
7512	 * event coalescing.
7513	 */
7514	tw32_mailbox(tnapi->int_mbox, 0x00000001);
7515	if (likely(!tg3_irq_sync(tp)))
7516		napi_schedule(&tnapi->napi);
7517
7518	return IRQ_RETVAL(1);
7519}
7520
7521static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7522{
7523	struct tg3_napi *tnapi = dev_id;
7524	struct tg3 *tp = tnapi->tp;
7525	struct tg3_hw_status *sblk = tnapi->hw_status;
7526	unsigned int handled = 1;
7527
7528	/* In INTx mode, it is possible for the interrupt to arrive at
7529	 * the CPU before the status block posted prior to the interrupt.
7530	 * Reading the PCI State register will confirm whether the
7531	 * interrupt is ours and will flush the status block.
7532	 */
7533	if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7534		if (tg3_flag(tp, CHIP_RESETTING) ||
7535		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7536			handled = 0;
7537			goto out;
7538		}
7539	}
7540
7541	/*
7542	 * Writing any value to intr-mbox-0 clears PCI INTA# and
7543	 * chip-internal interrupt pending events.
7544	 * Writing non-zero to intr-mbox-0 additional tells the
7545	 * NIC to stop sending us irqs, engaging "in-intr-handler"
7546	 * event coalescing.
7547	 *
7548	 * Flush the mailbox to de-assert the IRQ immediately to prevent
7549	 * spurious interrupts.  The flush impacts performance but
7550	 * excessive spurious interrupts can be worse in some cases.
7551	 */
7552	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7553	if (tg3_irq_sync(tp))
7554		goto out;
7555	sblk->status &= ~SD_STATUS_UPDATED;
7556	if (likely(tg3_has_work(tnapi))) {
7557		prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7558		napi_schedule(&tnapi->napi);
7559	} else {
7560		/* No work, shared interrupt perhaps?  re-enable
7561		 * interrupts, and flush that PCI write
7562		 */
7563		tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7564			       0x00000000);
7565	}
7566out:
7567	return IRQ_RETVAL(handled);
7568}
7569
7570static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7571{
7572	struct tg3_napi *tnapi = dev_id;
7573	struct tg3 *tp = tnapi->tp;
7574	struct tg3_hw_status *sblk = tnapi->hw_status;
7575	unsigned int handled = 1;
7576
7577	/* In INTx mode, it is possible for the interrupt to arrive at
7578	 * the CPU before the status block posted prior to the interrupt.
7579	 * Reading the PCI State register will confirm whether the
7580	 * interrupt is ours and will flush the status block.
7581	 */
7582	if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7583		if (tg3_flag(tp, CHIP_RESETTING) ||
7584		    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7585			handled = 0;
7586			goto out;
7587		}
7588	}
7589
7590	/*
7591	 * writing any value to intr-mbox-0 clears PCI INTA# and
7592	 * chip-internal interrupt pending events.
7593	 * writing non-zero to intr-mbox-0 additional tells the
7594	 * NIC to stop sending us irqs, engaging "in-intr-handler"
7595	 * event coalescing.
7596	 *
7597	 * Flush the mailbox to de-assert the IRQ immediately to prevent
7598	 * spurious interrupts.  The flush impacts performance but
7599	 * excessive spurious interrupts can be worse in some cases.
7600	 */
7601	tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7602
7603	/*
7604	 * In a shared interrupt configuration, sometimes other devices'
7605	 * interrupts will scream.  We record the current status tag here
7606	 * so that the above check can report that the screaming interrupts
7607	 * are unhandled.  Eventually they will be silenced.
7608	 */
7609	tnapi->last_irq_tag = sblk->status_tag;
7610
7611	if (tg3_irq_sync(tp))
7612		goto out;
7613
7614	prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7615
7616	napi_schedule(&tnapi->napi);
7617
7618out:
7619	return IRQ_RETVAL(handled);
7620}
7621
7622/* ISR for interrupt test */
7623static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7624{
7625	struct tg3_napi *tnapi = dev_id;
7626	struct tg3 *tp = tnapi->tp;
7627	struct tg3_hw_status *sblk = tnapi->hw_status;
7628
7629	if ((sblk->status & SD_STATUS_UPDATED) ||
7630	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7631		tg3_disable_ints(tp);
7632		return IRQ_RETVAL(1);
7633	}
7634	return IRQ_RETVAL(0);
7635}
7636
7637#ifdef CONFIG_NET_POLL_CONTROLLER
7638static void tg3_poll_controller(struct net_device *dev)
7639{
7640	int i;
7641	struct tg3 *tp = netdev_priv(dev);
7642
7643	if (tg3_irq_sync(tp))
7644		return;
7645
7646	for (i = 0; i < tp->irq_cnt; i++)
7647		tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7648}
7649#endif
7650
7651static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue)
7652{
7653	struct tg3 *tp = netdev_priv(dev);
7654
7655	if (netif_msg_tx_err(tp)) {
7656		netdev_err(dev, "transmit timed out, resetting\n");
7657		tg3_dump_state(tp);
7658	}
7659
7660	tg3_reset_task_schedule(tp);
7661}
7662
7663/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7664static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7665{
7666	u32 base = (u32) mapping & 0xffffffff;
7667
7668	return base + len + 8 < base;
7669}
7670
7671/* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7672 * of any 4GB boundaries: 4G, 8G, etc
7673 */
7674static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7675					   u32 len, u32 mss)
7676{
7677	if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7678		u32 base = (u32) mapping & 0xffffffff;
7679
7680		return ((base + len + (mss & 0x3fff)) < base);
7681	}
7682	return 0;
7683}
7684
7685/* Test for DMA addresses > 40-bit */
7686static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7687					  int len)
7688{
7689#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7690	if (tg3_flag(tp, 40BIT_DMA_BUG))
7691		return ((u64) mapping + len) > DMA_BIT_MASK(40);
7692	return 0;
7693#else
7694	return 0;
7695#endif
7696}
7697
7698static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7699				 dma_addr_t mapping, u32 len, u32 flags,
7700				 u32 mss, u32 vlan)
7701{
7702	txbd->addr_hi = ((u64) mapping >> 32);
7703	txbd->addr_lo = ((u64) mapping & 0xffffffff);
7704	txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7705	txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7706}
7707
7708static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7709			    dma_addr_t map, u32 len, u32 flags,
7710			    u32 mss, u32 vlan)
7711{
7712	struct tg3 *tp = tnapi->tp;
7713	bool hwbug = false;
7714
7715	if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7716		hwbug = true;
7717
7718	if (tg3_4g_overflow_test(map, len))
7719		hwbug = true;
7720
7721	if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7722		hwbug = true;
7723
7724	if (tg3_40bit_overflow_test(tp, map, len))
7725		hwbug = true;
7726
7727	if (tp->dma_limit) {
7728		u32 prvidx = *entry;
7729		u32 tmp_flag = flags & ~TXD_FLAG_END;
7730		while (len > tp->dma_limit && *budget) {
7731			u32 frag_len = tp->dma_limit;
7732			len -= tp->dma_limit;
7733
7734			/* Avoid the 8byte DMA problem */
7735			if (len <= 8) {
7736				len += tp->dma_limit / 2;
7737				frag_len = tp->dma_limit / 2;
7738			}
7739
7740			tnapi->tx_buffers[*entry].fragmented = true;
7741
7742			tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7743				      frag_len, tmp_flag, mss, vlan);
7744			*budget -= 1;
7745			prvidx = *entry;
7746			*entry = NEXT_TX(*entry);
7747
7748			map += frag_len;
7749		}
7750
7751		if (len) {
7752			if (*budget) {
7753				tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7754					      len, flags, mss, vlan);
7755				*budget -= 1;
7756				*entry = NEXT_TX(*entry);
7757			} else {
7758				hwbug = true;
7759				tnapi->tx_buffers[prvidx].fragmented = false;
7760			}
7761		}
7762	} else {
7763		tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7764			      len, flags, mss, vlan);
7765		*entry = NEXT_TX(*entry);
7766	}
7767
7768	return hwbug;
7769}
7770
7771static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7772{
7773	int i;
7774	struct sk_buff *skb;
7775	struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7776
7777	skb = txb->skb;
7778	txb->skb = NULL;
7779
7780	pci_unmap_single(tnapi->tp->pdev,
7781			 dma_unmap_addr(txb, mapping),
7782			 skb_headlen(skb),
7783			 PCI_DMA_TODEVICE);
7784
7785	while (txb->fragmented) {
7786		txb->fragmented = false;
7787		entry = NEXT_TX(entry);
7788		txb = &tnapi->tx_buffers[entry];
7789	}
7790
7791	for (i = 0; i <= last; i++) {
7792		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7793
7794		entry = NEXT_TX(entry);
7795		txb = &tnapi->tx_buffers[entry];
7796
7797		pci_unmap_page(tnapi->tp->pdev,
7798			       dma_unmap_addr(txb, mapping),
7799			       skb_frag_size(frag), PCI_DMA_TODEVICE);
7800
7801		while (txb->fragmented) {
7802			txb->fragmented = false;
7803			entry = NEXT_TX(entry);
7804			txb = &tnapi->tx_buffers[entry];
7805		}
7806	}
7807}
7808
7809/* Workaround 4GB and 40-bit hardware DMA bugs. */
7810static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7811				       struct sk_buff **pskb,
7812				       u32 *entry, u32 *budget,
7813				       u32 base_flags, u32 mss, u32 vlan)
7814{
7815	struct tg3 *tp = tnapi->tp;
7816	struct sk_buff *new_skb, *skb = *pskb;
7817	dma_addr_t new_addr = 0;
7818	int ret = 0;
7819
7820	if (tg3_asic_rev(tp) != ASIC_REV_5701)
7821		new_skb = skb_copy(skb, GFP_ATOMIC);
7822	else {
7823		int more_headroom = 4 - ((unsigned long)skb->data & 3);
7824
7825		new_skb = skb_copy_expand(skb,
7826					  skb_headroom(skb) + more_headroom,
7827					  skb_tailroom(skb), GFP_ATOMIC);
7828	}
7829
7830	if (!new_skb) {
7831		ret = -1;
7832	} else {
7833		/* New SKB is guaranteed to be linear. */
7834		new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
7835					  PCI_DMA_TODEVICE);
7836		/* Make sure the mapping succeeded */
7837		if (pci_dma_mapping_error(tp->pdev, new_addr)) {
7838			dev_kfree_skb_any(new_skb);
7839			ret = -1;
7840		} else {
7841			u32 save_entry = *entry;
7842
7843			base_flags |= TXD_FLAG_END;
7844
7845			tnapi->tx_buffers[*entry].skb = new_skb;
7846			dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7847					   mapping, new_addr);
7848
7849			if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7850					    new_skb->len, base_flags,
7851					    mss, vlan)) {
7852				tg3_tx_skb_unmap(tnapi, save_entry, -1);
7853				dev_kfree_skb_any(new_skb);
7854				ret = -1;
7855			}
7856		}
7857	}
7858
7859	dev_consume_skb_any(skb);
7860	*pskb = new_skb;
7861	return ret;
7862}
7863
7864static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7865{
7866	/* Check if we will never have enough descriptors,
7867	 * as gso_segs can be more than current ring size
7868	 */
7869	return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7870}
7871
7872static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7873
7874/* Use GSO to workaround all TSO packets that meet HW bug conditions
7875 * indicated in tg3_tx_frag_set()
7876 */
7877static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7878		       struct netdev_queue *txq, struct sk_buff *skb)
7879{
7880	u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7881	struct sk_buff *segs, *seg, *next;
7882
7883	/* Estimate the number of fragments in the worst case */
7884	if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7885		netif_tx_stop_queue(txq);
7886
7887		/* netif_tx_stop_queue() must be done before checking
7888		 * checking tx index in tg3_tx_avail() below, because in
7889		 * tg3_tx(), we update tx index before checking for
7890		 * netif_tx_queue_stopped().
7891		 */
7892		smp_mb();
7893		if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7894			return NETDEV_TX_BUSY;
7895
7896		netif_tx_wake_queue(txq);
7897	}
7898
7899	segs = skb_gso_segment(skb, tp->dev->features &
7900				    ~(NETIF_F_TSO | NETIF_F_TSO6));
7901	if (IS_ERR(segs) || !segs) {
7902		tnapi->tx_dropped++;
7903		goto tg3_tso_bug_end;
7904	}
7905
7906	skb_list_walk_safe(segs, seg, next) {
7907		skb_mark_not_on_list(seg);
7908		tg3_start_xmit(seg, tp->dev);
7909	}
7910
7911tg3_tso_bug_end:
7912	dev_consume_skb_any(skb);
7913
7914	return NETDEV_TX_OK;
7915}
7916
7917/* hard_start_xmit for all devices */
7918static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7919{
7920	struct tg3 *tp = netdev_priv(dev);
7921	u32 len, entry, base_flags, mss, vlan = 0;
7922	u32 budget;
7923	int i = -1, would_hit_hwbug;
7924	dma_addr_t mapping;
7925	struct tg3_napi *tnapi;
7926	struct netdev_queue *txq;
7927	unsigned int last;
7928	struct iphdr *iph = NULL;
7929	struct tcphdr *tcph = NULL;
7930	__sum16 tcp_csum = 0, ip_csum = 0;
7931	__be16 ip_tot_len = 0;
7932
7933	txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7934	tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7935	if (tg3_flag(tp, ENABLE_TSS))
7936		tnapi++;
7937
7938	budget = tg3_tx_avail(tnapi);
7939
7940	/* We are running in BH disabled context with netif_tx_lock
7941	 * and TX reclaim runs via tp->napi.poll inside of a software
7942	 * interrupt.  Furthermore, IRQ processing runs lockless so we have
7943	 * no IRQ context deadlocks to worry about either.  Rejoice!
7944	 */
7945	if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7946		if (!netif_tx_queue_stopped(txq)) {
7947			netif_tx_stop_queue(txq);
7948
7949			/* This is a hard error, log it. */
7950			netdev_err(dev,
7951				   "BUG! Tx Ring full when queue awake!\n");
7952		}
7953		return NETDEV_TX_BUSY;
7954	}
7955
7956	entry = tnapi->tx_prod;
7957	base_flags = 0;
7958
7959	mss = skb_shinfo(skb)->gso_size;
7960	if (mss) {
7961		u32 tcp_opt_len, hdr_len;
7962
7963		if (skb_cow_head(skb, 0))
7964			goto drop;
7965
7966		iph = ip_hdr(skb);
7967		tcp_opt_len = tcp_optlen(skb);
7968
7969		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7970
7971		/* HW/FW can not correctly segment packets that have been
7972		 * vlan encapsulated.
7973		 */
7974		if (skb->protocol == htons(ETH_P_8021Q) ||
7975		    skb->protocol == htons(ETH_P_8021AD)) {
7976			if (tg3_tso_bug_gso_check(tnapi, skb))
7977				return tg3_tso_bug(tp, tnapi, txq, skb);
7978			goto drop;
7979		}
7980
7981		if (!skb_is_gso_v6(skb)) {
7982			if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7983			    tg3_flag(tp, TSO_BUG)) {
7984				if (tg3_tso_bug_gso_check(tnapi, skb))
7985					return tg3_tso_bug(tp, tnapi, txq, skb);
7986				goto drop;
7987			}
7988			ip_csum = iph->check;
7989			ip_tot_len = iph->tot_len;
7990			iph->check = 0;
7991			iph->tot_len = htons(mss + hdr_len);
7992		}
7993
7994		base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7995			       TXD_FLAG_CPU_POST_DMA);
7996
7997		tcph = tcp_hdr(skb);
7998		tcp_csum = tcph->check;
7999
8000		if (tg3_flag(tp, HW_TSO_1) ||
8001		    tg3_flag(tp, HW_TSO_2) ||
8002		    tg3_flag(tp, HW_TSO_3)) {
8003			tcph->check = 0;
8004			base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
8005		} else {
8006			tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
8007							 0, IPPROTO_TCP, 0);
8008		}
8009
8010		if (tg3_flag(tp, HW_TSO_3)) {
8011			mss |= (hdr_len & 0xc) << 12;
8012			if (hdr_len & 0x10)
8013				base_flags |= 0x00000010;
8014			base_flags |= (hdr_len & 0x3e0) << 5;
8015		} else if (tg3_flag(tp, HW_TSO_2))
8016			mss |= hdr_len << 9;
8017		else if (tg3_flag(tp, HW_TSO_1) ||
8018			 tg3_asic_rev(tp) == ASIC_REV_5705) {
8019			if (tcp_opt_len || iph->ihl > 5) {
8020				int tsflags;
8021
8022				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8023				mss |= (tsflags << 11);
8024			}
8025		} else {
8026			if (tcp_opt_len || iph->ihl > 5) {
8027				int tsflags;
8028
8029				tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8030				base_flags |= tsflags << 12;
8031			}
8032		}
8033	} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8034		/* HW/FW can not correctly checksum packets that have been
8035		 * vlan encapsulated.
8036		 */
8037		if (skb->protocol == htons(ETH_P_8021Q) ||
8038		    skb->protocol == htons(ETH_P_8021AD)) {
8039			if (skb_checksum_help(skb))
8040				goto drop;
8041		} else  {
8042			base_flags |= TXD_FLAG_TCPUDP_CSUM;
8043		}
8044	}
8045
8046	if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8047	    !mss && skb->len > VLAN_ETH_FRAME_LEN)
8048		base_flags |= TXD_FLAG_JMB_PKT;
8049
8050	if (skb_vlan_tag_present(skb)) {
8051		base_flags |= TXD_FLAG_VLAN;
8052		vlan = skb_vlan_tag_get(skb);
8053	}
8054
8055	if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8056	    tg3_flag(tp, TX_TSTAMP_EN)) {
8057		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8058		base_flags |= TXD_FLAG_HWTSTAMP;
8059	}
8060
8061	len = skb_headlen(skb);
8062
8063	mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
8064	if (pci_dma_mapping_error(tp->pdev, mapping))
8065		goto drop;
8066
8067
8068	tnapi->tx_buffers[entry].skb = skb;
8069	dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8070
8071	would_hit_hwbug = 0;
8072
8073	if (tg3_flag(tp, 5701_DMA_BUG))
8074		would_hit_hwbug = 1;
8075
8076	if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8077			  ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8078			    mss, vlan)) {
8079		would_hit_hwbug = 1;
8080	} else if (skb_shinfo(skb)->nr_frags > 0) {
8081		u32 tmp_mss = mss;
8082
8083		if (!tg3_flag(tp, HW_TSO_1) &&
8084		    !tg3_flag(tp, HW_TSO_2) &&
8085		    !tg3_flag(tp, HW_TSO_3))
8086			tmp_mss = 0;
8087
8088		/* Now loop through additional data
8089		 * fragments, and queue them.
8090		 */
8091		last = skb_shinfo(skb)->nr_frags - 1;
8092		for (i = 0; i <= last; i++) {
8093			skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8094
8095			len = skb_frag_size(frag);
8096			mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8097						   len, DMA_TO_DEVICE);
8098
8099			tnapi->tx_buffers[entry].skb = NULL;
8100			dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8101					   mapping);
8102			if (dma_mapping_error(&tp->pdev->dev, mapping))
8103				goto dma_error;
8104
8105			if (!budget ||
8106			    tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8107					    len, base_flags |
8108					    ((i == last) ? TXD_FLAG_END : 0),
8109					    tmp_mss, vlan)) {
8110				would_hit_hwbug = 1;
8111				break;
8112			}
8113		}
8114	}
8115
8116	if (would_hit_hwbug) {
8117		tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8118
8119		if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8120			/* If it's a TSO packet, do GSO instead of
8121			 * allocating and copying to a large linear SKB
8122			 */
8123			if (ip_tot_len) {
8124				iph->check = ip_csum;
8125				iph->tot_len = ip_tot_len;
8126			}
8127			tcph->check = tcp_csum;
8128			return tg3_tso_bug(tp, tnapi, txq, skb);
8129		}
8130
8131		/* If the workaround fails due to memory/mapping
8132		 * failure, silently drop this packet.
8133		 */
8134		entry = tnapi->tx_prod;
8135		budget = tg3_tx_avail(tnapi);
8136		if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8137						base_flags, mss, vlan))
8138			goto drop_nofree;
8139	}
8140
8141	skb_tx_timestamp(skb);
8142	netdev_tx_sent_queue(txq, skb->len);
8143
8144	/* Sync BD data before updating mailbox */
8145	wmb();
8146
8147	tnapi->tx_prod = entry;
8148	if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8149		netif_tx_stop_queue(txq);
8150
8151		/* netif_tx_stop_queue() must be done before checking
8152		 * checking tx index in tg3_tx_avail() below, because in
8153		 * tg3_tx(), we update tx index before checking for
8154		 * netif_tx_queue_stopped().
8155		 */
8156		smp_mb();
8157		if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8158			netif_tx_wake_queue(txq);
8159	}
8160
8161	if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8162		/* Packets are ready, update Tx producer idx on card. */
8163		tw32_tx_mbox(tnapi->prodmbox, entry);
8164	}
8165
8166	return NETDEV_TX_OK;
8167
8168dma_error:
8169	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8170	tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8171drop:
8172	dev_kfree_skb_any(skb);
8173drop_nofree:
8174	tnapi->tx_dropped++;
8175	return NETDEV_TX_OK;
8176}
8177
8178static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8179{
8180	if (enable) {
8181		tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8182				  MAC_MODE_PORT_MODE_MASK);
8183
8184		tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8185
8186		if (!tg3_flag(tp, 5705_PLUS))
8187			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8188
8189		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8190			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8191		else
8192			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8193	} else {
8194		tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8195
8196		if (tg3_flag(tp, 5705_PLUS) ||
8197		    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8198		    tg3_asic_rev(tp) == ASIC_REV_5700)
8199			tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8200	}
8201
8202	tw32(MAC_MODE, tp->mac_mode);
8203	udelay(40);
8204}
8205
8206static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8207{
8208	u32 val, bmcr, mac_mode, ptest = 0;
8209
8210	tg3_phy_toggle_apd(tp, false);
8211	tg3_phy_toggle_automdix(tp, false);
8212
8213	if (extlpbk && tg3_phy_set_extloopbk(tp))
8214		return -EIO;
8215
8216	bmcr = BMCR_FULLDPLX;
8217	switch (speed) {
8218	case SPEED_10:
8219		break;
8220	case SPEED_100:
8221		bmcr |= BMCR_SPEED100;
8222		break;
8223	case SPEED_1000:
8224	default:
8225		if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8226			speed = SPEED_100;
8227			bmcr |= BMCR_SPEED100;
8228		} else {
8229			speed = SPEED_1000;
8230			bmcr |= BMCR_SPEED1000;
8231		}
8232	}
8233
8234	if (extlpbk) {
8235		if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8236			tg3_readphy(tp, MII_CTRL1000, &val);
8237			val |= CTL1000_AS_MASTER |
8238			       CTL1000_ENABLE_MASTER;
8239			tg3_writephy(tp, MII_CTRL1000, val);
8240		} else {
8241			ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8242				MII_TG3_FET_PTEST_TRIM_2;
8243			tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8244		}
8245	} else
8246		bmcr |= BMCR_LOOPBACK;
8247
8248	tg3_writephy(tp, MII_BMCR, bmcr);
8249
8250	/* The write needs to be flushed for the FETs */
8251	if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8252		tg3_readphy(tp, MII_BMCR, &bmcr);
8253
8254	udelay(40);
8255
8256	if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8257	    tg3_asic_rev(tp) == ASIC_REV_5785) {
8258		tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8259			     MII_TG3_FET_PTEST_FRC_TX_LINK |
8260			     MII_TG3_FET_PTEST_FRC_TX_LOCK);
8261
8262		/* The write needs to be flushed for the AC131 */
8263		tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8264	}
8265
8266	/* Reset to prevent losing 1st rx packet intermittently */
8267	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8268	    tg3_flag(tp, 5780_CLASS)) {
8269		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8270		udelay(10);
8271		tw32_f(MAC_RX_MODE, tp->rx_mode);
8272	}
8273
8274	mac_mode = tp->mac_mode &
8275		   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8276	if (speed == SPEED_1000)
8277		mac_mode |= MAC_MODE_PORT_MODE_GMII;
8278	else
8279		mac_mode |= MAC_MODE_PORT_MODE_MII;
8280
8281	if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8282		u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8283
8284		if (masked_phy_id == TG3_PHY_ID_BCM5401)
8285			mac_mode &= ~MAC_MODE_LINK_POLARITY;
8286		else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8287			mac_mode |= MAC_MODE_LINK_POLARITY;
8288
8289		tg3_writephy(tp, MII_TG3_EXT_CTRL,
8290			     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8291	}
8292
8293	tw32(MAC_MODE, mac_mode);
8294	udelay(40);
8295
8296	return 0;
8297}
8298
8299static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8300{
8301	struct tg3 *tp = netdev_priv(dev);
8302
8303	if (features & NETIF_F_LOOPBACK) {
8304		if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8305			return;
8306
8307		spin_lock_bh(&tp->lock);
8308		tg3_mac_loopback(tp, true);
8309		netif_carrier_on(tp->dev);
8310		spin_unlock_bh(&tp->lock);
8311		netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8312	} else {
8313		if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8314			return;
8315
8316		spin_lock_bh(&tp->lock);
8317		tg3_mac_loopback(tp, false);
8318		/* Force link status check */
8319		tg3_setup_phy(tp, true);
8320		spin_unlock_bh(&tp->lock);
8321		netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8322	}
8323}
8324
8325static netdev_features_t tg3_fix_features(struct net_device *dev,
8326	netdev_features_t features)
8327{
8328	struct tg3 *tp = netdev_priv(dev);
8329
8330	if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8331		features &= ~NETIF_F_ALL_TSO;
8332
8333	return features;
8334}
8335
8336static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8337{
8338	netdev_features_t changed = dev->features ^ features;
8339
8340	if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8341		tg3_set_loopback(dev, features);
8342
8343	return 0;
8344}
8345
8346static void tg3_rx_prodring_free(struct tg3 *tp,
8347				 struct tg3_rx_prodring_set *tpr)
8348{
8349	int i;
8350
8351	if (tpr != &tp->napi[0].prodring) {
8352		for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8353		     i = (i + 1) & tp->rx_std_ring_mask)
8354			tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8355					tp->rx_pkt_map_sz);
8356
8357		if (tg3_flag(tp, JUMBO_CAPABLE)) {
8358			for (i = tpr->rx_jmb_cons_idx;
8359			     i != tpr->rx_jmb_prod_idx;
8360			     i = (i + 1) & tp->rx_jmb_ring_mask) {
8361				tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8362						TG3_RX_JMB_MAP_SZ);
8363			}
8364		}
8365
8366		return;
8367	}
8368
8369	for (i = 0; i <= tp->rx_std_ring_mask; i++)
8370		tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8371				tp->rx_pkt_map_sz);
8372
8373	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8374		for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8375			tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8376					TG3_RX_JMB_MAP_SZ);
8377	}
8378}
8379
8380/* Initialize rx rings for packet processing.
8381 *
8382 * The chip has been shut down and the driver detached from
8383 * the networking, so no interrupts or new tx packets will
8384 * end up in the driver.  tp->{tx,}lock are held and thus
8385 * we may not sleep.
8386 */
8387static int tg3_rx_prodring_alloc(struct tg3 *tp,
8388				 struct tg3_rx_prodring_set *tpr)
8389{
8390	u32 i, rx_pkt_dma_sz;
8391
8392	tpr->rx_std_cons_idx = 0;
8393	tpr->rx_std_prod_idx = 0;
8394	tpr->rx_jmb_cons_idx = 0;
8395	tpr->rx_jmb_prod_idx = 0;
8396
8397	if (tpr != &tp->napi[0].prodring) {
8398		memset(&tpr->rx_std_buffers[0], 0,
8399		       TG3_RX_STD_BUFF_RING_SIZE(tp));
8400		if (tpr->rx_jmb_buffers)
8401			memset(&tpr->rx_jmb_buffers[0], 0,
8402			       TG3_RX_JMB_BUFF_RING_SIZE(tp));
8403		goto done;
8404	}
8405
8406	/* Zero out all descriptors. */
8407	memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8408
8409	rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8410	if (tg3_flag(tp, 5780_CLASS) &&
8411	    tp->dev->mtu > ETH_DATA_LEN)
8412		rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8413	tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8414
8415	/* Initialize invariants of the rings, we only set this
8416	 * stuff once.  This works because the card does not
8417	 * write into the rx buffer posting rings.
8418	 */
8419	for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8420		struct tg3_rx_buffer_desc *rxd;
8421
8422		rxd = &tpr->rx_std[i];
8423		rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8424		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8425		rxd->opaque = (RXD_OPAQUE_RING_STD |
8426			       (i << RXD_OPAQUE_INDEX_SHIFT));
8427	}
8428
8429	/* Now allocate fresh SKBs for each rx ring. */
8430	for (i = 0; i < tp->rx_pending; i++) {
8431		unsigned int frag_size;
8432
8433		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8434				      &frag_size) < 0) {
8435			netdev_warn(tp->dev,
8436				    "Using a smaller RX standard ring. Only "
8437				    "%d out of %d buffers were allocated "
8438				    "successfully\n", i, tp->rx_pending);
8439			if (i == 0)
8440				goto initfail;
8441			tp->rx_pending = i;
8442			break;
8443		}
8444	}
8445
8446	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8447		goto done;
8448
8449	memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8450
8451	if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8452		goto done;
8453
8454	for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8455		struct tg3_rx_buffer_desc *rxd;
8456
8457		rxd = &tpr->rx_jmb[i].std;
8458		rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8459		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8460				  RXD_FLAG_JUMBO;
8461		rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8462		       (i << RXD_OPAQUE_INDEX_SHIFT));
8463	}
8464
8465	for (i = 0; i < tp->rx_jumbo_pending; i++) {
8466		unsigned int frag_size;
8467
8468		if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8469				      &frag_size) < 0) {
8470			netdev_warn(tp->dev,
8471				    "Using a smaller RX jumbo ring. Only %d "
8472				    "out of %d buffers were allocated "
8473				    "successfully\n", i, tp->rx_jumbo_pending);
8474			if (i == 0)
8475				goto initfail;
8476			tp->rx_jumbo_pending = i;
8477			break;
8478		}
8479	}
8480
8481done:
8482	return 0;
8483
8484initfail:
8485	tg3_rx_prodring_free(tp, tpr);
8486	return -ENOMEM;
8487}
8488
8489static void tg3_rx_prodring_fini(struct tg3 *tp,
8490				 struct tg3_rx_prodring_set *tpr)
8491{
8492	kfree(tpr->rx_std_buffers);
8493	tpr->rx_std_buffers = NULL;
8494	kfree(tpr->rx_jmb_buffers);
8495	tpr->rx_jmb_buffers = NULL;
8496	if (tpr->rx_std) {
8497		dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8498				  tpr->rx_std, tpr->rx_std_mapping);
8499		tpr->rx_std = NULL;
8500	}
8501	if (tpr->rx_jmb) {
8502		dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8503				  tpr->rx_jmb, tpr->rx_jmb_mapping);
8504		tpr->rx_jmb = NULL;
8505	}
8506}
8507
8508static int tg3_rx_prodring_init(struct tg3 *tp,
8509				struct tg3_rx_prodring_set *tpr)
8510{
8511	tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8512				      GFP_KERNEL);
8513	if (!tpr->rx_std_buffers)
8514		return -ENOMEM;
8515
8516	tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8517					 TG3_RX_STD_RING_BYTES(tp),
8518					 &tpr->rx_std_mapping,
8519					 GFP_KERNEL);
8520	if (!tpr->rx_std)
8521		goto err_out;
8522
8523	if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8524		tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8525					      GFP_KERNEL);
8526		if (!tpr->rx_jmb_buffers)
8527			goto err_out;
8528
8529		tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8530						 TG3_RX_JMB_RING_BYTES(tp),
8531						 &tpr->rx_jmb_mapping,
8532						 GFP_KERNEL);
8533		if (!tpr->rx_jmb)
8534			goto err_out;
8535	}
8536
8537	return 0;
8538
8539err_out:
8540	tg3_rx_prodring_fini(tp, tpr);
8541	return -ENOMEM;
8542}
8543
8544/* Free up pending packets in all rx/tx rings.
8545 *
8546 * The chip has been shut down and the driver detached from
8547 * the networking, so no interrupts or new tx packets will
8548 * end up in the driver.  tp->{tx,}lock is not held and we are not
8549 * in an interrupt context and thus may sleep.
8550 */
8551static void tg3_free_rings(struct tg3 *tp)
8552{
8553	int i, j;
8554
8555	for (j = 0; j < tp->irq_cnt; j++) {
8556		struct tg3_napi *tnapi = &tp->napi[j];
8557
8558		tg3_rx_prodring_free(tp, &tnapi->prodring);
8559
8560		if (!tnapi->tx_buffers)
8561			continue;
8562
8563		for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8564			struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8565
8566			if (!skb)
8567				continue;
8568
8569			tg3_tx_skb_unmap(tnapi, i,
8570					 skb_shinfo(skb)->nr_frags - 1);
8571
8572			dev_consume_skb_any(skb);
8573		}
8574		netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8575	}
8576}
8577
8578/* Initialize tx/rx rings for packet processing.
8579 *
8580 * The chip has been shut down and the driver detached from
8581 * the networking, so no interrupts or new tx packets will
8582 * end up in the driver.  tp->{tx,}lock are held and thus
8583 * we may not sleep.
8584 */
8585static int tg3_init_rings(struct tg3 *tp)
8586{
8587	int i;
8588
8589	/* Free up all the SKBs. */
8590	tg3_free_rings(tp);
8591
8592	for (i = 0; i < tp->irq_cnt; i++) {
8593		struct tg3_napi *tnapi = &tp->napi[i];
8594
8595		tnapi->last_tag = 0;
8596		tnapi->last_irq_tag = 0;
8597		tnapi->hw_status->status = 0;
8598		tnapi->hw_status->status_tag = 0;
8599		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8600
8601		tnapi->tx_prod = 0;
8602		tnapi->tx_cons = 0;
8603		if (tnapi->tx_ring)
8604			memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8605
8606		tnapi->rx_rcb_ptr = 0;
8607		if (tnapi->rx_rcb)
8608			memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8609
8610		if (tnapi->prodring.rx_std &&
8611		    tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8612			tg3_free_rings(tp);
8613			return -ENOMEM;
8614		}
8615	}
8616
8617	return 0;
8618}
8619
8620static void tg3_mem_tx_release(struct tg3 *tp)
8621{
8622	int i;
8623
8624	for (i = 0; i < tp->irq_max; i++) {
8625		struct tg3_napi *tnapi = &tp->napi[i];
8626
8627		if (tnapi->tx_ring) {
8628			dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8629				tnapi->tx_ring, tnapi->tx_desc_mapping);
8630			tnapi->tx_ring = NULL;
8631		}
8632
8633		kfree(tnapi->tx_buffers);
8634		tnapi->tx_buffers = NULL;
8635	}
8636}
8637
8638static int tg3_mem_tx_acquire(struct tg3 *tp)
8639{
8640	int i;
8641	struct tg3_napi *tnapi = &tp->napi[0];
8642
8643	/* If multivector TSS is enabled, vector 0 does not handle
8644	 * tx interrupts.  Don't allocate any resources for it.
8645	 */
8646	if (tg3_flag(tp, ENABLE_TSS))
8647		tnapi++;
8648
8649	for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8650		tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
8651					    sizeof(struct tg3_tx_ring_info),
8652					    GFP_KERNEL);
8653		if (!tnapi->tx_buffers)
8654			goto err_out;
8655
8656		tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8657						    TG3_TX_RING_BYTES,
8658						    &tnapi->tx_desc_mapping,
8659						    GFP_KERNEL);
8660		if (!tnapi->tx_ring)
8661			goto err_out;
8662	}
8663
8664	return 0;
8665
8666err_out:
8667	tg3_mem_tx_release(tp);
8668	return -ENOMEM;
8669}
8670
8671static void tg3_mem_rx_release(struct tg3 *tp)
8672{
8673	int i;
8674
8675	for (i = 0; i < tp->irq_max; i++) {
8676		struct tg3_napi *tnapi = &tp->napi[i];
8677
8678		tg3_rx_prodring_fini(tp, &tnapi->prodring);
8679
8680		if (!tnapi->rx_rcb)
8681			continue;
8682
8683		dma_free_coherent(&tp->pdev->dev,
8684				  TG3_RX_RCB_RING_BYTES(tp),
8685				  tnapi->rx_rcb,
8686				  tnapi->rx_rcb_mapping);
8687		tnapi->rx_rcb = NULL;
8688	}
8689}
8690
8691static int tg3_mem_rx_acquire(struct tg3 *tp)
8692{
8693	unsigned int i, limit;
8694
8695	limit = tp->rxq_cnt;
8696
8697	/* If RSS is enabled, we need a (dummy) producer ring
8698	 * set on vector zero.  This is the true hw prodring.
8699	 */
8700	if (tg3_flag(tp, ENABLE_RSS))
8701		limit++;
8702
8703	for (i = 0; i < limit; i++) {
8704		struct tg3_napi *tnapi = &tp->napi[i];
8705
8706		if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8707			goto err_out;
8708
8709		/* If multivector RSS is enabled, vector 0
8710		 * does not handle rx or tx interrupts.
8711		 * Don't allocate any resources for it.
8712		 */
8713		if (!i && tg3_flag(tp, ENABLE_RSS))
8714			continue;
8715
8716		tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
8717						   TG3_RX_RCB_RING_BYTES(tp),
8718						   &tnapi->rx_rcb_mapping,
8719						   GFP_KERNEL);
8720		if (!tnapi->rx_rcb)
8721			goto err_out;
8722	}
8723
8724	return 0;
8725
8726err_out:
8727	tg3_mem_rx_release(tp);
8728	return -ENOMEM;
8729}
8730
8731/*
8732 * Must not be invoked with interrupt sources disabled and
8733 * the hardware shutdown down.
8734 */
8735static void tg3_free_consistent(struct tg3 *tp)
8736{
8737	int i;
8738
8739	for (i = 0; i < tp->irq_cnt; i++) {
8740		struct tg3_napi *tnapi = &tp->napi[i];
8741
8742		if (tnapi->hw_status) {
8743			dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8744					  tnapi->hw_status,
8745					  tnapi->status_mapping);
8746			tnapi->hw_status = NULL;
8747		}
8748	}
8749
8750	tg3_mem_rx_release(tp);
8751	tg3_mem_tx_release(tp);
8752
8753	/* tp->hw_stats can be referenced safely:
8754	 *     1. under rtnl_lock
8755	 *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8756	 */
8757	if (tp->hw_stats) {
8758		dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8759				  tp->hw_stats, tp->stats_mapping);
8760		tp->hw_stats = NULL;
8761	}
8762}
8763
8764/*
8765 * Must not be invoked with interrupt sources disabled and
8766 * the hardware shutdown down.  Can sleep.
8767 */
8768static int tg3_alloc_consistent(struct tg3 *tp)
8769{
8770	int i;
8771
8772	tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8773					  sizeof(struct tg3_hw_stats),
8774					  &tp->stats_mapping, GFP_KERNEL);
8775	if (!tp->hw_stats)
8776		goto err_out;
8777
8778	for (i = 0; i < tp->irq_cnt; i++) {
8779		struct tg3_napi *tnapi = &tp->napi[i];
8780		struct tg3_hw_status *sblk;
8781
8782		tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8783						      TG3_HW_STATUS_SIZE,
8784						      &tnapi->status_mapping,
8785						      GFP_KERNEL);
8786		if (!tnapi->hw_status)
8787			goto err_out;
8788
8789		sblk = tnapi->hw_status;
8790
8791		if (tg3_flag(tp, ENABLE_RSS)) {
8792			u16 *prodptr = NULL;
8793
8794			/*
8795			 * When RSS is enabled, the status block format changes
8796			 * slightly.  The "rx_jumbo_consumer", "reserved",
8797			 * and "rx_mini_consumer" members get mapped to the
8798			 * other three rx return ring producer indexes.
8799			 */
8800			switch (i) {
8801			case 1:
8802				prodptr = &sblk->idx[0].rx_producer;
8803				break;
8804			case 2:
8805				prodptr = &sblk->rx_jumbo_consumer;
8806				break;
8807			case 3:
8808				prodptr = &sblk->reserved;
8809				break;
8810			case 4:
8811				prodptr = &sblk->rx_mini_consumer;
8812				break;
8813			}
8814			tnapi->rx_rcb_prod_idx = prodptr;
8815		} else {
8816			tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8817		}
8818	}
8819
8820	if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8821		goto err_out;
8822
8823	return 0;
8824
8825err_out:
8826	tg3_free_consistent(tp);
8827	return -ENOMEM;
8828}
8829
8830#define MAX_WAIT_CNT 1000
8831
8832/* To stop a block, clear the enable bit and poll till it
8833 * clears.  tp->lock is held.
8834 */
8835static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8836{
8837	unsigned int i;
8838	u32 val;
8839
8840	if (tg3_flag(tp, 5705_PLUS)) {
8841		switch (ofs) {
8842		case RCVLSC_MODE:
8843		case DMAC_MODE:
8844		case MBFREE_MODE:
8845		case BUFMGR_MODE:
8846		case MEMARB_MODE:
8847			/* We can't enable/disable these bits of the
8848			 * 5705/5750, just say success.
8849			 */
8850			return 0;
8851
8852		default:
8853			break;
8854		}
8855	}
8856
8857	val = tr32(ofs);
8858	val &= ~enable_bit;
8859	tw32_f(ofs, val);
8860
8861	for (i = 0; i < MAX_WAIT_CNT; i++) {
8862		if (pci_channel_offline(tp->pdev)) {
8863			dev_err(&tp->pdev->dev,
8864				"tg3_stop_block device offline, "
8865				"ofs=%lx enable_bit=%x\n",
8866				ofs, enable_bit);
8867			return -ENODEV;
8868		}
8869
8870		udelay(100);
8871		val = tr32(ofs);
8872		if ((val & enable_bit) == 0)
8873			break;
8874	}
8875
8876	if (i == MAX_WAIT_CNT && !silent) {
8877		dev_err(&tp->pdev->dev,
8878			"tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8879			ofs, enable_bit);
8880		return -ENODEV;
8881	}
8882
8883	return 0;
8884}
8885
8886/* tp->lock is held. */
8887static int tg3_abort_hw(struct tg3 *tp, bool silent)
8888{
8889	int i, err;
8890
8891	tg3_disable_ints(tp);
8892
8893	if (pci_channel_offline(tp->pdev)) {
8894		tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8895		tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8896		err = -ENODEV;
8897		goto err_no_dev;
8898	}
8899
8900	tp->rx_mode &= ~RX_MODE_ENABLE;
8901	tw32_f(MAC_RX_MODE, tp->rx_mode);
8902	udelay(10);
8903
8904	err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8905	err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8906	err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8907	err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8908	err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8909	err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8910
8911	err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8912	err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8913	err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8914	err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8915	err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8916	err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8917	err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8918
8919	tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8920	tw32_f(MAC_MODE, tp->mac_mode);
8921	udelay(40);
8922
8923	tp->tx_mode &= ~TX_MODE_ENABLE;
8924	tw32_f(MAC_TX_MODE, tp->tx_mode);
8925
8926	for (i = 0; i < MAX_WAIT_CNT; i++) {
8927		udelay(100);
8928		if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8929			break;
8930	}
8931	if (i >= MAX_WAIT_CNT) {
8932		dev_err(&tp->pdev->dev,
8933			"%s timed out, TX_MODE_ENABLE will not clear "
8934			"MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8935		err |= -ENODEV;
8936	}
8937
8938	err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8939	err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8940	err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8941
8942	tw32(FTQ_RESET, 0xffffffff);
8943	tw32(FTQ_RESET, 0x00000000);
8944
8945	err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8946	err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8947
8948err_no_dev:
8949	for (i = 0; i < tp->irq_cnt; i++) {
8950		struct tg3_napi *tnapi = &tp->napi[i];
8951		if (tnapi->hw_status)
8952			memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8953	}
8954
8955	return err;
8956}
8957
8958/* Save PCI command register before chip reset */
8959static void tg3_save_pci_state(struct tg3 *tp)
8960{
8961	pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8962}
8963
8964/* Restore PCI state after chip reset */
8965static void tg3_restore_pci_state(struct tg3 *tp)
8966{
8967	u32 val;
8968
8969	/* Re-enable indirect register accesses. */
8970	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8971			       tp->misc_host_ctrl);
8972
8973	/* Set MAX PCI retry to zero. */
8974	val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8975	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8976	    tg3_flag(tp, PCIX_MODE))
8977		val |= PCISTATE_RETRY_SAME_DMA;
8978	/* Allow reads and writes to the APE register and memory space. */
8979	if (tg3_flag(tp, ENABLE_APE))
8980		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8981		       PCISTATE_ALLOW_APE_SHMEM_WR |
8982		       PCISTATE_ALLOW_APE_PSPACE_WR;
8983	pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8984
8985	pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8986
8987	if (!tg3_flag(tp, PCI_EXPRESS)) {
8988		pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8989				      tp->pci_cacheline_sz);
8990		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8991				      tp->pci_lat_timer);
8992	}
8993
8994	/* Make sure PCI-X relaxed ordering bit is clear. */
8995	if (tg3_flag(tp, PCIX_MODE)) {
8996		u16 pcix_cmd;
8997
8998		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8999				     &pcix_cmd);
9000		pcix_cmd &= ~PCI_X_CMD_ERO;
9001		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9002				      pcix_cmd);
9003	}
9004
9005	if (tg3_flag(tp, 5780_CLASS)) {
9006
9007		/* Chip reset on 5780 will reset MSI enable bit,
9008		 * so need to restore it.
9009		 */
9010		if (tg3_flag(tp, USING_MSI)) {
9011			u16 ctrl;
9012
9013			pci_read_config_word(tp->pdev,
9014					     tp->msi_cap + PCI_MSI_FLAGS,
9015					     &ctrl);
9016			pci_write_config_word(tp->pdev,
9017					      tp->msi_cap + PCI_MSI_FLAGS,
9018					      ctrl | PCI_MSI_FLAGS_ENABLE);
9019			val = tr32(MSGINT_MODE);
9020			tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
9021		}
9022	}
9023}
9024
9025static void tg3_override_clk(struct tg3 *tp)
9026{
9027	u32 val;
9028
9029	switch (tg3_asic_rev(tp)) {
9030	case ASIC_REV_5717:
9031		val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9032		tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9033		     TG3_CPMU_MAC_ORIDE_ENABLE);
9034		break;
9035
9036	case ASIC_REV_5719:
9037	case ASIC_REV_5720:
9038		tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9039		break;
9040
9041	default:
9042		return;
9043	}
9044}
9045
9046static void tg3_restore_clk(struct tg3 *tp)
9047{
9048	u32 val;
9049
9050	switch (tg3_asic_rev(tp)) {
9051	case ASIC_REV_5717:
9052		val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9053		tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9054		     val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9055		break;
9056
9057	case ASIC_REV_5719:
9058	case ASIC_REV_5720:
9059		val = tr32(TG3_CPMU_CLCK_ORIDE);
9060		tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9061		break;
9062
9063	default:
9064		return;
9065	}
9066}
9067
9068/* tp->lock is held. */
9069static int tg3_chip_reset(struct tg3 *tp)
9070	__releases(tp->lock)
9071	__acquires(tp->lock)
9072{
9073	u32 val;
9074	void (*write_op)(struct tg3 *, u32, u32);
9075	int i, err;
9076
9077	if (!pci_device_is_present(tp->pdev))
9078		return -ENODEV;
9079
9080	tg3_nvram_lock(tp);
9081
9082	tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9083
9084	/* No matching tg3_nvram_unlock() after this because
9085	 * chip reset below will undo the nvram lock.
9086	 */
9087	tp->nvram_lock_cnt = 0;
9088
9089	/* GRC_MISC_CFG core clock reset will clear the memory
9090	 * enable bit in PCI register 4 and the MSI enable bit
9091	 * on some chips, so we save relevant registers here.
9092	 */
9093	tg3_save_pci_state(tp);
9094
9095	if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9096	    tg3_flag(tp, 5755_PLUS))
9097		tw32(GRC_FASTBOOT_PC, 0);
9098
9099	/*
9100	 * We must avoid the readl() that normally takes place.
9101	 * It locks machines, causes machine checks, and other
9102	 * fun things.  So, temporarily disable the 5701
9103	 * hardware workaround, while we do the reset.
9104	 */
9105	write_op = tp->write32;
9106	if (write_op == tg3_write_flush_reg32)
9107		tp->write32 = tg3_write32;
9108
9109	/* Prevent the irq handler from reading or writing PCI registers
9110	 * during chip reset when the memory enable bit in the PCI command
9111	 * register may be cleared.  The chip does not generate interrupt
9112	 * at this time, but the irq handler may still be called due to irq
9113	 * sharing or irqpoll.
9114	 */
9115	tg3_flag_set(tp, CHIP_RESETTING);
9116	for (i = 0; i < tp->irq_cnt; i++) {
9117		struct tg3_napi *tnapi = &tp->napi[i];
9118		if (tnapi->hw_status) {
9119			tnapi->hw_status->status = 0;
9120			tnapi->hw_status->status_tag = 0;
9121		}
9122		tnapi->last_tag = 0;
9123		tnapi->last_irq_tag = 0;
9124	}
9125	smp_mb();
9126
9127	tg3_full_unlock(tp);
9128
9129	for (i = 0; i < tp->irq_cnt; i++)
9130		synchronize_irq(tp->napi[i].irq_vec);
9131
9132	tg3_full_lock(tp, 0);
9133
9134	if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9135		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9136		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9137	}
9138
9139	/* do the reset */
9140	val = GRC_MISC_CFG_CORECLK_RESET;
9141
9142	if (tg3_flag(tp, PCI_EXPRESS)) {
9143		/* Force PCIe 1.0a mode */
9144		if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9145		    !tg3_flag(tp, 57765_PLUS) &&
9146		    tr32(TG3_PCIE_PHY_TSTCTL) ==
9147		    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9148			tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9149
9150		if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9151			tw32(GRC_MISC_CFG, (1 << 29));
9152			val |= (1 << 29);
9153		}
9154	}
9155
9156	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9157		tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9158		tw32(GRC_VCPU_EXT_CTRL,
9159		     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9160	}
9161
9162	/* Set the clock to the highest frequency to avoid timeouts. With link
9163	 * aware mode, the clock speed could be slow and bootcode does not
9164	 * complete within the expected time. Override the clock to allow the
9165	 * bootcode to finish sooner and then restore it.
9166	 */
9167	tg3_override_clk(tp);
9168
9169	/* Manage gphy power for all CPMU absent PCIe devices. */
9170	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9171		val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9172
9173	tw32(GRC_MISC_CFG, val);
9174
9175	/* restore 5701 hardware bug workaround write method */
9176	tp->write32 = write_op;
9177
9178	/* Unfortunately, we have to delay before the PCI read back.
9179	 * Some 575X chips even will not respond to a PCI cfg access
9180	 * when the reset command is given to the chip.
9181	 *
9182	 * How do these hardware designers expect things to work
9183	 * properly if the PCI write is posted for a long period
9184	 * of time?  It is always necessary to have some method by
9185	 * which a register read back can occur to push the write
9186	 * out which does the reset.
9187	 *
9188	 * For most tg3 variants the trick below was working.
9189	 * Ho hum...
9190	 */
9191	udelay(120);
9192
9193	/* Flush PCI posted writes.  The normal MMIO registers
9194	 * are inaccessible at this time so this is the only
9195	 * way to make this reliably (actually, this is no longer
9196	 * the case, see above).  I tried to use indirect
9197	 * register read/write but this upset some 5701 variants.
9198	 */
9199	pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9200
9201	udelay(120);
9202
9203	if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9204		u16 val16;
9205
9206		if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9207			int j;
9208			u32 cfg_val;
9209
9210			/* Wait for link training to complete.  */
9211			for (j = 0; j < 5000; j++)
9212				udelay(100);
9213
9214			pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9215			pci_write_config_dword(tp->pdev, 0xc4,
9216					       cfg_val | (1 << 15));
9217		}
9218
9219		/* Clear the "no snoop" and "relaxed ordering" bits. */
9220		val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9221		/*
9222		 * Older PCIe devices only support the 128 byte
9223		 * MPS setting.  Enforce the restriction.
9224		 */
9225		if (!tg3_flag(tp, CPMU_PRESENT))
9226			val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9227		pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9228
9229		/* Clear error status */
9230		pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9231				      PCI_EXP_DEVSTA_CED |
9232				      PCI_EXP_DEVSTA_NFED |
9233				      PCI_EXP_DEVSTA_FED |
9234				      PCI_EXP_DEVSTA_URD);
9235	}
9236
9237	tg3_restore_pci_state(tp);
9238
9239	tg3_flag_clear(tp, CHIP_RESETTING);
9240	tg3_flag_clear(tp, ERROR_PROCESSED);
9241
9242	val = 0;
9243	if (tg3_flag(tp, 5780_CLASS))
9244		val = tr32(MEMARB_MODE);
9245	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9246
9247	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9248		tg3_stop_fw(tp);
9249		tw32(0x5000, 0x400);
9250	}
9251
9252	if (tg3_flag(tp, IS_SSB_CORE)) {
9253		/*
9254		 * BCM4785: In order to avoid repercussions from using
9255		 * potentially defective internal ROM, stop the Rx RISC CPU,
9256		 * which is not required.
9257		 */
9258		tg3_stop_fw(tp);
9259		tg3_halt_cpu(tp, RX_CPU_BASE);
9260	}
9261
9262	err = tg3_poll_fw(tp);
9263	if (err)
9264		return err;
9265
9266	tw32(GRC_MODE, tp->grc_mode);
9267
9268	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9269		val = tr32(0xc4);
9270
9271		tw32(0xc4, val | (1 << 15));
9272	}
9273
9274	if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9275	    tg3_asic_rev(tp) == ASIC_REV_5705) {
9276		tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9277		if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9278			tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9279		tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9280	}
9281
9282	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9283		tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9284		val = tp->mac_mode;
9285	} else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9286		tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9287		val = tp->mac_mode;
9288	} else
9289		val = 0;
9290
9291	tw32_f(MAC_MODE, val);
9292	udelay(40);
9293
9294	tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9295
9296	tg3_mdio_start(tp);
9297
9298	if (tg3_flag(tp, PCI_EXPRESS) &&
9299	    tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9300	    tg3_asic_rev(tp) != ASIC_REV_5785 &&
9301	    !tg3_flag(tp, 57765_PLUS)) {
9302		val = tr32(0x7c00);
9303
9304		tw32(0x7c00, val | (1 << 25));
9305	}
9306
9307	tg3_restore_clk(tp);
9308
9309	/* Increase the core clock speed to fix tx timeout issue for 5762
9310	 * with 100Mbps link speed.
9311	 */
9312	if (tg3_asic_rev(tp) == ASIC_REV_5762) {
9313		val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9314		tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9315		     TG3_CPMU_MAC_ORIDE_ENABLE);
9316	}
9317
9318	/* Reprobe ASF enable state.  */
9319	tg3_flag_clear(tp, ENABLE_ASF);
9320	tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9321			   TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9322
9323	tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9324	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9325	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9326		u32 nic_cfg;
9327
9328		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9329		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9330			tg3_flag_set(tp, ENABLE_ASF);
9331			tp->last_event_jiffies = jiffies;
9332			if (tg3_flag(tp, 5750_PLUS))
9333				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9334
9335			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9336			if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9337				tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9338			if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9339				tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9340		}
9341	}
9342
9343	return 0;
9344}
9345
9346static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9347static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9348static void __tg3_set_rx_mode(struct net_device *);
9349
9350/* tp->lock is held. */
9351static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9352{
9353	int err, i;
9354
9355	tg3_stop_fw(tp);
9356
9357	tg3_write_sig_pre_reset(tp, kind);
9358
9359	tg3_abort_hw(tp, silent);
9360	err = tg3_chip_reset(tp);
9361
9362	__tg3_set_mac_addr(tp, false);
9363
9364	tg3_write_sig_legacy(tp, kind);
9365	tg3_write_sig_post_reset(tp, kind);
9366
9367	if (tp->hw_stats) {
9368		/* Save the stats across chip resets... */
9369		tg3_get_nstats(tp, &tp->net_stats_prev);
9370		tg3_get_estats(tp, &tp->estats_prev);
9371
9372		/* And make sure the next sample is new data */
9373		memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9374
9375		for (i = 0; i < TG3_IRQ_MAX_VECS; ++i) {
9376			struct tg3_napi *tnapi = &tp->napi[i];
9377
9378			tnapi->rx_dropped = 0;
9379			tnapi->tx_dropped = 0;
9380		}
9381	}
9382
9383	return err;
9384}
9385
9386static int tg3_set_mac_addr(struct net_device *dev, void *p)
9387{
9388	struct tg3 *tp = netdev_priv(dev);
9389	struct sockaddr *addr = p;
9390	int err = 0;
9391	bool skip_mac_1 = false;
9392
9393	if (!is_valid_ether_addr(addr->sa_data))
9394		return -EADDRNOTAVAIL;
9395
9396	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
9397
9398	if (!netif_running(dev))
9399		return 0;
9400
9401	if (tg3_flag(tp, ENABLE_ASF)) {
9402		u32 addr0_high, addr0_low, addr1_high, addr1_low;
9403
9404		addr0_high = tr32(MAC_ADDR_0_HIGH);
9405		addr0_low = tr32(MAC_ADDR_0_LOW);
9406		addr1_high = tr32(MAC_ADDR_1_HIGH);
9407		addr1_low = tr32(MAC_ADDR_1_LOW);
9408
9409		/* Skip MAC addr 1 if ASF is using it. */
9410		if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9411		    !(addr1_high == 0 && addr1_low == 0))
9412			skip_mac_1 = true;
9413	}
9414	spin_lock_bh(&tp->lock);
9415	__tg3_set_mac_addr(tp, skip_mac_1);
9416	__tg3_set_rx_mode(dev);
9417	spin_unlock_bh(&tp->lock);
9418
9419	return err;
9420}
9421
9422/* tp->lock is held. */
9423static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9424			   dma_addr_t mapping, u32 maxlen_flags,
9425			   u32 nic_addr)
9426{
9427	tg3_write_mem(tp,
9428		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9429		      ((u64) mapping >> 32));
9430	tg3_write_mem(tp,
9431		      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9432		      ((u64) mapping & 0xffffffff));
9433	tg3_write_mem(tp,
9434		      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9435		       maxlen_flags);
9436
9437	if (!tg3_flag(tp, 5705_PLUS))
9438		tg3_write_mem(tp,
9439			      (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9440			      nic_addr);
9441}
9442
9443
9444static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9445{
9446	int i = 0;
9447
9448	if (!tg3_flag(tp, ENABLE_TSS)) {
9449		tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9450		tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9451		tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9452	} else {
9453		tw32(HOSTCC_TXCOL_TICKS, 0);
9454		tw32(HOSTCC_TXMAX_FRAMES, 0);
9455		tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9456
9457		for (; i < tp->txq_cnt; i++) {
9458			u32 reg;
9459
9460			reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9461			tw32(reg, ec->tx_coalesce_usecs);
9462			reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9463			tw32(reg, ec->tx_max_coalesced_frames);
9464			reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9465			tw32(reg, ec->tx_max_coalesced_frames_irq);
9466		}
9467	}
9468
9469	for (; i < tp->irq_max - 1; i++) {
9470		tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9471		tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9472		tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9473	}
9474}
9475
9476static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9477{
9478	int i = 0;
9479	u32 limit = tp->rxq_cnt;
9480
9481	if (!tg3_flag(tp, ENABLE_RSS)) {
9482		tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9483		tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9484		tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9485		limit--;
9486	} else {
9487		tw32(HOSTCC_RXCOL_TICKS, 0);
9488		tw32(HOSTCC_RXMAX_FRAMES, 0);
9489		tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9490	}
9491
9492	for (; i < limit; i++) {
9493		u32 reg;
9494
9495		reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9496		tw32(reg, ec->rx_coalesce_usecs);
9497		reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9498		tw32(reg, ec->rx_max_coalesced_frames);
9499		reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9500		tw32(reg, ec->rx_max_coalesced_frames_irq);
9501	}
9502
9503	for (; i < tp->irq_max - 1; i++) {
9504		tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9505		tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9506		tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9507	}
9508}
9509
9510static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9511{
9512	tg3_coal_tx_init(tp, ec);
9513	tg3_coal_rx_init(tp, ec);
9514
9515	if (!tg3_flag(tp, 5705_PLUS)) {
9516		u32 val = ec->stats_block_coalesce_usecs;
9517
9518		tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9519		tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9520
9521		if (!tp->link_up)
9522			val = 0;
9523
9524		tw32(HOSTCC_STAT_COAL_TICKS, val);
9525	}
9526}
9527
9528/* tp->lock is held. */
9529static void tg3_tx_rcbs_disable(struct tg3 *tp)
9530{
9531	u32 txrcb, limit;
9532
9533	/* Disable all transmit rings but the first. */
9534	if (!tg3_flag(tp, 5705_PLUS))
9535		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9536	else if (tg3_flag(tp, 5717_PLUS))
9537		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9538	else if (tg3_flag(tp, 57765_CLASS) ||
9539		 tg3_asic_rev(tp) == ASIC_REV_5762)
9540		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9541	else
9542		limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9543
9544	for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9545	     txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9546		tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9547			      BDINFO_FLAGS_DISABLED);
9548}
9549
9550/* tp->lock is held. */
9551static void tg3_tx_rcbs_init(struct tg3 *tp)
9552{
9553	int i = 0;
9554	u32 txrcb = NIC_SRAM_SEND_RCB;
9555
9556	if (tg3_flag(tp, ENABLE_TSS))
9557		i++;
9558
9559	for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9560		struct tg3_napi *tnapi = &tp->napi[i];
9561
9562		if (!tnapi->tx_ring)
9563			continue;
9564
9565		tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9566			       (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9567			       NIC_SRAM_TX_BUFFER_DESC);
9568	}
9569}
9570
9571/* tp->lock is held. */
9572static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9573{
9574	u32 rxrcb, limit;
9575
9576	/* Disable all receive return rings but the first. */
9577	if (tg3_flag(tp, 5717_PLUS))
9578		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9579	else if (!tg3_flag(tp, 5705_PLUS))
9580		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9581	else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9582		 tg3_asic_rev(tp) == ASIC_REV_5762 ||
9583		 tg3_flag(tp, 57765_CLASS))
9584		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9585	else
9586		limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9587
9588	for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9589	     rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9590		tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9591			      BDINFO_FLAGS_DISABLED);
9592}
9593
9594/* tp->lock is held. */
9595static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9596{
9597	int i = 0;
9598	u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9599
9600	if (tg3_flag(tp, ENABLE_RSS))
9601		i++;
9602
9603	for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9604		struct tg3_napi *tnapi = &tp->napi[i];
9605
9606		if (!tnapi->rx_rcb)
9607			continue;
9608
9609		tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9610			       (tp->rx_ret_ring_mask + 1) <<
9611				BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9612	}
9613}
9614
9615/* tp->lock is held. */
9616static void tg3_rings_reset(struct tg3 *tp)
9617{
9618	int i;
9619	u32 stblk;
9620	struct tg3_napi *tnapi = &tp->napi[0];
9621
9622	tg3_tx_rcbs_disable(tp);
9623
9624	tg3_rx_ret_rcbs_disable(tp);
9625
9626	/* Disable interrupts */
9627	tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9628	tp->napi[0].chk_msi_cnt = 0;
9629	tp->napi[0].last_rx_cons = 0;
9630	tp->napi[0].last_tx_cons = 0;
9631
9632	/* Zero mailbox registers. */
9633	if (tg3_flag(tp, SUPPORT_MSIX)) {
9634		for (i = 1; i < tp->irq_max; i++) {
9635			tp->napi[i].tx_prod = 0;
9636			tp->napi[i].tx_cons = 0;
9637			if (tg3_flag(tp, ENABLE_TSS))
9638				tw32_mailbox(tp->napi[i].prodmbox, 0);
9639			tw32_rx_mbox(tp->napi[i].consmbox, 0);
9640			tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9641			tp->napi[i].chk_msi_cnt = 0;
9642			tp->napi[i].last_rx_cons = 0;
9643			tp->napi[i].last_tx_cons = 0;
9644		}
9645		if (!tg3_flag(tp, ENABLE_TSS))
9646			tw32_mailbox(tp->napi[0].prodmbox, 0);
9647	} else {
9648		tp->napi[0].tx_prod = 0;
9649		tp->napi[0].tx_cons = 0;
9650		tw32_mailbox(tp->napi[0].prodmbox, 0);
9651		tw32_rx_mbox(tp->napi[0].consmbox, 0);
9652	}
9653
9654	/* Make sure the NIC-based send BD rings are disabled. */
9655	if (!tg3_flag(tp, 5705_PLUS)) {
9656		u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9657		for (i = 0; i < 16; i++)
9658			tw32_tx_mbox(mbox + i * 8, 0);
9659	}
9660
9661	/* Clear status block in ram. */
9662	memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9663
9664	/* Set status block DMA address */
9665	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9666	     ((u64) tnapi->status_mapping >> 32));
9667	tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9668	     ((u64) tnapi->status_mapping & 0xffffffff));
9669
9670	stblk = HOSTCC_STATBLCK_RING1;
9671
9672	for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9673		u64 mapping = (u64)tnapi->status_mapping;
9674		tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9675		tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9676		stblk += 8;
9677
9678		/* Clear status block in ram. */
9679		memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9680	}
9681
9682	tg3_tx_rcbs_init(tp);
9683	tg3_rx_ret_rcbs_init(tp);
9684}
9685
9686static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9687{
9688	u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9689
9690	if (!tg3_flag(tp, 5750_PLUS) ||
9691	    tg3_flag(tp, 5780_CLASS) ||
9692	    tg3_asic_rev(tp) == ASIC_REV_5750 ||
9693	    tg3_asic_rev(tp) == ASIC_REV_5752 ||
9694	    tg3_flag(tp, 57765_PLUS))
9695		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9696	else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9697		 tg3_asic_rev(tp) == ASIC_REV_5787)
9698		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9699	else
9700		bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9701
9702	nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9703	host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9704
9705	val = min(nic_rep_thresh, host_rep_thresh);
9706	tw32(RCVBDI_STD_THRESH, val);
9707
9708	if (tg3_flag(tp, 57765_PLUS))
9709		tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9710
9711	if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9712		return;
9713
9714	bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9715
9716	host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9717
9718	val = min(bdcache_maxcnt / 2, host_rep_thresh);
9719	tw32(RCVBDI_JUMBO_THRESH, val);
9720
9721	if (tg3_flag(tp, 57765_PLUS))
9722		tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9723}
9724
9725static inline u32 calc_crc(unsigned char *buf, int len)
9726{
9727	u32 reg;
9728	u32 tmp;
9729	int j, k;
9730
9731	reg = 0xffffffff;
9732
9733	for (j = 0; j < len; j++) {
9734		reg ^= buf[j];
9735
9736		for (k = 0; k < 8; k++) {
9737			tmp = reg & 0x01;
9738
9739			reg >>= 1;
9740
9741			if (tmp)
9742				reg ^= CRC32_POLY_LE;
9743		}
9744	}
9745
9746	return ~reg;
9747}
9748
9749static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9750{
9751	/* accept or reject all multicast frames */
9752	tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9753	tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9754	tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9755	tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9756}
9757
9758static void __tg3_set_rx_mode(struct net_device *dev)
9759{
9760	struct tg3 *tp = netdev_priv(dev);
9761	u32 rx_mode;
9762
9763	rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9764				  RX_MODE_KEEP_VLAN_TAG);
9765
9766#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9767	/* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9768	 * flag clear.
9769	 */
9770	if (!tg3_flag(tp, ENABLE_ASF))
9771		rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9772#endif
9773
9774	if (dev->flags & IFF_PROMISC) {
9775		/* Promiscuous mode. */
9776		rx_mode |= RX_MODE_PROMISC;
9777	} else if (dev->flags & IFF_ALLMULTI) {
9778		/* Accept all multicast. */
9779		tg3_set_multi(tp, 1);
9780	} else if (netdev_mc_empty(dev)) {
9781		/* Reject all multicast. */
9782		tg3_set_multi(tp, 0);
9783	} else {
9784		/* Accept one or more multicast(s). */
9785		struct netdev_hw_addr *ha;
9786		u32 mc_filter[4] = { 0, };
9787		u32 regidx;
9788		u32 bit;
9789		u32 crc;
9790
9791		netdev_for_each_mc_addr(ha, dev) {
9792			crc = calc_crc(ha->addr, ETH_ALEN);
9793			bit = ~crc & 0x7f;
9794			regidx = (bit & 0x60) >> 5;
9795			bit &= 0x1f;
9796			mc_filter[regidx] |= (1 << bit);
9797		}
9798
9799		tw32(MAC_HASH_REG_0, mc_filter[0]);
9800		tw32(MAC_HASH_REG_1, mc_filter[1]);
9801		tw32(MAC_HASH_REG_2, mc_filter[2]);
9802		tw32(MAC_HASH_REG_3, mc_filter[3]);
9803	}
9804
9805	if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9806		rx_mode |= RX_MODE_PROMISC;
9807	} else if (!(dev->flags & IFF_PROMISC)) {
9808		/* Add all entries into to the mac addr filter list */
9809		int i = 0;
9810		struct netdev_hw_addr *ha;
9811
9812		netdev_for_each_uc_addr(ha, dev) {
9813			__tg3_set_one_mac_addr(tp, ha->addr,
9814					       i + TG3_UCAST_ADDR_IDX(tp));
9815			i++;
9816		}
9817	}
9818
9819	if (rx_mode != tp->rx_mode) {
9820		tp->rx_mode = rx_mode;
9821		tw32_f(MAC_RX_MODE, rx_mode);
9822		udelay(10);
9823	}
9824}
9825
9826static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9827{
9828	int i;
9829
9830	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9831		tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9832}
9833
9834static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9835{
9836	int i;
9837
9838	if (!tg3_flag(tp, SUPPORT_MSIX))
9839		return;
9840
9841	if (tp->rxq_cnt == 1) {
9842		memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9843		return;
9844	}
9845
9846	/* Validate table against current IRQ count */
9847	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9848		if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9849			break;
9850	}
9851
9852	if (i != TG3_RSS_INDIR_TBL_SIZE)
9853		tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9854}
9855
9856static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9857{
9858	int i = 0;
9859	u32 reg = MAC_RSS_INDIR_TBL_0;
9860
9861	while (i < TG3_RSS_INDIR_TBL_SIZE) {
9862		u32 val = tp->rss_ind_tbl[i];
9863		i++;
9864		for (; i % 8; i++) {
9865			val <<= 4;
9866			val |= tp->rss_ind_tbl[i];
9867		}
9868		tw32(reg, val);
9869		reg += 4;
9870	}
9871}
9872
9873static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9874{
9875	if (tg3_asic_rev(tp) == ASIC_REV_5719)
9876		return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9877	else
9878		return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9879}
9880
9881/* tp->lock is held. */
9882static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9883{
9884	u32 val, rdmac_mode;
9885	int i, err, limit;
9886	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9887
9888	tg3_disable_ints(tp);
9889
9890	tg3_stop_fw(tp);
9891
9892	tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9893
9894	if (tg3_flag(tp, INIT_COMPLETE))
9895		tg3_abort_hw(tp, 1);
9896
9897	if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9898	    !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9899		tg3_phy_pull_config(tp);
9900		tg3_eee_pull_config(tp, NULL);
9901		tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9902	}
9903
9904	/* Enable MAC control of LPI */
9905	if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9906		tg3_setup_eee(tp);
9907
9908	if (reset_phy)
9909		tg3_phy_reset(tp);
9910
9911	err = tg3_chip_reset(tp);
9912	if (err)
9913		return err;
9914
9915	tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9916
9917	if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9918		val = tr32(TG3_CPMU_CTRL);
9919		val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9920		tw32(TG3_CPMU_CTRL, val);
9921
9922		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9923		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9924		val |= CPMU_LSPD_10MB_MACCLK_6_25;
9925		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9926
9927		val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9928		val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9929		val |= CPMU_LNK_AWARE_MACCLK_6_25;
9930		tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9931
9932		val = tr32(TG3_CPMU_HST_ACC);
9933		val &= ~CPMU_HST_ACC_MACCLK_MASK;
9934		val |= CPMU_HST_ACC_MACCLK_6_25;
9935		tw32(TG3_CPMU_HST_ACC, val);
9936	}
9937
9938	if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9939		val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9940		val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9941		       PCIE_PWR_MGMT_L1_THRESH_4MS;
9942		tw32(PCIE_PWR_MGMT_THRESH, val);
9943
9944		val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9945		tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9946
9947		tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9948
9949		val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9950		tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9951	}
9952
9953	if (tg3_flag(tp, L1PLLPD_EN)) {
9954		u32 grc_mode = tr32(GRC_MODE);
9955
9956		/* Access the lower 1K of PL PCIE block registers. */
9957		val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9958		tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9959
9960		val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9961		tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9962		     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9963
9964		tw32(GRC_MODE, grc_mode);
9965	}
9966
9967	if (tg3_flag(tp, 57765_CLASS)) {
9968		if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9969			u32 grc_mode = tr32(GRC_MODE);
9970
9971			/* Access the lower 1K of PL PCIE block registers. */
9972			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9973			tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9974
9975			val = tr32(TG3_PCIE_TLDLPL_PORT +
9976				   TG3_PCIE_PL_LO_PHYCTL5);
9977			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9978			     val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9979
9980			tw32(GRC_MODE, grc_mode);
9981		}
9982
9983		if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9984			u32 grc_mode;
9985
9986			/* Fix transmit hangs */
9987			val = tr32(TG3_CPMU_PADRNG_CTL);
9988			val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9989			tw32(TG3_CPMU_PADRNG_CTL, val);
9990
9991			grc_mode = tr32(GRC_MODE);
9992
9993			/* Access the lower 1K of DL PCIE block registers. */
9994			val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9995			tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9996
9997			val = tr32(TG3_PCIE_TLDLPL_PORT +
9998				   TG3_PCIE_DL_LO_FTSMAX);
9999			val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
10000			tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
10001			     val | TG3_PCIE_DL_LO_FTSMAX_VAL);
10002
10003			tw32(GRC_MODE, grc_mode);
10004		}
10005
10006		val = tr32(TG3_CPMU_LSPD_10MB_CLK);
10007		val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
10008		val |= CPMU_LSPD_10MB_MACCLK_6_25;
10009		tw32(TG3_CPMU_LSPD_10MB_CLK, val);
10010	}
10011
10012	/* This works around an issue with Athlon chipsets on
10013	 * B3 tigon3 silicon.  This bit has no effect on any
10014	 * other revision.  But do not set this on PCI Express
10015	 * chips and don't even touch the clocks if the CPMU is present.
10016	 */
10017	if (!tg3_flag(tp, CPMU_PRESENT)) {
10018		if (!tg3_flag(tp, PCI_EXPRESS))
10019			tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
10020		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
10021	}
10022
10023	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
10024	    tg3_flag(tp, PCIX_MODE)) {
10025		val = tr32(TG3PCI_PCISTATE);
10026		val |= PCISTATE_RETRY_SAME_DMA;
10027		tw32(TG3PCI_PCISTATE, val);
10028	}
10029
10030	if (tg3_flag(tp, ENABLE_APE)) {
10031		/* Allow reads and writes to the
10032		 * APE register and memory space.
10033		 */
10034		val = tr32(TG3PCI_PCISTATE);
10035		val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
10036		       PCISTATE_ALLOW_APE_SHMEM_WR |
10037		       PCISTATE_ALLOW_APE_PSPACE_WR;
10038		tw32(TG3PCI_PCISTATE, val);
10039	}
10040
10041	if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
10042		/* Enable some hw fixes.  */
10043		val = tr32(TG3PCI_MSI_DATA);
10044		val |= (1 << 26) | (1 << 28) | (1 << 29);
10045		tw32(TG3PCI_MSI_DATA, val);
10046	}
10047
10048	/* Descriptor ring init may make accesses to the
10049	 * NIC SRAM area to setup the TX descriptors, so we
10050	 * can only do this after the hardware has been
10051	 * successfully reset.
10052	 */
10053	err = tg3_init_rings(tp);
10054	if (err)
10055		return err;
10056
10057	if (tg3_flag(tp, 57765_PLUS)) {
10058		val = tr32(TG3PCI_DMA_RW_CTRL) &
10059		      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10060		if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10061			val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10062		if (!tg3_flag(tp, 57765_CLASS) &&
10063		    tg3_asic_rev(tp) != ASIC_REV_5717 &&
10064		    tg3_asic_rev(tp) != ASIC_REV_5762)
10065			val |= DMA_RWCTRL_TAGGED_STAT_WA;
10066		tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10067	} else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10068		   tg3_asic_rev(tp) != ASIC_REV_5761) {
10069		/* This value is determined during the probe time DMA
10070		 * engine test, tg3_test_dma.
10071		 */
10072		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10073	}
10074
10075	tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10076			  GRC_MODE_4X_NIC_SEND_RINGS |
10077			  GRC_MODE_NO_TX_PHDR_CSUM |
10078			  GRC_MODE_NO_RX_PHDR_CSUM);
10079	tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10080
10081	/* Pseudo-header checksum is done by hardware logic and not
10082	 * the offload processers, so make the chip do the pseudo-
10083	 * header checksums on receive.  For transmit it is more
10084	 * convenient to do the pseudo-header checksum in software
10085	 * as Linux does that on transmit for us in all cases.
10086	 */
10087	tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10088
10089	val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10090	if (tp->rxptpctl)
10091		tw32(TG3_RX_PTP_CTL,
10092		     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10093
10094	if (tg3_flag(tp, PTP_CAPABLE))
10095		val |= GRC_MODE_TIME_SYNC_ENABLE;
10096
10097	tw32(GRC_MODE, tp->grc_mode | val);
10098
10099	/* On one of the AMD platform, MRRS is restricted to 4000 because of
10100	 * south bridge limitation. As a workaround, Driver is setting MRRS
10101	 * to 2048 instead of default 4096.
10102	 */
10103	if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10104	    tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
10105		val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
10106		tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
10107	}
10108
10109	/* Setup the timer prescalar register.  Clock is always 66Mhz. */
10110	val = tr32(GRC_MISC_CFG);
10111	val &= ~0xff;
10112	val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10113	tw32(GRC_MISC_CFG, val);
10114
10115	/* Initialize MBUF/DESC pool. */
10116	if (tg3_flag(tp, 5750_PLUS)) {
10117		/* Do nothing.  */
10118	} else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10119		tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10120		if (tg3_asic_rev(tp) == ASIC_REV_5704)
10121			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10122		else
10123			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10124		tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10125		tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10126	} else if (tg3_flag(tp, TSO_CAPABLE)) {
10127		int fw_len;
10128
10129		fw_len = tp->fw_len;
10130		fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10131		tw32(BUFMGR_MB_POOL_ADDR,
10132		     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10133		tw32(BUFMGR_MB_POOL_SIZE,
10134		     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10135	}
10136
10137	if (tp->dev->mtu <= ETH_DATA_LEN) {
10138		tw32(BUFMGR_MB_RDMA_LOW_WATER,
10139		     tp->bufmgr_config.mbuf_read_dma_low_water);
10140		tw32(BUFMGR_MB_MACRX_LOW_WATER,
10141		     tp->bufmgr_config.mbuf_mac_rx_low_water);
10142		tw32(BUFMGR_MB_HIGH_WATER,
10143		     tp->bufmgr_config.mbuf_high_water);
10144	} else {
10145		tw32(BUFMGR_MB_RDMA_LOW_WATER,
10146		     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10147		tw32(BUFMGR_MB_MACRX_LOW_WATER,
10148		     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10149		tw32(BUFMGR_MB_HIGH_WATER,
10150		     tp->bufmgr_config.mbuf_high_water_jumbo);
10151	}
10152	tw32(BUFMGR_DMA_LOW_WATER,
10153	     tp->bufmgr_config.dma_low_water);
10154	tw32(BUFMGR_DMA_HIGH_WATER,
10155	     tp->bufmgr_config.dma_high_water);
10156
10157	val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10158	if (tg3_asic_rev(tp) == ASIC_REV_5719)
10159		val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10160	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10161	    tg3_asic_rev(tp) == ASIC_REV_5762 ||
10162	    tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10163	    tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10164		val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10165	tw32(BUFMGR_MODE, val);
10166	for (i = 0; i < 2000; i++) {
10167		if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10168			break;
10169		udelay(10);
10170	}
10171	if (i >= 2000) {
10172		netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10173		return -ENODEV;
10174	}
10175
10176	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10177		tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10178
10179	tg3_setup_rxbd_thresholds(tp);
10180
10181	/* Initialize TG3_BDINFO's at:
10182	 *  RCVDBDI_STD_BD:	standard eth size rx ring
10183	 *  RCVDBDI_JUMBO_BD:	jumbo frame rx ring
10184	 *  RCVDBDI_MINI_BD:	small frame rx ring (??? does not work)
10185	 *
10186	 * like so:
10187	 *  TG3_BDINFO_HOST_ADDR:	high/low parts of DMA address of ring
10188	 *  TG3_BDINFO_MAXLEN_FLAGS:	(rx max buffer size << 16) |
10189	 *                              ring attribute flags
10190	 *  TG3_BDINFO_NIC_ADDR:	location of descriptors in nic SRAM
10191	 *
10192	 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10193	 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10194	 *
10195	 * The size of each ring is fixed in the firmware, but the location is
10196	 * configurable.
10197	 */
10198	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10199	     ((u64) tpr->rx_std_mapping >> 32));
10200	tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10201	     ((u64) tpr->rx_std_mapping & 0xffffffff));
10202	if (!tg3_flag(tp, 5717_PLUS))
10203		tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10204		     NIC_SRAM_RX_BUFFER_DESC);
10205
10206	/* Disable the mini ring */
10207	if (!tg3_flag(tp, 5705_PLUS))
10208		tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10209		     BDINFO_FLAGS_DISABLED);
10210
10211	/* Program the jumbo buffer descriptor ring control
10212	 * blocks on those devices that have them.
10213	 */
10214	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10215	    (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10216
10217		if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10218			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10219			     ((u64) tpr->rx_jmb_mapping >> 32));
10220			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10221			     ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10222			val = TG3_RX_JMB_RING_SIZE(tp) <<
10223			      BDINFO_FLAGS_MAXLEN_SHIFT;
10224			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10225			     val | BDINFO_FLAGS_USE_EXT_RECV);
10226			if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10227			    tg3_flag(tp, 57765_CLASS) ||
10228			    tg3_asic_rev(tp) == ASIC_REV_5762)
10229				tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10230				     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10231		} else {
10232			tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10233			     BDINFO_FLAGS_DISABLED);
10234		}
10235
10236		if (tg3_flag(tp, 57765_PLUS)) {
10237			val = TG3_RX_STD_RING_SIZE(tp);
10238			val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10239			val |= (TG3_RX_STD_DMA_SZ << 2);
10240		} else
10241			val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10242	} else
10243		val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10244
10245	tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10246
10247	tpr->rx_std_prod_idx = tp->rx_pending;
10248	tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10249
10250	tpr->rx_jmb_prod_idx =
10251		tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10252	tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10253
10254	tg3_rings_reset(tp);
10255
10256	/* Initialize MAC address and backoff seed. */
10257	__tg3_set_mac_addr(tp, false);
10258
10259	/* MTU + ethernet header + FCS + optional VLAN tag */
10260	tw32(MAC_RX_MTU_SIZE,
10261	     tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10262
10263	/* The slot time is changed by tg3_setup_phy if we
10264	 * run at gigabit with half duplex.
10265	 */
10266	val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10267	      (6 << TX_LENGTHS_IPG_SHIFT) |
10268	      (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10269
10270	if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10271	    tg3_asic_rev(tp) == ASIC_REV_5762)
10272		val |= tr32(MAC_TX_LENGTHS) &
10273		       (TX_LENGTHS_JMB_FRM_LEN_MSK |
10274			TX_LENGTHS_CNT_DWN_VAL_MSK);
10275
10276	tw32(MAC_TX_LENGTHS, val);
10277
10278	/* Receive rules. */
10279	tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10280	tw32(RCVLPC_CONFIG, 0x0181);
10281
10282	/* Calculate RDMAC_MODE setting early, we need it to determine
10283	 * the RCVLPC_STATE_ENABLE mask.
10284	 */
10285	rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10286		      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10287		      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10288		      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10289		      RDMAC_MODE_LNGREAD_ENAB);
10290
10291	if (tg3_asic_rev(tp) == ASIC_REV_5717)
10292		rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10293
10294	if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10295	    tg3_asic_rev(tp) == ASIC_REV_5785 ||
10296	    tg3_asic_rev(tp) == ASIC_REV_57780)
10297		rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10298			      RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10299			      RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10300
10301	if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10302	    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10303		if (tg3_flag(tp, TSO_CAPABLE) &&
10304		    tg3_asic_rev(tp) == ASIC_REV_5705) {
10305			rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10306		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10307			   !tg3_flag(tp, IS_5788)) {
10308			rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10309		}
10310	}
10311
10312	if (tg3_flag(tp, PCI_EXPRESS))
10313		rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10314
10315	if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10316		tp->dma_limit = 0;
10317		if (tp->dev->mtu <= ETH_DATA_LEN) {
10318			rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10319			tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10320		}
10321	}
10322
10323	if (tg3_flag(tp, HW_TSO_1) ||
10324	    tg3_flag(tp, HW_TSO_2) ||
10325	    tg3_flag(tp, HW_TSO_3))
10326		rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10327
10328	if (tg3_flag(tp, 57765_PLUS) ||
10329	    tg3_asic_rev(tp) == ASIC_REV_5785 ||
10330	    tg3_asic_rev(tp) == ASIC_REV_57780)
10331		rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10332
10333	if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10334	    tg3_asic_rev(tp) == ASIC_REV_5762)
10335		rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10336
10337	if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10338	    tg3_asic_rev(tp) == ASIC_REV_5784 ||
10339	    tg3_asic_rev(tp) == ASIC_REV_5785 ||
10340	    tg3_asic_rev(tp) == ASIC_REV_57780 ||
10341	    tg3_flag(tp, 57765_PLUS)) {
10342		u32 tgtreg;
10343
10344		if (tg3_asic_rev(tp) == ASIC_REV_5762)
10345			tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10346		else
10347			tgtreg = TG3_RDMA_RSRVCTRL_REG;
10348
10349		val = tr32(tgtreg);
10350		if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10351		    tg3_asic_rev(tp) == ASIC_REV_5762) {
10352			val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10353				 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10354				 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10355			val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10356			       TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10357			       TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10358		}
10359		tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10360	}
10361
10362	if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10363	    tg3_asic_rev(tp) == ASIC_REV_5720 ||
10364	    tg3_asic_rev(tp) == ASIC_REV_5762) {
10365		u32 tgtreg;
10366
10367		if (tg3_asic_rev(tp) == ASIC_REV_5762)
10368			tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10369		else
10370			tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10371
10372		val = tr32(tgtreg);
10373		tw32(tgtreg, val |
10374		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10375		     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10376	}
10377
10378	/* Receive/send statistics. */
10379	if (tg3_flag(tp, 5750_PLUS)) {
10380		val = tr32(RCVLPC_STATS_ENABLE);
10381		val &= ~RCVLPC_STATSENAB_DACK_FIX;
10382		tw32(RCVLPC_STATS_ENABLE, val);
10383	} else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10384		   tg3_flag(tp, TSO_CAPABLE)) {
10385		val = tr32(RCVLPC_STATS_ENABLE);
10386		val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10387		tw32(RCVLPC_STATS_ENABLE, val);
10388	} else {
10389		tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10390	}
10391	tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10392	tw32(SNDDATAI_STATSENAB, 0xffffff);
10393	tw32(SNDDATAI_STATSCTRL,
10394	     (SNDDATAI_SCTRL_ENABLE |
10395	      SNDDATAI_SCTRL_FASTUPD));
10396
10397	/* Setup host coalescing engine. */
10398	tw32(HOSTCC_MODE, 0);
10399	for (i = 0; i < 2000; i++) {
10400		if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10401			break;
10402		udelay(10);
10403	}
10404
10405	__tg3_set_coalesce(tp, &tp->coal);
10406
10407	if (!tg3_flag(tp, 5705_PLUS)) {
10408		/* Status/statistics block address.  See tg3_timer,
10409		 * the tg3_periodic_fetch_stats call there, and
10410		 * tg3_get_stats to see how this works for 5705/5750 chips.
10411		 */
10412		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10413		     ((u64) tp->stats_mapping >> 32));
10414		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10415		     ((u64) tp->stats_mapping & 0xffffffff));
10416		tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10417
10418		tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10419
10420		/* Clear statistics and status block memory areas */
10421		for (i = NIC_SRAM_STATS_BLK;
10422		     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10423		     i += sizeof(u32)) {
10424			tg3_write_mem(tp, i, 0);
10425			udelay(40);
10426		}
10427	}
10428
10429	tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10430
10431	tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10432	tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10433	if (!tg3_flag(tp, 5705_PLUS))
10434		tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10435
10436	if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10437		tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10438		/* reset to prevent losing 1st rx packet intermittently */
10439		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10440		udelay(10);
10441	}
10442
10443	tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10444			MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10445			MAC_MODE_FHDE_ENABLE;
10446	if (tg3_flag(tp, ENABLE_APE))
10447		tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10448	if (!tg3_flag(tp, 5705_PLUS) &&
10449	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10450	    tg3_asic_rev(tp) != ASIC_REV_5700)
10451		tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10452	tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10453	udelay(40);
10454
10455	/* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10456	 * If TG3_FLAG_IS_NIC is zero, we should read the
10457	 * register to preserve the GPIO settings for LOMs. The GPIOs,
10458	 * whether used as inputs or outputs, are set by boot code after
10459	 * reset.
10460	 */
10461	if (!tg3_flag(tp, IS_NIC)) {
10462		u32 gpio_mask;
10463
10464		gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10465			    GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10466			    GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10467
10468		if (tg3_asic_rev(tp) == ASIC_REV_5752)
10469			gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10470				     GRC_LCLCTRL_GPIO_OUTPUT3;
10471
10472		if (tg3_asic_rev(tp) == ASIC_REV_5755)
10473			gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10474
10475		tp->grc_local_ctrl &= ~gpio_mask;
10476		tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10477
10478		/* GPIO1 must be driven high for eeprom write protect */
10479		if (tg3_flag(tp, EEPROM_WRITE_PROT))
10480			tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10481					       GRC_LCLCTRL_GPIO_OUTPUT1);
10482	}
10483	tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10484	udelay(100);
10485
10486	if (tg3_flag(tp, USING_MSIX)) {
10487		val = tr32(MSGINT_MODE);
10488		val |= MSGINT_MODE_ENABLE;
10489		if (tp->irq_cnt > 1)
10490			val |= MSGINT_MODE_MULTIVEC_EN;
10491		if (!tg3_flag(tp, 1SHOT_MSI))
10492			val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10493		tw32(MSGINT_MODE, val);
10494	}
10495
10496	if (!tg3_flag(tp, 5705_PLUS)) {
10497		tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10498		udelay(40);
10499	}
10500
10501	val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10502	       WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10503	       WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10504	       WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10505	       WDMAC_MODE_LNGREAD_ENAB);
10506
10507	if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10508	    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10509		if (tg3_flag(tp, TSO_CAPABLE) &&
10510		    (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10511		     tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10512			/* nothing */
10513		} else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10514			   !tg3_flag(tp, IS_5788)) {
10515			val |= WDMAC_MODE_RX_ACCEL;
10516		}
10517	}
10518
10519	/* Enable host coalescing bug fix */
10520	if (tg3_flag(tp, 5755_PLUS))
10521		val |= WDMAC_MODE_STATUS_TAG_FIX;
10522
10523	if (tg3_asic_rev(tp) == ASIC_REV_5785)
10524		val |= WDMAC_MODE_BURST_ALL_DATA;
10525
10526	tw32_f(WDMAC_MODE, val);
10527	udelay(40);
10528
10529	if (tg3_flag(tp, PCIX_MODE)) {
10530		u16 pcix_cmd;
10531
10532		pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10533				     &pcix_cmd);
10534		if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10535			pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10536			pcix_cmd |= PCI_X_CMD_READ_2K;
10537		} else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10538			pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10539			pcix_cmd |= PCI_X_CMD_READ_2K;
10540		}
10541		pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10542				      pcix_cmd);
10543	}
10544
10545	tw32_f(RDMAC_MODE, rdmac_mode);
10546	udelay(40);
10547
10548	if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10549	    tg3_asic_rev(tp) == ASIC_REV_5720) {
10550		for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10551			if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10552				break;
10553		}
10554		if (i < TG3_NUM_RDMA_CHANNELS) {
10555			val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10556			val |= tg3_lso_rd_dma_workaround_bit(tp);
10557			tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10558			tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10559		}
10560	}
10561
10562	tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10563	if (!tg3_flag(tp, 5705_PLUS))
10564		tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10565
10566	if (tg3_asic_rev(tp) == ASIC_REV_5761)
10567		tw32(SNDDATAC_MODE,
10568		     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10569	else
10570		tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10571
10572	tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10573	tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10574	val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10575	if (tg3_flag(tp, LRG_PROD_RING_CAP))
10576		val |= RCVDBDI_MODE_LRG_RING_SZ;
10577	tw32(RCVDBDI_MODE, val);
10578	tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10579	if (tg3_flag(tp, HW_TSO_1) ||
10580	    tg3_flag(tp, HW_TSO_2) ||
10581	    tg3_flag(tp, HW_TSO_3))
10582		tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10583	val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10584	if (tg3_flag(tp, ENABLE_TSS))
10585		val |= SNDBDI_MODE_MULTI_TXQ_EN;
10586	tw32(SNDBDI_MODE, val);
10587	tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10588
10589	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10590		err = tg3_load_5701_a0_firmware_fix(tp);
10591		if (err)
10592			return err;
10593	}
10594
10595	if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10596		/* Ignore any errors for the firmware download. If download
10597		 * fails, the device will operate with EEE disabled
10598		 */
10599		tg3_load_57766_firmware(tp);
10600	}
10601
10602	if (tg3_flag(tp, TSO_CAPABLE)) {
10603		err = tg3_load_tso_firmware(tp);
10604		if (err)
10605			return err;
10606	}
10607
10608	tp->tx_mode = TX_MODE_ENABLE;
10609
10610	if (tg3_flag(tp, 5755_PLUS) ||
10611	    tg3_asic_rev(tp) == ASIC_REV_5906)
10612		tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10613
10614	if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10615	    tg3_asic_rev(tp) == ASIC_REV_5762) {
10616		val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10617		tp->tx_mode &= ~val;
10618		tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10619	}
10620
10621	tw32_f(MAC_TX_MODE, tp->tx_mode);
10622	udelay(100);
10623
10624	if (tg3_flag(tp, ENABLE_RSS)) {
10625		u32 rss_key[10];
10626
10627		tg3_rss_write_indir_tbl(tp);
10628
10629		netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10630
10631		for (i = 0; i < 10 ; i++)
10632			tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10633	}
10634
10635	tp->rx_mode = RX_MODE_ENABLE;
10636	if (tg3_flag(tp, 5755_PLUS))
10637		tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10638
10639	if (tg3_asic_rev(tp) == ASIC_REV_5762)
10640		tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10641
10642	if (tg3_flag(tp, ENABLE_RSS))
10643		tp->rx_mode |= RX_MODE_RSS_ENABLE |
10644			       RX_MODE_RSS_ITBL_HASH_BITS_7 |
10645			       RX_MODE_RSS_IPV6_HASH_EN |
10646			       RX_MODE_RSS_TCP_IPV6_HASH_EN |
10647			       RX_MODE_RSS_IPV4_HASH_EN |
10648			       RX_MODE_RSS_TCP_IPV4_HASH_EN;
10649
10650	tw32_f(MAC_RX_MODE, tp->rx_mode);
10651	udelay(10);
10652
10653	tw32(MAC_LED_CTRL, tp->led_ctrl);
10654
10655	tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10656	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10657		tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10658		udelay(10);
10659	}
10660	tw32_f(MAC_RX_MODE, tp->rx_mode);
10661	udelay(10);
10662
10663	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10664		if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10665		    !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10666			/* Set drive transmission level to 1.2V  */
10667			/* only if the signal pre-emphasis bit is not set  */
10668			val = tr32(MAC_SERDES_CFG);
10669			val &= 0xfffff000;
10670			val |= 0x880;
10671			tw32(MAC_SERDES_CFG, val);
10672		}
10673		if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10674			tw32(MAC_SERDES_CFG, 0x616000);
10675	}
10676
10677	/* Prevent chip from dropping frames when flow control
10678	 * is enabled.
10679	 */
10680	if (tg3_flag(tp, 57765_CLASS))
10681		val = 1;
10682	else
10683		val = 2;
10684	tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10685
10686	if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10687	    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10688		/* Use hardware link auto-negotiation */
10689		tg3_flag_set(tp, HW_AUTONEG);
10690	}
10691
10692	if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10693	    tg3_asic_rev(tp) == ASIC_REV_5714) {
10694		u32 tmp;
10695
10696		tmp = tr32(SERDES_RX_CTRL);
10697		tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10698		tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10699		tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10700		tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10701	}
10702
10703	if (!tg3_flag(tp, USE_PHYLIB)) {
10704		if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10705			tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10706
10707		err = tg3_setup_phy(tp, false);
10708		if (err)
10709			return err;
10710
10711		if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10712		    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10713			u32 tmp;
10714
10715			/* Clear CRC stats. */
10716			if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10717				tg3_writephy(tp, MII_TG3_TEST1,
10718					     tmp | MII_TG3_TEST1_CRC_EN);
10719				tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10720			}
10721		}
10722	}
10723
10724	__tg3_set_rx_mode(tp->dev);
10725
10726	/* Initialize receive rules. */
10727	tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10728	tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10729	tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10730	tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10731
10732	if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10733		limit = 8;
10734	else
10735		limit = 16;
10736	if (tg3_flag(tp, ENABLE_ASF))
10737		limit -= 4;
10738	switch (limit) {
10739	case 16:
10740		tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10741		fallthrough;
10742	case 15:
10743		tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10744		fallthrough;
10745	case 14:
10746		tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10747		fallthrough;
10748	case 13:
10749		tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10750		fallthrough;
10751	case 12:
10752		tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10753		fallthrough;
10754	case 11:
10755		tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10756		fallthrough;
10757	case 10:
10758		tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10759		fallthrough;
10760	case 9:
10761		tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10762		fallthrough;
10763	case 8:
10764		tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10765		fallthrough;
10766	case 7:
10767		tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10768		fallthrough;
10769	case 6:
10770		tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10771		fallthrough;
10772	case 5:
10773		tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10774		fallthrough;
10775	case 4:
10776		/* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10777	case 3:
10778		/* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10779	case 2:
10780	case 1:
10781
10782	default:
10783		break;
10784	}
10785
10786	if (tg3_flag(tp, ENABLE_APE))
10787		/* Write our heartbeat update interval to APE. */
10788		tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10789				APE_HOST_HEARTBEAT_INT_5SEC);
10790
10791	tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10792
10793	return 0;
10794}
10795
10796/* Called at device open time to get the chip ready for
10797 * packet processing.  Invoked with tp->lock held.
10798 */
10799static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10800{
10801	/* Chip may have been just powered on. If so, the boot code may still
10802	 * be running initialization. Wait for it to finish to avoid races in
10803	 * accessing the hardware.
10804	 */
10805	tg3_enable_register_access(tp);
10806	tg3_poll_fw(tp);
10807
10808	tg3_switch_clocks(tp);
10809
10810	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10811
10812	return tg3_reset_hw(tp, reset_phy);
10813}
10814
10815#ifdef CONFIG_TIGON3_HWMON
10816static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10817{
10818	u32 off, len = TG3_OCIR_LEN;
10819	int i;
10820
10821	for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) {
10822		tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10823
10824		if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10825		    !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10826			memset(ocir, 0, len);
10827	}
10828}
10829
10830/* sysfs attributes for hwmon */
10831static ssize_t tg3_show_temp(struct device *dev,
10832			     struct device_attribute *devattr, char *buf)
10833{
10834	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10835	struct tg3 *tp = dev_get_drvdata(dev);
10836	u32 temperature;
10837
10838	spin_lock_bh(&tp->lock);
10839	tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10840				sizeof(temperature));
10841	spin_unlock_bh(&tp->lock);
10842	return sprintf(buf, "%u\n", temperature * 1000);
10843}
10844
10845
10846static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL,
10847			  TG3_TEMP_SENSOR_OFFSET);
10848static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL,
10849			  TG3_TEMP_CAUTION_OFFSET);
10850static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL,
10851			  TG3_TEMP_MAX_OFFSET);
10852
10853static struct attribute *tg3_attrs[] = {
10854	&sensor_dev_attr_temp1_input.dev_attr.attr,
10855	&sensor_dev_attr_temp1_crit.dev_attr.attr,
10856	&sensor_dev_attr_temp1_max.dev_attr.attr,
10857	NULL
10858};
10859ATTRIBUTE_GROUPS(tg3);
10860
10861static void tg3_hwmon_close(struct tg3 *tp)
10862{
10863	if (tp->hwmon_dev) {
10864		hwmon_device_unregister(tp->hwmon_dev);
10865		tp->hwmon_dev = NULL;
10866	}
10867}
10868
10869static void tg3_hwmon_open(struct tg3 *tp)
10870{
10871	int i;
10872	u32 size = 0;
10873	struct pci_dev *pdev = tp->pdev;
10874	struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10875
10876	tg3_sd_scan_scratchpad(tp, ocirs);
10877
10878	for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10879		if (!ocirs[i].src_data_length)
10880			continue;
10881
10882		size += ocirs[i].src_hdr_length;
10883		size += ocirs[i].src_data_length;
10884	}
10885
10886	if (!size)
10887		return;
10888
10889	tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10890							  tp, tg3_groups);
10891	if (IS_ERR(tp->hwmon_dev)) {
10892		tp->hwmon_dev = NULL;
10893		dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10894	}
10895}
10896#else
10897static inline void tg3_hwmon_close(struct tg3 *tp) { }
10898static inline void tg3_hwmon_open(struct tg3 *tp) { }
10899#endif /* CONFIG_TIGON3_HWMON */
10900
10901
10902#define TG3_STAT_ADD32(PSTAT, REG) \
10903do {	u32 __val = tr32(REG); \
10904	(PSTAT)->low += __val; \
10905	if ((PSTAT)->low < __val) \
10906		(PSTAT)->high += 1; \
10907} while (0)
10908
10909static void tg3_periodic_fetch_stats(struct tg3 *tp)
10910{
10911	struct tg3_hw_stats *sp = tp->hw_stats;
10912
10913	if (!tp->link_up)
10914		return;
10915
10916	TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10917	TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10918	TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10919	TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10920	TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10921	TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10922	TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10923	TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10924	TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10925	TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10926	TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10927	TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10928	TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10929	if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10930		     (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10931		      sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10932		u32 val;
10933
10934		val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10935		val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10936		tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10937		tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10938	}
10939
10940	TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10941	TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10942	TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10943	TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10944	TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10945	TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10946	TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10947	TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10948	TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10949	TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10950	TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10951	TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10952	TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10953	TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10954
10955	TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10956	if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10957	    tg3_asic_rev(tp) != ASIC_REV_5762 &&
10958	    tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10959	    tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10960		TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10961	} else {
10962		u32 val = tr32(HOSTCC_FLOW_ATTN);
10963		val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10964		if (val) {
10965			tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10966			sp->rx_discards.low += val;
10967			if (sp->rx_discards.low < val)
10968				sp->rx_discards.high += 1;
10969		}
10970		sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10971	}
10972	TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10973}
10974
10975static void tg3_chk_missed_msi(struct tg3 *tp)
10976{
10977	u32 i;
10978
10979	for (i = 0; i < tp->irq_cnt; i++) {
10980		struct tg3_napi *tnapi = &tp->napi[i];
10981
10982		if (tg3_has_work(tnapi)) {
10983			if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10984			    tnapi->last_tx_cons == tnapi->tx_cons) {
10985				if (tnapi->chk_msi_cnt < 1) {
10986					tnapi->chk_msi_cnt++;
10987					return;
10988				}
10989				tg3_msi(0, tnapi);
10990			}
10991		}
10992		tnapi->chk_msi_cnt = 0;
10993		tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10994		tnapi->last_tx_cons = tnapi->tx_cons;
10995	}
10996}
10997
10998static void tg3_timer(struct timer_list *t)
10999{
11000	struct tg3 *tp = from_timer(tp, t, timer);
11001
11002	spin_lock(&tp->lock);
11003
11004	if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
11005		spin_unlock(&tp->lock);
11006		goto restart_timer;
11007	}
11008
11009	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
11010	    tg3_flag(tp, 57765_CLASS))
11011		tg3_chk_missed_msi(tp);
11012
11013	if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
11014		/* BCM4785: Flush posted writes from GbE to host memory. */
11015		tr32(HOSTCC_MODE);
11016	}
11017
11018	if (!tg3_flag(tp, TAGGED_STATUS)) {
11019		/* All of this garbage is because when using non-tagged
11020		 * IRQ status the mailbox/status_block protocol the chip
11021		 * uses with the cpu is race prone.
11022		 */
11023		if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
11024			tw32(GRC_LOCAL_CTRL,
11025			     tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
11026		} else {
11027			tw32(HOSTCC_MODE, tp->coalesce_mode |
11028			     HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
11029		}
11030
11031		if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
11032			spin_unlock(&tp->lock);
11033			tg3_reset_task_schedule(tp);
11034			goto restart_timer;
11035		}
11036	}
11037
11038	/* This part only runs once per second. */
11039	if (!--tp->timer_counter) {
11040		if (tg3_flag(tp, 5705_PLUS))
11041			tg3_periodic_fetch_stats(tp);
11042
11043		if (tp->setlpicnt && !--tp->setlpicnt)
11044			tg3_phy_eee_enable(tp);
11045
11046		if (tg3_flag(tp, USE_LINKCHG_REG)) {
11047			u32 mac_stat;
11048			int phy_event;
11049
11050			mac_stat = tr32(MAC_STATUS);
11051
11052			phy_event = 0;
11053			if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
11054				if (mac_stat & MAC_STATUS_MI_INTERRUPT)
11055					phy_event = 1;
11056			} else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
11057				phy_event = 1;
11058
11059			if (phy_event)
11060				tg3_setup_phy(tp, false);
11061		} else if (tg3_flag(tp, POLL_SERDES)) {
11062			u32 mac_stat = tr32(MAC_STATUS);
11063			int need_setup = 0;
11064
11065			if (tp->link_up &&
11066			    (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11067				need_setup = 1;
11068			}
11069			if (!tp->link_up &&
11070			    (mac_stat & (MAC_STATUS_PCS_SYNCED |
11071					 MAC_STATUS_SIGNAL_DET))) {
11072				need_setup = 1;
11073			}
11074			if (need_setup) {
11075				if (!tp->serdes_counter) {
11076					tw32_f(MAC_MODE,
11077					     (tp->mac_mode &
11078					      ~MAC_MODE_PORT_MODE_MASK));
11079					udelay(40);
11080					tw32_f(MAC_MODE, tp->mac_mode);
11081					udelay(40);
11082				}
11083				tg3_setup_phy(tp, false);
11084			}
11085		} else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11086			   tg3_flag(tp, 5780_CLASS)) {
11087			tg3_serdes_parallel_detect(tp);
11088		} else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11089			u32 cpmu = tr32(TG3_CPMU_STATUS);
11090			bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11091					 TG3_CPMU_STATUS_LINK_MASK);
11092
11093			if (link_up != tp->link_up)
11094				tg3_setup_phy(tp, false);
11095		}
11096
11097		tp->timer_counter = tp->timer_multiplier;
11098	}
11099
11100	/* Heartbeat is only sent once every 2 seconds.
11101	 *
11102	 * The heartbeat is to tell the ASF firmware that the host
11103	 * driver is still alive.  In the event that the OS crashes,
11104	 * ASF needs to reset the hardware to free up the FIFO space
11105	 * that may be filled with rx packets destined for the host.
11106	 * If the FIFO is full, ASF will no longer function properly.
11107	 *
11108	 * Unintended resets have been reported on real time kernels
11109	 * where the timer doesn't run on time.  Netpoll will also have
11110	 * same problem.
11111	 *
11112	 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11113	 * to check the ring condition when the heartbeat is expiring
11114	 * before doing the reset.  This will prevent most unintended
11115	 * resets.
11116	 */
11117	if (!--tp->asf_counter) {
11118		if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11119			tg3_wait_for_event_ack(tp);
11120
11121			tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11122				      FWCMD_NICDRV_ALIVE3);
11123			tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11124			tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11125				      TG3_FW_UPDATE_TIMEOUT_SEC);
11126
11127			tg3_generate_fw_event(tp);
11128		}
11129		tp->asf_counter = tp->asf_multiplier;
11130	}
11131
11132	/* Update the APE heartbeat every 5 seconds.*/
11133	tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL);
11134
11135	spin_unlock(&tp->lock);
11136
11137restart_timer:
11138	tp->timer.expires = jiffies + tp->timer_offset;
11139	add_timer(&tp->timer);
11140}
11141
11142static void tg3_timer_init(struct tg3 *tp)
11143{
11144	if (tg3_flag(tp, TAGGED_STATUS) &&
11145	    tg3_asic_rev(tp) != ASIC_REV_5717 &&
11146	    !tg3_flag(tp, 57765_CLASS))
11147		tp->timer_offset = HZ;
11148	else
11149		tp->timer_offset = HZ / 10;
11150
11151	BUG_ON(tp->timer_offset > HZ);
11152
11153	tp->timer_multiplier = (HZ / tp->timer_offset);
11154	tp->asf_multiplier = (HZ / tp->timer_offset) *
11155			     TG3_FW_UPDATE_FREQ_SEC;
11156
11157	timer_setup(&tp->timer, tg3_timer, 0);
11158}
11159
11160static void tg3_timer_start(struct tg3 *tp)
11161{
11162	tp->asf_counter   = tp->asf_multiplier;
11163	tp->timer_counter = tp->timer_multiplier;
11164
11165	tp->timer.expires = jiffies + tp->timer_offset;
11166	add_timer(&tp->timer);
11167}
11168
11169static void tg3_timer_stop(struct tg3 *tp)
11170{
11171	del_timer_sync(&tp->timer);
11172}
11173
11174/* Restart hardware after configuration changes, self-test, etc.
11175 * Invoked with tp->lock held.
11176 */
11177static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11178	__releases(tp->lock)
11179	__acquires(tp->lock)
11180{
11181	int err;
11182
11183	err = tg3_init_hw(tp, reset_phy);
11184	if (err) {
11185		netdev_err(tp->dev,
11186			   "Failed to re-initialize device, aborting\n");
11187		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11188		tg3_full_unlock(tp);
11189		tg3_timer_stop(tp);
11190		tp->irq_sync = 0;
11191		tg3_napi_enable(tp);
11192		dev_close(tp->dev);
11193		tg3_full_lock(tp, 0);
11194	}
11195	return err;
11196}
11197
11198static void tg3_reset_task(struct work_struct *work)
11199{
11200	struct tg3 *tp = container_of(work, struct tg3, reset_task);
11201	int err;
11202
11203	rtnl_lock();
11204	tg3_full_lock(tp, 0);
11205
11206	if (tp->pcierr_recovery || !netif_running(tp->dev) ||
11207	    tp->pdev->error_state != pci_channel_io_normal) {
11208		tg3_flag_clear(tp, RESET_TASK_PENDING);
11209		tg3_full_unlock(tp);
11210		rtnl_unlock();
11211		return;
11212	}
11213
11214	tg3_full_unlock(tp);
11215
11216	tg3_phy_stop(tp);
11217
11218	tg3_netif_stop(tp);
11219
11220	tg3_full_lock(tp, 1);
11221
11222	if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11223		tp->write32_tx_mbox = tg3_write32_tx_mbox;
11224		tp->write32_rx_mbox = tg3_write_flush_reg32;
11225		tg3_flag_set(tp, MBOX_WRITE_REORDER);
11226		tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11227	}
11228
11229	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11230	err = tg3_init_hw(tp, true);
11231	if (err) {
11232		tg3_full_unlock(tp);
11233		tp->irq_sync = 0;
11234		tg3_napi_enable(tp);
11235		/* Clear this flag so that tg3_reset_task_cancel() will not
11236		 * call cancel_work_sync() and wait forever.
11237		 */
11238		tg3_flag_clear(tp, RESET_TASK_PENDING);
11239		dev_close(tp->dev);
11240		goto out;
11241	}
11242
11243	tg3_netif_start(tp);
11244
11245	tg3_full_unlock(tp);
11246
11247	if (!err)
11248		tg3_phy_start(tp);
11249
11250	tg3_flag_clear(tp, RESET_TASK_PENDING);
11251out:
11252	rtnl_unlock();
11253}
11254
11255static int tg3_request_irq(struct tg3 *tp, int irq_num)
11256{
11257	irq_handler_t fn;
11258	unsigned long flags;
11259	char *name;
11260	struct tg3_napi *tnapi = &tp->napi[irq_num];
11261
11262	if (tp->irq_cnt == 1)
11263		name = tp->dev->name;
11264	else {
11265		name = &tnapi->irq_lbl[0];
11266		if (tnapi->tx_buffers && tnapi->rx_rcb)
11267			snprintf(name, IFNAMSIZ,
11268				 "%s-txrx-%d", tp->dev->name, irq_num);
11269		else if (tnapi->tx_buffers)
11270			snprintf(name, IFNAMSIZ,
11271				 "%s-tx-%d", tp->dev->name, irq_num);
11272		else if (tnapi->rx_rcb)
11273			snprintf(name, IFNAMSIZ,
11274				 "%s-rx-%d", tp->dev->name, irq_num);
11275		else
11276			snprintf(name, IFNAMSIZ,
11277				 "%s-%d", tp->dev->name, irq_num);
11278		name[IFNAMSIZ-1] = 0;
11279	}
11280
11281	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11282		fn = tg3_msi;
11283		if (tg3_flag(tp, 1SHOT_MSI))
11284			fn = tg3_msi_1shot;
11285		flags = 0;
11286	} else {
11287		fn = tg3_interrupt;
11288		if (tg3_flag(tp, TAGGED_STATUS))
11289			fn = tg3_interrupt_tagged;
11290		flags = IRQF_SHARED;
11291	}
11292
11293	return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11294}
11295
11296static int tg3_test_interrupt(struct tg3 *tp)
11297{
11298	struct tg3_napi *tnapi = &tp->napi[0];
11299	struct net_device *dev = tp->dev;
11300	int err, i, intr_ok = 0;
11301	u32 val;
11302
11303	if (!netif_running(dev))
11304		return -ENODEV;
11305
11306	tg3_disable_ints(tp);
11307
11308	free_irq(tnapi->irq_vec, tnapi);
11309
11310	/*
11311	 * Turn off MSI one shot mode.  Otherwise this test has no
11312	 * observable way to know whether the interrupt was delivered.
11313	 */
11314	if (tg3_flag(tp, 57765_PLUS)) {
11315		val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11316		tw32(MSGINT_MODE, val);
11317	}
11318
11319	err = request_irq(tnapi->irq_vec, tg3_test_isr,
11320			  IRQF_SHARED, dev->name, tnapi);
11321	if (err)
11322		return err;
11323
11324	tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11325	tg3_enable_ints(tp);
11326
11327	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11328	       tnapi->coal_now);
11329
11330	for (i = 0; i < 5; i++) {
11331		u32 int_mbox, misc_host_ctrl;
11332
11333		int_mbox = tr32_mailbox(tnapi->int_mbox);
11334		misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11335
11336		if ((int_mbox != 0) ||
11337		    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11338			intr_ok = 1;
11339			break;
11340		}
11341
11342		if (tg3_flag(tp, 57765_PLUS) &&
11343		    tnapi->hw_status->status_tag != tnapi->last_tag)
11344			tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11345
11346		msleep(10);
11347	}
11348
11349	tg3_disable_ints(tp);
11350
11351	free_irq(tnapi->irq_vec, tnapi);
11352
11353	err = tg3_request_irq(tp, 0);
11354
11355	if (err)
11356		return err;
11357
11358	if (intr_ok) {
11359		/* Reenable MSI one shot mode. */
11360		if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11361			val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11362			tw32(MSGINT_MODE, val);
11363		}
11364		return 0;
11365	}
11366
11367	return -EIO;
11368}
11369
11370/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11371 * successfully restored
11372 */
11373static int tg3_test_msi(struct tg3 *tp)
11374{
11375	int err;
11376	u16 pci_cmd;
11377
11378	if (!tg3_flag(tp, USING_MSI))
11379		return 0;
11380
11381	/* Turn off SERR reporting in case MSI terminates with Master
11382	 * Abort.
11383	 */
11384	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11385	pci_write_config_word(tp->pdev, PCI_COMMAND,
11386			      pci_cmd & ~PCI_COMMAND_SERR);
11387
11388	err = tg3_test_interrupt(tp);
11389
11390	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11391
11392	if (!err)
11393		return 0;
11394
11395	/* other failures */
11396	if (err != -EIO)
11397		return err;
11398
11399	/* MSI test failed, go back to INTx mode */
11400	netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11401		    "to INTx mode. Please report this failure to the PCI "
11402		    "maintainer and include system chipset information\n");
11403
11404	free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11405
11406	pci_disable_msi(tp->pdev);
11407
11408	tg3_flag_clear(tp, USING_MSI);
11409	tp->napi[0].irq_vec = tp->pdev->irq;
11410
11411	err = tg3_request_irq(tp, 0);
11412	if (err)
11413		return err;
11414
11415	/* Need to reset the chip because the MSI cycle may have terminated
11416	 * with Master Abort.
11417	 */
11418	tg3_full_lock(tp, 1);
11419
11420	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11421	err = tg3_init_hw(tp, true);
11422
11423	tg3_full_unlock(tp);
11424
11425	if (err)
11426		free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11427
11428	return err;
11429}
11430
11431static int tg3_request_firmware(struct tg3 *tp)
11432{
11433	const struct tg3_firmware_hdr *fw_hdr;
11434
11435	if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11436		netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11437			   tp->fw_needed);
11438		return -ENOENT;
11439	}
11440
11441	fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11442
11443	/* Firmware blob starts with version numbers, followed by
11444	 * start address and _full_ length including BSS sections
11445	 * (which must be longer than the actual data, of course
11446	 */
11447
11448	tp->fw_len = be32_to_cpu(fw_hdr->len);	/* includes bss */
11449	if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11450		netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11451			   tp->fw_len, tp->fw_needed);
11452		release_firmware(tp->fw);
11453		tp->fw = NULL;
11454		return -EINVAL;
11455	}
11456
11457	/* We no longer need firmware; we have it. */
11458	tp->fw_needed = NULL;
11459	return 0;
11460}
11461
11462static u32 tg3_irq_count(struct tg3 *tp)
11463{
11464	u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11465
11466	if (irq_cnt > 1) {
11467		/* We want as many rx rings enabled as there are cpus.
11468		 * In multiqueue MSI-X mode, the first MSI-X vector
11469		 * only deals with link interrupts, etc, so we add
11470		 * one to the number of vectors we are requesting.
11471		 */
11472		irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11473	}
11474
11475	return irq_cnt;
11476}
11477
11478static bool tg3_enable_msix(struct tg3 *tp)
11479{
11480	int i, rc;
11481	struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11482
11483	tp->txq_cnt = tp->txq_req;
11484	tp->rxq_cnt = tp->rxq_req;
11485	if (!tp->rxq_cnt)
11486		tp->rxq_cnt = netif_get_num_default_rss_queues();
11487	if (tp->rxq_cnt > tp->rxq_max)
11488		tp->rxq_cnt = tp->rxq_max;
11489
11490	/* Disable multiple TX rings by default.  Simple round-robin hardware
11491	 * scheduling of the TX rings can cause starvation of rings with
11492	 * small packets when other rings have TSO or jumbo packets.
11493	 */
11494	if (!tp->txq_req)
11495		tp->txq_cnt = 1;
11496
11497	tp->irq_cnt = tg3_irq_count(tp);
11498
11499	for (i = 0; i < tp->irq_max; i++) {
11500		msix_ent[i].entry  = i;
11501		msix_ent[i].vector = 0;
11502	}
11503
11504	rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11505	if (rc < 0) {
11506		return false;
11507	} else if (rc < tp->irq_cnt) {
11508		netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11509			      tp->irq_cnt, rc);
11510		tp->irq_cnt = rc;
11511		tp->rxq_cnt = max(rc - 1, 1);
11512		if (tp->txq_cnt)
11513			tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11514	}
11515
11516	for (i = 0; i < tp->irq_max; i++)
11517		tp->napi[i].irq_vec = msix_ent[i].vector;
11518
11519	if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11520		pci_disable_msix(tp->pdev);
11521		return false;
11522	}
11523
11524	if (tp->irq_cnt == 1)
11525		return true;
11526
11527	tg3_flag_set(tp, ENABLE_RSS);
11528
11529	if (tp->txq_cnt > 1)
11530		tg3_flag_set(tp, ENABLE_TSS);
11531
11532	netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11533
11534	return true;
11535}
11536
11537static void tg3_ints_init(struct tg3 *tp)
11538{
11539	if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11540	    !tg3_flag(tp, TAGGED_STATUS)) {
11541		/* All MSI supporting chips should support tagged
11542		 * status.  Assert that this is the case.
11543		 */
11544		netdev_warn(tp->dev,
11545			    "MSI without TAGGED_STATUS? Not using MSI\n");
11546		goto defcfg;
11547	}
11548
11549	if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11550		tg3_flag_set(tp, USING_MSIX);
11551	else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11552		tg3_flag_set(tp, USING_MSI);
11553
11554	if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11555		u32 msi_mode = tr32(MSGINT_MODE);
11556		if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11557			msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11558		if (!tg3_flag(tp, 1SHOT_MSI))
11559			msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11560		tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11561	}
11562defcfg:
11563	if (!tg3_flag(tp, USING_MSIX)) {
11564		tp->irq_cnt = 1;
11565		tp->napi[0].irq_vec = tp->pdev->irq;
11566	}
11567
11568	if (tp->irq_cnt == 1) {
11569		tp->txq_cnt = 1;
11570		tp->rxq_cnt = 1;
11571		netif_set_real_num_tx_queues(tp->dev, 1);
11572		netif_set_real_num_rx_queues(tp->dev, 1);
11573	}
11574}
11575
11576static void tg3_ints_fini(struct tg3 *tp)
11577{
11578	if (tg3_flag(tp, USING_MSIX))
11579		pci_disable_msix(tp->pdev);
11580	else if (tg3_flag(tp, USING_MSI))
11581		pci_disable_msi(tp->pdev);
11582	tg3_flag_clear(tp, USING_MSI);
11583	tg3_flag_clear(tp, USING_MSIX);
11584	tg3_flag_clear(tp, ENABLE_RSS);
11585	tg3_flag_clear(tp, ENABLE_TSS);
11586}
11587
11588static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11589		     bool init)
11590{
11591	struct net_device *dev = tp->dev;
11592	int i, err;
11593
11594	/*
11595	 * Setup interrupts first so we know how
11596	 * many NAPI resources to allocate
11597	 */
11598	tg3_ints_init(tp);
11599
11600	tg3_rss_check_indir_tbl(tp);
11601
11602	/* The placement of this call is tied
11603	 * to the setup and use of Host TX descriptors.
11604	 */
11605	err = tg3_alloc_consistent(tp);
11606	if (err)
11607		goto out_ints_fini;
11608
11609	tg3_napi_init(tp);
11610
11611	tg3_napi_enable(tp);
11612
11613	for (i = 0; i < tp->irq_cnt; i++) {
11614		err = tg3_request_irq(tp, i);
11615		if (err) {
11616			for (i--; i >= 0; i--) {
11617				struct tg3_napi *tnapi = &tp->napi[i];
11618
11619				free_irq(tnapi->irq_vec, tnapi);
11620			}
11621			goto out_napi_fini;
11622		}
11623	}
11624
11625	tg3_full_lock(tp, 0);
11626
11627	if (init)
11628		tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11629
11630	err = tg3_init_hw(tp, reset_phy);
11631	if (err) {
11632		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11633		tg3_free_rings(tp);
11634	}
11635
11636	tg3_full_unlock(tp);
11637
11638	if (err)
11639		goto out_free_irq;
11640
11641	if (test_irq && tg3_flag(tp, USING_MSI)) {
11642		err = tg3_test_msi(tp);
11643
11644		if (err) {
11645			tg3_full_lock(tp, 0);
11646			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11647			tg3_free_rings(tp);
11648			tg3_full_unlock(tp);
11649
11650			goto out_napi_fini;
11651		}
11652
11653		if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11654			u32 val = tr32(PCIE_TRANSACTION_CFG);
11655
11656			tw32(PCIE_TRANSACTION_CFG,
11657			     val | PCIE_TRANS_CFG_1SHOT_MSI);
11658		}
11659	}
11660
11661	tg3_phy_start(tp);
11662
11663	tg3_hwmon_open(tp);
11664
11665	tg3_full_lock(tp, 0);
11666
11667	tg3_timer_start(tp);
11668	tg3_flag_set(tp, INIT_COMPLETE);
11669	tg3_enable_ints(tp);
11670
11671	tg3_ptp_resume(tp);
11672
11673	tg3_full_unlock(tp);
11674
11675	netif_tx_start_all_queues(dev);
11676
11677	/*
11678	 * Reset loopback feature if it was turned on while the device was down
11679	 * make sure that it's installed properly now.
11680	 */
11681	if (dev->features & NETIF_F_LOOPBACK)
11682		tg3_set_loopback(dev, dev->features);
11683
11684	return 0;
11685
11686out_free_irq:
11687	for (i = tp->irq_cnt - 1; i >= 0; i--) {
11688		struct tg3_napi *tnapi = &tp->napi[i];
11689		free_irq(tnapi->irq_vec, tnapi);
11690	}
11691
11692out_napi_fini:
11693	tg3_napi_disable(tp);
11694	tg3_napi_fini(tp);
11695	tg3_free_consistent(tp);
11696
11697out_ints_fini:
11698	tg3_ints_fini(tp);
11699
11700	return err;
11701}
11702
11703static void tg3_stop(struct tg3 *tp)
11704{
11705	int i;
11706
11707	tg3_reset_task_cancel(tp);
11708	tg3_netif_stop(tp);
11709
11710	tg3_timer_stop(tp);
11711
11712	tg3_hwmon_close(tp);
11713
11714	tg3_phy_stop(tp);
11715
11716	tg3_full_lock(tp, 1);
11717
11718	tg3_disable_ints(tp);
11719
11720	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11721	tg3_free_rings(tp);
11722	tg3_flag_clear(tp, INIT_COMPLETE);
11723
11724	tg3_full_unlock(tp);
11725
11726	for (i = tp->irq_cnt - 1; i >= 0; i--) {
11727		struct tg3_napi *tnapi = &tp->napi[i];
11728		free_irq(tnapi->irq_vec, tnapi);
11729	}
11730
11731	tg3_ints_fini(tp);
11732
11733	tg3_napi_fini(tp);
11734
11735	tg3_free_consistent(tp);
11736}
11737
11738static int tg3_open(struct net_device *dev)
11739{
11740	struct tg3 *tp = netdev_priv(dev);
11741	int err;
11742
11743	if (tp->pcierr_recovery) {
11744		netdev_err(dev, "Failed to open device. PCI error recovery "
11745			   "in progress\n");
11746		return -EAGAIN;
11747	}
11748
11749	if (tp->fw_needed) {
11750		err = tg3_request_firmware(tp);
11751		if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11752			if (err) {
11753				netdev_warn(tp->dev, "EEE capability disabled\n");
11754				tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11755			} else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11756				netdev_warn(tp->dev, "EEE capability restored\n");
11757				tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11758			}
11759		} else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11760			if (err)
11761				return err;
11762		} else if (err) {
11763			netdev_warn(tp->dev, "TSO capability disabled\n");
11764			tg3_flag_clear(tp, TSO_CAPABLE);
11765		} else if (!tg3_flag(tp, TSO_CAPABLE)) {
11766			netdev_notice(tp->dev, "TSO capability restored\n");
11767			tg3_flag_set(tp, TSO_CAPABLE);
11768		}
11769	}
11770
11771	tg3_carrier_off(tp);
11772
11773	err = tg3_power_up(tp);
11774	if (err)
11775		return err;
11776
11777	tg3_full_lock(tp, 0);
11778
11779	tg3_disable_ints(tp);
11780	tg3_flag_clear(tp, INIT_COMPLETE);
11781
11782	tg3_full_unlock(tp);
11783
11784	err = tg3_start(tp,
11785			!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11786			true, true);
11787	if (err) {
11788		tg3_frob_aux_power(tp, false);
11789		pci_set_power_state(tp->pdev, PCI_D3hot);
11790	}
11791
11792	return err;
11793}
11794
11795static int tg3_close(struct net_device *dev)
11796{
11797	struct tg3 *tp = netdev_priv(dev);
11798
11799	if (tp->pcierr_recovery) {
11800		netdev_err(dev, "Failed to close device. PCI error recovery "
11801			   "in progress\n");
11802		return -EAGAIN;
11803	}
11804
11805	tg3_stop(tp);
11806
11807	if (pci_device_is_present(tp->pdev)) {
11808		tg3_power_down_prepare(tp);
11809
11810		tg3_carrier_off(tp);
11811	}
11812	return 0;
11813}
11814
11815static inline u64 get_stat64(tg3_stat64_t *val)
11816{
11817       return ((u64)val->high << 32) | ((u64)val->low);
11818}
11819
11820static u64 tg3_calc_crc_errors(struct tg3 *tp)
11821{
11822	struct tg3_hw_stats *hw_stats = tp->hw_stats;
11823
11824	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11825	    (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11826	     tg3_asic_rev(tp) == ASIC_REV_5701)) {
11827		u32 val;
11828
11829		if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11830			tg3_writephy(tp, MII_TG3_TEST1,
11831				     val | MII_TG3_TEST1_CRC_EN);
11832			tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11833		} else
11834			val = 0;
11835
11836		tp->phy_crc_errors += val;
11837
11838		return tp->phy_crc_errors;
11839	}
11840
11841	return get_stat64(&hw_stats->rx_fcs_errors);
11842}
11843
11844#define ESTAT_ADD(member) \
11845	estats->member =	old_estats->member + \
11846				get_stat64(&hw_stats->member)
11847
11848static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11849{
11850	struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11851	struct tg3_hw_stats *hw_stats = tp->hw_stats;
11852
11853	ESTAT_ADD(rx_octets);
11854	ESTAT_ADD(rx_fragments);
11855	ESTAT_ADD(rx_ucast_packets);
11856	ESTAT_ADD(rx_mcast_packets);
11857	ESTAT_ADD(rx_bcast_packets);
11858	ESTAT_ADD(rx_fcs_errors);
11859	ESTAT_ADD(rx_align_errors);
11860	ESTAT_ADD(rx_xon_pause_rcvd);
11861	ESTAT_ADD(rx_xoff_pause_rcvd);
11862	ESTAT_ADD(rx_mac_ctrl_rcvd);
11863	ESTAT_ADD(rx_xoff_entered);
11864	ESTAT_ADD(rx_frame_too_long_errors);
11865	ESTAT_ADD(rx_jabbers);
11866	ESTAT_ADD(rx_undersize_packets);
11867	ESTAT_ADD(rx_in_length_errors);
11868	ESTAT_ADD(rx_out_length_errors);
11869	ESTAT_ADD(rx_64_or_less_octet_packets);
11870	ESTAT_ADD(rx_65_to_127_octet_packets);
11871	ESTAT_ADD(rx_128_to_255_octet_packets);
11872	ESTAT_ADD(rx_256_to_511_octet_packets);
11873	ESTAT_ADD(rx_512_to_1023_octet_packets);
11874	ESTAT_ADD(rx_1024_to_1522_octet_packets);
11875	ESTAT_ADD(rx_1523_to_2047_octet_packets);
11876	ESTAT_ADD(rx_2048_to_4095_octet_packets);
11877	ESTAT_ADD(rx_4096_to_8191_octet_packets);
11878	ESTAT_ADD(rx_8192_to_9022_octet_packets);
11879
11880	ESTAT_ADD(tx_octets);
11881	ESTAT_ADD(tx_collisions);
11882	ESTAT_ADD(tx_xon_sent);
11883	ESTAT_ADD(tx_xoff_sent);
11884	ESTAT_ADD(tx_flow_control);
11885	ESTAT_ADD(tx_mac_errors);
11886	ESTAT_ADD(tx_single_collisions);
11887	ESTAT_ADD(tx_mult_collisions);
11888	ESTAT_ADD(tx_deferred);
11889	ESTAT_ADD(tx_excessive_collisions);
11890	ESTAT_ADD(tx_late_collisions);
11891	ESTAT_ADD(tx_collide_2times);
11892	ESTAT_ADD(tx_collide_3times);
11893	ESTAT_ADD(tx_collide_4times);
11894	ESTAT_ADD(tx_collide_5times);
11895	ESTAT_ADD(tx_collide_6times);
11896	ESTAT_ADD(tx_collide_7times);
11897	ESTAT_ADD(tx_collide_8times);
11898	ESTAT_ADD(tx_collide_9times);
11899	ESTAT_ADD(tx_collide_10times);
11900	ESTAT_ADD(tx_collide_11times);
11901	ESTAT_ADD(tx_collide_12times);
11902	ESTAT_ADD(tx_collide_13times);
11903	ESTAT_ADD(tx_collide_14times);
11904	ESTAT_ADD(tx_collide_15times);
11905	ESTAT_ADD(tx_ucast_packets);
11906	ESTAT_ADD(tx_mcast_packets);
11907	ESTAT_ADD(tx_bcast_packets);
11908	ESTAT_ADD(tx_carrier_sense_errors);
11909	ESTAT_ADD(tx_discards);
11910	ESTAT_ADD(tx_errors);
11911
11912	ESTAT_ADD(dma_writeq_full);
11913	ESTAT_ADD(dma_write_prioq_full);
11914	ESTAT_ADD(rxbds_empty);
11915	ESTAT_ADD(rx_discards);
11916	ESTAT_ADD(rx_errors);
11917	ESTAT_ADD(rx_threshold_hit);
11918
11919	ESTAT_ADD(dma_readq_full);
11920	ESTAT_ADD(dma_read_prioq_full);
11921	ESTAT_ADD(tx_comp_queue_full);
11922
11923	ESTAT_ADD(ring_set_send_prod_index);
11924	ESTAT_ADD(ring_status_update);
11925	ESTAT_ADD(nic_irqs);
11926	ESTAT_ADD(nic_avoided_irqs);
11927	ESTAT_ADD(nic_tx_threshold_hit);
11928
11929	ESTAT_ADD(mbuf_lwm_thresh_hit);
11930}
11931
11932static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11933{
11934	struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11935	struct tg3_hw_stats *hw_stats = tp->hw_stats;
11936	unsigned long rx_dropped;
11937	unsigned long tx_dropped;
11938	int i;
11939
11940	stats->rx_packets = old_stats->rx_packets +
11941		get_stat64(&hw_stats->rx_ucast_packets) +
11942		get_stat64(&hw_stats->rx_mcast_packets) +
11943		get_stat64(&hw_stats->rx_bcast_packets);
11944
11945	stats->tx_packets = old_stats->tx_packets +
11946		get_stat64(&hw_stats->tx_ucast_packets) +
11947		get_stat64(&hw_stats->tx_mcast_packets) +
11948		get_stat64(&hw_stats->tx_bcast_packets);
11949
11950	stats->rx_bytes = old_stats->rx_bytes +
11951		get_stat64(&hw_stats->rx_octets);
11952	stats->tx_bytes = old_stats->tx_bytes +
11953		get_stat64(&hw_stats->tx_octets);
11954
11955	stats->rx_errors = old_stats->rx_errors +
11956		get_stat64(&hw_stats->rx_errors);
11957	stats->tx_errors = old_stats->tx_errors +
11958		get_stat64(&hw_stats->tx_errors) +
11959		get_stat64(&hw_stats->tx_mac_errors) +
11960		get_stat64(&hw_stats->tx_carrier_sense_errors) +
11961		get_stat64(&hw_stats->tx_discards);
11962
11963	stats->multicast = old_stats->multicast +
11964		get_stat64(&hw_stats->rx_mcast_packets);
11965	stats->collisions = old_stats->collisions +
11966		get_stat64(&hw_stats->tx_collisions);
11967
11968	stats->rx_length_errors = old_stats->rx_length_errors +
11969		get_stat64(&hw_stats->rx_frame_too_long_errors) +
11970		get_stat64(&hw_stats->rx_undersize_packets);
11971
11972	stats->rx_frame_errors = old_stats->rx_frame_errors +
11973		get_stat64(&hw_stats->rx_align_errors);
11974	stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11975		get_stat64(&hw_stats->tx_discards);
11976	stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11977		get_stat64(&hw_stats->tx_carrier_sense_errors);
11978
11979	stats->rx_crc_errors = old_stats->rx_crc_errors +
11980		tg3_calc_crc_errors(tp);
11981
11982	stats->rx_missed_errors = old_stats->rx_missed_errors +
11983		get_stat64(&hw_stats->rx_discards);
11984
11985	/* Aggregate per-queue counters. The per-queue counters are updated
11986	 * by a single writer, race-free. The result computed by this loop
11987	 * might not be 100% accurate (counters can be updated in the middle of
11988	 * the loop) but the next tg3_get_nstats() will recompute the current
11989	 * value so it is acceptable.
11990	 *
11991	 * Note that these counters wrap around at 4G on 32bit machines.
11992	 */
11993	rx_dropped = (unsigned long)(old_stats->rx_dropped);
11994	tx_dropped = (unsigned long)(old_stats->tx_dropped);
11995
11996	for (i = 0; i < tp->irq_cnt; i++) {
11997		struct tg3_napi *tnapi = &tp->napi[i];
11998
11999		rx_dropped += tnapi->rx_dropped;
12000		tx_dropped += tnapi->tx_dropped;
12001	}
12002
12003	stats->rx_dropped = rx_dropped;
12004	stats->tx_dropped = tx_dropped;
12005}
12006
12007static int tg3_get_regs_len(struct net_device *dev)
12008{
12009	return TG3_REG_BLK_SIZE;
12010}
12011
12012static void tg3_get_regs(struct net_device *dev,
12013		struct ethtool_regs *regs, void *_p)
12014{
12015	struct tg3 *tp = netdev_priv(dev);
12016
12017	regs->version = 0;
12018
12019	memset(_p, 0, TG3_REG_BLK_SIZE);
12020
12021	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
12022		return;
12023
12024	tg3_full_lock(tp, 0);
12025
12026	tg3_dump_legacy_regs(tp, (u32 *)_p);
12027
12028	tg3_full_unlock(tp);
12029}
12030
12031static int tg3_get_eeprom_len(struct net_device *dev)
12032{
12033	struct tg3 *tp = netdev_priv(dev);
12034
12035	return tp->nvram_size;
12036}
12037
12038static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12039{
12040	struct tg3 *tp = netdev_priv(dev);
12041	int ret, cpmu_restore = 0;
12042	u8  *pd;
12043	u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
12044	__be32 val;
12045
12046	if (tg3_flag(tp, NO_NVRAM))
12047		return -EINVAL;
12048
12049	offset = eeprom->offset;
12050	len = eeprom->len;
12051	eeprom->len = 0;
12052
12053	eeprom->magic = TG3_EEPROM_MAGIC;
12054
12055	/* Override clock, link aware and link idle modes */
12056	if (tg3_flag(tp, CPMU_PRESENT)) {
12057		cpmu_val = tr32(TG3_CPMU_CTRL);
12058		if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
12059				CPMU_CTRL_LINK_IDLE_MODE)) {
12060			tw32(TG3_CPMU_CTRL, cpmu_val &
12061					    ~(CPMU_CTRL_LINK_AWARE_MODE |
12062					     CPMU_CTRL_LINK_IDLE_MODE));
12063			cpmu_restore = 1;
12064		}
12065	}
12066	tg3_override_clk(tp);
12067
12068	if (offset & 3) {
12069		/* adjustments to start on required 4 byte boundary */
12070		b_offset = offset & 3;
12071		b_count = 4 - b_offset;
12072		if (b_count > len) {
12073			/* i.e. offset=1 len=2 */
12074			b_count = len;
12075		}
12076		ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
12077		if (ret)
12078			goto eeprom_done;
12079		memcpy(data, ((char *)&val) + b_offset, b_count);
12080		len -= b_count;
12081		offset += b_count;
12082		eeprom->len += b_count;
12083	}
12084
12085	/* read bytes up to the last 4 byte boundary */
12086	pd = &data[eeprom->len];
12087	for (i = 0; i < (len - (len & 3)); i += 4) {
12088		ret = tg3_nvram_read_be32(tp, offset + i, &val);
12089		if (ret) {
12090			if (i)
12091				i -= 4;
12092			eeprom->len += i;
12093			goto eeprom_done;
12094		}
12095		memcpy(pd + i, &val, 4);
12096		if (need_resched()) {
12097			if (signal_pending(current)) {
12098				eeprom->len += i;
12099				ret = -EINTR;
12100				goto eeprom_done;
12101			}
12102			cond_resched();
12103		}
12104	}
12105	eeprom->len += i;
12106
12107	if (len & 3) {
12108		/* read last bytes not ending on 4 byte boundary */
12109		pd = &data[eeprom->len];
12110		b_count = len & 3;
12111		b_offset = offset + len - b_count;
12112		ret = tg3_nvram_read_be32(tp, b_offset, &val);
12113		if (ret)
12114			goto eeprom_done;
12115		memcpy(pd, &val, b_count);
12116		eeprom->len += b_count;
12117	}
12118	ret = 0;
12119
12120eeprom_done:
12121	/* Restore clock, link aware and link idle modes */
12122	tg3_restore_clk(tp);
12123	if (cpmu_restore)
12124		tw32(TG3_CPMU_CTRL, cpmu_val);
12125
12126	return ret;
12127}
12128
12129static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12130{
12131	struct tg3 *tp = netdev_priv(dev);
12132	int ret;
12133	u32 offset, len, b_offset, odd_len;
12134	u8 *buf;
12135	__be32 start = 0, end;
12136
12137	if (tg3_flag(tp, NO_NVRAM) ||
12138	    eeprom->magic != TG3_EEPROM_MAGIC)
12139		return -EINVAL;
12140
12141	offset = eeprom->offset;
12142	len = eeprom->len;
12143
12144	if ((b_offset = (offset & 3))) {
12145		/* adjustments to start on required 4 byte boundary */
12146		ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12147		if (ret)
12148			return ret;
12149		len += b_offset;
12150		offset &= ~3;
12151		if (len < 4)
12152			len = 4;
12153	}
12154
12155	odd_len = 0;
12156	if (len & 3) {
12157		/* adjustments to end on required 4 byte boundary */
12158		odd_len = 1;
12159		len = (len + 3) & ~3;
12160		ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12161		if (ret)
12162			return ret;
12163	}
12164
12165	buf = data;
12166	if (b_offset || odd_len) {
12167		buf = kmalloc(len, GFP_KERNEL);
12168		if (!buf)
12169			return -ENOMEM;
12170		if (b_offset)
12171			memcpy(buf, &start, 4);
12172		if (odd_len)
12173			memcpy(buf+len-4, &end, 4);
12174		memcpy(buf + b_offset, data, eeprom->len);
12175	}
12176
12177	ret = tg3_nvram_write_block(tp, offset, len, buf);
12178
12179	if (buf != data)
12180		kfree(buf);
12181
12182	return ret;
12183}
12184
12185static int tg3_get_link_ksettings(struct net_device *dev,
12186				  struct ethtool_link_ksettings *cmd)
12187{
12188	struct tg3 *tp = netdev_priv(dev);
12189	u32 supported, advertising;
12190
12191	if (tg3_flag(tp, USE_PHYLIB)) {
12192		struct phy_device *phydev;
12193		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12194			return -EAGAIN;
12195		phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12196		phy_ethtool_ksettings_get(phydev, cmd);
12197
12198		return 0;
12199	}
12200
12201	supported = (SUPPORTED_Autoneg);
12202
12203	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12204		supported |= (SUPPORTED_1000baseT_Half |
12205			      SUPPORTED_1000baseT_Full);
12206
12207	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12208		supported |= (SUPPORTED_100baseT_Half |
12209			      SUPPORTED_100baseT_Full |
12210			      SUPPORTED_10baseT_Half |
12211			      SUPPORTED_10baseT_Full |
12212			      SUPPORTED_TP);
12213		cmd->base.port = PORT_TP;
12214	} else {
12215		supported |= SUPPORTED_FIBRE;
12216		cmd->base.port = PORT_FIBRE;
12217	}
12218	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12219						supported);
12220
12221	advertising = tp->link_config.advertising;
12222	if (tg3_flag(tp, PAUSE_AUTONEG)) {
12223		if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12224			if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12225				advertising |= ADVERTISED_Pause;
12226			} else {
12227				advertising |= ADVERTISED_Pause |
12228					ADVERTISED_Asym_Pause;
12229			}
12230		} else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12231			advertising |= ADVERTISED_Asym_Pause;
12232		}
12233	}
12234	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12235						advertising);
12236
12237	if (netif_running(dev) && tp->link_up) {
12238		cmd->base.speed = tp->link_config.active_speed;
12239		cmd->base.duplex = tp->link_config.active_duplex;
12240		ethtool_convert_legacy_u32_to_link_mode(
12241			cmd->link_modes.lp_advertising,
12242			tp->link_config.rmt_adv);
12243
12244		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12245			if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12246				cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12247			else
12248				cmd->base.eth_tp_mdix = ETH_TP_MDI;
12249		}
12250	} else {
12251		cmd->base.speed = SPEED_UNKNOWN;
12252		cmd->base.duplex = DUPLEX_UNKNOWN;
12253		cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12254	}
12255	cmd->base.phy_address = tp->phy_addr;
12256	cmd->base.autoneg = tp->link_config.autoneg;
12257	return 0;
12258}
12259
12260static int tg3_set_link_ksettings(struct net_device *dev,
12261				  const struct ethtool_link_ksettings *cmd)
12262{
12263	struct tg3 *tp = netdev_priv(dev);
12264	u32 speed = cmd->base.speed;
12265	u32 advertising;
12266
12267	if (tg3_flag(tp, USE_PHYLIB)) {
12268		struct phy_device *phydev;
12269		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12270			return -EAGAIN;
12271		phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12272		return phy_ethtool_ksettings_set(phydev, cmd);
12273	}
12274
12275	if (cmd->base.autoneg != AUTONEG_ENABLE &&
12276	    cmd->base.autoneg != AUTONEG_DISABLE)
12277		return -EINVAL;
12278
12279	if (cmd->base.autoneg == AUTONEG_DISABLE &&
12280	    cmd->base.duplex != DUPLEX_FULL &&
12281	    cmd->base.duplex != DUPLEX_HALF)
12282		return -EINVAL;
12283
12284	ethtool_convert_link_mode_to_legacy_u32(&advertising,
12285						cmd->link_modes.advertising);
12286
12287	if (cmd->base.autoneg == AUTONEG_ENABLE) {
12288		u32 mask = ADVERTISED_Autoneg |
12289			   ADVERTISED_Pause |
12290			   ADVERTISED_Asym_Pause;
12291
12292		if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12293			mask |= ADVERTISED_1000baseT_Half |
12294				ADVERTISED_1000baseT_Full;
12295
12296		if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12297			mask |= ADVERTISED_100baseT_Half |
12298				ADVERTISED_100baseT_Full |
12299				ADVERTISED_10baseT_Half |
12300				ADVERTISED_10baseT_Full |
12301				ADVERTISED_TP;
12302		else
12303			mask |= ADVERTISED_FIBRE;
12304
12305		if (advertising & ~mask)
12306			return -EINVAL;
12307
12308		mask &= (ADVERTISED_1000baseT_Half |
12309			 ADVERTISED_1000baseT_Full |
12310			 ADVERTISED_100baseT_Half |
12311			 ADVERTISED_100baseT_Full |
12312			 ADVERTISED_10baseT_Half |
12313			 ADVERTISED_10baseT_Full);
12314
12315		advertising &= mask;
12316	} else {
12317		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12318			if (speed != SPEED_1000)
12319				return -EINVAL;
12320
12321			if (cmd->base.duplex != DUPLEX_FULL)
12322				return -EINVAL;
12323		} else {
12324			if (speed != SPEED_100 &&
12325			    speed != SPEED_10)
12326				return -EINVAL;
12327		}
12328	}
12329
12330	tg3_full_lock(tp, 0);
12331
12332	tp->link_config.autoneg = cmd->base.autoneg;
12333	if (cmd->base.autoneg == AUTONEG_ENABLE) {
12334		tp->link_config.advertising = (advertising |
12335					      ADVERTISED_Autoneg);
12336		tp->link_config.speed = SPEED_UNKNOWN;
12337		tp->link_config.duplex = DUPLEX_UNKNOWN;
12338	} else {
12339		tp->link_config.advertising = 0;
12340		tp->link_config.speed = speed;
12341		tp->link_config.duplex = cmd->base.duplex;
12342	}
12343
12344	tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12345
12346	tg3_warn_mgmt_link_flap(tp);
12347
12348	if (netif_running(dev))
12349		tg3_setup_phy(tp, true);
12350
12351	tg3_full_unlock(tp);
12352
12353	return 0;
12354}
12355
12356static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12357{
12358	struct tg3 *tp = netdev_priv(dev);
12359
12360	strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12361	strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12362	strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12363}
12364
12365static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12366{
12367	struct tg3 *tp = netdev_priv(dev);
12368
12369	if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12370		wol->supported = WAKE_MAGIC;
12371	else
12372		wol->supported = 0;
12373	wol->wolopts = 0;
12374	if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12375		wol->wolopts = WAKE_MAGIC;
12376	memset(&wol->sopass, 0, sizeof(wol->sopass));
12377}
12378
12379static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12380{
12381	struct tg3 *tp = netdev_priv(dev);
12382	struct device *dp = &tp->pdev->dev;
12383
12384	if (wol->wolopts & ~WAKE_MAGIC)
12385		return -EINVAL;
12386	if ((wol->wolopts & WAKE_MAGIC) &&
12387	    !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12388		return -EINVAL;
12389
12390	device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12391
12392	if (device_may_wakeup(dp))
12393		tg3_flag_set(tp, WOL_ENABLE);
12394	else
12395		tg3_flag_clear(tp, WOL_ENABLE);
12396
12397	return 0;
12398}
12399
12400static u32 tg3_get_msglevel(struct net_device *dev)
12401{
12402	struct tg3 *tp = netdev_priv(dev);
12403	return tp->msg_enable;
12404}
12405
12406static void tg3_set_msglevel(struct net_device *dev, u32 value)
12407{
12408	struct tg3 *tp = netdev_priv(dev);
12409	tp->msg_enable = value;
12410}
12411
12412static int tg3_nway_reset(struct net_device *dev)
12413{
12414	struct tg3 *tp = netdev_priv(dev);
12415	int r;
12416
12417	if (!netif_running(dev))
12418		return -EAGAIN;
12419
12420	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12421		return -EINVAL;
12422
12423	tg3_warn_mgmt_link_flap(tp);
12424
12425	if (tg3_flag(tp, USE_PHYLIB)) {
12426		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12427			return -EAGAIN;
12428		r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12429	} else {
12430		u32 bmcr;
12431
12432		spin_lock_bh(&tp->lock);
12433		r = -EINVAL;
12434		tg3_readphy(tp, MII_BMCR, &bmcr);
12435		if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12436		    ((bmcr & BMCR_ANENABLE) ||
12437		     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12438			tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12439						   BMCR_ANENABLE);
12440			r = 0;
12441		}
12442		spin_unlock_bh(&tp->lock);
12443	}
12444
12445	return r;
12446}
12447
12448static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12449{
12450	struct tg3 *tp = netdev_priv(dev);
12451
12452	ering->rx_max_pending = tp->rx_std_ring_mask;
12453	if (tg3_flag(tp, JUMBO_RING_ENABLE))
12454		ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12455	else
12456		ering->rx_jumbo_max_pending = 0;
12457
12458	ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12459
12460	ering->rx_pending = tp->rx_pending;
12461	if (tg3_flag(tp, JUMBO_RING_ENABLE))
12462		ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12463	else
12464		ering->rx_jumbo_pending = 0;
12465
12466	ering->tx_pending = tp->napi[0].tx_pending;
12467}
12468
12469static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12470{
12471	struct tg3 *tp = netdev_priv(dev);
12472	int i, irq_sync = 0, err = 0;
12473	bool reset_phy = false;
12474
12475	if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12476	    (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12477	    (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12478	    (ering->tx_pending <= MAX_SKB_FRAGS) ||
12479	    (tg3_flag(tp, TSO_BUG) &&
12480	     (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12481		return -EINVAL;
12482
12483	if (netif_running(dev)) {
12484		tg3_phy_stop(tp);
12485		tg3_netif_stop(tp);
12486		irq_sync = 1;
12487	}
12488
12489	tg3_full_lock(tp, irq_sync);
12490
12491	tp->rx_pending = ering->rx_pending;
12492
12493	if (tg3_flag(tp, MAX_RXPEND_64) &&
12494	    tp->rx_pending > 63)
12495		tp->rx_pending = 63;
12496
12497	if (tg3_flag(tp, JUMBO_RING_ENABLE))
12498		tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12499
12500	for (i = 0; i < tp->irq_max; i++)
12501		tp->napi[i].tx_pending = ering->tx_pending;
12502
12503	if (netif_running(dev)) {
12504		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12505		/* Reset PHY to avoid PHY lock up */
12506		if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12507		    tg3_asic_rev(tp) == ASIC_REV_5719 ||
12508		    tg3_asic_rev(tp) == ASIC_REV_5720)
12509			reset_phy = true;
12510
12511		err = tg3_restart_hw(tp, reset_phy);
12512		if (!err)
12513			tg3_netif_start(tp);
12514	}
12515
12516	tg3_full_unlock(tp);
12517
12518	if (irq_sync && !err)
12519		tg3_phy_start(tp);
12520
12521	return err;
12522}
12523
12524static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12525{
12526	struct tg3 *tp = netdev_priv(dev);
12527
12528	epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12529
12530	if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12531		epause->rx_pause = 1;
12532	else
12533		epause->rx_pause = 0;
12534
12535	if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12536		epause->tx_pause = 1;
12537	else
12538		epause->tx_pause = 0;
12539}
12540
12541static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12542{
12543	struct tg3 *tp = netdev_priv(dev);
12544	int err = 0;
12545	bool reset_phy = false;
12546
12547	if (tp->link_config.autoneg == AUTONEG_ENABLE)
12548		tg3_warn_mgmt_link_flap(tp);
12549
12550	if (tg3_flag(tp, USE_PHYLIB)) {
12551		struct phy_device *phydev;
12552
12553		phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12554
12555		if (!phy_validate_pause(phydev, epause))
12556			return -EINVAL;
12557
12558		tp->link_config.flowctrl = 0;
12559		phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause);
12560		if (epause->rx_pause) {
12561			tp->link_config.flowctrl |= FLOW_CTRL_RX;
12562
12563			if (epause->tx_pause) {
12564				tp->link_config.flowctrl |= FLOW_CTRL_TX;
12565			}
12566		} else if (epause->tx_pause) {
12567			tp->link_config.flowctrl |= FLOW_CTRL_TX;
12568		}
12569
12570		if (epause->autoneg)
12571			tg3_flag_set(tp, PAUSE_AUTONEG);
12572		else
12573			tg3_flag_clear(tp, PAUSE_AUTONEG);
12574
12575		if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12576			if (phydev->autoneg) {
12577				/* phy_set_asym_pause() will
12578				 * renegotiate the link to inform our
12579				 * link partner of our flow control
12580				 * settings, even if the flow control
12581				 * is forced.  Let tg3_adjust_link()
12582				 * do the final flow control setup.
12583				 */
12584				return 0;
12585			}
12586
12587			if (!epause->autoneg)
12588				tg3_setup_flow_control(tp, 0, 0);
12589		}
12590	} else {
12591		int irq_sync = 0;
12592
12593		if (netif_running(dev)) {
12594			tg3_netif_stop(tp);
12595			irq_sync = 1;
12596		}
12597
12598		tg3_full_lock(tp, irq_sync);
12599
12600		if (epause->autoneg)
12601			tg3_flag_set(tp, PAUSE_AUTONEG);
12602		else
12603			tg3_flag_clear(tp, PAUSE_AUTONEG);
12604		if (epause->rx_pause)
12605			tp->link_config.flowctrl |= FLOW_CTRL_RX;
12606		else
12607			tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12608		if (epause->tx_pause)
12609			tp->link_config.flowctrl |= FLOW_CTRL_TX;
12610		else
12611			tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12612
12613		if (netif_running(dev)) {
12614			tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12615			/* Reset PHY to avoid PHY lock up */
12616			if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12617			    tg3_asic_rev(tp) == ASIC_REV_5719 ||
12618			    tg3_asic_rev(tp) == ASIC_REV_5720)
12619				reset_phy = true;
12620
12621			err = tg3_restart_hw(tp, reset_phy);
12622			if (!err)
12623				tg3_netif_start(tp);
12624		}
12625
12626		tg3_full_unlock(tp);
12627	}
12628
12629	tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12630
12631	return err;
12632}
12633
12634static int tg3_get_sset_count(struct net_device *dev, int sset)
12635{
12636	switch (sset) {
12637	case ETH_SS_TEST:
12638		return TG3_NUM_TEST;
12639	case ETH_SS_STATS:
12640		return TG3_NUM_STATS;
12641	default:
12642		return -EOPNOTSUPP;
12643	}
12644}
12645
12646static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12647			 u32 *rules __always_unused)
12648{
12649	struct tg3 *tp = netdev_priv(dev);
12650
12651	if (!tg3_flag(tp, SUPPORT_MSIX))
12652		return -EOPNOTSUPP;
12653
12654	switch (info->cmd) {
12655	case ETHTOOL_GRXRINGS:
12656		if (netif_running(tp->dev))
12657			info->data = tp->rxq_cnt;
12658		else {
12659			info->data = num_online_cpus();
12660			if (info->data > TG3_RSS_MAX_NUM_QS)
12661				info->data = TG3_RSS_MAX_NUM_QS;
12662		}
12663
12664		return 0;
12665
12666	default:
12667		return -EOPNOTSUPP;
12668	}
12669}
12670
12671static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12672{
12673	u32 size = 0;
12674	struct tg3 *tp = netdev_priv(dev);
12675
12676	if (tg3_flag(tp, SUPPORT_MSIX))
12677		size = TG3_RSS_INDIR_TBL_SIZE;
12678
12679	return size;
12680}
12681
12682static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12683{
12684	struct tg3 *tp = netdev_priv(dev);
12685	int i;
12686
12687	if (hfunc)
12688		*hfunc = ETH_RSS_HASH_TOP;
12689	if (!indir)
12690		return 0;
12691
12692	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12693		indir[i] = tp->rss_ind_tbl[i];
12694
12695	return 0;
12696}
12697
12698static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12699			const u8 hfunc)
12700{
12701	struct tg3 *tp = netdev_priv(dev);
12702	size_t i;
12703
12704	/* We require at least one supported parameter to be changed and no
12705	 * change in any of the unsupported parameters
12706	 */
12707	if (key ||
12708	    (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12709		return -EOPNOTSUPP;
12710
12711	if (!indir)
12712		return 0;
12713
12714	for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12715		tp->rss_ind_tbl[i] = indir[i];
12716
12717	if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12718		return 0;
12719
12720	/* It is legal to write the indirection
12721	 * table while the device is running.
12722	 */
12723	tg3_full_lock(tp, 0);
12724	tg3_rss_write_indir_tbl(tp);
12725	tg3_full_unlock(tp);
12726
12727	return 0;
12728}
12729
12730static void tg3_get_channels(struct net_device *dev,
12731			     struct ethtool_channels *channel)
12732{
12733	struct tg3 *tp = netdev_priv(dev);
12734	u32 deflt_qs = netif_get_num_default_rss_queues();
12735
12736	channel->max_rx = tp->rxq_max;
12737	channel->max_tx = tp->txq_max;
12738
12739	if (netif_running(dev)) {
12740		channel->rx_count = tp->rxq_cnt;
12741		channel->tx_count = tp->txq_cnt;
12742	} else {
12743		if (tp->rxq_req)
12744			channel->rx_count = tp->rxq_req;
12745		else
12746			channel->rx_count = min(deflt_qs, tp->rxq_max);
12747
12748		if (tp->txq_req)
12749			channel->tx_count = tp->txq_req;
12750		else
12751			channel->tx_count = min(deflt_qs, tp->txq_max);
12752	}
12753}
12754
12755static int tg3_set_channels(struct net_device *dev,
12756			    struct ethtool_channels *channel)
12757{
12758	struct tg3 *tp = netdev_priv(dev);
12759
12760	if (!tg3_flag(tp, SUPPORT_MSIX))
12761		return -EOPNOTSUPP;
12762
12763	if (channel->rx_count > tp->rxq_max ||
12764	    channel->tx_count > tp->txq_max)
12765		return -EINVAL;
12766
12767	tp->rxq_req = channel->rx_count;
12768	tp->txq_req = channel->tx_count;
12769
12770	if (!netif_running(dev))
12771		return 0;
12772
12773	tg3_stop(tp);
12774
12775	tg3_carrier_off(tp);
12776
12777	tg3_start(tp, true, false, false);
12778
12779	return 0;
12780}
12781
12782static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12783{
12784	switch (stringset) {
12785	case ETH_SS_STATS:
12786		memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12787		break;
12788	case ETH_SS_TEST:
12789		memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12790		break;
12791	default:
12792		WARN_ON(1);	/* we need a WARN() */
12793		break;
12794	}
12795}
12796
12797static int tg3_set_phys_id(struct net_device *dev,
12798			    enum ethtool_phys_id_state state)
12799{
12800	struct tg3 *tp = netdev_priv(dev);
12801
12802	switch (state) {
12803	case ETHTOOL_ID_ACTIVE:
12804		return 1;	/* cycle on/off once per second */
12805
12806	case ETHTOOL_ID_ON:
12807		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12808		     LED_CTRL_1000MBPS_ON |
12809		     LED_CTRL_100MBPS_ON |
12810		     LED_CTRL_10MBPS_ON |
12811		     LED_CTRL_TRAFFIC_OVERRIDE |
12812		     LED_CTRL_TRAFFIC_BLINK |
12813		     LED_CTRL_TRAFFIC_LED);
12814		break;
12815
12816	case ETHTOOL_ID_OFF:
12817		tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12818		     LED_CTRL_TRAFFIC_OVERRIDE);
12819		break;
12820
12821	case ETHTOOL_ID_INACTIVE:
12822		tw32(MAC_LED_CTRL, tp->led_ctrl);
12823		break;
12824	}
12825
12826	return 0;
12827}
12828
12829static void tg3_get_ethtool_stats(struct net_device *dev,
12830				   struct ethtool_stats *estats, u64 *tmp_stats)
12831{
12832	struct tg3 *tp = netdev_priv(dev);
12833
12834	if (tp->hw_stats)
12835		tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12836	else
12837		memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12838}
12839
12840static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
12841{
12842	int i;
12843	__be32 *buf;
12844	u32 offset = 0, len = 0;
12845	u32 magic, val;
12846
12847	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12848		return NULL;
12849
12850	if (magic == TG3_EEPROM_MAGIC) {
12851		for (offset = TG3_NVM_DIR_START;
12852		     offset < TG3_NVM_DIR_END;
12853		     offset += TG3_NVM_DIRENT_SIZE) {
12854			if (tg3_nvram_read(tp, offset, &val))
12855				return NULL;
12856
12857			if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12858			    TG3_NVM_DIRTYPE_EXTVPD)
12859				break;
12860		}
12861
12862		if (offset != TG3_NVM_DIR_END) {
12863			len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12864			if (tg3_nvram_read(tp, offset + 4, &offset))
12865				return NULL;
12866
12867			offset = tg3_nvram_logical_addr(tp, offset);
12868		}
12869	}
12870
12871	if (!offset || !len) {
12872		offset = TG3_NVM_VPD_OFF;
12873		len = TG3_NVM_VPD_LEN;
12874	}
12875
12876	buf = kmalloc(len, GFP_KERNEL);
12877	if (buf == NULL)
12878		return NULL;
12879
12880	if (magic == TG3_EEPROM_MAGIC) {
12881		for (i = 0; i < len; i += 4) {
12882			/* The data is in little-endian format in NVRAM.
12883			 * Use the big-endian read routines to preserve
12884			 * the byte order as it exists in NVRAM.
12885			 */
12886			if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12887				goto error;
12888		}
12889	} else {
12890		u8 *ptr;
12891		ssize_t cnt;
12892		unsigned int pos = 0;
12893
12894		ptr = (u8 *)&buf[0];
12895		for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
12896			cnt = pci_read_vpd(tp->pdev, pos,
12897					   len - pos, ptr);
12898			if (cnt == -ETIMEDOUT || cnt == -EINTR)
12899				cnt = 0;
12900			else if (cnt < 0)
12901				goto error;
12902		}
12903		if (pos != len)
12904			goto error;
12905	}
12906
12907	*vpdlen = len;
12908
12909	return buf;
12910
12911error:
12912	kfree(buf);
12913	return NULL;
12914}
12915
12916#define NVRAM_TEST_SIZE 0x100
12917#define NVRAM_SELFBOOT_FORMAT1_0_SIZE	0x14
12918#define NVRAM_SELFBOOT_FORMAT1_2_SIZE	0x18
12919#define NVRAM_SELFBOOT_FORMAT1_3_SIZE	0x1c
12920#define NVRAM_SELFBOOT_FORMAT1_4_SIZE	0x20
12921#define NVRAM_SELFBOOT_FORMAT1_5_SIZE	0x24
12922#define NVRAM_SELFBOOT_FORMAT1_6_SIZE	0x50
12923#define NVRAM_SELFBOOT_HW_SIZE 0x20
12924#define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12925
12926static int tg3_test_nvram(struct tg3 *tp)
12927{
12928	u32 csum, magic, len;
12929	__be32 *buf;
12930	int i, j, k, err = 0, size;
12931
12932	if (tg3_flag(tp, NO_NVRAM))
12933		return 0;
12934
12935	if (tg3_nvram_read(tp, 0, &magic) != 0)
12936		return -EIO;
12937
12938	if (magic == TG3_EEPROM_MAGIC)
12939		size = NVRAM_TEST_SIZE;
12940	else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12941		if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12942		    TG3_EEPROM_SB_FORMAT_1) {
12943			switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12944			case TG3_EEPROM_SB_REVISION_0:
12945				size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12946				break;
12947			case TG3_EEPROM_SB_REVISION_2:
12948				size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12949				break;
12950			case TG3_EEPROM_SB_REVISION_3:
12951				size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12952				break;
12953			case TG3_EEPROM_SB_REVISION_4:
12954				size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12955				break;
12956			case TG3_EEPROM_SB_REVISION_5:
12957				size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12958				break;
12959			case TG3_EEPROM_SB_REVISION_6:
12960				size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12961				break;
12962			default:
12963				return -EIO;
12964			}
12965		} else
12966			return 0;
12967	} else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12968		size = NVRAM_SELFBOOT_HW_SIZE;
12969	else
12970		return -EIO;
12971
12972	buf = kmalloc(size, GFP_KERNEL);
12973	if (buf == NULL)
12974		return -ENOMEM;
12975
12976	err = -EIO;
12977	for (i = 0, j = 0; i < size; i += 4, j++) {
12978		err = tg3_nvram_read_be32(tp, i, &buf[j]);
12979		if (err)
12980			break;
12981	}
12982	if (i < size)
12983		goto out;
12984
12985	/* Selfboot format */
12986	magic = be32_to_cpu(buf[0]);
12987	if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12988	    TG3_EEPROM_MAGIC_FW) {
12989		u8 *buf8 = (u8 *) buf, csum8 = 0;
12990
12991		if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12992		    TG3_EEPROM_SB_REVISION_2) {
12993			/* For rev 2, the csum doesn't include the MBA. */
12994			for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12995				csum8 += buf8[i];
12996			for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12997				csum8 += buf8[i];
12998		} else {
12999			for (i = 0; i < size; i++)
13000				csum8 += buf8[i];
13001		}
13002
13003		if (csum8 == 0) {
13004			err = 0;
13005			goto out;
13006		}
13007
13008		err = -EIO;
13009		goto out;
13010	}
13011
13012	if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
13013	    TG3_EEPROM_MAGIC_HW) {
13014		u8 data[NVRAM_SELFBOOT_DATA_SIZE];
13015		u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
13016		u8 *buf8 = (u8 *) buf;
13017
13018		/* Separate the parity bits and the data bytes.  */
13019		for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
13020			if ((i == 0) || (i == 8)) {
13021				int l;
13022				u8 msk;
13023
13024				for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
13025					parity[k++] = buf8[i] & msk;
13026				i++;
13027			} else if (i == 16) {
13028				int l;
13029				u8 msk;
13030
13031				for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
13032					parity[k++] = buf8[i] & msk;
13033				i++;
13034
13035				for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
13036					parity[k++] = buf8[i] & msk;
13037				i++;
13038			}
13039			data[j++] = buf8[i];
13040		}
13041
13042		err = -EIO;
13043		for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
13044			u8 hw8 = hweight8(data[i]);
13045
13046			if ((hw8 & 0x1) && parity[i])
13047				goto out;
13048			else if (!(hw8 & 0x1) && !parity[i])
13049				goto out;
13050		}
13051		err = 0;
13052		goto out;
13053	}
13054
13055	err = -EIO;
13056
13057	/* Bootstrap checksum at offset 0x10 */
13058	csum = calc_crc((unsigned char *) buf, 0x10);
13059	if (csum != le32_to_cpu(buf[0x10/4]))
13060		goto out;
13061
13062	/* Manufacturing block starts at offset 0x74, checksum at 0xfc */
13063	csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
13064	if (csum != le32_to_cpu(buf[0xfc/4]))
13065		goto out;
13066
13067	kfree(buf);
13068
13069	buf = tg3_vpd_readblock(tp, &len);
13070	if (!buf)
13071		return -ENOMEM;
13072
13073	i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
13074	if (i > 0) {
13075		j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
13076		if (j < 0)
13077			goto out;
13078
13079		if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
13080			goto out;
13081
13082		i += PCI_VPD_LRDT_TAG_SIZE;
13083		j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
13084					      PCI_VPD_RO_KEYWORD_CHKSUM);
13085		if (j > 0) {
13086			u8 csum8 = 0;
13087
13088			j += PCI_VPD_INFO_FLD_HDR_SIZE;
13089
13090			for (i = 0; i <= j; i++)
13091				csum8 += ((u8 *)buf)[i];
13092
13093			if (csum8)
13094				goto out;
13095		}
13096	}
13097
13098	err = 0;
13099
13100out:
13101	kfree(buf);
13102	return err;
13103}
13104
13105#define TG3_SERDES_TIMEOUT_SEC	2
13106#define TG3_COPPER_TIMEOUT_SEC	6
13107
13108static int tg3_test_link(struct tg3 *tp)
13109{
13110	int i, max;
13111
13112	if (!netif_running(tp->dev))
13113		return -ENODEV;
13114
13115	if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13116		max = TG3_SERDES_TIMEOUT_SEC;
13117	else
13118		max = TG3_COPPER_TIMEOUT_SEC;
13119
13120	for (i = 0; i < max; i++) {
13121		if (tp->link_up)
13122			return 0;
13123
13124		if (msleep_interruptible(1000))
13125			break;
13126	}
13127
13128	return -EIO;
13129}
13130
13131/* Only test the commonly used registers */
13132static int tg3_test_registers(struct tg3 *tp)
13133{
13134	int i, is_5705, is_5750;
13135	u32 offset, read_mask, write_mask, val, save_val, read_val;
13136	static struct {
13137		u16 offset;
13138		u16 flags;
13139#define TG3_FL_5705	0x1
13140#define TG3_FL_NOT_5705	0x2
13141#define TG3_FL_NOT_5788	0x4
13142#define TG3_FL_NOT_5750	0x8
13143		u32 read_mask;
13144		u32 write_mask;
13145	} reg_tbl[] = {
13146		/* MAC Control Registers */
13147		{ MAC_MODE, TG3_FL_NOT_5705,
13148			0x00000000, 0x00ef6f8c },
13149		{ MAC_MODE, TG3_FL_5705,
13150			0x00000000, 0x01ef6b8c },
13151		{ MAC_STATUS, TG3_FL_NOT_5705,
13152			0x03800107, 0x00000000 },
13153		{ MAC_STATUS, TG3_FL_5705,
13154			0x03800100, 0x00000000 },
13155		{ MAC_ADDR_0_HIGH, 0x0000,
13156			0x00000000, 0x0000ffff },
13157		{ MAC_ADDR_0_LOW, 0x0000,
13158			0x00000000, 0xffffffff },
13159		{ MAC_RX_MTU_SIZE, 0x0000,
13160			0x00000000, 0x0000ffff },
13161		{ MAC_TX_MODE, 0x0000,
13162			0x00000000, 0x00000070 },
13163		{ MAC_TX_LENGTHS, 0x0000,
13164			0x00000000, 0x00003fff },
13165		{ MAC_RX_MODE, TG3_FL_NOT_5705,
13166			0x00000000, 0x000007fc },
13167		{ MAC_RX_MODE, TG3_FL_5705,
13168			0x00000000, 0x000007dc },
13169		{ MAC_HASH_REG_0, 0x0000,
13170			0x00000000, 0xffffffff },
13171		{ MAC_HASH_REG_1, 0x0000,
13172			0x00000000, 0xffffffff },
13173		{ MAC_HASH_REG_2, 0x0000,
13174			0x00000000, 0xffffffff },
13175		{ MAC_HASH_REG_3, 0x0000,
13176			0x00000000, 0xffffffff },
13177
13178		/* Receive Data and Receive BD Initiator Control Registers. */
13179		{ RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13180			0x00000000, 0xffffffff },
13181		{ RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13182			0x00000000, 0xffffffff },
13183		{ RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13184			0x00000000, 0x00000003 },
13185		{ RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13186			0x00000000, 0xffffffff },
13187		{ RCVDBDI_STD_BD+0, 0x0000,
13188			0x00000000, 0xffffffff },
13189		{ RCVDBDI_STD_BD+4, 0x0000,
13190			0x00000000, 0xffffffff },
13191		{ RCVDBDI_STD_BD+8, 0x0000,
13192			0x00000000, 0xffff0002 },
13193		{ RCVDBDI_STD_BD+0xc, 0x0000,
13194			0x00000000, 0xffffffff },
13195
13196		/* Receive BD Initiator Control Registers. */
13197		{ RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13198			0x00000000, 0xffffffff },
13199		{ RCVBDI_STD_THRESH, TG3_FL_5705,
13200			0x00000000, 0x000003ff },
13201		{ RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13202			0x00000000, 0xffffffff },
13203
13204		/* Host Coalescing Control Registers. */
13205		{ HOSTCC_MODE, TG3_FL_NOT_5705,
13206			0x00000000, 0x00000004 },
13207		{ HOSTCC_MODE, TG3_FL_5705,
13208			0x00000000, 0x000000f6 },
13209		{ HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13210			0x00000000, 0xffffffff },
13211		{ HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13212			0x00000000, 0x000003ff },
13213		{ HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13214			0x00000000, 0xffffffff },
13215		{ HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13216			0x00000000, 0x000003ff },
13217		{ HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13218			0x00000000, 0xffffffff },
13219		{ HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13220			0x00000000, 0x000000ff },
13221		{ HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13222			0x00000000, 0xffffffff },
13223		{ HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13224			0x00000000, 0x000000ff },
13225		{ HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13226			0x00000000, 0xffffffff },
13227		{ HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13228			0x00000000, 0xffffffff },
13229		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13230			0x00000000, 0xffffffff },
13231		{ HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13232			0x00000000, 0x000000ff },
13233		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13234			0x00000000, 0xffffffff },
13235		{ HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13236			0x00000000, 0x000000ff },
13237		{ HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13238			0x00000000, 0xffffffff },
13239		{ HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13240			0x00000000, 0xffffffff },
13241		{ HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13242			0x00000000, 0xffffffff },
13243		{ HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13244			0x00000000, 0xffffffff },
13245		{ HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13246			0x00000000, 0xffffffff },
13247		{ HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13248			0xffffffff, 0x00000000 },
13249		{ HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13250			0xffffffff, 0x00000000 },
13251
13252		/* Buffer Manager Control Registers. */
13253		{ BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13254			0x00000000, 0x007fff80 },
13255		{ BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13256			0x00000000, 0x007fffff },
13257		{ BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13258			0x00000000, 0x0000003f },
13259		{ BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13260			0x00000000, 0x000001ff },
13261		{ BUFMGR_MB_HIGH_WATER, 0x0000,
13262			0x00000000, 0x000001ff },
13263		{ BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13264			0xffffffff, 0x00000000 },
13265		{ BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13266			0xffffffff, 0x00000000 },
13267
13268		/* Mailbox Registers */
13269		{ GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13270			0x00000000, 0x000001ff },
13271		{ GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13272			0x00000000, 0x000001ff },
13273		{ GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13274			0x00000000, 0x000007ff },
13275		{ GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13276			0x00000000, 0x000001ff },
13277
13278		{ 0xffff, 0x0000, 0x00000000, 0x00000000 },
13279	};
13280
13281	is_5705 = is_5750 = 0;
13282	if (tg3_flag(tp, 5705_PLUS)) {
13283		is_5705 = 1;
13284		if (tg3_flag(tp, 5750_PLUS))
13285			is_5750 = 1;
13286	}
13287
13288	for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13289		if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13290			continue;
13291
13292		if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13293			continue;
13294
13295		if (tg3_flag(tp, IS_5788) &&
13296		    (reg_tbl[i].flags & TG3_FL_NOT_5788))
13297			continue;
13298
13299		if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13300			continue;
13301
13302		offset = (u32) reg_tbl[i].offset;
13303		read_mask = reg_tbl[i].read_mask;
13304		write_mask = reg_tbl[i].write_mask;
13305
13306		/* Save the original register content */
13307		save_val = tr32(offset);
13308
13309		/* Determine the read-only value. */
13310		read_val = save_val & read_mask;
13311
13312		/* Write zero to the register, then make sure the read-only bits
13313		 * are not changed and the read/write bits are all zeros.
13314		 */
13315		tw32(offset, 0);
13316
13317		val = tr32(offset);
13318
13319		/* Test the read-only and read/write bits. */
13320		if (((val & read_mask) != read_val) || (val & write_mask))
13321			goto out;
13322
13323		/* Write ones to all the bits defined by RdMask and WrMask, then
13324		 * make sure the read-only bits are not changed and the
13325		 * read/write bits are all ones.
13326		 */
13327		tw32(offset, read_mask | write_mask);
13328
13329		val = tr32(offset);
13330
13331		/* Test the read-only bits. */
13332		if ((val & read_mask) != read_val)
13333			goto out;
13334
13335		/* Test the read/write bits. */
13336		if ((val & write_mask) != write_mask)
13337			goto out;
13338
13339		tw32(offset, save_val);
13340	}
13341
13342	return 0;
13343
13344out:
13345	if (netif_msg_hw(tp))
13346		netdev_err(tp->dev,
13347			   "Register test failed at offset %x\n", offset);
13348	tw32(offset, save_val);
13349	return -EIO;
13350}
13351
13352static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13353{
13354	static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13355	int i;
13356	u32 j;
13357
13358	for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13359		for (j = 0; j < len; j += 4) {
13360			u32 val;
13361
13362			tg3_write_mem(tp, offset + j, test_pattern[i]);
13363			tg3_read_mem(tp, offset + j, &val);
13364			if (val != test_pattern[i])
13365				return -EIO;
13366		}
13367	}
13368	return 0;
13369}
13370
13371static int tg3_test_memory(struct tg3 *tp)
13372{
13373	static struct mem_entry {
13374		u32 offset;
13375		u32 len;
13376	} mem_tbl_570x[] = {
13377		{ 0x00000000, 0x00b50},
13378		{ 0x00002000, 0x1c000},
13379		{ 0xffffffff, 0x00000}
13380	}, mem_tbl_5705[] = {
13381		{ 0x00000100, 0x0000c},
13382		{ 0x00000200, 0x00008},
13383		{ 0x00004000, 0x00800},
13384		{ 0x00006000, 0x01000},
13385		{ 0x00008000, 0x02000},
13386		{ 0x00010000, 0x0e000},
13387		{ 0xffffffff, 0x00000}
13388	}, mem_tbl_5755[] = {
13389		{ 0x00000200, 0x00008},
13390		{ 0x00004000, 0x00800},
13391		{ 0x00006000, 0x00800},
13392		{ 0x00008000, 0x02000},
13393		{ 0x00010000, 0x0c000},
13394		{ 0xffffffff, 0x00000}
13395	}, mem_tbl_5906[] = {
13396		{ 0x00000200, 0x00008},
13397		{ 0x00004000, 0x00400},
13398		{ 0x00006000, 0x00400},
13399		{ 0x00008000, 0x01000},
13400		{ 0x00010000, 0x01000},
13401		{ 0xffffffff, 0x00000}
13402	}, mem_tbl_5717[] = {
13403		{ 0x00000200, 0x00008},
13404		{ 0x00010000, 0x0a000},
13405		{ 0x00020000, 0x13c00},
13406		{ 0xffffffff, 0x00000}
13407	}, mem_tbl_57765[] = {
13408		{ 0x00000200, 0x00008},
13409		{ 0x00004000, 0x00800},
13410		{ 0x00006000, 0x09800},
13411		{ 0x00010000, 0x0a000},
13412		{ 0xffffffff, 0x00000}
13413	};
13414	struct mem_entry *mem_tbl;
13415	int err = 0;
13416	int i;
13417
13418	if (tg3_flag(tp, 5717_PLUS))
13419		mem_tbl = mem_tbl_5717;
13420	else if (tg3_flag(tp, 57765_CLASS) ||
13421		 tg3_asic_rev(tp) == ASIC_REV_5762)
13422		mem_tbl = mem_tbl_57765;
13423	else if (tg3_flag(tp, 5755_PLUS))
13424		mem_tbl = mem_tbl_5755;
13425	else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13426		mem_tbl = mem_tbl_5906;
13427	else if (tg3_flag(tp, 5705_PLUS))
13428		mem_tbl = mem_tbl_5705;
13429	else
13430		mem_tbl = mem_tbl_570x;
13431
13432	for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13433		err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13434		if (err)
13435			break;
13436	}
13437
13438	return err;
13439}
13440
13441#define TG3_TSO_MSS		500
13442
13443#define TG3_TSO_IP_HDR_LEN	20
13444#define TG3_TSO_TCP_HDR_LEN	20
13445#define TG3_TSO_TCP_OPT_LEN	12
13446
13447static const u8 tg3_tso_header[] = {
134480x08, 0x00,
134490x45, 0x00, 0x00, 0x00,
134500x00, 0x00, 0x40, 0x00,
134510x40, 0x06, 0x00, 0x00,
134520x0a, 0x00, 0x00, 0x01,
134530x0a, 0x00, 0x00, 0x02,
134540x0d, 0x00, 0xe0, 0x00,
134550x00, 0x00, 0x01, 0x00,
134560x00, 0x00, 0x02, 0x00,
134570x80, 0x10, 0x10, 0x00,
134580x14, 0x09, 0x00, 0x00,
134590x01, 0x01, 0x08, 0x0a,
134600x11, 0x11, 0x11, 0x11,
134610x11, 0x11, 0x11, 0x11,
13462};
13463
13464static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13465{
13466	u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13467	u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13468	u32 budget;
13469	struct sk_buff *skb;
13470	u8 *tx_data, *rx_data;
13471	dma_addr_t map;
13472	int num_pkts, tx_len, rx_len, i, err;
13473	struct tg3_rx_buffer_desc *desc;
13474	struct tg3_napi *tnapi, *rnapi;
13475	struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13476
13477	tnapi = &tp->napi[0];
13478	rnapi = &tp->napi[0];
13479	if (tp->irq_cnt > 1) {
13480		if (tg3_flag(tp, ENABLE_RSS))
13481			rnapi = &tp->napi[1];
13482		if (tg3_flag(tp, ENABLE_TSS))
13483			tnapi = &tp->napi[1];
13484	}
13485	coal_now = tnapi->coal_now | rnapi->coal_now;
13486
13487	err = -EIO;
13488
13489	tx_len = pktsz;
13490	skb = netdev_alloc_skb(tp->dev, tx_len);
13491	if (!skb)
13492		return -ENOMEM;
13493
13494	tx_data = skb_put(skb, tx_len);
13495	memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13496	memset(tx_data + ETH_ALEN, 0x0, 8);
13497
13498	tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13499
13500	if (tso_loopback) {
13501		struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13502
13503		u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13504			      TG3_TSO_TCP_OPT_LEN;
13505
13506		memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13507		       sizeof(tg3_tso_header));
13508		mss = TG3_TSO_MSS;
13509
13510		val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13511		num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13512
13513		/* Set the total length field in the IP header */
13514		iph->tot_len = htons((u16)(mss + hdr_len));
13515
13516		base_flags = (TXD_FLAG_CPU_PRE_DMA |
13517			      TXD_FLAG_CPU_POST_DMA);
13518
13519		if (tg3_flag(tp, HW_TSO_1) ||
13520		    tg3_flag(tp, HW_TSO_2) ||
13521		    tg3_flag(tp, HW_TSO_3)) {
13522			struct tcphdr *th;
13523			val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13524			th = (struct tcphdr *)&tx_data[val];
13525			th->check = 0;
13526		} else
13527			base_flags |= TXD_FLAG_TCPUDP_CSUM;
13528
13529		if (tg3_flag(tp, HW_TSO_3)) {
13530			mss |= (hdr_len & 0xc) << 12;
13531			if (hdr_len & 0x10)
13532				base_flags |= 0x00000010;
13533			base_flags |= (hdr_len & 0x3e0) << 5;
13534		} else if (tg3_flag(tp, HW_TSO_2))
13535			mss |= hdr_len << 9;
13536		else if (tg3_flag(tp, HW_TSO_1) ||
13537			 tg3_asic_rev(tp) == ASIC_REV_5705) {
13538			mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13539		} else {
13540			base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13541		}
13542
13543		data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13544	} else {
13545		num_pkts = 1;
13546		data_off = ETH_HLEN;
13547
13548		if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13549		    tx_len > VLAN_ETH_FRAME_LEN)
13550			base_flags |= TXD_FLAG_JMB_PKT;
13551	}
13552
13553	for (i = data_off; i < tx_len; i++)
13554		tx_data[i] = (u8) (i & 0xff);
13555
13556	map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
13557	if (pci_dma_mapping_error(tp->pdev, map)) {
13558		dev_kfree_skb(skb);
13559		return -EIO;
13560	}
13561
13562	val = tnapi->tx_prod;
13563	tnapi->tx_buffers[val].skb = skb;
13564	dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13565
13566	tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13567	       rnapi->coal_now);
13568
13569	udelay(10);
13570
13571	rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13572
13573	budget = tg3_tx_avail(tnapi);
13574	if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13575			    base_flags | TXD_FLAG_END, mss, 0)) {
13576		tnapi->tx_buffers[val].skb = NULL;
13577		dev_kfree_skb(skb);
13578		return -EIO;
13579	}
13580
13581	tnapi->tx_prod++;
13582
13583	/* Sync BD data before updating mailbox */
13584	wmb();
13585
13586	tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13587	tr32_mailbox(tnapi->prodmbox);
13588
13589	udelay(10);
13590
13591	/* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13592	for (i = 0; i < 35; i++) {
13593		tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13594		       coal_now);
13595
13596		udelay(10);
13597
13598		tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13599		rx_idx = rnapi->hw_status->idx[0].rx_producer;
13600		if ((tx_idx == tnapi->tx_prod) &&
13601		    (rx_idx == (rx_start_idx + num_pkts)))
13602			break;
13603	}
13604
13605	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13606	dev_kfree_skb(skb);
13607
13608	if (tx_idx != tnapi->tx_prod)
13609		goto out;
13610
13611	if (rx_idx != rx_start_idx + num_pkts)
13612		goto out;
13613
13614	val = data_off;
13615	while (rx_idx != rx_start_idx) {
13616		desc = &rnapi->rx_rcb[rx_start_idx++];
13617		desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13618		opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13619
13620		if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13621		    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13622			goto out;
13623
13624		rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13625			 - ETH_FCS_LEN;
13626
13627		if (!tso_loopback) {
13628			if (rx_len != tx_len)
13629				goto out;
13630
13631			if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13632				if (opaque_key != RXD_OPAQUE_RING_STD)
13633					goto out;
13634			} else {
13635				if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13636					goto out;
13637			}
13638		} else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13639			   (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13640			    >> RXD_TCPCSUM_SHIFT != 0xffff) {
13641			goto out;
13642		}
13643
13644		if (opaque_key == RXD_OPAQUE_RING_STD) {
13645			rx_data = tpr->rx_std_buffers[desc_idx].data;
13646			map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13647					     mapping);
13648		} else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13649			rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13650			map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13651					     mapping);
13652		} else
13653			goto out;
13654
13655		pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
13656					    PCI_DMA_FROMDEVICE);
13657
13658		rx_data += TG3_RX_OFFSET(tp);
13659		for (i = data_off; i < rx_len; i++, val++) {
13660			if (*(rx_data + i) != (u8) (val & 0xff))
13661				goto out;
13662		}
13663	}
13664
13665	err = 0;
13666
13667	/* tg3_free_rings will unmap and free the rx_data */
13668out:
13669	return err;
13670}
13671
13672#define TG3_STD_LOOPBACK_FAILED		1
13673#define TG3_JMB_LOOPBACK_FAILED		2
13674#define TG3_TSO_LOOPBACK_FAILED		4
13675#define TG3_LOOPBACK_FAILED \
13676	(TG3_STD_LOOPBACK_FAILED | \
13677	 TG3_JMB_LOOPBACK_FAILED | \
13678	 TG3_TSO_LOOPBACK_FAILED)
13679
13680static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13681{
13682	int err = -EIO;
13683	u32 eee_cap;
13684	u32 jmb_pkt_sz = 9000;
13685
13686	if (tp->dma_limit)
13687		jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13688
13689	eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13690	tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13691
13692	if (!netif_running(tp->dev)) {
13693		data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13694		data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13695		if (do_extlpbk)
13696			data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13697		goto done;
13698	}
13699
13700	err = tg3_reset_hw(tp, true);
13701	if (err) {
13702		data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13703		data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13704		if (do_extlpbk)
13705			data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13706		goto done;
13707	}
13708
13709	if (tg3_flag(tp, ENABLE_RSS)) {
13710		int i;
13711
13712		/* Reroute all rx packets to the 1st queue */
13713		for (i = MAC_RSS_INDIR_TBL_0;
13714		     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13715			tw32(i, 0x0);
13716	}
13717
13718	/* HW errata - mac loopback fails in some cases on 5780.
13719	 * Normal traffic and PHY loopback are not affected by
13720	 * errata.  Also, the MAC loopback test is deprecated for
13721	 * all newer ASIC revisions.
13722	 */
13723	if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13724	    !tg3_flag(tp, CPMU_PRESENT)) {
13725		tg3_mac_loopback(tp, true);
13726
13727		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13728			data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13729
13730		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13731		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13732			data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13733
13734		tg3_mac_loopback(tp, false);
13735	}
13736
13737	if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13738	    !tg3_flag(tp, USE_PHYLIB)) {
13739		int i;
13740
13741		tg3_phy_lpbk_set(tp, 0, false);
13742
13743		/* Wait for link */
13744		for (i = 0; i < 100; i++) {
13745			if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13746				break;
13747			mdelay(1);
13748		}
13749
13750		if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13751			data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13752		if (tg3_flag(tp, TSO_CAPABLE) &&
13753		    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13754			data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13755		if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13756		    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13757			data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13758
13759		if (do_extlpbk) {
13760			tg3_phy_lpbk_set(tp, 0, true);
13761
13762			/* All link indications report up, but the hardware
13763			 * isn't really ready for about 20 msec.  Double it
13764			 * to be sure.
13765			 */
13766			mdelay(40);
13767
13768			if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13769				data[TG3_EXT_LOOPB_TEST] |=
13770							TG3_STD_LOOPBACK_FAILED;
13771			if (tg3_flag(tp, TSO_CAPABLE) &&
13772			    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13773				data[TG3_EXT_LOOPB_TEST] |=
13774							TG3_TSO_LOOPBACK_FAILED;
13775			if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13776			    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13777				data[TG3_EXT_LOOPB_TEST] |=
13778							TG3_JMB_LOOPBACK_FAILED;
13779		}
13780
13781		/* Re-enable gphy autopowerdown. */
13782		if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13783			tg3_phy_toggle_apd(tp, true);
13784	}
13785
13786	err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13787	       data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13788
13789done:
13790	tp->phy_flags |= eee_cap;
13791
13792	return err;
13793}
13794
13795static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13796			  u64 *data)
13797{
13798	struct tg3 *tp = netdev_priv(dev);
13799	bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13800
13801	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13802		if (tg3_power_up(tp)) {
13803			etest->flags |= ETH_TEST_FL_FAILED;
13804			memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13805			return;
13806		}
13807		tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13808	}
13809
13810	memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13811
13812	if (tg3_test_nvram(tp) != 0) {
13813		etest->flags |= ETH_TEST_FL_FAILED;
13814		data[TG3_NVRAM_TEST] = 1;
13815	}
13816	if (!doextlpbk && tg3_test_link(tp)) {
13817		etest->flags |= ETH_TEST_FL_FAILED;
13818		data[TG3_LINK_TEST] = 1;
13819	}
13820	if (etest->flags & ETH_TEST_FL_OFFLINE) {
13821		int err, err2 = 0, irq_sync = 0;
13822
13823		if (netif_running(dev)) {
13824			tg3_phy_stop(tp);
13825			tg3_netif_stop(tp);
13826			irq_sync = 1;
13827		}
13828
13829		tg3_full_lock(tp, irq_sync);
13830		tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13831		err = tg3_nvram_lock(tp);
13832		tg3_halt_cpu(tp, RX_CPU_BASE);
13833		if (!tg3_flag(tp, 5705_PLUS))
13834			tg3_halt_cpu(tp, TX_CPU_BASE);
13835		if (!err)
13836			tg3_nvram_unlock(tp);
13837
13838		if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13839			tg3_phy_reset(tp);
13840
13841		if (tg3_test_registers(tp) != 0) {
13842			etest->flags |= ETH_TEST_FL_FAILED;
13843			data[TG3_REGISTER_TEST] = 1;
13844		}
13845
13846		if (tg3_test_memory(tp) != 0) {
13847			etest->flags |= ETH_TEST_FL_FAILED;
13848			data[TG3_MEMORY_TEST] = 1;
13849		}
13850
13851		if (doextlpbk)
13852			etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13853
13854		if (tg3_test_loopback(tp, data, doextlpbk))
13855			etest->flags |= ETH_TEST_FL_FAILED;
13856
13857		tg3_full_unlock(tp);
13858
13859		if (tg3_test_interrupt(tp) != 0) {
13860			etest->flags |= ETH_TEST_FL_FAILED;
13861			data[TG3_INTERRUPT_TEST] = 1;
13862		}
13863
13864		tg3_full_lock(tp, 0);
13865
13866		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13867		if (netif_running(dev)) {
13868			tg3_flag_set(tp, INIT_COMPLETE);
13869			err2 = tg3_restart_hw(tp, true);
13870			if (!err2)
13871				tg3_netif_start(tp);
13872		}
13873
13874		tg3_full_unlock(tp);
13875
13876		if (irq_sync && !err2)
13877			tg3_phy_start(tp);
13878	}
13879	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13880		tg3_power_down_prepare(tp);
13881
13882}
13883
13884static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13885{
13886	struct tg3 *tp = netdev_priv(dev);
13887	struct hwtstamp_config stmpconf;
13888
13889	if (!tg3_flag(tp, PTP_CAPABLE))
13890		return -EOPNOTSUPP;
13891
13892	if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13893		return -EFAULT;
13894
13895	if (stmpconf.flags)
13896		return -EINVAL;
13897
13898	if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13899	    stmpconf.tx_type != HWTSTAMP_TX_OFF)
13900		return -ERANGE;
13901
13902	switch (stmpconf.rx_filter) {
13903	case HWTSTAMP_FILTER_NONE:
13904		tp->rxptpctl = 0;
13905		break;
13906	case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13907		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13908			       TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13909		break;
13910	case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13911		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13912			       TG3_RX_PTP_CTL_SYNC_EVNT;
13913		break;
13914	case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13915		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13916			       TG3_RX_PTP_CTL_DELAY_REQ;
13917		break;
13918	case HWTSTAMP_FILTER_PTP_V2_EVENT:
13919		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13920			       TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13921		break;
13922	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13923		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13924			       TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13925		break;
13926	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13927		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13928			       TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13929		break;
13930	case HWTSTAMP_FILTER_PTP_V2_SYNC:
13931		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13932			       TG3_RX_PTP_CTL_SYNC_EVNT;
13933		break;
13934	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13935		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13936			       TG3_RX_PTP_CTL_SYNC_EVNT;
13937		break;
13938	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13939		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13940			       TG3_RX_PTP_CTL_SYNC_EVNT;
13941		break;
13942	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13943		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13944			       TG3_RX_PTP_CTL_DELAY_REQ;
13945		break;
13946	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13947		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13948			       TG3_RX_PTP_CTL_DELAY_REQ;
13949		break;
13950	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13951		tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13952			       TG3_RX_PTP_CTL_DELAY_REQ;
13953		break;
13954	default:
13955		return -ERANGE;
13956	}
13957
13958	if (netif_running(dev) && tp->rxptpctl)
13959		tw32(TG3_RX_PTP_CTL,
13960		     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13961
13962	if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13963		tg3_flag_set(tp, TX_TSTAMP_EN);
13964	else
13965		tg3_flag_clear(tp, TX_TSTAMP_EN);
13966
13967	return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13968		-EFAULT : 0;
13969}
13970
13971static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13972{
13973	struct tg3 *tp = netdev_priv(dev);
13974	struct hwtstamp_config stmpconf;
13975
13976	if (!tg3_flag(tp, PTP_CAPABLE))
13977		return -EOPNOTSUPP;
13978
13979	stmpconf.flags = 0;
13980	stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13981			    HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13982
13983	switch (tp->rxptpctl) {
13984	case 0:
13985		stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13986		break;
13987	case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13988		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13989		break;
13990	case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13991		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13992		break;
13993	case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13994		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13995		break;
13996	case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13997		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13998		break;
13999	case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
14000		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
14001		break;
14002	case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
14003		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
14004		break;
14005	case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
14006		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
14007		break;
14008	case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
14009		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
14010		break;
14011	case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
14012		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
14013		break;
14014	case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
14015		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
14016		break;
14017	case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
14018		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
14019		break;
14020	case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
14021		stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
14022		break;
14023	default:
14024		WARN_ON_ONCE(1);
14025		return -ERANGE;
14026	}
14027
14028	return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
14029		-EFAULT : 0;
14030}
14031
14032static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
14033{
14034	struct mii_ioctl_data *data = if_mii(ifr);
14035	struct tg3 *tp = netdev_priv(dev);
14036	int err;
14037
14038	if (tg3_flag(tp, USE_PHYLIB)) {
14039		struct phy_device *phydev;
14040		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
14041			return -EAGAIN;
14042		phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
14043		return phy_mii_ioctl(phydev, ifr, cmd);
14044	}
14045
14046	switch (cmd) {
14047	case SIOCGMIIPHY:
14048		data->phy_id = tp->phy_addr;
14049
14050		fallthrough;
14051	case SIOCGMIIREG: {
14052		u32 mii_regval;
14053
14054		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
14055			break;			/* We have no PHY */
14056
14057		if (!netif_running(dev))
14058			return -EAGAIN;
14059
14060		spin_lock_bh(&tp->lock);
14061		err = __tg3_readphy(tp, data->phy_id & 0x1f,
14062				    data->reg_num & 0x1f, &mii_regval);
14063		spin_unlock_bh(&tp->lock);
14064
14065		data->val_out = mii_regval;
14066
14067		return err;
14068	}
14069
14070	case SIOCSMIIREG:
14071		if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
14072			break;			/* We have no PHY */
14073
14074		if (!netif_running(dev))
14075			return -EAGAIN;
14076
14077		spin_lock_bh(&tp->lock);
14078		err = __tg3_writephy(tp, data->phy_id & 0x1f,
14079				     data->reg_num & 0x1f, data->val_in);
14080		spin_unlock_bh(&tp->lock);
14081
14082		return err;
14083
14084	case SIOCSHWTSTAMP:
14085		return tg3_hwtstamp_set(dev, ifr);
14086
14087	case SIOCGHWTSTAMP:
14088		return tg3_hwtstamp_get(dev, ifr);
14089
14090	default:
14091		/* do nothing */
14092		break;
14093	}
14094	return -EOPNOTSUPP;
14095}
14096
14097static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14098{
14099	struct tg3 *tp = netdev_priv(dev);
14100
14101	memcpy(ec, &tp->coal, sizeof(*ec));
14102	return 0;
14103}
14104
14105static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14106{
14107	struct tg3 *tp = netdev_priv(dev);
14108	u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14109	u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14110
14111	if (!tg3_flag(tp, 5705_PLUS)) {
14112		max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14113		max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14114		max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14115		min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14116	}
14117
14118	if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14119	    (!ec->rx_coalesce_usecs) ||
14120	    (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14121	    (!ec->tx_coalesce_usecs) ||
14122	    (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14123	    (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14124	    (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14125	    (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14126	    (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14127	    (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14128	    (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14129	    (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14130		return -EINVAL;
14131
14132	/* Only copy relevant parameters, ignore all others. */
14133	tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14134	tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14135	tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14136	tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14137	tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14138	tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14139	tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14140	tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14141	tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14142
14143	if (netif_running(dev)) {
14144		tg3_full_lock(tp, 0);
14145		__tg3_set_coalesce(tp, &tp->coal);
14146		tg3_full_unlock(tp);
14147	}
14148	return 0;
14149}
14150
14151static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14152{
14153	struct tg3 *tp = netdev_priv(dev);
14154
14155	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14156		netdev_warn(tp->dev, "Board does not support EEE!\n");
14157		return -EOPNOTSUPP;
14158	}
14159
14160	if (edata->advertised != tp->eee.advertised) {
14161		netdev_warn(tp->dev,
14162			    "Direct manipulation of EEE advertisement is not supported\n");
14163		return -EINVAL;
14164	}
14165
14166	if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14167		netdev_warn(tp->dev,
14168			    "Maximal Tx Lpi timer supported is %#x(u)\n",
14169			    TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14170		return -EINVAL;
14171	}
14172
14173	tp->eee = *edata;
14174
14175	tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14176	tg3_warn_mgmt_link_flap(tp);
14177
14178	if (netif_running(tp->dev)) {
14179		tg3_full_lock(tp, 0);
14180		tg3_setup_eee(tp);
14181		tg3_phy_reset(tp);
14182		tg3_full_unlock(tp);
14183	}
14184
14185	return 0;
14186}
14187
14188static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14189{
14190	struct tg3 *tp = netdev_priv(dev);
14191
14192	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14193		netdev_warn(tp->dev,
14194			    "Board does not support EEE!\n");
14195		return -EOPNOTSUPP;
14196	}
14197
14198	*edata = tp->eee;
14199	return 0;
14200}
14201
14202static const struct ethtool_ops tg3_ethtool_ops = {
14203	.supported_coalesce_params = ETHTOOL_COALESCE_USECS |
14204				     ETHTOOL_COALESCE_MAX_FRAMES |
14205				     ETHTOOL_COALESCE_USECS_IRQ |
14206				     ETHTOOL_COALESCE_MAX_FRAMES_IRQ |
14207				     ETHTOOL_COALESCE_STATS_BLOCK_USECS,
14208	.get_drvinfo		= tg3_get_drvinfo,
14209	.get_regs_len		= tg3_get_regs_len,
14210	.get_regs		= tg3_get_regs,
14211	.get_wol		= tg3_get_wol,
14212	.set_wol		= tg3_set_wol,
14213	.get_msglevel		= tg3_get_msglevel,
14214	.set_msglevel		= tg3_set_msglevel,
14215	.nway_reset		= tg3_nway_reset,
14216	.get_link		= ethtool_op_get_link,
14217	.get_eeprom_len		= tg3_get_eeprom_len,
14218	.get_eeprom		= tg3_get_eeprom,
14219	.set_eeprom		= tg3_set_eeprom,
14220	.get_ringparam		= tg3_get_ringparam,
14221	.set_ringparam		= tg3_set_ringparam,
14222	.get_pauseparam		= tg3_get_pauseparam,
14223	.set_pauseparam		= tg3_set_pauseparam,
14224	.self_test		= tg3_self_test,
14225	.get_strings		= tg3_get_strings,
14226	.set_phys_id		= tg3_set_phys_id,
14227	.get_ethtool_stats	= tg3_get_ethtool_stats,
14228	.get_coalesce		= tg3_get_coalesce,
14229	.set_coalesce		= tg3_set_coalesce,
14230	.get_sset_count		= tg3_get_sset_count,
14231	.get_rxnfc		= tg3_get_rxnfc,
14232	.get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14233	.get_rxfh		= tg3_get_rxfh,
14234	.set_rxfh		= tg3_set_rxfh,
14235	.get_channels		= tg3_get_channels,
14236	.set_channels		= tg3_set_channels,
14237	.get_ts_info		= tg3_get_ts_info,
14238	.get_eee		= tg3_get_eee,
14239	.set_eee		= tg3_set_eee,
14240	.get_link_ksettings	= tg3_get_link_ksettings,
14241	.set_link_ksettings	= tg3_set_link_ksettings,
14242};
14243
14244static void tg3_get_stats64(struct net_device *dev,
14245			    struct rtnl_link_stats64 *stats)
14246{
14247	struct tg3 *tp = netdev_priv(dev);
14248
14249	spin_lock_bh(&tp->lock);
14250	if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14251		*stats = tp->net_stats_prev;
14252		spin_unlock_bh(&tp->lock);
14253		return;
14254	}
14255
14256	tg3_get_nstats(tp, stats);
14257	spin_unlock_bh(&tp->lock);
14258}
14259
14260static void tg3_set_rx_mode(struct net_device *dev)
14261{
14262	struct tg3 *tp = netdev_priv(dev);
14263
14264	if (!netif_running(dev))
14265		return;
14266
14267	tg3_full_lock(tp, 0);
14268	__tg3_set_rx_mode(dev);
14269	tg3_full_unlock(tp);
14270}
14271
14272static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14273			       int new_mtu)
14274{
14275	dev->mtu = new_mtu;
14276
14277	if (new_mtu > ETH_DATA_LEN) {
14278		if (tg3_flag(tp, 5780_CLASS)) {
14279			netdev_update_features(dev);
14280			tg3_flag_clear(tp, TSO_CAPABLE);
14281		} else {
14282			tg3_flag_set(tp, JUMBO_RING_ENABLE);
14283		}
14284	} else {
14285		if (tg3_flag(tp, 5780_CLASS)) {
14286			tg3_flag_set(tp, TSO_CAPABLE);
14287			netdev_update_features(dev);
14288		}
14289		tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14290	}
14291}
14292
14293static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14294{
14295	struct tg3 *tp = netdev_priv(dev);
14296	int err;
14297	bool reset_phy = false;
14298
14299	if (!netif_running(dev)) {
14300		/* We'll just catch it later when the
14301		 * device is up'd.
14302		 */
14303		tg3_set_mtu(dev, tp, new_mtu);
14304		return 0;
14305	}
14306
14307	tg3_phy_stop(tp);
14308
14309	tg3_netif_stop(tp);
14310
14311	tg3_set_mtu(dev, tp, new_mtu);
14312
14313	tg3_full_lock(tp, 1);
14314
14315	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14316
14317	/* Reset PHY, otherwise the read DMA engine will be in a mode that
14318	 * breaks all requests to 256 bytes.
14319	 */
14320	if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
14321	    tg3_asic_rev(tp) == ASIC_REV_5717 ||
14322	    tg3_asic_rev(tp) == ASIC_REV_5719 ||
14323	    tg3_asic_rev(tp) == ASIC_REV_5720)
14324		reset_phy = true;
14325
14326	err = tg3_restart_hw(tp, reset_phy);
14327
14328	if (!err)
14329		tg3_netif_start(tp);
14330
14331	tg3_full_unlock(tp);
14332
14333	if (!err)
14334		tg3_phy_start(tp);
14335
14336	return err;
14337}
14338
14339static const struct net_device_ops tg3_netdev_ops = {
14340	.ndo_open		= tg3_open,
14341	.ndo_stop		= tg3_close,
14342	.ndo_start_xmit		= tg3_start_xmit,
14343	.ndo_get_stats64	= tg3_get_stats64,
14344	.ndo_validate_addr	= eth_validate_addr,
14345	.ndo_set_rx_mode	= tg3_set_rx_mode,
14346	.ndo_set_mac_address	= tg3_set_mac_addr,
14347	.ndo_do_ioctl		= tg3_ioctl,
14348	.ndo_tx_timeout		= tg3_tx_timeout,
14349	.ndo_change_mtu		= tg3_change_mtu,
14350	.ndo_fix_features	= tg3_fix_features,
14351	.ndo_set_features	= tg3_set_features,
14352#ifdef CONFIG_NET_POLL_CONTROLLER
14353	.ndo_poll_controller	= tg3_poll_controller,
14354#endif
14355};
14356
14357static void tg3_get_eeprom_size(struct tg3 *tp)
14358{
14359	u32 cursize, val, magic;
14360
14361	tp->nvram_size = EEPROM_CHIP_SIZE;
14362
14363	if (tg3_nvram_read(tp, 0, &magic) != 0)
14364		return;
14365
14366	if ((magic != TG3_EEPROM_MAGIC) &&
14367	    ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14368	    ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14369		return;
14370
14371	/*
14372	 * Size the chip by reading offsets at increasing powers of two.
14373	 * When we encounter our validation signature, we know the addressing
14374	 * has wrapped around, and thus have our chip size.
14375	 */
14376	cursize = 0x10;
14377
14378	while (cursize < tp->nvram_size) {
14379		if (tg3_nvram_read(tp, cursize, &val) != 0)
14380			return;
14381
14382		if (val == magic)
14383			break;
14384
14385		cursize <<= 1;
14386	}
14387
14388	tp->nvram_size = cursize;
14389}
14390
14391static void tg3_get_nvram_size(struct tg3 *tp)
14392{
14393	u32 val;
14394
14395	if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14396		return;
14397
14398	/* Selfboot format */
14399	if (val != TG3_EEPROM_MAGIC) {
14400		tg3_get_eeprom_size(tp);
14401		return;
14402	}
14403
14404	if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14405		if (val != 0) {
14406			/* This is confusing.  We want to operate on the
14407			 * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14408			 * call will read from NVRAM and byteswap the data
14409			 * according to the byteswapping settings for all
14410			 * other register accesses.  This ensures the data we
14411			 * want will always reside in the lower 16-bits.
14412			 * However, the data in NVRAM is in LE format, which
14413			 * means the data from the NVRAM read will always be
14414			 * opposite the endianness of the CPU.  The 16-bit
14415			 * byteswap then brings the data to CPU endianness.
14416			 */
14417			tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14418			return;
14419		}
14420	}
14421	tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14422}
14423
14424static void tg3_get_nvram_info(struct tg3 *tp)
14425{
14426	u32 nvcfg1;
14427
14428	nvcfg1 = tr32(NVRAM_CFG1);
14429	if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14430		tg3_flag_set(tp, FLASH);
14431	} else {
14432		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14433		tw32(NVRAM_CFG1, nvcfg1);
14434	}
14435
14436	if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14437	    tg3_flag(tp, 5780_CLASS)) {
14438		switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14439		case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14440			tp->nvram_jedecnum = JEDEC_ATMEL;
14441			tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14442			tg3_flag_set(tp, NVRAM_BUFFERED);
14443			break;
14444		case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14445			tp->nvram_jedecnum = JEDEC_ATMEL;
14446			tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14447			break;
14448		case FLASH_VENDOR_ATMEL_EEPROM:
14449			tp->nvram_jedecnum = JEDEC_ATMEL;
14450			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14451			tg3_flag_set(tp, NVRAM_BUFFERED);
14452			break;
14453		case FLASH_VENDOR_ST:
14454			tp->nvram_jedecnum = JEDEC_ST;
14455			tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14456			tg3_flag_set(tp, NVRAM_BUFFERED);
14457			break;
14458		case FLASH_VENDOR_SAIFUN:
14459			tp->nvram_jedecnum = JEDEC_SAIFUN;
14460			tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14461			break;
14462		case FLASH_VENDOR_SST_SMALL:
14463		case FLASH_VENDOR_SST_LARGE:
14464			tp->nvram_jedecnum = JEDEC_SST;
14465			tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14466			break;
14467		}
14468	} else {
14469		tp->nvram_jedecnum = JEDEC_ATMEL;
14470		tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14471		tg3_flag_set(tp, NVRAM_BUFFERED);
14472	}
14473}
14474
14475static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14476{
14477	switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14478	case FLASH_5752PAGE_SIZE_256:
14479		tp->nvram_pagesize = 256;
14480		break;
14481	case FLASH_5752PAGE_SIZE_512:
14482		tp->nvram_pagesize = 512;
14483		break;
14484	case FLASH_5752PAGE_SIZE_1K:
14485		tp->nvram_pagesize = 1024;
14486		break;
14487	case FLASH_5752PAGE_SIZE_2K:
14488		tp->nvram_pagesize = 2048;
14489		break;
14490	case FLASH_5752PAGE_SIZE_4K:
14491		tp->nvram_pagesize = 4096;
14492		break;
14493	case FLASH_5752PAGE_SIZE_264:
14494		tp->nvram_pagesize = 264;
14495		break;
14496	case FLASH_5752PAGE_SIZE_528:
14497		tp->nvram_pagesize = 528;
14498		break;
14499	}
14500}
14501
14502static void tg3_get_5752_nvram_info(struct tg3 *tp)
14503{
14504	u32 nvcfg1;
14505
14506	nvcfg1 = tr32(NVRAM_CFG1);
14507
14508	/* NVRAM protection for TPM */
14509	if (nvcfg1 & (1 << 27))
14510		tg3_flag_set(tp, PROTECTED_NVRAM);
14511
14512	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14513	case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14514	case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14515		tp->nvram_jedecnum = JEDEC_ATMEL;
14516		tg3_flag_set(tp, NVRAM_BUFFERED);
14517		break;
14518	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14519		tp->nvram_jedecnum = JEDEC_ATMEL;
14520		tg3_flag_set(tp, NVRAM_BUFFERED);
14521		tg3_flag_set(tp, FLASH);
14522		break;
14523	case FLASH_5752VENDOR_ST_M45PE10:
14524	case FLASH_5752VENDOR_ST_M45PE20:
14525	case FLASH_5752VENDOR_ST_M45PE40:
14526		tp->nvram_jedecnum = JEDEC_ST;
14527		tg3_flag_set(tp, NVRAM_BUFFERED);
14528		tg3_flag_set(tp, FLASH);
14529		break;
14530	}
14531
14532	if (tg3_flag(tp, FLASH)) {
14533		tg3_nvram_get_pagesize(tp, nvcfg1);
14534	} else {
14535		/* For eeprom, set pagesize to maximum eeprom size */
14536		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14537
14538		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14539		tw32(NVRAM_CFG1, nvcfg1);
14540	}
14541}
14542
14543static void tg3_get_5755_nvram_info(struct tg3 *tp)
14544{
14545	u32 nvcfg1, protect = 0;
14546
14547	nvcfg1 = tr32(NVRAM_CFG1);
14548
14549	/* NVRAM protection for TPM */
14550	if (nvcfg1 & (1 << 27)) {
14551		tg3_flag_set(tp, PROTECTED_NVRAM);
14552		protect = 1;
14553	}
14554
14555	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14556	switch (nvcfg1) {
14557	case FLASH_5755VENDOR_ATMEL_FLASH_1:
14558	case FLASH_5755VENDOR_ATMEL_FLASH_2:
14559	case FLASH_5755VENDOR_ATMEL_FLASH_3:
14560	case FLASH_5755VENDOR_ATMEL_FLASH_5:
14561		tp->nvram_jedecnum = JEDEC_ATMEL;
14562		tg3_flag_set(tp, NVRAM_BUFFERED);
14563		tg3_flag_set(tp, FLASH);
14564		tp->nvram_pagesize = 264;
14565		if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14566		    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14567			tp->nvram_size = (protect ? 0x3e200 :
14568					  TG3_NVRAM_SIZE_512KB);
14569		else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14570			tp->nvram_size = (protect ? 0x1f200 :
14571					  TG3_NVRAM_SIZE_256KB);
14572		else
14573			tp->nvram_size = (protect ? 0x1f200 :
14574					  TG3_NVRAM_SIZE_128KB);
14575		break;
14576	case FLASH_5752VENDOR_ST_M45PE10:
14577	case FLASH_5752VENDOR_ST_M45PE20:
14578	case FLASH_5752VENDOR_ST_M45PE40:
14579		tp->nvram_jedecnum = JEDEC_ST;
14580		tg3_flag_set(tp, NVRAM_BUFFERED);
14581		tg3_flag_set(tp, FLASH);
14582		tp->nvram_pagesize = 256;
14583		if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14584			tp->nvram_size = (protect ?
14585					  TG3_NVRAM_SIZE_64KB :
14586					  TG3_NVRAM_SIZE_128KB);
14587		else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14588			tp->nvram_size = (protect ?
14589					  TG3_NVRAM_SIZE_64KB :
14590					  TG3_NVRAM_SIZE_256KB);
14591		else
14592			tp->nvram_size = (protect ?
14593					  TG3_NVRAM_SIZE_128KB :
14594					  TG3_NVRAM_SIZE_512KB);
14595		break;
14596	}
14597}
14598
14599static void tg3_get_5787_nvram_info(struct tg3 *tp)
14600{
14601	u32 nvcfg1;
14602
14603	nvcfg1 = tr32(NVRAM_CFG1);
14604
14605	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14606	case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14607	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14608	case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14609	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14610		tp->nvram_jedecnum = JEDEC_ATMEL;
14611		tg3_flag_set(tp, NVRAM_BUFFERED);
14612		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14613
14614		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14615		tw32(NVRAM_CFG1, nvcfg1);
14616		break;
14617	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14618	case FLASH_5755VENDOR_ATMEL_FLASH_1:
14619	case FLASH_5755VENDOR_ATMEL_FLASH_2:
14620	case FLASH_5755VENDOR_ATMEL_FLASH_3:
14621		tp->nvram_jedecnum = JEDEC_ATMEL;
14622		tg3_flag_set(tp, NVRAM_BUFFERED);
14623		tg3_flag_set(tp, FLASH);
14624		tp->nvram_pagesize = 264;
14625		break;
14626	case FLASH_5752VENDOR_ST_M45PE10:
14627	case FLASH_5752VENDOR_ST_M45PE20:
14628	case FLASH_5752VENDOR_ST_M45PE40:
14629		tp->nvram_jedecnum = JEDEC_ST;
14630		tg3_flag_set(tp, NVRAM_BUFFERED);
14631		tg3_flag_set(tp, FLASH);
14632		tp->nvram_pagesize = 256;
14633		break;
14634	}
14635}
14636
14637static void tg3_get_5761_nvram_info(struct tg3 *tp)
14638{
14639	u32 nvcfg1, protect = 0;
14640
14641	nvcfg1 = tr32(NVRAM_CFG1);
14642
14643	/* NVRAM protection for TPM */
14644	if (nvcfg1 & (1 << 27)) {
14645		tg3_flag_set(tp, PROTECTED_NVRAM);
14646		protect = 1;
14647	}
14648
14649	nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14650	switch (nvcfg1) {
14651	case FLASH_5761VENDOR_ATMEL_ADB021D:
14652	case FLASH_5761VENDOR_ATMEL_ADB041D:
14653	case FLASH_5761VENDOR_ATMEL_ADB081D:
14654	case FLASH_5761VENDOR_ATMEL_ADB161D:
14655	case FLASH_5761VENDOR_ATMEL_MDB021D:
14656	case FLASH_5761VENDOR_ATMEL_MDB041D:
14657	case FLASH_5761VENDOR_ATMEL_MDB081D:
14658	case FLASH_5761VENDOR_ATMEL_MDB161D:
14659		tp->nvram_jedecnum = JEDEC_ATMEL;
14660		tg3_flag_set(tp, NVRAM_BUFFERED);
14661		tg3_flag_set(tp, FLASH);
14662		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14663		tp->nvram_pagesize = 256;
14664		break;
14665	case FLASH_5761VENDOR_ST_A_M45PE20:
14666	case FLASH_5761VENDOR_ST_A_M45PE40:
14667	case FLASH_5761VENDOR_ST_A_M45PE80:
14668	case FLASH_5761VENDOR_ST_A_M45PE16:
14669	case FLASH_5761VENDOR_ST_M_M45PE20:
14670	case FLASH_5761VENDOR_ST_M_M45PE40:
14671	case FLASH_5761VENDOR_ST_M_M45PE80:
14672	case FLASH_5761VENDOR_ST_M_M45PE16:
14673		tp->nvram_jedecnum = JEDEC_ST;
14674		tg3_flag_set(tp, NVRAM_BUFFERED);
14675		tg3_flag_set(tp, FLASH);
14676		tp->nvram_pagesize = 256;
14677		break;
14678	}
14679
14680	if (protect) {
14681		tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14682	} else {
14683		switch (nvcfg1) {
14684		case FLASH_5761VENDOR_ATMEL_ADB161D:
14685		case FLASH_5761VENDOR_ATMEL_MDB161D:
14686		case FLASH_5761VENDOR_ST_A_M45PE16:
14687		case FLASH_5761VENDOR_ST_M_M45PE16:
14688			tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14689			break;
14690		case FLASH_5761VENDOR_ATMEL_ADB081D:
14691		case FLASH_5761VENDOR_ATMEL_MDB081D:
14692		case FLASH_5761VENDOR_ST_A_M45PE80:
14693		case FLASH_5761VENDOR_ST_M_M45PE80:
14694			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14695			break;
14696		case FLASH_5761VENDOR_ATMEL_ADB041D:
14697		case FLASH_5761VENDOR_ATMEL_MDB041D:
14698		case FLASH_5761VENDOR_ST_A_M45PE40:
14699		case FLASH_5761VENDOR_ST_M_M45PE40:
14700			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14701			break;
14702		case FLASH_5761VENDOR_ATMEL_ADB021D:
14703		case FLASH_5761VENDOR_ATMEL_MDB021D:
14704		case FLASH_5761VENDOR_ST_A_M45PE20:
14705		case FLASH_5761VENDOR_ST_M_M45PE20:
14706			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14707			break;
14708		}
14709	}
14710}
14711
14712static void tg3_get_5906_nvram_info(struct tg3 *tp)
14713{
14714	tp->nvram_jedecnum = JEDEC_ATMEL;
14715	tg3_flag_set(tp, NVRAM_BUFFERED);
14716	tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14717}
14718
14719static void tg3_get_57780_nvram_info(struct tg3 *tp)
14720{
14721	u32 nvcfg1;
14722
14723	nvcfg1 = tr32(NVRAM_CFG1);
14724
14725	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14726	case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14727	case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14728		tp->nvram_jedecnum = JEDEC_ATMEL;
14729		tg3_flag_set(tp, NVRAM_BUFFERED);
14730		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14731
14732		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14733		tw32(NVRAM_CFG1, nvcfg1);
14734		return;
14735	case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14736	case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14737	case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14738	case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14739	case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14740	case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14741	case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14742		tp->nvram_jedecnum = JEDEC_ATMEL;
14743		tg3_flag_set(tp, NVRAM_BUFFERED);
14744		tg3_flag_set(tp, FLASH);
14745
14746		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14747		case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14748		case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14749		case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14750			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14751			break;
14752		case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14753		case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14754			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14755			break;
14756		case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14757		case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14758			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14759			break;
14760		}
14761		break;
14762	case FLASH_5752VENDOR_ST_M45PE10:
14763	case FLASH_5752VENDOR_ST_M45PE20:
14764	case FLASH_5752VENDOR_ST_M45PE40:
14765		tp->nvram_jedecnum = JEDEC_ST;
14766		tg3_flag_set(tp, NVRAM_BUFFERED);
14767		tg3_flag_set(tp, FLASH);
14768
14769		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14770		case FLASH_5752VENDOR_ST_M45PE10:
14771			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14772			break;
14773		case FLASH_5752VENDOR_ST_M45PE20:
14774			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14775			break;
14776		case FLASH_5752VENDOR_ST_M45PE40:
14777			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14778			break;
14779		}
14780		break;
14781	default:
14782		tg3_flag_set(tp, NO_NVRAM);
14783		return;
14784	}
14785
14786	tg3_nvram_get_pagesize(tp, nvcfg1);
14787	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14788		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14789}
14790
14791
14792static void tg3_get_5717_nvram_info(struct tg3 *tp)
14793{
14794	u32 nvcfg1;
14795
14796	nvcfg1 = tr32(NVRAM_CFG1);
14797
14798	switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14799	case FLASH_5717VENDOR_ATMEL_EEPROM:
14800	case FLASH_5717VENDOR_MICRO_EEPROM:
14801		tp->nvram_jedecnum = JEDEC_ATMEL;
14802		tg3_flag_set(tp, NVRAM_BUFFERED);
14803		tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14804
14805		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14806		tw32(NVRAM_CFG1, nvcfg1);
14807		return;
14808	case FLASH_5717VENDOR_ATMEL_MDB011D:
14809	case FLASH_5717VENDOR_ATMEL_ADB011B:
14810	case FLASH_5717VENDOR_ATMEL_ADB011D:
14811	case FLASH_5717VENDOR_ATMEL_MDB021D:
14812	case FLASH_5717VENDOR_ATMEL_ADB021B:
14813	case FLASH_5717VENDOR_ATMEL_ADB021D:
14814	case FLASH_5717VENDOR_ATMEL_45USPT:
14815		tp->nvram_jedecnum = JEDEC_ATMEL;
14816		tg3_flag_set(tp, NVRAM_BUFFERED);
14817		tg3_flag_set(tp, FLASH);
14818
14819		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14820		case FLASH_5717VENDOR_ATMEL_MDB021D:
14821			/* Detect size with tg3_nvram_get_size() */
14822			break;
14823		case FLASH_5717VENDOR_ATMEL_ADB021B:
14824		case FLASH_5717VENDOR_ATMEL_ADB021D:
14825			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14826			break;
14827		default:
14828			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14829			break;
14830		}
14831		break;
14832	case FLASH_5717VENDOR_ST_M_M25PE10:
14833	case FLASH_5717VENDOR_ST_A_M25PE10:
14834	case FLASH_5717VENDOR_ST_M_M45PE10:
14835	case FLASH_5717VENDOR_ST_A_M45PE10:
14836	case FLASH_5717VENDOR_ST_M_M25PE20:
14837	case FLASH_5717VENDOR_ST_A_M25PE20:
14838	case FLASH_5717VENDOR_ST_M_M45PE20:
14839	case FLASH_5717VENDOR_ST_A_M45PE20:
14840	case FLASH_5717VENDOR_ST_25USPT:
14841	case FLASH_5717VENDOR_ST_45USPT:
14842		tp->nvram_jedecnum = JEDEC_ST;
14843		tg3_flag_set(tp, NVRAM_BUFFERED);
14844		tg3_flag_set(tp, FLASH);
14845
14846		switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14847		case FLASH_5717VENDOR_ST_M_M25PE20:
14848		case FLASH_5717VENDOR_ST_M_M45PE20:
14849			/* Detect size with tg3_nvram_get_size() */
14850			break;
14851		case FLASH_5717VENDOR_ST_A_M25PE20:
14852		case FLASH_5717VENDOR_ST_A_M45PE20:
14853			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14854			break;
14855		default:
14856			tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14857			break;
14858		}
14859		break;
14860	default:
14861		tg3_flag_set(tp, NO_NVRAM);
14862		return;
14863	}
14864
14865	tg3_nvram_get_pagesize(tp, nvcfg1);
14866	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14867		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14868}
14869
14870static void tg3_get_5720_nvram_info(struct tg3 *tp)
14871{
14872	u32 nvcfg1, nvmpinstrp, nv_status;
14873
14874	nvcfg1 = tr32(NVRAM_CFG1);
14875	nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14876
14877	if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14878		if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14879			tg3_flag_set(tp, NO_NVRAM);
14880			return;
14881		}
14882
14883		switch (nvmpinstrp) {
14884		case FLASH_5762_MX25L_100:
14885		case FLASH_5762_MX25L_200:
14886		case FLASH_5762_MX25L_400:
14887		case FLASH_5762_MX25L_800:
14888		case FLASH_5762_MX25L_160_320:
14889			tp->nvram_pagesize = 4096;
14890			tp->nvram_jedecnum = JEDEC_MACRONIX;
14891			tg3_flag_set(tp, NVRAM_BUFFERED);
14892			tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14893			tg3_flag_set(tp, FLASH);
14894			nv_status = tr32(NVRAM_AUTOSENSE_STATUS);
14895			tp->nvram_size =
14896				(1 << (nv_status >> AUTOSENSE_DEVID &
14897						AUTOSENSE_DEVID_MASK)
14898					<< AUTOSENSE_SIZE_IN_MB);
14899			return;
14900
14901		case FLASH_5762_EEPROM_HD:
14902			nvmpinstrp = FLASH_5720_EEPROM_HD;
14903			break;
14904		case FLASH_5762_EEPROM_LD:
14905			nvmpinstrp = FLASH_5720_EEPROM_LD;
14906			break;
14907		case FLASH_5720VENDOR_M_ST_M45PE20:
14908			/* This pinstrap supports multiple sizes, so force it
14909			 * to read the actual size from location 0xf0.
14910			 */
14911			nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14912			break;
14913		}
14914	}
14915
14916	switch (nvmpinstrp) {
14917	case FLASH_5720_EEPROM_HD:
14918	case FLASH_5720_EEPROM_LD:
14919		tp->nvram_jedecnum = JEDEC_ATMEL;
14920		tg3_flag_set(tp, NVRAM_BUFFERED);
14921
14922		nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14923		tw32(NVRAM_CFG1, nvcfg1);
14924		if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14925			tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14926		else
14927			tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14928		return;
14929	case FLASH_5720VENDOR_M_ATMEL_DB011D:
14930	case FLASH_5720VENDOR_A_ATMEL_DB011B:
14931	case FLASH_5720VENDOR_A_ATMEL_DB011D:
14932	case FLASH_5720VENDOR_M_ATMEL_DB021D:
14933	case FLASH_5720VENDOR_A_ATMEL_DB021B:
14934	case FLASH_5720VENDOR_A_ATMEL_DB021D:
14935	case FLASH_5720VENDOR_M_ATMEL_DB041D:
14936	case FLASH_5720VENDOR_A_ATMEL_DB041B:
14937	case FLASH_5720VENDOR_A_ATMEL_DB041D:
14938	case FLASH_5720VENDOR_M_ATMEL_DB081D:
14939	case FLASH_5720VENDOR_A_ATMEL_DB081D:
14940	case FLASH_5720VENDOR_ATMEL_45USPT:
14941		tp->nvram_jedecnum = JEDEC_ATMEL;
14942		tg3_flag_set(tp, NVRAM_BUFFERED);
14943		tg3_flag_set(tp, FLASH);
14944
14945		switch (nvmpinstrp) {
14946		case FLASH_5720VENDOR_M_ATMEL_DB021D:
14947		case FLASH_5720VENDOR_A_ATMEL_DB021B:
14948		case FLASH_5720VENDOR_A_ATMEL_DB021D:
14949			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14950			break;
14951		case FLASH_5720VENDOR_M_ATMEL_DB041D:
14952		case FLASH_5720VENDOR_A_ATMEL_DB041B:
14953		case FLASH_5720VENDOR_A_ATMEL_DB041D:
14954			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14955			break;
14956		case FLASH_5720VENDOR_M_ATMEL_DB081D:
14957		case FLASH_5720VENDOR_A_ATMEL_DB081D:
14958			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14959			break;
14960		default:
14961			if (tg3_asic_rev(tp) != ASIC_REV_5762)
14962				tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14963			break;
14964		}
14965		break;
14966	case FLASH_5720VENDOR_M_ST_M25PE10:
14967	case FLASH_5720VENDOR_M_ST_M45PE10:
14968	case FLASH_5720VENDOR_A_ST_M25PE10:
14969	case FLASH_5720VENDOR_A_ST_M45PE10:
14970	case FLASH_5720VENDOR_M_ST_M25PE20:
14971	case FLASH_5720VENDOR_M_ST_M45PE20:
14972	case FLASH_5720VENDOR_A_ST_M25PE20:
14973	case FLASH_5720VENDOR_A_ST_M45PE20:
14974	case FLASH_5720VENDOR_M_ST_M25PE40:
14975	case FLASH_5720VENDOR_M_ST_M45PE40:
14976	case FLASH_5720VENDOR_A_ST_M25PE40:
14977	case FLASH_5720VENDOR_A_ST_M45PE40:
14978	case FLASH_5720VENDOR_M_ST_M25PE80:
14979	case FLASH_5720VENDOR_M_ST_M45PE80:
14980	case FLASH_5720VENDOR_A_ST_M25PE80:
14981	case FLASH_5720VENDOR_A_ST_M45PE80:
14982	case FLASH_5720VENDOR_ST_25USPT:
14983	case FLASH_5720VENDOR_ST_45USPT:
14984		tp->nvram_jedecnum = JEDEC_ST;
14985		tg3_flag_set(tp, NVRAM_BUFFERED);
14986		tg3_flag_set(tp, FLASH);
14987
14988		switch (nvmpinstrp) {
14989		case FLASH_5720VENDOR_M_ST_M25PE20:
14990		case FLASH_5720VENDOR_M_ST_M45PE20:
14991		case FLASH_5720VENDOR_A_ST_M25PE20:
14992		case FLASH_5720VENDOR_A_ST_M45PE20:
14993			tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14994			break;
14995		case FLASH_5720VENDOR_M_ST_M25PE40:
14996		case FLASH_5720VENDOR_M_ST_M45PE40:
14997		case FLASH_5720VENDOR_A_ST_M25PE40:
14998		case FLASH_5720VENDOR_A_ST_M45PE40:
14999			tp->nvram_size = TG3_NVRAM_SIZE_512KB;
15000			break;
15001		case FLASH_5720VENDOR_M_ST_M25PE80:
15002		case FLASH_5720VENDOR_M_ST_M45PE80:
15003		case FLASH_5720VENDOR_A_ST_M25PE80:
15004		case FLASH_5720VENDOR_A_ST_M45PE80:
15005			tp->nvram_size = TG3_NVRAM_SIZE_1MB;
15006			break;
15007		default:
15008			if (tg3_asic_rev(tp) != ASIC_REV_5762)
15009				tp->nvram_size = TG3_NVRAM_SIZE_128KB;
15010			break;
15011		}
15012		break;
15013	default:
15014		tg3_flag_set(tp, NO_NVRAM);
15015		return;
15016	}
15017
15018	tg3_nvram_get_pagesize(tp, nvcfg1);
15019	if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
15020		tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
15021
15022	if (tg3_asic_rev(tp) == ASIC_REV_5762) {
15023		u32 val;
15024
15025		if (tg3_nvram_read(tp, 0, &val))
15026			return;
15027
15028		if (val != TG3_EEPROM_MAGIC &&
15029		    (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
15030			tg3_flag_set(tp, NO_NVRAM);
15031	}
15032}
15033
15034/* Chips other than 5700/5701 use the NVRAM for fetching info. */
15035static void tg3_nvram_init(struct tg3 *tp)
15036{
15037	if (tg3_flag(tp, IS_SSB_CORE)) {
15038		/* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
15039		tg3_flag_clear(tp, NVRAM);
15040		tg3_flag_clear(tp, NVRAM_BUFFERED);
15041		tg3_flag_set(tp, NO_NVRAM);
15042		return;
15043	}
15044
15045	tw32_f(GRC_EEPROM_ADDR,
15046	     (EEPROM_ADDR_FSM_RESET |
15047	      (EEPROM_DEFAULT_CLOCK_PERIOD <<
15048	       EEPROM_ADDR_CLKPERD_SHIFT)));
15049
15050	msleep(1);
15051
15052	/* Enable seeprom accesses. */
15053	tw32_f(GRC_LOCAL_CTRL,
15054	     tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
15055	udelay(100);
15056
15057	if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15058	    tg3_asic_rev(tp) != ASIC_REV_5701) {
15059		tg3_flag_set(tp, NVRAM);
15060
15061		if (tg3_nvram_lock(tp)) {
15062			netdev_warn(tp->dev,
15063				    "Cannot get nvram lock, %s failed\n",
15064				    __func__);
15065			return;
15066		}
15067		tg3_enable_nvram_access(tp);
15068
15069		tp->nvram_size = 0;
15070
15071		if (tg3_asic_rev(tp) == ASIC_REV_5752)
15072			tg3_get_5752_nvram_info(tp);
15073		else if (tg3_asic_rev(tp) == ASIC_REV_5755)
15074			tg3_get_5755_nvram_info(tp);
15075		else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
15076			 tg3_asic_rev(tp) == ASIC_REV_5784 ||
15077			 tg3_asic_rev(tp) == ASIC_REV_5785)
15078			tg3_get_5787_nvram_info(tp);
15079		else if (tg3_asic_rev(tp) == ASIC_REV_5761)
15080			tg3_get_5761_nvram_info(tp);
15081		else if (tg3_asic_rev(tp) == ASIC_REV_5906)
15082			tg3_get_5906_nvram_info(tp);
15083		else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
15084			 tg3_flag(tp, 57765_CLASS))
15085			tg3_get_57780_nvram_info(tp);
15086		else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15087			 tg3_asic_rev(tp) == ASIC_REV_5719)
15088			tg3_get_5717_nvram_info(tp);
15089		else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
15090			 tg3_asic_rev(tp) == ASIC_REV_5762)
15091			tg3_get_5720_nvram_info(tp);
15092		else
15093			tg3_get_nvram_info(tp);
15094
15095		if (tp->nvram_size == 0)
15096			tg3_get_nvram_size(tp);
15097
15098		tg3_disable_nvram_access(tp);
15099		tg3_nvram_unlock(tp);
15100
15101	} else {
15102		tg3_flag_clear(tp, NVRAM);
15103		tg3_flag_clear(tp, NVRAM_BUFFERED);
15104
15105		tg3_get_eeprom_size(tp);
15106	}
15107}
15108
15109struct subsys_tbl_ent {
15110	u16 subsys_vendor, subsys_devid;
15111	u32 phy_id;
15112};
15113
15114static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15115	/* Broadcom boards. */
15116	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15117	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15118	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15119	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15120	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15121	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15122	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15123	  TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15124	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15125	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15126	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15127	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15128	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15129	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15130	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15131	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15132	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15133	  TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15134	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15135	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15136	{ TG3PCI_SUBVENDOR_ID_BROADCOM,
15137	  TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15138
15139	/* 3com boards. */
15140	{ TG3PCI_SUBVENDOR_ID_3COM,
15141	  TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15142	{ TG3PCI_SUBVENDOR_ID_3COM,
15143	  TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15144	{ TG3PCI_SUBVENDOR_ID_3COM,
15145	  TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15146	{ TG3PCI_SUBVENDOR_ID_3COM,
15147	  TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15148	{ TG3PCI_SUBVENDOR_ID_3COM,
15149	  TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15150
15151	/* DELL boards. */
15152	{ TG3PCI_SUBVENDOR_ID_DELL,
15153	  TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15154	{ TG3PCI_SUBVENDOR_ID_DELL,
15155	  TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15156	{ TG3PCI_SUBVENDOR_ID_DELL,
15157	  TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15158	{ TG3PCI_SUBVENDOR_ID_DELL,
15159	  TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15160
15161	/* Compaq boards. */
15162	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
15163	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15164	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
15165	  TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15166	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
15167	  TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15168	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
15169	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15170	{ TG3PCI_SUBVENDOR_ID_COMPAQ,
15171	  TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15172
15173	/* IBM boards. */
15174	{ TG3PCI_SUBVENDOR_ID_IBM,
15175	  TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15176};
15177
15178static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15179{
15180	int i;
15181
15182	for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15183		if ((subsys_id_to_phy_id[i].subsys_vendor ==
15184		     tp->pdev->subsystem_vendor) &&
15185		    (subsys_id_to_phy_id[i].subsys_devid ==
15186		     tp->pdev->subsystem_device))
15187			return &subsys_id_to_phy_id[i];
15188	}
15189	return NULL;
15190}
15191
15192static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15193{
15194	u32 val;
15195
15196	tp->phy_id = TG3_PHY_ID_INVALID;
15197	tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15198
15199	/* Assume an onboard device and WOL capable by default.  */
15200	tg3_flag_set(tp, EEPROM_WRITE_PROT);
15201	tg3_flag_set(tp, WOL_CAP);
15202
15203	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15204		if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15205			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15206			tg3_flag_set(tp, IS_NIC);
15207		}
15208		val = tr32(VCPU_CFGSHDW);
15209		if (val & VCPU_CFGSHDW_ASPM_DBNC)
15210			tg3_flag_set(tp, ASPM_WORKAROUND);
15211		if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15212		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15213			tg3_flag_set(tp, WOL_ENABLE);
15214			device_set_wakeup_enable(&tp->pdev->dev, true);
15215		}
15216		goto done;
15217	}
15218
15219	tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15220	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15221		u32 nic_cfg, led_cfg;
15222		u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15223		u32 nic_phy_id, ver, eeprom_phy_id;
15224		int eeprom_phy_serdes = 0;
15225
15226		tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15227		tp->nic_sram_data_cfg = nic_cfg;
15228
15229		tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15230		ver >>= NIC_SRAM_DATA_VER_SHIFT;
15231		if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15232		    tg3_asic_rev(tp) != ASIC_REV_5701 &&
15233		    tg3_asic_rev(tp) != ASIC_REV_5703 &&
15234		    (ver > 0) && (ver < 0x100))
15235			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15236
15237		if (tg3_asic_rev(tp) == ASIC_REV_5785)
15238			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15239
15240		if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15241		    tg3_asic_rev(tp) == ASIC_REV_5719 ||
15242		    tg3_asic_rev(tp) == ASIC_REV_5720)
15243			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15244
15245		if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15246		    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15247			eeprom_phy_serdes = 1;
15248
15249		tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15250		if (nic_phy_id != 0) {
15251			u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15252			u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15253
15254			eeprom_phy_id  = (id1 >> 16) << 10;
15255			eeprom_phy_id |= (id2 & 0xfc00) << 16;
15256			eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15257		} else
15258			eeprom_phy_id = 0;
15259
15260		tp->phy_id = eeprom_phy_id;
15261		if (eeprom_phy_serdes) {
15262			if (!tg3_flag(tp, 5705_PLUS))
15263				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15264			else
15265				tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15266		}
15267
15268		if (tg3_flag(tp, 5750_PLUS))
15269			led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15270				    SHASTA_EXT_LED_MODE_MASK);
15271		else
15272			led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15273
15274		switch (led_cfg) {
15275		default:
15276		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15277			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15278			break;
15279
15280		case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15281			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15282			break;
15283
15284		case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15285			tp->led_ctrl = LED_CTRL_MODE_MAC;
15286
15287			/* Default to PHY_1_MODE if 0 (MAC_MODE) is
15288			 * read on some older 5700/5701 bootcode.
15289			 */
15290			if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15291			    tg3_asic_rev(tp) == ASIC_REV_5701)
15292				tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15293
15294			break;
15295
15296		case SHASTA_EXT_LED_SHARED:
15297			tp->led_ctrl = LED_CTRL_MODE_SHARED;
15298			if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15299			    tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15300				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15301						 LED_CTRL_MODE_PHY_2);
15302
15303			if (tg3_flag(tp, 5717_PLUS) ||
15304			    tg3_asic_rev(tp) == ASIC_REV_5762)
15305				tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15306						LED_CTRL_BLINK_RATE_MASK;
15307
15308			break;
15309
15310		case SHASTA_EXT_LED_MAC:
15311			tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15312			break;
15313
15314		case SHASTA_EXT_LED_COMBO:
15315			tp->led_ctrl = LED_CTRL_MODE_COMBO;
15316			if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15317				tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15318						 LED_CTRL_MODE_PHY_2);
15319			break;
15320
15321		}
15322
15323		if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15324		     tg3_asic_rev(tp) == ASIC_REV_5701) &&
15325		    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15326			tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15327
15328		if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15329			tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15330
15331		if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15332			tg3_flag_set(tp, EEPROM_WRITE_PROT);
15333			if ((tp->pdev->subsystem_vendor ==
15334			     PCI_VENDOR_ID_ARIMA) &&
15335			    (tp->pdev->subsystem_device == 0x205a ||
15336			     tp->pdev->subsystem_device == 0x2063))
15337				tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15338		} else {
15339			tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15340			tg3_flag_set(tp, IS_NIC);
15341		}
15342
15343		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15344			tg3_flag_set(tp, ENABLE_ASF);
15345			if (tg3_flag(tp, 5750_PLUS))
15346				tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15347		}
15348
15349		if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15350		    tg3_flag(tp, 5750_PLUS))
15351			tg3_flag_set(tp, ENABLE_APE);
15352
15353		if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15354		    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15355			tg3_flag_clear(tp, WOL_CAP);
15356
15357		if (tg3_flag(tp, WOL_CAP) &&
15358		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15359			tg3_flag_set(tp, WOL_ENABLE);
15360			device_set_wakeup_enable(&tp->pdev->dev, true);
15361		}
15362
15363		if (cfg2 & (1 << 17))
15364			tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15365
15366		/* serdes signal pre-emphasis in register 0x590 set by */
15367		/* bootcode if bit 18 is set */
15368		if (cfg2 & (1 << 18))
15369			tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15370
15371		if ((tg3_flag(tp, 57765_PLUS) ||
15372		     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15373		      tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15374		    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15375			tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15376
15377		if (tg3_flag(tp, PCI_EXPRESS)) {
15378			u32 cfg3;
15379
15380			tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15381			if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15382			    !tg3_flag(tp, 57765_PLUS) &&
15383			    (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15384				tg3_flag_set(tp, ASPM_WORKAROUND);
15385			if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15386				tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15387			if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15388				tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15389		}
15390
15391		if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15392			tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15393		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15394			tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15395		if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15396			tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15397
15398		if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15399			tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15400	}
15401done:
15402	if (tg3_flag(tp, WOL_CAP))
15403		device_set_wakeup_enable(&tp->pdev->dev,
15404					 tg3_flag(tp, WOL_ENABLE));
15405	else
15406		device_set_wakeup_capable(&tp->pdev->dev, false);
15407}
15408
15409static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15410{
15411	int i, err;
15412	u32 val2, off = offset * 8;
15413
15414	err = tg3_nvram_lock(tp);
15415	if (err)
15416		return err;
15417
15418	tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15419	tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15420			APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15421	tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15422	udelay(10);
15423
15424	for (i = 0; i < 100; i++) {
15425		val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15426		if (val2 & APE_OTP_STATUS_CMD_DONE) {
15427			*val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15428			break;
15429		}
15430		udelay(10);
15431	}
15432
15433	tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15434
15435	tg3_nvram_unlock(tp);
15436	if (val2 & APE_OTP_STATUS_CMD_DONE)
15437		return 0;
15438
15439	return -EBUSY;
15440}
15441
15442static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15443{
15444	int i;
15445	u32 val;
15446
15447	tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15448	tw32(OTP_CTRL, cmd);
15449
15450	/* Wait for up to 1 ms for command to execute. */
15451	for (i = 0; i < 100; i++) {
15452		val = tr32(OTP_STATUS);
15453		if (val & OTP_STATUS_CMD_DONE)
15454			break;
15455		udelay(10);
15456	}
15457
15458	return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15459}
15460
15461/* Read the gphy configuration from the OTP region of the chip.  The gphy
15462 * configuration is a 32-bit value that straddles the alignment boundary.
15463 * We do two 32-bit reads and then shift and merge the results.
15464 */
15465static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15466{
15467	u32 bhalf_otp, thalf_otp;
15468
15469	tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15470
15471	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15472		return 0;
15473
15474	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15475
15476	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15477		return 0;
15478
15479	thalf_otp = tr32(OTP_READ_DATA);
15480
15481	tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15482
15483	if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15484		return 0;
15485
15486	bhalf_otp = tr32(OTP_READ_DATA);
15487
15488	return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15489}
15490
15491static void tg3_phy_init_link_config(struct tg3 *tp)
15492{
15493	u32 adv = ADVERTISED_Autoneg;
15494
15495	if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15496		if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15497			adv |= ADVERTISED_1000baseT_Half;
15498		adv |= ADVERTISED_1000baseT_Full;
15499	}
15500
15501	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15502		adv |= ADVERTISED_100baseT_Half |
15503		       ADVERTISED_100baseT_Full |
15504		       ADVERTISED_10baseT_Half |
15505		       ADVERTISED_10baseT_Full |
15506		       ADVERTISED_TP;
15507	else
15508		adv |= ADVERTISED_FIBRE;
15509
15510	tp->link_config.advertising = adv;
15511	tp->link_config.speed = SPEED_UNKNOWN;
15512	tp->link_config.duplex = DUPLEX_UNKNOWN;
15513	tp->link_config.autoneg = AUTONEG_ENABLE;
15514	tp->link_config.active_speed = SPEED_UNKNOWN;
15515	tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15516
15517	tp->old_link = -1;
15518}
15519
15520static int tg3_phy_probe(struct tg3 *tp)
15521{
15522	u32 hw_phy_id_1, hw_phy_id_2;
15523	u32 hw_phy_id, hw_phy_id_masked;
15524	int err;
15525
15526	/* flow control autonegotiation is default behavior */
15527	tg3_flag_set(tp, PAUSE_AUTONEG);
15528	tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15529
15530	if (tg3_flag(tp, ENABLE_APE)) {
15531		switch (tp->pci_fn) {
15532		case 0:
15533			tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15534			break;
15535		case 1:
15536			tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15537			break;
15538		case 2:
15539			tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15540			break;
15541		case 3:
15542			tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15543			break;
15544		}
15545	}
15546
15547	if (!tg3_flag(tp, ENABLE_ASF) &&
15548	    !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15549	    !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15550		tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15551				   TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15552
15553	if (tg3_flag(tp, USE_PHYLIB))
15554		return tg3_phy_init(tp);
15555
15556	/* Reading the PHY ID register can conflict with ASF
15557	 * firmware access to the PHY hardware.
15558	 */
15559	err = 0;
15560	if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15561		hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15562	} else {
15563		/* Now read the physical PHY_ID from the chip and verify
15564		 * that it is sane.  If it doesn't look good, we fall back
15565		 * to either the hard-coded table based PHY_ID and failing
15566		 * that the value found in the eeprom area.
15567		 */
15568		err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15569		err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15570
15571		hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15572		hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15573		hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15574
15575		hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15576	}
15577
15578	if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15579		tp->phy_id = hw_phy_id;
15580		if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15581			tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15582		else
15583			tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15584	} else {
15585		if (tp->phy_id != TG3_PHY_ID_INVALID) {
15586			/* Do nothing, phy ID already set up in
15587			 * tg3_get_eeprom_hw_cfg().
15588			 */
15589		} else {
15590			struct subsys_tbl_ent *p;
15591
15592			/* No eeprom signature?  Try the hardcoded
15593			 * subsys device table.
15594			 */
15595			p = tg3_lookup_by_subsys(tp);
15596			if (p) {
15597				tp->phy_id = p->phy_id;
15598			} else if (!tg3_flag(tp, IS_SSB_CORE)) {
15599				/* For now we saw the IDs 0xbc050cd0,
15600				 * 0xbc050f80 and 0xbc050c30 on devices
15601				 * connected to an BCM4785 and there are
15602				 * probably more. Just assume that the phy is
15603				 * supported when it is connected to a SSB core
15604				 * for now.
15605				 */
15606				return -ENODEV;
15607			}
15608
15609			if (!tp->phy_id ||
15610			    tp->phy_id == TG3_PHY_ID_BCM8002)
15611				tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15612		}
15613	}
15614
15615	if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15616	    (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15617	     tg3_asic_rev(tp) == ASIC_REV_5720 ||
15618	     tg3_asic_rev(tp) == ASIC_REV_57766 ||
15619	     tg3_asic_rev(tp) == ASIC_REV_5762 ||
15620	     (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15621	      tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15622	     (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15623	      tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15624		tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15625
15626		tp->eee.supported = SUPPORTED_100baseT_Full |
15627				    SUPPORTED_1000baseT_Full;
15628		tp->eee.advertised = ADVERTISED_100baseT_Full |
15629				     ADVERTISED_1000baseT_Full;
15630		tp->eee.eee_enabled = 1;
15631		tp->eee.tx_lpi_enabled = 1;
15632		tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15633	}
15634
15635	tg3_phy_init_link_config(tp);
15636
15637	if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15638	    !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15639	    !tg3_flag(tp, ENABLE_APE) &&
15640	    !tg3_flag(tp, ENABLE_ASF)) {
15641		u32 bmsr, dummy;
15642
15643		tg3_readphy(tp, MII_BMSR, &bmsr);
15644		if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15645		    (bmsr & BMSR_LSTATUS))
15646			goto skip_phy_reset;
15647
15648		err = tg3_phy_reset(tp);
15649		if (err)
15650			return err;
15651
15652		tg3_phy_set_wirespeed(tp);
15653
15654		if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15655			tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15656					    tp->link_config.flowctrl);
15657
15658			tg3_writephy(tp, MII_BMCR,
15659				     BMCR_ANENABLE | BMCR_ANRESTART);
15660		}
15661	}
15662
15663skip_phy_reset:
15664	if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15665		err = tg3_init_5401phy_dsp(tp);
15666		if (err)
15667			return err;
15668
15669		err = tg3_init_5401phy_dsp(tp);
15670	}
15671
15672	return err;
15673}
15674
15675static void tg3_read_vpd(struct tg3 *tp)
15676{
15677	u8 *vpd_data;
15678	unsigned int block_end, rosize, len;
15679	u32 vpdlen;
15680	int j, i = 0;
15681
15682	vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15683	if (!vpd_data)
15684		goto out_no_vpd;
15685
15686	i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
15687	if (i < 0)
15688		goto out_not_found;
15689
15690	rosize = pci_vpd_lrdt_size(&vpd_data[i]);
15691	block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
15692	i += PCI_VPD_LRDT_TAG_SIZE;
15693
15694	if (block_end > vpdlen)
15695		goto out_not_found;
15696
15697	j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15698				      PCI_VPD_RO_KEYWORD_MFR_ID);
15699	if (j > 0) {
15700		len = pci_vpd_info_field_size(&vpd_data[j]);
15701
15702		j += PCI_VPD_INFO_FLD_HDR_SIZE;
15703		if (j + len > block_end || len != 4 ||
15704		    memcmp(&vpd_data[j], "1028", 4))
15705			goto partno;
15706
15707		j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15708					      PCI_VPD_RO_KEYWORD_VENDOR0);
15709		if (j < 0)
15710			goto partno;
15711
15712		len = pci_vpd_info_field_size(&vpd_data[j]);
15713
15714		j += PCI_VPD_INFO_FLD_HDR_SIZE;
15715		if (j + len > block_end)
15716			goto partno;
15717
15718		if (len >= sizeof(tp->fw_ver))
15719			len = sizeof(tp->fw_ver) - 1;
15720		memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15721		snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len,
15722			 &vpd_data[j]);
15723	}
15724
15725partno:
15726	i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15727				      PCI_VPD_RO_KEYWORD_PARTNO);
15728	if (i < 0)
15729		goto out_not_found;
15730
15731	len = pci_vpd_info_field_size(&vpd_data[i]);
15732
15733	i += PCI_VPD_INFO_FLD_HDR_SIZE;
15734	if (len > TG3_BPN_SIZE ||
15735	    (len + i) > vpdlen)
15736		goto out_not_found;
15737
15738	memcpy(tp->board_part_number, &vpd_data[i], len);
15739
15740out_not_found:
15741	kfree(vpd_data);
15742	if (tp->board_part_number[0])
15743		return;
15744
15745out_no_vpd:
15746	if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15747		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15748		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15749			strcpy(tp->board_part_number, "BCM5717");
15750		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15751			strcpy(tp->board_part_number, "BCM5718");
15752		else
15753			goto nomatch;
15754	} else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15755		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15756			strcpy(tp->board_part_number, "BCM57780");
15757		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15758			strcpy(tp->board_part_number, "BCM57760");
15759		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15760			strcpy(tp->board_part_number, "BCM57790");
15761		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15762			strcpy(tp->board_part_number, "BCM57788");
15763		else
15764			goto nomatch;
15765	} else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15766		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15767			strcpy(tp->board_part_number, "BCM57761");
15768		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15769			strcpy(tp->board_part_number, "BCM57765");
15770		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15771			strcpy(tp->board_part_number, "BCM57781");
15772		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15773			strcpy(tp->board_part_number, "BCM57785");
15774		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15775			strcpy(tp->board_part_number, "BCM57791");
15776		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15777			strcpy(tp->board_part_number, "BCM57795");
15778		else
15779			goto nomatch;
15780	} else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15781		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15782			strcpy(tp->board_part_number, "BCM57762");
15783		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15784			strcpy(tp->board_part_number, "BCM57766");
15785		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15786			strcpy(tp->board_part_number, "BCM57782");
15787		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15788			strcpy(tp->board_part_number, "BCM57786");
15789		else
15790			goto nomatch;
15791	} else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15792		strcpy(tp->board_part_number, "BCM95906");
15793	} else {
15794nomatch:
15795		strcpy(tp->board_part_number, "none");
15796	}
15797}
15798
15799static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15800{
15801	u32 val;
15802
15803	if (tg3_nvram_read(tp, offset, &val) ||
15804	    (val & 0xfc000000) != 0x0c000000 ||
15805	    tg3_nvram_read(tp, offset + 4, &val) ||
15806	    val != 0)
15807		return 0;
15808
15809	return 1;
15810}
15811
15812static void tg3_read_bc_ver(struct tg3 *tp)
15813{
15814	u32 val, offset, start, ver_offset;
15815	int i, dst_off;
15816	bool newver = false;
15817
15818	if (tg3_nvram_read(tp, 0xc, &offset) ||
15819	    tg3_nvram_read(tp, 0x4, &start))
15820		return;
15821
15822	offset = tg3_nvram_logical_addr(tp, offset);
15823
15824	if (tg3_nvram_read(tp, offset, &val))
15825		return;
15826
15827	if ((val & 0xfc000000) == 0x0c000000) {
15828		if (tg3_nvram_read(tp, offset + 4, &val))
15829			return;
15830
15831		if (val == 0)
15832			newver = true;
15833	}
15834
15835	dst_off = strlen(tp->fw_ver);
15836
15837	if (newver) {
15838		if (TG3_VER_SIZE - dst_off < 16 ||
15839		    tg3_nvram_read(tp, offset + 8, &ver_offset))
15840			return;
15841
15842		offset = offset + ver_offset - start;
15843		for (i = 0; i < 16; i += 4) {
15844			__be32 v;
15845			if (tg3_nvram_read_be32(tp, offset + i, &v))
15846				return;
15847
15848			memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15849		}
15850	} else {
15851		u32 major, minor;
15852
15853		if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15854			return;
15855
15856		major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15857			TG3_NVM_BCVER_MAJSFT;
15858		minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15859		snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15860			 "v%d.%02d", major, minor);
15861	}
15862}
15863
15864static void tg3_read_hwsb_ver(struct tg3 *tp)
15865{
15866	u32 val, major, minor;
15867
15868	/* Use native endian representation */
15869	if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15870		return;
15871
15872	major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15873		TG3_NVM_HWSB_CFG1_MAJSFT;
15874	minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15875		TG3_NVM_HWSB_CFG1_MINSFT;
15876
15877	snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15878}
15879
15880static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15881{
15882	u32 offset, major, minor, build;
15883
15884	strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15885
15886	if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15887		return;
15888
15889	switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15890	case TG3_EEPROM_SB_REVISION_0:
15891		offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15892		break;
15893	case TG3_EEPROM_SB_REVISION_2:
15894		offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15895		break;
15896	case TG3_EEPROM_SB_REVISION_3:
15897		offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15898		break;
15899	case TG3_EEPROM_SB_REVISION_4:
15900		offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15901		break;
15902	case TG3_EEPROM_SB_REVISION_5:
15903		offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15904		break;
15905	case TG3_EEPROM_SB_REVISION_6:
15906		offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15907		break;
15908	default:
15909		return;
15910	}
15911
15912	if (tg3_nvram_read(tp, offset, &val))
15913		return;
15914
15915	build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15916		TG3_EEPROM_SB_EDH_BLD_SHFT;
15917	major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15918		TG3_EEPROM_SB_EDH_MAJ_SHFT;
15919	minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15920
15921	if (minor > 99 || build > 26)
15922		return;
15923
15924	offset = strlen(tp->fw_ver);
15925	snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15926		 " v%d.%02d", major, minor);
15927
15928	if (build > 0) {
15929		offset = strlen(tp->fw_ver);
15930		if (offset < TG3_VER_SIZE - 1)
15931			tp->fw_ver[offset] = 'a' + build - 1;
15932	}
15933}
15934
15935static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15936{
15937	u32 val, offset, start;
15938	int i, vlen;
15939
15940	for (offset = TG3_NVM_DIR_START;
15941	     offset < TG3_NVM_DIR_END;
15942	     offset += TG3_NVM_DIRENT_SIZE) {
15943		if (tg3_nvram_read(tp, offset, &val))
15944			return;
15945
15946		if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15947			break;
15948	}
15949
15950	if (offset == TG3_NVM_DIR_END)
15951		return;
15952
15953	if (!tg3_flag(tp, 5705_PLUS))
15954		start = 0x08000000;
15955	else if (tg3_nvram_read(tp, offset - 4, &start))
15956		return;
15957
15958	if (tg3_nvram_read(tp, offset + 4, &offset) ||
15959	    !tg3_fw_img_is_valid(tp, offset) ||
15960	    tg3_nvram_read(tp, offset + 8, &val))
15961		return;
15962
15963	offset += val - start;
15964
15965	vlen = strlen(tp->fw_ver);
15966
15967	tp->fw_ver[vlen++] = ',';
15968	tp->fw_ver[vlen++] = ' ';
15969
15970	for (i = 0; i < 4; i++) {
15971		__be32 v;
15972		if (tg3_nvram_read_be32(tp, offset, &v))
15973			return;
15974
15975		offset += sizeof(v);
15976
15977		if (vlen > TG3_VER_SIZE - sizeof(v)) {
15978			memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15979			break;
15980		}
15981
15982		memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15983		vlen += sizeof(v);
15984	}
15985}
15986
15987static void tg3_probe_ncsi(struct tg3 *tp)
15988{
15989	u32 apedata;
15990
15991	apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15992	if (apedata != APE_SEG_SIG_MAGIC)
15993		return;
15994
15995	apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15996	if (!(apedata & APE_FW_STATUS_READY))
15997		return;
15998
15999	if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
16000		tg3_flag_set(tp, APE_HAS_NCSI);
16001}
16002
16003static void tg3_read_dash_ver(struct tg3 *tp)
16004{
16005	int vlen;
16006	u32 apedata;
16007	char *fwtype;
16008
16009	apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
16010
16011	if (tg3_flag(tp, APE_HAS_NCSI))
16012		fwtype = "NCSI";
16013	else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
16014		fwtype = "SMASH";
16015	else
16016		fwtype = "DASH";
16017
16018	vlen = strlen(tp->fw_ver);
16019
16020	snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
16021		 fwtype,
16022		 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
16023		 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
16024		 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
16025		 (apedata & APE_FW_VERSION_BLDMSK));
16026}
16027
16028static void tg3_read_otp_ver(struct tg3 *tp)
16029{
16030	u32 val, val2;
16031
16032	if (tg3_asic_rev(tp) != ASIC_REV_5762)
16033		return;
16034
16035	if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
16036	    !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
16037	    TG3_OTP_MAGIC0_VALID(val)) {
16038		u64 val64 = (u64) val << 32 | val2;
16039		u32 ver = 0;
16040		int i, vlen;
16041
16042		for (i = 0; i < 7; i++) {
16043			if ((val64 & 0xff) == 0)
16044				break;
16045			ver = val64 & 0xff;
16046			val64 >>= 8;
16047		}
16048		vlen = strlen(tp->fw_ver);
16049		snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
16050	}
16051}
16052
16053static void tg3_read_fw_ver(struct tg3 *tp)
16054{
16055	u32 val;
16056	bool vpd_vers = false;
16057
16058	if (tp->fw_ver[0] != 0)
16059		vpd_vers = true;
16060
16061	if (tg3_flag(tp, NO_NVRAM)) {
16062		strcat(tp->fw_ver, "sb");
16063		tg3_read_otp_ver(tp);
16064		return;
16065	}
16066
16067	if (tg3_nvram_read(tp, 0, &val))
16068		return;
16069
16070	if (val == TG3_EEPROM_MAGIC)
16071		tg3_read_bc_ver(tp);
16072	else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
16073		tg3_read_sb_ver(tp, val);
16074	else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
16075		tg3_read_hwsb_ver(tp);
16076
16077	if (tg3_flag(tp, ENABLE_ASF)) {
16078		if (tg3_flag(tp, ENABLE_APE)) {
16079			tg3_probe_ncsi(tp);
16080			if (!vpd_vers)
16081				tg3_read_dash_ver(tp);
16082		} else if (!vpd_vers) {
16083			tg3_read_mgmtfw_ver(tp);
16084		}
16085	}
16086
16087	tp->fw_ver[TG3_VER_SIZE - 1] = 0;
16088}
16089
16090static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
16091{
16092	if (tg3_flag(tp, LRG_PROD_RING_CAP))
16093		return TG3_RX_RET_MAX_SIZE_5717;
16094	else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
16095		return TG3_RX_RET_MAX_SIZE_5700;
16096	else
16097		return TG3_RX_RET_MAX_SIZE_5705;
16098}
16099
16100static const struct pci_device_id tg3_write_reorder_chipsets[] = {
16101	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
16102	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
16103	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
16104	{ },
16105};
16106
16107static struct pci_dev *tg3_find_peer(struct tg3 *tp)
16108{
16109	struct pci_dev *peer;
16110	unsigned int func, devnr = tp->pdev->devfn & ~7;
16111
16112	for (func = 0; func < 8; func++) {
16113		peer = pci_get_slot(tp->pdev->bus, devnr | func);
16114		if (peer && peer != tp->pdev)
16115			break;
16116		pci_dev_put(peer);
16117	}
16118	/* 5704 can be configured in single-port mode, set peer to
16119	 * tp->pdev in that case.
16120	 */
16121	if (!peer) {
16122		peer = tp->pdev;
16123		return peer;
16124	}
16125
16126	/*
16127	 * We don't need to keep the refcount elevated; there's no way
16128	 * to remove one half of this device without removing the other
16129	 */
16130	pci_dev_put(peer);
16131
16132	return peer;
16133}
16134
16135static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16136{
16137	tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16138	if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16139		u32 reg;
16140
16141		/* All devices that use the alternate
16142		 * ASIC REV location have a CPMU.
16143		 */
16144		tg3_flag_set(tp, CPMU_PRESENT);
16145
16146		if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16147		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16148		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16149		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16150		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16151		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16152		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16153		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16154		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16155		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16156		    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16157			reg = TG3PCI_GEN2_PRODID_ASICREV;
16158		else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16159			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16160			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16161			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16162			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16163			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16164			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16165			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16166			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16167			 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16168			reg = TG3PCI_GEN15_PRODID_ASICREV;
16169		else
16170			reg = TG3PCI_PRODID_ASICREV;
16171
16172		pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16173	}
16174
16175	/* Wrong chip ID in 5752 A0. This code can be removed later
16176	 * as A0 is not in production.
16177	 */
16178	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16179		tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16180
16181	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16182		tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16183
16184	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16185	    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16186	    tg3_asic_rev(tp) == ASIC_REV_5720)
16187		tg3_flag_set(tp, 5717_PLUS);
16188
16189	if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16190	    tg3_asic_rev(tp) == ASIC_REV_57766)
16191		tg3_flag_set(tp, 57765_CLASS);
16192
16193	if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16194	     tg3_asic_rev(tp) == ASIC_REV_5762)
16195		tg3_flag_set(tp, 57765_PLUS);
16196
16197	/* Intentionally exclude ASIC_REV_5906 */
16198	if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16199	    tg3_asic_rev(tp) == ASIC_REV_5787 ||
16200	    tg3_asic_rev(tp) == ASIC_REV_5784 ||
16201	    tg3_asic_rev(tp) == ASIC_REV_5761 ||
16202	    tg3_asic_rev(tp) == ASIC_REV_5785 ||
16203	    tg3_asic_rev(tp) == ASIC_REV_57780 ||
16204	    tg3_flag(tp, 57765_PLUS))
16205		tg3_flag_set(tp, 5755_PLUS);
16206
16207	if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16208	    tg3_asic_rev(tp) == ASIC_REV_5714)
16209		tg3_flag_set(tp, 5780_CLASS);
16210
16211	if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16212	    tg3_asic_rev(tp) == ASIC_REV_5752 ||
16213	    tg3_asic_rev(tp) == ASIC_REV_5906 ||
16214	    tg3_flag(tp, 5755_PLUS) ||
16215	    tg3_flag(tp, 5780_CLASS))
16216		tg3_flag_set(tp, 5750_PLUS);
16217
16218	if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16219	    tg3_flag(tp, 5750_PLUS))
16220		tg3_flag_set(tp, 5705_PLUS);
16221}
16222
16223static bool tg3_10_100_only_device(struct tg3 *tp,
16224				   const struct pci_device_id *ent)
16225{
16226	u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16227
16228	if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16229	     (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16230	    (tp->phy_flags & TG3_PHYFLG_IS_FET))
16231		return true;
16232
16233	if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16234		if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16235			if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16236				return true;
16237		} else {
16238			return true;
16239		}
16240	}
16241
16242	return false;
16243}
16244
16245static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16246{
16247	u32 misc_ctrl_reg;
16248	u32 pci_state_reg, grc_misc_cfg;
16249	u32 val;
16250	u16 pci_cmd;
16251	int err;
16252
16253	/* Force memory write invalidate off.  If we leave it on,
16254	 * then on 5700_BX chips we have to enable a workaround.
16255	 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16256	 * to match the cacheline size.  The Broadcom driver have this
16257	 * workaround but turns MWI off all the times so never uses
16258	 * it.  This seems to suggest that the workaround is insufficient.
16259	 */
16260	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16261	pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16262	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16263
16264	/* Important! -- Make sure register accesses are byteswapped
16265	 * correctly.  Also, for those chips that require it, make
16266	 * sure that indirect register accesses are enabled before
16267	 * the first operation.
16268	 */
16269	pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16270			      &misc_ctrl_reg);
16271	tp->misc_host_ctrl |= (misc_ctrl_reg &
16272			       MISC_HOST_CTRL_CHIPREV);
16273	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16274			       tp->misc_host_ctrl);
16275
16276	tg3_detect_asic_rev(tp, misc_ctrl_reg);
16277
16278	/* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16279	 * we need to disable memory and use config. cycles
16280	 * only to access all registers. The 5702/03 chips
16281	 * can mistakenly decode the special cycles from the
16282	 * ICH chipsets as memory write cycles, causing corruption
16283	 * of register and memory space. Only certain ICH bridges
16284	 * will drive special cycles with non-zero data during the
16285	 * address phase which can fall within the 5703's address
16286	 * range. This is not an ICH bug as the PCI spec allows
16287	 * non-zero address during special cycles. However, only
16288	 * these ICH bridges are known to drive non-zero addresses
16289	 * during special cycles.
16290	 *
16291	 * Since special cycles do not cross PCI bridges, we only
16292	 * enable this workaround if the 5703 is on the secondary
16293	 * bus of these ICH bridges.
16294	 */
16295	if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16296	    (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16297		static struct tg3_dev_id {
16298			u32	vendor;
16299			u32	device;
16300			u32	rev;
16301		} ich_chipsets[] = {
16302			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16303			  PCI_ANY_ID },
16304			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16305			  PCI_ANY_ID },
16306			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16307			  0xa },
16308			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16309			  PCI_ANY_ID },
16310			{ },
16311		};
16312		struct tg3_dev_id *pci_id = &ich_chipsets[0];
16313		struct pci_dev *bridge = NULL;
16314
16315		while (pci_id->vendor != 0) {
16316			bridge = pci_get_device(pci_id->vendor, pci_id->device,
16317						bridge);
16318			if (!bridge) {
16319				pci_id++;
16320				continue;
16321			}
16322			if (pci_id->rev != PCI_ANY_ID) {
16323				if (bridge->revision > pci_id->rev)
16324					continue;
16325			}
16326			if (bridge->subordinate &&
16327			    (bridge->subordinate->number ==
16328			     tp->pdev->bus->number)) {
16329				tg3_flag_set(tp, ICH_WORKAROUND);
16330				pci_dev_put(bridge);
16331				break;
16332			}
16333		}
16334	}
16335
16336	if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16337		static struct tg3_dev_id {
16338			u32	vendor;
16339			u32	device;
16340		} bridge_chipsets[] = {
16341			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16342			{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16343			{ },
16344		};
16345		struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16346		struct pci_dev *bridge = NULL;
16347
16348		while (pci_id->vendor != 0) {
16349			bridge = pci_get_device(pci_id->vendor,
16350						pci_id->device,
16351						bridge);
16352			if (!bridge) {
16353				pci_id++;
16354				continue;
16355			}
16356			if (bridge->subordinate &&
16357			    (bridge->subordinate->number <=
16358			     tp->pdev->bus->number) &&
16359			    (bridge->subordinate->busn_res.end >=
16360			     tp->pdev->bus->number)) {
16361				tg3_flag_set(tp, 5701_DMA_BUG);
16362				pci_dev_put(bridge);
16363				break;
16364			}
16365		}
16366	}
16367
16368	/* The EPB bridge inside 5714, 5715, and 5780 cannot support
16369	 * DMA addresses > 40-bit. This bridge may have other additional
16370	 * 57xx devices behind it in some 4-port NIC designs for example.
16371	 * Any tg3 device found behind the bridge will also need the 40-bit
16372	 * DMA workaround.
16373	 */
16374	if (tg3_flag(tp, 5780_CLASS)) {
16375		tg3_flag_set(tp, 40BIT_DMA_BUG);
16376		tp->msi_cap = tp->pdev->msi_cap;
16377	} else {
16378		struct pci_dev *bridge = NULL;
16379
16380		do {
16381			bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16382						PCI_DEVICE_ID_SERVERWORKS_EPB,
16383						bridge);
16384			if (bridge && bridge->subordinate &&
16385			    (bridge->subordinate->number <=
16386			     tp->pdev->bus->number) &&
16387			    (bridge->subordinate->busn_res.end >=
16388			     tp->pdev->bus->number)) {
16389				tg3_flag_set(tp, 40BIT_DMA_BUG);
16390				pci_dev_put(bridge);
16391				break;
16392			}
16393		} while (bridge);
16394	}
16395
16396	if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16397	    tg3_asic_rev(tp) == ASIC_REV_5714)
16398		tp->pdev_peer = tg3_find_peer(tp);
16399
16400	/* Determine TSO capabilities */
16401	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16402		; /* Do nothing. HW bug. */
16403	else if (tg3_flag(tp, 57765_PLUS))
16404		tg3_flag_set(tp, HW_TSO_3);
16405	else if (tg3_flag(tp, 5755_PLUS) ||
16406		 tg3_asic_rev(tp) == ASIC_REV_5906)
16407		tg3_flag_set(tp, HW_TSO_2);
16408	else if (tg3_flag(tp, 5750_PLUS)) {
16409		tg3_flag_set(tp, HW_TSO_1);
16410		tg3_flag_set(tp, TSO_BUG);
16411		if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16412		    tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16413			tg3_flag_clear(tp, TSO_BUG);
16414	} else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16415		   tg3_asic_rev(tp) != ASIC_REV_5701 &&
16416		   tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16417		tg3_flag_set(tp, FW_TSO);
16418		tg3_flag_set(tp, TSO_BUG);
16419		if (tg3_asic_rev(tp) == ASIC_REV_5705)
16420			tp->fw_needed = FIRMWARE_TG3TSO5;
16421		else
16422			tp->fw_needed = FIRMWARE_TG3TSO;
16423	}
16424
16425	/* Selectively allow TSO based on operating conditions */
16426	if (tg3_flag(tp, HW_TSO_1) ||
16427	    tg3_flag(tp, HW_TSO_2) ||
16428	    tg3_flag(tp, HW_TSO_3) ||
16429	    tg3_flag(tp, FW_TSO)) {
16430		/* For firmware TSO, assume ASF is disabled.
16431		 * We'll disable TSO later if we discover ASF
16432		 * is enabled in tg3_get_eeprom_hw_cfg().
16433		 */
16434		tg3_flag_set(tp, TSO_CAPABLE);
16435	} else {
16436		tg3_flag_clear(tp, TSO_CAPABLE);
16437		tg3_flag_clear(tp, TSO_BUG);
16438		tp->fw_needed = NULL;
16439	}
16440
16441	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16442		tp->fw_needed = FIRMWARE_TG3;
16443
16444	if (tg3_asic_rev(tp) == ASIC_REV_57766)
16445		tp->fw_needed = FIRMWARE_TG357766;
16446
16447	tp->irq_max = 1;
16448
16449	if (tg3_flag(tp, 5750_PLUS)) {
16450		tg3_flag_set(tp, SUPPORT_MSI);
16451		if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16452		    tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16453		    (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16454		     tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16455		     tp->pdev_peer == tp->pdev))
16456			tg3_flag_clear(tp, SUPPORT_MSI);
16457
16458		if (tg3_flag(tp, 5755_PLUS) ||
16459		    tg3_asic_rev(tp) == ASIC_REV_5906) {
16460			tg3_flag_set(tp, 1SHOT_MSI);
16461		}
16462
16463		if (tg3_flag(tp, 57765_PLUS)) {
16464			tg3_flag_set(tp, SUPPORT_MSIX);
16465			tp->irq_max = TG3_IRQ_MAX_VECS;
16466		}
16467	}
16468
16469	tp->txq_max = 1;
16470	tp->rxq_max = 1;
16471	if (tp->irq_max > 1) {
16472		tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16473		tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16474
16475		if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16476		    tg3_asic_rev(tp) == ASIC_REV_5720)
16477			tp->txq_max = tp->irq_max - 1;
16478	}
16479
16480	if (tg3_flag(tp, 5755_PLUS) ||
16481	    tg3_asic_rev(tp) == ASIC_REV_5906)
16482		tg3_flag_set(tp, SHORT_DMA_BUG);
16483
16484	if (tg3_asic_rev(tp) == ASIC_REV_5719)
16485		tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16486
16487	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16488	    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16489	    tg3_asic_rev(tp) == ASIC_REV_5720 ||
16490	    tg3_asic_rev(tp) == ASIC_REV_5762)
16491		tg3_flag_set(tp, LRG_PROD_RING_CAP);
16492
16493	if (tg3_flag(tp, 57765_PLUS) &&
16494	    tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16495		tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16496
16497	if (!tg3_flag(tp, 5705_PLUS) ||
16498	    tg3_flag(tp, 5780_CLASS) ||
16499	    tg3_flag(tp, USE_JUMBO_BDFLAG))
16500		tg3_flag_set(tp, JUMBO_CAPABLE);
16501
16502	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16503			      &pci_state_reg);
16504
16505	if (pci_is_pcie(tp->pdev)) {
16506		u16 lnkctl;
16507
16508		tg3_flag_set(tp, PCI_EXPRESS);
16509
16510		pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16511		if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16512			if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16513				tg3_flag_clear(tp, HW_TSO_2);
16514				tg3_flag_clear(tp, TSO_CAPABLE);
16515			}
16516			if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16517			    tg3_asic_rev(tp) == ASIC_REV_5761 ||
16518			    tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16519			    tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16520				tg3_flag_set(tp, CLKREQ_BUG);
16521		} else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16522			tg3_flag_set(tp, L1PLLPD_EN);
16523		}
16524	} else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16525		/* BCM5785 devices are effectively PCIe devices, and should
16526		 * follow PCIe codepaths, but do not have a PCIe capabilities
16527		 * section.
16528		 */
16529		tg3_flag_set(tp, PCI_EXPRESS);
16530	} else if (!tg3_flag(tp, 5705_PLUS) ||
16531		   tg3_flag(tp, 5780_CLASS)) {
16532		tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16533		if (!tp->pcix_cap) {
16534			dev_err(&tp->pdev->dev,
16535				"Cannot find PCI-X capability, aborting\n");
16536			return -EIO;
16537		}
16538
16539		if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16540			tg3_flag_set(tp, PCIX_MODE);
16541	}
16542
16543	/* If we have an AMD 762 or VIA K8T800 chipset, write
16544	 * reordering to the mailbox registers done by the host
16545	 * controller can cause major troubles.  We read back from
16546	 * every mailbox register write to force the writes to be
16547	 * posted to the chip in order.
16548	 */
16549	if (pci_dev_present(tg3_write_reorder_chipsets) &&
16550	    !tg3_flag(tp, PCI_EXPRESS))
16551		tg3_flag_set(tp, MBOX_WRITE_REORDER);
16552
16553	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16554			     &tp->pci_cacheline_sz);
16555	pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16556			     &tp->pci_lat_timer);
16557	if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16558	    tp->pci_lat_timer < 64) {
16559		tp->pci_lat_timer = 64;
16560		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16561				      tp->pci_lat_timer);
16562	}
16563
16564	/* Important! -- It is critical that the PCI-X hw workaround
16565	 * situation is decided before the first MMIO register access.
16566	 */
16567	if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16568		/* 5700 BX chips need to have their TX producer index
16569		 * mailboxes written twice to workaround a bug.
16570		 */
16571		tg3_flag_set(tp, TXD_MBOX_HWBUG);
16572
16573		/* If we are in PCI-X mode, enable register write workaround.
16574		 *
16575		 * The workaround is to use indirect register accesses
16576		 * for all chip writes not to mailbox registers.
16577		 */
16578		if (tg3_flag(tp, PCIX_MODE)) {
16579			u32 pm_reg;
16580
16581			tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16582
16583			/* The chip can have it's power management PCI config
16584			 * space registers clobbered due to this bug.
16585			 * So explicitly force the chip into D0 here.
16586			 */
16587			pci_read_config_dword(tp->pdev,
16588					      tp->pdev->pm_cap + PCI_PM_CTRL,
16589					      &pm_reg);
16590			pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16591			pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16592			pci_write_config_dword(tp->pdev,
16593					       tp->pdev->pm_cap + PCI_PM_CTRL,
16594					       pm_reg);
16595
16596			/* Also, force SERR#/PERR# in PCI command. */
16597			pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16598			pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16599			pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16600		}
16601	}
16602
16603	if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16604		tg3_flag_set(tp, PCI_HIGH_SPEED);
16605	if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16606		tg3_flag_set(tp, PCI_32BIT);
16607
16608	/* Chip-specific fixup from Broadcom driver */
16609	if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16610	    (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16611		pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16612		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16613	}
16614
16615	/* Default fast path register access methods */
16616	tp->read32 = tg3_read32;
16617	tp->write32 = tg3_write32;
16618	tp->read32_mbox = tg3_read32;
16619	tp->write32_mbox = tg3_write32;
16620	tp->write32_tx_mbox = tg3_write32;
16621	tp->write32_rx_mbox = tg3_write32;
16622
16623	/* Various workaround register access methods */
16624	if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16625		tp->write32 = tg3_write_indirect_reg32;
16626	else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16627		 (tg3_flag(tp, PCI_EXPRESS) &&
16628		  tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16629		/*
16630		 * Back to back register writes can cause problems on these
16631		 * chips, the workaround is to read back all reg writes
16632		 * except those to mailbox regs.
16633		 *
16634		 * See tg3_write_indirect_reg32().
16635		 */
16636		tp->write32 = tg3_write_flush_reg32;
16637	}
16638
16639	if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16640		tp->write32_tx_mbox = tg3_write32_tx_mbox;
16641		if (tg3_flag(tp, MBOX_WRITE_REORDER))
16642			tp->write32_rx_mbox = tg3_write_flush_reg32;
16643	}
16644
16645	if (tg3_flag(tp, ICH_WORKAROUND)) {
16646		tp->read32 = tg3_read_indirect_reg32;
16647		tp->write32 = tg3_write_indirect_reg32;
16648		tp->read32_mbox = tg3_read_indirect_mbox;
16649		tp->write32_mbox = tg3_write_indirect_mbox;
16650		tp->write32_tx_mbox = tg3_write_indirect_mbox;
16651		tp->write32_rx_mbox = tg3_write_indirect_mbox;
16652
16653		iounmap(tp->regs);
16654		tp->regs = NULL;
16655
16656		pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16657		pci_cmd &= ~PCI_COMMAND_MEMORY;
16658		pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16659	}
16660	if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16661		tp->read32_mbox = tg3_read32_mbox_5906;
16662		tp->write32_mbox = tg3_write32_mbox_5906;
16663		tp->write32_tx_mbox = tg3_write32_mbox_5906;
16664		tp->write32_rx_mbox = tg3_write32_mbox_5906;
16665	}
16666
16667	if (tp->write32 == tg3_write_indirect_reg32 ||
16668	    (tg3_flag(tp, PCIX_MODE) &&
16669	     (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16670	      tg3_asic_rev(tp) == ASIC_REV_5701)))
16671		tg3_flag_set(tp, SRAM_USE_CONFIG);
16672
16673	/* The memory arbiter has to be enabled in order for SRAM accesses
16674	 * to succeed.  Normally on powerup the tg3 chip firmware will make
16675	 * sure it is enabled, but other entities such as system netboot
16676	 * code might disable it.
16677	 */
16678	val = tr32(MEMARB_MODE);
16679	tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16680
16681	tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16682	if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16683	    tg3_flag(tp, 5780_CLASS)) {
16684		if (tg3_flag(tp, PCIX_MODE)) {
16685			pci_read_config_dword(tp->pdev,
16686					      tp->pcix_cap + PCI_X_STATUS,
16687					      &val);
16688			tp->pci_fn = val & 0x7;
16689		}
16690	} else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16691		   tg3_asic_rev(tp) == ASIC_REV_5719 ||
16692		   tg3_asic_rev(tp) == ASIC_REV_5720) {
16693		tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16694		if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16695			val = tr32(TG3_CPMU_STATUS);
16696
16697		if (tg3_asic_rev(tp) == ASIC_REV_5717)
16698			tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16699		else
16700			tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16701				     TG3_CPMU_STATUS_FSHFT_5719;
16702	}
16703
16704	if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16705		tp->write32_tx_mbox = tg3_write_flush_reg32;
16706		tp->write32_rx_mbox = tg3_write_flush_reg32;
16707	}
16708
16709	/* Get eeprom hw config before calling tg3_set_power_state().
16710	 * In particular, the TG3_FLAG_IS_NIC flag must be
16711	 * determined before calling tg3_set_power_state() so that
16712	 * we know whether or not to switch out of Vaux power.
16713	 * When the flag is set, it means that GPIO1 is used for eeprom
16714	 * write protect and also implies that it is a LOM where GPIOs
16715	 * are not used to switch power.
16716	 */
16717	tg3_get_eeprom_hw_cfg(tp);
16718
16719	if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16720		tg3_flag_clear(tp, TSO_CAPABLE);
16721		tg3_flag_clear(tp, TSO_BUG);
16722		tp->fw_needed = NULL;
16723	}
16724
16725	if (tg3_flag(tp, ENABLE_APE)) {
16726		/* Allow reads and writes to the
16727		 * APE register and memory space.
16728		 */
16729		pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16730				 PCISTATE_ALLOW_APE_SHMEM_WR |
16731				 PCISTATE_ALLOW_APE_PSPACE_WR;
16732		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16733				       pci_state_reg);
16734
16735		tg3_ape_lock_init(tp);
16736		tp->ape_hb_interval =
16737			msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC);
16738	}
16739
16740	/* Set up tp->grc_local_ctrl before calling
16741	 * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16742	 * will bring 5700's external PHY out of reset.
16743	 * It is also used as eeprom write protect on LOMs.
16744	 */
16745	tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16746	if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16747	    tg3_flag(tp, EEPROM_WRITE_PROT))
16748		tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16749				       GRC_LCLCTRL_GPIO_OUTPUT1);
16750	/* Unused GPIO3 must be driven as output on 5752 because there
16751	 * are no pull-up resistors on unused GPIO pins.
16752	 */
16753	else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16754		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16755
16756	if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16757	    tg3_asic_rev(tp) == ASIC_REV_57780 ||
16758	    tg3_flag(tp, 57765_CLASS))
16759		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16760
16761	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16762	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16763		/* Turn off the debug UART. */
16764		tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16765		if (tg3_flag(tp, IS_NIC))
16766			/* Keep VMain power. */
16767			tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16768					      GRC_LCLCTRL_GPIO_OUTPUT0;
16769	}
16770
16771	if (tg3_asic_rev(tp) == ASIC_REV_5762)
16772		tp->grc_local_ctrl |=
16773			tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16774
16775	/* Switch out of Vaux if it is a NIC */
16776	tg3_pwrsrc_switch_to_vmain(tp);
16777
16778	/* Derive initial jumbo mode from MTU assigned in
16779	 * ether_setup() via the alloc_etherdev() call
16780	 */
16781	if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16782		tg3_flag_set(tp, JUMBO_RING_ENABLE);
16783
16784	/* Determine WakeOnLan speed to use. */
16785	if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16786	    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16787	    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16788	    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16789		tg3_flag_clear(tp, WOL_SPEED_100MB);
16790	} else {
16791		tg3_flag_set(tp, WOL_SPEED_100MB);
16792	}
16793
16794	if (tg3_asic_rev(tp) == ASIC_REV_5906)
16795		tp->phy_flags |= TG3_PHYFLG_IS_FET;
16796
16797	/* A few boards don't want Ethernet@WireSpeed phy feature */
16798	if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16799	    (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16800	     (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16801	     (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16802	    (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16803	    (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16804		tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16805
16806	if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16807	    tg3_chip_rev(tp) == CHIPREV_5704_AX)
16808		tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16809	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16810		tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16811
16812	if (tg3_flag(tp, 5705_PLUS) &&
16813	    !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16814	    tg3_asic_rev(tp) != ASIC_REV_5785 &&
16815	    tg3_asic_rev(tp) != ASIC_REV_57780 &&
16816	    !tg3_flag(tp, 57765_PLUS)) {
16817		if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16818		    tg3_asic_rev(tp) == ASIC_REV_5787 ||
16819		    tg3_asic_rev(tp) == ASIC_REV_5784 ||
16820		    tg3_asic_rev(tp) == ASIC_REV_5761) {
16821			if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16822			    tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16823				tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16824			if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16825				tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16826		} else
16827			tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16828	}
16829
16830	if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16831	    tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16832		tp->phy_otp = tg3_read_otp_phycfg(tp);
16833		if (tp->phy_otp == 0)
16834			tp->phy_otp = TG3_OTP_DEFAULT;
16835	}
16836
16837	if (tg3_flag(tp, CPMU_PRESENT))
16838		tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16839	else
16840		tp->mi_mode = MAC_MI_MODE_BASE;
16841
16842	tp->coalesce_mode = 0;
16843	if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16844	    tg3_chip_rev(tp) != CHIPREV_5700_BX)
16845		tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16846
16847	/* Set these bits to enable statistics workaround. */
16848	if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16849	    tg3_asic_rev(tp) == ASIC_REV_5762 ||
16850	    tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16851	    tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16852		tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16853		tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16854	}
16855
16856	if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16857	    tg3_asic_rev(tp) == ASIC_REV_57780)
16858		tg3_flag_set(tp, USE_PHYLIB);
16859
16860	err = tg3_mdio_init(tp);
16861	if (err)
16862		return err;
16863
16864	/* Initialize data/descriptor byte/word swapping. */
16865	val = tr32(GRC_MODE);
16866	if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16867	    tg3_asic_rev(tp) == ASIC_REV_5762)
16868		val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16869			GRC_MODE_WORD_SWAP_B2HRX_DATA |
16870			GRC_MODE_B2HRX_ENABLE |
16871			GRC_MODE_HTX2B_ENABLE |
16872			GRC_MODE_HOST_STACKUP);
16873	else
16874		val &= GRC_MODE_HOST_STACKUP;
16875
16876	tw32(GRC_MODE, val | tp->grc_mode);
16877
16878	tg3_switch_clocks(tp);
16879
16880	/* Clear this out for sanity. */
16881	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16882
16883	/* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16884	tw32(TG3PCI_REG_BASE_ADDR, 0);
16885
16886	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16887			      &pci_state_reg);
16888	if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16889	    !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16890		if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16891		    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16892		    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16893		    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16894			void __iomem *sram_base;
16895
16896			/* Write some dummy words into the SRAM status block
16897			 * area, see if it reads back correctly.  If the return
16898			 * value is bad, force enable the PCIX workaround.
16899			 */
16900			sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16901
16902			writel(0x00000000, sram_base);
16903			writel(0x00000000, sram_base + 4);
16904			writel(0xffffffff, sram_base + 4);
16905			if (readl(sram_base) != 0x00000000)
16906				tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16907		}
16908	}
16909
16910	udelay(50);
16911	tg3_nvram_init(tp);
16912
16913	/* If the device has an NVRAM, no need to load patch firmware */
16914	if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16915	    !tg3_flag(tp, NO_NVRAM))
16916		tp->fw_needed = NULL;
16917
16918	grc_misc_cfg = tr32(GRC_MISC_CFG);
16919	grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16920
16921	if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16922	    (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16923	     grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16924		tg3_flag_set(tp, IS_5788);
16925
16926	if (!tg3_flag(tp, IS_5788) &&
16927	    tg3_asic_rev(tp) != ASIC_REV_5700)
16928		tg3_flag_set(tp, TAGGED_STATUS);
16929	if (tg3_flag(tp, TAGGED_STATUS)) {
16930		tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16931				      HOSTCC_MODE_CLRTICK_TXBD);
16932
16933		tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16934		pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16935				       tp->misc_host_ctrl);
16936	}
16937
16938	/* Preserve the APE MAC_MODE bits */
16939	if (tg3_flag(tp, ENABLE_APE))
16940		tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16941	else
16942		tp->mac_mode = 0;
16943
16944	if (tg3_10_100_only_device(tp, ent))
16945		tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16946
16947	err = tg3_phy_probe(tp);
16948	if (err) {
16949		dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16950		/* ... but do not return immediately ... */
16951		tg3_mdio_fini(tp);
16952	}
16953
16954	tg3_read_vpd(tp);
16955	tg3_read_fw_ver(tp);
16956
16957	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16958		tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16959	} else {
16960		if (tg3_asic_rev(tp) == ASIC_REV_5700)
16961			tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16962		else
16963			tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16964	}
16965
16966	/* 5700 {AX,BX} chips have a broken status block link
16967	 * change bit implementation, so we must use the
16968	 * status register in those cases.
16969	 */
16970	if (tg3_asic_rev(tp) == ASIC_REV_5700)
16971		tg3_flag_set(tp, USE_LINKCHG_REG);
16972	else
16973		tg3_flag_clear(tp, USE_LINKCHG_REG);
16974
16975	/* The led_ctrl is set during tg3_phy_probe, here we might
16976	 * have to force the link status polling mechanism based
16977	 * upon subsystem IDs.
16978	 */
16979	if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16980	    tg3_asic_rev(tp) == ASIC_REV_5701 &&
16981	    !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16982		tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16983		tg3_flag_set(tp, USE_LINKCHG_REG);
16984	}
16985
16986	/* For all SERDES we poll the MAC status register. */
16987	if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16988		tg3_flag_set(tp, POLL_SERDES);
16989	else
16990		tg3_flag_clear(tp, POLL_SERDES);
16991
16992	if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16993		tg3_flag_set(tp, POLL_CPMU_LINK);
16994
16995	tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16996	tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16997	if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16998	    tg3_flag(tp, PCIX_MODE)) {
16999		tp->rx_offset = NET_SKB_PAD;
17000#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
17001		tp->rx_copy_thresh = ~(u16)0;
17002#endif
17003	}
17004
17005	tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
17006	tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
17007	tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
17008
17009	tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
17010
17011	/* Increment the rx prod index on the rx std ring by at most
17012	 * 8 for these chips to workaround hw errata.
17013	 */
17014	if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
17015	    tg3_asic_rev(tp) == ASIC_REV_5752 ||
17016	    tg3_asic_rev(tp) == ASIC_REV_5755)
17017		tp->rx_std_max_post = 8;
17018
17019	if (tg3_flag(tp, ASPM_WORKAROUND))
17020		tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
17021				     PCIE_PWR_MGMT_L1_THRESH_MSK;
17022
17023	return err;
17024}
17025
17026static int tg3_get_device_address(struct tg3 *tp)
17027{
17028	struct net_device *dev = tp->dev;
17029	u32 hi, lo, mac_offset;
17030	int addr_ok = 0;
17031	int err;
17032
17033	if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr))
17034		return 0;
17035
17036	if (tg3_flag(tp, IS_SSB_CORE)) {
17037		err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
17038		if (!err && is_valid_ether_addr(&dev->dev_addr[0]))
17039			return 0;
17040	}
17041
17042	mac_offset = 0x7c;
17043	if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
17044	    tg3_flag(tp, 5780_CLASS)) {
17045		if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
17046			mac_offset = 0xcc;
17047		if (tg3_nvram_lock(tp))
17048			tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
17049		else
17050			tg3_nvram_unlock(tp);
17051	} else if (tg3_flag(tp, 5717_PLUS)) {
17052		if (tp->pci_fn & 1)
17053			mac_offset = 0xcc;
17054		if (tp->pci_fn > 1)
17055			mac_offset += 0x18c;
17056	} else if (tg3_asic_rev(tp) == ASIC_REV_5906)
17057		mac_offset = 0x10;
17058
17059	/* First try to get it from MAC address mailbox. */
17060	tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
17061	if ((hi >> 16) == 0x484b) {
17062		dev->dev_addr[0] = (hi >>  8) & 0xff;
17063		dev->dev_addr[1] = (hi >>  0) & 0xff;
17064
17065		tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
17066		dev->dev_addr[2] = (lo >> 24) & 0xff;
17067		dev->dev_addr[3] = (lo >> 16) & 0xff;
17068		dev->dev_addr[4] = (lo >>  8) & 0xff;
17069		dev->dev_addr[5] = (lo >>  0) & 0xff;
17070
17071		/* Some old bootcode may report a 0 MAC address in SRAM */
17072		addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
17073	}
17074	if (!addr_ok) {
17075		/* Next, try NVRAM. */
17076		if (!tg3_flag(tp, NO_NVRAM) &&
17077		    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
17078		    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
17079			memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
17080			memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
17081		}
17082		/* Finally just fetch it out of the MAC control regs. */
17083		else {
17084			hi = tr32(MAC_ADDR_0_HIGH);
17085			lo = tr32(MAC_ADDR_0_LOW);
17086
17087			dev->dev_addr[5] = lo & 0xff;
17088			dev->dev_addr[4] = (lo >> 8) & 0xff;
17089			dev->dev_addr[3] = (lo >> 16) & 0xff;
17090			dev->dev_addr[2] = (lo >> 24) & 0xff;
17091			dev->dev_addr[1] = hi & 0xff;
17092			dev->dev_addr[0] = (hi >> 8) & 0xff;
17093		}
17094	}
17095
17096	if (!is_valid_ether_addr(&dev->dev_addr[0]))
17097		return -EINVAL;
17098	return 0;
17099}
17100
17101#define BOUNDARY_SINGLE_CACHELINE	1
17102#define BOUNDARY_MULTI_CACHELINE	2
17103
17104static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
17105{
17106	int cacheline_size;
17107	u8 byte;
17108	int goal;
17109
17110	pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
17111	if (byte == 0)
17112		cacheline_size = 1024;
17113	else
17114		cacheline_size = (int) byte * 4;
17115
17116	/* On 5703 and later chips, the boundary bits have no
17117	 * effect.
17118	 */
17119	if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17120	    tg3_asic_rev(tp) != ASIC_REV_5701 &&
17121	    !tg3_flag(tp, PCI_EXPRESS))
17122		goto out;
17123
17124#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17125	goal = BOUNDARY_MULTI_CACHELINE;
17126#else
17127#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17128	goal = BOUNDARY_SINGLE_CACHELINE;
17129#else
17130	goal = 0;
17131#endif
17132#endif
17133
17134	if (tg3_flag(tp, 57765_PLUS)) {
17135		val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17136		goto out;
17137	}
17138
17139	if (!goal)
17140		goto out;
17141
17142	/* PCI controllers on most RISC systems tend to disconnect
17143	 * when a device tries to burst across a cache-line boundary.
17144	 * Therefore, letting tg3 do so just wastes PCI bandwidth.
17145	 *
17146	 * Unfortunately, for PCI-E there are only limited
17147	 * write-side controls for this, and thus for reads
17148	 * we will still get the disconnects.  We'll also waste
17149	 * these PCI cycles for both read and write for chips
17150	 * other than 5700 and 5701 which do not implement the
17151	 * boundary bits.
17152	 */
17153	if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17154		switch (cacheline_size) {
17155		case 16:
17156		case 32:
17157		case 64:
17158		case 128:
17159			if (goal == BOUNDARY_SINGLE_CACHELINE) {
17160				val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17161					DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17162			} else {
17163				val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17164					DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17165			}
17166			break;
17167
17168		case 256:
17169			val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17170				DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17171			break;
17172
17173		default:
17174			val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17175				DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17176			break;
17177		}
17178	} else if (tg3_flag(tp, PCI_EXPRESS)) {
17179		switch (cacheline_size) {
17180		case 16:
17181		case 32:
17182		case 64:
17183			if (goal == BOUNDARY_SINGLE_CACHELINE) {
17184				val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17185				val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17186				break;
17187			}
17188			fallthrough;
17189		case 128:
17190		default:
17191			val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17192			val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17193			break;
17194		}
17195	} else {
17196		switch (cacheline_size) {
17197		case 16:
17198			if (goal == BOUNDARY_SINGLE_CACHELINE) {
17199				val |= (DMA_RWCTRL_READ_BNDRY_16 |
17200					DMA_RWCTRL_WRITE_BNDRY_16);
17201				break;
17202			}
17203			fallthrough;
17204		case 32:
17205			if (goal == BOUNDARY_SINGLE_CACHELINE) {
17206				val |= (DMA_RWCTRL_READ_BNDRY_32 |
17207					DMA_RWCTRL_WRITE_BNDRY_32);
17208				break;
17209			}
17210			fallthrough;
17211		case 64:
17212			if (goal == BOUNDARY_SINGLE_CACHELINE) {
17213				val |= (DMA_RWCTRL_READ_BNDRY_64 |
17214					DMA_RWCTRL_WRITE_BNDRY_64);
17215				break;
17216			}
17217			fallthrough;
17218		case 128:
17219			if (goal == BOUNDARY_SINGLE_CACHELINE) {
17220				val |= (DMA_RWCTRL_READ_BNDRY_128 |
17221					DMA_RWCTRL_WRITE_BNDRY_128);
17222				break;
17223			}
17224			fallthrough;
17225		case 256:
17226			val |= (DMA_RWCTRL_READ_BNDRY_256 |
17227				DMA_RWCTRL_WRITE_BNDRY_256);
17228			break;
17229		case 512:
17230			val |= (DMA_RWCTRL_READ_BNDRY_512 |
17231				DMA_RWCTRL_WRITE_BNDRY_512);
17232			break;
17233		case 1024:
17234		default:
17235			val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17236				DMA_RWCTRL_WRITE_BNDRY_1024);
17237			break;
17238		}
17239	}
17240
17241out:
17242	return val;
17243}
17244
17245static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17246			   int size, bool to_device)
17247{
17248	struct tg3_internal_buffer_desc test_desc;
17249	u32 sram_dma_descs;
17250	int i, ret;
17251
17252	sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17253
17254	tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17255	tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17256	tw32(RDMAC_STATUS, 0);
17257	tw32(WDMAC_STATUS, 0);
17258
17259	tw32(BUFMGR_MODE, 0);
17260	tw32(FTQ_RESET, 0);
17261
17262	test_desc.addr_hi = ((u64) buf_dma) >> 32;
17263	test_desc.addr_lo = buf_dma & 0xffffffff;
17264	test_desc.nic_mbuf = 0x00002100;
17265	test_desc.len = size;
17266
17267	/*
17268	 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17269	 * the *second* time the tg3 driver was getting loaded after an
17270	 * initial scan.
17271	 *
17272	 * Broadcom tells me:
17273	 *   ...the DMA engine is connected to the GRC block and a DMA
17274	 *   reset may affect the GRC block in some unpredictable way...
17275	 *   The behavior of resets to individual blocks has not been tested.
17276	 *
17277	 * Broadcom noted the GRC reset will also reset all sub-components.
17278	 */
17279	if (to_device) {
17280		test_desc.cqid_sqid = (13 << 8) | 2;
17281
17282		tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17283		udelay(40);
17284	} else {
17285		test_desc.cqid_sqid = (16 << 8) | 7;
17286
17287		tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17288		udelay(40);
17289	}
17290	test_desc.flags = 0x00000005;
17291
17292	for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17293		u32 val;
17294
17295		val = *(((u32 *)&test_desc) + i);
17296		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17297				       sram_dma_descs + (i * sizeof(u32)));
17298		pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17299	}
17300	pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17301
17302	if (to_device)
17303		tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17304	else
17305		tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17306
17307	ret = -ENODEV;
17308	for (i = 0; i < 40; i++) {
17309		u32 val;
17310
17311		if (to_device)
17312			val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17313		else
17314			val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17315		if ((val & 0xffff) == sram_dma_descs) {
17316			ret = 0;
17317			break;
17318		}
17319
17320		udelay(100);
17321	}
17322
17323	return ret;
17324}
17325
17326#define TEST_BUFFER_SIZE	0x2000
17327
17328static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17329	{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17330	{ },
17331};
17332
17333static int tg3_test_dma(struct tg3 *tp)
17334{
17335	dma_addr_t buf_dma;
17336	u32 *buf, saved_dma_rwctrl;
17337	int ret = 0;
17338
17339	buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17340				 &buf_dma, GFP_KERNEL);
17341	if (!buf) {
17342		ret = -ENOMEM;
17343		goto out_nofree;
17344	}
17345
17346	tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17347			  (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17348
17349	tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17350
17351	if (tg3_flag(tp, 57765_PLUS))
17352		goto out;
17353
17354	if (tg3_flag(tp, PCI_EXPRESS)) {
17355		/* DMA read watermark not used on PCIE */
17356		tp->dma_rwctrl |= 0x00180000;
17357	} else if (!tg3_flag(tp, PCIX_MODE)) {
17358		if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17359		    tg3_asic_rev(tp) == ASIC_REV_5750)
17360			tp->dma_rwctrl |= 0x003f0000;
17361		else
17362			tp->dma_rwctrl |= 0x003f000f;
17363	} else {
17364		if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17365		    tg3_asic_rev(tp) == ASIC_REV_5704) {
17366			u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17367			u32 read_water = 0x7;
17368
17369			/* If the 5704 is behind the EPB bridge, we can
17370			 * do the less restrictive ONE_DMA workaround for
17371			 * better performance.
17372			 */
17373			if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17374			    tg3_asic_rev(tp) == ASIC_REV_5704)
17375				tp->dma_rwctrl |= 0x8000;
17376			else if (ccval == 0x6 || ccval == 0x7)
17377				tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17378
17379			if (tg3_asic_rev(tp) == ASIC_REV_5703)
17380				read_water = 4;
17381			/* Set bit 23 to enable PCIX hw bug fix */
17382			tp->dma_rwctrl |=
17383				(read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17384				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17385				(1 << 23);
17386		} else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17387			/* 5780 always in PCIX mode */
17388			tp->dma_rwctrl |= 0x00144000;
17389		} else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17390			/* 5714 always in PCIX mode */
17391			tp->dma_rwctrl |= 0x00148000;
17392		} else {
17393			tp->dma_rwctrl |= 0x001b000f;
17394		}
17395	}
17396	if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17397		tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17398
17399	if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17400	    tg3_asic_rev(tp) == ASIC_REV_5704)
17401		tp->dma_rwctrl &= 0xfffffff0;
17402
17403	if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17404	    tg3_asic_rev(tp) == ASIC_REV_5701) {
17405		/* Remove this if it causes problems for some boards. */
17406		tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17407
17408		/* On 5700/5701 chips, we need to set this bit.
17409		 * Otherwise the chip will issue cacheline transactions
17410		 * to streamable DMA memory with not all the byte
17411		 * enables turned on.  This is an error on several
17412		 * RISC PCI controllers, in particular sparc64.
17413		 *
17414		 * On 5703/5704 chips, this bit has been reassigned
17415		 * a different meaning.  In particular, it is used
17416		 * on those chips to enable a PCI-X workaround.
17417		 */
17418		tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17419	}
17420
17421	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17422
17423
17424	if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17425	    tg3_asic_rev(tp) != ASIC_REV_5701)
17426		goto out;
17427
17428	/* It is best to perform DMA test with maximum write burst size
17429	 * to expose the 5700/5701 write DMA bug.
17430	 */
17431	saved_dma_rwctrl = tp->dma_rwctrl;
17432	tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17433	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17434
17435	while (1) {
17436		u32 *p = buf, i;
17437
17438		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17439			p[i] = i;
17440
17441		/* Send the buffer to the chip. */
17442		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17443		if (ret) {
17444			dev_err(&tp->pdev->dev,
17445				"%s: Buffer write failed. err = %d\n",
17446				__func__, ret);
17447			break;
17448		}
17449
17450		/* Now read it back. */
17451		ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17452		if (ret) {
17453			dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17454				"err = %d\n", __func__, ret);
17455			break;
17456		}
17457
17458		/* Verify it. */
17459		for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17460			if (p[i] == i)
17461				continue;
17462
17463			if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17464			    DMA_RWCTRL_WRITE_BNDRY_16) {
17465				tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17466				tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17467				tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17468				break;
17469			} else {
17470				dev_err(&tp->pdev->dev,
17471					"%s: Buffer corrupted on read back! "
17472					"(%d != %d)\n", __func__, p[i], i);
17473				ret = -ENODEV;
17474				goto out;
17475			}
17476		}
17477
17478		if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17479			/* Success. */
17480			ret = 0;
17481			break;
17482		}
17483	}
17484	if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17485	    DMA_RWCTRL_WRITE_BNDRY_16) {
17486		/* DMA test passed without adjusting DMA boundary,
17487		 * now look for chipsets that are known to expose the
17488		 * DMA bug without failing the test.
17489		 */
17490		if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17491			tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17492			tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17493		} else {
17494			/* Safe to use the calculated DMA boundary. */
17495			tp->dma_rwctrl = saved_dma_rwctrl;
17496		}
17497
17498		tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17499	}
17500
17501out:
17502	dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17503out_nofree:
17504	return ret;
17505}
17506
17507static void tg3_init_bufmgr_config(struct tg3 *tp)
17508{
17509	if (tg3_flag(tp, 57765_PLUS)) {
17510		tp->bufmgr_config.mbuf_read_dma_low_water =
17511			DEFAULT_MB_RDMA_LOW_WATER_5705;
17512		tp->bufmgr_config.mbuf_mac_rx_low_water =
17513			DEFAULT_MB_MACRX_LOW_WATER_57765;
17514		tp->bufmgr_config.mbuf_high_water =
17515			DEFAULT_MB_HIGH_WATER_57765;
17516
17517		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17518			DEFAULT_MB_RDMA_LOW_WATER_5705;
17519		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17520			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17521		tp->bufmgr_config.mbuf_high_water_jumbo =
17522			DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17523	} else if (tg3_flag(tp, 5705_PLUS)) {
17524		tp->bufmgr_config.mbuf_read_dma_low_water =
17525			DEFAULT_MB_RDMA_LOW_WATER_5705;
17526		tp->bufmgr_config.mbuf_mac_rx_low_water =
17527			DEFAULT_MB_MACRX_LOW_WATER_5705;
17528		tp->bufmgr_config.mbuf_high_water =
17529			DEFAULT_MB_HIGH_WATER_5705;
17530		if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17531			tp->bufmgr_config.mbuf_mac_rx_low_water =
17532				DEFAULT_MB_MACRX_LOW_WATER_5906;
17533			tp->bufmgr_config.mbuf_high_water =
17534				DEFAULT_MB_HIGH_WATER_5906;
17535		}
17536
17537		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17538			DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17539		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17540			DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17541		tp->bufmgr_config.mbuf_high_water_jumbo =
17542			DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17543	} else {
17544		tp->bufmgr_config.mbuf_read_dma_low_water =
17545			DEFAULT_MB_RDMA_LOW_WATER;
17546		tp->bufmgr_config.mbuf_mac_rx_low_water =
17547			DEFAULT_MB_MACRX_LOW_WATER;
17548		tp->bufmgr_config.mbuf_high_water =
17549			DEFAULT_MB_HIGH_WATER;
17550
17551		tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17552			DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17553		tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17554			DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17555		tp->bufmgr_config.mbuf_high_water_jumbo =
17556			DEFAULT_MB_HIGH_WATER_JUMBO;
17557	}
17558
17559	tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17560	tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17561}
17562
17563static char *tg3_phy_string(struct tg3 *tp)
17564{
17565	switch (tp->phy_id & TG3_PHY_ID_MASK) {
17566	case TG3_PHY_ID_BCM5400:	return "5400";
17567	case TG3_PHY_ID_BCM5401:	return "5401";
17568	case TG3_PHY_ID_BCM5411:	return "5411";
17569	case TG3_PHY_ID_BCM5701:	return "5701";
17570	case TG3_PHY_ID_BCM5703:	return "5703";
17571	case TG3_PHY_ID_BCM5704:	return "5704";
17572	case TG3_PHY_ID_BCM5705:	return "5705";
17573	case TG3_PHY_ID_BCM5750:	return "5750";
17574	case TG3_PHY_ID_BCM5752:	return "5752";
17575	case TG3_PHY_ID_BCM5714:	return "5714";
17576	case TG3_PHY_ID_BCM5780:	return "5780";
17577	case TG3_PHY_ID_BCM5755:	return "5755";
17578	case TG3_PHY_ID_BCM5787:	return "5787";
17579	case TG3_PHY_ID_BCM5784:	return "5784";
17580	case TG3_PHY_ID_BCM5756:	return "5722/5756";
17581	case TG3_PHY_ID_BCM5906:	return "5906";
17582	case TG3_PHY_ID_BCM5761:	return "5761";
17583	case TG3_PHY_ID_BCM5718C:	return "5718C";
17584	case TG3_PHY_ID_BCM5718S:	return "5718S";
17585	case TG3_PHY_ID_BCM57765:	return "57765";
17586	case TG3_PHY_ID_BCM5719C:	return "5719C";
17587	case TG3_PHY_ID_BCM5720C:	return "5720C";
17588	case TG3_PHY_ID_BCM5762:	return "5762C";
17589	case TG3_PHY_ID_BCM8002:	return "8002/serdes";
17590	case 0:			return "serdes";
17591	default:		return "unknown";
17592	}
17593}
17594
17595static char *tg3_bus_string(struct tg3 *tp, char *str)
17596{
17597	if (tg3_flag(tp, PCI_EXPRESS)) {
17598		strcpy(str, "PCI Express");
17599		return str;
17600	} else if (tg3_flag(tp, PCIX_MODE)) {
17601		u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17602
17603		strcpy(str, "PCIX:");
17604
17605		if ((clock_ctrl == 7) ||
17606		    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17607		     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17608			strcat(str, "133MHz");
17609		else if (clock_ctrl == 0)
17610			strcat(str, "33MHz");
17611		else if (clock_ctrl == 2)
17612			strcat(str, "50MHz");
17613		else if (clock_ctrl == 4)
17614			strcat(str, "66MHz");
17615		else if (clock_ctrl == 6)
17616			strcat(str, "100MHz");
17617	} else {
17618		strcpy(str, "PCI:");
17619		if (tg3_flag(tp, PCI_HIGH_SPEED))
17620			strcat(str, "66MHz");
17621		else
17622			strcat(str, "33MHz");
17623	}
17624	if (tg3_flag(tp, PCI_32BIT))
17625		strcat(str, ":32-bit");
17626	else
17627		strcat(str, ":64-bit");
17628	return str;
17629}
17630
17631static void tg3_init_coal(struct tg3 *tp)
17632{
17633	struct ethtool_coalesce *ec = &tp->coal;
17634
17635	memset(ec, 0, sizeof(*ec));
17636	ec->cmd = ETHTOOL_GCOALESCE;
17637	ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17638	ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17639	ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17640	ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17641	ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17642	ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17643	ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17644	ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17645	ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17646
17647	if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17648				 HOSTCC_MODE_CLRTICK_TXBD)) {
17649		ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17650		ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17651		ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17652		ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17653	}
17654
17655	if (tg3_flag(tp, 5705_PLUS)) {
17656		ec->rx_coalesce_usecs_irq = 0;
17657		ec->tx_coalesce_usecs_irq = 0;
17658		ec->stats_block_coalesce_usecs = 0;
17659	}
17660}
17661
17662static int tg3_init_one(struct pci_dev *pdev,
17663				  const struct pci_device_id *ent)
17664{
17665	struct net_device *dev;
17666	struct tg3 *tp;
17667	int i, err;
17668	u32 sndmbx, rcvmbx, intmbx;
17669	char str[40];
17670	u64 dma_mask, persist_dma_mask;
17671	netdev_features_t features = 0;
17672
17673	err = pci_enable_device(pdev);
17674	if (err) {
17675		dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17676		return err;
17677	}
17678
17679	err = pci_request_regions(pdev, DRV_MODULE_NAME);
17680	if (err) {
17681		dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17682		goto err_out_disable_pdev;
17683	}
17684
17685	pci_set_master(pdev);
17686
17687	dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17688	if (!dev) {
17689		err = -ENOMEM;
17690		goto err_out_free_res;
17691	}
17692
17693	SET_NETDEV_DEV(dev, &pdev->dev);
17694
17695	tp = netdev_priv(dev);
17696	tp->pdev = pdev;
17697	tp->dev = dev;
17698	tp->rx_mode = TG3_DEF_RX_MODE;
17699	tp->tx_mode = TG3_DEF_TX_MODE;
17700	tp->irq_sync = 1;
17701	tp->pcierr_recovery = false;
17702
17703	if (tg3_debug > 0)
17704		tp->msg_enable = tg3_debug;
17705	else
17706		tp->msg_enable = TG3_DEF_MSG_ENABLE;
17707
17708	if (pdev_is_ssb_gige_core(pdev)) {
17709		tg3_flag_set(tp, IS_SSB_CORE);
17710		if (ssb_gige_must_flush_posted_writes(pdev))
17711			tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17712		if (ssb_gige_one_dma_at_once(pdev))
17713			tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17714		if (ssb_gige_have_roboswitch(pdev)) {
17715			tg3_flag_set(tp, USE_PHYLIB);
17716			tg3_flag_set(tp, ROBOSWITCH);
17717		}
17718		if (ssb_gige_is_rgmii(pdev))
17719			tg3_flag_set(tp, RGMII_MODE);
17720	}
17721
17722	/* The word/byte swap controls here control register access byte
17723	 * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17724	 * setting below.
17725	 */
17726	tp->misc_host_ctrl =
17727		MISC_HOST_CTRL_MASK_PCI_INT |
17728		MISC_HOST_CTRL_WORD_SWAP |
17729		MISC_HOST_CTRL_INDIR_ACCESS |
17730		MISC_HOST_CTRL_PCISTATE_RW;
17731
17732	/* The NONFRM (non-frame) byte/word swap controls take effect
17733	 * on descriptor entries, anything which isn't packet data.
17734	 *
17735	 * The StrongARM chips on the board (one for tx, one for rx)
17736	 * are running in big-endian mode.
17737	 */
17738	tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17739			GRC_MODE_WSWAP_NONFRM_DATA);
17740#ifdef __BIG_ENDIAN
17741	tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17742#endif
17743	spin_lock_init(&tp->lock);
17744	spin_lock_init(&tp->indirect_lock);
17745	INIT_WORK(&tp->reset_task, tg3_reset_task);
17746
17747	tp->regs = pci_ioremap_bar(pdev, BAR_0);
17748	if (!tp->regs) {
17749		dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17750		err = -ENOMEM;
17751		goto err_out_free_dev;
17752	}
17753
17754	if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17755	    tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17756	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17757	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17758	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17759	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17760	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17761	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17762	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17763	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17764	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17765	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17766	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17767	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17768	    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17769		tg3_flag_set(tp, ENABLE_APE);
17770		tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17771		if (!tp->aperegs) {
17772			dev_err(&pdev->dev,
17773				"Cannot map APE registers, aborting\n");
17774			err = -ENOMEM;
17775			goto err_out_iounmap;
17776		}
17777	}
17778
17779	tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17780	tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17781
17782	dev->ethtool_ops = &tg3_ethtool_ops;
17783	dev->watchdog_timeo = TG3_TX_TIMEOUT;
17784	dev->netdev_ops = &tg3_netdev_ops;
17785	dev->irq = pdev->irq;
17786
17787	err = tg3_get_invariants(tp, ent);
17788	if (err) {
17789		dev_err(&pdev->dev,
17790			"Problem fetching invariants of chip, aborting\n");
17791		goto err_out_apeunmap;
17792	}
17793
17794	/* The EPB bridge inside 5714, 5715, and 5780 and any
17795	 * device behind the EPB cannot support DMA addresses > 40-bit.
17796	 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17797	 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17798	 * do DMA address check in tg3_start_xmit().
17799	 */
17800	if (tg3_flag(tp, IS_5788))
17801		persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17802	else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17803		persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17804#ifdef CONFIG_HIGHMEM
17805		dma_mask = DMA_BIT_MASK(64);
17806#endif
17807	} else
17808		persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17809
17810	/* Configure DMA attributes. */
17811	if (dma_mask > DMA_BIT_MASK(32)) {
17812		err = pci_set_dma_mask(pdev, dma_mask);
17813		if (!err) {
17814			features |= NETIF_F_HIGHDMA;
17815			err = pci_set_consistent_dma_mask(pdev,
17816							  persist_dma_mask);
17817			if (err < 0) {
17818				dev_err(&pdev->dev, "Unable to obtain 64 bit "
17819					"DMA for consistent allocations\n");
17820				goto err_out_apeunmap;
17821			}
17822		}
17823	}
17824	if (err || dma_mask == DMA_BIT_MASK(32)) {
17825		err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
17826		if (err) {
17827			dev_err(&pdev->dev,
17828				"No usable DMA configuration, aborting\n");
17829			goto err_out_apeunmap;
17830		}
17831	}
17832
17833	tg3_init_bufmgr_config(tp);
17834
17835	/* 5700 B0 chips do not support checksumming correctly due
17836	 * to hardware bugs.
17837	 */
17838	if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17839		features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17840
17841		if (tg3_flag(tp, 5755_PLUS))
17842			features |= NETIF_F_IPV6_CSUM;
17843	}
17844
17845	/* TSO is on by default on chips that support hardware TSO.
17846	 * Firmware TSO on older chips gives lower performance, so it
17847	 * is off by default, but can be enabled using ethtool.
17848	 */
17849	if ((tg3_flag(tp, HW_TSO_1) ||
17850	     tg3_flag(tp, HW_TSO_2) ||
17851	     tg3_flag(tp, HW_TSO_3)) &&
17852	    (features & NETIF_F_IP_CSUM))
17853		features |= NETIF_F_TSO;
17854	if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17855		if (features & NETIF_F_IPV6_CSUM)
17856			features |= NETIF_F_TSO6;
17857		if (tg3_flag(tp, HW_TSO_3) ||
17858		    tg3_asic_rev(tp) == ASIC_REV_5761 ||
17859		    (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17860		     tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17861		    tg3_asic_rev(tp) == ASIC_REV_5785 ||
17862		    tg3_asic_rev(tp) == ASIC_REV_57780)
17863			features |= NETIF_F_TSO_ECN;
17864	}
17865
17866	dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17867			 NETIF_F_HW_VLAN_CTAG_RX;
17868	dev->vlan_features |= features;
17869
17870	/*
17871	 * Add loopback capability only for a subset of devices that support
17872	 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17873	 * loopback for the remaining devices.
17874	 */
17875	if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17876	    !tg3_flag(tp, CPMU_PRESENT))
17877		/* Add the loopback capability */
17878		features |= NETIF_F_LOOPBACK;
17879
17880	dev->hw_features |= features;
17881	dev->priv_flags |= IFF_UNICAST_FLT;
17882
17883	/* MTU range: 60 - 9000 or 1500, depending on hardware */
17884	dev->min_mtu = TG3_MIN_MTU;
17885	dev->max_mtu = TG3_MAX_MTU(tp);
17886
17887	if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17888	    !tg3_flag(tp, TSO_CAPABLE) &&
17889	    !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17890		tg3_flag_set(tp, MAX_RXPEND_64);
17891		tp->rx_pending = 63;
17892	}
17893
17894	err = tg3_get_device_address(tp);
17895	if (err) {
17896		dev_err(&pdev->dev,
17897			"Could not obtain valid ethernet address, aborting\n");
17898		goto err_out_apeunmap;
17899	}
17900
17901	intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17902	rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17903	sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17904	for (i = 0; i < tp->irq_max; i++) {
17905		struct tg3_napi *tnapi = &tp->napi[i];
17906
17907		tnapi->tp = tp;
17908		tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17909
17910		tnapi->int_mbox = intmbx;
17911		if (i <= 4)
17912			intmbx += 0x8;
17913		else
17914			intmbx += 0x4;
17915
17916		tnapi->consmbox = rcvmbx;
17917		tnapi->prodmbox = sndmbx;
17918
17919		if (i)
17920			tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17921		else
17922			tnapi->coal_now = HOSTCC_MODE_NOW;
17923
17924		if (!tg3_flag(tp, SUPPORT_MSIX))
17925			break;
17926
17927		/*
17928		 * If we support MSIX, we'll be using RSS.  If we're using
17929		 * RSS, the first vector only handles link interrupts and the
17930		 * remaining vectors handle rx and tx interrupts.  Reuse the
17931		 * mailbox values for the next iteration.  The values we setup
17932		 * above are still useful for the single vectored mode.
17933		 */
17934		if (!i)
17935			continue;
17936
17937		rcvmbx += 0x8;
17938
17939		if (sndmbx & 0x4)
17940			sndmbx -= 0x4;
17941		else
17942			sndmbx += 0xc;
17943	}
17944
17945	/*
17946	 * Reset chip in case UNDI or EFI driver did not shutdown
17947	 * DMA self test will enable WDMAC and we'll see (spurious)
17948	 * pending DMA on the PCI bus at that point.
17949	 */
17950	if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17951	    (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17952		tg3_full_lock(tp, 0);
17953		tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17954		tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17955		tg3_full_unlock(tp);
17956	}
17957
17958	err = tg3_test_dma(tp);
17959	if (err) {
17960		dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17961		goto err_out_apeunmap;
17962	}
17963
17964	tg3_init_coal(tp);
17965
17966	pci_set_drvdata(pdev, dev);
17967
17968	if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17969	    tg3_asic_rev(tp) == ASIC_REV_5720 ||
17970	    tg3_asic_rev(tp) == ASIC_REV_5762)
17971		tg3_flag_set(tp, PTP_CAPABLE);
17972
17973	tg3_timer_init(tp);
17974
17975	tg3_carrier_off(tp);
17976
17977	err = register_netdev(dev);
17978	if (err) {
17979		dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17980		goto err_out_apeunmap;
17981	}
17982
17983	if (tg3_flag(tp, PTP_CAPABLE)) {
17984		tg3_ptp_init(tp);
17985		tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17986						   &tp->pdev->dev);
17987		if (IS_ERR(tp->ptp_clock))
17988			tp->ptp_clock = NULL;
17989	}
17990
17991	netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17992		    tp->board_part_number,
17993		    tg3_chip_rev_id(tp),
17994		    tg3_bus_string(tp, str),
17995		    dev->dev_addr);
17996
17997	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17998		char *ethtype;
17999
18000		if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
18001			ethtype = "10/100Base-TX";
18002		else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
18003			ethtype = "1000Base-SX";
18004		else
18005			ethtype = "10/100/1000Base-T";
18006
18007		netdev_info(dev, "attached PHY is %s (%s Ethernet) "
18008			    "(WireSpeed[%d], EEE[%d])\n",
18009			    tg3_phy_string(tp), ethtype,
18010			    (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
18011			    (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
18012	}
18013
18014	netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
18015		    (dev->features & NETIF_F_RXCSUM) != 0,
18016		    tg3_flag(tp, USE_LINKCHG_REG) != 0,
18017		    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
18018		    tg3_flag(tp, ENABLE_ASF) != 0,
18019		    tg3_flag(tp, TSO_CAPABLE) != 0);
18020	netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
18021		    tp->dma_rwctrl,
18022		    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
18023		    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
18024
18025	pci_save_state(pdev);
18026
18027	return 0;
18028
18029err_out_apeunmap:
18030	if (tp->aperegs) {
18031		iounmap(tp->aperegs);
18032		tp->aperegs = NULL;
18033	}
18034
18035err_out_iounmap:
18036	if (tp->regs) {
18037		iounmap(tp->regs);
18038		tp->regs = NULL;
18039	}
18040
18041err_out_free_dev:
18042	free_netdev(dev);
18043
18044err_out_free_res:
18045	pci_release_regions(pdev);
18046
18047err_out_disable_pdev:
18048	if (pci_is_enabled(pdev))
18049		pci_disable_device(pdev);
18050	return err;
18051}
18052
18053static void tg3_remove_one(struct pci_dev *pdev)
18054{
18055	struct net_device *dev = pci_get_drvdata(pdev);
18056
18057	if (dev) {
18058		struct tg3 *tp = netdev_priv(dev);
18059
18060		tg3_ptp_fini(tp);
18061
18062		release_firmware(tp->fw);
18063
18064		tg3_reset_task_cancel(tp);
18065
18066		if (tg3_flag(tp, USE_PHYLIB)) {
18067			tg3_phy_fini(tp);
18068			tg3_mdio_fini(tp);
18069		}
18070
18071		unregister_netdev(dev);
18072		if (tp->aperegs) {
18073			iounmap(tp->aperegs);
18074			tp->aperegs = NULL;
18075		}
18076		if (tp->regs) {
18077			iounmap(tp->regs);
18078			tp->regs = NULL;
18079		}
18080		free_netdev(dev);
18081		pci_release_regions(pdev);
18082		pci_disable_device(pdev);
18083	}
18084}
18085
18086#ifdef CONFIG_PM_SLEEP
18087static int tg3_suspend(struct device *device)
18088{
18089	struct net_device *dev = dev_get_drvdata(device);
18090	struct tg3 *tp = netdev_priv(dev);
18091	int err = 0;
18092
18093	rtnl_lock();
18094
18095	if (!netif_running(dev))
18096		goto unlock;
18097
18098	tg3_reset_task_cancel(tp);
18099	tg3_phy_stop(tp);
18100	tg3_netif_stop(tp);
18101
18102	tg3_timer_stop(tp);
18103
18104	tg3_full_lock(tp, 1);
18105	tg3_disable_ints(tp);
18106	tg3_full_unlock(tp);
18107
18108	netif_device_detach(dev);
18109
18110	tg3_full_lock(tp, 0);
18111	tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
18112	tg3_flag_clear(tp, INIT_COMPLETE);
18113	tg3_full_unlock(tp);
18114
18115	err = tg3_power_down_prepare(tp);
18116	if (err) {
18117		int err2;
18118
18119		tg3_full_lock(tp, 0);
18120
18121		tg3_flag_set(tp, INIT_COMPLETE);
18122		err2 = tg3_restart_hw(tp, true);
18123		if (err2)
18124			goto out;
18125
18126		tg3_timer_start(tp);
18127
18128		netif_device_attach(dev);
18129		tg3_netif_start(tp);
18130
18131out:
18132		tg3_full_unlock(tp);
18133
18134		if (!err2)
18135			tg3_phy_start(tp);
18136	}
18137
18138unlock:
18139	rtnl_unlock();
18140	return err;
18141}
18142
18143static int tg3_resume(struct device *device)
18144{
18145	struct net_device *dev = dev_get_drvdata(device);
18146	struct tg3 *tp = netdev_priv(dev);
18147	int err = 0;
18148
18149	rtnl_lock();
18150
18151	if (!netif_running(dev))
18152		goto unlock;
18153
18154	netif_device_attach(dev);
18155
18156	tg3_full_lock(tp, 0);
18157
18158	tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18159
18160	tg3_flag_set(tp, INIT_COMPLETE);
18161	err = tg3_restart_hw(tp,
18162			     !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18163	if (err)
18164		goto out;
18165
18166	tg3_timer_start(tp);
18167
18168	tg3_netif_start(tp);
18169
18170out:
18171	tg3_full_unlock(tp);
18172
18173	if (!err)
18174		tg3_phy_start(tp);
18175
18176unlock:
18177	rtnl_unlock();
18178	return err;
18179}
18180#endif /* CONFIG_PM_SLEEP */
18181
18182static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18183
18184static void tg3_shutdown(struct pci_dev *pdev)
18185{
18186	struct net_device *dev = pci_get_drvdata(pdev);
18187	struct tg3 *tp = netdev_priv(dev);
18188
18189	tg3_reset_task_cancel(tp);
18190
18191	rtnl_lock();
18192
18193	netif_device_detach(dev);
18194
18195	if (netif_running(dev))
18196		dev_close(dev);
18197
18198	if (system_state == SYSTEM_POWER_OFF)
18199		tg3_power_down(tp);
18200
18201	rtnl_unlock();
18202
18203	pci_disable_device(pdev);
18204}
18205
18206/**
18207 * tg3_io_error_detected - called when PCI error is detected
18208 * @pdev: Pointer to PCI device
18209 * @state: The current pci connection state
18210 *
18211 * This function is called after a PCI bus error affecting
18212 * this device has been detected.
18213 */
18214static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18215					      pci_channel_state_t state)
18216{
18217	struct net_device *netdev = pci_get_drvdata(pdev);
18218	struct tg3 *tp = netdev_priv(netdev);
18219	pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18220
18221	netdev_info(netdev, "PCI I/O error detected\n");
18222
18223	/* Want to make sure that the reset task doesn't run */
18224	tg3_reset_task_cancel(tp);
18225
18226	rtnl_lock();
18227
18228	/* Could be second call or maybe we don't have netdev yet */
18229	if (!netdev || tp->pcierr_recovery || !netif_running(netdev))
18230		goto done;
18231
18232	/* We needn't recover from permanent error */
18233	if (state == pci_channel_io_frozen)
18234		tp->pcierr_recovery = true;
18235
18236	tg3_phy_stop(tp);
18237
18238	tg3_netif_stop(tp);
18239
18240	tg3_timer_stop(tp);
18241
18242	netif_device_detach(netdev);
18243
18244	/* Clean up software state, even if MMIO is blocked */
18245	tg3_full_lock(tp, 0);
18246	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18247	tg3_full_unlock(tp);
18248
18249done:
18250	if (state == pci_channel_io_perm_failure) {
18251		if (netdev) {
18252			tg3_napi_enable(tp);
18253			dev_close(netdev);
18254		}
18255		err = PCI_ERS_RESULT_DISCONNECT;
18256	} else {
18257		pci_disable_device(pdev);
18258	}
18259
18260	rtnl_unlock();
18261
18262	return err;
18263}
18264
18265/**
18266 * tg3_io_slot_reset - called after the pci bus has been reset.
18267 * @pdev: Pointer to PCI device
18268 *
18269 * Restart the card from scratch, as if from a cold-boot.
18270 * At this point, the card has exprienced a hard reset,
18271 * followed by fixups by BIOS, and has its config space
18272 * set up identically to what it was at cold boot.
18273 */
18274static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18275{
18276	struct net_device *netdev = pci_get_drvdata(pdev);
18277	struct tg3 *tp = netdev_priv(netdev);
18278	pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18279	int err;
18280
18281	rtnl_lock();
18282
18283	if (pci_enable_device(pdev)) {
18284		dev_err(&pdev->dev,
18285			"Cannot re-enable PCI device after reset.\n");
18286		goto done;
18287	}
18288
18289	pci_set_master(pdev);
18290	pci_restore_state(pdev);
18291	pci_save_state(pdev);
18292
18293	if (!netdev || !netif_running(netdev)) {
18294		rc = PCI_ERS_RESULT_RECOVERED;
18295		goto done;
18296	}
18297
18298	err = tg3_power_up(tp);
18299	if (err)
18300		goto done;
18301
18302	rc = PCI_ERS_RESULT_RECOVERED;
18303
18304done:
18305	if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18306		tg3_napi_enable(tp);
18307		dev_close(netdev);
18308	}
18309	rtnl_unlock();
18310
18311	return rc;
18312}
18313
18314/**
18315 * tg3_io_resume - called when traffic can start flowing again.
18316 * @pdev: Pointer to PCI device
18317 *
18318 * This callback is called when the error recovery driver tells
18319 * us that its OK to resume normal operation.
18320 */
18321static void tg3_io_resume(struct pci_dev *pdev)
18322{
18323	struct net_device *netdev = pci_get_drvdata(pdev);
18324	struct tg3 *tp = netdev_priv(netdev);
18325	int err;
18326
18327	rtnl_lock();
18328
18329	if (!netdev || !netif_running(netdev))
18330		goto done;
18331
18332	tg3_full_lock(tp, 0);
18333	tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18334	tg3_flag_set(tp, INIT_COMPLETE);
18335	err = tg3_restart_hw(tp, true);
18336	if (err) {
18337		tg3_full_unlock(tp);
18338		netdev_err(netdev, "Cannot restart hardware after reset.\n");
18339		goto done;
18340	}
18341
18342	netif_device_attach(netdev);
18343
18344	tg3_timer_start(tp);
18345
18346	tg3_netif_start(tp);
18347
18348	tg3_full_unlock(tp);
18349
18350	tg3_phy_start(tp);
18351
18352done:
18353	tp->pcierr_recovery = false;
18354	rtnl_unlock();
18355}
18356
18357static const struct pci_error_handlers tg3_err_handler = {
18358	.error_detected	= tg3_io_error_detected,
18359	.slot_reset	= tg3_io_slot_reset,
18360	.resume		= tg3_io_resume
18361};
18362
18363static struct pci_driver tg3_driver = {
18364	.name		= DRV_MODULE_NAME,
18365	.id_table	= tg3_pci_tbl,
18366	.probe		= tg3_init_one,
18367	.remove		= tg3_remove_one,
18368	.err_handler	= &tg3_err_handler,
18369	.driver.pm	= &tg3_pm_ops,
18370	.shutdown	= tg3_shutdown,
18371};
18372
18373module_pci_driver(tg3_driver);
18374